Migrating from version 0.7.6 to 0.8.0

If you are using the XML-Definition and the predefined PreviewDialogs only,
you can skip the code changes, your reporting process has not changed.

XML-Definition and changes in the reporting behaviour

- Bands now contain all elements defined for band, the bands height
  is altered to fit the elements. The predefined height set via setHeight()
  is now a minimumHeight

- Proportional values are evaluated by calculating the band size used by
  static (non-proportional elements). Then the dimensions of all elements are
  calculated, and the final band dimension defined.

  This dimension is finally applied to the proportional values a second time,
  and the elements are drawn.

  It can cause problems if you ignore the 100% size of those relative elements,
  so f.i. an element at position 90% and a height of > %10 could cause trouble.
  Trouble means, that your layout looks a little bit weird within that band,
  and that that invalid element is not printed properly.

- All text elements have now vertical alignment (as implemented in the last cvs
  version), bands can define default values for ElementAlignments.

- GroupHeader can be repeated after an pagebreak. The last groupheader that is marked
  as repeatable is repeated. If the groupheader + pageheader + pagefooter does not
  fit on the current page, you get State-did-not-proceed errors.

- The pagefooter can now contain dynamic elements.

- and Finally: The Dynamic Elements work now! Real and tested! 

Code Changes

- all deprecated elements have been removed. Now there are only
  3 elements left: ImageElement, ShapeElement, TextElement

- as usual: elements should be created with the ItemFactory.

- Elements store their attributes in StyleSheets.

  The StyleSheet is accessible via Element.getStyle()
  and can be queried via Element.getStyle().getStlyeProperty(StyleKey);

  StyleKeys are defined in the class ElementStyleSheet for Elements and Bands
  and BandStyleSheet for Bands only.

- Element bounds have now a different meaning. Bounds are defined
  by setting the StyleKey ABS_DIMENSION and ABS_POSITION.
  ABS_DIMENSION is of type Dimension2D. To specify a float dimension
  you could use org.jfree.ui.FloatDimension
  ABS_POSITION is of type Point2D.

- StyleKey BOUNDS is used internaly during the layouting, this key should never
  be modified by an function or set within a report definition.

- the class JFreeReport is no longer used to repaginate the report or to
  start processing of an report, use the PageableReportProcessor instead.

  Instead of calling JFreeReport.processReport() you should now use this code:

   // report created elsewhere
   // the outputtarget must be opened

      PageableReportProcessor proc = new PageableReportProcessor(report);
      proc.setOutputTarget(target);
      proc.processReport();

   // don't forget to close the outputtarget ..

- The PreviewFrame was modified. All functionality moved into a separate
  delegate object, so that implementing other kinds of dialogs get easier.

  At the moment, a PreviewFrame (JFrame), a PreviewDialog (JDialog) and a
  PreviewInternalFrame (JInternalFrame) are implemented.

  All old preview methods can be reached via:

    PreviewFrame.getBase()

  Please see the JavaDoc for details on the available methods.
----------------------------------------------------------------------------------
Changes from 0.8.0 to 0.8.1

  The PDFFontFactory is now relocated to an own package. All classes can now
  be found in com.jrefinery.report.targets.support.PDFFontFactory.

  The band layout management has moved to com.jrefinery.report.targets.base.**.

  The "first" demo has been renamed to "swing-icons-demo" to better fit is purpose
  in the documentation, as it is no longer the simplest demo available.

  The layouting now handles the element font defintion correctly. If an element's
  height is smaller than the defined font size, then no line will be printed. So
  if your elements disappear after upgrading, then check your element definitions. 

  Some methods of the PreviewFrame (f.i. setLargeIconsEnabled(boolean)) moved into
  the common backend class PreviewProxyBase.
  
----------------------------------------------------------------------------------
Changes from 0.8.1 to 0.8.2

Shapes:
  The shape content handling was buggy. Shape bounds are specified relative
  to the element bounds.

  In previous versions, both the shape bounds and the element bounds were defined equal.
  So a line starting on y=10 within the band had the shape element bounds with y=10
  and contained a line2D shape with y1=10 and y2=10. The shape was later transformed
  to y=0 before painting. This way all shapes were translated to x=0,y=0, regardless
  of their real bounds. That invalid behaviour is fixed now, but all shape definitions
  have changed.

  This bug only affects the ext-definition styles, as the simple parser profile
  adjusts the shapes within the predefined shape elements automaticly. To fix your
  extended-definition, either adjust your shape definition to start at position 0,0
  or adjust your element to start at 0,0 and extend its dimension to
  (old_x + old_width, old_y + old_height).

LineElements:
  Shape coordinates for the ItemFactory.createLineShapeElement() method must not contain
  negative values. If you want to create scaling lines, you will have to use one of the
  createShapeElement methods, which are able to separate bounds from shapes.

JFreeReport object replaced by ReportDefinition object:
  Within the functions and the whole report processing process, the JFreeReport object
  was replaced by an read only ReportDefinition object. This object uses the same
  methodnames as the JFreeReport object, but has no means to access the report
  functions or to change or replace the report bands.

  When upgrading you will have to change your functions to use the ReportDefinition
  instead of the JFreeReport object. It is sufficient to change the object type and
  to recompile the function.

Groups are no longer editiable during the report processing. Any attemp to add a
  new group to the list will result in an exception.

The group fields are now enforced to have a subgroup relationship. This means, that
  the child group must contain all fields of the direct parent group. For a particualar
  child group, the evaluation of "group.getFields().containsAll (parent.getFields())"
  must return true for all parent groups.

  The order of the groups does not matter.

  Examples:
    Valid:
        GROUP 0 = {}  // empty fields are allowed, this means the group is the parent
                      // of all other groups
        Group 1 = {FIELD_A}
        Group 2 = {FIELD_A, FIELD_B}

    Invalid:
        GROUP 0 = {}
        Group 1 = {FIELD_A, FIELD_D}
        Group 2 = {FIELD_A, FIELD_B}
                      // There is no way to form a subgroup relationship between Group 1
                      // and Group 2. Group 1 does not contain all fields of Group 2 and
                      // neither does Group2 contain all fields from Group 1.

All element coordinates must be smaller than the available page width, or the
  repagination process will fail. So specifying x="110%" will be a killer as well
  as specifying x="1000" when the page width is smaller than or equal to 1000.

----------------------------------------------------------------------------------
Changes from 0.8.2 to 0.8.3

Functions, which need to initialized themself on the start of the report processing,
  should no longer use the reportStarted() event, as this event is no longer the first
  event in the report processing.

  The defined event order is now as follows:

  - ReportInitialized event

  - prepareEvent (ReportStarted)
    + pageStarted event
  - ReportStarted event

  - prepareEvent (GroupStarted)
  - GroupStarted event

  - prepareEvent (ItemsStarted)
  - ItemsStarted event

  - prepareEvent (ItemsAdvanced)
  - ItemsAdvanced event

  - prepareEvent (ItemsFinished)
  - ItemsFinished event

  - prepareEvent (GroupFinished)
  - GroupFinished event

  - prepareEvent (ReportFinished)
  - ReportFinished event

  - prepareEvent (ReportDone)
    +PageFinished event
  - ReportDone event

  The prepare events are used to inform the listeners, that the next state is
  about to be processed. When this event is thrown, no change was done by the
  state yet. The main purpose of these events is to help the function to clean
  up its internal states before the new state is beeing processed. The
  PageLayouter functions start a new page and print their spooled bands after
  a pagebreak was done, when this event is received.

The ItemColumnQuotientFunction is now deprecated and has been replaced by the
  ItemColumnQuotientExpression.

----------------------------------------------------------------------------------
Changes from 0.8.3a to 0.8.3b

Functions which depend on page events (pageStarted or pageFinished) should
  now implement the PageListener interface. This interface provides an additional
  method to inform all functions of canceled pages.

  Pages get canceled by the PageableReportProcessor, if they are generated empty.

Stylesheets can be accessed by their name by using the StyleSheet collection.This
  Collection is maintained by the ReportDefinition object and was populated when
  the reporting started.

  From now on all Stylesheets get cloned during the report processing. Your
  functions should not hold references to StyleSheets or the StyleSheet collection.
  The currently valid instance of the stylesheet collection can be queried by using
  the ReportEvent object.

----------------------------------------------------------------------------------
Changes from 0.8.3b to 0.8.3c

Lines and other non-area shapes are no longer clipped. Depending on your report and
  the used shapes, your report ma look weird until the shapes are clipped manually.
  The AWT does not support easy clipping of shapes (except when drawing them), and
  the Area class is not able to handle non-areal shapes. That means: Unless the
  clippping is implemented manually, there will be no full support for it.

Report components, which have an StyleSheetCollection assigned cannot be added to
  other report components, which were assigned to a different StyleSheetCollection.
  Every attempt to do this will result in an Exception.

  All StyleSheets used within an Report can be queried from the StyleSheet collection,
  once a element is added to the JFreeReport object, it gets the StyleSheetCollection
  of the report assigned.

  Cloning Elements or StyleSheets removed the stylesheet collection from the clone,
  as the clone is not connected to the original report anymore.

  All elements of a report share the same stylesheet collection. The collection can
  contain more than one element with the same name, but it is wise to give all
  stylesheets an unique name.

             