Big Faceless Graph Library Changelog
CHANGELOG for Big Faceless Graph Library ---------------------------------------- The version numbering scheme in use across all our products is designed to simplify upgrade management for developers: * A "patch level" change indicates a minor feature or bugfix. Methods MAY have been added to the API, but none have been removed. eg. Code written for version 1.0.0 will work on version 1.0.9 * A "minor level" change indicates a change to the API which may require some code changes. API changes are minor, but are necessary for bug fixes or new features. eg. Code written for version 1.0.3 MAY require changes for 1.1 * A "major level" indicates big changes to the API or considerable extra functionality. Developers can expect significant changes to bring their code up to date. eg. Code written for version 1.1 is unlikely to work under 2.0 ----------------------------------------------------------------------------- 2.4.9 (released 2023-05-25) --------------------------- * Minimum version is now Java 7, and tested through to Java 17 * Removed Flash output support * Finally added generics to all methods * Fixed "linethickness" (in wall paint) and "fixedaspectratio" attributes in XML interface. * Added Graph.setLocale(), set via the "xml:lang" attribute in the XML interface, and use it to control formatting of labels in the graph. * Added DateAxis.setFit() method to give more control over which dates are displayed on the axis. * Remove leading/trailing spaces from labels * Line markers can now have their line-thickness and dash patterns set * Dashed lines were not being joined correctly, which resulted in visual jumps when the lengths of each segment was shorter than the width of the line * Fixed cuts across gradient transations where one of the colors has an alpha value. * Fixed alpha colors in SVG * Fixed redirects from HTTP to HTTPS when loading images * Added AreaSeries.setAwayFromZero, to control how negative and positive values in an AreaSeries are added together. Mainly for compatibility with other software and with our versions of our API prior to 2.4.7 * The "org.faceless.graph2.tag.ServletContext" parameter that can be set when using the Tag library can now include a hostname, to allow this to work behind a proxy. 2.4.8 (released 2016-01-22) --------------------------- * Added option to use "backup fonts", by specifying a comma-separated list of font family names in the XML or by using the TextStyle.addBackupFont method. Mainly of use for PDF Output but it will work for any. * Fixed ambiguity in XML syntax when parsing a date that can also be a number, eg "2001". If used on a date axis, it's always a date. * Added support for texture-paint to PDF Output * Corrected bold-oblique Courier font, which was failing in PDF Output * Add support for hyperlinks in the PDF output via the new "PDFEmbedder" class. This involved moving the "getAreas" method on ImageOutput has been moved to its superclass, Output. The latest Report Generator will need to be used to take advantage of these changes. * Added "normal" to list of acceptable font styles in XML syntax. * Added "alt" to list parameters for all hyperlinked area in XML syntax. * Some minor graphical improvements. 2.4.7 (released 2015-07-07) --------------------------- * Added Trend-line plotting with "TrendSeries" and matching <trendseries> XML tag * AreaGraph can now plot stacked negative values as well as positive * Fixed drawing of "edge-on" faces, primarily for the vector formats SVG and PDF * Added "box" alignment for axes labels, which allows alignment to be based on all the values in the keys, rather than just individual items. See the final example in the documentation for demo. * The Style and TextStyle classes (and, consequently, most XML items) can have an "overflow" attribute set to "true" to cause them not to constibute to the sizing algorithm for the graphs. In practice this should be used with caution and limited to lines, markers or text. * The <stripe> has a "lineaxes" attribute which can be set to cause the lines to only be drawn against the main, alternate or both (the default) axes. * Fixed some layout issues added in the previous release which only applied to the API use. * "currency" axes in the XML are correctly formatted using the locale. * Some minor graphical improvements. 2.4.6 (released 2015-05-06) --------------------------- * Grid lines on the back and side walls of the Axes Graph can be specified with the new "StripedPaint" class, which is less clumsy than the existing setWallPaint methods. Likewise in the XML the new <stripe> element can be used * PieGraphs have a new "innerradius" and "outerradius" concept for each slice, to allow each section of the pie to have a different ring diameter. * PieGraphs can have general text/markers added to them by the new addMarker or addPolarMarker methods, and lines can be added with the new addLine method. The XML interface allows this by adding a standard <label> or <line> to the XML. * Markers and Labels added to a PieGraph can have their alignment set to override the internal algorithm where required. * The "zrotation" field on a PieGraph can be set to NaN to auto-rotate the graph; the final rotation will be the one that results in the biggest graph. * The "size" value of the graph and the (x,y) offset can be retrieved from the new Graph.getActualZoom and Graph.getActualPosition methods. These can then be passed into the Graph.setFixedSize() method to duplicate the graph's scaling, reject a graph for being too small, or any other purpose. * The Graph.isOverlapping() method will return true if the layout involved text that might overlap. The graph should be visually inspected in this case. * The XML accepts the "xml:lang" attribute on all elements to set the locale for a graph, or part of a graph. * Improvements to rendering polylines in bitmap and PDF output. 2.4.5 (released 2013-11-20) --------------------------- * Added the Graph.setOption method, which will allow some control over the rendering if required. * Spot colors and CIELab colors can be used in graphs, although when writing to anything but PDF they will be converted to RGB. Requires the "bfopdf.jar" file from the BFO PDF Library to be in the classpath. * Fixed gradients so they work with CMYK colors as well. * The Key (xml: <key>) now takes a padding option to control positioning within the Graph. * Improvements to rendering when drawing round-bars in bar charts. * Don't set the DPI attribute in the PNG unless it's specified * Markers weren't being drawn properly to PDFOutput. * Added "rectWWWxHHH" as a marker type, which can be used to create rectangular markers of a particular aspect ratio. * Fixed AxesGraph.getSeries() to return correct series from inside a MultiBarSeries or StackedBarSeries 2.4.4 (released 2011-09-15) --------------------------- * Fixed some issues with FlashOutput - path drawing had problems, and images would cause exceptions under Java 7 * Fixed compatibility issue with Graph Library V1 in Report Generator. 2.4.3 (released 2011-09-12) --------------------------- * Removed legacy code - Java 1.4 or later is now required * Improved algorithm to prevent overlaps of labels when drawing PieGraphs * Fixed adding "line" or "box" to a "stackedbarseries" in XML interface, and allowed adding of image to key. * Corrected Series.outputToSeries() values for when graph is rotated in 3D * Fixed typo in JavaScript which could cause HTML mouseovers to fail on a stacked bar graph. * Corrected some typos in taglib.tld * Fixed some bugs in PDF output * Fixes to SOAP requests 2.4.2 (released 2009-10-14) --------------------------- * Updated tag library to JSP 1.2 specification. * Added support for storing GraphContext in sessions, so that graph web app can be deployed in a cluster. This is done by setting the "org.faceless.graph2.UseSession" context-parameter to "true". * Added support for new Java 1.6 java.awt.LinearGradientPaint to XML. This is done by setting the Color attribute to match the format 'gradient(c1,v1, c2,v2, [c3,v3, ...])', where 'cn' is a Color and 'vn' is the value where that color should be set. See "xml/linearexample.java" and "LinearGradientExample.java" in the examples folder. * Added new "svg-sniff" format which will create SVG graphs in a manner that works with IE8. * Added hsv() (aka hsb) to the ways of specifying a color in the XML. * Correctly set external fonts in graphs created by the Report Generator. * Use of pattern() colors in PDF graphs now follow the "pattern" format defined in the Report Generator. * Fixed handling of "dpi" XML attribute. * Don't generate client-side JavaScript from the XML graphs unless required. * Changed AreaSeries to paint gradients vertically, rather than diagonally. * Change DateAxis so that it respects user set timezone even when the format doesn't contain time information. * The "key" now respects font attributes under all circumstances. 2.4.1 (released 2009-04-30) --------------------------- * Fixed mouseovers relating to to multi-bar series in the tag library * Fixed build issue bug that was causing a required class to be obfuscated away. This was sometimes causing mouseover issues on the first graph. 2.4 (released 2009-03-24) --------------------------- * INCOMPATIBLE CHANGE: Changed method signature of Key.addCustom(Marker) to accept an AbstractMarker instead, allowing Text items to be used as Markers. No code changes are required although code calling this method will need to be recompiled. * Added the ability to create "funnel" and "pyramid" charts, via the new setBarWidth(float, float) methods in GeneralBarSeries and the "topbarwidth" and "bottombarwidth" attributes in XML. * Added the ability to place gaps between the bars in a Stacked Bar Series * Added "autocolors" feature to Graphs, to auto-choose colors in a certain range. * Changed the way URLs for generated images are constructed by the tag library to ensure they're not guessable, and added the "bfgimagepath" property to the pageContext so that it's possible to retrieve the image URL. * Correctly lay out multi-line text in key * Added ImageOutput.writePNG(OutputStream, numcolors, dpi) method to create a PNG with resolution information * When plotting dates on graph, ensured it's always possible to specify them as ISO8601. Needed for some special cases when mixing bars and lines. * Resolved incorrect 3D sort of markers drawn in front of bars for some graphs * Resolved rare "Two faces with the same sort order" error with certain data * Redesigned the Web Service API and made it public, to ease customization. 2.3.5 (released 2008-07-03) --------------------------- * Size items in key based on their font size. * Correct position external labels on a PieGraph with zrotation. * Added ability to set font size on key from JSP (taglib definition was incorrect). * Performance improvements made to the 3D engine, for quicker rendering of graphs with thousands of polygons. * Added a main class to the Jar, for quick conversions from XML to a Graph. "java -jar bfograph.jar" for more info * Fixed minor bugs rendering PieGraphs with zrotation or when rendering to PDF. * Fixed rounding error sometimes dropping the last point in FunctionLineSeries. 2.3.4 (released 2008-04-18) --------------------------- * Modified the FunctionLineSeries slightly - there is a now a "complete" method for subclasses, and the "setLineSeries" method can retrieve the data from a LineSeries. Added a matching "series" attribute in the XML. * Now you can specify a locale when formatting dates in XML, eg "date(dd-MMM-yyyy,sv)". * Fixed "missing bars" problems when plotting bars against a date axis and specifying a "barwidth" on the date axis, or when bars do not match every date. * Improvements to values displayed on the rollovers for line graphs, for very large values. * Correctly position labels on MultiBar graphs. * NaN values can be used in BoxWhisker series * The Graph Library can now be licensed using a license file. 2.3.3 (released 2007-11-08) --------------------------- * Fixed position of BarSeries markers when plotted against a DateAxis. * Fixed problem when plotting dates on one axis against times on another in non-UTC timezones. * Fixed exception when plotting striped backing paints against a top axis. * Fixed NaN error when plotting a LineGraph with only a single point. 2.3.2 (released 2007-08-03) --------------------------- * Display order of markers on a non-3D graph is now deterministic * Markers, images and labels on bar series appear in the correct place if the order of the bars is changed between series, or if the series is part of a stack barseries * <label> tag can be made a hyperlink - now accepts the href, onmouseover etc. attributes * It's possible to cause the GraphServlet to reject requests based on HTTP headers, via the "headercheck.N" init-parameters. 2.3.1 (released 2007-06-05) --------------------------- * Added Dial Graphs * Rewrote the DateAxis class to handle several obscure edge cases * Added "xml-raw-form" and "xml-html-form" methods to the Web Service, which allows the XML to be passed in as a parameter called "xml". * Fixed sizing of graphs with very small (< 0.1) ranges on the Y axis * Improved layout of bars when plotting against a numeric X axis or when there are stripes on the back wall. * Fixed mouseovers for Spline and FunctionSeries * Fixed taglib bug when two graphs on the same page had the same ID attribute * Fixed typo preventing "ondblclick" from working in tag library. 2.3 (released 2006-12-21) --------------------------- * POSSIBLY INCOMPATIBLE CHANGE: Zero is now an acceptable value for Pie Graphs. To remove a point altogether, you can still use NaN. * Added "barwidth" attribute to "date" axis (and DateAxis.setBarWidth method). This is to allow plotting of bars of a specific width against a date axis - for example, 5 minutes wide. * Stacked bar series now works properly if some of the values are negative * Fixed missing line on area graph under very specific circumstances * Cache images loaded from URLs by the XML parser. * Added support for padding and alignment for the Image class / "image" tag. * Added missing "steps" attribute to function line series, to control how many steps it should be drawn in. * Improved bar positions when plotting monthly bars against a date axis. * Fixed positioning of labels and markers when drawn on a multi-bar series. * Added Series.addBox() method and "box" tag, which is very similar to the "line" tag except for drawing arbitrary boxes. * Remove rare ConcurrentModificationException when drawing multiple graphs under specific circumstances 2.2.4 (released 2006-08-14) --------------------------- * Improvements to bfograph.js which now have it working correctly under XHTML "strict" mode, including in IE. Thanks to Thomas Moorer for his suggestions. * Now runs under Java 1.3 except for the Image class and <image> tag, which require javax.imageio * Better default font on UNIX for ImageOutput - uses Helvetica or Arial if installed. * Restyled the documentation for better layout in all browsers 2.2.3 (released 2006-07-26) --------------------------- * Some minor changes which allow these Graphs to be easily embedded in our Report Generator (under certain conditions). 2.2.2 (released 2006-06-14) --------------------------- * Fixed some errors with SVG graphs which caused NullPointerExceptions on some (strangely not all) platforms. * Fixed bug in FlashOutput when fonts weren't specified correctly. * Corrected minimum value of area series - change made in last release broke in some situations. * Fixed rollovers using the bfgPopup() method in Safari if the SVG plugin wasn't installed. * Now displays line series where all the Y points are identical and the axis is a null axis. 2.2.1 (released 2006-05-17) --------------------------- * Can now specify colors in XML graphs using the CSS3 syntax rgb(), rgba(), hsl() and hsla() * Correctly scale graphs when one or all axes is a Gap or Log axis. * Added setTimeZone to DateAxis, and allow it to be specified in the XML, eg. "date(dd-MMM-yyyy, UTC)" * Corrected rendering of area graphs when min value > 0 * Fixed drawing of lineseries when there are no data points (only markers) * Tag Library interface now plays nicely when interleaved with other tag libraries (eg JSTL). 2.2 (released 2006-04-13) --------------------------- * Can now set the width and depth on a StackedBarSeries and MultiBarSeries independently of their children. This is a change from previous versions, where setting the width on the <multibarseries> would effectively set the width for each of their children as well. To update your XML, simply remove any "barwidth" and "bardepth" attributes on a "barseries" inside a "multibarseries", and ensure the value is set on the "multibarseries" element. * Added the BoxWhiskerSeries class and a "boxwhiskerseries" element * Improvements to the spacing of the DateAxis when plotting small ranges of months. 2.1.3 (released 2006-03-31) --------------------------- * Now displays line series where all the Y points are identical. * Enable manual addition of sub-series in a stacked or multi bar series to the key. * "width" and "height" are no longer mandatory attributes to the XML. * Correctly handle the case where multiple graphs on the same page have the same ID in the tag library. 2.1.2 (released 2006-02-16) --------------------------- * Fixed plotting of bars against a Date axis displaying only months. * Improved layout of keys that can be displayed in a single row. * Added "interrupt" and "isInterrupted" methods to Graph, to interrupt rendering from another thread. * Fixed license key activation when creating graphs from web-services. 2.1.1 (released 2006-01-18) --------------------------- * Reduced the "stepping" that was visible on shaded 3D PieGraphs. The polygons used to make up the graph are now drawn at 1 degree intervals rather than 5 degree, althogh this can be altered by calling the new PieGraph.setSliceSize method. See also the GeneralBarSeries.setRoundBars(double) method. * Added the Style.createPaint() method, and a number of 2-color patterns to go with it, to make drawing graphs in black-and-white environments much easier. 2.1 (released 2005-12-13) --------------------------- * INCOMPATIBLE CHANGE: Slightly changed the syntax of the SOAP calls due to WSDL restrictions - we had to add additional top-level element. * Added support for interactive graphs to SVG. The JavaScript is identical to that used for interactive bitmap images. * Added "doughnut" attribute to PieGraph, to draw doughnut graphs. * Added Image class (and <image> tag), to use bitmap images as markers on graphs. * Added callouts on PieGraphs, to draw lines to the markers. Also there were considerable improvements to the overlap algorithms, so labels on narrow slices should no longer overlap. * Added "bfograph.xsd", an XML Schema to validate the XML, and "bfograph.wsdl", a WSDL file for calling the SOAP servlet. * Fixed typo in MIME-type of Flash output in Tag library, was causing flash to fail. Also added <embed> tag for SVG embedding in older browsers. * PieGraphs can now have more than one label per slice. * Fixed padding on rotated text and markers, including positioning of right axis labels. * A couple of minor drawing detail changes to SVG and Flash output * Added option of setting a border around a Marker * Corrections to min/max settings on Log axis 2.0.3 (released 2005-10-10) --------------------------- * Added Web Service to create graphs, either via SOAP requests or raw XML. See the userguide for more info. * The XML now accepts the xml:base attribute, to set the base URL for any texture mapping * Fixed rollovers on <marker> elements 2.0.2 (released 2005-09-20) ------------------------- * Added getProportion() method to PieGraph, to allow easy displaying of percentages on slices. * Added TextStyle.ROTATE_AUTO, to rotate labels on PieGraph data to match their slices 2.0.1 (released 2005-09-12) ------------------------- * Fixed mouseover values for Line Series * Added setMaxDataPoints method to LineSeries class, to limit the number of points plotted * Fixed plotting of transparent colors to PDFOutput 2.0 (released 2005-08-04) ------------------------- * Initial release of version 2 1.1.6 (released 2004-03-12) ------------------------- * Fixed issue where pie graph labels could occasionally be pushed off the edge of the edge of the graph. * Memory efficiency improvement for 3D split routine 1.1.5 (released 2003-11-03) ------------------------- * Added PDF2Output, for version 2 of the Big Faceless PDF Library * Fixed occasional problem when drawing PieGraphs with external keys under heavy load. * Added toDate() method to DateFormatter, to convert the double passed in to format() back to a Date. * Formatters will now never extend the axes to the left or right of the data by default. This behaviour can be altered by calling the Formatter.setFixedEnds method. 1.1.4 (released 2003-04-30) ------------------------- * Added fix for occasional error thrown by Solaris 2.8 when encoding PNG images * Negative values stack up correctly on a TowerBarGraph 1.1.3 (released 2003-03-19) ------------------------- * Gaps can be left in bargraphs by setting value as Double.NaN * Text of the license has been clarified. 1.1.2 (released 2003-02-20) ------------------------- * Fixed it so BarGraph formatters can be overridden * Markers without borders are now drawn on keys 1.1.1 (released 2003-01-06) ------------------------- * Fixed NullPointerException added in 1.1 when drawing axes graphs with no data * Fixed problems when using the the 2 argument DateFormatter constructor to plot dates with a time component. * Fixed problem with dates when plotting only years - values had a tendency to get repeated. 1.1 (released 2002-09-02) ------------------------- API CHANGES ----------- * Now the Style method takes a Paint instead of a Color to define it's fill. This allows graphs to be filled with a GradientPaint (currently axes graphs only) or a TexturePaint, although this won't be shaded. This probably won't require any code changes, only a recompile. * Removed deprecated methods in the Style class OTHER CHANGES ------------- * Added the ImageOutput.getReducedColorImage() method, to return a copy of the graph reduced to a certain number of colors. * Now can set the Line Thickness for ImageOutput and it's subclasses * Fixed the DOWNTRIANGLE marker on LineGraphs, and make sure borders are drawn on all markers. * Added DISPLAYVALUES_INSIDETOP to bar graphs to display the markers at the top but just inside the bars. Also got the values in the right place for negative-valued bars * Fixed bug to do with formatting values > Integer.MAX_VALUE 1.0.15 (released 2002-08-12) --------------------------- * Points equal to the min/max Y values on a Line Graph are now plotted * Size of boxes in the keys improved slightly to better handle CJK fonts. 1.0.14 (released 2002-07-15) --------------------------- * Removed "clumping" with certain date ranges in DateFormatter class * Fixed points next to NaN values in a DataCurve also being classed as NaN 1.0.13 (released 2002-05-29) --------------------------- * Bar values on Tower bar graphs are now the correct values * Top aligned keys are now positioned correctly on graphs with titles 1.0.12 (released 2002-04-25) --------------------------- * Fixed an obscure but fatal bug in the 3D engine maths. * Added a new ImageOutput constructor, so you can draw graphs to an existing java.awt.Image. * Can set NullFormatter on bar graphs to turn off X or Z axes completely. * Margins working properly now for ImageOutput and it's subclasses * Added a little more space between the labels and the axes 1.0.11 (released 2002-04-18) --------------------------- * Now plots markers on a graph with only a single point. * Fixed optionMinX and optionMaxX methods for LineGraphs and AreaGraphs 1.0.10 (released 2002-04-15) --------------------------- * Added "optionRoundBars" to all bar-graphs, to draw the bars as cylinders instead of rectangles * Finally tracked down and fixed problem with line-thicknesses getting muddled when writing to PDF * Key no longer displays values consisting of only spaces. This way elements can be added to the graph but not show up on the key by doing graph.setCurve("", curve1), graph.setCurve(" ", curve2) etc. * Added LineGraph.MARKER_CIRCLE, LineGraph.MARKER_SMALL and LineGraph.MARKER_NOBORDER. * Markers on LineGraphs will now always be drawn in front of lines. * Markers on LineGraphs are no longer stretched. A circle will remain a circle, regardless of the orientation or size of the output graph. 1.0.9 (released 2002-03-21) --------------------------- * Fixed Y walls and Floor wall, which were broken in version 1.0.7 * Used a different obfuscator to process the JAR files. This hopefully will fix the problems some people have been having importing the JAR's into some IDE's (JBuilder in particular) 1.0.8 (released 2002-03-13) --------------------------- * Fixed ImageOutput and subclasses to work with Java 1.4's headless AWT. * Added support for transparent backgrounds to GIF and PNG images. 1.0.7 (released 2002-02-25) --------------------------- * Upated DateFormatter to handle date ranges from between 2 seconds and 100 years * Added "setGrid" method to Style class, so the Floor, Y, and Z walls can be drawn as a grid (the default), horizontal lines only or vertical lines only. * Added MARKER_UPTRIANGLE and MARKER_DOWNTRIANGLE types of markers. Also added MARKER_BIG to double the size of the markers. * Added LineGraph.KEY_SHOW_MARKERS to display the LineGraph markers on the key * Added optionDisplayValue method to all Bar Graphs, to display the value for the bar directly on the graph. * Added optionDisplayZeros method to PieGraphs, to determine what to do with zero values - display them or skip them. * Changed MultiBarGraph so the gaps resulting from barwidth<1 are between the sets of bars, not each individual bar. * Removed unnecessary line on single value Pie Graphs. 1.0.6 (released 2001-11-21) --------------------------- * Fixed bug in AreaGraph where the first point wasn't being accumulated for more than two curves. * Fixed FloatingPointFormatter where a -ve value between -1 and 0 was losing it's "-" sign. 1.0.5 (released 2001-11-10) --------------------------- * Enhanced the Formatter classes - the number of ticks each formatter requires can be specified by calling the Formatter.setDensity() method. This makes life easier when plotting to small graphs, which otherwise can look a little crowded. * Promoted optionMinY and optionMaxY to apply to all Axes Graphs, not just Line and Area. This means you can set these to any values you like for better control over the Y axis - for example, to plot just the top of the bars in a bargraph or the top of the curve in an AreaGraph. * Removed the "optionYStretchToZero" requirement on AreaGraphs - if you dont want to include zero on your Y axis, you don't have to anymore * Added basic support for LineWidth to ImageOutput and subclasses - lines can now be set to 0 or 1, with any other value treated as 1. 1.0.4 (released 2001-11-07) --------------------------- * Added the MultiBarGraph class, for plotting multiple narrow bars on a single X axis. * Fixed LineGraphs so they can plot as many points as necessary. Previously more than MaxDataPoints*2 was creating a straight line. * Minor optimizations in 3D sort routine, now about 5% faster. 1.0.3 (released 2001-10-17) --------------------------- * Changed various methods in the Style class from taking a java.awt.Font to taking a font name, style and size. The old methods will still work, but are deprecated. This is to allow generation to PDF, or in the future possibly other output formats, without relying on the AWT classes. * Created non-static methods to set the default light level, border color and so on for each graph. These can replace the previous static methods in the PDFStyle class, although those methods aren't deprecated (they're still useful if you want to set the default for all graphs). * Improved exception handling slightly, and removed two debug statements we missed from AbstractLineGraph and one of our internal classes. * Removed the PDFLibOutput class completely 1.0.2 (released 2001-09-13) --------------------------- * Handles the new ColorPattern class from the Big Faceless PDF library v1.1 1.0.1 (released 2001-08-30) --------------------------- * Made ImageOutput constructors public, for those wanting to use the java.awt.Image directly. 1.0 (released 2001-07-11) ------------------------- * Initial release # vim: syntax=none textwidth=80