Big Faceless Java 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
    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.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/" and
  "" 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

* 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

* 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

* 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

* 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.

* 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

* 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

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

* "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

* 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

* 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

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)
* 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


* 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

* 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

* 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

* 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