Rozbalená knihovna verze 1.0
authorFrantišek Kučera <franta-hg@frantovo.cz>
Sat Feb 28 21:31:02 2009 +0100 (2009-02-28)
changeset 1639991d0808a
parent 0 1612dbcec451
child 2 68cc9b54a153
Rozbalená knihovna verze 1.0
.hgignore
java/cewolf-1.0/.classpath
java/cewolf-1.0/.project
java/cewolf-1.0/.wtpmodules
java/cewolf-1.0/Build_Instructions.txt
java/cewolf-1.0/LICENSE.txt
java/cewolf-1.0/RELEASE.txt
java/cewolf-1.0/etc/cewolf-1.1.tld
java/cewolf-1.0/etc/cewolf.tld
java/cewolf-1.0/etc/overlib.js
java/cewolf-1.0/pom.xml
java/cewolf-1.0/repository/gnujaxp/gnujaxp.jar
java/cewolf-1.0/repository/gnujaxp/pom.xml
java/cewolf-1.0/repository/pom.xml
java/cewolf-1.0/src/main/assembly/assembly.xml
java/cewolf-1.0/src/main/java/de/laures/cewolf/CewolfException.java
java/cewolf-1.0/src/main/java/de/laures/cewolf/CewolfRenderer.java
java/cewolf-1.0/src/main/java/de/laures/cewolf/ChartHolder.java
java/cewolf-1.0/src/main/java/de/laures/cewolf/ChartImage.java
java/cewolf-1.0/src/main/java/de/laures/cewolf/ChartPostProcessor.java
java/cewolf-1.0/src/main/java/de/laures/cewolf/ChartRenderingException.java
java/cewolf-1.0/src/main/java/de/laures/cewolf/ChartValidationException.java
java/cewolf-1.0/src/main/java/de/laures/cewolf/Configuration.java
java/cewolf-1.0/src/main/java/de/laures/cewolf/ConfigurationException.java
java/cewolf-1.0/src/main/java/de/laures/cewolf/DatasetProduceException.java
java/cewolf-1.0/src/main/java/de/laures/cewolf/DatasetProducer.java
java/cewolf-1.0/src/main/java/de/laures/cewolf/PostProcessingException.java
java/cewolf-1.0/src/main/java/de/laures/cewolf/Storage.java
java/cewolf-1.0/src/main/java/de/laures/cewolf/WebConstants.java
java/cewolf-1.0/src/main/java/de/laures/cewolf/cpp/RotatedAxisLabels.java
java/cewolf-1.0/src/main/java/de/laures/cewolf/cpp/package.html
java/cewolf-1.0/src/main/java/de/laures/cewolf/dp/DataSourceXYDatasetProducer.java
java/cewolf-1.0/src/main/java/de/laures/cewolf/dp/DataSourceXYSeries.java
java/cewolf-1.0/src/main/java/de/laures/cewolf/dp/MovingAverageDatasetProducer.java
java/cewolf-1.0/src/main/java/de/laures/cewolf/dp/package.html
java/cewolf-1.0/src/main/java/de/laures/cewolf/event/ChartImageRenderListener.java
java/cewolf-1.0/src/main/java/de/laures/cewolf/links/CategoryItemLinkGenerator.java
java/cewolf-1.0/src/main/java/de/laures/cewolf/links/LinkGenerator.java
java/cewolf-1.0/src/main/java/de/laures/cewolf/links/PieSectionLinkGenerator.java
java/cewolf-1.0/src/main/java/de/laures/cewolf/links/XYItemLinkGenerator.java
java/cewolf-1.0/src/main/java/de/laures/cewolf/package.html
java/cewolf-1.0/src/main/java/de/laures/cewolf/storage/AbstractSessionStorage.java
java/cewolf-1.0/src/main/java/de/laures/cewolf/storage/ClusterableSessionStorage.java
java/cewolf-1.0/src/main/java/de/laures/cewolf/storage/FileStorage.java
java/cewolf-1.0/src/main/java/de/laures/cewolf/storage/LongTermSessionStorage.java
java/cewolf-1.0/src/main/java/de/laures/cewolf/storage/SerializableChartImage.java
java/cewolf-1.0/src/main/java/de/laures/cewolf/storage/SessionStorageGroup.java
java/cewolf-1.0/src/main/java/de/laures/cewolf/storage/SessionStorageItem.java
java/cewolf-1.0/src/main/java/de/laures/cewolf/storage/TransientSessionStorage.java
java/cewolf-1.0/src/main/java/de/laures/cewolf/taglib/AbstractChartDefinition.java
java/cewolf-1.0/src/main/java/de/laures/cewolf/taglib/AttributeValidationException.java
java/cewolf-1.0/src/main/java/de/laures/cewolf/taglib/AxisConstants.java
java/cewolf-1.0/src/main/java/de/laures/cewolf/taglib/AxisFactory.java
java/cewolf-1.0/src/main/java/de/laures/cewolf/taglib/AxisTypes.java
java/cewolf-1.0/src/main/java/de/laures/cewolf/taglib/CewolfChartFactory.java
java/cewolf-1.0/src/main/java/de/laures/cewolf/taglib/ChartConstants.java
java/cewolf-1.0/src/main/java/de/laures/cewolf/taglib/ChartImageDefinition.java
java/cewolf-1.0/src/main/java/de/laures/cewolf/taglib/ChartTypes.java
java/cewolf-1.0/src/main/java/de/laures/cewolf/taglib/CombinedChartDefinition.java
java/cewolf-1.0/src/main/java/de/laures/cewolf/taglib/DataAware.java
java/cewolf-1.0/src/main/java/de/laures/cewolf/taglib/DataContainer.java
java/cewolf-1.0/src/main/java/de/laures/cewolf/taglib/IncompatibleDatasetException.java
java/cewolf-1.0/src/main/java/de/laures/cewolf/taglib/LayoutConstants.java
java/cewolf-1.0/src/main/java/de/laures/cewolf/taglib/LayoutTypes.java
java/cewolf-1.0/src/main/java/de/laures/cewolf/taglib/OverlaidChartDefinition.java
java/cewolf-1.0/src/main/java/de/laures/cewolf/taglib/PlotConstants.java
java/cewolf-1.0/src/main/java/de/laures/cewolf/taglib/PlotContainer.java
java/cewolf-1.0/src/main/java/de/laures/cewolf/taglib/PlotDefinition.java
java/cewolf-1.0/src/main/java/de/laures/cewolf/taglib/PlotTypes.java
java/cewolf-1.0/src/main/java/de/laures/cewolf/taglib/SimpleChartDefinition.java
java/cewolf-1.0/src/main/java/de/laures/cewolf/taglib/TagValidationException.java
java/cewolf-1.0/src/main/java/de/laures/cewolf/taglib/TaglibConstants.java
java/cewolf-1.0/src/main/java/de/laures/cewolf/taglib/UnsupportedChartTypeException.java
java/cewolf-1.0/src/main/java/de/laures/cewolf/taglib/html/AbstractHTMLBaseTag.java
java/cewolf-1.0/src/main/java/de/laures/cewolf/taglib/html/HTMLImgTag.java
java/cewolf-1.0/src/main/java/de/laures/cewolf/taglib/html/package.html
java/cewolf-1.0/src/main/java/de/laures/cewolf/taglib/package.html
java/cewolf-1.0/src/main/java/de/laures/cewolf/taglib/tags/AbstractChartTag.java
java/cewolf-1.0/src/main/java/de/laures/cewolf/taglib/tags/AbstractObjectTag.java
java/cewolf-1.0/src/main/java/de/laures/cewolf/taglib/tags/AbstractParameterizedObjectTag.java
java/cewolf-1.0/src/main/java/de/laures/cewolf/taglib/tags/CewolfBodyTag.java
java/cewolf-1.0/src/main/java/de/laures/cewolf/taglib/tags/CewolfRootTag.java
java/cewolf-1.0/src/main/java/de/laures/cewolf/taglib/tags/CewolfTag.java
java/cewolf-1.0/src/main/java/de/laures/cewolf/taglib/tags/ChartImgTag.java
java/cewolf-1.0/src/main/java/de/laures/cewolf/taglib/tags/ChartImgURLTag.java
java/cewolf-1.0/src/main/java/de/laures/cewolf/taglib/tags/ChartImgURLTagEI.java
java/cewolf-1.0/src/main/java/de/laures/cewolf/taglib/tags/ChartMapTag.java
java/cewolf-1.0/src/main/java/de/laures/cewolf/taglib/tags/ChartPostProcessorTag.java
java/cewolf-1.0/src/main/java/de/laures/cewolf/taglib/tags/ColorTag.java
java/cewolf-1.0/src/main/java/de/laures/cewolf/taglib/tags/Colored.java
java/cewolf-1.0/src/main/java/de/laures/cewolf/taglib/tags/CombinedChartTag.java
java/cewolf-1.0/src/main/java/de/laures/cewolf/taglib/tags/DataTag.java
java/cewolf-1.0/src/main/java/de/laures/cewolf/taglib/tags/GradientTag.java
java/cewolf-1.0/src/main/java/de/laures/cewolf/taglib/tags/LegendTag.java
java/cewolf-1.0/src/main/java/de/laures/cewolf/taglib/tags/Mapped.java
java/cewolf-1.0/src/main/java/de/laures/cewolf/taglib/tags/OverlaidChartTag.java
java/cewolf-1.0/src/main/java/de/laures/cewolf/taglib/tags/Painted.java
java/cewolf-1.0/src/main/java/de/laures/cewolf/taglib/tags/ParamTag.java
java/cewolf-1.0/src/main/java/de/laures/cewolf/taglib/tags/Parameterized.java
java/cewolf-1.0/src/main/java/de/laures/cewolf/taglib/tags/PlotTag.java
java/cewolf-1.0/src/main/java/de/laures/cewolf/taglib/tags/PointTag.java
java/cewolf-1.0/src/main/java/de/laures/cewolf/taglib/tags/Pointed.java
java/cewolf-1.0/src/main/java/de/laures/cewolf/taglib/tags/ProducerTag.java
java/cewolf-1.0/src/main/java/de/laures/cewolf/taglib/tags/SerializableGradientPaint.java
java/cewolf-1.0/src/main/java/de/laures/cewolf/taglib/tags/SerializableTexturePaint.java
java/cewolf-1.0/src/main/java/de/laures/cewolf/taglib/tags/SimpleChartTag.java
java/cewolf-1.0/src/main/java/de/laures/cewolf/taglib/tags/TextureTag.java
java/cewolf-1.0/src/main/java/de/laures/cewolf/taglib/tags/package.html
java/cewolf-1.0/src/main/java/de/laures/cewolf/taglib/util/BrowserDetection.java
java/cewolf-1.0/src/main/java/de/laures/cewolf/taglib/util/ColorHelper.java
java/cewolf-1.0/src/main/java/de/laures/cewolf/taglib/util/DatasetProductionTimeStore.java
java/cewolf-1.0/src/main/java/de/laures/cewolf/taglib/util/DatasetProductionTimesKey.java
java/cewolf-1.0/src/main/java/de/laures/cewolf/taglib/util/KeyGenerator.java
java/cewolf-1.0/src/main/java/de/laures/cewolf/taglib/util/MIMEExtensionHelper.java
java/cewolf-1.0/src/main/java/de/laures/cewolf/taglib/util/PageUtils.java
java/cewolf-1.0/src/main/java/de/laures/cewolf/taglib/util/package.html
java/cewolf-1.0/src/main/java/de/laures/cewolf/tooltips/CategoryToolTipGenerator.java
java/cewolf-1.0/src/main/java/de/laures/cewolf/tooltips/PieToolTipGenerator.java
java/cewolf-1.0/src/main/java/de/laures/cewolf/tooltips/ToolTipGenerator.java
java/cewolf-1.0/src/main/java/de/laures/cewolf/tooltips/XYToolTipGenerator.java
java/cewolf-1.0/src/main/java/de/laures/cewolf/util/Assert.java
java/cewolf-1.0/src/main/java/de/laures/cewolf/util/HTMLStateTable.java
java/cewolf-1.0/src/main/java/de/laures/cewolf/util/ImageHelper.java
java/cewolf-1.0/src/main/java/de/laures/cewolf/util/RenderedImage.java
java/cewolf-1.0/src/main/java/de/laures/cewolf/util/Renderer.java
java/cewolf-1.0/src/main/java/de/laures/cewolf/util/RenderingException.java
java/cewolf-1.0/src/main/java/de/laures/cewolf/util/RenderingHelper.java
java/cewolf-1.0/src/main/java/de/laures/cewolf/util/StateDescriptor.java
java/cewolf-1.0/src/main/java/de/laures/cewolf/util/package.html
java/cewolf-1.0/src/main/resources/cewolf-1.1.tld
java/cewolf-1.0/src/main/resources/cewolf.tld
java/cewolf-1.0/src/main/resources/overlib.js
java/cewolf-1.0/src/site/brief.html
java/cewolf-1.0/src/site/cewolf.css
java/cewolf-1.0/src/site/chartdatasetcombinations.html
java/cewolf-1.0/src/site/chartdatasetcombinations.sxc
java/cewolf-1.0/src/site/demo.html
java/cewolf-1.0/src/site/developerguide.sxw
java/cewolf-1.0/src/site/devguide.html
java/cewolf-1.0/src/site/faq/faq.html
java/cewolf-1.0/src/site/faq/faqfooter.html
java/cewolf-1.0/src/site/faq/faqheader.html
java/cewolf-1.0/src/site/header.html
java/cewolf-1.0/src/site/img/Thumbs.db
java/cewolf-1.0/src/site/img/api_button_off.png
java/cewolf-1.0/src/site/img/api_button_on.png
java/cewolf-1.0/src/site/img/architecture.png
java/cewolf-1.0/src/site/img/cewolf_logo.gif
java/cewolf-1.0/src/site/img/downloads_button_off.png
java/cewolf-1.0/src/site/img/downloads_button_on.png
java/cewolf-1.0/src/site/img/examplehoriz3d.png
java/cewolf-1.0/src/site/img/exampleline.png
java/cewolf-1.0/src/site/img/exampleoverlaid.png
java/cewolf-1.0/src/site/img/examplepie.png
java/cewolf-1.0/src/site/img/examplescatter.png
java/cewolf-1.0/src/site/img/examplevert3d.png
java/cewolf-1.0/src/site/img/examplexy.png
java/cewolf-1.0/src/site/img/faq_button_off.png
java/cewolf-1.0/src/site/img/faq_button_on.png
java/cewolf-1.0/src/site/img/header_bg.png
java/cewolf-1.0/src/site/img/intro_button_off.png
java/cewolf-1.0/src/site/img/intro_button_on.png
java/cewolf-1.0/src/site/img/jspin100.gif
java/cewolf-1.0/src/site/img/logo.gif
java/cewolf-1.0/src/site/img/menu_bg.png
java/cewolf-1.0/src/site/img/menu_corner.png
java/cewolf-1.0/src/site/img/project_button_off.png
java/cewolf-1.0/src/site/img/project_button_on.png
java/cewolf-1.0/src/site/img/screens_button_off.png
java/cewolf-1.0/src/site/img/screens_button_on.png
java/cewolf-1.0/src/site/img/sfstats.gif
java/cewolf-1.0/src/site/img/taglib_button_off.png
java/cewolf-1.0/src/site/img/taglib_button_on.png
java/cewolf-1.0/src/site/img/tutorial.png
java/cewolf-1.0/src/site/img/tutorial_button_off.png
java/cewolf-1.0/src/site/img/tutorial_button_on.png
java/cewolf-1.0/src/site/img/web design.psd
java/cewolf-1.0/src/site/index.html
java/cewolf-1.0/src/site/menu.html
java/cewolf-1.0/src/site/overlib.js
java/cewolf-1.0/src/site/plotdatasetcombinations.sxc
java/cewolf-1.0/src/site/site.xml
java/cewolf-1.0/src/site/taglib.html
java/cewolf-1.0/src/site/tutorial.html
java/cewolf-1.0/src/site/tutorial/step1.html
java/cewolf-1.0/src/site/tutorial/step2.html
java/cewolf-1.0/src/site/tutorial/step3.html
java/cewolf-1.0/src/site/tutorial/step4.html
java/cewolf-1.0/src/site/tutorial/step5.html
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/.hgignore	Sat Feb 28 21:31:02 2009 +0100
     1.3 @@ -0,0 +1,2 @@
     1.4 +java/cewolf-1.0/target/*
     1.5 +java/cewolf-1.0/lib/*
     2.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     2.2 +++ b/java/cewolf-1.0/.classpath	Sat Feb 28 21:31:02 2009 +0100
     2.3 @@ -0,0 +1,19 @@
     2.4 +<classpath>
     2.5 +  <classpathentry kind="src" path="src/main/java"/>
     2.6 +  <classpathentry kind="src" path="src/main/resources"/>
     2.7 +  <classpathentry kind="output" path="target/classes"/>
     2.8 +  <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
     2.9 +  <classpathentry kind="var" path="M2_REPO/jfree/jcommon/1.0.0/jcommon-1.0.0.jar"/>
    2.10 +  <classpathentry kind="var" path="M2_REPO/batik/batik-xml/1.6/batik-xml-1.6.jar"/>
    2.11 +  <classpathentry kind="var" path="M2_REPO/batik/batik-dom/1.6/batik-dom-1.6.jar"/>
    2.12 +  <classpathentry kind="var" path="M2_REPO/javax/servlet/servlet-api/2.3/servlet-api-2.3.jar"/>
    2.13 +  <classpathentry kind="var" path="M2_REPO/commons-logging/commons-logging/1.0.4/commons-logging-1.0.4.jar"/>
    2.14 +  <classpathentry kind="var" path="M2_REPO/log4j/log4j/1.2.12/log4j-1.2.12.jar"/>
    2.15 +  <classpathentry kind="var" path="M2_REPO/batik/batik-util/1.6/batik-util-1.6.jar"/>
    2.16 +  <classpathentry kind="var" path="M2_REPO/crimson/crimson/1.1.3/crimson-1.1.3.jar"/>
    2.17 +  <classpathentry kind="var" path="M2_REPO/junit/junit/3.8/junit-3.8.jar"/>
    2.18 +  <classpathentry kind="var" path="M2_REPO/gnujaxp/gnujaxp/1.0.0/gnujaxp-1.0.0.jar"/>
    2.19 +  <classpathentry kind="var" path="M2_REPO/batik/batik-awt-util/1.6/batik-awt-util-1.6.jar"/>
    2.20 +  <classpathentry kind="var" path="M2_REPO/batik/batik-svggen/1.6/batik-svggen-1.6.jar"/>
    2.21 +  <classpathentry kind="var" path="M2_REPO/jfreechart/jfreechart/1.0.0/jfreechart-1.0.0.jar"/>
    2.22 +</classpath>
    2.23 \ No newline at end of file
     3.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     3.2 +++ b/java/cewolf-1.0/.project	Sat Feb 28 21:31:02 2009 +0100
     3.3 @@ -0,0 +1,31 @@
     3.4 +<projectDescription>
     3.5 +  <name>cewolf</name>
     3.6 +  <comment>Cewolf is a tag library for JfreeChart.
     3.7 +    JFreeChart is a class library, written in Java, for generating charts.
     3.8 +    Utilising the Java2D APIs, it currently supports bar charts, pie charts,
     3.9 +    line charts, XY-plots and time series plots.</comment>
    3.10 +  <projects/>
    3.11 +  <buildSpec>
    3.12 +    <buildCommand>
    3.13 +      <name>org.eclipse.jdt.core.javabuilder</name>
    3.14 +      <arguments/>
    3.15 +    </buildCommand>
    3.16 +    <buildCommand>
    3.17 +      <name>org.eclipse.wst.common.modulecore.ComponentStructuralBuilder</name>
    3.18 +      <arguments/>
    3.19 +    </buildCommand>
    3.20 +    <buildCommand>
    3.21 +      <name>org.eclipse.wst.validation.validationbuilder</name>
    3.22 +      <arguments/>
    3.23 +    </buildCommand>
    3.24 +    <buildCommand>
    3.25 +      <name>org.eclipse.wst.common.modulecore.ComponentStructuralBuilderDependencyResolver</name>
    3.26 +      <arguments/>
    3.27 +    </buildCommand>
    3.28 +  </buildSpec>
    3.29 +  <natures>
    3.30 +    <nature>org.eclipse.jdt.core.javanature</nature>
    3.31 +    <nature>org.eclipse.jem.workbench.JavaEMFNature</nature>
    3.32 +    <nature>org.eclipse.wst.common.modulecore.ModuleCoreNature</nature>
    3.33 +  </natures>
    3.34 +</projectDescription>
    3.35 \ No newline at end of file
     4.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     4.2 +++ b/java/cewolf-1.0/.wtpmodules	Sat Feb 28 21:31:02 2009 +0100
     4.3 @@ -0,0 +1,9 @@
     4.4 +<project-modules id="moduleCoreId">
     4.5 +  <wb-module deploy-name="cewolf">
     4.6 +    <module-type module-type-id="jst.utility">
     4.7 +      <property name="java-output-path" value="/target/classes"/>
     4.8 +    </module-type>
     4.9 +    <wb-resource deploy-path="/" source-path="src/main/java"/>
    4.10 +    <wb-resource deploy-path="/" source-path="src/main/resources"/>
    4.11 +  </wb-module>
    4.12 +</project-modules>
    4.13 \ No newline at end of file
     5.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     5.2 +++ b/java/cewolf-1.0/Build_Instructions.txt	Sat Feb 28 21:31:02 2009 +0100
     5.3 @@ -0,0 +1,7 @@
     5.4 +Cewolf uses Apache Maven 2 as the build system as of version 0.12.0. Maven 2 can be downloaded from http://maven.apache.org.
     5.5 +
     5.6 +To build cewolf using M2 you must first load a couple of jars into your local repository. In the cewolf/repository folder, run "mvn install." This will load gnujaxp into your M2 local repository. This only needs to be done once. All the other dependant jars are automatically downloaded by M2 from ibiblio.
     5.7 +
     5.8 +To build cewolf, run "mvn install" from the cewolf folder. This will build the jar and javadocs place them in /target. 
     5.9 +
    5.10 +To build the zip file deployed on sourceforge, run "mvn assembly:assembly" from the cewolf folder. The zip will be placed in /target. This jar will contain all the dependant jars and the source.
    5.11 \ No newline at end of file
     6.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     6.2 +++ b/java/cewolf-1.0/LICENSE.txt	Sat Feb 28 21:31:02 2009 +0100
     6.3 @@ -0,0 +1,502 @@
     6.4 +		  GNU LESSER GENERAL PUBLIC LICENSE
     6.5 +		       Version 2.1, February 1999
     6.6 +
     6.7 + Copyright (C) 1991, 1999 Free Software Foundation, Inc.
     6.8 +     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
     6.9 + Everyone is permitted to copy and distribute verbatim copies
    6.10 + of this license document, but changing it is not allowed.
    6.11 +
    6.12 +[This is the first released version of the Lesser GPL.  It also counts
    6.13 + as the successor of the GNU Library Public License, version 2, hence
    6.14 + the version number 2.1.]
    6.15 +
    6.16 +			    Preamble
    6.17 +
    6.18 +  The licenses for most software are designed to take away your
    6.19 +freedom to share and change it.  By contrast, the GNU General Public
    6.20 +Licenses are intended to guarantee your freedom to share and change
    6.21 +free software--to make sure the software is free for all its users.
    6.22 +
    6.23 +  This license, the Lesser General Public License, applies to some
    6.24 +specially designated software packages--typically libraries--of the
    6.25 +Free Software Foundation and other authors who decide to use it.  You
    6.26 +can use it too, but we suggest you first think carefully about whether
    6.27 +this license or the ordinary General Public License is the better
    6.28 +strategy to use in any particular case, based on the explanations below.
    6.29 +
    6.30 +  When we speak of free software, we are referring to freedom of use,
    6.31 +not price.  Our General Public Licenses are designed to make sure that
    6.32 +you have the freedom to distribute copies of free software (and charge
    6.33 +for this service if you wish); that you receive source code or can get
    6.34 +it if you want it; that you can change the software and use pieces of
    6.35 +it in new free programs; and that you are informed that you can do
    6.36 +these things.
    6.37 +
    6.38 +  To protect your rights, we need to make restrictions that forbid
    6.39 +distributors to deny you these rights or to ask you to surrender these
    6.40 +rights.  These restrictions translate to certain responsibilities for
    6.41 +you if you distribute copies of the library or if you modify it.
    6.42 +
    6.43 +  For example, if you distribute copies of the library, whether gratis
    6.44 +or for a fee, you must give the recipients all the rights that we gave
    6.45 +you.  You must make sure that they, too, receive or can get the source
    6.46 +code.  If you link other code with the library, you must provide
    6.47 +complete object files to the recipients, so that they can relink them
    6.48 +with the library after making changes to the library and recompiling
    6.49 +it.  And you must show them these terms so they know their rights.
    6.50 +
    6.51 +  We protect your rights with a two-step method: (1) we copyright the
    6.52 +library, and (2) we offer you this license, which gives you legal
    6.53 +permission to copy, distribute and/or modify the library.
    6.54 +
    6.55 +  To protect each distributor, we want to make it very clear that
    6.56 +there is no warranty for the free library.  Also, if the library is
    6.57 +modified by someone else and passed on, the recipients should know
    6.58 +that what they have is not the original version, so that the original
    6.59 +author's reputation will not be affected by problems that might be
    6.60 +introduced by others.
    6.61 +
    6.62 +  Finally, software patents pose a constant threat to the existence of
    6.63 +any free program.  We wish to make sure that a company cannot
    6.64 +effectively restrict the users of a free program by obtaining a
    6.65 +restrictive license from a patent holder.  Therefore, we insist that
    6.66 +any patent license obtained for a version of the library must be
    6.67 +consistent with the full freedom of use specified in this license.
    6.68 +
    6.69 +  Most GNU software, including some libraries, is covered by the
    6.70 +ordinary GNU General Public License.  This license, the GNU Lesser
    6.71 +General Public License, applies to certain designated libraries, and
    6.72 +is quite different from the ordinary General Public License.  We use
    6.73 +this license for certain libraries in order to permit linking those
    6.74 +libraries into non-free programs.
    6.75 +
    6.76 +  When a program is linked with a library, whether statically or using
    6.77 +a shared library, the combination of the two is legally speaking a
    6.78 +combined work, a derivative of the original library.  The ordinary
    6.79 +General Public License therefore permits such linking only if the
    6.80 +entire combination fits its criteria of freedom.  The Lesser General
    6.81 +Public License permits more lax criteria for linking other code with
    6.82 +the library.
    6.83 +
    6.84 +  We call this license the "Lesser" General Public License because it
    6.85 +does Less to protect the user's freedom than the ordinary General
    6.86 +Public License.  It also provides other free software developers Less
    6.87 +of an advantage over competing non-free programs.  These disadvantages
    6.88 +are the reason we use the ordinary General Public License for many
    6.89 +libraries.  However, the Lesser license provides advantages in certain
    6.90 +special circumstances.
    6.91 +
    6.92 +  For example, on rare occasions, there may be a special need to
    6.93 +encourage the widest possible use of a certain library, so that it becomes
    6.94 +a de-facto standard.  To achieve this, non-free programs must be
    6.95 +allowed to use the library.  A more frequent case is that a free
    6.96 +library does the same job as widely used non-free libraries.  In this
    6.97 +case, there is little to gain by limiting the free library to free
    6.98 +software only, so we use the Lesser General Public License.
    6.99 +
   6.100 +  In other cases, permission to use a particular library in non-free
   6.101 +programs enables a greater number of people to use a large body of
   6.102 +free software.  For example, permission to use the GNU C Library in
   6.103 +non-free programs enables many more people to use the whole GNU
   6.104 +operating system, as well as its variant, the GNU/Linux operating
   6.105 +system.
   6.106 +
   6.107 +  Although the Lesser General Public License is Less protective of the
   6.108 +users' freedom, it does ensure that the user of a program that is
   6.109 +linked with the Library has the freedom and the wherewithal to run
   6.110 +that program using a modified version of the Library.
   6.111 +
   6.112 +  The precise terms and conditions for copying, distribution and
   6.113 +modification follow.  Pay close attention to the difference between a
   6.114 +"work based on the library" and a "work that uses the library".  The
   6.115 +former contains code derived from the library, whereas the latter must
   6.116 +be combined with the library in order to run.
   6.117 +
   6.118 +		  GNU LESSER GENERAL PUBLIC LICENSE
   6.119 +   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
   6.120 +
   6.121 +  0. This License Agreement applies to any software library or other
   6.122 +program which contains a notice placed by the copyright holder or
   6.123 +other authorized party saying it may be distributed under the terms of
   6.124 +this Lesser General Public License (also called "this License").
   6.125 +Each licensee is addressed as "you".
   6.126 +
   6.127 +  A "library" means a collection of software functions and/or data
   6.128 +prepared so as to be conveniently linked with application programs
   6.129 +(which use some of those functions and data) to form executables.
   6.130 +
   6.131 +  The "Library", below, refers to any such software library or work
   6.132 +which has been distributed under these terms.  A "work based on the
   6.133 +Library" means either the Library or any derivative work under
   6.134 +copyright law: that is to say, a work containing the Library or a
   6.135 +portion of it, either verbatim or with modifications and/or translated
   6.136 +straightforwardly into another language.  (Hereinafter, translation is
   6.137 +included without limitation in the term "modification".)
   6.138 +
   6.139 +  "Source code" for a work means the preferred form of the work for
   6.140 +making modifications to it.  For a library, complete source code means
   6.141 +all the source code for all modules it contains, plus any associated
   6.142 +interface definition files, plus the scripts used to control compilation
   6.143 +and installation of the library.
   6.144 +
   6.145 +  Activities other than copying, distribution and modification are not
   6.146 +covered by this License; they are outside its scope.  The act of
   6.147 +running a program using the Library is not restricted, and output from
   6.148 +such a program is covered only if its contents constitute a work based
   6.149 +on the Library (independent of the use of the Library in a tool for
   6.150 +writing it).  Whether that is true depends on what the Library does
   6.151 +and what the program that uses the Library does.
   6.152 +  
   6.153 +  1. You may copy and distribute verbatim copies of the Library's
   6.154 +complete source code as you receive it, in any medium, provided that
   6.155 +you conspicuously and appropriately publish on each copy an
   6.156 +appropriate copyright notice and disclaimer of warranty; keep intact
   6.157 +all the notices that refer to this License and to the absence of any
   6.158 +warranty; and distribute a copy of this License along with the
   6.159 +Library.
   6.160 +
   6.161 +  You may charge a fee for the physical act of transferring a copy,
   6.162 +and you may at your option offer warranty protection in exchange for a
   6.163 +fee.
   6.164 +
   6.165 +  2. You may modify your copy or copies of the Library or any portion
   6.166 +of it, thus forming a work based on the Library, and copy and
   6.167 +distribute such modifications or work under the terms of Section 1
   6.168 +above, provided that you also meet all of these conditions:
   6.169 +
   6.170 +    a) The modified work must itself be a software library.
   6.171 +
   6.172 +    b) You must cause the files modified to carry prominent notices
   6.173 +    stating that you changed the files and the date of any change.
   6.174 +
   6.175 +    c) You must cause the whole of the work to be licensed at no
   6.176 +    charge to all third parties under the terms of this License.
   6.177 +
   6.178 +    d) If a facility in the modified Library refers to a function or a
   6.179 +    table of data to be supplied by an application program that uses
   6.180 +    the facility, other than as an argument passed when the facility
   6.181 +    is invoked, then you must make a good faith effort to ensure that,
   6.182 +    in the event an application does not supply such function or
   6.183 +    table, the facility still operates, and performs whatever part of
   6.184 +    its purpose remains meaningful.
   6.185 +
   6.186 +    (For example, a function in a library to compute square roots has
   6.187 +    a purpose that is entirely well-defined independent of the
   6.188 +    application.  Therefore, Subsection 2d requires that any
   6.189 +    application-supplied function or table used by this function must
   6.190 +    be optional: if the application does not supply it, the square
   6.191 +    root function must still compute square roots.)
   6.192 +
   6.193 +These requirements apply to the modified work as a whole.  If
   6.194 +identifiable sections of that work are not derived from the Library,
   6.195 +and can be reasonably considered independent and separate works in
   6.196 +themselves, then this License, and its terms, do not apply to those
   6.197 +sections when you distribute them as separate works.  But when you
   6.198 +distribute the same sections as part of a whole which is a work based
   6.199 +on the Library, the distribution of the whole must be on the terms of
   6.200 +this License, whose permissions for other licensees extend to the
   6.201 +entire whole, and thus to each and every part regardless of who wrote
   6.202 +it.
   6.203 +
   6.204 +Thus, it is not the intent of this section to claim rights or contest
   6.205 +your rights to work written entirely by you; rather, the intent is to
   6.206 +exercise the right to control the distribution of derivative or
   6.207 +collective works based on the Library.
   6.208 +
   6.209 +In addition, mere aggregation of another work not based on the Library
   6.210 +with the Library (or with a work based on the Library) on a volume of
   6.211 +a storage or distribution medium does not bring the other work under
   6.212 +the scope of this License.
   6.213 +
   6.214 +  3. You may opt to apply the terms of the ordinary GNU General Public
   6.215 +License instead of this License to a given copy of the Library.  To do
   6.216 +this, you must alter all the notices that refer to this License, so
   6.217 +that they refer to the ordinary GNU General Public License, version 2,
   6.218 +instead of to this License.  (If a newer version than version 2 of the
   6.219 +ordinary GNU General Public License has appeared, then you can specify
   6.220 +that version instead if you wish.)  Do not make any other change in
   6.221 +these notices.
   6.222 +
   6.223 +  Once this change is made in a given copy, it is irreversible for
   6.224 +that copy, so the ordinary GNU General Public License applies to all
   6.225 +subsequent copies and derivative works made from that copy.
   6.226 +
   6.227 +  This option is useful when you wish to copy part of the code of
   6.228 +the Library into a program that is not a library.
   6.229 +
   6.230 +  4. You may copy and distribute the Library (or a portion or
   6.231 +derivative of it, under Section 2) in object code or executable form
   6.232 +under the terms of Sections 1 and 2 above provided that you accompany
   6.233 +it with the complete corresponding machine-readable source code, which
   6.234 +must be distributed under the terms of Sections 1 and 2 above on a
   6.235 +medium customarily used for software interchange.
   6.236 +
   6.237 +  If distribution of object code is made by offering access to copy
   6.238 +from a designated place, then offering equivalent access to copy the
   6.239 +source code from the same place satisfies the requirement to
   6.240 +distribute the source code, even though third parties are not
   6.241 +compelled to copy the source along with the object code.
   6.242 +
   6.243 +  5. A program that contains no derivative of any portion of the
   6.244 +Library, but is designed to work with the Library by being compiled or
   6.245 +linked with it, is called a "work that uses the Library".  Such a
   6.246 +work, in isolation, is not a derivative work of the Library, and
   6.247 +therefore falls outside the scope of this License.
   6.248 +
   6.249 +  However, linking a "work that uses the Library" with the Library
   6.250 +creates an executable that is a derivative of the Library (because it
   6.251 +contains portions of the Library), rather than a "work that uses the
   6.252 +library".  The executable is therefore covered by this License.
   6.253 +Section 6 states terms for distribution of such executables.
   6.254 +
   6.255 +  When a "work that uses the Library" uses material from a header file
   6.256 +that is part of the Library, the object code for the work may be a
   6.257 +derivative work of the Library even though the source code is not.
   6.258 +Whether this is true is especially significant if the work can be
   6.259 +linked without the Library, or if the work is itself a library.  The
   6.260 +threshold for this to be true is not precisely defined by law.
   6.261 +
   6.262 +  If such an object file uses only numerical parameters, data
   6.263 +structure layouts and accessors, and small macros and small inline
   6.264 +functions (ten lines or less in length), then the use of the object
   6.265 +file is unrestricted, regardless of whether it is legally a derivative
   6.266 +work.  (Executables containing this object code plus portions of the
   6.267 +Library will still fall under Section 6.)
   6.268 +
   6.269 +  Otherwise, if the work is a derivative of the Library, you may
   6.270 +distribute the object code for the work under the terms of Section 6.
   6.271 +Any executables containing that work also fall under Section 6,
   6.272 +whether or not they are linked directly with the Library itself.
   6.273 +
   6.274 +  6. As an exception to the Sections above, you may also combine or
   6.275 +link a "work that uses the Library" with the Library to produce a
   6.276 +work containing portions of the Library, and distribute that work
   6.277 +under terms of your choice, provided that the terms permit
   6.278 +modification of the work for the customer's own use and reverse
   6.279 +engineering for debugging such modifications.
   6.280 +
   6.281 +  You must give prominent notice with each copy of the work that the
   6.282 +Library is used in it and that the Library and its use are covered by
   6.283 +this License.  You must supply a copy of this License.  If the work
   6.284 +during execution displays copyright notices, you must include the
   6.285 +copyright notice for the Library among them, as well as a reference
   6.286 +directing the user to the copy of this License.  Also, you must do one
   6.287 +of these things:
   6.288 +
   6.289 +    a) Accompany the work with the complete corresponding
   6.290 +    machine-readable source code for the Library including whatever
   6.291 +    changes were used in the work (which must be distributed under
   6.292 +    Sections 1 and 2 above); and, if the work is an executable linked
   6.293 +    with the Library, with the complete machine-readable "work that
   6.294 +    uses the Library", as object code and/or source code, so that the
   6.295 +    user can modify the Library and then relink to produce a modified
   6.296 +    executable containing the modified Library.  (It is understood
   6.297 +    that the user who changes the contents of definitions files in the
   6.298 +    Library will not necessarily be able to recompile the application
   6.299 +    to use the modified definitions.)
   6.300 +
   6.301 +    b) Use a suitable shared library mechanism for linking with the
   6.302 +    Library.  A suitable mechanism is one that (1) uses at run time a
   6.303 +    copy of the library already present on the user's computer system,
   6.304 +    rather than copying library functions into the executable, and (2)
   6.305 +    will operate properly with a modified version of the library, if
   6.306 +    the user installs one, as long as the modified version is
   6.307 +    interface-compatible with the version that the work was made with.
   6.308 +
   6.309 +    c) Accompany the work with a written offer, valid for at
   6.310 +    least three years, to give the same user the materials
   6.311 +    specified in Subsection 6a, above, for a charge no more
   6.312 +    than the cost of performing this distribution.
   6.313 +
   6.314 +    d) If distribution of the work is made by offering access to copy
   6.315 +    from a designated place, offer equivalent access to copy the above
   6.316 +    specified materials from the same place.
   6.317 +
   6.318 +    e) Verify that the user has already received a copy of these
   6.319 +    materials or that you have already sent this user a copy.
   6.320 +
   6.321 +  For an executable, the required form of the "work that uses the
   6.322 +Library" must include any data and utility programs needed for
   6.323 +reproducing the executable from it.  However, as a special exception,
   6.324 +the materials to be distributed need not include anything that is
   6.325 +normally distributed (in either source or binary form) with the major
   6.326 +components (compiler, kernel, and so on) of the operating system on
   6.327 +which the executable runs, unless that component itself accompanies
   6.328 +the executable.
   6.329 +
   6.330 +  It may happen that this requirement contradicts the license
   6.331 +restrictions of other proprietary libraries that do not normally
   6.332 +accompany the operating system.  Such a contradiction means you cannot
   6.333 +use both them and the Library together in an executable that you
   6.334 +distribute.
   6.335 +
   6.336 +  7. You may place library facilities that are a work based on the
   6.337 +Library side-by-side in a single library together with other library
   6.338 +facilities not covered by this License, and distribute such a combined
   6.339 +library, provided that the separate distribution of the work based on
   6.340 +the Library and of the other library facilities is otherwise
   6.341 +permitted, and provided that you do these two things:
   6.342 +
   6.343 +    a) Accompany the combined library with a copy of the same work
   6.344 +    based on the Library, uncombined with any other library
   6.345 +    facilities.  This must be distributed under the terms of the
   6.346 +    Sections above.
   6.347 +
   6.348 +    b) Give prominent notice with the combined library of the fact
   6.349 +    that part of it is a work based on the Library, and explaining
   6.350 +    where to find the accompanying uncombined form of the same work.
   6.351 +
   6.352 +  8. You may not copy, modify, sublicense, link with, or distribute
   6.353 +the Library except as expressly provided under this License.  Any
   6.354 +attempt otherwise to copy, modify, sublicense, link with, or
   6.355 +distribute the Library is void, and will automatically terminate your
   6.356 +rights under this License.  However, parties who have received copies,
   6.357 +or rights, from you under this License will not have their licenses
   6.358 +terminated so long as such parties remain in full compliance.
   6.359 +
   6.360 +  9. You are not required to accept this License, since you have not
   6.361 +signed it.  However, nothing else grants you permission to modify or
   6.362 +distribute the Library or its derivative works.  These actions are
   6.363 +prohibited by law if you do not accept this License.  Therefore, by
   6.364 +modifying or distributing the Library (or any work based on the
   6.365 +Library), you indicate your acceptance of this License to do so, and
   6.366 +all its terms and conditions for copying, distributing or modifying
   6.367 +the Library or works based on it.
   6.368 +
   6.369 +  10. Each time you redistribute the Library (or any work based on the
   6.370 +Library), the recipient automatically receives a license from the
   6.371 +original licensor to copy, distribute, link with or modify the Library
   6.372 +subject to these terms and conditions.  You may not impose any further
   6.373 +restrictions on the recipients' exercise of the rights granted herein.
   6.374 +You are not responsible for enforcing compliance by third parties with
   6.375 +this License.
   6.376 +
   6.377 +  11. If, as a consequence of a court judgment or allegation of patent
   6.378 +infringement or for any other reason (not limited to patent issues),
   6.379 +conditions are imposed on you (whether by court order, agreement or
   6.380 +otherwise) that contradict the conditions of this License, they do not
   6.381 +excuse you from the conditions of this License.  If you cannot
   6.382 +distribute so as to satisfy simultaneously your obligations under this
   6.383 +License and any other pertinent obligations, then as a consequence you
   6.384 +may not distribute the Library at all.  For example, if a patent
   6.385 +license would not permit royalty-free redistribution of the Library by
   6.386 +all those who receive copies directly or indirectly through you, then
   6.387 +the only way you could satisfy both it and this License would be to
   6.388 +refrain entirely from distribution of the Library.
   6.389 +
   6.390 +If any portion of this section is held invalid or unenforceable under any
   6.391 +particular circumstance, the balance of the section is intended to apply,
   6.392 +and the section as a whole is intended to apply in other circumstances.
   6.393 +
   6.394 +It is not the purpose of this section to induce you to infringe any
   6.395 +patents or other property right claims or to contest validity of any
   6.396 +such claims; this section has the sole purpose of protecting the
   6.397 +integrity of the free software distribution system which is
   6.398 +implemented by public license practices.  Many people have made
   6.399 +generous contributions to the wide range of software distributed
   6.400 +through that system in reliance on consistent application of that
   6.401 +system; it is up to the author/donor to decide if he or she is willing
   6.402 +to distribute software through any other system and a licensee cannot
   6.403 +impose that choice.
   6.404 +
   6.405 +This section is intended to make thoroughly clear what is believed to
   6.406 +be a consequence of the rest of this License.
   6.407 +
   6.408 +  12. If the distribution and/or use of the Library is restricted in
   6.409 +certain countries either by patents or by copyrighted interfaces, the
   6.410 +original copyright holder who places the Library under this License may add
   6.411 +an explicit geographical distribution limitation excluding those countries,
   6.412 +so that distribution is permitted only in or among countries not thus
   6.413 +excluded.  In such case, this License incorporates the limitation as if
   6.414 +written in the body of this License.
   6.415 +
   6.416 +  13. The Free Software Foundation may publish revised and/or new
   6.417 +versions of the Lesser General Public License from time to time.
   6.418 +Such new versions will be similar in spirit to the present version,
   6.419 +but may differ in detail to address new problems or concerns.
   6.420 +
   6.421 +Each version is given a distinguishing version number.  If the Library
   6.422 +specifies a version number of this License which applies to it and
   6.423 +"any later version", you have the option of following the terms and
   6.424 +conditions either of that version or of any later version published by
   6.425 +the Free Software Foundation.  If the Library does not specify a
   6.426 +license version number, you may choose any version ever published by
   6.427 +the Free Software Foundation.
   6.428 +
   6.429 +  14. If you wish to incorporate parts of the Library into other free
   6.430 +programs whose distribution conditions are incompatible with these,
   6.431 +write to the author to ask for permission.  For software which is
   6.432 +copyrighted by the Free Software Foundation, write to the Free
   6.433 +Software Foundation; we sometimes make exceptions for this.  Our
   6.434 +decision will be guided by the two goals of preserving the free status
   6.435 +of all derivatives of our free software and of promoting the sharing
   6.436 +and reuse of software generally.
   6.437 +
   6.438 +			    NO WARRANTY
   6.439 +
   6.440 +  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
   6.441 +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
   6.442 +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
   6.443 +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
   6.444 +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
   6.445 +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
   6.446 +PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
   6.447 +LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
   6.448 +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
   6.449 +
   6.450 +  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
   6.451 +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
   6.452 +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
   6.453 +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
   6.454 +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
   6.455 +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
   6.456 +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
   6.457 +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
   6.458 +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
   6.459 +DAMAGES.
   6.460 +
   6.461 +		     END OF TERMS AND CONDITIONS
   6.462 +
   6.463 +           How to Apply These Terms to Your New Libraries
   6.464 +
   6.465 +  If you develop a new library, and you want it to be of the greatest
   6.466 +possible use to the public, we recommend making it free software that
   6.467 +everyone can redistribute and change.  You can do so by permitting
   6.468 +redistribution under these terms (or, alternatively, under the terms of the
   6.469 +ordinary General Public License).
   6.470 +
   6.471 +  To apply these terms, attach the following notices to the library.  It is
   6.472 +safest to attach them to the start of each source file to most effectively
   6.473 +convey the exclusion of warranty; and each file should have at least the
   6.474 +"copyright" line and a pointer to where the full notice is found.
   6.475 +
   6.476 +    <one line to give the library's name and a brief idea of what it does.>
   6.477 +    Copyright (C) <year>  <name of author>
   6.478 +
   6.479 +    This library is free software; you can redistribute it and/or
   6.480 +    modify it under the terms of the GNU Lesser General Public
   6.481 +    License as published by the Free Software Foundation; either
   6.482 +    version 2.1 of the License, or (at your option) any later version.
   6.483 +
   6.484 +    This library is distributed in the hope that it will be useful,
   6.485 +    but WITHOUT ANY WARRANTY; without even the implied warranty of
   6.486 +    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   6.487 +    Lesser General Public License for more details.
   6.488 +
   6.489 +    You should have received a copy of the GNU Lesser General Public
   6.490 +    License along with this library; if not, write to the Free Software
   6.491 +    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
   6.492 +
   6.493 +Also add information on how to contact you by electronic and paper mail.
   6.494 +
   6.495 +You should also get your employer (if you work as a programmer) or your
   6.496 +school, if any, to sign a "copyright disclaimer" for the library, if
   6.497 +necessary.  Here is a sample; alter the names:
   6.498 +
   6.499 +  Yoyodyne, Inc., hereby disclaims all copyright interest in the
   6.500 +  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
   6.501 +
   6.502 +  <signature of Ty Coon>, 1 April 1990
   6.503 +  Ty Coon, President of Vice
   6.504 +
   6.505 +That's all there is to it!
     7.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     7.2 +++ b/java/cewolf-1.0/RELEASE.txt	Sat Feb 28 21:31:02 2009 +0100
     7.3 @@ -0,0 +1,286 @@
     7.4 +Release Notes for Version 1.0
     7.5 +--------------------------------
     7.6 +-Jpeg image support added.
     7.7 +-Added new tag parameters to img and legend:
     7.8 +	-removeAfterRender will remove images from storage immediately. Defaults to False. NOTE: This 
     7.9 +	may cause problems if your users expect to copy or save the images from the browser as some
    7.10 +	browsers will put the url in the paste buffer and attempt to reload when pasted somewhere such 
    7.11 +	as MS Word.
    7.12 +	-forceSessionId will add jsessionid parameter to the image url. Defaults to True. This matches
    7.13 +	existing functionality but now allows the option to disable this for certain use cases.
    7.14 +-Supports JFC 1.0.0 Final
    7.15 +	JFC no longer supports the signals chart type. This has been commented out in cewolf for now
    7.16 +	because there is talk on the forum that it may come back.
    7.17 +-At release time, site is not fully updated. This will come in the near future as I move the site fully to Maven2.
    7.18 +	
    7.19 +
    7.20 +Release Notes for Version 0.12.0
    7.21 +--------------------------------
    7.22 +-Supports JFC 1.0.0-RC1
    7.23 +
    7.24 +Release Notes for Version 0.11.0 Alpha
    7.25 +--------------------------------
    7.26 +-Now supports JFC 1.0 Pre 2
    7.27 +-Fixed bugs:1165987,1165979,1165967
    7.28 +-There where significant changes to the JFC Api in this release. See www.jfree.org forums
    7.29 + for specific information. Chances are very good that your chart processors WILL BREAK because of these
    7.30 + changes. This is not because of Cewolf, but because the JFC APIs changed.
    7.31 +
    7.32 +Release Notes for Version 0.10.3
    7.33 +--------------------------------
    7.34 +-Added optional config parameter for FileStorage: "FileStorage.deleteOnExit" 
    7.35 +	to get the saved files deleted at normal shutdown.
    7.36 +-Improved overlaidchart can contain any number of sub-charts
    7.37 +-Added ChartImageRenderListener event callback interface can be implemented by ChartPostProcessor
    7.38 +	to get called back after the image rendered. 
    7.39 +	Useful to acquire JFreeChart's ChartRenderingInfo object.
    7.40 +-Fixed [ 1158392 ] Configuration object causes NPE when servlet reloads
    7.41 +-Fixed chart-renderer factory problem; that if multiple charts of the same type appeared
    7.42 +	on the same page they shared the same renderer, therefore if a post-processor customized
    7.43 +	that renderer all charts were affected.
    7.44 +-Fixed that tooltips would not appear in firefox; when the jsp page in a subdir
    7.45 +	need to use /etc/overlib.js style path in config for this.	
    7.46 +
    7.47 +Release Notes for Version 0.10.2
    7.48 +--------------------------------
    7.49 +Fixed cewolf.jar in the wrong folder.
    7.50 +Fixed NPE in Renderer
    7.51 +
    7.52 +Release Notes for Version 0.10.1
    7.53 +--------------------------------
    7.54 +Fixed bar chart orientation and few other bugs.
    7.55 +
    7.56 +Release Notes for Version 0.10
    7.57 +--------------------------------
    7.58 +-bundled with JFreeChart 0.9.21
    7.59 +-added option to allow use of JFreeChart link and tooltip generators
    7.60 +
    7.61 +Release Notes for Version 0.10a6
    7.62 +--------------------------------
    7.63 +-bundled with JFreeChart 0.9.18
    7.64 +-new storage option that provides better support for long duration sessions. See bug 100248 for details.
    7.65 +
    7.66 +Realease Notes for Version 0.10a1
    7.67 +--------------------------------
    7.68 +- added support for meter, stacked area and bubble charts
    7.69 +- bundled with JFreeChart 0.9.11
    7.70 +
    7.71 +Realease Notes for Version 0.9.5
    7.72 +--------------------------------
    7.73 +- fixed incompatibility to Servlet API 2.2
    7.74 +- fixed pluginspace attribute in non SVG images
    7.75 +
    7.76 +Realease Notes for Version 0.9.4
    7.77 +--------------------------------
    7.78 +- fixed ConfigurationException when providing no param for CewolfServlet
    7.79 +
    7.80 +Realease Notes for Version 0.9.3
    7.81 +--------------------------------
    7.82 +- pluggable storage concept for chart images
    7.83 +- fixed large memory consumptions
    7.84 +- fixed another caching bug
    7.85 +
    7.86 +Realease Notes for Version 0.9.2
    7.87 +--------------------------------
    7.88 +- improved SVG support
    7.89 +
    7.90 +Realease Notes for Version 0.9.1
    7.91 +--------------------------------
    7.92 +- changed <combined-chart> to <combinedchart> to support JSP 1.1
    7.93 +- changed <overlaid-chart> to <overlaidchart> to support JSP 1.1
    7.94 +- added var attribute to <imgurl> to expose URL as page attribute
    7.95 +- fixed wrong mimetype in testpage.jsp for SVG
    7.96 +
    7.97 +Realease Notes for Version 0.9
    7.98 +--------------------------------
    7.99 +- bundled with JFreeChart 0.9.8
   7.100 +- added support for overlay charts (fist steps)
   7.101 +- added support for combined charts (fist steps)
   7.102 +- added usecache attribute to <producer> to disable data caching
   7.103 +- producer id is now passed to produceDataset() as parameter by default. See Javadoc of DatasetProducer
   7.104 +- image URLs are always encoded with session ID parameter even if cookies are enabled
   7.105 +- image URLs paramaters correctly escape ampersands
   7.106 +- semantic of renderer attribute of <img> and <imgurl> changed (see taglib doc)
   7.107 +- logging is now handled by Apache's commons.logging
   7.108 +- API change to DatasetProducer to let the producer decide about 
   7.109 +  data caching
   7.110 +- added a configuration paramter overliburl to define the overlib.js destination relative to webapp URL
   7.111 +- removed expires attributes from taglibrary as they are not used anymore
   7.112 +- fixed configuration bugs
   7.113 +- fixed caching bugs by changing caching to be session based
   7.114 +- fixed memory leaks
   7.115 +- fixed synchronization issue when using more than one timeseries chart on a page
   7.116 +- fixed incompatibilities between tag attribute types and setter methods
   7.117 +
   7.118 +Realease Notes for Version 0.8.9
   7.119 +--------------------------------
   7.120 +- fixed the "null is not a valid chart id" bug
   7.121 +- fixed browser detection bug (729378)
   7.122 +- Socket write detection bug (729384,729501,730490)
   7.123 +- fixed synchronization issues
   7.124 +- removed console output(717861)
   7.125 +
   7.126 +Realease Notes for Version 0.8.8
   7.127 +--------------------------------
   7.128 +- fixed bug: missing closing bracket in <img> tags
   7.129 +
   7.130 +Realease Notes for Version 0.8.7
   7.131 +--------------------------------
   7.132 +- bundled with JFreeCharts 0.9.4
   7.133 +
   7.134 +Realease Notes for Version 0.8.6
   7.135 +--------------------------------
   7.136 +- fixed a bug which caused a ConfigurationException if the Cewolf servlet
   7.137 +  was not loaded on startup
   7.138 +
   7.139 +Realease Notes for Version 0.8.5
   7.140 +--------------------------------
   7.141 +- fixed the server side image problem which occured on some machines
   7.142 +
   7.143 +Realease Notes for Version 0.8.4
   7.144 +--------------------------------
   7.145 +- now runs on resin-2.1.5
   7.146 +
   7.147 +Realease Notes for Version 0.8.3
   7.148 +--------------------------------
   7.149 +- added some header information in HTTP header to improve performance
   7.150 +- added a debug paramter to servlet to turn on and of debugging
   7.151 +
   7.152 +Realease Notes for Version 0.8.2
   7.153 +--------------------------------
   7.154 +- useful image caching with cleanup mechanisms to avoid running out of memory
   7.155 +- bugfix in image key computing
   7.156 +- faster caching and key generation
   7.157 +- init parameters for cewolf servlet to manipulate caching (see example etc/web.xml)
   7.158 +
   7.159 +Realease Notes for Version 0.8.1
   7.160 +--------------------------------
   7.161 +- Removed dashes from tag names to make them work in a JSP 1.1 container
   7.162 +  gradient-paint -> gradientpaint
   7.163 +  texture-paint -> texturepaint
   7.164 +  color-paint -> colorpaint
   7.165 +- Improved compatibility. Tested on
   7.166 +  - Tomcat 3.3.1
   7.167 +  - Tomcat 4.0
   7.168 +  - Tomcat 4.1.10
   7.169 +  - JRun 4.0.SP1 beta
   7.170 +- some bug fixes in tag handlers
   7.171 +
   7.172 +Realease Notes for Version 0.8
   7.173 +------------------------------
   7.174 +- ChartPostProcessor process method signature now has a third parameter with the
   7.175 +  current dataset of the rendered chart to enhance capabilities of processing
   7.176 +- <chart> tag does not render a image anymore. <chart> is only used to define
   7.177 +  a chart instance initially inside a JSP. The rendering of the chart image is
   7.178 +  performed by the <img> tag which is passed the chart id as an attribute.
   7.179 +- image maps and tooltips implemented (tested on IE 5.5 and Mozilla 1.1)
   7.180 +- added tag <imgurl> which can be used as the src attribute of an HTML img tag
   7.181 +- obsolete <panel> tag has been removed all attributes can be set directly to
   7.182 +  the <chart> tag now
   7.183 +- server side caching of images to gain performance blast when requesting the same
   7.184 +  chart again
   7.185 +- many redesigns
   7.186 +- polished example webapp
   7.187 +- fixed a bug which prevented reloading of a page
   7.188 +- fixed a bug which let the tag produce same keys for different charts whan tags
   7.189 +  are pooled
   7.190 +
   7.191 +Known issues:
   7.192 +- tooltips for pie3d charts are not positioned correctly 
   7.193 +
   7.194 +Realease Notes for Version 0.7.1
   7.195 +--------------------------------
   7.196 +- fixed a typo in TLD (boder instead of border in two tags)
   7.197 +- removed "antialias" attribute in TLD for tag legend as it is not implemented
   7.198 +  yet
   7.199 +
   7.200 +Realease Notes for Version 0.7
   7.201 +------------------------------
   7.202 +- unlimited customization of generated charts possible through additional
   7.203 +  ChartPostprocessor objects. See <chartpostprocessor> documentation!
   7.204 +- changed signature of DatasetProducer. Params are now passed as Map instead
   7.205 +  HashMap
   7.206 +- new <legend> tag to render the chart's legend separately
   7.207 +- added "legend" and "legendanchor" attribute to panel and chart tag to swith
   7.208 +  on/off and manipulate legend display
   7.209 +- new tag <legend> allows the separate rendering of the chart's legend somewhere
   7.210 +  in the JSP
   7.211 +- <chart> and <legend> tag now support all HTML 4.0 img tag attributes
   7.212 +- rendering servlet now renders an exception into the delivered image if one is
   7.213 +  raised when trying to render the chart
   7.214 +- removed obsolete example page producerparams.jsp (view testpage.jsp instead)
   7.215 +- the example.war binary is now distributed separately
   7.216 +- example web.xml no has an url-mapping to work in more J2EE containers
   7.217 +- better usage of JSP callbacks by overriding the release() method in tags
   7.218 +- enhanced test page for JSP 1.1 and JSP 1.2 containers
   7.219 +- enhanced image loading performance
   7.220 +- redesigned, optimized and simplified some issues
   7.221 +- some javadocs
   7.222 +
   7.223 +Realease Notes for Version 0.6.2
   7.224 +--------------------------------
   7.225 +- fixed a bug in testpage.jsp and testpage-1.1.jsp which closed the panel tag twice
   7.226 +
   7.227 +Realease Notes for Version 0.6.1
   7.228 +--------------------------------
   7.229 +- fixed a bug in the tag library descriptor which defined the background 
   7.230 +  attribute of tag chart as a float
   7.231 +
   7.232 +Realease Notes for Version 0.6
   7.233 +------------------------------
   7.234 +- added tags <color-paint>, <gradient-paint> and <texture-paint>
   7.235 +  for background paints of chart panel
   7.236 +- some refactorings in tag lib implementation
   7.237 +- testpage enhanced
   7.238 +
   7.239 +Realease Notes for Version 0.5.1
   7.240 +--------------------------------
   7.241 +- fixed a bug which prevented the reuse of the chart tag instance 
   7.242 +  by the container
   7.243 +
   7.244 +Realease Notes for Version 0.5
   7.245 +------------------------------
   7.246 +- the data tag now embeds a producer tag, future releases will have other
   7.247 +  possibilities to provide data (e.g. SQL)
   7.248 +- added support for Pie3DChart
   7.249 +- added <panel> tag to be embedded in <chart> tag
   7.250 +- embedded <panel> tag attributes override coressponing parent tags
   7.251 +  attributes
   7.252 +- <chart> tag now extends <panel> tag
   7.253 +- changed value type of <param> tag to java.io.Serilizable
   7.254 +- added antialias support
   7.255 +- added tag library documentation
   7.256 +- added some javadocs
   7.257 +- added some example JSPs
   7.258 +
   7.259 +Realease Notes for Version 0.4
   7.260 +------------------------------
   7.261 +- replaced TagExtraInfo with TagLibraryValidator
   7.262 +- moved .tld file to WEB-INF in sample WAR due to problems in some Tomcat 
   7.263 +  environments
   7.264 +- DatasetProducer now takes a HashMap containing additional parameters for
   7.265 +  dataset production
   7.266 +- Added tutorial to docs
   7.267 +- some additional JavaDocs
   7.268 +
   7.269 +Realease Notes for Version 0.3
   7.270 +------------------------------
   7.271 +- included TagExtraInfo to check charttype at JSP compile time
   7.272 +- added documentation
   7.273 +- some redesigns
   7.274 +
   7.275 +Realease Notes for Version 0.2
   7.276 +------------------------------
   7.277 +- updated to JFreeChart 0.9.2
   7.278 +- all 20 chart types from JFreeChart's ChartFactory are supported
   7.279 +- some redesigns
   7.280 +- some javadocs
   7.281 +
   7.282 +
   7.283 +Realease Notes for Version 0.1.1
   7.284 +--------------------------------
   7.285 +This is the first alpha-release of Cewolf.
   7.286 +It is useable already but there are not many possibilities to change the view of 
   7.287 +the current charts.
   7.288 +The documentation is very less.
   7.289 +Not all types of charts are supported.
   7.290 \ No newline at end of file
     8.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     8.2 +++ b/java/cewolf-1.0/etc/cewolf-1.1.tld	Sat Feb 28 21:31:02 2009 +0100
     8.3 @@ -0,0 +1,1234 @@
     8.4 +<?xml version="1.0" encoding="ISO-8859-1"?>
     8.5 +<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN" "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
     8.6 +
     8.7 +<taglib>
     8.8 +<tlib-version>0.9.3</tlib-version>
     8.9 +<jsp-version>1.2</jsp-version>
    8.10 +<short-name>Cewolf Tag Library</short-name>
    8.11 +<uri>http://cewolf.sourceforge.net/taglib/cewolf.tld</uri>
    8.12 +<display-name>Cewolf Tag Library</display-name>
    8.13 +<description>This tag library is designed to describe charts of all kinds.</description>
    8.14 +<tag>
    8.15 +    <name>plot</name>
    8.16 +    <tag-class>de.laures.cewolf.taglib.tags.PlotTag</tag-class>
    8.17 +    <body-content>JSP</body-content>
    8.18 +    <description>
    8.19 +    	The plot tag is nested inside a complex chart to define a nested or layerd plot instance.
    8.20 +        @required-child data
    8.21 +    </description>
    8.22 +    <attribute>
    8.23 +        <name>type</name>
    8.24 +        <required>true</required>
    8.25 +        <rtexprvalue>true</rtexprvalue>
    8.26 +        <description>
    8.27 +        	The type  of the plot. One of xyarea, xyline, xyshapesandlines ,
    8.28 +			scatter, xyverticalbar, step, candlestick, highlow, signal,
    8.29 +			verticlebar, area, line, shapesandlines
    8.30 +	    </description>
    8.31 +    </attribute>
    8.32 +    <attribute>
    8.33 +        <name>xaxislabel</name>
    8.34 +        <required>false</required>
    8.35 +        <rtexprvalue>true</rtexprvalue>
    8.36 +        <description>
    8.37 +            Title of the plot's x-axis. This attributes is
    8.38 +            only used for horizontally combined charts.
    8.39 +        </description>
    8.40 +    </attribute>
    8.41 +    <attribute>
    8.42 +        <name>yaxislabel</name>
    8.43 +        <required>false</required>
    8.44 +        <rtexprvalue>true</rtexprvalue>
    8.45 +        <description>
    8.46 +            Title of the plot's y-axis. This attributes is
    8.47 +            only used for vertically combined charts.
    8.48 +        </description>
    8.49 +    </attribute>
    8.50 +</tag>
    8.51 +<tag>
    8.52 +    <name>img</name>
    8.53 +    <tag-class>de.laures.cewolf.taglib.tags.ChartImgTag</tag-class>
    8.54 +    <body-content>JSP</body-content>
    8.55 +    <description>
    8.56 +    	This tag is a specialized HTML img tag. It renders the chart
    8.57 +    	which has been specified by a &lt;chart&gt; tag in the same page.
    8.58 +      @optional-child map
    8.59 +    </description>
    8.60 +    <attribute>
    8.61 +        <name>renderer</name>
    8.62 +        <required>true</required>
    8.63 +        <rtexprvalue>true</rtexprvalue>
    8.64 +        <description>
    8.65 +            Path to rendering servlet. Any path that starts with a '/' is assumed to refer to a resource relative to web application root. Otherwise, the path is assumed to refer to resource relative to the current page directory.
    8.66 +        </description>
    8.67 +    </attribute>
    8.68 +    <attribute>
    8.69 +        <name>chartid</name>
    8.70 +        <required>true</required>
    8.71 +        <rtexprvalue>true</rtexprvalue>
    8.72 +        <description>
    8.73 +        	The id of the chart to render.
    8.74 +        </description>
    8.75 +    </attribute>
    8.76 +    <attribute>
    8.77 +        <name>width</name>
    8.78 +        <required>true</required>
    8.79 +        <rtexprvalue>true</rtexprvalue>
    8.80 +        <description>
    8.81 +            Width of the rendered chart image in pixel.
    8.82 +        </description>
    8.83 +    </attribute>
    8.84 +    <attribute>
    8.85 +        <name>height</name>
    8.86 +        <required>true</required>
    8.87 +        <rtexprvalue>true</rtexprvalue>
    8.88 +        <description>
    8.89 +            Height of the rendered chart image in pixel.
    8.90 +        </description>
    8.91 +    </attribute>
    8.92 +    <attribute>
    8.93 +        <name>mime</name>
    8.94 +        <required>false</required>
    8.95 +        <rtexprvalue>true</rtexprvalue>
    8.96 +        <description>
    8.97 +            The MIME type of the image. Currently image/png (default) and image/svg are supported.
    8.98 +            @default image/png
    8.99 +        </description>
   8.100 +    </attribute>
   8.101 +    <attribute>
   8.102 +        <name>alt</name>
   8.103 +        <required>false</required>
   8.104 +        <rtexprvalue>true</rtexprvalue>
   8.105 +        <description>
   8.106 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
   8.107 +        </description>
   8.108 +    </attribute>
   8.109 +        <attribute>
   8.110 +        <name>timeout</name>
   8.111 +        <required>false</required>
   8.112 +        <rtexprvalue>true</rtexprvalue>
   8.113 +        <description>
   8.114 +           Sets the timeout value used in the LongTermSessionStorage obj. Value is in seconds.
   8.115 +        </description>
   8.116 +    </attribute>
   8.117 +    <attribute>
   8.118 +        <name>hspace</name>
   8.119 +        <required>false</required>
   8.120 +        <rtexprvalue>true</rtexprvalue>
   8.121 +        <description>
   8.122 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
   8.123 +        </description>
   8.124 +    </attribute>
   8.125 +    <attribute>
   8.126 +        <name>vspace</name>
   8.127 +        <required>false</required>
   8.128 +        <rtexprvalue>true</rtexprvalue>
   8.129 +        <description>
   8.130 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
   8.131 +        </description>
   8.132 +    </attribute>
   8.133 +    <attribute>
   8.134 +        <name>align</name>
   8.135 +        <required>false</required>
   8.136 +        <rtexprvalue>true</rtexprvalue>
   8.137 +        <description>
   8.138 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
   8.139 +        </description>
   8.140 +    </attribute>
   8.141 +    <attribute>
   8.142 +        <name>border</name>
   8.143 +        <required>false</required>
   8.144 +        <rtexprvalue>true</rtexprvalue>
   8.145 +        <description>
   8.146 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
   8.147 +        </description>
   8.148 +    </attribute>
   8.149 +    <attribute>
   8.150 +        <name>ismap</name>
   8.151 +        <required>false</required>
   8.152 +        <rtexprvalue>true</rtexprvalue>
   8.153 +        <description>
   8.154 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
   8.155 +        </description>
   8.156 +    </attribute>
   8.157 +    <attribute>
   8.158 +        <name>longdesc</name>
   8.159 +        <required>false</required>
   8.160 +        <rtexprvalue>true</rtexprvalue>
   8.161 +        <description>
   8.162 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
   8.163 +        </description>
   8.164 +    </attribute>
   8.165 +    <attribute>
   8.166 +        <name>usemap</name>
   8.167 +        <required>false</required>
   8.168 +        <rtexprvalue>true</rtexprvalue>
   8.169 +        <description>
   8.170 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
   8.171 +        </description>
   8.172 +    </attribute>
   8.173 +    <attribute>
   8.174 +        <name>class</name>
   8.175 +        <required>false</required>
   8.176 +        <rtexprvalue>true</rtexprvalue>
   8.177 +        <description>
   8.178 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
   8.179 +        </description>
   8.180 +    </attribute>
   8.181 +    <attribute>
   8.182 +        <name>dir</name>
   8.183 +        <required>false</required>
   8.184 +        <rtexprvalue>true</rtexprvalue>
   8.185 +        <description>
   8.186 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
   8.187 +        </description>
   8.188 +    </attribute>
   8.189 +    <attribute>
   8.190 +        <name>lang</name>
   8.191 +        <required>false</required>
   8.192 +        <rtexprvalue>true</rtexprvalue>
   8.193 +        <description>
   8.194 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
   8.195 +        </description>
   8.196 +    </attribute>
   8.197 +    <attribute>
   8.198 +        <name>onclick</name>
   8.199 +        <required>false</required>
   8.200 +        <rtexprvalue>true</rtexprvalue>
   8.201 +        <description>
   8.202 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
   8.203 +        </description>
   8.204 +    </attribute>
   8.205 +    <attribute>
   8.206 +        <name>ondbclick</name>
   8.207 +        <required>false</required>
   8.208 +        <rtexprvalue>true</rtexprvalue>
   8.209 +        <description>
   8.210 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
   8.211 +        </description>
   8.212 +    </attribute>
   8.213 +    <attribute>
   8.214 +        <name>onkeydown</name>
   8.215 +        <required>false</required>
   8.216 +        <rtexprvalue>true</rtexprvalue>
   8.217 +        <description>
   8.218 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
   8.219 +        </description>
   8.220 +    </attribute>
   8.221 +    <attribute>
   8.222 +        <name>onkeypress</name>
   8.223 +        <required>false</required>
   8.224 +        <rtexprvalue>true</rtexprvalue>
   8.225 +        <description>
   8.226 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
   8.227 +        </description>
   8.228 +    </attribute>
   8.229 +    <attribute>
   8.230 +        <name>onkeyup</name>
   8.231 +        <required>false</required>
   8.232 +        <rtexprvalue>true</rtexprvalue>
   8.233 +        <description>
   8.234 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
   8.235 +        </description>
   8.236 +    </attribute>
   8.237 +    <attribute>
   8.238 +        <name>onmousedown</name>
   8.239 +        <required>false</required>
   8.240 +        <rtexprvalue>true</rtexprvalue>
   8.241 +        <description>
   8.242 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
   8.243 +        </description>
   8.244 +    </attribute>
   8.245 +    <attribute>
   8.246 +        <name>onmousemove</name>
   8.247 +        <required>false</required>
   8.248 +        <rtexprvalue>true</rtexprvalue>
   8.249 +        <description>
   8.250 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
   8.251 +        </description>
   8.252 +    </attribute>
   8.253 +    <attribute>
   8.254 +        <name>onmouseout</name>
   8.255 +        <required>false</required>
   8.256 +        <rtexprvalue>true</rtexprvalue>
   8.257 +        <description>
   8.258 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
   8.259 +        </description>
   8.260 +    </attribute>
   8.261 +    <attribute>
   8.262 +        <name>onmouseover</name>
   8.263 +        <required>false</required>
   8.264 +        <rtexprvalue>true</rtexprvalue>
   8.265 +        <description>
   8.266 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
   8.267 +        </description>
   8.268 +    </attribute>
   8.269 +    <attribute>
   8.270 +        <name>onmouseup</name>
   8.271 +        <required>false</required>
   8.272 +        <rtexprvalue>true</rtexprvalue>
   8.273 +        <description>
   8.274 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
   8.275 +        </description>
   8.276 +    </attribute>
   8.277 +    <attribute>
   8.278 +        <name>style</name>
   8.279 +        <required>false</required>
   8.280 +        <rtexprvalue>true</rtexprvalue>
   8.281 +        <description>
   8.282 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
   8.283 +        </description>
   8.284 +    </attribute>
   8.285 +    <attribute>
   8.286 +        <name>htmltitle</name>
   8.287 +        <required>false</required>
   8.288 +        <rtexprvalue>true</rtexprvalue>
   8.289 +        <description>
   8.290 +           Corresponds to appropriate HMTL &lt;img&gt; title attribute.
   8.291 +        </description>
   8.292 +    </attribute>
   8.293 +    <attribute>
   8.294 +        <name>forceSessionId</name>
   8.295 +        <required>false</required>
   8.296 +        <rtexprvalue>true</rtexprvalue>
   8.297 +        <description>
   8.298 +           Add JSession id.
   8.299 +        </description>
   8.300 +    </attribute>
   8.301 +    <attribute>
   8.302 +        <name>removeAfterRender</name>
   8.303 +        <required>false</required>
   8.304 +        <rtexprvalue>true</rtexprvalue>
   8.305 +        <description>
   8.306 +           Remove image after rendering (defaults to false).
   8.307 +        </description>
   8.308 +    </attribute>
   8.309 +</tag>
   8.310 +<tag>
   8.311 +    <name>imgurl</name>
   8.312 +    <tag-class>de.laures.cewolf.taglib.tags.ChartImgURLTag</tag-class>
   8.313 +    <tei-class>de.laures.cewolf.taglib.tags.ChartImgURLTagEI</tei-class>
   8.314 +    <description>
   8.315 +    	This tag can be used as the src attribute of a HTML img tag. E.g.: 
   8.316 +    	&lt;img src='&lt;imgurl chartid="foobar" renderer="cewolf" width="100" height="100"/&gt;'&gt;
   8.317 +    	If the var attribute is used the URL is exposed as a page attribute of type String.
   8.318 +        @extends img
   8.319 +    </description>
   8.320 +    <attribute>
   8.321 +        <name>var</name>
   8.322 +        <required>false</required>
   8.323 +        <rtexprvalue>true</rtexprvalue>
   8.324 +        <description>
   8.325 +            Name of the page scope attribute to hold the URL. If not specified the URL is printed to the page outstream.
   8.326 +        </description>
   8.327 +    </attribute>
   8.328 +    <attribute>
   8.329 +        <name>renderer</name>
   8.330 +        <required>true</required>
   8.331 +        <rtexprvalue>true</rtexprvalue>
   8.332 +        <description>
   8.333 +            Path to rendering servlet. Any path that starts with a '/' is assumed to refer to a resource relative to web application root. Otherwise, the path is assumed to refer to resource relative to the current page directory.
   8.334 +        </description>
   8.335 +    </attribute>
   8.336 +    <attribute>
   8.337 +        <name>chartid</name>
   8.338 +        <required>true</required>
   8.339 +        <rtexprvalue>true</rtexprvalue>
   8.340 +        <description>
   8.341 +        	The id of the chart to render.
   8.342 +        </description>
   8.343 +    </attribute>
   8.344 +    <attribute>
   8.345 +        <name>width</name>
   8.346 +        <required>true</required>
   8.347 +        <rtexprvalue>true</rtexprvalue>
   8.348 +        <description>
   8.349 +            Width of the rendered chart image in pixel.
   8.350 +        </description>
   8.351 +    </attribute>
   8.352 +    <attribute>
   8.353 +        <name>height</name>
   8.354 +        <required>true</required>
   8.355 +        <rtexprvalue>true</rtexprvalue>
   8.356 +        <description>
   8.357 +            Height of the rendered chart image in pixel.
   8.358 +        </description>
   8.359 +    </attribute>
   8.360 +    <attribute>
   8.361 +        <name>mime</name>
   8.362 +        <required>false</required>
   8.363 +        <rtexprvalue>true</rtexprvalue>
   8.364 +        <description>
   8.365 +            The MIME type of the image. Currently image/png (default) and image/svg are supported.
   8.366 +            @default image/png
   8.367 +        </description>
   8.368 +    </attribute>
   8.369 +</tag>
   8.370 +<tag>
   8.371 +    <name>chart</name>
   8.372 +    <tag-class>de.laures.cewolf.taglib.tags.SimpleChartTag</tag-class>
   8.373 +    <description>
   8.374 +        Root tag of a chart description.
   8.375 +        @root
   8.376 +        @required-child data
   8.377 +        @optional-child chartpostprocessor
   8.378 +    </description>
   8.379 +    <attribute>
   8.380 +        <name>id</name>
   8.381 +        <required>true</required>
   8.382 +        <rtexprvalue>true</rtexprvalue>
   8.383 +        <description>
   8.384 +            ID under which the chart description bean will be stored in the
   8.385 +            page to be found by the img tag. Beware of using an
   8.386 +            ID which is not yet used for other beans in the page to avoid
   8.387 +            compile errors.
   8.388 +        </description>
   8.389 +    </attribute>
   8.390 +    <attribute>
   8.391 +        <name>type</name>
   8.392 +        <required>true</required>
   8.393 +        <rtexprvalue>true</rtexprvalue>
   8.394 +        <description>
   8.395 +            Type of the chart. One of area, areaxy, horizontalbar, horizontalbar3d,
   8.396 +            line, pie, scatter, stackedarea, stackedhorizontalbar, stackedverticalbar, 
   8.397 +            stackedverticalbar3d, timeseries, verticalbar, verticalbar3d, xy,
   8.398 +            candlestick, highlow, gantt, wind, signal, verticalxybar, pie3d, meter
   8.399 +        </description>
   8.400 +    </attribute>
   8.401 +    <attribute>
   8.402 +        <name>title</name>
   8.403 +        <required>false</required>
   8.404 +        <rtexprvalue>true</rtexprvalue>
   8.405 +        <description>
   8.406 +            Title of the chart which is displayed on the chart panel
   8.407 +            above the plot pane.
   8.408 +        </description>
   8.409 +    </attribute>
   8.410 +    <attribute>
   8.411 +        <name>xaxislabel</name>
   8.412 +        <required>false</required>
   8.413 +        <rtexprvalue>true</rtexprvalue>
   8.414 +        <description>
   8.415 +            Title of the chart's x-axis. This attributes is
   8.416 +            ignored if the type attribute of the parent chart tag is one
   8.417 +            of pie3d or pie.
   8.418 +        </description>
   8.419 +    </attribute>
   8.420 +    <attribute>
   8.421 +        <name>yaxislabel</name>
   8.422 +        <required>false</required>
   8.423 +        <rtexprvalue>true</rtexprvalue>
   8.424 +        <description>
   8.425 +            Title of the chart's y-axis. This attributes is
   8.426 +            ignored if the type attribute of the parent chart tag is one
   8.427 +            of pie3d or pie.
   8.428 +        </description>
   8.429 +    </attribute>
   8.430 +    <attribute>
   8.431 +        <name>background</name>
   8.432 +        <required>false</required>
   8.433 +        <rtexprvalue>true</rtexprvalue>
   8.434 +        <description>
   8.435 +            Background image of the chart panel. The value of this 
   8.436 +            attribute is the filename of a graphics file relative to the web
   8.437 +            application's root directory (e.g. /WEB-INF/img/bg.jpg).
   8.438 +            The image must be loadable by the default java.awt.Toolkit of the
   8.439 +            servlet container's JVM.
   8.440 +        </description>
   8.441 +    </attribute>
   8.442 +    <attribute>
   8.443 +        <name>backgroundimagealpha</name>
   8.444 +        <required>false</required>
   8.445 +        <rtexprvalue>true</rtexprvalue>
   8.446 +        <type>java.lang.Float</type>
   8.447 +        <description>
   8.448 +            Chart's backgound alpha blending value as a float. Value ranges
   8.449 +            from 0.0 to 1.0.
   8.450 +            @default 0.0
   8.451 +            @overrides /chart[backgroundimagealpha]
   8.452 +        </description>
   8.453 +    </attribute>
   8.454 +    <attribute>
   8.455 +        <name>antialias</name>
   8.456 +        <required>false</required>
   8.457 +        <rtexprvalue>true</rtexprvalue>
   8.458 +        <description>
   8.459 +            Antialiased rendering of the chart.
   8.460 +            @default true
   8.461 +            @overrides /chart[backgroundimagealpha]
   8.462 +        </description>
   8.463 +    </attribute>
   8.464 +    <attribute>
   8.465 +        <name>showlegend</name>
   8.466 +        <required>false</required>
   8.467 +        <rtexprvalue>true</rtexprvalue>
   8.468 +        <description>
   8.469 +           Boolean value to switch on or off the legend display inside of this panel.
   8.470 +           @default true
   8.471 +        </description>
   8.472 +    </attribute>
   8.473 +    <attribute>
   8.474 +        <name>legendanchor</name>
   8.475 +        <required>false</required>
   8.476 +        <rtexprvalue>true</rtexprvalue>
   8.477 +        <description>
   8.478 +            Sets the anchor of the legend inside of the panel. Possible values
   8.479 +            are 'north', 'south', 'west', 'east'.
   8.480 +            Ignored if showlegned is 'false'.
   8.481 +            @default 'south'
   8.482 +        </description>
   8.483 +    </attribute>
   8.484 +</tag>
   8.485 +<tag>
   8.486 +    <name>overlaidchart</name>
   8.487 +    <tag-class>de.laures.cewolf.taglib.tags.OverlaidChartTag</tag-class>
   8.488 +    <description>
   8.489 +        Root tag of a overlaid-chart description.
   8.490 +        @root
   8.491 +        @required-child data
   8.492 +        @optional-child chartpostprocessor
   8.493 +    </description>
   8.494 +    <attribute>
   8.495 +        <name>id</name>
   8.496 +        <required>true</required>
   8.497 +        <rtexprvalue>true</rtexprvalue>
   8.498 +        <description>
   8.499 +            ID under which the chart description bean will be stored in the
   8.500 +            page to be found by the img tag. Beware of using an
   8.501 +            ID which is not yet used for other beans in the page to avoid
   8.502 +            compile errors.
   8.503 +        </description>
   8.504 +    </attribute>
   8.505 +    <attribute>
   8.506 +        <name>type</name>
   8.507 +        <required>true</required>
   8.508 +        <rtexprvalue>true</rtexprvalue>
   8.509 +        <description>
   8.510 +            Type of the chart. In this version only overlaidxy is supported.
   8.511 +        </description>
   8.512 +    </attribute>
   8.513 +    <attribute>
   8.514 +        <name>title</name>
   8.515 +        <required>false</required>
   8.516 +        <rtexprvalue>true</rtexprvalue>
   8.517 +        <description>
   8.518 +            Title of the chart which is displayed on the chart panel
   8.519 +            above the plot pane.
   8.520 +        </description>
   8.521 +    </attribute>
   8.522 +    <attribute>
   8.523 +        <name>xaxistype</name>
   8.524 +        <required>true</required>
   8.525 +        <rtexprvalue>true</rtexprvalue>
   8.526 +        <description>
   8.527 +        	Type of the domain axis. Possible values: date, number
   8.528 +        </description>
   8.529 +    </attribute>
   8.530 +    <attribute>
   8.531 +        <name>xaxislabel</name>
   8.532 +        <required>false</required>
   8.533 +        <rtexprvalue>true</rtexprvalue>
   8.534 +        <description>
   8.535 +            Title of the chart's x-axis. This attributes is
   8.536 +            ignored if the type attribute of the parent chart tag is one
   8.537 +            of pie3d or pie.
   8.538 +        </description>
   8.539 +    </attribute>
   8.540 +    <attribute>
   8.541 +        <name>yaxistype</name>
   8.542 +        <required>false</required>
   8.543 +        <rtexprvalue>true</rtexprvalue>
   8.544 +        <description>
   8.545 +        	Type of the range axis. Possible values: date, number
   8.546 +        </description>
   8.547 +    </attribute>
   8.548 +    <attribute>
   8.549 +        <name>yaxislabel</name>
   8.550 +        <required>false</required>
   8.551 +        <rtexprvalue>true</rtexprvalue>
   8.552 +        <description>
   8.553 +            Title of the chart's y-axis. This attributes is
   8.554 +            ignored if the type attribute of the parent chart tag is one
   8.555 +            of pie3d or pie.
   8.556 +        </description>
   8.557 +    </attribute>
   8.558 +    <attribute>
   8.559 +        <name>background</name>
   8.560 +        <required>false</required>
   8.561 +        <rtexprvalue>true</rtexprvalue>
   8.562 +        <description>
   8.563 +            Background image of the chart panel. The value of this 
   8.564 +            attribute is the filename of a graphics file relative to the web
   8.565 +            application's root directory (e.g. /WEB-INF/img/bg.jpg).
   8.566 +            The image must be loadable by the default java.awt.Toolkit of the
   8.567 +            servlet container's JVM.
   8.568 +        </description>
   8.569 +    </attribute>
   8.570 +    <attribute>
   8.571 +        <name>backgroundimagealpha</name>
   8.572 +        <required>false</required>
   8.573 +        <rtexprvalue>true</rtexprvalue>
   8.574 +        <type>java.lang.Float</type>
   8.575 +        <description>
   8.576 +            Chart's backgound alpha blending value as a float. Value ranges
   8.577 +            from 0.0 to 1.0.
   8.578 +            @default 0.0
   8.579 +            @overrides /chart[backgroundimagealpha]
   8.580 +        </description>
   8.581 +    </attribute>
   8.582 +    <attribute>
   8.583 +        <name>antialias</name>
   8.584 +        <required>false</required>
   8.585 +        <rtexprvalue>true</rtexprvalue>
   8.586 +        <description>
   8.587 +            Antialiased rendering of the chart.
   8.588 +            @default true
   8.589 +            @overrides /chart[backgroundimagealpha]
   8.590 +        </description>
   8.591 +    </attribute>
   8.592 +    <attribute>
   8.593 +        <name>showlegend</name>
   8.594 +        <required>false</required>
   8.595 +        <rtexprvalue>true</rtexprvalue>
   8.596 +        <description>
   8.597 +           Boolean value to switch on or off the legend display inside of this panel.
   8.598 +           @default true
   8.599 +        </description>
   8.600 +    </attribute>
   8.601 +    <attribute>
   8.602 +        <name>legendanchor</name>
   8.603 +        <required>false</required>
   8.604 +        <rtexprvalue>true</rtexprvalue>
   8.605 +        <description>
   8.606 +            Sets the anchor of the legend inside of the panel. Possible values
   8.607 +            are 'north', 'south', 'west', 'east'.
   8.608 +            Ignored if showlegned is 'false'.
   8.609 +            @default 'south'
   8.610 +        </description>
   8.611 +    </attribute>
   8.612 +</tag>
   8.613 +<tag>
   8.614 +    <name>combinedchart</name>
   8.615 +    <tag-class>de.laures.cewolf.taglib.tags.CombinedChartTag</tag-class>
   8.616 +    <description>
   8.617 +        Root tag of a combined-chart description.
   8.618 +        @root
   8.619 +        @required-child plot
   8.620 +        @optional-child chartpostprocessor
   8.621 +    </description>
   8.622 +    <attribute>
   8.623 +        <name>id</name>
   8.624 +        <required>true</required>
   8.625 +        <rtexprvalue>true</rtexprvalue>
   8.626 +        <description>
   8.627 +            ID under which the chart description bean will be stored in the
   8.628 +            page to be found by the img tag. Beware of using an
   8.629 +            ID which is not yet used for other beans in the page to avoid
   8.630 +            compile errors.
   8.631 +        </description>
   8.632 +    </attribute>
   8.633 +    <attribute>
   8.634 +        <name>type</name>
   8.635 +        <required>true</required>
   8.636 +        <rtexprvalue>true</rtexprvalue>
   8.637 +        <description>
   8.638 +            Type of the chart. One of combinedxy
   8.639 +        </description>
   8.640 +    </attribute>
   8.641 +    <attribute>
   8.642 +        <name>layout</name>
   8.643 +        <required>true</required>
   8.644 +        <rtexprvalue>true</rtexprvalue>
   8.645 +        <description>
   8.646 +            Layout of the chart. Either vertical or horizontal
   8.647 +        </description>
   8.648 +    </attribute>
   8.649 +    <attribute>
   8.650 +        <name>title</name>
   8.651 +        <required>false</required>
   8.652 +        <rtexprvalue>true</rtexprvalue>
   8.653 +        <description>
   8.654 +            Title of the chart which is displayed on the chart panel
   8.655 +            above the plot pane.
   8.656 +        </description>
   8.657 +    </attribute>
   8.658 +    <attribute>
   8.659 +        <name>xaxislabel</name>
   8.660 +        <required>false</required>
   8.661 +        <rtexprvalue>true</rtexprvalue>
   8.662 +        <description>
   8.663 +            Title of the chart's x-axis. This attributes is
   8.664 +            ignored if the type attribute of the parent chart tag is one
   8.665 +            of pie3d or pie.
   8.666 +        </description>
   8.667 +    </attribute>
   8.668 +    <attribute>
   8.669 +        <name>yaxislabel</name>
   8.670 +        <required>false</required>
   8.671 +        <rtexprvalue>true</rtexprvalue>
   8.672 +        <description>
   8.673 +            Title of the chart's y-axis. This attributes is
   8.674 +            ignored if the type attribute of the parent chart tag is one
   8.675 +            of pie3d or pie.
   8.676 +        </description>
   8.677 +    </attribute>
   8.678 +    <attribute>
   8.679 +        <name>background</name>
   8.680 +        <required>false</required>
   8.681 +        <rtexprvalue>true</rtexprvalue>
   8.682 +        <description>
   8.683 +            Background image of the chart panel. The value of this
   8.684 +            attribute is the filename of a graphics file relative to the web
   8.685 +            application's root directory (e.g. /WEB-INF/img/bg.jpg).
   8.686 +            The image must be loadable by the default java.awt.Toolkit of the
   8.687 +            servlet container's JVM.
   8.688 +        </description>
   8.689 +    </attribute>
   8.690 +    <attribute>
   8.691 +        <name>backgroundimagealpha</name>
   8.692 +        <required>false</required>
   8.693 +        <rtexprvalue>true</rtexprvalue>
   8.694 +        <type>java.lang.Float</type>
   8.695 +        <description>
   8.696 +            Chart's backgound alpha blending value as a float. Value ranges
   8.697 +            from 0.0 to 1.0.
   8.698 +            @default 0.0
   8.699 +            @overrides /chart[backgroundimagealpha]
   8.700 +        </description>
   8.701 +    </attribute>
   8.702 +    <attribute>
   8.703 +        <name>antialias</name>
   8.704 +        <required>false</required>
   8.705 +        <rtexprvalue>true</rtexprvalue>
   8.706 +        <description>
   8.707 +            Antialiased rendering of the chart.
   8.708 +            @default true
   8.709 +            @overrides /chart[backgroundimagealpha]
   8.710 +        </description>
   8.711 +    </attribute>
   8.712 +    <attribute>
   8.713 +        <name>showlegend</name>
   8.714 +        <required>false</required>
   8.715 +        <rtexprvalue>true</rtexprvalue>
   8.716 +        <description>
   8.717 +           Boolean value to switch on or off the legend display inside of this panel.
   8.718 +           @default true
   8.719 +        </description>
   8.720 +    </attribute>
   8.721 +    <attribute>
   8.722 +        <name>legendanchor</name>
   8.723 +        <required>false</required>
   8.724 +        <rtexprvalue>true</rtexprvalue>
   8.725 +        <description>
   8.726 +            Sets the anchor of the legend inside of the panel. Possible values
   8.727 +            are 'north', 'south', 'west', 'east'.
   8.728 +            Ignored if showlegned is 'false'.
   8.729 +            @default 'south'
   8.730 +        </description>
   8.731 +    </attribute>
   8.732 +</tag>
   8.733 +<tag>
   8.734 +    <name>legend</name>
   8.735 +    <tag-class>de.laures.cewolf.taglib.tags.LegendTag</tag-class>
   8.736 +    <description>
   8.737 +       This tag is used to render the legend of a chart in a separate image.
   8.738 +       It assumes that somewhere else in the JSP a chart tag defines a chart
   8.739 +       with the same ID as this legend tag.
   8.740 +    </description>
   8.741 +    <attribute>
   8.742 +        <name>renderer</name>
   8.743 +        <required>true</required>
   8.744 +        <rtexprvalue>true</rtexprvalue>
   8.745 +        <description>
   8.746 +            Path to rendering servlet relative to web apps root URL
   8.747 +            (e.g. servlet/cewolf).
   8.748 +        </description>
   8.749 +    </attribute>
   8.750 +    <attribute>
   8.751 +        <name>id</name>
   8.752 +        <required>true</required>
   8.753 +        <rtexprvalue>true</rtexprvalue>
   8.754 +        <description>
   8.755 +            ID under which the chart description bean will be stored in the
   8.756 +            session to be found by the rendering servlet. Beware of using an
   8.757 +            ID which is not yet used for other beans in the session to avoid
   8.758 +            overriding.
   8.759 +        </description>
   8.760 +    </attribute>
   8.761 +    <attribute>
   8.762 +        <name>timeout</name>
   8.763 +        <required>false</required>
   8.764 +        <rtexprvalue>true</rtexprvalue>
   8.765 +        <description>
   8.766 +           Sets the timeout value used in the LongTermSessionStorage obj. Value is in seconds.
   8.767 +        </description>
   8.768 +    </attribute>
   8.769 +    <attribute>
   8.770 +        <name>width</name>
   8.771 +        <required>false</required>
   8.772 +        <rtexprvalue>true</rtexprvalue>
   8.773 +        <description>
   8.774 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
   8.775 +        </description>
   8.776 +    </attribute>
   8.777 +    <attribute>
   8.778 +        <name>height</name>
   8.779 +        <required>false</required>
   8.780 +        <rtexprvalue>true</rtexprvalue>
   8.781 +        <description>
   8.782 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
   8.783 +        </description>
   8.784 +    </attribute>
   8.785 +    <attribute>
   8.786 +        <name>mime</name>
   8.787 +        <required>false</required>
   8.788 +        <rtexprvalue>true</rtexprvalue>
   8.789 +        <description>
   8.790 +            The MIME type of the image. Currently image/png (default) and image/svg are supported.
   8.791 +            @default image/png
   8.792 +        </description>
   8.793 +    </attribute>
   8.794 +    <attribute>
   8.795 +        <name>alt</name>
   8.796 +        <required>false</required>
   8.797 +        <rtexprvalue>true</rtexprvalue>
   8.798 +        <description>
   8.799 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
   8.800 +        </description>
   8.801 +    </attribute>
   8.802 +    <attribute>
   8.803 +        <name>hspace</name>
   8.804 +        <required>false</required>
   8.805 +        <rtexprvalue>true</rtexprvalue>
   8.806 +        <description>
   8.807 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
   8.808 +        </description>
   8.809 +    </attribute>
   8.810 +    <attribute>
   8.811 +        <name>vspace</name>
   8.812 +        <required>false</required>
   8.813 +        <rtexprvalue>true</rtexprvalue>
   8.814 +        <description>
   8.815 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
   8.816 +        </description>
   8.817 +    </attribute>
   8.818 +    <attribute>
   8.819 +        <name>align</name>
   8.820 +        <required>false</required>
   8.821 +        <rtexprvalue>true</rtexprvalue>
   8.822 +        <description>
   8.823 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
   8.824 +        </description>
   8.825 +    </attribute>
   8.826 +    <attribute>
   8.827 +        <name>border</name>
   8.828 +        <required>false</required>
   8.829 +        <rtexprvalue>true</rtexprvalue>
   8.830 +        <description>
   8.831 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
   8.832 +        </description>
   8.833 +    </attribute>
   8.834 +    <attribute>
   8.835 +        <name>ismap</name>
   8.836 +        <required>false</required>
   8.837 +        <rtexprvalue>true</rtexprvalue>
   8.838 +        <description>
   8.839 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
   8.840 +        </description>
   8.841 +    </attribute>
   8.842 +    <attribute>
   8.843 +        <name>longdesc</name>
   8.844 +        <required>false</required>
   8.845 +        <rtexprvalue>true</rtexprvalue>
   8.846 +        <description>
   8.847 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
   8.848 +        </description>
   8.849 +    </attribute>
   8.850 +    <attribute>
   8.851 +        <name>usemap</name>
   8.852 +        <required>false</required>
   8.853 +        <rtexprvalue>true</rtexprvalue>
   8.854 +        <description>
   8.855 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
   8.856 +        </description>
   8.857 +    </attribute>
   8.858 +    <attribute>
   8.859 +        <name>class</name>
   8.860 +        <required>false</required>
   8.861 +        <rtexprvalue>true</rtexprvalue>
   8.862 +        <description>
   8.863 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
   8.864 +        </description>
   8.865 +    </attribute>
   8.866 +    <attribute>
   8.867 +        <name>dir</name>
   8.868 +        <required>false</required>
   8.869 +        <rtexprvalue>true</rtexprvalue>
   8.870 +        <description>
   8.871 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
   8.872 +        </description>
   8.873 +    </attribute>
   8.874 +    <attribute>
   8.875 +        <name>lang</name>
   8.876 +        <required>false</required>
   8.877 +        <rtexprvalue>true</rtexprvalue>
   8.878 +        <description>
   8.879 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
   8.880 +        </description>
   8.881 +    </attribute>
   8.882 +    <attribute>
   8.883 +        <name>onclick</name>
   8.884 +        <required>false</required>
   8.885 +        <rtexprvalue>true</rtexprvalue>
   8.886 +        <description>
   8.887 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
   8.888 +        </description>
   8.889 +    </attribute>
   8.890 +    <attribute>
   8.891 +        <name>ondbclick</name>
   8.892 +        <required>false</required>
   8.893 +        <rtexprvalue>true</rtexprvalue>
   8.894 +        <description>
   8.895 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
   8.896 +        </description>
   8.897 +    </attribute>
   8.898 +    <attribute>
   8.899 +        <name>onkeydown</name>
   8.900 +        <required>false</required>
   8.901 +        <rtexprvalue>true</rtexprvalue>
   8.902 +        <description>
   8.903 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
   8.904 +        </description>
   8.905 +    </attribute>
   8.906 +    <attribute>
   8.907 +        <name>onkeypress</name>
   8.908 +        <required>false</required>
   8.909 +        <rtexprvalue>true</rtexprvalue>
   8.910 +        <description>
   8.911 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
   8.912 +        </description>
   8.913 +    </attribute>
   8.914 +    <attribute>
   8.915 +        <name>onkeyup</name>
   8.916 +        <required>false</required>
   8.917 +        <rtexprvalue>true</rtexprvalue>
   8.918 +        <description>
   8.919 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
   8.920 +        </description>
   8.921 +    </attribute>
   8.922 +    <attribute>
   8.923 +        <name>onmousedown</name>
   8.924 +        <required>false</required>
   8.925 +        <rtexprvalue>true</rtexprvalue>
   8.926 +        <description>
   8.927 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
   8.928 +        </description>
   8.929 +    </attribute>
   8.930 +    <attribute>
   8.931 +        <name>onmousemove</name>
   8.932 +        <required>false</required>
   8.933 +        <rtexprvalue>true</rtexprvalue>
   8.934 +        <description>
   8.935 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
   8.936 +        </description>
   8.937 +    </attribute>
   8.938 +    <attribute>
   8.939 +        <name>onmouseout</name>
   8.940 +        <required>false</required>
   8.941 +        <rtexprvalue>true</rtexprvalue>
   8.942 +        <description>
   8.943 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
   8.944 +        </description>
   8.945 +    </attribute>
   8.946 +    <attribute>
   8.947 +        <name>onmouseover</name>
   8.948 +        <required>false</required>
   8.949 +        <rtexprvalue>true</rtexprvalue>
   8.950 +        <description>
   8.951 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
   8.952 +        </description>
   8.953 +    </attribute>
   8.954 +    <attribute>
   8.955 +        <name>onmouseup</name>
   8.956 +        <required>false</required>
   8.957 +        <rtexprvalue>true</rtexprvalue>
   8.958 +        <description>
   8.959 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
   8.960 +        </description>
   8.961 +    </attribute>
   8.962 +    <attribute>
   8.963 +        <name>style</name>
   8.964 +        <required>false</required>
   8.965 +        <rtexprvalue>true</rtexprvalue>
   8.966 +        <description>
   8.967 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
   8.968 +        </description>
   8.969 +    </attribute>
   8.970 +    <attribute>
   8.971 +        <name>htmltitle</name>
   8.972 +        <required>false</required>
   8.973 +        <rtexprvalue>true</rtexprvalue>
   8.974 +        <description>
   8.975 +           Corresponds to appropriate HMTL &lt;img&gt; title attribute.
   8.976 +        </description>
   8.977 +    </attribute>
   8.978 +    <attribute>
   8.979 +        <name>forceSessionId</name>
   8.980 +        <required>false</required>
   8.981 +        <rtexprvalue>true</rtexprvalue>
   8.982 +        <description>
   8.983 +           Add JSession id.
   8.984 +        </description>
   8.985 +    </attribute>    
   8.986 +    <attribute>
   8.987 +        <name>removeAfterRender</name>
   8.988 +        <required>false</required>
   8.989 +        <rtexprvalue>true</rtexprvalue>
   8.990 +        <description>
   8.991 +           Remove image after rendering (defaults to false).
   8.992 +        </description>
   8.993 +    </attribute>
   8.994 +</tag>
   8.995 +<tag>
   8.996 +    <name>data</name>
   8.997 +    <tag-class>de.laures.cewolf.taglib.tags.DataTag</tag-class>
   8.998 +    <description>
   8.999 +        A data tag provides all information needed to retrieve the data which are
  8.1000 +        needed by the chart. Current version only supports data provided by a
  8.1001 +        DatasetProducer. In future versions there will be tags to provide data
  8.1002 +        from a datasource (e.g. via SQL).
  8.1003 +        @optional-child producer
  8.1004 +    </description>
  8.1005 +</tag>
  8.1006 +<tag>
  8.1007 +    <name>producer</name>
  8.1008 +    <tag-class>de.laures.cewolf.taglib.tags.ProducerTag</tag-class>
  8.1009 +    <description>
  8.1010 +        A data tag provides all information needed to retrieve the data which are
  8.1011 +        needed by the chart. Current version only supports data provided by a
  8.1012 +        DatasetProducer. In future versions there will be tags to provide data
  8.1013 +        from a datasource (e.g. via SQL).
  8.1014 +        @optional-child param
  8.1015 +    </description>
  8.1016 +    <attribute>
  8.1017 +        <name>id</name>
  8.1018 +        <required>true</required>
  8.1019 +        <rtexprvalue>true</rtexprvalue>
  8.1020 +        <description>
  8.1021 +            ID under which an object of type DatasetProducer can be found in
  8.1022 +            pageContext. This object is used to retrieve the dataset of the chart.
  8.1023 +        </description>
  8.1024 +    </attribute>
  8.1025 +    <attribute>
  8.1026 +        <name>usecache</name>
  8.1027 +        <required>false</required>
  8.1028 +        <rtexprvalue>true</rtexprvalue>
  8.1029 +        <description>
  8.1030 +            Determines if formally produced data should be reused if possible.
  8.1031 +            @default true
  8.1032 +        </description>
  8.1033 +    </attribute>
  8.1034 +</tag>
  8.1035 +<tag>
  8.1036 +    <name>chartpostprocessor</name>
  8.1037 +    <tag-class>de.laures.cewolf.taglib.tags.ChartPostProcessorTag</tag-class>
  8.1038 +    <description>
  8.1039 +        A chart postprocessor tag references an object of type ChartProstProcessor
  8.1040 +        which must be defined in pageContext under the provided ID. This object
  8.1041 +        is called back after chart generation to post process the chart in any
  8.1042 +        manner.
  8.1043 +        @optional-child param
  8.1044 +    </description>
  8.1045 +    <attribute>
  8.1046 +        <name>id</name>
  8.1047 +        <required>true</required>
  8.1048 +        <rtexprvalue>true</rtexprvalue>
  8.1049 +        <description>
  8.1050 +            ID under which an object of type ChartPostProcessor can be found in
  8.1051 +            pageContext. This object is used to postprocess the rendered chart.
  8.1052 +        </description>
  8.1053 +    </attribute>
  8.1054 +</tag>
  8.1055 +<tag>
  8.1056 +    <name>param</name>
  8.1057 +    <tag-class>de.laures.cewolf.taglib.tags.ParamTag</tag-class>
  8.1058 +    <description>
  8.1059 +        Name/value-pair to paramterize a surrounding tag whose handler must 
  8.1060 +        implement the Parameterized interface.
  8.1061 +    </description>
  8.1062 +    <attribute>
  8.1063 +        <name>name</name>
  8.1064 +        <required>true</required>
  8.1065 +        <rtexprvalue>true</rtexprvalue>
  8.1066 +        <description>
  8.1067 +            Name of the param
  8.1068 +        </description>
  8.1069 +    </attribute>
  8.1070 +    <attribute>
  8.1071 +        <name>value</name>
  8.1072 +        <required>true</required>
  8.1073 +        <rtexprvalue>true</rtexprvalue>
  8.1074 +        <type>java.io.Serializable</type>
  8.1075 +        <description>
  8.1076 +            Value of the param. Must be serializable.
  8.1077 +        </description>
  8.1078 +    </attribute>
  8.1079 +</tag>
  8.1080 +<tag>
  8.1081 +    <name>gradientpaint</name>
  8.1082 +    <tag-class>de.laures.cewolf.taglib.tags.GradientTag</tag-class>
  8.1083 +    <description>
  8.1084 +        The gradientpaint tag provides a way to fill a shape with a linear 
  8.1085 +        color gradient pattern. If Point P1 with Color C1 and Point P2 with 
  8.1086 +        Color C2 are specified in user space, the Color on the P1, P2 
  8.1087 +        connecting line is proportionally changed from C1 to C2. Any point 
  8.1088 +        P not on the extended P1, P2 connecting line has the color of the 
  8.1089 +        point P' that is the perpendicular projection of P on the extended P1,
  8.1090 +        P2 connecting line. Points on the extended line outside of the P1,
  8.1091 +        P2 segment can be colored in one of two ways.
  8.1092 +        &lt;ul&gt;
  8.1093 +        &lt;li&gt;If the gradient is cyclic then the points on the extended 
  8.1094 +        P1, P2 connecting line cycle back and forth between the colors C1 
  8.1095 +        and C2.
  8.1096 +        &lt;li&gt;If the gradient is acyclic then points on the P1 side of 
  8.1097 +        the segment have the constant Color C1 while points on the P2 side 
  8.1098 +        have the constant Color C2.
  8.1099 +        The two colors are defined in a nested point tag of this tag. 
  8.1100 +        @required-child point
  8.1101 +    </description>
  8.1102 +    <attribute>
  8.1103 +        <name>cyclic</name>
  8.1104 +        <required>false</required>
  8.1105 +        <rtexprvalue>true</rtexprvalue>
  8.1106 +        <description>
  8.1107 +            Does the gradient cycle repeatedly between the two colors C1 and C2.
  8.1108 +            @default false
  8.1109 +        </description>
  8.1110 +    </attribute>
  8.1111 +</tag>
  8.1112 +<tag>
  8.1113 +    <name>point</name>
  8.1114 +    <tag-class>de.laures.cewolf.taglib.tags.PointTag</tag-class>
  8.1115 +    <description>
  8.1116 +        Defines a point with x and y coordinates and a color.
  8.1117 +        @extends colorpaint
  8.1118 +    </description>
  8.1119 +    <attribute>
  8.1120 +        <name>x</name>
  8.1121 +        <required>true</required>
  8.1122 +        <rtexprvalue>true</rtexprvalue>
  8.1123 +        <description>
  8.1124 +            The x coordinate of the point.
  8.1125 +        </description>
  8.1126 +    </attribute>
  8.1127 +    <attribute>
  8.1128 +        <name>y</name>
  8.1129 +        <required>true</required>
  8.1130 +        <rtexprvalue>true</rtexprvalue>
  8.1131 +        <description>
  8.1132 +            The y coordinate of the point.
  8.1133 +        </description>
  8.1134 +    </attribute>
  8.1135 +    <attribute>
  8.1136 +        <name>color</name>
  8.1137 +        <required>false</required>
  8.1138 +        <rtexprvalue>true</rtexprvalue>
  8.1139 +        <description>
  8.1140 +            @copy
  8.1141 +        </description>
  8.1142 +    </attribute>
  8.1143 +</tag>
  8.1144 +<tag>
  8.1145 +    <name>colorpaint</name>
  8.1146 +    <tag-class>de.laures.cewolf.taglib.tags.ColorTag</tag-class>
  8.1147 +    <description>
  8.1148 +        Fills the area defined by the parent tag with a color. 
  8.1149 +    </description>
  8.1150 +    <attribute>
  8.1151 +        <name>color</name>
  8.1152 +        <required>true</required>
  8.1153 +        <rtexprvalue>true</rtexprvalue>
  8.1154 +        <description>
  8.1155 +            The color to be used to fill the parent tag's area.
  8.1156 +            The color definition is compatible with the
  8.1157 +            HTML one. E.g. black is '#000000' and red is '#FF0000'. However it
  8.1158 +            is possible to append two hex numbers for the alpha channel. Thus
  8.1159 +            '#FF000080' is red with alpha blending of 50%.
  8.1160 +        </description>
  8.1161 +    </attribute>
  8.1162 +</tag>
  8.1163 +<tag>
  8.1164 +    <name>texturepaint</name>
  8.1165 +    <tag-class>de.laures.cewolf.taglib.tags.TextureTag</tag-class>
  8.1166 +    <description>
  8.1167 +        The texturepaint tag provides a way to fill the area of the parent tag
  8.1168 +        with a texture that is specified as an image. The texture is anchored to 
  8.1169 +        the upper left corner of the parent tags area.
  8.1170 +    </description>
  8.1171 +    <attribute>
  8.1172 +        <name>image</name>
  8.1173 +        <required>true</required>
  8.1174 +        <rtexprvalue>true</rtexprvalue>
  8.1175 +        <description>
  8.1176 +            Image fo the texture. The value of this 
  8.1177 +            attribute is the filename of a graphics file relative to the web
  8.1178 +            application's root directory (e.g. /WEB-INF/img/bg.jpg).
  8.1179 +            The image must be loadable by the default java.awt.Toolkit of the
  8.1180 +            servlet container's JVM.
  8.1181 +        </description>
  8.1182 +    </attribute>
  8.1183 +    <attribute>
  8.1184 +        <name>width</name>
  8.1185 +        <required>true</required>
  8.1186 +        <rtexprvalue>true</rtexprvalue>
  8.1187 +        <description>
  8.1188 +            The width of the texture.
  8.1189 +        </description>
  8.1190 +    </attribute>
  8.1191 +    <attribute>
  8.1192 +        <name>height</name>
  8.1193 +        <required>true</required>
  8.1194 +        <rtexprvalue>true</rtexprvalue>
  8.1195 +        <description>
  8.1196 +            The height of the texture.
  8.1197 +        </description>  
  8.1198 +    </attribute>
  8.1199 +</tag>
  8.1200 +<tag>
  8.1201 +    <name>map</name>
  8.1202 +    <tag-class>de.laures.cewolf.taglib.tags.ChartMapTag</tag-class>
  8.1203 +    <description>
  8.1204 +      This tag defines an image and tooltip map for the parent img tag.
  8.1205 +      @parent img
  8.1206 +    </description>
  8.1207 +    <attribute>
  8.1208 +        <name>linkgeneratorid</name>
  8.1209 +        <required>false</required>
  8.1210 +        <rtexprvalue>true</rtexprvalue>
  8.1211 +        <description>
  8.1212 +          The ID of the class which implements the appropriate de.laures.cewolf.LinkGenerator.
  8.1213 +        </description>
  8.1214 +    </attribute>
  8.1215 +    <attribute>
  8.1216 +        <name>tooltipgeneratorid</name>
  8.1217 +        <required>false</required>
  8.1218 +        <rtexprvalue>true</rtexprvalue>
  8.1219 +        <description>
  8.1220 +          The ID of the class which implements the appropriate com.jrefinery.chart.tooltips.ToolTipGenerator.
  8.1221 +        </description>
  8.1222 +    </attribute>
  8.1223 +	<attribute>
  8.1224 +		<name>useJFreeChartLinkGenerator</name>
  8.1225 +		<required>false</required>
  8.1226 +		<rtexprvalue>true</rtexprvalue>
  8.1227 +		<description>If the links provided by the JFreeChart renderer should be used.</description>
  8.1228 +	</attribute>
  8.1229 +	<attribute>
  8.1230 +		<name>useJFreeChartTooltipGenerator</name>
  8.1231 +		<required>false</required>
  8.1232 +		<rtexprvalue>true</rtexprvalue>
  8.1233 +		<description>If the tooltips provided by the JFreeChart renderer should be used.</description>		
  8.1234 +	</attribute>	
  8.1235 +	
  8.1236 +</tag>
  8.1237 +</taglib>
  8.1238 \ No newline at end of file
     9.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     9.2 +++ b/java/cewolf-1.0/etc/cewolf.tld	Sat Feb 28 21:31:02 2009 +0100
     9.3 @@ -0,0 +1,1234 @@
     9.4 +<?xml version="1.0" encoding="ISO-8859-1"?>
     9.5 +<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN" "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
     9.6 +
     9.7 +<taglib>
     9.8 +<tlib-version>0.9.3</tlib-version>
     9.9 +<jsp-version>1.2</jsp-version>
    9.10 +<short-name>Cewolf Tag Library</short-name>
    9.11 +<uri>http://cewolf.sourceforge.net/taglib/cewolf.tld</uri>
    9.12 +<display-name>Cewolf Tag Library</display-name>
    9.13 +<description>This tag library is designed to describe charts of all kinds.</description>
    9.14 +<tag>
    9.15 +    <name>plot</name>
    9.16 +    <tag-class>de.laures.cewolf.taglib.tags.PlotTag</tag-class>
    9.17 +    <body-content>JSP</body-content>
    9.18 +    <description>
    9.19 +    	The plot tag is nested inside a complex chart to define a nested or layerd plot instance.
    9.20 +        @required-child data
    9.21 +    </description>
    9.22 +    <attribute>
    9.23 +        <name>type</name>
    9.24 +        <required>true</required>
    9.25 +        <rtexprvalue>true</rtexprvalue>
    9.26 +        <description>
    9.27 +        	The type  of the plot. One of xyarea, xyline, xyshapesandlines ,
    9.28 +			scatter, xyverticalbar, step, candlestick, highlow, signal,
    9.29 +			verticlebar, area, line, shapesandlines
    9.30 +	    </description>
    9.31 +    </attribute>
    9.32 +    <attribute>
    9.33 +        <name>xaxislabel</name>
    9.34 +        <required>false</required>
    9.35 +        <rtexprvalue>true</rtexprvalue>
    9.36 +        <description>
    9.37 +            Title of the plot's x-axis. This attributes is
    9.38 +            only used for horizontally combined charts.
    9.39 +        </description>
    9.40 +    </attribute>
    9.41 +    <attribute>
    9.42 +        <name>yaxislabel</name>
    9.43 +        <required>false</required>
    9.44 +        <rtexprvalue>true</rtexprvalue>
    9.45 +        <description>
    9.46 +            Title of the plot's y-axis. This attributes is
    9.47 +            only used for vertically combined charts.
    9.48 +        </description>
    9.49 +    </attribute>
    9.50 +</tag>
    9.51 +<tag>
    9.52 +    <name>img</name>
    9.53 +    <tag-class>de.laures.cewolf.taglib.tags.ChartImgTag</tag-class>
    9.54 +    <body-content>JSP</body-content>
    9.55 +    <description>
    9.56 +    	This tag is a specialized HTML img tag. It renders the chart
    9.57 +    	which has been specified by a &lt;chart&gt; tag in the same page.
    9.58 +      @optional-child map
    9.59 +    </description>
    9.60 +    <attribute>
    9.61 +        <name>renderer</name>
    9.62 +        <required>true</required>
    9.63 +        <rtexprvalue>true</rtexprvalue>
    9.64 +        <description>
    9.65 +            Path to rendering servlet. Any path that starts with a '/' is assumed to refer to a resource relative to web application root. Otherwise, the path is assumed to refer to resource relative to the current page directory.
    9.66 +        </description>
    9.67 +    </attribute>
    9.68 +    <attribute>
    9.69 +        <name>chartid</name>
    9.70 +        <required>true</required>
    9.71 +        <rtexprvalue>true</rtexprvalue>
    9.72 +        <description>
    9.73 +        	The id of the chart to render.
    9.74 +        </description>
    9.75 +    </attribute>
    9.76 +    <attribute>
    9.77 +        <name>width</name>
    9.78 +        <required>true</required>
    9.79 +        <rtexprvalue>true</rtexprvalue>
    9.80 +        <description>
    9.81 +            Width of the rendered chart image in pixel.
    9.82 +        </description>
    9.83 +    </attribute>
    9.84 +    <attribute>
    9.85 +        <name>height</name>
    9.86 +        <required>true</required>
    9.87 +        <rtexprvalue>true</rtexprvalue>
    9.88 +        <description>
    9.89 +            Height of the rendered chart image in pixel.
    9.90 +        </description>
    9.91 +    </attribute>
    9.92 +    <attribute>
    9.93 +        <name>mime</name>
    9.94 +        <required>false</required>
    9.95 +        <rtexprvalue>true</rtexprvalue>
    9.96 +        <description>
    9.97 +            The MIME type of the image. Currently image/png (default) and image/svg are supported.
    9.98 +            @default image/png
    9.99 +        </description>
   9.100 +    </attribute>
   9.101 +    <attribute>
   9.102 +        <name>alt</name>
   9.103 +        <required>false</required>
   9.104 +        <rtexprvalue>true</rtexprvalue>
   9.105 +        <description>
   9.106 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
   9.107 +        </description>
   9.108 +    </attribute>
   9.109 +        <attribute>
   9.110 +        <name>timeout</name>
   9.111 +        <required>false</required>
   9.112 +        <rtexprvalue>true</rtexprvalue>
   9.113 +        <description>
   9.114 +           Sets the timeout value used in the LongTermSessionStorage obj. Value is in seconds.
   9.115 +        </description>
   9.116 +    </attribute>
   9.117 +    <attribute>
   9.118 +        <name>hspace</name>
   9.119 +        <required>false</required>
   9.120 +        <rtexprvalue>true</rtexprvalue>
   9.121 +        <description>
   9.122 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
   9.123 +        </description>
   9.124 +    </attribute>
   9.125 +    <attribute>
   9.126 +        <name>vspace</name>
   9.127 +        <required>false</required>
   9.128 +        <rtexprvalue>true</rtexprvalue>
   9.129 +        <description>
   9.130 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
   9.131 +        </description>
   9.132 +    </attribute>
   9.133 +    <attribute>
   9.134 +        <name>align</name>
   9.135 +        <required>false</required>
   9.136 +        <rtexprvalue>true</rtexprvalue>
   9.137 +        <description>
   9.138 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
   9.139 +        </description>
   9.140 +    </attribute>
   9.141 +    <attribute>
   9.142 +        <name>border</name>
   9.143 +        <required>false</required>
   9.144 +        <rtexprvalue>true</rtexprvalue>
   9.145 +        <description>
   9.146 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
   9.147 +        </description>
   9.148 +    </attribute>
   9.149 +    <attribute>
   9.150 +        <name>ismap</name>
   9.151 +        <required>false</required>
   9.152 +        <rtexprvalue>true</rtexprvalue>
   9.153 +        <description>
   9.154 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
   9.155 +        </description>
   9.156 +    </attribute>
   9.157 +    <attribute>
   9.158 +        <name>longdesc</name>
   9.159 +        <required>false</required>
   9.160 +        <rtexprvalue>true</rtexprvalue>
   9.161 +        <description>
   9.162 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
   9.163 +        </description>
   9.164 +    </attribute>
   9.165 +    <attribute>
   9.166 +        <name>usemap</name>
   9.167 +        <required>false</required>
   9.168 +        <rtexprvalue>true</rtexprvalue>
   9.169 +        <description>
   9.170 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
   9.171 +        </description>
   9.172 +    </attribute>
   9.173 +    <attribute>
   9.174 +        <name>class</name>
   9.175 +        <required>false</required>
   9.176 +        <rtexprvalue>true</rtexprvalue>
   9.177 +        <description>
   9.178 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
   9.179 +        </description>
   9.180 +    </attribute>
   9.181 +    <attribute>
   9.182 +        <name>dir</name>
   9.183 +        <required>false</required>
   9.184 +        <rtexprvalue>true</rtexprvalue>
   9.185 +        <description>
   9.186 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
   9.187 +        </description>
   9.188 +    </attribute>
   9.189 +    <attribute>
   9.190 +        <name>lang</name>
   9.191 +        <required>false</required>
   9.192 +        <rtexprvalue>true</rtexprvalue>
   9.193 +        <description>
   9.194 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
   9.195 +        </description>
   9.196 +    </attribute>
   9.197 +    <attribute>
   9.198 +        <name>onclick</name>
   9.199 +        <required>false</required>
   9.200 +        <rtexprvalue>true</rtexprvalue>
   9.201 +        <description>
   9.202 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
   9.203 +        </description>
   9.204 +    </attribute>
   9.205 +    <attribute>
   9.206 +        <name>ondbclick</name>
   9.207 +        <required>false</required>
   9.208 +        <rtexprvalue>true</rtexprvalue>
   9.209 +        <description>
   9.210 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
   9.211 +        </description>
   9.212 +    </attribute>
   9.213 +    <attribute>
   9.214 +        <name>onkeydown</name>
   9.215 +        <required>false</required>
   9.216 +        <rtexprvalue>true</rtexprvalue>
   9.217 +        <description>
   9.218 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
   9.219 +        </description>
   9.220 +    </attribute>
   9.221 +    <attribute>
   9.222 +        <name>onkeypress</name>
   9.223 +        <required>false</required>
   9.224 +        <rtexprvalue>true</rtexprvalue>
   9.225 +        <description>
   9.226 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
   9.227 +        </description>
   9.228 +    </attribute>
   9.229 +    <attribute>
   9.230 +        <name>onkeyup</name>
   9.231 +        <required>false</required>
   9.232 +        <rtexprvalue>true</rtexprvalue>
   9.233 +        <description>
   9.234 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
   9.235 +        </description>
   9.236 +    </attribute>
   9.237 +    <attribute>
   9.238 +        <name>onmousedown</name>
   9.239 +        <required>false</required>
   9.240 +        <rtexprvalue>true</rtexprvalue>
   9.241 +        <description>
   9.242 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
   9.243 +        </description>
   9.244 +    </attribute>
   9.245 +    <attribute>
   9.246 +        <name>onmousemove</name>
   9.247 +        <required>false</required>
   9.248 +        <rtexprvalue>true</rtexprvalue>
   9.249 +        <description>
   9.250 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
   9.251 +        </description>
   9.252 +    </attribute>
   9.253 +    <attribute>
   9.254 +        <name>onmouseout</name>
   9.255 +        <required>false</required>
   9.256 +        <rtexprvalue>true</rtexprvalue>
   9.257 +        <description>
   9.258 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
   9.259 +        </description>
   9.260 +    </attribute>
   9.261 +    <attribute>
   9.262 +        <name>onmouseover</name>
   9.263 +        <required>false</required>
   9.264 +        <rtexprvalue>true</rtexprvalue>
   9.265 +        <description>
   9.266 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
   9.267 +        </description>
   9.268 +    </attribute>
   9.269 +    <attribute>
   9.270 +        <name>onmouseup</name>
   9.271 +        <required>false</required>
   9.272 +        <rtexprvalue>true</rtexprvalue>
   9.273 +        <description>
   9.274 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
   9.275 +        </description>
   9.276 +    </attribute>
   9.277 +    <attribute>
   9.278 +        <name>style</name>
   9.279 +        <required>false</required>
   9.280 +        <rtexprvalue>true</rtexprvalue>
   9.281 +        <description>
   9.282 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
   9.283 +        </description>
   9.284 +    </attribute>
   9.285 +    <attribute>
   9.286 +        <name>htmltitle</name>
   9.287 +        <required>false</required>
   9.288 +        <rtexprvalue>true</rtexprvalue>
   9.289 +        <description>
   9.290 +           Corresponds to appropriate HMTL &lt;img&gt; title attribute.
   9.291 +        </description>
   9.292 +    </attribute>
   9.293 +     <attribute>
   9.294 +        <name>forceSessionId</name>
   9.295 +        <required>false</required>
   9.296 +        <rtexprvalue>true</rtexprvalue>
   9.297 +        <description>
   9.298 +           Add JSession id.
   9.299 +        </description>
   9.300 +    </attribute>
   9.301 +    <attribute>
   9.302 +        <name>removeAfterRender</name>
   9.303 +        <required>false</required>
   9.304 +        <rtexprvalue>true</rtexprvalue>
   9.305 +        <description>
   9.306 +           Remove image after rendering (defaults to false).
   9.307 +        </description>
   9.308 +    </attribute>
   9.309 +</tag>
   9.310 +<tag>
   9.311 +    <name>imgurl</name>
   9.312 +    <tag-class>de.laures.cewolf.taglib.tags.ChartImgURLTag</tag-class>
   9.313 +    <tei-class>de.laures.cewolf.taglib.tags.ChartImgURLTagEI</tei-class>
   9.314 +    <description>
   9.315 +    	This tag can be used as the src attribute of a HTML img tag. E.g.: 
   9.316 +    	&lt;img src='&lt;imgurl chartid="foobar" renderer="cewolf" width="100" height="100"/&gt;'&gt;
   9.317 +    	If the var attribute is used the URL is exposed as a page attribute of type String.
   9.318 +        @extends img
   9.319 +    </description>
   9.320 +    <attribute>
   9.321 +        <name>var</name>
   9.322 +        <required>false</required>
   9.323 +        <rtexprvalue>true</rtexprvalue>
   9.324 +        <description>
   9.325 +            Name of the page scope attribute to hold the URL. If not specified the URL is printed to the page outstream.
   9.326 +        </description>
   9.327 +    </attribute>
   9.328 +    <attribute>
   9.329 +        <name>renderer</name>
   9.330 +        <required>true</required>
   9.331 +        <rtexprvalue>true</rtexprvalue>
   9.332 +        <description>
   9.333 +            Path to rendering servlet. Any path that starts with a '/' is assumed to refer to a resource relative to web application root. Otherwise, the path is assumed to refer to resource relative to the current page directory.
   9.334 +        </description>
   9.335 +    </attribute>
   9.336 +    <attribute>
   9.337 +        <name>chartid</name>
   9.338 +        <required>true</required>
   9.339 +        <rtexprvalue>true</rtexprvalue>
   9.340 +        <description>
   9.341 +        	The id of the chart to render.
   9.342 +        </description>
   9.343 +    </attribute>
   9.344 +    <attribute>
   9.345 +        <name>width</name>
   9.346 +        <required>true</required>
   9.347 +        <rtexprvalue>true</rtexprvalue>
   9.348 +        <description>
   9.349 +            Width of the rendered chart image in pixel.
   9.350 +        </description>
   9.351 +    </attribute>
   9.352 +    <attribute>
   9.353 +        <name>height</name>
   9.354 +        <required>true</required>
   9.355 +        <rtexprvalue>true</rtexprvalue>
   9.356 +        <description>
   9.357 +            Height of the rendered chart image in pixel.
   9.358 +        </description>
   9.359 +    </attribute>
   9.360 +    <attribute>
   9.361 +        <name>mime</name>
   9.362 +        <required>false</required>
   9.363 +        <rtexprvalue>true</rtexprvalue>
   9.364 +        <description>
   9.365 +            The MIME type of the image. Currently image/png (default) and image/svg are supported.
   9.366 +            @default image/png
   9.367 +        </description>
   9.368 +    </attribute>
   9.369 +</tag>
   9.370 +<tag>
   9.371 +    <name>chart</name>
   9.372 +    <tag-class>de.laures.cewolf.taglib.tags.SimpleChartTag</tag-class>
   9.373 +    <description>
   9.374 +        Root tag of a chart description.
   9.375 +        @root
   9.376 +        @required-child data
   9.377 +        @optional-child chartpostprocessor
   9.378 +    </description>
   9.379 +    <attribute>
   9.380 +        <name>id</name>
   9.381 +        <required>true</required>
   9.382 +        <rtexprvalue>true</rtexprvalue>
   9.383 +        <description>
   9.384 +            ID under which the chart description bean will be stored in the
   9.385 +            page to be found by the img tag. Beware of using an
   9.386 +            ID which is not yet used for other beans in the page to avoid
   9.387 +            compile errors.
   9.388 +        </description>
   9.389 +    </attribute>
   9.390 +    <attribute>
   9.391 +        <name>type</name>
   9.392 +        <required>true</required>
   9.393 +        <rtexprvalue>true</rtexprvalue>
   9.394 +        <description>
   9.395 +            Type of the chart. One of area, areaxy, horizontalbar, horizontalbar3d,
   9.396 +            line, pie, scatter, stackedarea, stackedhorizontalbar, stackedverticalbar, 
   9.397 +            stackedverticalbar3d, timeseries, verticalbar, verticalbar3d, xy,
   9.398 +            candlestick, highlow, gantt, wind, signal, verticalxybar, pie3d, meter
   9.399 +        </description>
   9.400 +    </attribute>
   9.401 +    <attribute>
   9.402 +        <name>title</name>
   9.403 +        <required>false</required>
   9.404 +        <rtexprvalue>true</rtexprvalue>
   9.405 +        <description>
   9.406 +            Title of the chart which is displayed on the chart panel
   9.407 +            above the plot pane.
   9.408 +        </description>
   9.409 +    </attribute>
   9.410 +    <attribute>
   9.411 +        <name>xaxislabel</name>
   9.412 +        <required>false</required>
   9.413 +        <rtexprvalue>true</rtexprvalue>
   9.414 +        <description>
   9.415 +            Title of the chart's x-axis. This attributes is
   9.416 +            ignored if the type attribute of the parent chart tag is one
   9.417 +            of pie3d or pie.
   9.418 +        </description>
   9.419 +    </attribute>
   9.420 +    <attribute>
   9.421 +        <name>yaxislabel</name>
   9.422 +        <required>false</required>
   9.423 +        <rtexprvalue>true</rtexprvalue>
   9.424 +        <description>
   9.425 +            Title of the chart's y-axis. This attributes is
   9.426 +            ignored if the type attribute of the parent chart tag is one
   9.427 +            of pie3d or pie.
   9.428 +        </description>
   9.429 +    </attribute>
   9.430 +    <attribute>
   9.431 +        <name>background</name>
   9.432 +        <required>false</required>
   9.433 +        <rtexprvalue>true</rtexprvalue>
   9.434 +        <description>
   9.435 +            Background image of the chart panel. The value of this 
   9.436 +            attribute is the filename of a graphics file relative to the web
   9.437 +            application's root directory (e.g. /WEB-INF/img/bg.jpg).
   9.438 +            The image must be loadable by the default java.awt.Toolkit of the
   9.439 +            servlet container's JVM.
   9.440 +        </description>
   9.441 +    </attribute>
   9.442 +    <attribute>
   9.443 +        <name>backgroundimagealpha</name>
   9.444 +        <required>false</required>
   9.445 +        <rtexprvalue>true</rtexprvalue>
   9.446 +        <type>java.lang.Float</type>
   9.447 +        <description>
   9.448 +            Chart's backgound alpha blending value as a float. Value ranges
   9.449 +            from 0.0 to 1.0.
   9.450 +            @default 0.0
   9.451 +            @overrides /chart[backgroundimagealpha]
   9.452 +        </description>
   9.453 +    </attribute>
   9.454 +    <attribute>
   9.455 +        <name>antialias</name>
   9.456 +        <required>false</required>
   9.457 +        <rtexprvalue>true</rtexprvalue>
   9.458 +        <description>
   9.459 +            Antialiased rendering of the chart.
   9.460 +            @default true
   9.461 +            @overrides /chart[backgroundimagealpha]
   9.462 +        </description>
   9.463 +    </attribute>
   9.464 +    <attribute>
   9.465 +        <name>showlegend</name>
   9.466 +        <required>false</required>
   9.467 +        <rtexprvalue>true</rtexprvalue>
   9.468 +        <description>
   9.469 +           Boolean value to switch on or off the legend display inside of this panel.
   9.470 +           @default true
   9.471 +        </description>
   9.472 +    </attribute>
   9.473 +    <attribute>
   9.474 +        <name>legendanchor</name>
   9.475 +        <required>false</required>
   9.476 +        <rtexprvalue>true</rtexprvalue>
   9.477 +        <description>
   9.478 +            Sets the anchor of the legend inside of the panel. Possible values
   9.479 +            are 'north', 'south', 'west', 'east'.
   9.480 +            Ignored if showlegned is 'false'.
   9.481 +            @default 'south'
   9.482 +        </description>
   9.483 +    </attribute>
   9.484 +</tag>
   9.485 +<tag>
   9.486 +    <name>overlaidchart</name>
   9.487 +    <tag-class>de.laures.cewolf.taglib.tags.OverlaidChartTag</tag-class>
   9.488 +    <description>
   9.489 +        Root tag of a overlaid-chart description.
   9.490 +        @root
   9.491 +        @required-child data
   9.492 +        @optional-child chartpostprocessor
   9.493 +    </description>
   9.494 +    <attribute>
   9.495 +        <name>id</name>
   9.496 +        <required>true</required>
   9.497 +        <rtexprvalue>true</rtexprvalue>
   9.498 +        <description>
   9.499 +            ID under which the chart description bean will be stored in the
   9.500 +            page to be found by the img tag. Beware of using an
   9.501 +            ID which is not yet used for other beans in the page to avoid
   9.502 +            compile errors.
   9.503 +        </description>
   9.504 +    </attribute>
   9.505 +    <attribute>
   9.506 +        <name>type</name>
   9.507 +        <required>true</required>
   9.508 +        <rtexprvalue>true</rtexprvalue>
   9.509 +        <description>
   9.510 +            Type of the chart. In this version only overlaidxy is supported.
   9.511 +        </description>
   9.512 +    </attribute>
   9.513 +    <attribute>
   9.514 +        <name>title</name>
   9.515 +        <required>false</required>
   9.516 +        <rtexprvalue>true</rtexprvalue>
   9.517 +        <description>
   9.518 +            Title of the chart which is displayed on the chart panel
   9.519 +            above the plot pane.
   9.520 +        </description>
   9.521 +    </attribute>
   9.522 +    <attribute>
   9.523 +        <name>xaxistype</name>
   9.524 +        <required>true</required>
   9.525 +        <rtexprvalue>true</rtexprvalue>
   9.526 +        <description>
   9.527 +        	Type of the domain axis. Possible values: date, number
   9.528 +        </description>
   9.529 +    </attribute>
   9.530 +    <attribute>
   9.531 +        <name>xaxislabel</name>
   9.532 +        <required>false</required>
   9.533 +        <rtexprvalue>true</rtexprvalue>
   9.534 +        <description>
   9.535 +            Title of the chart's x-axis. This attributes is
   9.536 +            ignored if the type attribute of the parent chart tag is one
   9.537 +            of pie3d or pie.
   9.538 +        </description>
   9.539 +    </attribute>
   9.540 +    <attribute>
   9.541 +        <name>yaxistype</name>
   9.542 +        <required>false</required>
   9.543 +        <rtexprvalue>true</rtexprvalue>
   9.544 +        <description>
   9.545 +        	Type of the range axis. Possible values: date, number
   9.546 +        </description>
   9.547 +    </attribute>
   9.548 +    <attribute>
   9.549 +        <name>yaxislabel</name>
   9.550 +        <required>false</required>
   9.551 +        <rtexprvalue>true</rtexprvalue>
   9.552 +        <description>
   9.553 +            Title of the chart's y-axis. This attributes is
   9.554 +            ignored if the type attribute of the parent chart tag is one
   9.555 +            of pie3d or pie.
   9.556 +        </description>
   9.557 +    </attribute>
   9.558 +    <attribute>
   9.559 +        <name>background</name>
   9.560 +        <required>false</required>
   9.561 +        <rtexprvalue>true</rtexprvalue>
   9.562 +        <description>
   9.563 +            Background image of the chart panel. The value of this 
   9.564 +            attribute is the filename of a graphics file relative to the web
   9.565 +            application's root directory (e.g. /WEB-INF/img/bg.jpg).
   9.566 +            The image must be loadable by the default java.awt.Toolkit of the
   9.567 +            servlet container's JVM.
   9.568 +        </description>
   9.569 +    </attribute>
   9.570 +    <attribute>
   9.571 +        <name>backgroundimagealpha</name>
   9.572 +        <required>false</required>
   9.573 +        <rtexprvalue>true</rtexprvalue>
   9.574 +        <type>java.lang.Float</type>
   9.575 +        <description>
   9.576 +            Chart's backgound alpha blending value as a float. Value ranges
   9.577 +            from 0.0 to 1.0.
   9.578 +            @default 0.0
   9.579 +            @overrides /chart[backgroundimagealpha]
   9.580 +        </description>
   9.581 +    </attribute>
   9.582 +    <attribute>
   9.583 +        <name>antialias</name>
   9.584 +        <required>false</required>
   9.585 +        <rtexprvalue>true</rtexprvalue>
   9.586 +        <description>
   9.587 +            Antialiased rendering of the chart.
   9.588 +            @default true
   9.589 +            @overrides /chart[backgroundimagealpha]
   9.590 +        </description>
   9.591 +    </attribute>
   9.592 +    <attribute>
   9.593 +        <name>showlegend</name>
   9.594 +        <required>false</required>
   9.595 +        <rtexprvalue>true</rtexprvalue>
   9.596 +        <description>
   9.597 +           Boolean value to switch on or off the legend display inside of this panel.
   9.598 +           @default true
   9.599 +        </description>
   9.600 +    </attribute>
   9.601 +    <attribute>
   9.602 +        <name>legendanchor</name>
   9.603 +        <required>false</required>
   9.604 +        <rtexprvalue>true</rtexprvalue>
   9.605 +        <description>
   9.606 +            Sets the anchor of the legend inside of the panel. Possible values
   9.607 +            are 'north', 'south', 'west', 'east'.
   9.608 +            Ignored if showlegned is 'false'.
   9.609 +            @default 'south'
   9.610 +        </description>
   9.611 +    </attribute>
   9.612 +</tag>
   9.613 +<tag>
   9.614 +    <name>combinedchart</name>
   9.615 +    <tag-class>de.laures.cewolf.taglib.tags.CombinedChartTag</tag-class>
   9.616 +    <description>
   9.617 +        Root tag of a combined-chart description.
   9.618 +        @root
   9.619 +        @required-child plot
   9.620 +        @optional-child chartpostprocessor
   9.621 +    </description>
   9.622 +    <attribute>
   9.623 +        <name>id</name>
   9.624 +        <required>true</required>
   9.625 +        <rtexprvalue>true</rtexprvalue>
   9.626 +        <description>
   9.627 +            ID under which the chart description bean will be stored in the
   9.628 +            page to be found by the img tag. Beware of using an
   9.629 +            ID which is not yet used for other beans in the page to avoid
   9.630 +            compile errors.
   9.631 +        </description>
   9.632 +    </attribute>
   9.633 +    <attribute>
   9.634 +        <name>type</name>
   9.635 +        <required>true</required>
   9.636 +        <rtexprvalue>true</rtexprvalue>
   9.637 +        <description>
   9.638 +            Type of the chart. One of combinedxy
   9.639 +        </description>
   9.640 +    </attribute>
   9.641 +    <attribute>
   9.642 +        <name>layout</name>
   9.643 +        <required>true</required>
   9.644 +        <rtexprvalue>true</rtexprvalue>
   9.645 +        <description>
   9.646 +            Layout of the chart. Either vertical or horizontal
   9.647 +        </description>
   9.648 +    </attribute>
   9.649 +    <attribute>
   9.650 +        <name>title</name>
   9.651 +        <required>false</required>
   9.652 +        <rtexprvalue>true</rtexprvalue>
   9.653 +        <description>
   9.654 +            Title of the chart which is displayed on the chart panel
   9.655 +            above the plot pane.
   9.656 +        </description>
   9.657 +    </attribute>
   9.658 +    <attribute>
   9.659 +        <name>xaxislabel</name>
   9.660 +        <required>false</required>
   9.661 +        <rtexprvalue>true</rtexprvalue>
   9.662 +        <description>
   9.663 +            Title of the chart's x-axis. This attributes is
   9.664 +            ignored if the type attribute of the parent chart tag is one
   9.665 +            of pie3d or pie.
   9.666 +        </description>
   9.667 +    </attribute>
   9.668 +    <attribute>
   9.669 +        <name>yaxislabel</name>
   9.670 +        <required>false</required>
   9.671 +        <rtexprvalue>true</rtexprvalue>
   9.672 +        <description>
   9.673 +            Title of the chart's y-axis. This attributes is
   9.674 +            ignored if the type attribute of the parent chart tag is one
   9.675 +            of pie3d or pie.
   9.676 +        </description>
   9.677 +    </attribute>
   9.678 +    <attribute>
   9.679 +        <name>background</name>
   9.680 +        <required>false</required>
   9.681 +        <rtexprvalue>true</rtexprvalue>
   9.682 +        <description>
   9.683 +            Background image of the chart panel. The value of this
   9.684 +            attribute is the filename of a graphics file relative to the web
   9.685 +            application's root directory (e.g. /WEB-INF/img/bg.jpg).
   9.686 +            The image must be loadable by the default java.awt.Toolkit of the
   9.687 +            servlet container's JVM.
   9.688 +        </description>
   9.689 +    </attribute>
   9.690 +    <attribute>
   9.691 +        <name>backgroundimagealpha</name>
   9.692 +        <required>false</required>
   9.693 +        <rtexprvalue>true</rtexprvalue>
   9.694 +        <type>java.lang.Float</type>
   9.695 +        <description>
   9.696 +            Chart's backgound alpha blending value as a float. Value ranges
   9.697 +            from 0.0 to 1.0.
   9.698 +            @default 0.0
   9.699 +            @overrides /chart[backgroundimagealpha]
   9.700 +        </description>
   9.701 +    </attribute>
   9.702 +    <attribute>
   9.703 +        <name>antialias</name>
   9.704 +        <required>false</required>
   9.705 +        <rtexprvalue>true</rtexprvalue>
   9.706 +        <description>
   9.707 +            Antialiased rendering of the chart.
   9.708 +            @default true
   9.709 +            @overrides /chart[backgroundimagealpha]
   9.710 +        </description>
   9.711 +    </attribute>
   9.712 +    <attribute>
   9.713 +        <name>showlegend</name>
   9.714 +        <required>false</required>
   9.715 +        <rtexprvalue>true</rtexprvalue>
   9.716 +        <description>
   9.717 +           Boolean value to switch on or off the legend display inside of this panel.
   9.718 +           @default true
   9.719 +        </description>
   9.720 +    </attribute>
   9.721 +    <attribute>
   9.722 +        <name>legendanchor</name>
   9.723 +        <required>false</required>
   9.724 +        <rtexprvalue>true</rtexprvalue>
   9.725 +        <description>
   9.726 +            Sets the anchor of the legend inside of the panel. Possible values
   9.727 +            are 'north', 'south', 'west', 'east'.
   9.728 +            Ignored if showlegned is 'false'.
   9.729 +            @default 'south'
   9.730 +        </description>
   9.731 +    </attribute>
   9.732 +</tag>
   9.733 +<tag>
   9.734 +    <name>legend</name>
   9.735 +    <tag-class>de.laures.cewolf.taglib.tags.LegendTag</tag-class>
   9.736 +    <description>
   9.737 +       This tag is used to render the legend of a chart in a separate image.
   9.738 +       It assumes that somewhere else in the JSP a chart tag defines a chart
   9.739 +       with the same ID as this legend tag.
   9.740 +    </description>
   9.741 +     <attribute>
   9.742 +        <name>forceSessionId</name>
   9.743 +        <required>false</required>
   9.744 +        <rtexprvalue>true</rtexprvalue>
   9.745 +        <description>
   9.746 +           Add JSession id.
   9.747 +        </description>
   9.748 +    </attribute>    
   9.749 +    <attribute>
   9.750 +        <name>removeAfterRender</name>
   9.751 +        <required>false</required>
   9.752 +        <rtexprvalue>true</rtexprvalue>
   9.753 +        <description>
   9.754 +           Remove image after rendering (defaults to false).
   9.755 +        </description>
   9.756 +    </attribute>
   9.757 +    <attribute>
   9.758 +        <name>renderer</name>
   9.759 +        <required>true</required>
   9.760 +        <rtexprvalue>true</rtexprvalue>
   9.761 +        <description>
   9.762 +            Path to rendering servlet relative to web apps root URL
   9.763 +            (e.g. servlet/cewolf).
   9.764 +        </description>
   9.765 +    </attribute>
   9.766 +    <attribute>
   9.767 +        <name>id</name>
   9.768 +        <required>true</required>
   9.769 +        <rtexprvalue>true</rtexprvalue>
   9.770 +        <description>
   9.771 +            ID under which the chart description bean will be stored in the
   9.772 +            session to be found by the rendering servlet. Beware of using an
   9.773 +            ID which is not yet used for other beans in the session to avoid
   9.774 +            overriding.
   9.775 +        </description>
   9.776 +    </attribute>
   9.777 +    <attribute>
   9.778 +        <name>timeout</name>
   9.779 +        <required>false</required>
   9.780 +        <rtexprvalue>true</rtexprvalue>
   9.781 +        <description>
   9.782 +           Sets the timeout value used in the LongTermSessionStorage obj. Value is in seconds.
   9.783 +        </description>
   9.784 +    </attribute>
   9.785 +    <attribute>
   9.786 +        <name>width</name>
   9.787 +        <required>false</required>
   9.788 +        <rtexprvalue>true</rtexprvalue>
   9.789 +        <description>
   9.790 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
   9.791 +        </description>
   9.792 +    </attribute>
   9.793 +    <attribute>
   9.794 +        <name>height</name>
   9.795 +        <required>false</required>
   9.796 +        <rtexprvalue>true</rtexprvalue>
   9.797 +        <description>
   9.798 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
   9.799 +        </description>
   9.800 +    </attribute>
   9.801 +    <attribute>
   9.802 +        <name>mime</name>
   9.803 +        <required>false</required>
   9.804 +        <rtexprvalue>true</rtexprvalue>
   9.805 +        <description>
   9.806 +            The MIME type of the image. Currently image/png (default) and image/svg are supported.
   9.807 +            @default image/png
   9.808 +        </description>
   9.809 +    </attribute>
   9.810 +    <attribute>
   9.811 +        <name>alt</name>
   9.812 +        <required>false</required>
   9.813 +        <rtexprvalue>true</rtexprvalue>
   9.814 +        <description>
   9.815 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
   9.816 +        </description>
   9.817 +    </attribute>
   9.818 +    <attribute>
   9.819 +        <name>hspace</name>
   9.820 +        <required>false</required>
   9.821 +        <rtexprvalue>true</rtexprvalue>
   9.822 +        <description>
   9.823 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
   9.824 +        </description>
   9.825 +    </attribute>
   9.826 +    <attribute>
   9.827 +        <name>vspace</name>
   9.828 +        <required>false</required>
   9.829 +        <rtexprvalue>true</rtexprvalue>
   9.830 +        <description>
   9.831 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
   9.832 +        </description>
   9.833 +    </attribute>
   9.834 +    <attribute>
   9.835 +        <name>align</name>
   9.836 +        <required>false</required>
   9.837 +        <rtexprvalue>true</rtexprvalue>
   9.838 +        <description>
   9.839 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
   9.840 +        </description>
   9.841 +    </attribute>
   9.842 +    <attribute>
   9.843 +        <name>border</name>
   9.844 +        <required>false</required>
   9.845 +        <rtexprvalue>true</rtexprvalue>
   9.846 +        <description>
   9.847 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
   9.848 +        </description>
   9.849 +    </attribute>
   9.850 +    <attribute>
   9.851 +        <name>ismap</name>
   9.852 +        <required>false</required>
   9.853 +        <rtexprvalue>true</rtexprvalue>
   9.854 +        <description>
   9.855 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
   9.856 +        </description>
   9.857 +    </attribute>
   9.858 +    <attribute>
   9.859 +        <name>longdesc</name>
   9.860 +        <required>false</required>
   9.861 +        <rtexprvalue>true</rtexprvalue>
   9.862 +        <description>
   9.863 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
   9.864 +        </description>
   9.865 +    </attribute>
   9.866 +    <attribute>
   9.867 +        <name>usemap</name>
   9.868 +        <required>false</required>
   9.869 +        <rtexprvalue>true</rtexprvalue>
   9.870 +        <description>
   9.871 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
   9.872 +        </description>
   9.873 +    </attribute>
   9.874 +    <attribute>
   9.875 +        <name>class</name>
   9.876 +        <required>false</required>
   9.877 +        <rtexprvalue>true</rtexprvalue>
   9.878 +        <description>
   9.879 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
   9.880 +        </description>
   9.881 +    </attribute>
   9.882 +    <attribute>
   9.883 +        <name>dir</name>
   9.884 +        <required>false</required>
   9.885 +        <rtexprvalue>true</rtexprvalue>
   9.886 +        <description>
   9.887 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
   9.888 +        </description>
   9.889 +    </attribute>
   9.890 +    <attribute>
   9.891 +        <name>lang</name>
   9.892 +        <required>false</required>
   9.893 +        <rtexprvalue>true</rtexprvalue>
   9.894 +        <description>
   9.895 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
   9.896 +        </description>
   9.897 +    </attribute>
   9.898 +    <attribute>
   9.899 +        <name>onclick</name>
   9.900 +        <required>false</required>
   9.901 +        <rtexprvalue>true</rtexprvalue>
   9.902 +        <description>
   9.903 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
   9.904 +        </description>
   9.905 +    </attribute>
   9.906 +    <attribute>
   9.907 +        <name>ondbclick</name>
   9.908 +        <required>false</required>
   9.909 +        <rtexprvalue>true</rtexprvalue>
   9.910 +        <description>
   9.911 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
   9.912 +        </description>
   9.913 +    </attribute>
   9.914 +    <attribute>
   9.915 +        <name>onkeydown</name>
   9.916 +        <required>false</required>
   9.917 +        <rtexprvalue>true</rtexprvalue>
   9.918 +        <description>
   9.919 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
   9.920 +        </description>
   9.921 +    </attribute>
   9.922 +    <attribute>
   9.923 +        <name>onkeypress</name>
   9.924 +        <required>false</required>
   9.925 +        <rtexprvalue>true</rtexprvalue>
   9.926 +        <description>
   9.927 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
   9.928 +        </description>
   9.929 +    </attribute>
   9.930 +    <attribute>
   9.931 +        <name>onkeyup</name>
   9.932 +        <required>false</required>
   9.933 +        <rtexprvalue>true</rtexprvalue>
   9.934 +        <description>
   9.935 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
   9.936 +        </description>
   9.937 +    </attribute>
   9.938 +    <attribute>
   9.939 +        <name>onmousedown</name>
   9.940 +        <required>false</required>
   9.941 +        <rtexprvalue>true</rtexprvalue>
   9.942 +        <description>
   9.943 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
   9.944 +        </description>
   9.945 +    </attribute>
   9.946 +    <attribute>
   9.947 +        <name>onmousemove</name>
   9.948 +        <required>false</required>
   9.949 +        <rtexprvalue>true</rtexprvalue>
   9.950 +        <description>
   9.951 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
   9.952 +        </description>
   9.953 +    </attribute>
   9.954 +    <attribute>
   9.955 +        <name>onmouseout</name>
   9.956 +        <required>false</required>
   9.957 +        <rtexprvalue>true</rtexprvalue>
   9.958 +        <description>
   9.959 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
   9.960 +        </description>
   9.961 +    </attribute>
   9.962 +    <attribute>
   9.963 +        <name>onmouseover</name>
   9.964 +        <required>false</required>
   9.965 +        <rtexprvalue>true</rtexprvalue>
   9.966 +        <description>
   9.967 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
   9.968 +        </description>
   9.969 +    </attribute>
   9.970 +    <attribute>
   9.971 +        <name>onmouseup</name>
   9.972 +        <required>false</required>
   9.973 +        <rtexprvalue>true</rtexprvalue>
   9.974 +        <description>
   9.975 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
   9.976 +        </description>
   9.977 +    </attribute>
   9.978 +    <attribute>
   9.979 +        <name>style</name>
   9.980 +        <required>false</required>
   9.981 +        <rtexprvalue>true</rtexprvalue>
   9.982 +        <description>
   9.983 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
   9.984 +        </description>
   9.985 +    </attribute>
   9.986 +    <attribute>
   9.987 +        <name>htmltitle</name>
   9.988 +        <required>false</required>
   9.989 +        <rtexprvalue>true</rtexprvalue>
   9.990 +        <description>
   9.991 +           Corresponds to appropriate HMTL &lt;img&gt; title attribute.
   9.992 +        </description>
   9.993 +    </attribute>
   9.994 +</tag>
   9.995 +<tag>
   9.996 +    <name>data</name>
   9.997 +    <tag-class>de.laures.cewolf.taglib.tags.DataTag</tag-class>
   9.998 +    <description>
   9.999 +        A data tag provides all information needed to retrieve the data which are
  9.1000 +        needed by the chart. Current version only supports data provided by a
  9.1001 +        DatasetProducer. In future versions there will be tags to provide data
  9.1002 +        from a datasource (e.g. via SQL).
  9.1003 +        @optional-child producer
  9.1004 +    </description>
  9.1005 +</tag>
  9.1006 +<tag>
  9.1007 +    <name>producer</name>
  9.1008 +    <tag-class>de.laures.cewolf.taglib.tags.ProducerTag</tag-class>
  9.1009 +    <description>
  9.1010 +        A data tag provides all information needed to retrieve the data which are
  9.1011 +        needed by the chart. Current version only supports data provided by a
  9.1012 +        DatasetProducer. In future versions there will be tags to provide data
  9.1013 +        from a datasource (e.g. via SQL).
  9.1014 +        @optional-child param
  9.1015 +    </description>
  9.1016 +    <attribute>
  9.1017 +        <name>id</name>
  9.1018 +        <required>true</required>
  9.1019 +        <rtexprvalue>true</rtexprvalue>
  9.1020 +        <description>
  9.1021 +            ID under which an object of type DatasetProducer can be found in
  9.1022 +            pageContext. This object is used to retrieve the dataset of the chart.
  9.1023 +        </description>
  9.1024 +    </attribute>
  9.1025 +    <attribute>
  9.1026 +        <name>usecache</name>
  9.1027 +        <required>false</required>
  9.1028 +        <rtexprvalue>true</rtexprvalue>
  9.1029 +        <description>
  9.1030 +            Determines if formally produced data should be reused if possible.
  9.1031 +            @default true
  9.1032 +        </description>
  9.1033 +    </attribute>
  9.1034 +</tag>
  9.1035 +<tag>
  9.1036 +    <name>chartpostprocessor</name>
  9.1037 +    <tag-class>de.laures.cewolf.taglib.tags.ChartPostProcessorTag</tag-class>
  9.1038 +    <description>
  9.1039 +        A chart postprocessor tag references an object of type ChartProstProcessor
  9.1040 +        which must be defined in pageContext under the provided ID. This object
  9.1041 +        is called back after chart generation to post process the chart in any
  9.1042 +        manner.
  9.1043 +        @optional-child param
  9.1044 +    </description>
  9.1045 +    <attribute>
  9.1046 +        <name>id</name>
  9.1047 +        <required>true</required>
  9.1048 +        <rtexprvalue>true</rtexprvalue>
  9.1049 +        <description>
  9.1050 +            ID under which an object of type ChartPostProcessor can be found in
  9.1051 +            pageContext. This object is used to postprocess the rendered chart.
  9.1052 +        </description>
  9.1053 +    </attribute>
  9.1054 +</tag>
  9.1055 +<tag>
  9.1056 +    <name>param</name>
  9.1057 +    <tag-class>de.laures.cewolf.taglib.tags.ParamTag</tag-class>
  9.1058 +    <description>
  9.1059 +        Name/value-pair to paramterize a surrounding tag whose handler must 
  9.1060 +        implement the Parameterized interface.
  9.1061 +    </description>
  9.1062 +    <attribute>
  9.1063 +        <name>name</name>
  9.1064 +        <required>true</required>
  9.1065 +        <rtexprvalue>true</rtexprvalue>
  9.1066 +        <description>
  9.1067 +            Name of the param
  9.1068 +        </description>
  9.1069 +    </attribute>
  9.1070 +    <attribute>
  9.1071 +        <name>value</name>
  9.1072 +        <required>true</required>
  9.1073 +        <rtexprvalue>true</rtexprvalue>
  9.1074 +        <type>java.io.Serializable</type>
  9.1075 +        <description>
  9.1076 +            Value of the param. Must be serializable.
  9.1077 +        </description>
  9.1078 +    </attribute>
  9.1079 +</tag>
  9.1080 +<tag>
  9.1081 +    <name>gradientpaint</name>
  9.1082 +    <tag-class>de.laures.cewolf.taglib.tags.GradientTag</tag-class>
  9.1083 +    <description>
  9.1084 +        The gradientpaint tag provides a way to fill a shape with a linear 
  9.1085 +        color gradient pattern. If Point P1 with Color C1 and Point P2 with 
  9.1086 +        Color C2 are specified in user space, the Color on the P1, P2 
  9.1087 +        connecting line is proportionally changed from C1 to C2. Any point 
  9.1088 +        P not on the extended P1, P2 connecting line has the color of the 
  9.1089 +        point P' that is the perpendicular projection of P on the extended P1,
  9.1090 +        P2 connecting line. Points on the extended line outside of the P1,
  9.1091 +        P2 segment can be colored in one of two ways.
  9.1092 +        &lt;ul&gt;
  9.1093 +        &lt;li&gt;If the gradient is cyclic then the points on the extended 
  9.1094 +        P1, P2 connecting line cycle back and forth between the colors C1 
  9.1095 +        and C2.
  9.1096 +        &lt;li&gt;If the gradient is acyclic then points on the P1 side of 
  9.1097 +        the segment have the constant Color C1 while points on the P2 side 
  9.1098 +        have the constant Color C2.
  9.1099 +        The two colors are defined in a nested point tag of this tag. 
  9.1100 +        @required-child point
  9.1101 +    </description>
  9.1102 +    <attribute>
  9.1103 +        <name>cyclic</name>
  9.1104 +        <required>false</required>
  9.1105 +        <rtexprvalue>true</rtexprvalue>
  9.1106 +        <description>
  9.1107 +            Does the gradient cycle repeatedly between the two colors C1 and C2.
  9.1108 +            @default false
  9.1109 +        </description>
  9.1110 +    </attribute>
  9.1111 +</tag>
  9.1112 +<tag>
  9.1113 +    <name>point</name>
  9.1114 +    <tag-class>de.laures.cewolf.taglib.tags.PointTag</tag-class>
  9.1115 +    <description>
  9.1116 +        Defines a point with x and y coordinates and a color.
  9.1117 +        @extends colorpaint
  9.1118 +    </description>
  9.1119 +    <attribute>
  9.1120 +        <name>x</name>
  9.1121 +        <required>true</required>
  9.1122 +        <rtexprvalue>true</rtexprvalue>
  9.1123 +        <description>
  9.1124 +            The x coordinate of the point.
  9.1125 +        </description>
  9.1126 +    </attribute>
  9.1127 +    <attribute>
  9.1128 +        <name>y</name>
  9.1129 +        <required>true</required>
  9.1130 +        <rtexprvalue>true</rtexprvalue>
  9.1131 +        <description>
  9.1132 +            The y coordinate of the point.
  9.1133 +        </description>
  9.1134 +    </attribute>
  9.1135 +    <attribute>
  9.1136 +        <name>color</name>
  9.1137 +        <required>false</required>
  9.1138 +        <rtexprvalue>true</rtexprvalue>
  9.1139 +        <description>
  9.1140 +            @copy
  9.1141 +        </description>
  9.1142 +    </attribute>
  9.1143 +</tag>
  9.1144 +<tag>
  9.1145 +    <name>colorpaint</name>
  9.1146 +    <tag-class>de.laures.cewolf.taglib.tags.ColorTag</tag-class>
  9.1147 +    <description>
  9.1148 +        Fills the area defined by the parent tag with a color. 
  9.1149 +    </description>
  9.1150 +    <attribute>
  9.1151 +        <name>color</name>
  9.1152 +        <required>true</required>
  9.1153 +        <rtexprvalue>true</rtexprvalue>
  9.1154 +        <description>
  9.1155 +            The color to be used to fill the parent tag's area.
  9.1156 +            The color definition is compatible with the
  9.1157 +            HTML one. E.g. black is '#000000' and red is '#FF0000'. However it
  9.1158 +            is possible to append two hex numbers for the alpha channel. Thus
  9.1159 +            '#FF000080' is red with alpha blending of 50%.
  9.1160 +        </description>
  9.1161 +    </attribute>
  9.1162 +</tag>
  9.1163 +<tag>
  9.1164 +    <name>texturepaint</name>
  9.1165 +    <tag-class>de.laures.cewolf.taglib.tags.TextureTag</tag-class>
  9.1166 +    <description>
  9.1167 +        The texturepaint tag provides a way to fill the area of the parent tag
  9.1168 +        with a texture that is specified as an image. The texture is anchored to 
  9.1169 +        the upper left corner of the parent tags area.
  9.1170 +    </description>
  9.1171 +    <attribute>
  9.1172 +        <name>image</name>
  9.1173 +        <required>true</required>
  9.1174 +        <rtexprvalue>true</rtexprvalue>
  9.1175 +        <description>
  9.1176 +            Image fo the texture. The value of this 
  9.1177 +            attribute is the filename of a graphics file relative to the web
  9.1178 +            application's root directory (e.g. /WEB-INF/img/bg.jpg).
  9.1179 +            The image must be loadable by the default java.awt.Toolkit of the
  9.1180 +            servlet container's JVM.
  9.1181 +        </description>
  9.1182 +    </attribute>
  9.1183 +    <attribute>
  9.1184 +        <name>width</name>
  9.1185 +        <required>true</required>
  9.1186 +        <rtexprvalue>true</rtexprvalue>
  9.1187 +        <description>
  9.1188 +            The width of the texture.
  9.1189 +        </description>
  9.1190 +    </attribute>
  9.1191 +    <attribute>
  9.1192 +        <name>height</name>
  9.1193 +        <required>true</required>
  9.1194 +        <rtexprvalue>true</rtexprvalue>
  9.1195 +        <description>
  9.1196 +            The height of the texture.
  9.1197 +        </description>  
  9.1198 +    </attribute>
  9.1199 +</tag>
  9.1200 +<tag>
  9.1201 +    <name>map</name>
  9.1202 +    <tag-class>de.laures.cewolf.taglib.tags.ChartMapTag</tag-class>
  9.1203 +    <description>
  9.1204 +      This tag defines an image and tooltip map for the parent img tag.
  9.1205 +      @parent img
  9.1206 +    </description>
  9.1207 +    <attribute>
  9.1208 +        <name>linkgeneratorid</name>
  9.1209 +        <required>false</required>
  9.1210 +        <rtexprvalue>true</rtexprvalue>
  9.1211 +        <description>
  9.1212 +          The ID of the class which implements the appropriate de.laures.cewolf.LinkGenerator.
  9.1213 +        </description>
  9.1214 +    </attribute>
  9.1215 +    <attribute>
  9.1216 +        <name>tooltipgeneratorid</name>
  9.1217 +        <required>false</required>
  9.1218 +        <rtexprvalue>true</rtexprvalue>
  9.1219 +        <description>
  9.1220 +          The ID of the class which implements the appropriate com.jrefinery.chart.tooltips.ToolTipGenerator.
  9.1221 +        </description>
  9.1222 +    </attribute>
  9.1223 +	<attribute>
  9.1224 +		<name>useJFreeChartLinkGenerator</name>
  9.1225 +		<required>false</required>
  9.1226 +		<rtexprvalue>true</rtexprvalue>
  9.1227 +		<description>If the links provided by the JFreeChart renderer should be used.</description>
  9.1228 +	</attribute>
  9.1229 +	<attribute>
  9.1230 +		<name>useJFreeChartTooltipGenerator</name>
  9.1231 +		<required>false</required>
  9.1232 +		<rtexprvalue>true</rtexprvalue>
  9.1233 +		<description>If the tooltips provided by the JFreeChart renderer should be used.</description>		
  9.1234 +	</attribute>	
  9.1235 +	
  9.1236 +</tag>
  9.1237 +</taglib>
  9.1238 \ No newline at end of file
    10.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    10.2 +++ b/java/cewolf-1.0/etc/overlib.js	Sat Feb 28 21:31:02 2009 +0100
    10.3 @@ -0,0 +1,1222 @@
    10.4 +//\//////////////////////////////////////////////////////////////////////////////////
    10.5 +//\  overLIB 3.50  --  This notice must remain untouched at all times.
    10.6 +//\  Copyright Erik Bosrup 1998-2001. All rights reserved.
    10.7 +//\
    10.8 +//\  By Erik Bosrup (erik@bosrup.com).  Last modified 2001-08-28.
    10.9 +//\  Portions by Dan Steinman (dansteinman.com). Additions by other people are
   10.10 +//\  listed on the overLIB homepage.
   10.11 +//\
   10.12 +//\  Get the latest version at http://www.bosrup.com/web/overlib/
   10.13 +//\
   10.14 +//\  This script is published under an open source license. Please read the license
   10.15 +//\  agreement online at: http://www.bosrup.com/web/overlib/license.html
   10.16 +//\  If you have questions regarding the license please contact erik@bosrup.com.
   10.17 +//\
   10.18 +//\  This script library was originally created for personal use. By request it has
   10.19 +//\  later been made public. This is free software. Do not sell this as your own
   10.20 +//\  work, or remove this copyright notice. For full details on copying or changing
   10.21 +//\  this script please read the license agreement at the link above.
   10.22 +//\
   10.23 +//\  Please give credit on sites that use overLIB and submit changes of the script
   10.24 +//\  so other people can use them as well. This script is free to use, don't abuse.
   10.25 +//\//////////////////////////////////////////////////////////////////////////////////
   10.26 +//\mini
   10.27 +
   10.28 +
   10.29 +////////////////////////////////////////////////////////////////////////////////////
   10.30 +// CONSTANTS
   10.31 +// Don't touch these. :)
   10.32 +////////////////////////////////////////////////////////////////////////////////////
   10.33 +var INARRAY		=	1;
   10.34 +var CAPARRAY		=	2;
   10.35 +var STICKY		=	3;
   10.36 +var BACKGROUND		=	4;
   10.37 +var NOCLOSE		=	5;
   10.38 +var CAPTION		=	6;
   10.39 +var LEFT		=	7;
   10.40 +var RIGHT		=	8;
   10.41 +var CENTER		=	9;
   10.42 +var OFFSETX		=	10;
   10.43 +var OFFSETY		=	11;
   10.44 +var FGCOLOR		=	12;
   10.45 +var BGCOLOR		=	13;
   10.46 +var TEXTCOLOR		=	14;
   10.47 +var CAPCOLOR		=	15;
   10.48 +var CLOSECOLOR		=	16;
   10.49 +var WIDTH		=	17;
   10.50 +var BORDER		=	18;
   10.51 +var STATUS		=	19;
   10.52 +var AUTOSTATUS		=	20;
   10.53 +var AUTOSTATUSCAP	=	21;
   10.54 +var HEIGHT		=	22;
   10.55 +var CLOSETEXT		=	23;
   10.56 +var SNAPX		=	24;
   10.57 +var SNAPY		=	25;
   10.58 +var FIXX		=	26;
   10.59 +var FIXY		=	27;
   10.60 +var FGBACKGROUND	=	28;
   10.61 +var BGBACKGROUND	=	29;
   10.62 +var PADX		=	30; // PADX2 out
   10.63 +var PADY		=	31; // PADY2 out
   10.64 +var FULLHTML		=	34;
   10.65 +var ABOVE		=	35;
   10.66 +var BELOW		=	36;
   10.67 +var CAPICON		=	37;
   10.68 +var TEXTFONT		=	38;
   10.69 +var CAPTIONFONT		=	39;
   10.70 +var CLOSEFONT		=	40;
   10.71 +var TEXTSIZE		=	41;
   10.72 +var CAPTIONSIZE		=	42;
   10.73 +var CLOSESIZE		=	43;
   10.74 +var FRAME		=	44;
   10.75 +var TIMEOUT		=	45;
   10.76 +var FUNCTION		=	46;
   10.77 +var DELAY		=	47;
   10.78 +var HAUTO		=	48;
   10.79 +var VAUTO		=	49;
   10.80 +var CLOSECLICK		=	50;
   10.81 +var CSSOFF		=	51;
   10.82 +var CSSSTYLE		=	52;
   10.83 +var CSSCLASS		=	53;
   10.84 +var FGCLASS		=	54;
   10.85 +var BGCLASS		=	55;
   10.86 +var TEXTFONTCLASS	=	56;
   10.87 +var CAPTIONFONTCLASS	=	57;
   10.88 +var CLOSEFONTCLASS	=	58;
   10.89 +var PADUNIT		=	59;
   10.90 +var HEIGHTUNIT		=	60;
   10.91 +var WIDTHUNIT		=	61;
   10.92 +var TEXTSIZEUNIT	=	62;
   10.93 +var TEXTDECORATION	=	63;
   10.94 +var TEXTSTYLE		=	64;
   10.95 +var TEXTWEIGHT		=	65;
   10.96 +var CAPTIONSIZEUNIT	=	66;
   10.97 +var CAPTIONDECORATION	=	67;
   10.98 +var CAPTIONSTYLE	=	68;
   10.99 +var CAPTIONWEIGHT	=	69;
  10.100 +var CLOSESIZEUNIT	=	70;
  10.101 +var CLOSEDECORATION	=	71;
  10.102 +var CLOSESTYLE		=	72;
  10.103 +var CLOSEWEIGHT		=	73;
  10.104 +
  10.105 +
  10.106 +////////////////////////////////////////////////////////////////////////////////////
  10.107 +// DEFAULT CONFIGURATION
  10.108 +// You don't have to change anything here if you don't want to. All of this can be
  10.109 +// changed on your html page or through an overLIB call.
  10.110 +////////////////////////////////////////////////////////////////////////////////////
  10.111 +
  10.112 +// Main background color (the large area)
  10.113 +// Usually a bright color (white, yellow etc)
  10.114 +if (typeof ol_fgcolor == 'undefined') { var ol_fgcolor = "#CCCCFF";}
  10.115 +	
  10.116 +// Border color and color of caption
  10.117 +// Usually a dark color (black, brown etc)
  10.118 +if (typeof ol_bgcolor == 'undefined') { var ol_bgcolor = "#333399";}
  10.119 +	
  10.120 +// Text color
  10.121 +// Usually a dark color
  10.122 +if (typeof ol_textcolor == 'undefined') { var ol_textcolor = "#000000";}
  10.123 +	
  10.124 +// Color of the caption text
  10.125 +// Usually a bright color
  10.126 +if (typeof ol_capcolor == 'undefined') { var ol_capcolor = "#FFFFFF";}
  10.127 +	
  10.128 +// Color of "Close" when using Sticky
  10.129 +// Usually a semi-bright color
  10.130 +if (typeof ol_closecolor == 'undefined') { var ol_closecolor = "#9999FF";}
  10.131 +
  10.132 +// Font face for the main text
  10.133 +if (typeof ol_textfont == 'undefined') { var ol_textfont = "Verdana,Arial,Helvetica";}
  10.134 +
  10.135 +// Font face for the caption
  10.136 +if (typeof ol_captionfont == 'undefined') { var ol_captionfont = "Verdana,Arial,Helvetica";}
  10.137 +
  10.138 +// Font face for the close text
  10.139 +if (typeof ol_closefont == 'undefined') { var ol_closefont = "Verdana,Arial,Helvetica";}
  10.140 +
  10.141 +// Font size for the main text
  10.142 +// When using CSS this will be very small.
  10.143 +if (typeof ol_textsize == 'undefined') { var ol_textsize = "1";}
  10.144 +
  10.145 +// Font size for the caption
  10.146 +// When using CSS this will be very small.
  10.147 +if (typeof ol_captionsize == 'undefined') { var ol_captionsize = "1";}
  10.148 +
  10.149 +// Font size for the close text
  10.150 +// When using CSS this will be very small.
  10.151 +if (typeof ol_closesize == 'undefined') { var ol_closesize = "1";}
  10.152 +
  10.153 +// Width of the popups in pixels
  10.154 +// 100-300 pixels is typical
  10.155 +if (typeof ol_width == 'undefined') { var ol_width = "200";}
  10.156 +
  10.157 +// How thick the ol_border should be in pixels
  10.158 +// 1-3 pixels is typical
  10.159 +if (typeof ol_border == 'undefined') { var ol_border = "1";}
  10.160 +
  10.161 +// How many pixels to the right/left of the cursor to show the popup
  10.162 +// Values between 3 and 12 are best
  10.163 +if (typeof ol_offsetx == 'undefined') { var ol_offsetx = 10;}
  10.164 +	
  10.165 +// How many pixels to the below the cursor to show the popup
  10.166 +// Values between 3 and 12 are best
  10.167 +if (typeof ol_offsety == 'undefined') { var ol_offsety = 10;}
  10.168 +
  10.169 +// Default text for popups
  10.170 +// Should you forget to pass something to overLIB this will be displayed.
  10.171 +if (typeof ol_text == 'undefined') { var ol_text = "Default Text"; }
  10.172 +
  10.173 +// Default caption
  10.174 +// You should leave this blank or you will have problems making non caps popups.
  10.175 +if (typeof ol_cap == 'undefined') { var ol_cap = ""; }
  10.176 +
  10.177 +// Decides if sticky popups are default.
  10.178 +// 0 for non, 1 for stickies.
  10.179 +if (typeof ol_sticky == 'undefined') { var ol_sticky = 0; }
  10.180 +
  10.181 +// Default background image. Better left empty unless you always want one.
  10.182 +if (typeof ol_background == 'undefined') { var ol_background = ""; }
  10.183 +
  10.184 +// Text for the closing sticky popups.
  10.185 +// Normal is "Close".
  10.186 +if (typeof ol_close == 'undefined') { var ol_close = "Close"; }
  10.187 +
  10.188 +// Default vertical alignment for popups.
  10.189 +// It's best to leave RIGHT here. Other options are LEFT and CENTER.
  10.190 +if (typeof ol_hpos == 'undefined') { var ol_hpos = RIGHT; }
  10.191 +
  10.192 +// Default status bar text when a popup is invoked.
  10.193 +if (typeof ol_status == 'undefined') { var ol_status = ""; }
  10.194 +
  10.195 +// If the status bar automatically should load either text or caption.
  10.196 +// 0=nothing, 1=text, 2=caption
  10.197 +if (typeof ol_autostatus == 'undefined') { var ol_autostatus = 0; }
  10.198 +
  10.199 +// Default height for popup. Often best left alone.
  10.200 +if (typeof ol_height == 'undefined') { var ol_height = -1; }
  10.201 +
  10.202 +// Horizontal grid spacing that popups will snap to.
  10.203 +// 0 makes no grid, anything else will cause a snap to that grid spacing.
  10.204 +if (typeof ol_snapx == 'undefined') { var ol_snapx = 0; }
  10.205 +
  10.206 +// Vertical grid spacing that popups will snap to.
  10.207 +// 0 makes no grid, andthing else will cause a snap to that grid spacing.
  10.208 +if (typeof ol_snapy == 'undefined') { var ol_snapy = 0; }
  10.209 +
  10.210 +// Sets the popups horizontal position to a fixed column.
  10.211 +// Anything above -1 will cause fixed position.
  10.212 +if (typeof ol_fixx == 'undefined') { var ol_fixx = -1; }
  10.213 +
  10.214 +// Sets the popups vertical position to a fixed row.
  10.215 +// Anything above -1 will cause fixed position.
  10.216 +if (typeof ol_fixy == 'undefined') { var ol_fixy = -1; }
  10.217 +
  10.218 +// Background image for the popups inside.
  10.219 +if (typeof ol_fgbackground == 'undefined') { var ol_fgbackground = ""; }
  10.220 +
  10.221 +// Background image for the popups frame.
  10.222 +if (typeof ol_bgbackground == 'undefined') { var ol_bgbackground = ""; }
  10.223 +
  10.224 +// How much horizontal left padding text should get by default when BACKGROUND is used.
  10.225 +if (typeof ol_padxl == 'undefined') { var ol_padxl = 1; }
  10.226 +
  10.227 +// How much horizontal right padding text should get by default when BACKGROUND is used.
  10.228 +if (typeof ol_padxr == 'undefined') { var ol_padxr = 1; }
  10.229 +
  10.230 +// How much vertical top padding text should get by default when BACKGROUND is used.
  10.231 +if (typeof ol_padyt == 'undefined') { var ol_padyt = 1; }
  10.232 +
  10.233 +// How much vertical bottom padding text should get by default when BACKGROUND is used.
  10.234 +if (typeof ol_padyb == 'undefined') { var ol_padyb = 1; }
  10.235 +
  10.236 +// If the user by default must supply all html for complete popup control.
  10.237 +// Set to 1 to activate, 0 otherwise.
  10.238 +if (typeof ol_fullhtml == 'undefined') { var ol_fullhtml = 0; }
  10.239 +
  10.240 +// Default vertical position of the popup. Default should normally be BELOW.
  10.241 +// ABOVE only works when HEIGHT is defined.
  10.242 +if (typeof ol_vpos == 'undefined') { var ol_vpos = BELOW; }
  10.243 +
  10.244 +// Default height of popup to use when placing the popup above the cursor.
  10.245 +if (typeof ol_aboveheight == 'undefined') { var ol_aboveheight = 0; }
  10.246 +
  10.247 +// Default icon to place next to the popups caption.
  10.248 +if (typeof ol_caption == 'undefined') { var ol_capicon = ""; }
  10.249 +
  10.250 +// Default frame. We default to current frame if there is no frame defined.
  10.251 +if (typeof ol_frame == 'undefined') { var ol_frame = self; }
  10.252 +
  10.253 +// Default timeout. By default there is no timeout.
  10.254 +if (typeof ol_timeout == 'undefined') { var ol_timeout = 0; }
  10.255 +
  10.256 +// Default javascript funktion. By default there is none.
  10.257 +if (typeof ol_function == 'undefined') { var ol_function = Function(); }
  10.258 +
  10.259 +// Default timeout. By default there is no timeout.
  10.260 +if (typeof ol_delay == 'undefined') { var ol_delay = 0; }
  10.261 +
  10.262 +// If overLIB should decide the horizontal placement.
  10.263 +if (typeof ol_hauto == 'undefined') { var ol_hauto = 0; }
  10.264 +
  10.265 +// If overLIB should decide the vertical placement.
  10.266 +if (typeof ol_vauto == 'undefined') { var ol_vauto = 0; }
  10.267 +
  10.268 +
  10.269 +
  10.270 +// If the user has to click to close stickies.
  10.271 +if (typeof ol_closeclick == 'undefined') { var ol_closeclick = 0; }
  10.272 +
  10.273 +// This variable determines if you want to use CSS or inline definitions.
  10.274 +// CSSOFF=no CSS    CSSSTYLE=use CSS inline styles    CSSCLASS=use classes
  10.275 +if (typeof ol_css == 'undefined') { var ol_css = CSSOFF; }
  10.276 +
  10.277 +// Main background class (eqv of fgcolor)
  10.278 +// This is only used if CSS is set to use classes (ol_css = CSSCLASS)
  10.279 +if (typeof ol_fgclass == 'undefined') { var ol_fgclass = ""; }
  10.280 +
  10.281 +// Frame background class (eqv of bgcolor)
  10.282 +// This is only used if CSS is set to use classes (ol_css = CSSCLASS)
  10.283 +if (typeof ol_bgclass == 'undefined') { var ol_bgclass = ""; }
  10.284 +
  10.285 +// Main font class
  10.286 +// This is only used if CSS is set to use classes (ol_css = CSSCLASS)
  10.287 +if (typeof ol_textfontclass == 'undefined') { var ol_textfontclass = ""; }
  10.288 +
  10.289 +// Caption font class
  10.290 +// This is only used if CSS is set to use classes (ol_css = CSSCLASS)
  10.291 +if (typeof ol_captionfontclass == 'undefined') { var ol_captionfontclass = ""; }
  10.292 +
  10.293 +// Close font class
  10.294 +// This is only used if CSS is set to use classes (ol_css = CSSCLASS)
  10.295 +if (typeof ol_closefontclass == 'undefined') { var ol_closefontclass = ""; }
  10.296 +
  10.297 +// Unit to be used for the text padding above
  10.298 +// Only used if CSS inline styles are being used (ol_css = CSSSTYLE)
  10.299 +// Options include "px", "%", "in", "cm" and more
  10.300 +if (typeof ol_padunit == 'undefined') { var ol_padunit = "px";}
  10.301 +
  10.302 +// Unit to be used for height of popup
  10.303 +// Only used if CSS inline styles are being used (ol_css = CSSSTYLE)
  10.304 +// Options include "px", "%", "in", "cm" and more
  10.305 +if (typeof ol_heightunit == 'undefined') { var ol_heightunit = "px";}
  10.306 +
  10.307 +// Unit to be used for width of popup
  10.308 +// Only used if CSS inline styles are being used (ol_css = CSSSTYLE)
  10.309 +// Options include "px", "%", "in", "cm" and more
  10.310 +if (typeof ol_widthunit == 'undefined') { var ol_widthunit = "px";}
  10.311 +
  10.312 +// Font size unit for the main text
  10.313 +// Only used if CSS inline styles are being used (ol_css = CSSSTYLE)
  10.314 +if (typeof ol_textsizeunit == 'undefined') { var ol_textsizeunit = "px";}
  10.315 +
  10.316 +// Decoration of the main text ("none", "underline", "line-through" or "blink")
  10.317 +// Only used if CSS inline styles are being used (ol_css = CSSSTYLE)
  10.318 +if (typeof ol_textdecoration == 'undefined') { var ol_textdecoration = "none";}
  10.319 +
  10.320 +// Font style of the main text ("normal" or "italic")
  10.321 +// Only used if CSS inline styles are being used (ol_css = CSSSTYLE)
  10.322 +if (typeof ol_textstyle == 'undefined') { var ol_textstyle = "normal";}
  10.323 +
  10.324 +// Font weight of the main text ("normal", "bold", "bolder", "lighter", ect.)
  10.325 +// Only used if CSS inline styles are being used (ol_css = CSSSTYLE)
  10.326 +if (typeof ol_textweight == 'undefined') { var ol_textweight = "normal";}
  10.327 +
  10.328 +// Font size unit for the caption
  10.329 +// Only used if CSS inline styles are being used (ol_css = CSSSTYLE)
  10.330 +if (typeof ol_captionsizeunit == 'undefined') { var ol_captionsizeunit = "px";}
  10.331 +
  10.332 +// Decoration of the caption ("none", "underline", "line-through" or "blink")
  10.333 +// Only used if CSS inline styles are being used (ol_css = CSSSTYLE)
  10.334 +if (typeof ol_captiondecoration == 'undefined') { var ol_captiondecoration = "none";}
  10.335 +
  10.336 +// Font style of the caption ("normal" or "italic")
  10.337 +// Only used if CSS inline styles are being used (ol_css = CSSSTYLE)
  10.338 +if (typeof ol_captionstyle == 'undefined') { var ol_captionstyle = "normal";}
  10.339 +
  10.340 +// Font weight of the caption ("normal", "bold", "bolder", "lighter", ect.)
  10.341 +// Only used if CSS inline styles are being used (ol_css = CSSSTYLE)
  10.342 +if (typeof ol_captionweight == 'undefined') { var ol_captionweight = "bold";}
  10.343 +
  10.344 +// Font size unit for the close text
  10.345 +// Only used if CSS inline styles are being used (ol_css = CSSSTYLE)
  10.346 +if (typeof ol_closesizeunit == 'undefined') { var ol_closesizeunit = "px";}
  10.347 +
  10.348 +// Decoration of the close text ("none", "underline", "line-through" or "blink")
  10.349 +// Only used if CSS inline styles are being used (ol_css = CSSSTYLE)
  10.350 +if (typeof ol_closedecoration == 'undefined') { var ol_closedecoration = "none";}
  10.351 +
  10.352 +// Font style of the close text ("normal" or "italic")
  10.353 +// Only used if CSS inline styles are being used (ol_css = CSSSTYLE)
  10.354 +if (typeof ol_closestyle == 'undefined') { var ol_closestyle = "normal";}
  10.355 +
  10.356 +// Font weight of the close text ("normal", "bold", "bolder", "lighter", ect.)
  10.357 +// Only used if CSS inline styles are being used (ol_css = CSSSTYLE)
  10.358 +if (typeof ol_closeweight == 'undefined') { var ol_closeweight = "normal";}
  10.359 +
  10.360 +
  10.361 +
  10.362 +////////////////////////////////////////////////////////////////////////////////////
  10.363 +// ARRAY CONFIGURATION
  10.364 +// You don't have to change anything here if you don't want to. The following
  10.365 +// arrays can be filled with text and html if you don't wish to pass it from
  10.366 +// your html page.
  10.367 +////////////////////////////////////////////////////////////////////////////////////
  10.368 +
  10.369 +// Array with texts.
  10.370 +if (typeof ol_texts == 'undefined') { var ol_texts = new Array("Text 0", "Text 1"); }
  10.371 +
  10.372 +// Array with captions.
  10.373 +if (typeof ol_caps == 'undefined') { var ol_caps = new Array("Caption 0", "Caption 1"); }
  10.374 +
  10.375 +
  10.376 +////////////////////////////////////////////////////////////////////////////////////
  10.377 +// END CONFIGURATION
  10.378 +// Don't change anything below this line, all configuration is above.
  10.379 +////////////////////////////////////////////////////////////////////////////////////
  10.380 +
  10.381 +
  10.382 +
  10.383 +
  10.384 +
  10.385 +
  10.386 +
  10.387 +////////////////////////////////////////////////////////////////////////////////////
  10.388 +// INIT
  10.389 +////////////////////////////////////////////////////////////////////////////////////
  10.390 +
  10.391 +// Runtime variables init. Used for runtime only, don't change, not for config!
  10.392 +var o3_text = "";
  10.393 +var o3_cap = "";
  10.394 +var o3_sticky = 0;
  10.395 +var o3_background = "";
  10.396 +var o3_close = "Close";
  10.397 +var o3_hpos = RIGHT;
  10.398 +var o3_offsetx = 2;
  10.399 +var o3_offsety = 2;
  10.400 +var o3_fgcolor = "";
  10.401 +var o3_bgcolor = "";
  10.402 +var o3_textcolor = "";
  10.403 +var o3_capcolor = "";
  10.404 +var o3_closecolor = "";
  10.405 +var o3_width = 100;
  10.406 +var o3_border = 1;
  10.407 +var o3_status = "";
  10.408 +var o3_autostatus = 0;
  10.409 +var o3_height = -1;
  10.410 +var o3_snapx = 0;
  10.411 +var o3_snapy = 0;
  10.412 +var o3_fixx = -1;
  10.413 +var o3_fixy = -1;
  10.414 +var o3_fgbackground = "";
  10.415 +var o3_bgbackground = "";
  10.416 +var o3_padxl = 0;
  10.417 +var o3_padxr = 0;
  10.418 +var o3_padyt = 0;
  10.419 +var o3_padyb = 0;
  10.420 +var o3_fullhtml = 0;
  10.421 +var o3_vpos = BELOW;
  10.422 +var o3_aboveheight = 0;
  10.423 +var o3_capicon = "";
  10.424 +var o3_textfont = "Verdana,Arial,Helvetica";
  10.425 +var o3_captionfont = "Verdana,Arial,Helvetica";
  10.426 +var o3_closefont = "Verdana,Arial,Helvetica";
  10.427 +var o3_textsize = "1";
  10.428 +var o3_captionsize = "1";
  10.429 +var o3_closesize = "1";
  10.430 +var o3_frame = self;
  10.431 +var o3_timeout = 0;
  10.432 +var o3_timerid = 0;
  10.433 +var o3_allowmove = 0;
  10.434 +var o3_function = Function();
  10.435 +var o3_delay = 0;
  10.436 +var o3_delayid = 0;
  10.437 +var o3_hauto = 0;
  10.438 +var o3_vauto = 0;
  10.439 +var o3_closeclick = 0;
  10.440 +
  10.441 +var o3_css = CSSOFF;
  10.442 +var o3_fgclass = "";
  10.443 +var o3_bgclass = "";
  10.444 +var o3_textfontclass = "";
  10.445 +var o3_captionfontclass = "";
  10.446 +var o3_closefontclass = "";
  10.447 +var o3_padunit = "px";
  10.448 +var o3_heightunit = "px";
  10.449 +var o3_widthunit = "px";
  10.450 +var o3_textsizeunit = "px";
  10.451 +var o3_textdecoration = "";
  10.452 +var o3_textstyle = "";
  10.453 +var o3_textweight = "";
  10.454 +var o3_captionsizeunit = "px";
  10.455 +var o3_captiondecoration = "";
  10.456 +var o3_captionstyle = "";
  10.457 +var o3_captionweight = "";
  10.458 +var o3_closesizeunit = "px";
  10.459 +var o3_closedecoration = "";
  10.460 +var o3_closestyle = "";
  10.461 +var o3_closeweight = "";
  10.462 +
  10.463 +
  10.464 +
  10.465 +// Display state variables
  10.466 +var o3_x = 0;
  10.467 +var o3_y = 0;
  10.468 +var o3_allow = 0;
  10.469 +var o3_showingsticky = 0;
  10.470 +var o3_removecounter = 0;
  10.471 +
  10.472 +// Our layer
  10.473 +var over = null;
  10.474 +
  10.475 +
  10.476 +// Decide browser version
  10.477 +var ns4 = (document.layers)? true:false;
  10.478 +var ns6 = (document.getElementById)? true:false;
  10.479 +var ie4 = (document.all)? true:false;
  10.480 +var ie5 = false;
  10.481 +
  10.482 +// Microsoft Stupidity Check(tm).
  10.483 +if (ie4) {
  10.484 +	if ((navigator.userAgent.indexOf('MSIE 5') > 0) || (navigator.userAgent.indexOf('MSIE 6') > 0)) {
  10.485 +		ie5 = true;
  10.486 +	}
  10.487 +	if (ns6) {
  10.488 +		ns6 = false;
  10.489 +	}
  10.490 +}
  10.491 +
  10.492 +
  10.493 +// Capture events, alt. diffuses the overlib function.
  10.494 +if ( (ns4) || (ie4) || (ns6)) {
  10.495 +	document.onmousemove = mouseMove
  10.496 +	if (ns4) document.captureEvents(Event.MOUSEMOVE)
  10.497 +} else {
  10.498 +	overlib = no_overlib;
  10.499 +	nd = no_overlib;
  10.500 +	ver3fix = true;
  10.501 +}
  10.502 +
  10.503 +
  10.504 +// Fake function for 3.0 users.
  10.505 +function no_overlib() {
  10.506 +	return ver3fix;
  10.507 +}
  10.508 +
  10.509 +
  10.510 +
  10.511 +////////////////////////////////////////////////////////////////////////////////////
  10.512 +// PUBLIC FUNCTIONS
  10.513 +////////////////////////////////////////////////////////////////////////////////////
  10.514 +
  10.515 +
  10.516 +// overlib(arg0, ..., argN)
  10.517 +// Loads parameters into global runtime variables.
  10.518 +function overlib() {
  10.519 +	
  10.520 +	// Load defaults to runtime.
  10.521 +	o3_text = ol_text;
  10.522 +	o3_cap = ol_cap;
  10.523 +	o3_sticky = ol_sticky;
  10.524 +	o3_background = ol_background;
  10.525 +	o3_close = ol_close;
  10.526 +	o3_hpos = ol_hpos;
  10.527 +	o3_offsetx = ol_offsetx;
  10.528 +	o3_offsety = ol_offsety;
  10.529 +	o3_fgcolor = ol_fgcolor;
  10.530 +	o3_bgcolor = ol_bgcolor;
  10.531 +	o3_textcolor = ol_textcolor;
  10.532 +	o3_capcolor = ol_capcolor;
  10.533 +	o3_closecolor = ol_closecolor;
  10.534 +	o3_width = ol_width;
  10.535 +	o3_border = ol_border;
  10.536 +	o3_status = ol_status;
  10.537 +	o3_autostatus = ol_autostatus;
  10.538 +	o3_height = ol_height;
  10.539 +	o3_snapx = ol_snapx;
  10.540 +	o3_snapy = ol_snapy;
  10.541 +	o3_fixx = ol_fixx;
  10.542 +	o3_fixy = ol_fixy;
  10.543 +	o3_fgbackground = ol_fgbackground;
  10.544 +	o3_bgbackground = ol_bgbackground;
  10.545 +	o3_padxl = ol_padxl;
  10.546 +	o3_padxr = ol_padxr;
  10.547 +	o3_padyt = ol_padyt;
  10.548 +	o3_padyb = ol_padyb;
  10.549 +	o3_fullhtml = ol_fullhtml;
  10.550 +	o3_vpos = ol_vpos;
  10.551 +	o3_aboveheight = ol_aboveheight;
  10.552 +	o3_capicon = ol_capicon;
  10.553 +	o3_textfont = ol_textfont;
  10.554 +	o3_captionfont = ol_captionfont;
  10.555 +	o3_closefont = ol_closefont;
  10.556 +	o3_textsize = ol_textsize;
  10.557 +	o3_captionsize = ol_captionsize;
  10.558 +	o3_closesize = ol_closesize;
  10.559 +	o3_timeout = ol_timeout;
  10.560 +	o3_function = ol_function;
  10.561 +	o3_delay = ol_delay;
  10.562 +	o3_hauto = ol_hauto;
  10.563 +	o3_vauto = ol_vauto;
  10.564 +	o3_closeclick = ol_closeclick;
  10.565 +	
  10.566 +	o3_css = ol_css;
  10.567 +	o3_fgclass = ol_fgclass;
  10.568 +	o3_bgclass = ol_bgclass;
  10.569 +	o3_textfontclass = ol_textfontclass;
  10.570 +	o3_captionfontclass = ol_captionfontclass;
  10.571 +	o3_closefontclass = ol_closefontclass;
  10.572 +	o3_padunit = ol_padunit;
  10.573 +	o3_heightunit = ol_heightunit;
  10.574 +	o3_widthunit = ol_widthunit;
  10.575 +	o3_textsizeunit = ol_textsizeunit;
  10.576 +	o3_textdecoration = ol_textdecoration;
  10.577 +	o3_textstyle = ol_textstyle;
  10.578 +	o3_textweight = ol_textweight;
  10.579 +	o3_captionsizeunit = ol_captionsizeunit;
  10.580 +	o3_captiondecoration = ol_captiondecoration;
  10.581 +	o3_captionstyle = ol_captionstyle;
  10.582 +	o3_captionweight = ol_captionweight;
  10.583 +	o3_closesizeunit = ol_closesizeunit;
  10.584 +	o3_closedecoration = ol_closedecoration;
  10.585 +	o3_closestyle = ol_closestyle;
  10.586 +	o3_closeweight = ol_closeweight;
  10.587 +	
  10.588 +
  10.589 +	// Special for frame support, over must be reset...
  10.590 +	if ( (ns4) || (ie4) || (ns6) ) {
  10.591 +		o3_frame = ol_frame;
  10.592 +		if (ns4) over = o3_frame.document.overDiv
  10.593 +		if (ie4) over = o3_frame.overDiv.style
  10.594 +		if (ns6) over = o3_frame.document.getElementById("overDiv");
  10.595 +	}
  10.596 +	
  10.597 +	
  10.598 +	// What the next argument is expected to be.
  10.599 +	var parsemode = -1;
  10.600 +	
  10.601 +	var ar = arguments;
  10.602 +
  10.603 +	for (i = 0; i < ar.length; i++) {
  10.604 +
  10.605 +		if (parsemode < 0) {
  10.606 +			// Arg is maintext, unless INARRAY
  10.607 +			if (ar[i] == INARRAY) {
  10.608 +				o3_text = ol_texts[ar[++i]];
  10.609 +			} else {
  10.610 +				o3_text = ar[i];
  10.611 +			}
  10.612 +
  10.613 +			parsemode = 0;
  10.614 +		} else {
  10.615 +			// Note: NS4 doesn't like switch cases with vars.
  10.616 +			if (ar[i] == INARRAY) { o3_text = ol_texts[ar[++i]]; continue; }
  10.617 +			if (ar[i] == CAPARRAY) { o3_cap = ol_caps[ar[++i]]; continue; }
  10.618 +			if (ar[i] == STICKY) { o3_sticky = 1; continue; }
  10.619 +			if (ar[i] == BACKGROUND) { o3_background = ar[++i]; continue; }
  10.620 +			if (ar[i] == NOCLOSE) { o3_close = ""; continue; }
  10.621 +			if (ar[i] == CAPTION) { o3_cap = ar[++i]; continue; }
  10.622 +			if (ar[i] == CENTER || ar[i] == LEFT || ar[i] == RIGHT) { o3_hpos = ar[i]; continue; }
  10.623 +			if (ar[i] == OFFSETX) { o3_offsetx = ar[++i]; continue; }
  10.624 +			if (ar[i] == OFFSETY) { o3_offsety = ar[++i]; continue; }
  10.625 +			if (ar[i] == FGCOLOR) { o3_fgcolor = ar[++i]; continue; }
  10.626 +			if (ar[i] == BGCOLOR) { o3_bgcolor = ar[++i]; continue; }
  10.627 +			if (ar[i] == TEXTCOLOR) { o3_textcolor = ar[++i]; continue; }
  10.628 +			if (ar[i] == CAPCOLOR) { o3_capcolor = ar[++i]; continue; }
  10.629 +			if (ar[i] == CLOSECOLOR) { o3_closecolor = ar[++i]; continue; }
  10.630 +			if (ar[i] == WIDTH) { o3_width = ar[++i]; continue; }
  10.631 +			if (ar[i] == BORDER) { o3_border = ar[++i]; continue; }
  10.632 +			if (ar[i] == STATUS) { o3_status = ar[++i]; continue; }
  10.633 +			if (ar[i] == AUTOSTATUS) { o3_autostatus = 1; continue; }
  10.634 +			if (ar[i] == AUTOSTATUSCAP) { o3_autostatus = 2; continue; }
  10.635 +			if (ar[i] == HEIGHT) { o3_height = ar[++i]; o3_aboveheight = ar[i]; continue; } // Same param again.
  10.636 +			if (ar[i] == CLOSETEXT) { o3_close = ar[++i]; continue; }
  10.637 +			if (ar[i] == SNAPX) { o3_snapx = ar[++i]; continue; }
  10.638 +			if (ar[i] == SNAPY) { o3_snapy = ar[++i]; continue; }
  10.639 +			if (ar[i] == FIXX) { o3_fixx = ar[++i]; continue; }
  10.640 +			if (ar[i] == FIXY) { o3_fixy = ar[++i]; continue; }
  10.641 +			if (ar[i] == FGBACKGROUND) { o3_fgbackground = ar[++i]; continue; }
  10.642 +			if (ar[i] == BGBACKGROUND) { o3_bgbackground = ar[++i]; continue; }
  10.643 +			if (ar[i] == PADX) { o3_padxl = ar[++i]; o3_padxr = ar[++i]; continue; }
  10.644 +			if (ar[i] == PADY) { o3_padyt = ar[++i]; o3_padyb = ar[++i]; continue; }
  10.645 +			if (ar[i] == FULLHTML) { o3_fullhtml = 1; continue; }
  10.646 +			if (ar[i] == BELOW || ar[i] == ABOVE) { o3_vpos = ar[i]; continue; }
  10.647 +			if (ar[i] == CAPICON) { o3_capicon = ar[++i]; continue; }
  10.648 +			if (ar[i] == TEXTFONT) { o3_textfont = ar[++i]; continue; }
  10.649 +			if (ar[i] == CAPTIONFONT) { o3_captionfont = ar[++i]; continue; }
  10.650 +			if (ar[i] == CLOSEFONT) { o3_closefont = ar[++i]; continue; }
  10.651 +			if (ar[i] == TEXTSIZE) { o3_textsize = ar[++i]; continue; }
  10.652 +			if (ar[i] == CAPTIONSIZE) { o3_captionsize = ar[++i]; continue; }
  10.653 +			if (ar[i] == CLOSESIZE) { o3_closesize = ar[++i]; continue; }
  10.654 +			if (ar[i] == FRAME) { opt_FRAME(ar[++i]); continue; }
  10.655 +			if (ar[i] == TIMEOUT) { o3_timeout = ar[++i]; continue; }
  10.656 +			if (ar[i] == FUNCTION) { opt_FUNCTION(ar[++i]); continue; }
  10.657 +			if (ar[i] == DELAY) { o3_delay = ar[++i]; continue; }
  10.658 +			if (ar[i] == HAUTO) { o3_hauto = (o3_hauto == 0) ? 1 : 0; continue; }
  10.659 +			if (ar[i] == VAUTO) { o3_vauto = (o3_vauto == 0) ? 1 : 0; continue; }
  10.660 +			if (ar[i] == CLOSECLICK) { o3_closeclick = (o3_closeclick == 0) ? 1 : 0; continue; }
  10.661 +			if (ar[i] == CSSOFF) { o3_css = ar[i]; continue; }
  10.662 +			if (ar[i] == CSSSTYLE) { o3_css = ar[i]; continue; }
  10.663 +			if (ar[i] == CSSCLASS) { o3_css = ar[i]; continue; }
  10.664 +			if (ar[i] == FGCLASS) { o3_fgclass = ar[++i]; continue; }
  10.665 +			if (ar[i] == BGCLASS) { o3_bgclass = ar[++i]; continue; }
  10.666 +			if (ar[i] == TEXTFONTCLASS) { o3_textfontclass = ar[++i]; continue; }
  10.667 +			if (ar[i] == CAPTIONFONTCLASS) { o3_captionfontclass = ar[++i]; continue; }
  10.668 +			if (ar[i] == CLOSEFONTCLASS) { o3_closefontclass = ar[++i]; continue; }
  10.669 +			if (ar[i] == PADUNIT) { o3_padunit = ar[++i]; continue; }
  10.670 +			if (ar[i] == HEIGHTUNIT) { o3_heightunit = ar[++i]; continue; }
  10.671 +			if (ar[i] == WIDTHUNIT) { o3_widthunit = ar[++i]; continue; }
  10.672 +			if (ar[i] == TEXTSIZEUNIT) { o3_textsizeunit = ar[++i]; continue; }
  10.673 +			if (ar[i] == TEXTDECORATION) { o3_textdecoration = ar[++i]; continue; }
  10.674 +			if (ar[i] == TEXTSTYLE) { o3_textstyle = ar[++i]; continue; }
  10.675 +			if (ar[i] == TEXTWEIGHT) { o3_textweight = ar[++i]; continue; }
  10.676 +			if (ar[i] == CAPTIONSIZEUNIT) { o3_captionsizeunit = ar[++i]; continue; }
  10.677 +			if (ar[i] == CAPTIONDECORATION) { o3_captiondecoration = ar[++i]; continue; }
  10.678 +			if (ar[i] == CAPTIONSTYLE) { o3_captionstyle = ar[++i]; continue; }
  10.679 +			if (ar[i] == CAPTIONWEIGHT) { o3_captionweight = ar[++i]; continue; }
  10.680 +			if (ar[i] == CLOSESIZEUNIT) { o3_closesizeunit = ar[++i]; continue; }
  10.681 +			if (ar[i] == CLOSEDECORATION) { o3_closedecoration = ar[++i]; continue; }
  10.682 +			if (ar[i] == CLOSESTYLE) { o3_closestyle = ar[++i]; continue; }
  10.683 +			if (ar[i] == CLOSEWEIGHT) { o3_closeweight = ar[++i]; continue; }
  10.684 +		}
  10.685 +	}
  10.686 +
  10.687 +	if (o3_delay == 0) {
  10.688 +		return overlib350();
  10.689 +	} else {
  10.690 +		o3_delayid = setTimeout("overlib350()", o3_delay);
  10.691 +
  10.692 +		if (o3_sticky) {
  10.693 +			return false;
  10.694 +		} else {
  10.695 +			return true;
  10.696 +		}
  10.697 +	}
  10.698 +}
  10.699 +
  10.700 +
  10.701 +
  10.702 +// Clears popups if appropriate
  10.703 +function nd() {
  10.704 +	if ( o3_removecounter >= 1 ) { o3_showingsticky = 0 };
  10.705 +	if ( (ns4) || (ie4) || (ns6) ) {
  10.706 +		if ( o3_showingsticky == 0 ) {
  10.707 +			o3_allowmove = 0;
  10.708 +			if (over != null) hideObject(over);
  10.709 +		} else {
  10.710 +			o3_removecounter++;
  10.711 +		}
  10.712 +	}
  10.713 +	
  10.714 +	return true;
  10.715 +}
  10.716 +
  10.717 +
  10.718 +
  10.719 +
  10.720 +
  10.721 +
  10.722 +
  10.723 +////////////////////////////////////////////////////////////////////////////////////
  10.724 +// OVERLIB 3.50 FUNCTION
  10.725 +////////////////////////////////////////////////////////////////////////////////////
  10.726 +
  10.727 +
  10.728 +// This function decides what it is we want to display and how we want it done.
  10.729 +function overlib350() {
  10.730 +
  10.731 +	// Make layer content
  10.732 +	var layerhtml;
  10.733 +
  10.734 +	if (o3_background != "" || o3_fullhtml) {
  10.735 +		// Use background instead of box.
  10.736 +		layerhtml = ol_content_background(o3_text, o3_background, o3_fullhtml);
  10.737 +	} else {
  10.738 +		// They want a popup box.
  10.739 +
  10.740 +		// Prepare popup background
  10.741 +		if (o3_fgbackground != "" && o3_css == CSSOFF) {
  10.742 +			o3_fgbackground = "BACKGROUND=\""+o3_fgbackground+"\"";
  10.743 +		}
  10.744 +		if (o3_bgbackground != "" && o3_css == CSSOFF) {
  10.745 +			o3_bgbackground = "BACKGROUND=\""+o3_bgbackground+"\"";
  10.746 +		}
  10.747 +
  10.748 +		// Prepare popup colors
  10.749 +		if (o3_fgcolor != "" && o3_css == CSSOFF) {
  10.750 +			o3_fgcolor = "BGCOLOR=\""+o3_fgcolor+"\"";
  10.751 +		}
  10.752 +		if (o3_bgcolor != "" && o3_css == CSSOFF) {
  10.753 +			o3_bgcolor = "BGCOLOR=\""+o3_bgcolor+"\"";
  10.754 +		}
  10.755 +
  10.756 +		// Prepare popup height
  10.757 +		if (o3_height > 0 && o3_css == CSSOFF) {
  10.758 +			o3_height = "HEIGHT=" + o3_height;
  10.759 +		} else {
  10.760 +			o3_height = "";
  10.761 +		}
  10.762 +
  10.763 +		// Decide which kinda box.
  10.764 +		if (o3_cap == "") {
  10.765 +			// Plain
  10.766 +			layerhtml = ol_content_simple(o3_text);
  10.767 +		} else {
  10.768 +			// With caption
  10.769 +			if (o3_sticky) {
  10.770 +				// Show close text
  10.771 +				layerhtml = ol_content_caption(o3_text, o3_cap, o3_close);
  10.772 +			} else {
  10.773 +				// No close text
  10.774 +				layerhtml = ol_content_caption(o3_text, o3_cap, "");
  10.775 +			}
  10.776 +		}
  10.777 +	}
  10.778 +	
  10.779 +	// We want it to stick!
  10.780 +	if (o3_sticky) {
  10.781 +		o3_showingsticky = 1;
  10.782 +		o3_removecounter = 0;
  10.783 +	}
  10.784 +	
  10.785 +	// Write layer
  10.786 +	layerWrite(layerhtml);
  10.787 +	
  10.788 +	// Prepare status bar
  10.789 +	if (o3_autostatus > 0) {
  10.790 +		o3_status = o3_text;
  10.791 +		if (o3_autostatus > 1) {
  10.792 +			o3_status = o3_cap;
  10.793 +		}
  10.794 +	}
  10.795 +
  10.796 +	// When placing the layer the first time, even stickies may be moved.
  10.797 +	o3_allowmove = 0;
  10.798 +
  10.799 +	// Initiate a timer for timeout
  10.800 +	if (o3_timeout > 0) {          
  10.801 +		if (o3_timerid > 0) clearTimeout(o3_timerid);
  10.802 +		o3_timerid = setTimeout("cClick()", o3_timeout);
  10.803 +	}
  10.804 +
  10.805 +	// Show layer
  10.806 +	disp(o3_status);
  10.807 +
  10.808 +	// Stickies should stay where they are.	
  10.809 +	if (o3_sticky) {
  10.810 +		o3_allowmove = 0;
  10.811 +		return false;
  10.812 +	} else {
  10.813 +		return true;
  10.814 +	}
  10.815 +}
  10.816 +
  10.817 +
  10.818 +
  10.819 +////////////////////////////////////////////////////////////////////////////////////
  10.820 +// LAYER GENERATION FUNCTIONS
  10.821 +////////////////////////////////////////////////////////////////////////////////////
  10.822 +
  10.823 +// Makes simple table without caption
  10.824 +function ol_content_simple(text) {
  10.825 +	if (o3_css == CSSCLASS) txt = "<TABLE WIDTH="+o3_width+" BORDER=0 CELLPADDING="+o3_border+" CELLSPACING=0 class=\""+o3_bgclass+"\"><TR><TD><TABLE WIDTH=100% BORDER=0 CELLPADDING=2 CELLSPACING=0 class=\""+o3_fgclass+"\"><TR><TD VALIGN=TOP><FONT class=\""+o3_textfontclass+"\">"+text+"</FONT></TD></TR></TABLE></TD></TR></TABLE>";
  10.826 +	if (o3_css == CSSSTYLE) txt = "<TABLE WIDTH="+o3_width+" BORDER=0 CELLPADDING="+o3_border+" CELLSPACING=0 style=\"background-color: "+o3_bgcolor+"; height: "+o3_height+o3_heightunit+";\"><TR><TD><TABLE WIDTH=100% BORDER=0 CELLPADDING=2 CELLSPACING=0 style=\"color: "+o3_fgcolor+"; background-color: "+o3_fgcolor+"; height: "+o3_height+o3_heightunit+";\"><TR><TD VALIGN=TOP><FONT style=\"font-family: "+o3_textfont+"; color: "+o3_textcolor+"; font-size: "+o3_textsize+o3_textsizeunit+"; text-decoration: "+o3_textdecoration+"; font-weight: "+o3_textweight+"; font-style:"+o3_textstyle+"\">"+text+"</FONT></TD></TR></TABLE></TD></TR></TABLE>";
  10.827 +	if (o3_css == CSSOFF) txt = "<TABLE WIDTH="+o3_width+" BORDER=0 CELLPADDING="+o3_border+" CELLSPACING=0 "+o3_bgcolor+" "+o3_height+"><TR><TD><TABLE WIDTH=100% BORDER=0 CELLPADDING=2 CELLSPACING=0 "+o3_fgcolor+" "+o3_fgbackground+" "+o3_height+"><TR><TD VALIGN=TOP><FONT FACE=\""+o3_textfont+"\" COLOR=\""+o3_textcolor+"\" SIZE=\""+o3_textsize+"\">"+text+"</FONT></TD></TR></TABLE></TD></TR></TABLE>";
  10.828 +
  10.829 +	set_background("");
  10.830 +	return txt;
  10.831 +}
  10.832 +
  10.833 +
  10.834 +
  10.835 +
  10.836 +// Makes table with caption and optional close link
  10.837 +function ol_content_caption(text, title, close) {
  10.838 +	closing = "";
  10.839 +	closeevent = "onMouseOver";
  10.840 +
  10.841 +	if (o3_closeclick == 1) closeevent = "onClick";
  10.842 +	if (o3_capicon != "") o3_capicon = "<IMG SRC=\""+o3_capicon+"\"> ";
  10.843 +
  10.844 +	if (close != "") {
  10.845 +		if (o3_css == CSSCLASS) closing = "<TD ALIGN=RIGHT><A HREF=\"/\" "+closeevent+"=\"return cClick();\" class=\""+o3_closefontclass+"\">"+close+"</A></TD>";
  10.846 +		if (o3_css == CSSSTYLE) closing = "<TD ALIGN=RIGHT><A HREF=\"/\" "+closeevent+"=\"return cClick();\" style=\"color: "+o3_closecolor+"; font-family: "+o3_closefont+"; font-size: "+o3_closesize+o3_closesizeunit+"; text-decoration: "+o3_closedecoration+"; font-weight: "+o3_closeweight+"; font-style:"+o3_closestyle+";\">"+close+"</A></TD>";
  10.847 +		if (o3_css == CSSOFF) closing = "<TD ALIGN=RIGHT><A HREF=\"/\" "+closeevent+"=\"return cClick();\"><FONT COLOR=\""+o3_closecolor+"\" FACE=\""+o3_closefont+"\" SIZE=\""+o3_closesize+"\">"+close+"</FONT></A></TD>";
  10.848 +	}
  10.849 +
  10.850 +	if (o3_css == CSSCLASS) txt = "<TABLE WIDTH="+o3_width+" BORDER=0 CELLPADDING="+o3_border+" CELLSPACING=0 class=\""+o3_bgclass+"\"><TR><TD><TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0><TR><TD><FONT class=\""+o3_captionfontclass+"\">"+o3_capicon+title+"</FONT></TD>"+closing+"</TR></TABLE><TABLE WIDTH=100% BORDER=0 CELLPADDING=2 CELLSPACING=0 class=\""+o3_fgclass+"\"><TR><TD VALIGN=TOP><FONT class=\""+o3_textfontclass+"\">"+text+"</FONT></TD></TR></TABLE></TD></TR></TABLE>";
  10.851 +	if (o3_css == CSSSTYLE) txt = "<TABLE WIDTH="+o3_width+" BORDER=0 CELLPADDING="+o3_border+" CELLSPACING=0 style=\"background-color: "+o3_bgcolor+"; background-image: url("+o3_bgbackground+"); height: "+o3_height+o3_heightunit+";\"><TR><TD><TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0><TR><TD><FONT style=\"font-family: "+o3_captionfont+"; color: "+o3_capcolor+"; font-size: "+o3_captionsize+o3_captionsizeunit+"; font-weight: "+o3_captionweight+"; font-style: "+o3_captionstyle+";\">"+o3_capicon+title+"</FONT></TD>"+closing+"</TR></TABLE><TABLE WIDTH=100% BORDER=0 CELLPADDING=2 CELLSPACING=0 style=\"color: "+o3_fgcolor+"; background-color: "+o3_fgcolor+"; height: "+o3_height+o3_heightunit+";\"><TR><TD VALIGN=TOP><FONT style=\"font-family: "+o3_textfont+"; color: "+o3_textcolor+"; font-size: "+o3_textsize+o3_textsizeunit+"; text-decoration: "+o3_textdecoration+"; font-weight: "+o3_textweight+"; font-style:"+o3_textstyle+"\">"+text+"</FONT></TD></TR></TABLE></TD></TR></TABLE>";
  10.852 +	if (o3_css == CSSOFF) txt = "<TABLE WIDTH="+o3_width+" BORDER=0 CELLPADDING="+o3_border+" CELLSPACING=0 "+o3_bgcolor+" "+o3_bgbackground+" "+o3_height+"><TR><TD><TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0><TR><TD><B><FONT COLOR=\""+o3_capcolor+"\" FACE=\""+o3_captionfont+"\" SIZE=\""+o3_captionsize+"\">"+o3_capicon+title+"</FONT></B></TD>"+closing+"</TR></TABLE><TABLE WIDTH=100% BORDER=0 CELLPADDING=2 CELLSPACING=0 "+o3_fgcolor+" "+o3_fgbackground+" "+o3_height+"><TR><TD VALIGN=TOP><FONT COLOR=\""+o3_textcolor+"\" FACE=\""+o3_textfont+"\" SIZE=\""+o3_textsize+"\">"+text+"</FONT></TD></TR></TABLE></TD></TR></TABLE>";
  10.853 +
  10.854 +	set_background("");
  10.855 +	return txt;
  10.856 +}
  10.857 +
  10.858 +// Sets the background picture, padding and lots more. :)
  10.859 +function ol_content_background(text, picture, hasfullhtml) {
  10.860 +	if (hasfullhtml) {
  10.861 +		txt = text;
  10.862 +	} else {
  10.863 +		if (o3_css == CSSCLASS) txt = "<TABLE WIDTH="+o3_width+o3_widthunit+" BORDER=0 CELLPADDING=0 CELLSPACING=0 HEIGHT="+o3_height+o3_heightunit+"><TR><TD COLSPAN=3 HEIGHT="+o3_padyt+o3_padunit+"></TD></TR><TR><TD WIDTH="+o3_padxl+o3_padunit+"></TD><TD VALIGN=TOP WIDTH="+(o3_width-o3_padxl-o3_padxr)+o3_padunit+"><FONT class=\""+o3_textfontclass+"\">"+text+"</FONT></TD><TD WIDTH="+o3_padxr+o3_padunit+"></TD></TR><TR><TD COLSPAN=3 HEIGHT="+o3_padyb+o3_padunit+"></TD></TR></TABLE>";
  10.864 +		if (o3_css == CSSSTYLE) txt = "<TABLE WIDTH="+o3_width+o3_widthunit+" BORDER=0 CELLPADDING=0 CELLSPACING=0 HEIGHT="+o3_height+o3_heightunit+"><TR><TD COLSPAN=3 HEIGHT="+o3_padyt+o3_padunit+"></TD></TR><TR><TD WIDTH="+o3_padxl+o3_padunit+"></TD><TD VALIGN=TOP WIDTH="+(o3_width-o3_padxl-o3_padxr)+o3_padunit+"><FONT style=\"font-family: "+o3_textfont+"; color: "+o3_textcolor+"; font-size: "+o3_textsize+o3_textsizeunit+";\">"+text+"</FONT></TD><TD WIDTH="+o3_padxr+o3_padunit+"></TD></TR><TR><TD COLSPAN=3 HEIGHT="+o3_padyb+o3_padunit+"></TD></TR></TABLE>";
  10.865 +		if (o3_css == CSSOFF) txt = "<TABLE WIDTH="+o3_width+" BORDER=0 CELLPADDING=0 CELLSPACING=0 HEIGHT="+o3_height+"><TR><TD COLSPAN=3 HEIGHT="+o3_padyt+"></TD></TR><TR><TD WIDTH="+o3_padxl+"></TD><TD VALIGN=TOP WIDTH="+(o3_width-o3_padxl-o3_padxr)+"><FONT FACE=\""+o3_textfont+"\" COLOR=\""+o3_textcolor+"\" SIZE=\""+o3_textsize+"\">"+text+"</FONT></TD><TD WIDTH="+o3_padxr+"></TD></TR><TR><TD COLSPAN=3 HEIGHT="+o3_padyb+"></TD></TR></TABLE>";
  10.866 +	}
  10.867 +	set_background(picture);
  10.868 +	return txt;
  10.869 +}
  10.870 +
  10.871 +// Loads a picture into the div.
  10.872 +function set_background(pic) {
  10.873 +	if (pic == "") {
  10.874 +		if (ie4) over.backgroundImage = "none";
  10.875 +		if (ns6) over.style.backgroundImage = "none";
  10.876 +	} else {
  10.877 +		if (ns4) {
  10.878 +			over.background.src = pic;
  10.879 +		} else if (ie4) {
  10.880 +			over.backgroundImage = "url("+pic+")";
  10.881 +		} else if (ns6) {
  10.882 +			over.style.backgroundImage = "url("+pic+")";
  10.883 +		}
  10.884 +	}
  10.885 +}
  10.886 +
  10.887 +
  10.888 +
  10.889 +////////////////////////////////////////////////////////////////////////////////////
  10.890 +// HANDLING FUNCTIONS
  10.891 +////////////////////////////////////////////////////////////////////////////////////
  10.892 +
  10.893 +
  10.894 +// Displays the popup
  10.895 +function disp(statustext) {
  10.896 +	if ( (ns4) || (ie4) || (ns6) ) {
  10.897 +		if (o3_allowmove == 0) 	{
  10.898 +			placeLayer();
  10.899 +			showObject(over);
  10.900 +			o3_allowmove = 1;
  10.901 +		}
  10.902 +	}
  10.903 +
  10.904 +	if (statustext != "") {
  10.905 +		self.status = statustext;
  10.906 +	}
  10.907 +}
  10.908 +
  10.909 +// Decides where we want the popup.
  10.910 +function placeLayer() {
  10.911 +	var placeX, placeY;
  10.912 +	
  10.913 +	// HORIZONTAL PLACEMENT
  10.914 +	if (o3_fixx > -1) {
  10.915 +		// Fixed position
  10.916 +		placeX = o3_fixx;
  10.917 +	} else {
  10.918 +		winoffset = (ie4) ? o3_frame.document.body.scrollLeft : o3_frame.pageXOffset;
  10.919 +		if (ie4) iwidth = o3_frame.document.body.clientWidth;
  10.920 +		if (ns4) iwidth = o3_frame.innerWidth; // was screwed in mozilla, fixed now?
  10.921 +		if (ns6) iwidth = o3_frame.outerWidth;
  10.922 +		
  10.923 +		// If HAUTO, decide what to use.
  10.924 +		if (o3_hauto == 1) {
  10.925 +			if ( (o3_x - winoffset) > ((eval(iwidth)) / 2)) {
  10.926 +				o3_hpos = LEFT;
  10.927 +			} else {
  10.928 +				o3_hpos = RIGHT;
  10.929 +			}
  10.930 +		}
  10.931 +		
  10.932 +		// From mouse
  10.933 +		if (o3_hpos == CENTER) { // Center
  10.934 +			placeX = o3_x+o3_offsetx-(o3_width/2);
  10.935 +		}
  10.936 +		if (o3_hpos == RIGHT) { // Right
  10.937 +			placeX = o3_x+o3_offsetx;
  10.938 +			if ( (eval(placeX) + eval(o3_width)) > (winoffset + iwidth) ) {
  10.939 +				placeX = iwidth + winoffset - o3_width;
  10.940 +				if (placeX < 0) placeX = 0;
  10.941 +			}
  10.942 +		}
  10.943 +		if (o3_hpos == LEFT) { // Left
  10.944 +			placeX = o3_x-o3_offsetx-o3_width;
  10.945 +			if (placeX < winoffset) placeX = winoffset;
  10.946 +		}
  10.947 +	
  10.948 +		// Snapping!
  10.949 +		if (o3_snapx > 1) {
  10.950 +			var snapping = placeX % o3_snapx;
  10.951 +			if (o3_hpos == LEFT) {
  10.952 +				placeX = placeX - (o3_snapx + snapping);
  10.953 +			} else {
  10.954 +				// CENTER and RIGHT
  10.955 +				placeX = placeX + (o3_snapx - snapping);
  10.956 +			}
  10.957 +			if (placeX < winoffset) placeX = winoffset;
  10.958 +		}
  10.959 +	}
  10.960 +
  10.961 +	
  10.962 +	
  10.963 +	// VERTICAL PLACEMENT
  10.964 +	if (o3_fixy > -1) {
  10.965 +		// Fixed position
  10.966 +		placeY = o3_fixy;
  10.967 +	} else {
  10.968 +		scrolloffset = (ie4) ? o3_frame.document.body.scrollTop : o3_frame.pageYOffset;
  10.969 +
  10.970 +		// If VAUTO, decide what to use.
  10.971 +		if (o3_vauto == 1) {
  10.972 +			if (ie4) iheight = o3_frame.document.body.clientHeight;
  10.973 +			if (ns4) iheight = o3_frame.innerHeight;
  10.974 +			if (ns6) iheight = o3_frame.outerHeight;
  10.975 +
  10.976 +			iheight = (eval(iheight)) / 2;
  10.977 +			if ( (o3_y - scrolloffset) > iheight) {
  10.978 +				o3_vpos = ABOVE;
  10.979 +			} else {
  10.980 +				o3_vpos = BELOW;
  10.981 +			}
  10.982 +		}
  10.983 +
  10.984 +
  10.985 +		// From mouse
  10.986 +		if (o3_vpos == ABOVE) {
  10.987 +			if (o3_aboveheight == 0) {
  10.988 +				var divref = (ie4) ? o3_frame.document.all['overDiv'] : over;
  10.989 +				o3_aboveheight = (ns4) ? divref.clip.height : divref.offsetHeight;
  10.990 +			}
  10.991 +
  10.992 +			placeY = o3_y - (o3_aboveheight + o3_offsety);
  10.993 +			if (placeY < scrolloffset) placeY = scrolloffset;
  10.994 +		} else {
  10.995 +			// BELOW
  10.996 +			placeY = o3_y + o3_offsety;
  10.997 +		}
  10.998 +
  10.999 +		// Snapping!
 10.1000 +		if (o3_snapy > 1) {
 10.1001 +			var snapping = placeY % o3_snapy;
 10.1002 +			
 10.1003 +			if (o3_aboveheight > 0 && o3_vpos == ABOVE) {
 10.1004 +				placeY = placeY - (o3_snapy + snapping);
 10.1005 +			} else {
 10.1006 +				placeY = placeY + (o3_snapy - snapping);
 10.1007 +			}
 10.1008 +			
 10.1009 +			if (placeY < scrolloffset) placeY = scrolloffset;
 10.1010 +		}
 10.1011 +	}
 10.1012 +
 10.1013 +
 10.1014 +	// Actually move the object.	
 10.1015 +	repositionTo(over, placeX, placeY);
 10.1016 +}
 10.1017 +
 10.1018 +
 10.1019 +// Moves the layer
 10.1020 +function mouseMove(e) {
 10.1021 +	if ( (ns4) || (ns6) ) {o3_x=e.pageX; o3_y=e.pageY;}
 10.1022 +	if (ie4) {o3_x=event.x; o3_y=event.y;}
 10.1023 +	if (ie5) {o3_x=event.x+o3_frame.document.body.scrollLeft; o3_y=event.y+o3_frame.document.body.scrollTop;}
 10.1024 +	
 10.1025 +	if (o3_allowmove == 1) {
 10.1026 +		placeLayer();
 10.1027 +	}
 10.1028 +}
 10.1029 +
 10.1030 +// The Close onMouseOver function for stickies
 10.1031 +function cClick() {
 10.1032 +	hideObject(over);
 10.1033 +	o3_showingsticky = 0;
 10.1034 +	
 10.1035 +	return false;
 10.1036 +}
 10.1037 +
 10.1038 +
 10.1039 +// Makes sure target frame has overLIB
 10.1040 +function compatibleframe(frameid) {        
 10.1041 +	if (ns4) {
 10.1042 +		if (typeof frameid.document.overDiv =='undefined') return false;
 10.1043 +	} else if (ie4) {
 10.1044 +		if (typeof frameid.document.all["overDiv"] =='undefined') return false;
 10.1045 +	} else if (ns6) {
 10.1046 +		if (frameid.document.getElementById('overDiv') == null) return false;
 10.1047 +	}
 10.1048 +
 10.1049 +	return true;
 10.1050 +}
 10.1051 +
 10.1052 +
 10.1053 +
 10.1054 +////////////////////////////////////////////////////////////////////////////////////
 10.1055 +// LAYER FUNCTIONS
 10.1056 +////////////////////////////////////////////////////////////////////////////////////
 10.1057 +
 10.1058 +
 10.1059 +// Writes to a layer
 10.1060 +function layerWrite(txt) {
 10.1061 +	txt += "\n";
 10.1062 +	
 10.1063 +        if (ns4) {
 10.1064 +                var lyr = o3_frame.document.overDiv.document
 10.1065 +
 10.1066 +                lyr.write(txt)
 10.1067 +                lyr.close()
 10.1068 +        } else if (ie4) {
 10.1069 +		o3_frame.document.all["overDiv"].innerHTML = txt
 10.1070 +	} else if (ns6) {
 10.1071 +		range = o3_frame.document.createRange();
 10.1072 +		range.setStartBefore(over);
 10.1073 +		domfrag = range.createContextualFragment(txt);
 10.1074 +		while (over.hasChildNodes()) {
 10.1075 +			over.removeChild(over.lastChild);
 10.1076 +		}
 10.1077 +		over.appendChild(domfrag);
 10.1078 +	}
 10.1079 +}
 10.1080 +
 10.1081 +// Make an object visible
 10.1082 +function showObject(obj) {
 10.1083 +        if (ns4) obj.visibility = "show";
 10.1084 +        else if (ie4) obj.visibility = "visible";
 10.1085 +	else if (ns6) obj.style.visibility = "visible";
 10.1086 +}
 10.1087 +
 10.1088 +// Hides an object
 10.1089 +function hideObject(obj) {
 10.1090 +        if (ns4) obj.visibility = "hide";
 10.1091 +        else if (ie4) obj.visibility = "hidden";
 10.1092 +	else if (ns6) obj.style.visibility = "hidden";
 10.1093 +        
 10.1094 +	if (o3_timerid > 0) clearTimeout(o3_timerid);
 10.1095 +	if (o3_delayid > 0) clearTimeout(o3_delayid);
 10.1096 +	o3_timerid = 0;
 10.1097 +	o3_delayid = 0;
 10.1098 +        self.status = "";
 10.1099 +}
 10.1100 +
 10.1101 +// Move a layer
 10.1102 +function repositionTo(obj,xL,yL) {
 10.1103 +	if ( (ns4) || (ie4) ) {
 10.1104 +	        obj.left = xL;
 10.1105 +	        obj.top = yL;
 10.1106 +	} else if (ns6) {
 10.1107 +		obj.style.left = xL + "px";
 10.1108 +		obj.style.top = yL+ "px";
 10.1109 +	}
 10.1110 +}
 10.1111 +
 10.1112 +
 10.1113 +
 10.1114 +
 10.1115 +
 10.1116 +////////////////////////////////////////////////////////////////////////////////////
 10.1117 +// PARSER FUNCTIONS
 10.1118 +////////////////////////////////////////////////////////////////////////////////////
 10.1119 +
 10.1120 +
 10.1121 +// Defines which frame we should point to.
 10.1122 +function opt_FRAME(frm) {
 10.1123 +        o3_frame = compatibleframe(frm) ? frm : ol_frame;
 10.1124 +
 10.1125 +	if ( (ns4) || (ie4 || (ns6)) ) {
 10.1126 +		if (ns4) over = o3_frame.document.overDiv;
 10.1127 +		if (ie4) over = o3_frame.overDiv.style;
 10.1128 +		if (ns6) over = o3_frame.document.getElementById("overDiv");
 10.1129 +	}
 10.1130 +
 10.1131 +	return 0;
 10.1132 +}
 10.1133 +
 10.1134 +// Calls an external function
 10.1135 +function opt_FUNCTION(callme) {
 10.1136 +	o3_text = callme()
 10.1137 +	return 0;
 10.1138 +}
 10.1139 +
 10.1140 +
 10.1141 +
 10.1142 +
 10.1143 +//end (For internal purposes.)
 10.1144 +////////////////////////////////////////////////////////////////////////////////////
 10.1145 +// OVERLIB 2 COMPATABILITY FUNCTIONS
 10.1146 +// If you aren't upgrading you can remove the below section.
 10.1147 +////////////////////////////////////////////////////////////////////////////////////
 10.1148 +
 10.1149 +// Converts old 0=left, 1=right and 2=center into constants.
 10.1150 +function vpos_convert(d) {
 10.1151 +	if (d == 0) {
 10.1152 +		d = LEFT;
 10.1153 +	} else {
 10.1154 +		if (d == 1) {
 10.1155 +			d = RIGHT;
 10.1156 +		} else {
 10.1157 +			d = CENTER;
 10.1158 +		}
 10.1159 +	}
 10.1160 +	
 10.1161 +	return d;
 10.1162 +}
 10.1163 +
 10.1164 +// Simple popup
 10.1165 +function dts(d,text) {
 10.1166 +	o3_hpos = vpos_convert(d);
 10.1167 +	overlib(text, o3_hpos, CAPTION, "");
 10.1168 +}
 10.1169 +
 10.1170 +// Caption popup
 10.1171 +function dtc(d,text, title) {
 10.1172 +	o3_hpos = vpos_convert(d);
 10.1173 +	overlib(text, CAPTION, title, o3_hpos);
 10.1174 +}
 10.1175 +
 10.1176 +// Sticky
 10.1177 +function stc(d,text, title) {
 10.1178 +	o3_hpos = vpos_convert(d);
 10.1179 +	overlib(text, CAPTION, title, o3_hpos, STICKY);
 10.1180 +}
 10.1181 +
 10.1182 +// Simple popup right
 10.1183 +function drs(text) {
 10.1184 +	dts(1,text);
 10.1185 +}
 10.1186 +
 10.1187 +// Caption popup right
 10.1188 +function drc(text, title) {
 10.1189 +	dtc(1,text,title);
 10.1190 +}
 10.1191 +
 10.1192 +// Sticky caption right
 10.1193 +function src(text,title) {
 10.1194 +	stc(1,text,title);
 10.1195 +}
 10.1196 +
 10.1197 +// Simple popup left
 10.1198 +function dls(text) {
 10.1199 +	dts(0,text);
 10.1200 +}
 10.1201 +
 10.1202 +// Caption popup left
 10.1203 +function dlc(text, title) {
 10.1204 +	dtc(0,text,title);
 10.1205 +}
 10.1206 +
 10.1207 +// Sticky caption left
 10.1208 +function slc(text,title) {
 10.1209 +	stc(0,text,title);
 10.1210 +}
 10.1211 +
 10.1212 +// Simple popup center
 10.1213 +function dcs(text) {
 10.1214 +	dts(2,text);
 10.1215 +}
 10.1216 +
 10.1217 +// Caption popup center
 10.1218 +function dcc(text, title) {
 10.1219 +	dtc(2,text,title);
 10.1220 +}
 10.1221 +
 10.1222 +// Sticky caption center
 10.1223 +function scc(text,title) {
 10.1224 +	stc(2,text,title);
 10.1225 +}
    11.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    11.2 +++ b/java/cewolf-1.0/pom.xml	Sat Feb 28 21:31:02 2009 +0100
    11.3 @@ -0,0 +1,128 @@
    11.4 +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    11.5 +  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    11.6 +  <modelVersion>4.0.0</modelVersion>
    11.7 +  <groupId>cewolf</groupId>
    11.8 +  <artifactId>cewolf</artifactId>
    11.9 +  <packaging>jar</packaging>
   11.10 +  <version>1.0</version>
   11.11 +  <name>Cewolf</name>
   11.12 +  <url>http://cewolf.sourceforge.net</url>
   11.13 +
   11.14 +
   11.15 +  <description>
   11.16 +	Cewolf is a tag library for JfreeChart.
   11.17 +    JFreeChart is a class library, written in Java, for generating charts.
   11.18 +    Utilising the Java2D APIs, it currently supports bar charts, pie charts,
   11.19 +    line charts, XY-plots and time series plots.
   11.20 +  </description>
   11.21 +
   11.22 +    <scm>
   11.23 +    <url>http://cvs.sourceforge.net/viewcvs.py/cewolf/</url>
   11.24 +     <connection>
   11.25 +      scm:cvs:pserver:anonymous@cvs.sourceforge.net:/cvsroot/cewolf/cewolf
   11.26 +    </connection> 
   11.27 +</scm>
   11.28 +
   11.29 +<build>
   11.30 +<plugins>
   11.31 +            <plugin>
   11.32 +                 <artifactId>maven-assembly-plugin</artifactId>
   11.33 +                 <version>2.0-beta-1</version>
   11.34 +
   11.35 +                 <configuration>
   11.36 +                   <descriptor>src/main/assembly/assembly.xml</descriptor>
   11.37 +                   <finalName>${pom.artifactId}-${pom.version}</finalName>
   11.38 +                   <outputDirectory>target</outputDirectory>
   11.39 +                   <workDirectory>target/assembly/work</workDirectory>
   11.40 +                 </configuration>
   11.41 +
   11.42 +            </plugin>
   11.43 +<plugin>
   11.44 +   <artifactId>maven-javadoc-plugin</artifactId>
   11.45 +   <executions>
   11.46 +     <execution>
   11.47 +       <phase>package</phase>
   11.48 +  <goals>
   11.49 +       <goal>javadoc</goal>
   11.50 +  </goals>
   11.51 +     </execution>
   11.52 +   </executions>
   11.53 + </plugin>
   11.54 +</plugins>
   11.55 +</build>
   11.56 +<dependencies>
   11.57 +    <dependency>
   11.58 +      <groupId>batik</groupId>
   11.59 +      <artifactId>batik-dom</artifactId>
   11.60 +      <version>1.6</version>
   11.61 +  <scope>compile</scope>
   11.62 +    </dependency>
   11.63 +    <dependency>
   11.64 +      <groupId>batik</groupId>
   11.65 +      <artifactId>batik-awt-util</artifactId>
   11.66 +      <version>1.6</version>
   11.67 +  <scope>compile</scope>
   11.68 +    </dependency>
   11.69 +    <dependency>
   11.70 +      <groupId>batik</groupId>
   11.71 +      <artifactId>batik-svggen</artifactId>
   11.72 +      <version>1.6</version>
   11.73 +  <scope>compile</scope>
   11.74 +    </dependency>
   11.75 +    <dependency>
   11.76 +      <groupId>batik</groupId>
   11.77 +      <artifactId>batik-xml</artifactId>
   11.78 +      <version>1.6</version>
   11.79 +  <scope>compile</scope>
   11.80 +    </dependency>
   11.81 +    <dependency>
   11.82 +      <groupId>batik</groupId>
   11.83 +      <artifactId>batik-util</artifactId>
   11.84 +      <version>1.6</version>
   11.85 +  <scope>compile</scope>
   11.86 +    </dependency>
   11.87 +    <dependency>
   11.88 +      <groupId>commons-logging</groupId>
   11.89 +      <artifactId>commons-logging</artifactId>
   11.90 +      <version>1.0.4</version>
   11.91 +  <scope>compile</scope>
   11.92 +    </dependency>
   11.93 +<dependency>
   11.94 +      <groupId>log4j</groupId>
   11.95 +      <artifactId>log4j</artifactId>
   11.96 +      <version>1.2.12</version>
   11.97 +  <scope>compile</scope>
   11.98 +    </dependency>
   11.99 +<dependency>
  11.100 +      <groupId>crimson</groupId>
  11.101 +      <artifactId>crimson</artifactId>
  11.102 +      <version>1.1.3</version>
  11.103 +  <scope>compile</scope>
  11.104 +    </dependency>
  11.105 +
  11.106 +  <dependency>
  11.107 +      <groupId>javax.servlet</groupId>
  11.108 +      <artifactId>servlet-api</artifactId>
  11.109 +      <version>2.3</version>
  11.110 +  <scope>provided</scope>
  11.111 +    </dependency>
  11.112 +<dependency>
  11.113 +      <groupId>jfreechart</groupId>
  11.114 +      <artifactId>jfreechart</artifactId>
  11.115 +      <version>1.0.0</version>
  11.116 +  <scope>compile</scope>
  11.117 +    </dependency>
  11.118 +    <dependency>
  11.119 +      <groupId>jfree</groupId>
  11.120 +      <artifactId>jcommon</artifactId>
  11.121 +      <version>1.0.0</version>
  11.122 +  <scope>compile</scope>
  11.123 +    </dependency>
  11.124 +  <dependency>
  11.125 +      <groupId>gnujaxp</groupId>
  11.126 +      <artifactId>gnujaxp</artifactId>
  11.127 +      <version>1.0.0</version>
  11.128 +  <scope>compile</scope>
  11.129 +    </dependency>
  11.130 +</dependencies>
  11.131 +</project>
    12.1 Binary file java/cewolf-1.0/repository/gnujaxp/gnujaxp.jar has changed
    13.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    13.2 +++ b/java/cewolf-1.0/repository/gnujaxp/pom.xml	Sat Feb 28 21:31:02 2009 +0100
    13.3 @@ -0,0 +1,30 @@
    13.4 +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    13.5 +  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    13.6 +  <modelVersion>4.0.0</modelVersion>
    13.7 +
    13.8 +      <groupId>gnujaxp</groupId>
    13.9 +      <artifactId>gnujaxp</artifactId>
   13.10 +      <version>1.0.0</version>
   13.11 +<build> 
   13.12 +<plugins>     
   13.13 +<plugin>
   13.14 +        <artifactId>maven-antrun-plugin</artifactId>
   13.15 +        <executions>
   13.16 +          <execution>
   13.17 +            <phase>generate-sources</phase>
   13.18 +            <configuration>
   13.19 +              <tasks>
   13.20 +		<unzip src="gnujaxp.jar"
   13.21 +       		dest="target/classes">
   13.22 +    		</unzip>       
   13.23 +              </tasks>
   13.24 +            </configuration>
   13.25 +            <goals>
   13.26 +              <goal>run</goal>
   13.27 +            </goals>
   13.28 +          </execution>
   13.29 +        </executions>
   13.30 +      </plugin>
   13.31 +    </plugins>
   13.32 +</build>
   13.33 +</project>
   13.34 \ No newline at end of file
    14.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    14.2 +++ b/java/cewolf-1.0/repository/pom.xml	Sat Feb 28 21:31:02 2009 +0100
    14.3 @@ -0,0 +1,11 @@
    14.4 +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    14.5 +  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    14.6 +  <modelVersion>4.0.0</modelVersion>
    14.7 +  <groupId>cewolf.repository</groupId>
    14.8 +  <artifactId>parent</artifactId>
    14.9 +  <version>1.0</version>
   14.10 +  <packaging>pom</packaging>
   14.11 +  <modules>
   14.12 +   <module>gnujaxp</module>
   14.13 +   </modules> 
   14.14 +</project>
   14.15 \ No newline at end of file
    15.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    15.2 +++ b/java/cewolf-1.0/src/main/assembly/assembly.xml	Sat Feb 28 21:31:02 2009 +0100
    15.3 @@ -0,0 +1,45 @@
    15.4 +    <assembly>
    15.5 +      <id>bin-src</id>
    15.6 +      <formats>
    15.7 +        <format>zip</format>
    15.8 +      </formats>
    15.9 +      <fileSets>
   15.10 +        <fileSet>
   15.11 +          <includes>
   15.12 +            <include>RELEASE*</include>
   15.13 +            <include>LICENSE*</include>
   15.14 +            <include>NOTICE*</include>
   15.15 +            <include>*.txt</include>
   15.16 +            <include>pom.xml</include>
   15.17 +            <include>.*</include>
   15.18 +          </includes>
   15.19 +        </fileSet>
   15.20 +        <fileSet>
   15.21 +          <directory>target</directory>
   15.22 +          <outputDirectory>/lib</outputDirectory>
   15.23 +          <includes>
   15.24 +            <include>*.jar</include>
   15.25 +          </includes>
   15.26 +        </fileSet>
   15.27 +	<fileSet>
   15.28 +	   <directory>src</directory>
   15.29 +	</fileSet>
   15.30 +	<fileSet>
   15.31 +	   <directory>repository</directory>
   15.32 +	</fileSet>
   15.33 +	<fileSet>
   15.34 +	   <directory>target/javadoc</directory>
   15.35 +	</fileSet>
   15.36 +	<fileSet>
   15.37 +	   <directory>src/main/resources</directory>
   15.38 +	   <outputDirectory>/etc</outputDirectory>
   15.39 +	</fileSet>
   15.40 +      </fileSets>
   15.41 +  <dependencySets>
   15.42 +    <dependencySet>
   15.43 +      <outputDirectory>/lib</outputDirectory>
   15.44 +      <unpack>false</unpack>
   15.45 +      <scope>compile</scope>
   15.46 +    </dependencySet>
   15.47 +  </dependencySets>
   15.48 +    </assembly>
   15.49 \ No newline at end of file
    16.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    16.2 +++ b/java/cewolf-1.0/src/main/java/de/laures/cewolf/CewolfException.java	Sat Feb 28 21:31:02 2009 +0100
    16.3 @@ -0,0 +1,52 @@
    16.4 +/* ================================================================
    16.5 + * Cewolf : Chart enabling Web Objects Framework
    16.6 + * ================================================================
    16.7 + *
    16.8 + * Project Info:  http://cewolf.sourceforge.net
    16.9 + * Project Lead:  Guido Laures (guido@laures.de);
   16.10 + *
   16.11 + * (C) Copyright 2002, by Guido Laures
   16.12 + *
   16.13 + * This library is free software; you can redistribute it and/or modify it under the terms
   16.14 + * of the GNU Lesser General Public License as published by the Free Software Foundation;
   16.15 + * either version 2.1 of the License, or (at your option) any later version.
   16.16 + *
   16.17 + * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
   16.18 + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
   16.19 + * See the GNU Lesser General Public License for more details.
   16.20 + *
   16.21 + * You should have received a copy of the GNU Lesser General Public License along with this
   16.22 + * library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
   16.23 + * Boston, MA 02111-1307, USA.
   16.24 + */
   16.25 +
   16.26 +package de.laures.cewolf;
   16.27 +
   16.28 +/**
   16.29 + * Base class of all Cewolf related exceptions
   16.30 + * @author  Guido Laures
   16.31 + */
   16.32 +public class CewolfException extends Exception {
   16.33 +
   16.34 +    /** Creates a new instance of <code>CewolfException</code> without detail message. */
   16.35 +    public CewolfException() {
   16.36 +    }
   16.37 +
   16.38 +    /**
   16.39 +     * Constructs an instance of <code>CewolfException</code> with the specified detail message.
   16.40 +     * @param msg the detail message.
   16.41 +     */
   16.42 +    public CewolfException(String msg) {
   16.43 +        super(msg);
   16.44 +    }
   16.45 +    
   16.46 +    /**
   16.47 +     * Constructs exception with causing exception
   16.48 +     * @param msg message
   16.49 +     * @param cause cause exception
   16.50 +     */
   16.51 +    public CewolfException(String msg, Exception cause) {
   16.52 +        super(msg, cause);
   16.53 +    }
   16.54 +    
   16.55 +}
    17.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    17.2 +++ b/java/cewolf-1.0/src/main/java/de/laures/cewolf/CewolfRenderer.java	Sat Feb 28 21:31:02 2009 +0100
    17.3 @@ -0,0 +1,265 @@
    17.4 +/* ================================================================
    17.5 + * Cewolf : Chart enabling Web Objects Framework
    17.6 + * ================================================================
    17.7 + *
    17.8 + * Project Info:  http://cewolf.sourceforge.net
    17.9 + * Project Lead:  Guido Laures (guido@laures.de);
   17.10 + *
   17.11 + * (C) Copyright 2002, by Guido Laures
   17.12 + *
   17.13 + * This library is free software; you can redistribute it and/or modify it under the terms
   17.14 + * of the GNU Lesser General Public License as published by the Free Software Foundation;
   17.15 + * either version 2.1 of the License, or (at your option) any later version.
   17.16 + *
   17.17 + * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
   17.18 + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
   17.19 + * See the GNU Lesser General Public License for more details.
   17.20 + *
   17.21 + * You should have received a copy of the GNU Lesser General Public License along with this
   17.22 + * library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
   17.23 + * Boston, MA 02111-1307, USA.
   17.24 + */
   17.25 +
   17.26 +package de.laures.cewolf;
   17.27 +
   17.28 +import java.io.IOException;
   17.29 +import java.io.OutputStream;
   17.30 +import java.io.Writer;
   17.31 +import java.util.Enumeration;
   17.32 +
   17.33 +import javax.servlet.ServletConfig;
   17.34 +import javax.servlet.ServletException;
   17.35 +import javax.servlet.http.HttpServlet;
   17.36 +import javax.servlet.http.HttpServletRequest;
   17.37 +import javax.servlet.http.HttpServletResponse;
   17.38 +
   17.39 +import de.laures.cewolf.util.RenderingHelper;
   17.40 +
   17.41 +/**
   17.42 + * The rendering servlet of Cewolf. It is resposible for writing an entire chart
   17.43 + * img into the response stream of the client. Everything needed for this is
   17.44 + * prepared already by the ChartImgTag resp. LegendTag. The ID of a chart image
   17.45 + * is passed to this servlet as a request parameter. After that the image object
   17.46 + * is retrieved from the server side session based image cache. This servlet
   17.47 + * must be configured in web.xml of the web application in order to use Cewolf
   17.48 + * services. The servlet's URL relative to the web apps root is used as the
   17.49 + * renderer attribute of the ChartImgTag resp. LegendTag in the JSP page.
   17.50 + * 
   17.51 + * @see de.laures.cewolf.taglib.tags.ChartImgTag
   17.52 + * @see de.laures.cewolf.taglib.tags.LegendTag
   17.53 + * @author Guido Laures
   17.54 + * @since 0.1
   17.55 + */
   17.56 +public class CewolfRenderer extends HttpServlet implements WebConstants
   17.57 +{
   17.58 +
   17.59 +  public static final String  INIT_CONFIG  = "CewolfRenderer_Init_Config";
   17.60 +  private static final String STATE        = "state";
   17.61 +  private boolean             debugged     = false;
   17.62 +  private int                 requestCount = 0;
   17.63 +  private Byte 					lock = Byte.valueOf("0");
   17.64 +  private Configuration       config       = null;
   17.65 +
   17.66 +  public void init( ServletConfig servletCfg ) throws ServletException
   17.67 +  {
   17.68 +    super.init(servletCfg);
   17.69 +    
   17.70 +    //Store init config params for processing by the Configuration
   17.71 +    servletCfg.getServletContext().setAttribute(INIT_CONFIG, servletCfg);
   17.72 +    config = Configuration.getInstance(servletCfg.getServletContext());
   17.73 +    
   17.74 +    if (config != null)
   17.75 +      this.debugged = config.isDebugged();
   17.76 +    else
   17.77 +      this.debugged = false;
   17.78 +  }
   17.79 +
   17.80 +  /**
   17.81 +   * Processes HTTP <code>GET</code> request. Renders the chart or the lengend
   17.82 +   * into the client's response stream.
   17.83 +   * 
   17.84 +   * @param request
   17.85 +   *          servlet request
   17.86 +   * @param response
   17.87 +   *          servlet response
   17.88 +   * @throws ServletException
   17.89 +   *           when the production of data could not be handled by the
   17.90 +   *           configured DatasetProcuder
   17.91 +   */
   17.92 +  
   17.93 +  public void printParameters(HttpServletRequest request)
   17.94 +  {
   17.95 +    Enumeration enumeration = request.getParameterNames();
   17.96 +    while (enumeration.hasMoreElements())
   17.97 +    {
   17.98 +      String cur = (String)enumeration.nextElement();
   17.99 +      Object obj = request.getParameter(cur);
  17.100 +      
  17.101 +      log("Request Parameter -> " + cur + " Value -> " + obj.toString());
  17.102 +    }
  17.103 +  }
  17.104 +  
  17.105 +  protected void doGet( HttpServletRequest request, HttpServletResponse response ) throws ServletException, IOException
  17.106 +  {
  17.107 +    if ( debugged )
  17.108 +    {
  17.109 +      logRequest(request);
  17.110 +    }
  17.111 +    addHeaders(response);
  17.112 +    if ( request.getParameter(STATE) != null || !request.getParameterNames().hasMoreElements() )
  17.113 +    {
  17.114 +      requestState(response);
  17.115 +      return;
  17.116 +    }
  17.117 +    synchronized (lock) {
  17.118 +    	requestCount++;
  17.119 +	}
  17.120 +    
  17.121 +    int width = 400;
  17.122 +    int height = 400;
  17.123 +    boolean removeAfterRendering = false;
  17.124 +    if ( request.getParameter(REMOVE_AFTER_RENDERING) != null )
  17.125 +    {
  17.126 +    	removeAfterRendering = true;
  17.127 +    }
  17.128 +    if ( request.getParameter(WIDTH_PARAM) != null )
  17.129 +    {
  17.130 +      width = Integer.parseInt(request.getParameter(WIDTH_PARAM));
  17.131 +    }
  17.132 +    if ( request.getParameter(HEIGHT_PARAM) != null )
  17.133 +    {
  17.134 +      height = Integer.parseInt(request.getParameter(HEIGHT_PARAM));
  17.135 +    }
  17.136 +
  17.137 +    // determine the cache key
  17.138 +    String imgKey = request.getParameter(IMG_PARAM);
  17.139 +    if ( imgKey == null )
  17.140 +    {
  17.141 +      logAndRenderException(new ServletException("no '" + IMG_PARAM + "' parameter provided for Cewolf servlet."), response, width, height);
  17.142 +      return;
  17.143 +    }
  17.144 +    Storage storage = config.getStorage();
  17.145 +    ChartImage chartImage = storage.getChartImage(imgKey, request);
  17.146 +    if ( chartImage == null )
  17.147 +    {
  17.148 +      renderImageExpiry(response, width, height);
  17.149 +      return;
  17.150 +    }
  17.151 +    // send the img
  17.152 +    try
  17.153 +    {
  17.154 +      long start = System.currentTimeMillis();
  17.155 +      // response.setContentType(cid.getMimeType());
  17.156 +      final int size = chartImage.getSize();
  17.157 +      response.setContentType(chartImage.getMimeType());
  17.158 +      response.setContentLength(size);
  17.159 +      response.setBufferSize(size);
  17.160 +      response.setStatus(HttpServletResponse.SC_OK);
  17.161 +      response.getOutputStream().write(chartImage.getBytes());
  17.162 +      long last = System.currentTimeMillis() - start;
  17.163 +      if ( debugged )
  17.164 +      {
  17.165 +        log("creation time for chart " + imgKey + ": " + last + "ms.");
  17.166 +      }
  17.167 +    }
  17.168 +    catch (Throwable t)
  17.169 +    {
  17.170 +      logAndRenderException(t, response, width, height);
  17.171 +    }
  17.172 +    finally
  17.173 +    {
  17.174 +    	if (removeAfterRendering)
  17.175 +    	{
  17.176 +    		try {
  17.177 +				storage.removeChartImage(imgKey , request);
  17.178 +			} catch (CewolfException e) {
  17.179 +				log("Removal of image failed", e);
  17.180 +			}
  17.181 +    	}
  17.182 +    }
  17.183 +  }
  17.184 +
  17.185 +  /**
  17.186 +   * Method addHeaders.
  17.187 +   * 
  17.188 +   * @param response
  17.189 +   */
  17.190 +  private void addHeaders( HttpServletResponse response )
  17.191 +  {
  17.192 +    response.setDateHeader("Expires", System.currentTimeMillis());
  17.193 +  }
  17.194 +
  17.195 +  /**
  17.196 +   * Method requestState.
  17.197 +   * 
  17.198 +   * @param request
  17.199 +   * @param response
  17.200 +   */
  17.201 +  private void requestState( HttpServletResponse response ) throws IOException
  17.202 +  {
  17.203 +    Writer writer = response.getWriter();
  17.204 +    writer.write("<HTML><BODY>");
  17.205 +    /*
  17.206 +     * StateDescriptor sd = (StateDescriptor)
  17.207 +     * ChartImageCacheFactory.getChartImageBase( getServletContext());
  17.208 +     * writer.write(HTMLStateTable.getStateTable(sd));
  17.209 +     */
  17.210 +    writer.write("<b>Cewolf servlet up and running.</b><br>");
  17.211 +    writer.write("Requests served so far: " + requestCount);
  17.212 +    writer.write("</HTML></BODY>");
  17.213 +    writer.close();
  17.214 +  }
  17.215 +
  17.216 +  private void logAndRenderException( Throwable ex, HttpServletResponse response, int width, int height ) throws IOException
  17.217 +  {
  17.218 +    log(ex.getMessage(), ex);
  17.219 +    response.setContentType("image/jpg");
  17.220 +    OutputStream out = response.getOutputStream();
  17.221 +    RenderingHelper.renderException(ex, width, height, out);
  17.222 +    out.close();
  17.223 +  }
  17.224 +
  17.225 +  /**
  17.226 +   * Method renderImageExpiry.
  17.227 +   * 
  17.228 +   * @param response
  17.229 +   * @param width
  17.230 +   * @param height
  17.231 +   */
  17.232 +  private void renderImageExpiry( HttpServletResponse response, int width, int height ) throws IOException
  17.233 +  {
  17.234 +    response.setContentType("image/jpg");
  17.235 +    OutputStream out = response.getOutputStream();
  17.236 +    RenderingHelper.renderMessage("This chart has expired. Please reload.", width, height, out);
  17.237 +    out.close();
  17.238 +  }
  17.239 +
  17.240 +  private void logRequest( HttpServletRequest request ) throws IOException
  17.241 +  {
  17.242 +    log("Cewolf request:");
  17.243 +    log("Actual Request values:");
  17.244 +    printParameters(request);
  17.245 +    Enumeration headerNames = request.getHeaderNames();
  17.246 +    while ( headerNames.hasMoreElements() )
  17.247 +    {
  17.248 +      String name = (String) headerNames.nextElement();
  17.249 +      Enumeration values = request.getHeaders(name);
  17.250 +      StringBuffer value = new StringBuffer();
  17.251 +      while ( values.hasMoreElements() )
  17.252 +      {
  17.253 +        value.append((String) values.nextElement() + ",");
  17.254 +      }
  17.255 +      // cut last comma
  17.256 +      if ( value.length() > 0 )
  17.257 +        value.setLength(value.length() - 1);
  17.258 +      log(name + ": " + value);
  17.259 +    }
  17.260 +  //  InputStream body = request.getInputStream();
  17.261 + //   byte[] bodyData = new byte[body.available()];
  17.262 + //   body.read(bodyData);
  17.263 + //   body.close();
  17.264 + //   log(new String(bodyData));
  17.265 +
  17.266 +  }
  17.267 +
  17.268 +}
  17.269 \ No newline at end of file
    18.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    18.2 +++ b/java/cewolf-1.0/src/main/java/de/laures/cewolf/ChartHolder.java	Sat Feb 28 21:31:02 2009 +0100
    18.3 @@ -0,0 +1,56 @@
    18.4 +/* ================================================================
    18.5 + * Cewolf : Chart enabling Web Objects Framework
    18.6 + * ================================================================
    18.7 + *
    18.8 + * Project Info:  http://cewolf.sourceforge.net
    18.9 + * Project Lead:  Guido Laures (guido@laures.de);
   18.10 + *
   18.11 + * (C) Copyright 2002, by Guido Laures
   18.12 + *
   18.13 + * This library is free software; you can redistribute it and/or modify it under the terms
   18.14 + * of the GNU Lesser General Public License as published by the Free Software Foundation;
   18.15 + * either version 2.1 of the License, or (at your option) any later version.
   18.16 + *
   18.17 + * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
   18.18 + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
   18.19 + * See the GNU Lesser General Public License for more details.
   18.20 + *
   18.21 + * You should have received a copy of the GNU Lesser General Public License along with this
   18.22 + * library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
   18.23 + * Boston, MA 02111-1307, USA.
   18.24 + */
   18.25 +
   18.26 +package de.laures.cewolf;
   18.27 +
   18.28 +/**
   18.29 + * An object of this type represents a full descritption of a chart.
   18.30 + * Therefore it is able to produce the chart and dataset object
   18.31 + * resulting out of this definition.
   18.32 + * @author  Guido Laures
   18.33 + */
   18.34 +public interface ChartHolder {
   18.35 +
   18.36 +	/**
   18.37 +	 * Returns a chart. The type of this object is dependant on the underlying
   18.38 +	 * chart implementation. As of this version of Cewolf it is of type
   18.39 +	 * org.jfree.chart.JFreeChart.
   18.40 +	 * @return the chart object for this definition
   18.41 +	 * @throws DatasetProduceException if there could be no data produced for
   18.42 +	 * the cahrt
   18.43 +	 * @throws ConfigurationException if there is something wrong in the
   18.44 +	 * Cewolf configuration
   18.45 +	 * @throws PostProcessingException if a post processor failed to 
   18.46 +	 * process the chart
   18.47 +	 */
   18.48 +    public Object getChart() throws DatasetProduceException, PostProcessingException, ChartValidationException;
   18.49 +    
   18.50 +	/**
   18.51 +	 * Returns the dataset produced when using this definition.The type of this object is dependant on the underlying
   18.52 +	 * chart implementation. As of this version of Cewolf it is of type
   18.53 +	 * org.jfree.data.Dataset.
   18.54 +	 * @return Object the dataset for this definition
   18.55 +	 * @throws DatasetProduceException if the dataset could not be produced
   18.56 +	 */
   18.57 +    public Object getDataset() throws DatasetProduceException;
   18.58 +    
   18.59 +}
    19.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    19.2 +++ b/java/cewolf-1.0/src/main/java/de/laures/cewolf/ChartImage.java	Sat Feb 28 21:31:02 2009 +0100
    19.3 @@ -0,0 +1,81 @@
    19.4 +/* ================================================================
    19.5 + * Cewolf : Chart enabling Web Objects Framework
    19.6 + * ================================================================
    19.7 + *
    19.8 + * Project Info:  http://cewolf.sourceforge.net
    19.9 + * Project Lead:  Guido Laures (guido@laures.de);
   19.10 + *
   19.11 + * (C) Copyright 2002, by Guido Laures
   19.12 + *
   19.13 + * This library is free software; you can redistribute it and/or modify it under the terms
   19.14 + * of the GNU Lesser General Public License as published by the Free Software Foundation;
   19.15 + * either version 2.1 of the License, or (at your option) any later version.
   19.16 + *
   19.17 + * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
   19.18 + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
   19.19 + * See the GNU Lesser General Public License for more details.
   19.20 + *
   19.21 + * You should have received a copy of the GNU Lesser General Public License along with this
   19.22 + * library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
   19.23 + * Boston, MA 02111-1307, USA.
   19.24 + */
   19.25 +
   19.26 +package de.laures.cewolf;
   19.27 +
   19.28 +import java.io.IOException;
   19.29 +import java.util.Date;
   19.30 +
   19.31 +
   19.32 +/**
   19.33 + * A special ChartHolder which also holds the image presentation of the chart.
   19.34 + * @author  Guido Laures
   19.35 + */
   19.36 +public interface ChartImage {
   19.37 +	
   19.38 +	public static final int IMG_TYPE_CHART = 0;
   19.39 +	public static final int IMG_TYPE_LEGEND = 1;
   19.40 +    
   19.41 +	/**
   19.42 +	 * Returns the width of the chart image in pixel.
   19.43 +	 * @return the width of the chart image in pixel
   19.44 +	 */
   19.45 +    public int getWidth();
   19.46 +
   19.47 +	/**
   19.48 +	 * Returns the height of the chart image in pixel.
   19.49 +	 * @return the height of the chart image in pixel
   19.50 +	 */
   19.51 +    public int getHeight();
   19.52 +    
   19.53 +	/**
   19.54 +	 * Returns the type of the chart image.
   19.55 +	 * @return the type of the chart image
   19.56 +	 * @see #IMG_TYPE_CHART
   19.57 +	 * @see #IMG_TYPE_LEGEND
   19.58 +	 */
   19.59 +    public int getType();
   19.60 +    
   19.61 +    /**
   19.62 +     * Writes out a cached image to an outputstream. This method only marks the object
   19.63 +     * as accessed and therfore frees it for cache cleanup.
   19.64 +     * @param key the cache key
   19.65 +     * @param out the stream to write to
   19.66 +     * @throws IOException if an I/O error occured during write
   19.67 +     */
   19.68 +    public byte[] getBytes() throws CewolfException;
   19.69 +        
   19.70 +    /**
   19.71 +     * Returns the MIME type of this image.
   19.72 +     * @return the MIME type of the image
   19.73 +     */
   19.74 +    public String getMimeType();
   19.75 +        
   19.76 +	/**
   19.77 +	 * Returns the size of the image in bytes.
   19.78 +	 * @return size of the image
   19.79 +	 * @throws CewolfException if the size could not be determined
   19.80 +	 */
   19.81 +    public int getSize() throws CewolfException;
   19.82 +    
   19.83 +    public Date getTimeoutTime();
   19.84 +}
    20.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    20.2 +++ b/java/cewolf-1.0/src/main/java/de/laures/cewolf/ChartPostProcessor.java	Sat Feb 28 21:31:02 2009 +0100
    20.3 @@ -0,0 +1,50 @@
    20.4 +/* ================================================================
    20.5 + * Cewolf : Chart enabling Web Objects Framework
    20.6 + * ================================================================
    20.7 + *
    20.8 + * Project Info:  http://cewolf.sourceforge.net
    20.9 + * Project Lead:  Guido Laures (guido@laures.de);
   20.10 + *
   20.11 + * (C) Copyright 2002, by Guido Laures
   20.12 + *
   20.13 + * This library is free software; you can redistribute it and/or modify it under the terms
   20.14 + * of the GNU Lesser General Public License as published by the Free Software Foundation;
   20.15 + * either version 2.1 of the License, or (at your option) any later version.
   20.16 + *
   20.17 + * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
   20.18 + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
   20.19 + * See the GNU Lesser General Public License for more details.
   20.20 + *
   20.21 + * You should have received a copy of the GNU Lesser General Public License along with this
   20.22 + * library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
   20.23 + * Boston, MA 02111-1307, USA.
   20.24 + */
   20.25 +
   20.26 +package de.laures.cewolf;
   20.27 +
   20.28 +import java.util.Map;
   20.29 +
   20.30 +/**
   20.31 + * Postprocesses a generated chart instance. Objects of this class can be used to
   20.32 + * customize a generated and afterwards rendered chart instance additionally.
   20.33 + * To provide a postprocessor the &lt;chartpostprocessor&gt; tag is used. 
   20.34 + * There can be an unlimited number of postprocessors registered.
   20.35 + * @see de.laures.cewolf.taglib.tags.ChartPostProcessorTag
   20.36 + * @author  Guido Laures
   20.37 + */
   20.38 +public interface ChartPostProcessor {
   20.39 +
   20.40 +    /**
   20.41 +     * Processes a generated chart. This method is called by the ChartProducer
   20.42 +     * after a chart instance is generated and before it is rendered (if so).
   20.43 +     * The ChartProducer is responsible for post processing a chart dependant
   20.44 +     * on and only on the provided parameters. This means that the same parameters
   20.45 +     * should result in the same post processings.
   20.46 +     * @param chart the chart instnce. Concrete class depends on the rendering
   20.47 +     * implementation. Currently a org.jfree.chart.JFreeChart is passed.
   20.48 +     * @param params paramters passed to the postprocessor. These are defined in the JSP
   20.49 +     * @see de.laures.cewolf.taglib.tags.ChartPostProcessorTag
   20.50 +     */
   20.51 +    void processChart(Object chart, Map params);
   20.52 +
   20.53 +}
    21.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    21.2 +++ b/java/cewolf-1.0/src/main/java/de/laures/cewolf/ChartRenderingException.java	Sat Feb 28 21:31:02 2009 +0100
    21.3 @@ -0,0 +1,52 @@
    21.4 +/* ================================================================
    21.5 + * Cewolf : Chart enabling Web Objects Framework
    21.6 + * ================================================================
    21.7 + *
    21.8 + * Project Info:  http://cewolf.sourceforge.net
    21.9 + * Project Lead:  Guido Laures (guido@laures.de);
   21.10 + *
   21.11 + * (C) Copyright 2002, by Guido Laures
   21.12 + *
   21.13 + * This library is free software; you can redistribute it and/or modify it under the terms
   21.14 + * of the GNU Lesser General Public License as published by the Free Software Foundation;
   21.15 + * either version 2.1 of the License, or (at your option) any later version.
   21.16 + *
   21.17 + * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
   21.18 + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
   21.19 + * See the GNU Lesser General Public License for more details.
   21.20 + *
   21.21 + * You should have received a copy of the GNU Lesser General Public License along with this
   21.22 + * library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
   21.23 + * Boston, MA 02111-1307, USA.
   21.24 + */
   21.25 +
   21.26 +package de.laures.cewolf;
   21.27 +
   21.28 +/**
   21.29 + * Thrown by a renderer if a problem during the rendering process occured.
   21.30 + * @author  Guido Laures
   21.31 + */
   21.32 +public class ChartRenderingException extends CewolfException {
   21.33 +
   21.34 +    /** Creates a new instance of <code>ChartRenderingException</code> without detail message. */
   21.35 +    public ChartRenderingException() {
   21.36 +    }
   21.37 +
   21.38 +
   21.39 +    /**
   21.40 +     * Constructs an instance of <code>ChartRenderingException</code> with the specified detail message.
   21.41 +     * @param msg the detail message.
   21.42 +     */
   21.43 +    public ChartRenderingException(String msg) {
   21.44 +        super(msg);
   21.45 +    }
   21.46 +    
   21.47 +    /**
   21.48 +     * Constructor with cause exception
   21.49 +     * @param msg Message
   21.50 +     * @param cause cause
   21.51 +     */
   21.52 +    public ChartRenderingException(String msg, Exception cause) {
   21.53 +        super(msg, cause);
   21.54 +    }
   21.55 +}
    22.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    22.2 +++ b/java/cewolf-1.0/src/main/java/de/laures/cewolf/ChartValidationException.java	Sat Feb 28 21:31:02 2009 +0100
    22.3 @@ -0,0 +1,35 @@
    22.4 +/* ================================================================
    22.5 + * Cewolf : Chart enabling Web Objects Framework
    22.6 + * ================================================================
    22.7 + *
    22.8 + * Project Info:  http://cewolf.sourceforge.net
    22.9 + * Project Lead:  Guido Laures (guido@laures.de);
   22.10 + *
   22.11 + * (C) Copyright 2002, by Guido Laures
   22.12 + *
   22.13 + * This library is free software; you can redistribute it and/or modify it under the terms
   22.14 + * of the GNU Lesser General Public License as published by the Free Software Foundation;
   22.15 + * either version 2.1 of the License, or (at your option) any later version.
   22.16 + *
   22.17 + * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
   22.18 + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
   22.19 + * See the GNU Lesser General Public License for more details.
   22.20 + *
   22.21 + * You should have received a copy of the GNU Lesser General Public License along with this
   22.22 + * library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
   22.23 + * Boston, MA 02111-1307, USA.
   22.24 + */
   22.25 +
   22.26 +package de.laures.cewolf;
   22.27 +
   22.28 +
   22.29 +/**
   22.30 + * @author glaures
   22.31 + */
   22.32 +public class ChartValidationException extends CewolfException {
   22.33 +	
   22.34 +	public ChartValidationException(String msg){
   22.35 +		super(msg);
   22.36 +	}
   22.37 +
   22.38 +}
    23.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    23.2 +++ b/java/cewolf-1.0/src/main/java/de/laures/cewolf/Configuration.java	Sat Feb 28 21:31:02 2009 +0100
    23.3 @@ -0,0 +1,169 @@
    23.4 +/* ================================================================
    23.5 + * Cewolf : Chart enabling Web Objects Framework
    23.6 + * ================================================================
    23.7 + *
    23.8 + * Project Info:  http://cewolf.sourceforge.net
    23.9 + * Project Lead:  Guido Laures (guido@laures.de);
   23.10 + *
   23.11 + * (C) Copyright 2002, by Guido Laures
   23.12 + *
   23.13 + * This library is free software; you can redistribute it and/or modify it under the terms
   23.14 + * of the GNU Lesser General Public License as published by the Free Software Foundation;
   23.15 + * either version 2.1 of the License, or (at your option) any later version.
   23.16 + *
   23.17 + * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
   23.18 + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
   23.19 + * See the GNU Lesser General Public License for more details.
   23.20 + *
   23.21 + * You should have received a copy of the GNU Lesser General Public License along with this
   23.22 + * library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
   23.23 + * Boston, MA 02111-1307, USA.
   23.24 + */
   23.25 +
   23.26 +package de.laures.cewolf;
   23.27 +
   23.28 +import java.util.Enumeration;
   23.29 +import java.util.HashMap;
   23.30 +import java.util.Map;
   23.31 +
   23.32 +import javax.servlet.ServletConfig;
   23.33 +import javax.servlet.ServletContext;
   23.34 +
   23.35 +/**
   23.36 + * This class represents the configuration of the Cewolf framework.
   23.37 + * It is designed as singleton and resists in application context.
   23.38 + * @author glaures
   23.39 + * @since 0.8
   23.40 + */
   23.41 +public class Configuration {
   23.42 +
   23.43 +	public static final String KEY = Configuration.class.getName();
   23.44 +	private static final String DEFAULT_OVERLIB_URL = "overlib.js";
   23.45 +	private static final String DEFAULT_STORAGE = "de.laures.cewolf.storage.TransientSessionStorage";
   23.46 +
   23.47 +	private String overlibURL = DEFAULT_OVERLIB_URL;
   23.48 +	private boolean debugged = false;
   23.49 +
   23.50 +	private String storageClassName = DEFAULT_STORAGE;
   23.51 +	private Storage storage = null;
   23.52 +	private Map parameters = new HashMap();
   23.53 +
   23.54 +	/** package protected constructor triggered by servlet */
   23.55 +	protected Configuration(ServletContext ctx) {
   23.56 +        ctx.log("configuring cewolf app..");
   23.57 +        ctx.setAttribute(KEY, this);
   23.58 +
   23.59 +        //retrieve the init config params
   23.60 +        ServletConfig config = (ServletConfig) ctx.getAttribute(CewolfRenderer.INIT_CONFIG);
   23.61 +        if (config != null)
   23.62 +        {
   23.63 +            Enumeration initParams = config.getInitParameterNames();
   23.64 +            try {
   23.65 +                while (initParams.hasMoreElements()) {
   23.66 +                    String param = (String) initParams.nextElement();
   23.67 +                    String value = config.getInitParameter(param);
   23.68 +                    if ("debug".equalsIgnoreCase(param)) {
   23.69 +                        debugged = Boolean.valueOf(value).booleanValue();
   23.70 +                    } else if ("overliburl".equalsIgnoreCase(param)) {
   23.71 +                        overlibURL = value;
   23.72 +                    } else if ("storage".equalsIgnoreCase(param)) {
   23.73 +                        storageClassName = value;
   23.74 +                    } else {
   23.75 +                        ctx.log(param + " parameter is ignored.");
   23.76 +                    }
   23.77 +                    parameters.put(param,value);
   23.78 +                }
   23.79 +            } catch (Throwable t) {
   23.80 +                ctx.log("Error in Cewolf config.", t);
   23.81 +            }            
   23.82 +        }
   23.83 +        else {
   23.84 +        	ctx.log("Cewolf Misconfiguration. You should add a <load-on-startup> tag "
   23.85 +        			+ "to your web.xml for the Cewolf rendering servlet.\n"
   23.86 +					+ "A default Configuration will be used if not.");
   23.87 +        }
   23.88 +        
   23.89 +		try {
   23.90 +			initStorage(ctx);
   23.91 +		} catch (CewolfException ex) {
   23.92 +			ctx.log("exception during storage init from class " + storageClassName);
   23.93 +			ctx.log("using " + DEFAULT_STORAGE);
   23.94 +			storageClassName = DEFAULT_STORAGE;
   23.95 +			try {
   23.96 +				initStorage(ctx);
   23.97 +			} catch(CewolfException cwex){
   23.98 +				cwex.printStackTrace();
   23.99 +				throw new RuntimeException(storageClassName + ".init() threw exception.");
  23.100 +			}
  23.101 +		}
  23.102 +		ctx.log("using storage class " + storageClassName);
  23.103 +		ctx.log("using overlibURL " + overlibURL);
  23.104 +		ctx.log("debugging is turned " + (debugged ? "on" : "off"));
  23.105 +		ctx.log("...done.");
  23.106 +	}
  23.107 +	
  23.108 +	private void initStorage(ServletContext ctx) throws CewolfException {
  23.109 +		try {
  23.110 +			storage = (Storage)Class.forName(storageClassName).newInstance();
  23.111 +		} catch(Exception ex){
  23.112 +			ex.printStackTrace();
  23.113 +			throw new CewolfException(ex.getMessage());
  23.114 +		}
  23.115 +		storage.init(ctx);
  23.116 +	}
  23.117 +
  23.118 +	private Configuration() {
  23.119 +	}
  23.120 +
  23.121 +	/**
  23.122 +	 * Factory method. If no Configuration had been initialized before, a new
  23.123 +	 * one is created, stored in ctx and returned to the caller.
  23.124 +	 * @param ctx the servlet context from where to retrieve the Configuration
  23.125 +	 * object.
  23.126 +	 * @return the config object
  23.127 +	 */
  23.128 +	public static Configuration getInstance(ServletContext ctx) {
  23.129 +		Configuration config = null;
  23.130 +        config = (Configuration) ctx.getAttribute(KEY);
  23.131 +        
  23.132 +        if (config == null)
  23.133 +        {
  23.134 +            ctx.log("No Configuration for this context.  Initializing.");
  23.135 +            config = new Configuration(ctx);
  23.136 +            ctx.setAttribute(KEY, config);
  23.137 +        }
  23.138 +
  23.139 +		return config;
  23.140 +	}
  23.141 +        
  23.142 +	/**
  23.143 +	 * Checks if debugging is configured to be turned on. Configured by
  23.144 +	 * init param <code>debug</code> in web.xml.
  23.145 +	 * @return <code>true</code> if a debugging is on, else <code>false</false>
  23.146 +	 */
  23.147 +	public boolean isDebugged() {
  23.148 +		return debugged;
  23.149 +	}
  23.150 +
  23.151 +	/**
  23.152 +	 * Returns the location of the overlib.js relative to webapp's root.
  23.153 +	 * Configured by init param <code>overliburl</code> in web.xml. Defaults to
  23.154 +	 * <code>overlib.js</code>
  23.155 +	 * @return String
  23.156 +	 */
  23.157 +	public String getOverlibURL() {
  23.158 +		return overlibURL;
  23.159 +	}
  23.160 +
  23.161 +	public Storage getStorage() {
  23.162 +		return storage;
  23.163 +	}
  23.164 +	
  23.165 +	/**
  23.166 +	 * Get the initialization parameters from Cewolf servlet.
  23.167 +	 * @return The parameter map (String->String) values
  23.168 +	 */
  23.169 +	public Map getParameters() {
  23.170 +		return parameters;
  23.171 +	}
  23.172 +}
    24.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    24.2 +++ b/java/cewolf-1.0/src/main/java/de/laures/cewolf/ConfigurationException.java	Sat Feb 28 21:31:02 2009 +0100
    24.3 @@ -0,0 +1,44 @@
    24.4 +/* ================================================================
    24.5 + * Cewolf : Chart enabling Web Objects Framework
    24.6 + * ================================================================
    24.7 + *
    24.8 + * Project Info:  http://cewolf.sourceforge.net
    24.9 + * Project Lead:  Guido Laures (guido@laures.de);
   24.10 + *
   24.11 + * (C) Copyright 2002, by Guido Laures
   24.12 + *
   24.13 + * This library is free software; you can redistribute it and/or modify it under the terms
   24.14 + * of the GNU Lesser General Public License as published by the Free Software Foundation;
   24.15 + * either version 2.1 of the License, or (at your option) any later version.
   24.16 + *
   24.17 + * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
   24.18 + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
   24.19 + * See the GNU Lesser General Public License for more details.
   24.20 + *
   24.21 + * You should have received a copy of the GNU Lesser General Public License along with this
   24.22 + * library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
   24.23 + * Boston, MA 02111-1307, USA.
   24.24 + */
   24.25 +
   24.26 +package de.laures.cewolf;
   24.27 +
   24.28 +/**
   24.29 + * Thrown by an object which handles the production of a specific chart instance
   24.30 + * when detecting an incorrect or unconsistent configuration.
   24.31 + * @author  Guido Laures
   24.32 + */
   24.33 +public class ConfigurationException extends CewolfException {
   24.34 +
   24.35 +    /** Creates a new instance of <code>ConfigurationException</code> without detail message. */
   24.36 +    public ConfigurationException() {
   24.37 +    }
   24.38 +
   24.39 +
   24.40 +    /**
   24.41 +     * Constructs an instance of <code>ConfigurationException</code> with the specified detail message.
   24.42 +     * @param msg the detail message.
   24.43 +     */
   24.44 +    public ConfigurationException(String msg) {
   24.45 +        super(msg);
   24.46 +    }
   24.47 +}
    25.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    25.2 +++ b/java/cewolf-1.0/src/main/java/de/laures/cewolf/DatasetProduceException.java	Sat Feb 28 21:31:02 2009 +0100
    25.3 @@ -0,0 +1,44 @@
    25.4 +/* ================================================================
    25.5 + * Cewolf : Chart enabling Web Objects Framework
    25.6 + * ================================================================
    25.7 + *
    25.8 + * Project Info:  http://cewolf.sourceforge.net
    25.9 + * Project Lead:  Guido Laures (guido@laures.de);
   25.10 + *
   25.11 + * (C) Copyright 2002, by Guido Laures
   25.12 + *
   25.13 + * This library is free software; you can redistribute it and/or modify it under the terms
   25.14 + * of the GNU Lesser General Public License as published by the Free Software Foundation;
   25.15 + * either version 2.1 of the License, or (at your option) any later version.
   25.16 + *
   25.17 + * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
   25.18 + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
   25.19 + * See the GNU Lesser General Public License for more details.
   25.20 + *
   25.21 + * You should have received a copy of the GNU Lesser General Public License along with this
   25.22 + * library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
   25.23 + * Boston, MA 02111-1307, USA.
   25.24 + */
   25.25 +
   25.26 +package de.laures.cewolf;
   25.27 +
   25.28 +/**
   25.29 + * Thrown by a DatasetProducer if it has problems in creating a correct dataset.
   25.30 + * @see DatasetProducer
   25.31 + * @author  Guido Laures
   25.32 + */
   25.33 +public class DatasetProduceException extends CewolfException {
   25.34 +
   25.35 +    /** Creates a new instance of <code>DatasetProduceException</code> without detail message. */
   25.36 +    public DatasetProduceException() {
   25.37 +    }
   25.38 +
   25.39 +
   25.40 +    /**
   25.41 +     * Constructs an instance of <code>DatasetProduceException</code> with the specified detail message.
   25.42 +     * @param msg the detail message.
   25.43 +     */
   25.44 +    public DatasetProduceException(String msg) {
   25.45 +        super(msg);
   25.46 +    }
   25.47 +}
    26.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    26.2 +++ b/java/cewolf-1.0/src/main/java/de/laures/cewolf/DatasetProducer.java	Sat Feb 28 21:31:02 2009 +0100
    26.3 @@ -0,0 +1,87 @@
    26.4 +/* ================================================================
    26.5 + * Cewolf : Chart enabling Web Objects Framework
    26.6 + * ================================================================
    26.7 + *
    26.8 + * Project Info:  http://cewolf.sourceforge.net
    26.9 + * Project Lead:  Guido Laures (guido@laures.de);
   26.10 + *
   26.11 + * (C) Copyright 2002, by Guido Laures
   26.12 + *
   26.13 + * This library is free software; you can redistribute it and/or modify it under the terms
   26.14 + * of the GNU Lesser General Public License as published by the Free Software Foundation;
   26.15 + * either version 2.1 of the License, or (at your option) any later version.
   26.16 + *
   26.17 + * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
   26.18 + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
   26.19 + * See the GNU Lesser General Public License for more details.
   26.20 + *
   26.21 + * You should have received a copy of the GNU Lesser General Public License along with this
   26.22 + * library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
   26.23 + * Boston, MA 02111-1307, USA.
   26.24 + */
   26.25 +
   26.26 +package de.laures.cewolf;
   26.27 +
   26.28 +import java.io.Serializable;
   26.29 +import java.util.Date;
   26.30 +import java.util.Map;
   26.31 +
   26.32 +/**
   26.33 + * Produces a {@link org.jfree.data.Dataset} which will be rendered 
   26.34 + * as a chart 	afterwards.
   26.35 + * @see org.jfree.data.Dataset
   26.36 + * @author  Guido Laures
   26.37 + * @since 0.1
   26.38 + */
   26.39 +public interface DatasetProducer extends Serializable {
   26.40 +    
   26.41 +    /**
   26.42 +     * By default the the name of the JSP attribute 
   26.43 +     * holding the producer instance is passed to the 
   26.44 +     * produceDataset method as a prameter.
   26.45 +     */
   26.46 +    public static final String PRODUCER_ATTRIBUTE_NAME = "de.laures.cewolf.DatasetProducer.id";
   26.47 +	
   26.48 +    /**
   26.49 +     * Produces a {@link org.jfree.data.Dataset} object.
   26.50 +     * @param params additional params for the dataset production. All elements
   26.51 +     * of this HashMap are of type <code>java.io.Serializable</code>. This is
   26.52 +     * necessary to ensure the the serialization of the dataset producer into
   26.53 +     * the http session. To provide a producer with additional production
   26.54 +     * parameters the &lt;param&gt; tag is used (see tag library documentation).
   26.55 +     * It is recommended to synchronize implementations of this method to avoid
   26.56 +     * concurrency problems.
   26.57 +     * @return an object of type <code>org.jfree.data.Dataset</code>.
   26.58 +     * @throws DatasetProduceException if an error occured during production
   26.59 +     * @since 0.2
   26.60 +     */
   26.61 +    Object produceDataset(Map params) throws DatasetProduceException;
   26.62 +	
   26.63 +	/**
   26.64 +	 * This method is called by the Cewolf framework to check if a formerly
   26.65 +	 * produced data can be reused. If the data which had already been used
   26.66 +	 * for chart rendering is still valid this method should return <code>true</code>.
   26.67 +	 * If possible the Cewolf framework will try to reuse the rendered chart
   26.68 +	 * image. If this is not possible because of some circumstances (e.g. the chart
   26.69 +	 * had been removed from the image cache) the produceDataset method is called afterwards.
   26.70 +	 * Therefore there is no guarantee that the dataset production is always 
   26.71 +	 * avoided if this method returns <code>true</true>.
   26.72 +	 * @param params the production parameters of the already produced data
   26.73 +	 * @param since the point in time when the already produced data had been produced
   26.74 +	 * @return <code>true</code> if the data which had been produced with the 
   26.75 +	 * passed in parameters has expired since its creation, <code>false</code> 
   26.76 +	 * otherwise
   26.77 +	 * @since 0.9
   26.78 +	 */
   26.79 +	boolean hasExpired(Map params, Date since);
   26.80 +	
   26.81 +	/**
   26.82 +	 * Tis method returns a unique ID for a DatasetProducer from this class.
   26.83 +	 * Producers with the same ID are supposed to produce the same data when
   26.84 +	 * called with the same paramters.
   26.85 +	 * @return the unique ID for instances of this poducer class
   26.86 +	 * @since 0.9
   26.87 +	 */
   26.88 +	String getProducerId();
   26.89 +
   26.90 +}
    27.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    27.2 +++ b/java/cewolf-1.0/src/main/java/de/laures/cewolf/PostProcessingException.java	Sat Feb 28 21:31:02 2009 +0100
    27.3 @@ -0,0 +1,44 @@
    27.4 +/* ================================================================
    27.5 + * Cewolf : Chart enabling Web Objects Framework
    27.6 + * ================================================================
    27.7 + *
    27.8 + * Project Info:  http://cewolf.sourceforge.net
    27.9 + * Project Lead:  Guido Laures (guido@laures.de);
   27.10 + *
   27.11 + * (C) Copyright 2002, by Guido Laures
   27.12 + *
   27.13 + * This library is free software; you can redistribute it and/or modify it under the terms
   27.14 + * of the GNU Lesser General Public License as published by the Free Software Foundation;
   27.15 + * either version 2.1 of the License, or (at your option) any later version.
   27.16 + *
   27.17 + * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
   27.18 + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
   27.19 + * See the GNU Lesser General Public License for more details.
   27.20 + *
   27.21 + * You should have received a copy of the GNU Lesser General Public License along with this
   27.22 + * library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
   27.23 + * Boston, MA 02111-1307, USA.
   27.24 + */
   27.25 +
   27.26 +package de.laures.cewolf;
   27.27 +
   27.28 +/**
   27.29 + * Thrown by a DatasetProducer if it has problems in creating a correct dataset.
   27.30 + * @see DatasetProducer
   27.31 + * @author  Guido Laures
   27.32 + */
   27.33 +public class PostProcessingException extends CewolfException {
   27.34 +
   27.35 +    /** Creates a new instance of <code>DatasetProduceException</code> without detail message. */
   27.36 +    public PostProcessingException() {
   27.37 +    }
   27.38 +
   27.39 +
   27.40 +    /**
   27.41 +     * Constructs an instance of <code>DatasetProduceException</code> with the specified detail message.
   27.42 +     * @param msg the detail message.
   27.43 +     */
   27.44 +    public PostProcessingException(String msg) {
   27.45 +        super(msg);
   27.46 +    }
   27.47 +}
    28.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    28.2 +++ b/java/cewolf-1.0/src/main/java/de/laures/cewolf/Storage.java	Sat Feb 28 21:31:02 2009 +0100
    28.3 @@ -0,0 +1,87 @@
    28.4 +/* ================================================================
    28.5 + * Cewolf : Chart enabling Web Objects Framework
    28.6 + * ================================================================
    28.7 + *
    28.8 + * Project Info:  http://cewolf.sourceforge.net
    28.9 + * Project Lead:  Guido Laures (guido@laures.de);
   28.10 + *
   28.11 + * (C) Copyright 2002, by Guido Laures
   28.12 + *
   28.13 + * This library is free software; you can redistribute it and/or modify it under the terms
   28.14 + * of the GNU Lesser General Public License as published by the Free Software Foundation;
   28.15 + * either version 2.1 of the License, or (at your option) any later version.
   28.16 + *
   28.17 + * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
   28.18 + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
   28.19 + * See the GNU Lesser General Public License for more details.
   28.20 + *
   28.21 + * You should have received a copy of the GNU Lesser General Public License along with this
   28.22 + * library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
   28.23 + * Boston, MA 02111-1307, USA.
   28.24 + */
   28.25 +
   28.26 +package de.laures.cewolf;
   28.27 +
   28.28 +import javax.servlet.ServletContext;
   28.29 +import javax.servlet.http.HttpServletRequest;
   28.30 +import javax.servlet.http.HttpSession;
   28.31 +import javax.servlet.jsp.PageContext;
   28.32 +
   28.33 +/**
   28.34 + * Pluggable storage. Implement this class to change the
   28.35 + * storage concept which Cewolf uses to store chart imanges and
   28.36 + * provide the implementation class name as init paramter <em>storage</em>
   28.37 + * for Cewolf servlet.
   28.38 + * @author glaures
   28.39 + */
   28.40 +public interface Storage{
   28.41 +	
   28.42 +	/**
   28.43 +	 * Stores a chart image.
   28.44 +	 * @param cid the image to be stored
   28.45 +	 * @param servletContext servletContext which might be needed
   28.46 +	 * @return String the storage id which is used to find the image in storage
   28.47 +	 */
   28.48 +	public String storeChartImage(ChartImage chartImage, PageContext pageContext) throws CewolfException;
   28.49 +  
   28.50 +	/**
   28.51 +	 * Retrieves a chart image.
   28.52 +	 * @param id the id of the image
   28.53 +	 * @param request the request
   28.54 +	 * @return ChartImage the stored image instance
   28.55 +	 */
   28.56 +	public ChartImage getChartImage(String id, HttpServletRequest request);
   28.57 +    
   28.58 +	/**
   28.59 +	 * Tests if a chart image is already available in thsi store..
   28.60 +	 * @param chartImage the image to test
   28.61 +	 * @param pageContext the pageContext
   28.62 +	 * @return <code>true</code> if a stored instance of this image is availbale
   28.63 +	 */
   28.64 +	// public boolean contains(ChartImage chartImage, PageContext pageContext);
   28.65 +	
   28.66 +	/**
   28.67 +	 * Returns the key for this 
   28.68 +	 * @param chartImage
   28.69 +	 * @return String
   28.70 +	 */
   28.71 +	// public String getKey(ChartImage chartImage);
   28.72 +	
   28.73 +	/**
   28.74 +	 * Method init.
   28.75 +	 * @param servletContext
   28.76 +	 * @throws CewolfException
   28.77 +	 */
   28.78 +	public void init(ServletContext servletContext) throws CewolfException;
   28.79 +
   28.80 +
   28.81 +	/**
   28.82 +	 * Removes the image from the storage
   28.83 +	 * @param imgId Image id
   28.84 +	 * @param request Servlet request
   28.85 +	 * @return Image id
   28.86 +	 * @throws CewolfException
   28.87 +	 */
   28.88 +	public String removeChartImage(String imgId, HttpServletRequest request)
   28.89 +			throws CewolfException;
   28.90 +}
    29.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    29.2 +++ b/java/cewolf-1.0/src/main/java/de/laures/cewolf/WebConstants.java	Sat Feb 28 21:31:02 2009 +0100
    29.3 @@ -0,0 +1,79 @@
    29.4 +/* ================================================================
    29.5 + * Cewolf : Chart enabling Web Objects Framework
    29.6 + * ================================================================
    29.7 + *
    29.8 + * Project Info:  http://cewolf.sourceforge.net
    29.9 + * Project Lead:  Guido Laures (guido@laures.de);
   29.10 + *
   29.11 + * (C) Copyright 2002, by Guido Laures
   29.12 + *
   29.13 + * This library is free software; you can redistribute it and/or modify it under the terms
   29.14 + * of the GNU Lesser General Public License as published by the Free Software Foundation;
   29.15 + * either version 2.1 of the License, or (at your option) any later version.
   29.16 + *
   29.17 + * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
   29.18 + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
   29.19 + * See the GNU Lesser General Public License for more details.
   29.20 + *
   29.21 + * You should have received a copy of the GNU Lesser General Public License along with this
   29.22 + * library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
   29.23 + * Boston, MA 02111-1307, USA.
   29.24 + */
   29.25 +
   29.26 +package de.laures.cewolf;
   29.27 +
   29.28 +/**
   29.29 + * Contains some base constants to avoid explicit dependancy to concrete chart 
   29.30 + * implementation's constant values. The constants of this class also serve as
   29.31 + * the base contract for data exchange between sub packages.
   29.32 + * @author  Guido Laures
   29.33 + */
   29.34 +public interface WebConstants {
   29.35 +
   29.36 +    /**
   29.37 +     * The key for the session ID.
   29.38 +     */
   29.39 +	String SESSIONID_KEY = "jsessionid";
   29.40 +
   29.41 +    /**
   29.42 +     * Escape of an Ampersand in HTML
   29.43 +     */
   29.44 +	String AMPERSAND = "&amp;";
   29.45 +
   29.46 +    /**
   29.47 +     * The image parameter key.
   29.48 +     */
   29.49 +    String IMG_PARAM = "img";
   29.50 +
   29.51 +    /**
   29.52 +     * The key for the width of the image.
   29.53 +     */
   29.54 +    String WIDTH_PARAM = "width";
   29.55 +
   29.56 +    /**
   29.57 +     * The key for the height of the image.
   29.58 +     */
   29.59 +    String HEIGHT_PARAM = "height";
   29.60 +    
   29.61 +      /**
   29.62 +     * Remove image from Storage after rendering
   29.63 +     */
   29.64 +    String REMOVE_AFTER_RENDERING = "removeAfterRendering";
   29.65 +
   29.66 +    /**
   29.67 +     * MIME name of a PNG image.
   29.68 +     */
   29.69 +  	String MIME_PNG = "image/png";
   29.70 +
   29.71 +    /**
   29.72 +     * MIME name of a JPEG image.
   29.73 +     */
   29.74 +  	String MIME_JPEG = "image/jpeg";
   29.75 +  	
   29.76 +  	
   29.77 +    /**
   29.78 +     * MIME name of a SVG image
   29.79 +     */
   29.80 +	String MIME_SVG = "image/svg+xml";
   29.81 +  
   29.82 +}
    30.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    30.2 +++ b/java/cewolf-1.0/src/main/java/de/laures/cewolf/cpp/RotatedAxisLabels.java	Sat Feb 28 21:31:02 2009 +0100
    30.3 @@ -0,0 +1,70 @@
    30.4 +package de.laures.cewolf.cpp;
    30.5 +
    30.6 +import java.util.Map;
    30.7 +
    30.8 +import org.jfree.chart.JFreeChart;
    30.9 +import org.jfree.chart.axis.CategoryAxis;
   30.10 +import org.jfree.chart.axis.CategoryLabelPositions;
   30.11 +import org.jfree.chart.plot.CategoryPlot;
   30.12 +import org.jfree.data.category.CategoryDataset;
   30.13 +
   30.14 +import de.laures.cewolf.ChartPostProcessor;
   30.15 +
   30.16 +/**
   30.17 +* A cewolf post-processor for rotating and/or removing the labels on the X-Axis
   30.18 +* parameters:
   30.19 +* rotate_at: make the labels vertical
   30.20 +* skip_at: print only some of the labels (so they don't overlap)
   30.21 +* remove_at: don't print any labels
   30.22 +*
   30.23 +* Usage:
   30.24 +* <chart:chartpostprocessor id="labelRotation">
   30.25 +* <chart:param name="rotate_at" value='<%= new Integer(10) %>'/>
   30.26 +* <chart:param name="skip_at" value='<%= new Integer(50) %>'/>
   30.27 +* <chart:param name="remove_at" value='<%= new Integer(100) %>'/>
   30.28 +* </chart:chartpostprocessor>
   30.29 +*
   30.30 +*
   30.31 +* @author Rich Unger
   30.32 +*/
   30.33 +
   30.34 +public class RotatedAxisLabels implements ChartPostProcessor {
   30.35 +	
   30.36 +public void processChart(Object chart, Map params) {
   30.37 +		CategoryPlot plot = (CategoryPlot) ((JFreeChart) chart).getPlot();
   30.38 +
   30.39 +		CategoryAxis axis = plot.getDomainAxis();
   30.40 +
   30.41 +		Number rotateThreshold = (Number) params.get("rotate_at");
   30.42 +		Number skipThreshold = (Number) params.get("skip_at");
   30.43 +		Number removeThreshold = (Number) params.get("remove_at");
   30.44 +
   30.45 +		CategoryDataset dataset = plot.getDataset();
   30.46 +		int iCategoryCount = dataset.getRowCount();
   30.47 +
   30.48 +		if (rotateThreshold != null) 
   30.49 +    {
   30.50 +      if (iCategoryCount >= rotateThreshold.intValue()) 
   30.51 +      {
   30.52 +        axis.setCategoryLabelPositions(CategoryLabelPositions.UP_90);
   30.53 +      }
   30.54 +      else 
   30.55 +      {
   30.56 +        axis.setCategoryLabelPositions(CategoryLabelPositions.STANDARD);
   30.57 +      }
   30.58 +
   30.59 +    }
   30.60 +    
   30.61 +		if (skipThreshold != null) 
   30.62 +    {
   30.63 +      //this method does nothing in jfreechart .9.18
   30.64 +			//axis.setSkipCategoryLabelsToFit(iCategoryCount >= skipThreshold.intValue());
   30.65 +		}
   30.66 +		
   30.67 +    if (removeThreshold != null) 
   30.68 +    {
   30.69 +			axis.setTickLabelsVisible(iCategoryCount < removeThreshold.intValue());
   30.70 +		}
   30.71 +	}
   30.72 +	
   30.73 +}
    31.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    31.2 +++ b/java/cewolf-1.0/src/main/java/de/laures/cewolf/cpp/package.html	Sat Feb 28 21:31:02 2009 +0100
    31.3 @@ -0,0 +1,10 @@
    31.4 +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    31.5 +
    31.6 +<HTML>
    31.7 +<HEAD>
    31.8 +<TITLE></TITLE>
    31.9 +</HEAD>
   31.10 +<BODY>
   31.11 +Unsupported third party ChartPostProcessor implmentations.
   31.12 +</BODY>
   31.13 +</HTML>
    32.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    32.2 +++ b/java/cewolf-1.0/src/main/java/de/laures/cewolf/dp/DataSourceXYDatasetProducer.java	Sat Feb 28 21:31:02 2009 +0100
    32.3 @@ -0,0 +1,54 @@
    32.4 +package de.laures.cewolf.dp;
    32.5 +
    32.6 +import java.io.Serializable;
    32.7 +import java.util.Date;
    32.8 +import java.util.Map;
    32.9 +
   32.10 +import de.laures.cewolf.DatasetProduceException;
   32.11 +import de.laures.cewolf.DatasetProducer;
   32.12 +
   32.13 +/**
   32.14 + * @author glaures
   32.15 + *
   32.16 + * To change this generated comment edit the template variable "typecomment":
   32.17 + * Window>Preferences>Java>Templates.
   32.18 + * To enable and disable the creation of type comments go to
   32.19 + * Window>Preferences>Java>Code Generation.
   32.20 + */
   32.21 +public class DataSourceXYDatasetProducer implements DatasetProducer, Serializable {
   32.22 +
   32.23 +	public static final String PARAM_SERIES_LIST = "series";
   32.24 +
   32.25 +	/**
   32.26 +	 * @see de.laures.cewolf.DatasetProducer#produceDataset(Map)
   32.27 +	 */
   32.28 +	public Object produceDataset(Map params) throws DatasetProduceException {
   32.29 +		/*
   32.30 +		DataSourceXYSeries series = new DataSourceXYSeries("select * from xy;");
   32.31 +		XYSeriesCollection dataset = new XYSeriesCollection();
   32.32 +		try {
   32.33 +			DataSource ds = getDataSource((String)params.get(PARAM_DATASOURCE));
   32.34 +			dataset.addSeries(series.produceXYSeries(ds));
   32.35 +		} catch (NamingException nEx) {
   32.36 +			nEx.printStackTrace();
   32.37 +			throw new DatasetProduceException(nEx.getMessage());
   32.38 +		}
   32.39 +		*/
   32.40 +		return null;
   32.41 +	}
   32.42 +
   32.43 +	/**
   32.44 +	 * @see de.laures.cewolf.DatasetProducer#hasExpired(Map, Date)
   32.45 +	 */
   32.46 +	public boolean hasExpired(Map params, Date since) {
   32.47 +		return true;
   32.48 +	}
   32.49 +
   32.50 +	/**
   32.51 +	 * @see de.laures.cewolf.DatasetProducer#getProducerId()
   32.52 +	 */
   32.53 +	public String getProducerId() {
   32.54 +		return toString();
   32.55 +	}
   32.56 +
   32.57 +}
    33.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    33.2 +++ b/java/cewolf-1.0/src/main/java/de/laures/cewolf/dp/DataSourceXYSeries.java	Sat Feb 28 21:31:02 2009 +0100
    33.3 @@ -0,0 +1,67 @@
    33.4 +package de.laures.cewolf.dp;
    33.5 +
    33.6 +import java.io.Serializable;
    33.7 +import java.sql.Connection;
    33.8 +import java.sql.ResultSet;
    33.9 +import java.util.Map;
   33.10 +
   33.11 +import javax.naming.Context;
   33.12 +import javax.naming.InitialContext;
   33.13 +import javax.naming.NamingException;
   33.14 +import javax.sql.DataSource;
   33.15 +
   33.16 +import org.jfree.data.xy.XYSeries;
   33.17 +
   33.18 +import de.laures.cewolf.DatasetProduceException;
   33.19 +
   33.20 +/**
   33.21 + * @author glaures
   33.22 + *
   33.23 + * To change this generated comment edit the template variable "typecomment":
   33.24 + * Window>Preferences>Java>Templates.
   33.25 + * To enable and disable the creation of type comments go to
   33.26 + * Window>Preferences>Java>Code Generation.
   33.27 + */
   33.28 +public class DataSourceXYSeries implements Serializable {
   33.29 +
   33.30 +	private String dataSourceName;
   33.31 +	private String query;
   33.32 +	private String xCol = "x";
   33.33 +	private String yCol = "y";
   33.34 +	private String seriesName = "name";
   33.35 +	
   33.36 +	/**
   33.37 +	 * Constructor for DataSourceXYSeries.
   33.38 +	 */
   33.39 +	public DataSourceXYSeries(String dataSourceName, String query) {
   33.40 +		this.dataSourceName = dataSourceName;
   33.41 +		this.query = query;
   33.42 +	}
   33.43 +
   33.44 +	protected DataSource getDataSource() throws NamingException {
   33.45 +		Context initCtx = new InitialContext();
   33.46 +		Context envCtx = (Context) initCtx.lookup("java:comp/env");
   33.47 +		return (DataSource) envCtx.lookup(dataSourceName);
   33.48 +	}
   33.49 +
   33.50 +	/**
   33.51 +	 * @see de.laures.cewolf.DatasetProducer#produceDataset(Map)
   33.52 +	 */
   33.53 +	public XYSeries produceXYSeries() throws DatasetProduceException {
   33.54 +		XYSeries series = new XYSeries(seriesName);
   33.55 +		try {
   33.56 +			DataSource ds = getDataSource();
   33.57 +			Connection con = ds.getConnection();
   33.58 +			ResultSet rs = con.createStatement().executeQuery(query);
   33.59 +			int xColIndex = rs.findColumn(xCol);
   33.60 +			int yColIndex = rs.findColumn(yCol);
   33.61 +			while(rs.next()){
   33.62 +				series.add((Number)rs.getObject(xColIndex), (Number)rs.getObject(yColIndex));
   33.63 +			}
   33.64 +		} catch (Exception namingEx) {
   33.65 +			namingEx.printStackTrace();
   33.66 +			throw new DatasetProduceException(namingEx.getMessage());
   33.67 +		}
   33.68 +		return series;
   33.69 +	}
   33.70 +}
    34.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    34.2 +++ b/java/cewolf-1.0/src/main/java/de/laures/cewolf/dp/MovingAverageDatasetProducer.java	Sat Feb 28 21:31:02 2009 +0100
    34.3 @@ -0,0 +1,60 @@
    34.4 +package de.laures.cewolf.dp;
    34.5 +
    34.6 +import java.io.Serializable;
    34.7 +import java.util.Date;
    34.8 +import java.util.Map;
    34.9 +
   34.10 +import org.apache.commons.logging.Log;
   34.11 +import org.apache.commons.logging.LogFactory;
   34.12 +import org.jfree.data.general.Dataset;
   34.13 +import org.jfree.data.time.MovingAverage;
   34.14 +import org.jfree.data.xy.XYDataset;
   34.15 +
   34.16 +import de.laures.cewolf.DatasetProduceException;
   34.17 +import de.laures.cewolf.DatasetProducer;
   34.18 +
   34.19 +/**
   34.20 + * @author guido
   34.21 + *
   34.22 + * To change this generated comment edit the template variable "typecomment":
   34.23 + * Window>Preferences>Java>Templates.
   34.24 + * To enable and disable the creation of type comments go to
   34.25 + * Window>Preferences>Java>Code Generation.
   34.26 + */
   34.27 +public class MovingAverageDatasetProducer implements DatasetProducer, Serializable {
   34.28 +	
   34.29 +	private static final Log log = LogFactory.getLog(MovingAverageDatasetProducer.class);
   34.30 +
   34.31 +	/**
   34.32 +	 * @see de.laures.cewolf.DatasetProducer#produceDataset(Map)
   34.33 +	 */
   34.34 +	public Object produceDataset(Map params) throws DatasetProduceException {
   34.35 +		log.debug(params);
   34.36 +		DatasetProducer datasetProducer = (DatasetProducer)params.get("producer");
   34.37 +		log.debug(datasetProducer);
   34.38 +		Dataset dataset = (Dataset)datasetProducer.produceDataset(params);
   34.39 +		String suffix = (String)params.get("suffix");
   34.40 +		int period = ((Integer)params.get("period")).intValue();
   34.41 +		int skip = ((Integer)params.get("skip")).intValue();
   34.42 +		if(dataset instanceof XYDataset){
   34.43 +	        return MovingAverage.createMovingAverage((XYDataset)dataset, suffix, period, skip);
   34.44 +		} else {
   34.45 +			throw new DatasetProduceException("moving average only supported for XYDatasets");
   34.46 +		}
   34.47 +	}
   34.48 +
   34.49 +	/**
   34.50 +	 * @see de.laures.cewolf.DatasetProducer#hasExpired(Map, Date)
   34.51 +	 */
   34.52 +	public boolean hasExpired(Map params, Date since) {
   34.53 +		return true;
   34.54 +	}
   34.55 +
   34.56 +	/**
   34.57 +	 * @see de.laures.cewolf.DatasetProducer#getProducerId()
   34.58 +	 */
   34.59 +	public String getProducerId() {
   34.60 +		return getClass().getName();
   34.61 +	}
   34.62 +
   34.63 +}
    35.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    35.2 +++ b/java/cewolf-1.0/src/main/java/de/laures/cewolf/dp/package.html	Sat Feb 28 21:31:02 2009 +0100
    35.3 @@ -0,0 +1,10 @@
    35.4 +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    35.5 +
    35.6 +<HTML>
    35.7 +<HEAD>
    35.8 +<TITLE></TITLE>
    35.9 +</HEAD>
   35.10 +<BODY>
   35.11 +Custom DatasetProducer.
   35.12 +</BODY>
   35.13 +</HTML>
    36.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    36.2 +++ b/java/cewolf-1.0/src/main/java/de/laures/cewolf/event/ChartImageRenderListener.java	Sat Feb 28 21:31:02 2009 +0100
    36.3 @@ -0,0 +1,33 @@
    36.4 +/**
    36.5 + *  Copyright (c) 2005, Cambridge Technology Partners
    36.6 + *  
    36.7 + *	$Id: ChartImageRenderListener.java,v 1.1 2005/10/09 22:05:16 brianfox Exp $
    36.8 + */
    36.9 +package de.laures.cewolf.event;
   36.10 +
   36.11 +import de.laures.cewolf.util.RenderedImage;
   36.12 +
   36.13 +/**
   36.14 + * Event listener called back after the image is rendered. ChartPostProcessors
   36.15 + * may implement this interface to get notified when the image gets rendered.
   36.16 + * It is useful to retrieve the JFreeChart's ChartRenderingInfo object.
   36.17 + * 
   36.18 + * <pre>
   36.19 + *	public void onImageRendered (RenderedImage renderedImage) {
   36.20 + * 		ChartRenderingInfo info = (ChartRenderingInfo) renderedImage.renderingInfo;
   36.21 + * 		...
   36.22 + *  }
   36.23 + * </pre>
   36.24 + * 
   36.25 + * @author zluspai
   36.26 + */
   36.27 +public interface ChartImageRenderListener {
   36.28 +	
   36.29 +	/**
   36.30 +	 * Callback right after a new image gets rendered.
   36.31 +	 * 
   36.32 +	 * @param renderedImage The fresh image just got rendered
   36.33 +	 */
   36.34 +	public void onImageRendered (RenderedImage renderedImage);
   36.35 +	
   36.36 +}
    37.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    37.2 +++ b/java/cewolf-1.0/src/main/java/de/laures/cewolf/links/CategoryItemLinkGenerator.java	Sat Feb 28 21:31:02 2009 +0100
    37.3 @@ -0,0 +1,43 @@
    37.4 +/* ================================================================
    37.5 + * Cewolf : Chart enabling Web Objects Framework
    37.6 + * ================================================================
    37.7 + *
    37.8 + * Project Info:  http://cewolf.sourceforge.net
    37.9 + * Project Lead:  Guido Laures (guido@laures.de);
   37.10 + *
   37.11 + * (C) Copyright 2002, by Guido Laures
   37.12 + *
   37.13 + * This library is free software; you can redistribute it and/or modify it under the terms
   37.14 + * of the GNU Lesser General Public License as published by the Free Software Foundation;
   37.15 + * either version 2.1 of the License, or (at your option) any later version.
   37.16 + *
   37.17 + * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
   37.18 + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
   37.19 + * See the GNU Lesser General Public License for more details.
   37.20 + *
   37.21 + * You should have received a copy of the GNU Lesser General Public License along with this
   37.22 + * library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
   37.23 + * Boston, MA 02111-1307, USA.
   37.24 + */
   37.25 +package de.laures.cewolf.links;
   37.26 +
   37.27 +/**
   37.28 + * A link generator for category items. This interface is used by the 
   37.29 + * tag library to produce image maps. Implement this if the dataset that
   37.30 + * ths DatasetProducer produces is a CategoryDataset.
   37.31 + * @see org.jfree.data.CategoryDataset
   37.32 + * @author  Guido Laures
   37.33 + * @since 0.8
   37.34 + */
   37.35 +public interface CategoryItemLinkGenerator extends LinkGenerator {
   37.36 +
   37.37 +    /**
   37.38 +     * Generates a link for a specific dataset/series/category triple.
   37.39 +     * @param dataset the dataset
   37.40 +     * @param series the series number
   37.41 +     * @param category the category
   37.42 +     * @see org.jfree.data.CategoryDataset
   37.43 +     */
   37.44 +    String generateLink(Object dataset, int series, Object category);
   37.45 +
   37.46 +}
    38.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    38.2 +++ b/java/cewolf-1.0/src/main/java/de/laures/cewolf/links/LinkGenerator.java	Sat Feb 28 21:31:02 2009 +0100
    38.3 @@ -0,0 +1,33 @@
    38.4 +/* ================================================================
    38.5 + * Cewolf : Chart enabling Web Objects Framework
    38.6 + * ================================================================
    38.7 + *
    38.8 + * Project Info:  http://cewolf.sourceforge.net
    38.9 + * Project Lead:  Guido Laures (guido@laures.de);
   38.10 + *
   38.11 + * (C) Copyright 2002, by Guido Laures
   38.12 + *
   38.13 + * This library is free software; you can redistribute it and/or modify it under the terms
   38.14 + * of the GNU Lesser General Public License as published by the Free Software Foundation;
   38.15 + * either version 2.1 of the License, or (at your option) any later version.
   38.16 + *
   38.17 + * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
   38.18 + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
   38.19 + * See the GNU Lesser General Public License for more details.
   38.20 + *
   38.21 + * You should have received a copy of the GNU Lesser General Public License along with this
   38.22 + * library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
   38.23 + * Boston, MA 02111-1307, USA.
   38.24 + */
   38.25 +
   38.26 +package de.laures.cewolf.links;
   38.27 +
   38.28 +/**
   38.29 + * This is the base interface of all link generating components which can
   38.30 + * be used to produce image maps.
   38.31 + * @author  Guido Laures
   38.32 + * @since 0.8
   38.33 + */
   38.34 +public interface LinkGenerator {
   38.35 +
   38.36 +}
    39.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    39.2 +++ b/java/cewolf-1.0/src/main/java/de/laures/cewolf/links/PieSectionLinkGenerator.java	Sat Feb 28 21:31:02 2009 +0100
    39.3 @@ -0,0 +1,41 @@
    39.4 +/* ================================================================
    39.5 + * Cewolf : Chart enabling Web Objects Framework
    39.6 + * ================================================================
    39.7 + *
    39.8 + * Project Info:  http://cewolf.sourceforge.net
    39.9 + * Project Lead:  Guido Laures (guido@laures.de);
   39.10 + *
   39.11 + * (C) Copyright 2002, by Guido Laures
   39.12 + *
   39.13 + * This library is free software; you can redistribute it and/or modify it under the terms
   39.14 + * of the GNU Lesser General Public License as published by the Free Software Foundation;
   39.15 + * either version 2.1 of the License, or (at your option) any later version.
   39.16 + *
   39.17 + * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
   39.18 + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
   39.19 + * See the GNU Lesser General Public License for more details.
   39.20 + *
   39.21 + * You should have received a copy of the GNU Lesser General Public License along with this
   39.22 + * library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
   39.23 + * Boston, MA 02111-1307, USA.
   39.24 + */
   39.25 +
   39.26 +package de.laures.cewolf.links;
   39.27 +
   39.28 +/**
   39.29 + * A LinkGenerator for PieDatasets.
   39.30 + * @author  Guido Laures
   39.31 + * @since 0.8
   39.32 + */
   39.33 +public interface PieSectionLinkGenerator extends LinkGenerator {
   39.34 +
   39.35 +    /**
   39.36 +     * Generate a link for a PieDataset and a category.
   39.37 +     * @param dataset the dataset. This will normally be of a subtype of PieDataset. It is
   39.38 +     * genralized to avoid dependencies to the concrete chart implementation
   39.39 +     * @param category the category to produce a link for
   39.40 +     * @return the URL of the link belonging to the category
   39.41 +     */
   39.42 +    String generateLink(Object dataset, Object category);
   39.43 +
   39.44 +}
    40.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    40.2 +++ b/java/cewolf-1.0/src/main/java/de/laures/cewolf/links/XYItemLinkGenerator.java	Sat Feb 28 21:31:02 2009 +0100
    40.3 @@ -0,0 +1,42 @@
    40.4 +/* ================================================================
    40.5 + * Cewolf : Chart enabling Web Objects Framework
    40.6 + * ================================================================
    40.7 + *
    40.8 + * Project Info:  http://cewolf.sourceforge.net
    40.9 + * Project Lead:  Guido Laures (guido@laures.de);
   40.10 + *
   40.11 + * (C) Copyright 2002, by Guido Laures
   40.12 + *
   40.13 + * This library is free software; you can redistribute it and/or modify it under the terms
   40.14 + * of the GNU Lesser General Public License as published by the Free Software Foundation;
   40.15 + * either version 2.1 of the License, or (at your option) any later version.
   40.16 + *
   40.17 + * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
   40.18 + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
   40.19 + * See the GNU Lesser General Public License for more details.
   40.20 + *
   40.21 + * You should have received a copy of the GNU Lesser General Public License along with this
   40.22 + * library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
   40.23 + * Boston, MA 02111-1307, USA.
   40.24 + */
   40.25 +
   40.26 +package de.laures.cewolf.links;
   40.27 +
   40.28 +/**
   40.29 + * A LinkGenerator for XYDatasets.
   40.30 + * @author  Guido Laures
   40.31 + * @since 0.8
   40.32 + */
   40.33 +public interface XYItemLinkGenerator extends LinkGenerator {
   40.34 +
   40.35 +    /**
   40.36 +     * Generate a link for a XYDataset, series and item.
   40.37 +     * @param dataset the dataset. This will normally be of a subtype of XYDataset. It is
   40.38 +     * genralized to avoid dependencies to the concrete chart implementation
   40.39 +     * @param series the series to produce a link for
   40.40 +     * @param item the item to produce the link for
   40.41 +     * @return the URL of the link belonging to the series/item
   40.42 +     */
   40.43 +    String generateLink(Object data, int series, int item);
   40.44 +
   40.45 +}
    41.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    41.2 +++ b/java/cewolf-1.0/src/main/java/de/laures/cewolf/package.html	Sat Feb 28 21:31:02 2009 +0100
    41.3 @@ -0,0 +1,10 @@
    41.4 +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    41.5 +
    41.6 +<HTML>
    41.7 +<HEAD>
    41.8 +<TITLE></TITLE>
    41.9 +</HEAD>
   41.10 +<BODY>
   41.11 +Servlet based framework to render charts into a client's response stream.
   41.12 +</BODY>
   41.13 +</HTML>
    42.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    42.2 +++ b/java/cewolf-1.0/src/main/java/de/laures/cewolf/storage/AbstractSessionStorage.java	Sat Feb 28 21:31:02 2009 +0100
    42.3 @@ -0,0 +1,130 @@
    42.4 +/* ================================================================
    42.5 + * Cewolf : Chart enabling Web Objects Framework
    42.6 + * ================================================================
    42.7 + *
    42.8 + * Project Info:  http://cewolf.sourceforge.net
    42.9 + * Project Lead:  Guido Laures (guido@laures.de);
   42.10 + *
   42.11 + * (C) Copyright 2002, by Guido Laures
   42.12 + *
   42.13 + * This library is free software; you can redistribute it and/or modify it under the terms
   42.14 + * of the GNU Lesser General Public License as published by the Free Software Foundation;
   42.15 + * either version 2.1 of the License, or (at your option) any later version.
   42.16 + *
   42.17 + * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
   42.18 + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
   42.19 + * See the GNU Lesser General Public License for more details.
   42.20 + *
   42.21 + * You should have received a copy of the GNU Lesser General Public License along with this
   42.22 + * library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
   42.23 + * Boston, MA 02111-1307, USA.
   42.24 + */
   42.25 +
   42.26 +package de.laures.cewolf.storage;
   42.27 +
   42.28 +import java.io.Serializable;
   42.29 +
   42.30 +import javax.servlet.ServletContext;
   42.31 +import javax.servlet.http.HttpServletRequest;
   42.32 +import javax.servlet.http.HttpSession;
   42.33 +import javax.servlet.jsp.PageContext;
   42.34 +
   42.35 +import org.apache.commons.logging.Log;
   42.36 +import org.apache.commons.logging.LogFactory;
   42.37 +
   42.38 +import de.laures.cewolf.CewolfException;
   42.39 +import de.laures.cewolf.ChartImage;
   42.40 +import de.laures.cewolf.Storage;
   42.41 +import de.laures.cewolf.taglib.util.KeyGenerator;
   42.42 +
   42.43 +/**
   42.44 + * @author glaures
   42.45 + */
   42.46 +public abstract class AbstractSessionStorage implements Storage
   42.47 +{
   42.48 +
   42.49 +  private static final Log log = LogFactory.getLog(AbstractSessionStorage.class);
   42.50 +
   42.51 +  /**
   42.52 +   * @see de.laures.cewolf.Storage#storeChartImage(ChartImage, ServletContext)
   42.53 +   */
   42.54 +  public String storeChartImage( ChartImage cid, PageContext pageContext ) throws CewolfException
   42.55 +  {
   42.56 +    if ( contains(cid, pageContext) )
   42.57 +    {
   42.58 +      return getKey(cid);
   42.59 +    }
   42.60 +    log.debug("storing chart " + cid);
   42.61 +    final HttpSession session = pageContext.getSession();
   42.62 +    //String key = getKey(cid);
   42.63 +    return storeChartImage(cid, session);
   42.64 +  }
   42.65 +
   42.66 +
   42.67 +  /**
   42.68 +   * @see de.laures.cewolf.Storage#getChartImage(String)
   42.69 +   */
   42.70 +  public ChartImage getChartImage( String id, HttpServletRequest request )
   42.71 +  {
   42.72 +    HttpSession session = request.getSession();
   42.73 +    return (ChartImage) session.getAttribute(id);
   42.74 +  }
   42.75 +
   42.76 +  public boolean contains( ChartImage cid, PageContext pageContext )
   42.77 +  {
   42.78 +    return pageContext.getSession().getAttribute(getKey(cid)) != null;
   42.79 +  }
   42.80 +
   42.81 +  public final String getKey( ChartImage cid )
   42.82 +  {
   42.83 +    return String.valueOf(KeyGenerator.generateKey((Serializable) cid));
   42.84 +  }
   42.85 +
   42.86 +  protected String storeChartImage( ChartImage cid, HttpSession session ) throws CewolfException
   42.87 +  {
   42.88 +    final String sessionKey = getKey(cid);
   42.89 +    synchronized (session)
   42.90 +    {
   42.91 +      session.setAttribute(sessionKey, getCacheObject(cid));
   42.92 +    }
   42.93 +    return sessionKey;
   42.94 +  }
   42.95 +  
   42.96 +	/**
   42.97 +	 */
   42.98 +	public String removeChartImage(String imgKey, HttpServletRequest request)
   42.99 +			throws CewolfException {
  42.100 +		final HttpSession session = request.getSession();
  42.101 +		if (session == null)
  42.102 +		{
  42.103 +			return imgKey;
  42.104 +		}
  42.105 +		return removeChartImage(imgKey, session);		
  42.106 +	}
  42.107 +
  42.108 +	/**
  42.109 +	 * @param cid
  42.110 +	 * @param session
  42.111 +	 * @return
  42.112 +	 * @throws CewolfException
  42.113 +	 */
  42.114 +	protected String removeChartImage(String cid, HttpSession session)
  42.115 +			throws CewolfException {
  42.116 +		synchronized (session) {
  42.117 +			session.removeAttribute(cid);
  42.118 +		}
  42.119 +		return cid;
  42.120 +	}
  42.121 +
  42.122 +  protected abstract Object getCacheObject( ChartImage cid ) throws CewolfException;
  42.123 +
  42.124 +  /**
  42.125 +   * @see de.laures.cewolf.Storage#init(ServletContext)
  42.126 +   */
  42.127 +  public void init( ServletContext servletContext ) throws CewolfException
  42.128 +  {
  42.129 +  }
  42.130 +  
  42.131 +
  42.132 +
  42.133 +}
  42.134 \ No newline at end of file
    43.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    43.2 +++ b/java/cewolf-1.0/src/main/java/de/laures/cewolf/storage/ClusterableSessionStorage.java	Sat Feb 28 21:31:02 2009 +0100
    43.3 @@ -0,0 +1,43 @@
    43.4 +/* ================================================================
    43.5 + * Cewolf : Chart enabling Web Objects Framework
    43.6 + * ================================================================
    43.7 + *
    43.8 + * Project Info:  http://cewolf.sourceforge.net
    43.9 + * Project Lead:  Guido Laures (guido@laures.de);
   43.10 + *
   43.11 + * (C) Copyright 2002, by Guido Laures
   43.12 + *
   43.13 + * This library is free software; you can redistribute it and/or modify it under the terms
   43.14 + * of the GNU Lesser General Public License as published by the Free Software Foundation;
   43.15 + * either version 2.1 of the License, or (at your option) any later version.
   43.16 + *
   43.17 + * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
   43.18 + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
   43.19 + * See the GNU Lesser General Public License for more details.
   43.20 + *
   43.21 + * You should have received a copy of the GNU Lesser General Public License along with this
   43.22 + * library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
   43.23 + * Boston, MA 02111-1307, USA.
   43.24 + */
   43.25 +
   43.26 +package de.laures.cewolf.storage;
   43.27 +
   43.28 +import de.laures.cewolf.CewolfException;
   43.29 +import de.laures.cewolf.ChartImage;
   43.30 +
   43.31 +/**
   43.32 + * @author guido
   43.33 + *
   43.34 + * To change the template for this generated type comment go to
   43.35 + * Window>Preferences>Java>Code Generation>Code and Comments
   43.36 + */
   43.37 +public class ClusterableSessionStorage extends AbstractSessionStorage {
   43.38 +
   43.39 +	/* (non-Javadoc)
   43.40 +	 * @see de.laures.cewolf.storage.AbstractSessionStorage#getCacheObject(de.laures.cewolf.ChartImage)
   43.41 +	 */
   43.42 +	protected Object getCacheObject(ChartImage cid) throws CewolfException {
   43.43 +		return new SerializableChartImage(cid);
   43.44 +	}
   43.45 +
   43.46 +}
    44.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    44.2 +++ b/java/cewolf-1.0/src/main/java/de/laures/cewolf/storage/FileStorage.java	Sat Feb 28 21:31:02 2009 +0100
    44.3 @@ -0,0 +1,175 @@
    44.4 +/* ================================================================
    44.5 + * Cewolf : Chart enabling Web Objects Framework
    44.6 + * ================================================================
    44.7 + *
    44.8 + * Project Info:  http://cewolf.sourceforge.net
    44.9 + * Project Lead:  Guido Laures (guido@laures.de);
   44.10 + *
   44.11 + * (C) Copyright 2002, by Guido Laures
   44.12 + *
   44.13 + * This library is free software; you can redistribute it and/or modify it under the terms
   44.14 + * of the GNU Lesser General Public License as published by the Free Software Foundation;
   44.15 + * either version 2.1 of the License, or (at your option) any later version.
   44.16 + *
   44.17 + * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
   44.18 + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
   44.19 + * See the GNU Lesser General Public License for more details.
   44.20 + *
   44.21 + * You should have received a copy of the GNU Lesser General Public License along with this
   44.22 + * library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
   44.23 + * Boston, MA 02111-1307, USA.
   44.24 + */
   44.25 +
   44.26 +package de.laures.cewolf.storage;
   44.27 +
   44.28 +import java.io.File;
   44.29 +import java.io.FileInputStream;
   44.30 +import java.io.FileOutputStream;
   44.31 +import java.io.IOException;
   44.32 +import java.io.ObjectInputStream;
   44.33 +import java.io.ObjectOutputStream;
   44.34 +import java.io.Serializable;
   44.35 +import java.util.ArrayList;
   44.36 +import java.util.List;
   44.37 +
   44.38 +import javax.servlet.ServletContext;
   44.39 +import javax.servlet.http.HttpServletRequest;
   44.40 +import javax.servlet.jsp.PageContext;
   44.41 +
   44.42 +import de.laures.cewolf.CewolfException;
   44.43 +import de.laures.cewolf.ChartImage;
   44.44 +import de.laures.cewolf.Configuration;
   44.45 +import de.laures.cewolf.Storage;
   44.46 +import de.laures.cewolf.taglib.util.KeyGenerator;
   44.47 +
   44.48 +/**
   44.49 + * Storage for storing images as files in the web application directory as files _chart-XXXXX.
   44.50 + * Note that by default the files won't ever be removed. To remove saved images on VM exit set
   44.51 + * the <code>FileStorage.deleteOnExit</code> configuration parameter to "true". For example:
   44.52 + * 
   44.53 + * <pre>
   44.54 + *		<init-param>
   44.55 + *			<param-name>storage</param-name>
   44.56 + *			<param-value>de.laures.cewolf.storage.FileStorage</param-value>
   44.57 + *		</init-param>
   44.58 + *		<init-param>
   44.59 + *				<param-name>FileStorage.deleteOnExit</param-name>
   44.60 + *				<param-value>true</param-value>
   44.61 + *		</init-param> 
   44.62 + *	</pre> 
   44.63 + * 
   44.64 + * @author guido
   44.65 + */
   44.66 +public class FileStorage implements Storage {
   44.67 +	
   44.68 +	String basePath = null;
   44.69 +	List stored = new ArrayList();
   44.70 +	private boolean deleteOnExit = false;
   44.71 +
   44.72 +	/**
   44.73 +	 * @see de.laures.cewolf.Storage#storeChartImage(ChartImage, PageContext)
   44.74 +	 */
   44.75 +	public String storeChartImage(ChartImage cid, PageContext pageContext) {
   44.76 +		if(contains(cid, pageContext)){
   44.77 +			return getKey(cid);
   44.78 +		}
   44.79 +		String id = getKey(cid);
   44.80 +		ObjectOutputStream oos = null;
   44.81 +		try {
   44.82 +			String fileName = getFileName(id);
   44.83 +			pageContext.getServletContext().log("Storing image to file " + fileName);
   44.84 +			File f = new File(fileName);
   44.85 +			if (deleteOnExit) {
   44.86 +				f.deleteOnExit();			
   44.87 +			}
   44.88 +			oos = new ObjectOutputStream(new FileOutputStream(f));
   44.89 +			oos.writeObject(new SerializableChartImage(cid));
   44.90 +			oos.close();
   44.91 +		} catch(IOException ioex){
   44.92 +			ioex.printStackTrace();
   44.93 +		} catch(CewolfException cwex){
   44.94 +			cwex.printStackTrace();
   44.95 +		} finally {
   44.96 +			if(oos != null){
   44.97 +				try {
   44.98 +					oos.close();
   44.99 +				} catch(IOException ioex){
  44.100 +					ioex.printStackTrace();
  44.101 +				}
  44.102 +			}
  44.103 +		}
  44.104 +		return id;		
  44.105 +	}
  44.106 +
  44.107 +	/**
  44.108 +	 * @see de.laures.cewolf.Storage#getChartImage(String, HttpServletRequest)
  44.109 +	 */
  44.110 +	public ChartImage getChartImage(String id, HttpServletRequest request) {
  44.111 +		ChartImage res = null;
  44.112 +		ObjectInputStream ois = null;
  44.113 +		try {
  44.114 +			ois = new ObjectInputStream(new FileInputStream(getFileName(id)));
  44.115 +			res = (ChartImage)ois.readObject();
  44.116 +			ois.close();
  44.117 +		} catch(Exception ex){
  44.118 +			ex.printStackTrace();
  44.119 +		} finally {
  44.120 +			if(ois != null){
  44.121 +				try {
  44.122 +					ois.close();
  44.123 +				} catch(IOException ioex){
  44.124 +					ioex.printStackTrace();
  44.125 +				}
  44.126 +			}
  44.127 +		}
  44.128 +		return res;
  44.129 +	}
  44.130 +
  44.131 +	/**
  44.132 +	 * @see de.laures.cewolf.Storage#contains(ChartImage, PageContext)
  44.133 +	 */
  44.134 +	public boolean contains(ChartImage chartImage, PageContext pageContext) {
  44.135 +		return new File(getFileName(chartImage)).exists();
  44.136 +	}
  44.137 +
  44.138 +	/**
  44.139 +	 * @see de.laures.cewolf.Storage#getKey(ChartImage)
  44.140 +	 */
  44.141 +	public String getKey(ChartImage chartImage) {
  44.142 +		return String.valueOf(KeyGenerator.generateKey((Serializable)chartImage));
  44.143 +	}
  44.144 +
  44.145 +	/**
  44.146 +	 * @see de.laures.cewolf.Storage#init(ServletContext)
  44.147 +	 */
  44.148 +	public void init(ServletContext servletContext) throws CewolfException {
  44.149 +		basePath = servletContext.getRealPath("/");
  44.150 +		Configuration config = Configuration.getInstance(servletContext);
  44.151 +		deleteOnExit = "true".equalsIgnoreCase("" + config.getParameters().get("FileStorage.deleteOnExit"));
  44.152 +		servletContext.log("FileStorage initialized, deleteOnExit=" + deleteOnExit);
  44.153 +	}
  44.154 +	
  44.155 +	private String getFileName(ChartImage chartImage){
  44.156 +		return getFileName(getKey(chartImage));
  44.157 +	}
  44.158 +
  44.159 +	private String getFileName(String id){
  44.160 +		return basePath + "_chart" + id;
  44.161 +	}
  44.162 +
  44.163 +	/**
  44.164 +	 * @see de.laures.cewolf.Storage#removeChartImage(java.lang.String, javax.servlet.jsp.PageContext)
  44.165 +	 */
  44.166 +	public String removeChartImage(String imgKey, HttpServletRequest pageContext) throws CewolfException {
  44.167 +		File file = new File(getFileName(imgKey));
  44.168 +		if (file.exists())
  44.169 +		{
  44.170 +			if (!file.delete())
  44.171 +			{
  44.172 +				throw new CewolfException("Could not delete file " + file.getAbsolutePath());
  44.173 +			}
  44.174 +		}
  44.175 +		return imgKey;
  44.176 +	}
  44.177 +
  44.178 +}
    45.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    45.2 +++ b/java/cewolf-1.0/src/main/java/de/laures/cewolf/storage/LongTermSessionStorage.java	Sat Feb 28 21:31:02 2009 +0100
    45.3 @@ -0,0 +1,122 @@
    45.4 +/* ================================================================
    45.5 + * Cewolf : Chart enabling Web Objects Framework
    45.6 + * ================================================================
    45.7 + *
    45.8 + * Project Info:  http://cewolf.sourceforge.net
    45.9 + * Project Lead:  Guido Laures (guido@laures.de);
   45.10 + *
   45.11 + * (C) Copyright 2002, by Guido Laures
   45.12 + *
   45.13 + * This library is free software; you can redistribute it and/or modify it under the terms
   45.14 + * of the GNU Lesser General Public License as published by the Free Software Foundation;
   45.15 + * either version 2.1 of the License, or (at your option) any later version.
   45.16 + *
   45.17 + * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
   45.18 + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
   45.19 + * See the GNU Lesser General Public License for more details.
   45.20 + *
   45.21 + * You should have received a copy of the GNU Lesser General Public License along with this
   45.22 + * library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
   45.23 + * Boston, MA 02111-1307, USA.
   45.24 + */
   45.25 +package de.laures.cewolf.storage;
   45.26 +
   45.27 +import java.io.Serializable;
   45.28 +
   45.29 +import javax.servlet.ServletContext;
   45.30 +import javax.servlet.http.HttpServletRequest;
   45.31 +import javax.servlet.http.HttpSession;
   45.32 +import javax.servlet.jsp.PageContext;
   45.33 +
   45.34 +import de.laures.cewolf.CewolfException;
   45.35 +import de.laures.cewolf.ChartImage;
   45.36 +import de.laures.cewolf.Storage;
   45.37 +import de.laures.cewolf.taglib.util.KeyGenerator;
   45.38 +
   45.39 +/**
   45.40 + * Storage stores images in session, but expires them after a certain time. 
   45.41 + * This expiration time defaults to 300 seconds, and can be changed by adding 
   45.42 + * the timeout="xxx" parameter to <cewolf:img> and <cewolf:legend> tags.
   45.43 + * 
   45.44 + * @author brianf
   45.45 + */
   45.46 +public class LongTermSessionStorage implements Storage
   45.47 +{
   45.48 + 
   45.49 +  public final String getKey( ChartImage cid )
   45.50 +  {
   45.51 +    return String.valueOf(KeyGenerator.generateKey((Serializable) cid));
   45.52 +  }
   45.53 +
   45.54 +  /*
   45.55 +   * (non-Javadoc)
   45.56 +   * 
   45.57 +   * @see de.laures.cewolf.Storage#storeChartImage(de.laures.cewolf.ChartImage,
   45.58 +   *      javax.servlet.jsp.PageContext)
   45.59 +   */
   45.60 +  public String storeChartImage( ChartImage chartImage, PageContext pageContext ) throws CewolfException
   45.61 +  {
   45.62 +    HttpSession session = pageContext.getSession();
   45.63 +    SessionStorageGroup ssg = (SessionStorageGroup) session.getAttribute("CewolfCharts");
   45.64 +    if ( ssg == null )
   45.65 +    {
   45.66 +      ssg = new SessionStorageGroup();
   45.67 +      session.setAttribute("CewolfCharts", ssg);
   45.68 +    }
   45.69 +    String cid = getKey(chartImage);
   45.70 +    SessionStorageItem ssi = new SessionStorageItem(chartImage, cid, chartImage.getTimeoutTime());
   45.71 +    ssg.put(cid, ssi);
   45.72 +
   45.73 +    return cid;
   45.74 +  }
   45.75 +
   45.76 +  /*
   45.77 +   * (non-Javadoc)
   45.78 +   * 
   45.79 +   * @see de.laures.cewolf.Storage#getChartImage(java.lang.String,
   45.80 +   *      javax.servlet.http.HttpServletRequest)
   45.81 +   */
   45.82 +  public ChartImage getChartImage( String id, HttpServletRequest request )
   45.83 +  {
   45.84 +    HttpSession session = request.getSession();
   45.85 +    ChartImage chart = null;
   45.86 +    SessionStorageGroup ssg = (SessionStorageGroup) session.getAttribute("CewolfCharts");
   45.87 +    if ( ssg != null )
   45.88 +    {
   45.89 +      SessionStorageItem ssi = (SessionStorageItem) ssg.get(id);
   45.90 +      if ( ssi != null )
   45.91 +      {
   45.92 +        chart = ssi.getChart();
   45.93 +      }
   45.94 +    }
   45.95 +
   45.96 +    return chart;
   45.97 +  }
   45.98 +  /*
   45.99 +   * (non-Javadoc)
  45.100 +   * 
  45.101 +   * @see de.laures.cewolf.Storage#init(javax.servlet.ServletContext)
  45.102 +   */
  45.103 +  public void init( ServletContext servletContext ) throws CewolfException {
  45.104 +  }
  45.105 +
  45.106 +  /**
  45.107 +   * @see de.laures.cewolf.Storage#removeChartImage(java.lang.String, javax.servlet.jsp.PageContext)
  45.108 +   */
  45.109 +  public String removeChartImage(String cid, HttpServletRequest request) throws CewolfException {
  45.110 +	  HttpSession session = request.getSession();
  45.111 +	  // No session exit
  45.112 +	  if (session == null)
  45.113 +	  {
  45.114 +		  return cid;
  45.115 +	  }
  45.116 +	  SessionStorageGroup ssg = (SessionStorageGroup) session.getAttribute("CewolfCharts");
  45.117 +	  if ( ssg == null )
  45.118 +	  {
  45.119 +		  // No group exit
  45.120 +		  return cid;
  45.121 +	  }
  45.122 +	  ssg.remove(cid);
  45.123 +	  return cid;  
  45.124 +  }
  45.125 +}
  45.126 \ No newline at end of file
    46.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    46.2 +++ b/java/cewolf-1.0/src/main/java/de/laures/cewolf/storage/SerializableChartImage.java	Sat Feb 28 21:31:02 2009 +0100
    46.3 @@ -0,0 +1,102 @@
    46.4 +/* ================================================================
    46.5 + * Cewolf : Chart enabling Web Objects Framework
    46.6 + * ================================================================
    46.7 + *
    46.8 + * Project Info:  http://cewolf.sourceforge.net
    46.9 + * Project Lead:  Guido Laures (guido@laures.de);
   46.10 + *
   46.11 + * (C) Copyright 2002, by Guido Laures
   46.12 + *
   46.13 + * This library is free software; you can redistribute it and/or modify it under the terms
   46.14 + * of the GNU Lesser General Public License as published by the Free Software Foundation;
   46.15 + * either version 2.1 of the License, or (at your option) any later version.
   46.16 + *
   46.17 + * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
   46.18 + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
   46.19 + * See the GNU Lesser General Public License for more details.
   46.20 + *
   46.21 + * You should have received a copy of the GNU Lesser General Public License along with this
   46.22 + * library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
   46.23 + * Boston, MA 02111-1307, USA.
   46.24 + */
   46.25 +
   46.26 +package de.laures.cewolf.storage;
   46.27 +
   46.28 +import java.io.Serializable;
   46.29 +import java.util.Date;
   46.30 +
   46.31 +import de.laures.cewolf.CewolfException;
   46.32 +import de.laures.cewolf.ChartImage;
   46.33 +
   46.34 +/**
   46.35 + * @author guido
   46.36 + *
   46.37 + */
   46.38 +public class SerializableChartImage implements ChartImage, Serializable {
   46.39 +	
   46.40 +	private final int width;
   46.41 +	private final int height;
   46.42 +	private final int type;
   46.43 +	private final Date timeoutTime;
   46.44 +	private final String mimeType;
   46.45 +	private final byte[] data;
   46.46 +	
   46.47 +	public SerializableChartImage(ChartImage img) throws CewolfException{
   46.48 +		this.width = img.getWidth();
   46.49 +		this.height = img.getHeight();
   46.50 +		this.type = img.getType();
   46.51 +		this.mimeType = img.getMimeType();
   46.52 +		this.data = img.getBytes();
   46.53 +		this.timeoutTime = img.getTimeoutTime();
   46.54 +	}
   46.55 +
   46.56 +	/**
   46.57 +	 * @see de.laures.cewolf.ChartImage#getWidth()
   46.58 +	 */
   46.59 +	public int getWidth() {
   46.60 +		return width;
   46.61 +	}
   46.62 +
   46.63 +	/**
   46.64 +	 * @see de.laures.cewolf.ChartImage#getHeight()
   46.65 +	 */
   46.66 +	public int getHeight() {
   46.67 +		return height;
   46.68 +	}
   46.69 +
   46.70 +	/**
   46.71 +	 * @see de.laures.cewolf.ChartImage#getType()
   46.72 +	 */
   46.73 +	public int getType() {
   46.74 +		return type;
   46.75 +	}
   46.76 +
   46.77 +	/**
   46.78 +	 * @see de.laures.cewolf.ChartImage#getBytes()
   46.79 +	 */
   46.80 +	public byte[] getBytes() throws CewolfException {
   46.81 +		return data;
   46.82 +	}
   46.83 +
   46.84 +	/**
   46.85 +	 * @see de.laures.cewolf.ChartImage#getMimeType()
   46.86 +	 */
   46.87 +	public String getMimeType() {
   46.88 +		return mimeType;
   46.89 +	}
   46.90 +
   46.91 +	/**
   46.92 +	 * @see de.laures.cewolf.ChartImage#getSize()
   46.93 +	 */
   46.94 +	public int getSize() throws CewolfException {
   46.95 +		return data.length;
   46.96 +	}
   46.97 +
   46.98 +  /* (non-Javadoc)
   46.99 +   * @see de.laures.cewolf.ChartImage#getTimeoutTime()
  46.100 +   */
  46.101 +  public Date getTimeoutTime() {      
  46.102 +    return timeoutTime;
  46.103 +  }
  46.104 +
  46.105 +}
    47.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    47.2 +++ b/java/cewolf-1.0/src/main/java/de/laures/cewolf/storage/SessionStorageGroup.java	Sat Feb 28 21:31:02 2009 +0100
    47.3 @@ -0,0 +1,175 @@
    47.4 +/*
    47.5 + * Created on Aug 3, 2004
    47.6 + *
    47.7 + * To change the template for this generated file go to
    47.8 + * Window - Preferences - Java - Code Generation - Code and Comments
    47.9 + */
   47.10 +package de.laures.cewolf.storage;
   47.11 +
   47.12 +import java.util.Calendar;
   47.13 +import java.util.Collection;
   47.14 +import java.util.Date;
   47.15 +import java.util.GregorianCalendar;
   47.16 +import java.util.HashMap;
   47.17 +import java.util.Iterator;
   47.18 +import java.util.Map;
   47.19 +
   47.20 +/**
   47.21 + * @author brianf
   47.22 + * 
   47.23 + * To change the template for this generated type comment go to Window -
   47.24 + * Preferences - Java - Code Generation - Code and Comments
   47.25 + */
   47.26 +public class SessionStorageGroup implements Runnable
   47.27 +{
   47.28 +  private Map map = new HashMap();
   47.29 +  Thread      runner;
   47.30 +
   47.31 +  private void start()
   47.32 +  {
   47.33 +    if ( runner == null || !runner.isAlive() )
   47.34 +    {
   47.35 +      runner = new Thread(this);
   47.36 +      runner.setDaemon(false);
   47.37 +      runner.setName("SessionCleanup");
   47.38 +      runner.setPriority(Thread.MIN_PRIORITY);
   47.39 +      runner.start();
   47.40 +    }
   47.41 +  }
   47.42 +
   47.43 +  public synchronized Object get( Object a )
   47.44 +  {
   47.45 +    return map.get(a);
   47.46 +  }
   47.47 +
   47.48 +  public synchronized Object put( Object a, Object b )
   47.49 +  {
   47.50 +    Object c = map.put(a, b);
   47.51 +    start();
   47.52 +    return c;
   47.53 +  }
   47.54 +
   47.55 +  public synchronized Object remove( Object a )
   47.56 +  {
   47.57 +    return map.remove(a);
   47.58 +  }
   47.59 +  /*
   47.60 +   * (non-Javadoc)
   47.61 +   * 
   47.62 +   * @see java.lang.Runnable#run()
   47.63 +   */
   47.64 +  public void run()
   47.65 +  {
   47.66 +    while ( !map.isEmpty() )
   47.67 +    {
   47.68 +      Date date = new Date();
   47.69 +      synchronized (this)
   47.70 +      {
   47.71 +        Collection keys = map.keySet();
   47.72 +
   47.73 +        Iterator iter = keys.iterator();
   47.74 +
   47.75 +        while ( iter.hasNext() )
   47.76 +        {
   47.77 +          // System.out.println("Get Next");
   47.78 +          String cid = (String) iter.next();
   47.79 +          SessionStorageItem ssi = (SessionStorageItem) get(cid);
   47.80 +          if ( ssi.isExpired(date) )
   47.81 +          {
   47.82 +           // System.out.println("Removing " + ssi);
   47.83 +            iter.remove();
   47.84 +          }
   47.85 +        }
   47.86 +      }
   47.87 +      try
   47.88 +      {
   47.89 +        //System.gc();
   47.90 +        Thread.sleep(1000);
   47.91 +      }
   47.92 +      catch (InterruptedException e)
   47.93 +      {
   47.94 +        // TODO Auto-generated catch block
   47.95 +        e.printStackTrace();
   47.96 +      }
   47.97 +    }
   47.98 +   // System.out.println("Exiting Thread");   
   47.99 +  }
  47.100 +  public static void main( String[] args )
  47.101 +  {
  47.102 +    int start = 0;
  47.103 +   while(true)
  47.104 +    {
  47.105 +      System.out.println("Adding Objects");
  47.106 +    testThread(start);
  47.107 +    
  47.108 +    try
  47.109 +    {
  47.110 +      Thread.sleep(10000);
  47.111 +    }
  47.112 +    catch (InterruptedException e)
  47.113 +    {
  47.114 +      // TODO Auto-generated catch block
  47.115 +      e.printStackTrace();
  47.116 +    }
  47.117 +    }
  47.118 +  }
  47.119 +
  47.120 +  public static void testThread(int start)
  47.121 +  {
  47.122 +    SessionStorageGroup ssg = new SessionStorageGroup();
  47.123 +    Calendar cal = new GregorianCalendar();
  47.124 +    cal.setTime(new Date());
  47.125 +    //   some huge garbage string
  47.126 +  
  47.127 +    for (int i = start; i < start+10000; i++)
  47.128 +    {
  47.129 +      cal.add(Calendar.MILLISECOND, 1);
  47.130 +      SessionStorageItem ssi = new SessionStorageItem(null, Integer.toString(i), cal.getTime());
  47.131 +      ssg.put(Integer.toString(i), ssi);
  47.132 +    }
  47.133 +
  47.134 +
  47.135 +  }
  47.136 +  /**
  47.137 +   * Test that memory is freed up when low on it...
  47.138 +   */
  47.139 +  public static void testSoftreferenceMemoryFreeup()
  47.140 +  {
  47.141 +    Date neverexpire = new Date(10000, 1, 1);
  47.142 +    SessionStorageGroup ssg = new SessionStorageGroup();
  47.143 +
  47.144 +    //   some huge garbage string
  47.145 +    StringBuffer longString = new StringBuffer();
  47.146 +    for (int i = 0; i < 10000; i++)
  47.147 +    {
  47.148 +      longString.append(Math.random());
  47.149 +    }
  47.150 +
  47.151 +    int i = 0;
  47.152 +    long minmem = Long.MAX_VALUE;
  47.153 +    while ( true )
  47.154 +    {
  47.155 +      //   let's use the id string to waste memory
  47.156 +      String key = Long.toString(System.currentTimeMillis());
  47.157 +      String id = key + longString;
  47.158 +      SessionStorageItem ssi = new SessionStorageItem(null, id, neverexpire);
  47.159 +      ssg.put(key, ssi);
  47.160 +
  47.161 +      i++;
  47.162 +      long freemem = Runtime.getRuntime().freeMemory();
  47.163 +      long usedmem = Runtime.getRuntime().totalMemory();
  47.164 +      long maxmem = Runtime.getRuntime().maxMemory();
  47.165 +      if ( freemem < minmem )
  47.166 +      {
  47.167 +        minmem = freemem;
  47.168 +      }
  47.169 +      if ( i % 100 == 0 )
  47.170 +      {
  47.171 +        System.out.println("#" + i + ", minimum memory:" + minmem + ", freemem:" + freemem
  47.172 +            + ", usedmem:" + usedmem + ", maxmem:" + maxmem);
  47.173 +      }
  47.174 +    }
  47.175 +
  47.176 +  }
  47.177 +}
  47.178 +
    48.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    48.2 +++ b/java/cewolf-1.0/src/main/java/de/laures/cewolf/storage/SessionStorageItem.java	Sat Feb 28 21:31:02 2009 +0100
    48.3 @@ -0,0 +1,94 @@
    48.4 +/*
    48.5 + * Created on Aug 2, 2004
    48.6 + *
    48.7 + * To change the template for this generated file go to
    48.8 + * Window - Preferences - Java - Code Generation - Code and Comments
    48.9 + */
   48.10 +package de.laures.cewolf.storage;
   48.11 +
   48.12 +import java.util.Date;
   48.13 +
   48.14 +import de.laures.cewolf.ChartImage;
   48.15 +
   48.16 +/**
   48.17 + * @author brianf
   48.18 + * 
   48.19 + * To change the template for this generated type comment go to Window -
   48.20 + * Preferences - Java - Code Generation - Code and Comments
   48.21 + */
   48.22 +public class SessionStorageItem
   48.23 +{
   48.24 +  String     cid     = null;
   48.25 +  ChartImage chart   = null;
   48.26 +  Date       timeout = null;
   48.27 +
   48.28 +  public SessionStorageItem( ChartImage theChart, String theCid, Date theTimeout )
   48.29 +  {
   48.30 +    chart   = theChart;
   48.31 +    cid     = theCid;
   48.32 +    timeout = theTimeout;
   48.33 +  }
   48.34 +  
   48.35 +  public String toString()
   48.36 +  {
   48.37 +    return ("SSI: id:"+cid+" expires:"+timeout);
   48.38 +  }
   48.39 +  public final boolean isExpired(Date currentTime)
   48.40 +  {
   48.41 +    return currentTime.after(timeout);
   48.42 +  }
   48.43 +  /**
   48.44 +   * @return Returns the chart.
   48.45 +   */
   48.46 +  public ChartImage getChart()
   48.47 +  {
   48.48 +    return chart;
   48.49 +  }
   48.50 +  /**
   48.51 +   * @param chart
   48.52 +   *          The chart to set.
   48.53 +   */
   48.54 +  public void setChart( ChartImage chart )
   48.55 +  {
   48.56 +    this.chart = chart;
   48.57 +  }
   48.58 +  /**
   48.59 +   * @return Returns the cid.
   48.60 +   */
   48.61 +  public String getCid()
   48.62 +  {
   48.63 +    return cid;
   48.64 +  }
   48.65 +  /**
   48.66 +   * @param cid
   48.67 +   *          The cid to set.
   48.68 +   */
   48.69 +  public void setCid( String cid )
   48.70 +  {
   48.71 +    this.cid = cid;
   48.72 +  }
   48.73 +  /**
   48.74 +   *  
   48.75 +   */
   48.76 +  public SessionStorageItem()
   48.77 +  {
   48.78 +    super();
   48.79 +    // TODO Auto-generated constructor stub
   48.80 +  }
   48.81 +
   48.82 +  /**
   48.83 +   * @return Returns the timeout.
   48.84 +   */
   48.85 +  public Date getTimeout()
   48.86 +  {
   48.87 +    return timeout;
   48.88 +  }
   48.89 +  /**
   48.90 +   * @param timeout
   48.91 +   *          The timeout to set.
   48.92 +   */
   48.93 +  public void setTimeout( Date timeout )
   48.94 +  {
   48.95 +    this.timeout = timeout;
   48.96 +  }
   48.97 +}
   48.98 \ No newline at end of file
    49.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    49.2 +++ b/java/cewolf-1.0/src/main/java/de/laures/cewolf/storage/TransientSessionStorage.java	Sat Feb 28 21:31:02 2009 +0100
    49.3 @@ -0,0 +1,42 @@
    49.4 +/* ================================================================
    49.5 + * Cewolf : Chart enabling Web Objects Framework
    49.6 + * ================================================================
    49.7 + *
    49.8 + * Project Info:  http://cewolf.sourceforge.net
    49.9 + * Project Lead:  Guido Laures (guido@laures.de);
   49.10 + *
   49.11 + * (C) Copyright 2002, by Guido Laures
   49.12 + *
   49.13 + * This library is free software; you can redistribute it and/or modify it under the terms
   49.14 + * of the GNU Lesser General Public License as published by the Free Software Foundation;
   49.15 + * either version 2.1 of the License, or (at your option) any later version.
   49.16 + *
   49.17 + * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
   49.18 + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
   49.19 + * See the GNU Lesser General Public License for more details.
   49.20 + *
   49.21 + * You should have received a copy of the GNU Lesser General Public License along with this
   49.22 + * library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
   49.23 + * Boston, MA 02111-1307, USA.
   49.24 + */
   49.25 +
   49.26 +package de.laures.cewolf.storage;
   49.27 +
   49.28 +import de.laures.cewolf.CewolfException;
   49.29 +import de.laures.cewolf.ChartImage;
   49.30 +
   49.31 +/**
   49.32 + * This storage should be used in non-clustered environments
   49.33 + * without failover concept. Using this storage enables render-on-demand.
   49.34 + * @author glaures
   49.35 + */
   49.36 +public class TransientSessionStorage extends AbstractSessionStorage {
   49.37 +	
   49.38 +	/* (non-Javadoc)
   49.39 +	 * @see de.laures.cewolf.storage.AbstractSessionStorage#getCacheObject(de.laures.cewolf.ChartImage)
   49.40 +	 */
   49.41 +	protected Object getCacheObject(ChartImage cid) throws CewolfException {
   49.42 +		return cid;
   49.43 +	}
   49.44 +
   49.45 +}
    50.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    50.2 +++ b/java/cewolf-1.0/src/main/java/de/laures/cewolf/taglib/AbstractChartDefinition.java	Sat Feb 28 21:31:02 2009 +0100
    50.3 @@ -0,0 +1,274 @@
    50.4 +/* ================================================================
    50.5 + * Cewolf : Chart enabling Web Objects Framework
    50.6 + * ================================================================
    50.7 + *
    50.8 + * Project Info:  http://cewolf.sourceforge.net
    50.9 + * Project Lead:  Guido Laures (guido@laures.de);
   50.10 + *
   50.11 + * (C) Copyright 2002, by Guido Laures
   50.12 + *
   50.13 + * This library is free software; you can redistribute it and/or modify it under the terms
   50.14 + * of the GNU Lesser General Public License as published by the Free Software Foundation;
   50.15 + * either version 2.1 of
   50.16 + * the License, or (at your option) any later version.
   50.17 + *
   50.18 + * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
   50.19 + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
   50.20 + * See the GNU Lesser General Public License for more details.
   50.21 + *
   50.22 + * You should have received a copy of the GNU Lesser General Public License along with this
   50.23 + * library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
   50.24 + * Boston, MA 02111-1307, USA.
   50.25 + */
   50.26 +
   50.27 +package de.laures.cewolf.taglib;
   50.28 +
   50.29 +import java.awt.Image;
   50.30 +import java.awt.Paint;
   50.31 +import java.io.Serializable;
   50.32 +import java.util.ArrayList;
   50.33 +import java.util.Iterator;
   50.34 +import java.util.List;
   50.35 +import java.util.Map;
   50.36 +
   50.37 +import org.apache.commons.logging.Log;
   50.38 +import org.apache.commons.logging.LogFactory;
   50.39 +import org.jfree.chart.JFreeChart;
   50.40 +import org.jfree.chart.title.LegendTitle;
   50.41 +import org.jfree.ui.RectangleEdge;
   50.42 +
   50.43 +import de.laures.cewolf.ChartHolder;
   50.44 +import de.laures.cewolf.ChartPostProcessor;
   50.45 +import de.laures.cewolf.ChartValidationException;
   50.46 +import de.laures.cewolf.DatasetProduceException;
   50.47 +import de.laures.cewolf.PostProcessingException;
   50.48 +import de.laures.cewolf.event.ChartImageRenderListener;
   50.49 +import de.laures.cewolf.util.ImageHelper;
   50.50 +import de.laures.cewolf.util.RenderedImage;
   50.51 +
   50.52 +/**
   50.53 + * Serializable implementaton of a ChartDefinition.
   50.54 + * @author glaures
   50.55 + * @see de.laures.cewolf.ChartHolder
   50.56 + */
   50.57 +public abstract class AbstractChartDefinition implements ChartHolder, Serializable, TaglibConstants, ChartImageRenderListener {
   50.58 +    
   50.59 +    protected static Log log = LogFactory.getLog(AbstractChartDefinition.class);
   50.60 +
   50.61 +    protected String title;
   50.62 +	protected String xAxisLabel;
   50.63 +	protected String yAxisLabel;
   50.64 +	protected String type;
   50.65 +
   50.66 +    private boolean antialias = true;
   50.67 +    private String background;
   50.68 +    private float backgroundImageAlpha = 1.0f;
   50.69 +    private Paint paint;
   50.70 +
   50.71 +    private int legendAnchor = ANCHOR_SOUTH;
   50.72 +    private boolean showLegend = true;
   50.73 +
   50.74 +    private transient List postProcessors = new ArrayList();
   50.75 +    private List postProcessorsParams = new ArrayList();
   50.76 +
   50.77 +    private transient JFreeChart chart;
   50.78 +	
   50.79 +	protected abstract JFreeChart produceChart() throws DatasetProduceException, ChartValidationException;
   50.80 +	
   50.81 +  
   50.82 +    //gets first legend in the list
   50.83 +    public LegendTitle getLegend()
   50.84 +    {
   50.85 +      //i need to find the legend now.
   50.86 +      LegendTitle legend = null;
   50.87 +      List subTitles = chart.getSubtitles();
   50.88 +      Iterator iter = subTitles.iterator();
   50.89 +      while (iter.hasNext())
   50.90 +      {
   50.91 +        Object o = iter.next();
   50.92 +        if (o instanceof LegendTitle)
   50.93 +        {
   50.94 +          legend = (LegendTitle) o;
   50.95 +          break;
   50.96 +        }
   50.97 +      }
   50.98 +      return legend;
   50.99 +    }
  50.100 +    
  50.101 +    //removes first legend in the list
  50.102 +    public void removeLegend()
  50.103 +    {
  50.104 +      List subTitles = chart.getSubtitles();
  50.105 +      Iterator iter = subTitles.iterator();
  50.106 +      while (iter.hasNext())
  50.107 +      {
  50.108 +        Object o = iter.next();
  50.109 +        if (o instanceof LegendTitle)
  50.110 +        {
  50.111 +          iter.remove();
  50.112 +          break;
  50.113 +        }
  50.114 +      }
  50.115 +    }
  50.116 +  
  50.117 +    /**
  50.118 +     * This method triggers the dataset and chart production. It is only
  50.119 +     * from outside if there is no cached image available in the the
  50.120 +     * image cache.
  50.121 +     */
  50.122 +    public Object getChart() throws DatasetProduceException, ChartValidationException, PostProcessingException {
  50.123 +        if (chart == null) {
  50.124 +            chart = produceChart();
  50.125 +            chart.setAntiAlias(antialias);
  50.126 +            if (background != null) {
  50.127 +                Image image = ImageHelper.loadImage(background);
  50.128 +                chart.setBackgroundImage(image);
  50.129 +                chart.setBackgroundImageAlpha(backgroundImageAlpha);
  50.130 +            }
  50.131 +            if (paint != null) {
  50.132 +                chart.setBackgroundPaint(paint);
  50.133 +            }
  50.134 +            if (showLegend) 
  50.135 +            {
  50.136 +
  50.137 +                LegendTitle legend = this.getLegend();
  50.138 +                switch (legendAnchor) 
  50.139 +                {
  50.140 +                    case ANCHOR_NORTH :
  50.141 +                        legend.setPosition(RectangleEdge.TOP);
  50.142 +                        break;
  50.143 +                    case ANCHOR_WEST :
  50.144 +                      legend.setPosition(RectangleEdge.RIGHT);
  50.145 +                        break;
  50.146 +                    case ANCHOR_EAST :
  50.147 +                      legend.setPosition(RectangleEdge.LEFT);
  50.148 +                        break;
  50.149 +                    default :
  50.150 +                      legend.setPosition(RectangleEdge.BOTTOM);
  50.151 +                }
  50.152 +            } 
  50.153 +            else 
  50.154 +            {
  50.155 +              this.removeLegend();
  50.156 +            }
  50.157 +            // postProcessing
  50.158 +            for (int i = 0; i < postProcessors.size(); i++) {
  50.159 +                ChartPostProcessor pp = (ChartPostProcessor)postProcessors.get(i);
  50.160 +                try {
  50.161 +                    pp.processChart(chart, (Map)postProcessorsParams.get(i));
  50.162 +                } catch (Throwable t) {
  50.163 +                	log.error(t);
  50.164 +                    throw new PostProcessingException(t.getClass().getName() + " raised by post processor '" +
  50.165 +                    		pp + "'.\nPost processing of this post processor " + "has been ignored.");
  50.166 +                }
  50.167 +            }
  50.168 +        }
  50.169 +        return chart;
  50.170 +    }
  50.171 +
  50.172 +    /**
  50.173 +     * Sets the antialias.
  50.174 +     * @param antialias The antialias to set
  50.175 +     */
  50.176 +    public void setAntialias(boolean antialias) {
  50.177 +        this.antialias = antialias;
  50.178 +    }
  50.179 +
  50.180 +    /**
  50.181 +     * Sets the background.
  50.182 +     * @param background The background to set
  50.183 +     */
  50.184 +    public void setBackground(String background) {
  50.185 +        this.background = background;
  50.186 +    }
  50.187 +
  50.188 +    /**
  50.189 +     * Sets the backgroundImageAlpha.
  50.190 +     * @param backgroundImageAlpha The backgroundImageAlpha to set
  50.191 +     */
  50.192 +    public void setBackgroundImageAlpha(float backgroundImageAlpha) {
  50.193 +        this.backgroundImageAlpha = backgroundImageAlpha;
  50.194 +    }
  50.195 +
  50.196 +    /**
  50.197 +     * Sets the legendAnchor.
  50.198 +     * @param legendAnchor The legendAnchor to set
  50.199 +     */
  50.200 +    public void setLegendAnchor(int legendAnchor) {
  50.201 +        this.legendAnchor = legendAnchor;
  50.202 +    }
  50.203 +
  50.204 +    /**
  50.205 +     * Sets the paint.
  50.206 +     * @param paint The paint to set
  50.207 +     */
  50.208 +    public void setPaint(Paint paint) {
  50.209 +        this.paint = paint;
  50.210 +    }
  50.211 +
  50.212 +    /**
  50.213 +     * Sets the showLegend.
  50.214 +     * @param showLegend The showLegend to set
  50.215 +     */
  50.216 +    public void setShowLegend(boolean showLegend) {
  50.217 +        this.showLegend = showLegend;
  50.218 +    }
  50.219 +
  50.220 +    /**
  50.221 +     * Sets the title.
  50.222 +     * @param title The title to set
  50.223 +     */
  50.224 +    public void setTitle(String title) {
  50.225 +        this.title = title;
  50.226 +    }
  50.227 +
  50.228 +    /**
  50.229 +     * Sets the type.
  50.230 +     * @param type The type to set
  50.231 +     */
  50.232 +    public void setType(String type) {
  50.233 +        this.type = type;
  50.234 +    }
  50.235 +
  50.236 +    /**
  50.237 +     * Sets the xAxisLabel.
  50.238 +     * @param xAxisLabel The xAxisLabel to set
  50.239 +     */
  50.240 +    public void setXAxisLabel(String xAxisLabel) {
  50.241 +        this.xAxisLabel = xAxisLabel;
  50.242 +    }
  50.243 +
  50.244 +    /**
  50.245 +     * Sets the yAxisLabel.
  50.246 +     * @param yAxisLabel The yAxisLabel to set
  50.247 +     */
  50.248 +    public void setYAxisLabel(String yAxisLabel) {
  50.249 +        this.yAxisLabel = yAxisLabel;
  50.250 +    }
  50.251 +
  50.252 +    public void addPostProcessor(ChartPostProcessor pp) {
  50.253 +        postProcessors.add(pp);
  50.254 +    }
  50.255 +
  50.256 +    public void addPostProcessorParams(Map params) {
  50.257 +        postProcessorsParams.add(params);
  50.258 +    }
  50.259 +    
  50.260 +	/**
  50.261 +	 * Callback right after a new image gets rendered.
  50.262 +	 * Implemented, so if postprocessors implement the ImageRenderListener interface
  50.263 +	 * then they will be called back also
  50.264 +	 * 
  50.265 +	 * @param renderedImage The fresh image just got rendered
  50.266 +	 */
  50.267 +	public void onImageRendered (RenderedImage renderedImage) {
  50.268 +		// if the postprocessor implements ImageRenderListener interface call it!
  50.269 +        for (int i = 0; i < postProcessors.size(); i++) {
  50.270 +            ChartPostProcessor pp = (ChartPostProcessor)postProcessors.get(i);
  50.271 +            if (pp instanceof ChartImageRenderListener) {
  50.272 +            	((ChartImageRenderListener) pp).onImageRendered(renderedImage);
  50.273 +            }
  50.274 +        }		
  50.275 +	}
  50.276 +
  50.277 +}
    51.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    51.2 +++ b/java/cewolf-1.0/src/main/java/de/laures/cewolf/taglib/AttributeValidationException.java	Sat Feb 28 21:31:02 2009 +0100
    51.3 @@ -0,0 +1,36 @@
    51.4 +/* ================================================================
    51.5 + * Cewolf : Chart enabling Web Objects Framework
    51.6 + * ================================================================
    51.7 + *
    51.8 + * Project Info:  http://cewolf.sourceforge.net
    51.9 + * Project Lead:  Guido Laures (guido@laures.de);
   51.10 + *
   51.11 + * (C) Copyright 2002, by Guido Laures
   51.12 + *
   51.13 + * This library is free software; you can redistribute it and/or modify it under the terms
   51.14 + * of the GNU Lesser General Public License as published by the Free Software Foundation;
   51.15 + * either version 2.1 of the License, or (at your option) any later version.
   51.16 + *
   51.17 + * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
   51.18 + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
   51.19 + * See the GNU Lesser General Public License for more details.
   51.20 + *
   51.21 + * You should have received a copy of the GNU Lesser General Public License along with this
   51.22 + * library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
   51.23 + * Boston, MA 02111-1307, USA.
   51.24 + */
   51.25 +
   51.26 +package de.laures.cewolf.taglib;
   51.27 +
   51.28 +import de.laures.cewolf.ChartValidationException;
   51.29 +
   51.30 +/**
   51.31 + * @author glaures
   51.32 + */
   51.33 +public class AttributeValidationException extends ChartValidationException {
   51.34 +
   51.35 +	public AttributeValidationException(String attribute, String val){
   51.36 +		super("value " + val + " is not valid for attribute " + attribute);
   51.37 +	}
   51.38 +
   51.39 +}
    52.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    52.2 +++ b/java/cewolf-1.0/src/main/java/de/laures/cewolf/taglib/AxisConstants.java	Sat Feb 28 21:31:02 2009 +0100
    52.3 @@ -0,0 +1,39 @@
    52.4 +/* ================================================================
    52.5 + * Cewolf : Chart enabling Web Objects Framework
    52.6 + * ================================================================
    52.7 + *
    52.8 + * Project Info:  http://cewolf.sourceforge.net
    52.9 + * Project Lead:  Guido Laures (guido@laures.de);
   52.10 + *
   52.11 + * (C) Copyright 2002, by Guido Laures
   52.12 + *
   52.13 + * This library is free software; you can redistribute it and/or modify it under the terms
   52.14 + * of the GNU Lesser General Public License as published by the Free Software Foundation;
   52.15 + * either version 2.1 of
   52.16 + * the License, or (at your option) any later version.
   52.17 + *
   52.18 + * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
   52.19 + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
   52.20 + * See the GNU Lesser General Public License for more details.
   52.21 + *
   52.22 + * You should have received a copy of the GNU Lesser General Public License along with this
   52.23 + * library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
   52.24 + * Boston, MA 02111-1307, USA.
   52.25 + */
   52.26 +
   52.27 +package de.laures.cewolf.taglib;
   52.28 +
   52.29 +/**
   52.30 + * Constants for axis attributes.
   52.31 + * @author glaures
   52.32 + */
   52.33 +public interface AxisConstants {
   52.34 +
   52.35 +	int ORIENTATION_HORIZONTAL = 0;	
   52.36 +	int ORIENTATION_VERTICAL = 1;
   52.37 +	
   52.38 +	int AXIS_TYPE_DATE = 0;
   52.39 +	int AXIS_TYPE_NUMBER = 1;
   52.40 +	
   52.41 +	int AXIS_TYPE_CATEGORY = 2;//added by lrh 2005-07-11
   52.42 +}
    53.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    53.2 +++ b/java/cewolf-1.0/src/main/java/de/laures/cewolf/taglib/AxisFactory.java	Sat Feb 28 21:31:02 2009 +0100
    53.3 @@ -0,0 +1,45 @@
    53.4 +package de.laures.cewolf.taglib;
    53.5 +
    53.6 +import org.apache.commons.logging.Log;
    53.7 +import org.apache.commons.logging.LogFactory;
    53.8 +import org.jfree.chart.axis.Axis;
    53.9 +import org.jfree.chart.axis.CategoryAxis;
   53.10 +import org.jfree.chart.axis.DateAxis;
   53.11 +import org.jfree.chart.axis.NumberAxis;
   53.12 +import org.jfree.chart.axis.ValueAxis;
   53.13 +
   53.14 +/**
   53.15 + * @author guido
   53.16 + *
   53.17 + * To change this generated comment edit the template variable "typecomment":
   53.18 + * Window>Preferences>Java>Templates.
   53.19 + * To enable and disable the creation of type comments go to
   53.20 + * Window>Preferences>Java>Code Generation.
   53.21 + */
   53.22 +public class AxisFactory implements AxisConstants {
   53.23 +
   53.24 +    protected Log log = LogFactory.getLog(AxisFactory.class.getName());
   53.25 +    
   53.26 +    private static final AxisFactory instance = new AxisFactory();
   53.27 +    
   53.28 +    protected AxisFactory(){
   53.29 +    }
   53.30 +    
   53.31 +    public static final AxisFactory getInstance(){
   53.32 +    	return instance;
   53.33 +    }
   53.34 +    
   53.35 +	public Axis createAxis(int orientation, int type, String label) {
   53.36 +		switch (type) {
   53.37 +			case AXIS_TYPE_DATE :
   53.38 +				return new DateAxis(label);
   53.39 +			case AXIS_TYPE_NUMBER :
   53.40 +				return new NumberAxis(label);
   53.41 +			case AXIS_TYPE_CATEGORY://added by lrh 2005-07-11
   53.42 +	            return new CategoryAxis(label);
   53.43 +			default:
   53.44 +				throw new RuntimeException("unsupported axis type constant " + type);
   53.45 +		}
   53.46 +	}
   53.47 +
   53.48 +}
    54.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    54.2 +++ b/java/cewolf-1.0/src/main/java/de/laures/cewolf/taglib/AxisTypes.java	Sat Feb 28 21:31:02 2009 +0100
    54.3 @@ -0,0 +1,51 @@
    54.4 +/* ================================================================
    54.5 + * Cewolf : Chart enabling Web Objects Framework
    54.6 + * ================================================================
    54.7 + *
    54.8 + * Project Info:  http://cewolf.sourceforge.net
    54.9 + * Project Lead:  Guido Laures (guido@laures.de);
   54.10 + *
   54.11 + * (C) Copyright 2002, by Guido Laures
   54.12 + *
   54.13 + * This library is free software; you can redistribute it and/or modify it under the terms
   54.14 + * of the GNU Lesser General Public License as published by the Free Software Foundation;
   54.15 + * either version 2.1 of the License, or (at your option) any later version.
   54.16 + *
   54.17 + * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
   54.18 + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
   54.19 + * See the GNU Lesser General Public License for more details.
   54.20 + *
   54.21 + * You should have received a copy of the GNU Lesser General Public License along with this
   54.22 + * library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
   54.23 + * Boston, MA 02111-1307, USA.
   54.24 + */
   54.25 +
   54.26 +package de.laures.cewolf.taglib;
   54.27 +
   54.28 +import java.util.Arrays;
   54.29 +import java.util.List;
   54.30 +
   54.31 +/**
   54.32 + * Contains the list of all possible axis type string values which can be used
   54.33 + * in the <code>type</code> attribute of a &lt;plot&gt; tag.
   54.34 + * @author  Guido Laures
   54.35 + */
   54.36 +public class AxisTypes {
   54.37 +
   54.38 +    /** All type strings in an array */
   54.39 +    public static final String[] typeNames =    {
   54.40 +        "date",
   54.41 +        "number",
   54.42 +        "category",
   54.43 +    };
   54.44 +
   54.45 +    /**
   54.46 +     * The whole typeNames array inside of a list.
   54.47 +     * @see #typeNames
   54.48 +     */
   54.49 +    public static final List typeList = Arrays.asList(typeNames);
   54.50 +
   54.51 +    private AxisTypes() {
   54.52 +    }
   54.53 +
   54.54 +}
    55.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    55.2 +++ b/java/cewolf-1.0/src/main/java/de/laures/cewolf/taglib/CewolfChartFactory.java	Sat Feb 28 21:31:02 2009 +0100
    55.3 @@ -0,0 +1,313 @@
    55.4 +/* ================================================================
    55.5 + * Cewolf : Chart enabling Web Objects Framework
    55.6 + * ================================================================
    55.7 + *
    55.8 + * Project Info:  http://cewolf.sourceforge.net
    55.9 + * Project Lead:  Guido Laures (guido@laures.de);
   55.10 + *
   55.11 + * (C) Copyright 2002, by Guido Laures
   55.12 + *
   55.13 + * This library is free software; you can redistribute it and/or modify it under the terms
   55.14 + * of the GNU Lesser General Public License as published by the Free Software Foundation;
   55.15 + * either version 2.1 of the License, or (at your option) any later version.
   55.16 + *
   55.17 + * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
   55.18 + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
   55.19 + * See the GNU Lesser General Public License for more details.
   55.20 + *
   55.21 + * You should have received a copy of the GNU Lesser General Public License along with this
   55.22 + * library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
   55.23 + * Boston, MA 02111-1307, USA.
   55.24 + */
   55.25 +
   55.26 +package de.laures.cewolf.taglib;
   55.27 +
   55.28 +import java.util.HashMap;
   55.29 +import java.util.List;
   55.30 +import java.util.Map;
   55.31 +
   55.32 +import org.jfree.chart.ChartFactory;
   55.33 +import org.jfree.chart.JFreeChart;
   55.34 +import org.jfree.chart.axis.CategoryAxis;
   55.35 +import org.jfree.chart.axis.DateAxis;
   55.36 +import org.jfree.chart.axis.NumberAxis;
   55.37 +import org.jfree.chart.axis.ValueAxis;
   55.38 +import org.jfree.chart.plot.CategoryPlot;
   55.39 +import org.jfree.chart.plot.CombinedDomainXYPlot;
   55.40 +import org.jfree.chart.plot.CombinedRangeXYPlot;
   55.41 +import org.jfree.chart.plot.MeterPlot;
   55.42 +import org.jfree.chart.plot.Plot;
   55.43 +import org.jfree.chart.plot.PlotOrientation;
   55.44 +import org.jfree.chart.plot.XYPlot;
   55.45 +import org.jfree.chart.renderer.category.CategoryItemRenderer;
   55.46 +import org.jfree.chart.renderer.xy.XYItemRenderer;
   55.47 +import org.jfree.data.category.CategoryDataset;
   55.48 +import org.jfree.data.category.IntervalCategoryDataset;
   55.49 +import org.jfree.data.general.Dataset;
   55.50 +import org.jfree.data.general.PieDataset;
   55.51 +import org.jfree.data.general.ValueDataset;
   55.52 +import org.jfree.data.xy.IntervalXYDataset;
   55.53 +import org.jfree.data.xy.OHLCDataset;
   55.54 +import org.jfree.data.xy.WindDataset;
   55.55 +import org.jfree.data.xy.XYDataset;
   55.56 +import org.jfree.data.xy.XYZDataset;
   55.57 +
   55.58 +import de.laures.cewolf.ChartValidationException;
   55.59 +import de.laures.cewolf.DatasetProduceException;
   55.60 +
   55.61 +/**
   55.62 + * Chart factory creates Jfreechart instances. To add a new factory use the
   55.63 + * <code>
   55.64 + * 		CewolfChartFactory.registerFactory(new CewolfChartFactory() {...});
   55.65 + * </code>
   55.66 + * method.
   55.67 + *
   55.68 + * @author  Guido Laures
   55.69 + */
   55.70 +public abstract class CewolfChartFactory implements ChartConstants, AxisConstants, LayoutConstants {
   55.71 +
   55.72 +    // chart type string
   55.73 +  protected String chartType;
   55.74 +  // map contains registered factories, (String) chartType->CewolfChartFactory mappings
   55.75 +  private static Map factories = new HashMap();
   55.76 +
   55.77 +    /** Creates a new instance of ChartFactory */
   55.78 +  protected CewolfChartFactory(String chartType) {
   55.79 +      this.chartType = chartType;
   55.80 +  }
   55.81 +
   55.82 +  /**
   55.83 +   * Callback when the chart instance to be created.
   55.84 +     * @param title The title of chart
   55.85 +     * @param xAxisLabel label on x axis
   55.86 +     * @param yAxisLabel label on y axis
   55.87 +     * @param data The dataset to create chart for
   55.88 +     * @return The newly created JFreeChart instance
   55.89 +     *
   55.90 +     * @throws IncompatibleDatasetException If the incoming data is not compatible with this factory
   55.91 +     */
   55.92 +    public abstract JFreeChart getChartInstance(String title, String xAxisLabel, String yAxisLabel, Dataset data) throws IncompatibleDatasetException;
   55.93 +
   55.94 +    //////////////// static part ///////////////////////
   55.95 +
   55.96 +  /**
   55.97 +   * Register a new chart factory instance.
   55.98 +   * @param factory The factory to register
   55.99 +   */
  55.100 +  public static void registerFactory(CewolfChartFactory factory) {
  55.101 +      factories.put(factory.chartType, factory);
  55.102 +  }
  55.103 +
  55.104 +  private static final int getChartTypeConstant(String type) {
  55.105 +    final int res = ChartTypes.typeList.indexOf(type.toLowerCase());
  55.106 +    if (res < 0) {
  55.107 +      throw new RuntimeException("unsupported chart type " + type);
  55.108 +    }
  55.109 +    return res;
  55.110 +  }
  55.111 +
  55.112 +  private static final int getLayoutConstant(String layout) {
  55.113 +    return LayoutTypes.typeList.indexOf(layout.toLowerCase());
  55.114 +  }
  55.115 +  
  55.116 +  static {
  55.117 +    // histogram chart type
  55.118 +    registerFactory(new CewolfChartFactory("histogram") {
  55.119 +	    public JFreeChart getChartInstance(String title, String xAxisLabel, String yAxisLabel, Dataset data) throws IncompatibleDatasetException {
  55.120 +	        check(data, IntervalXYDataset.class, this.chartType);
  55.121 +	        return ChartFactory.createHistogram(title, xAxisLabel, yAxisLabel, (IntervalXYDataset) data, PlotOrientation.VERTICAL, true, false, false);
  55.122 +	     }
  55.123 +    });
  55.124 +  }
  55.125 +
  55.126 +  public static JFreeChart getChartInstance(String chartType, String title, String xAxisLabel, String yAxisLabel, Dataset data) throws ChartValidationException {
  55.127 +      // first check the dynamically registered chart types
  55.128 +      CewolfChartFactory factory = (CewolfChartFactory) factories.get(chartType);
  55.129 +      if (factory != null) {
  55.130 +          // custom factory found, use it
  55.131 +          return factory.getChartInstance(title, xAxisLabel, yAxisLabel, data);
  55.132 +      }
  55.133 +
  55.134 +    switch (getChartTypeConstant(chartType)) {
  55.135 +      case XY :
  55.136 +        check(data, XYDataset.class, chartType);
  55.137 +        return ChartFactory.createXYLineChart(title, xAxisLabel, yAxisLabel, (XYDataset) data, PlotOrientation.VERTICAL, true, true, true);
  55.138 +      case PIE :
  55.139 +        check(data, PieDataset.class, chartType);
  55.140 +        return ChartFactory.createPieChart(title, (PieDataset) data, true, true, true);
  55.141 +      case AREA_XY :
  55.142 +        check(data, XYDataset.class, chartType);
  55.143 +        return ChartFactory.createXYAreaChart(title, xAxisLabel, yAxisLabel, (XYDataset) data, PlotOrientation.VERTICAL, true, false, false);
  55.144 +      case SCATTER :
  55.145 +        check(data, XYDataset.class, chartType);
  55.146 +        return ChartFactory.createScatterPlot(title, xAxisLabel, yAxisLabel, (XYDataset) data, PlotOrientation.VERTICAL, true, false, false);
  55.147 +      case AREA :
  55.148 +        check(data, CategoryDataset.class, chartType);
  55.149 +        return ChartFactory.createAreaChart(title, xAxisLabel, yAxisLabel, (CategoryDataset) data, PlotOrientation.VERTICAL, true, false, false);
  55.150 +      case HORIZONTAL_BAR :
  55.151 +        check(data, CategoryDataset.class, chartType);
  55.152 +        return ChartFactory.createBarChart(title, xAxisLabel, yAxisLabel, (CategoryDataset) data, PlotOrientation.HORIZONTAL, true, false, false);
  55.153 +      case HORIZONTAL_BAR_3D :
  55.154 +        check(data, CategoryDataset.class, chartType);
  55.155 +        return ChartFactory.createBarChart3D(title, xAxisLabel, yAxisLabel, (CategoryDataset) data, PlotOrientation.HORIZONTAL, true, false, false);
  55.156 +      case LINE :
  55.157 +        check(data, CategoryDataset.class, chartType);
  55.158 +        return ChartFactory.createLineChart(title, xAxisLabel, yAxisLabel, (CategoryDataset) data, PlotOrientation.VERTICAL, true, false, false);
  55.159 +      case STACKED_HORIZONTAL_BAR :
  55.160 +        check(data, CategoryDataset.class, chartType);
  55.161 +        return ChartFactory.createStackedBarChart(title, xAxisLabel, yAxisLabel, (CategoryDataset) data, PlotOrientation.HORIZONTAL, true, false, false);
  55.162 +      case STACKED_VERTICAL_BAR :
  55.163 +        check(data, CategoryDataset.class, chartType);
  55.164 +        return ChartFactory.createStackedBarChart(title, xAxisLabel, yAxisLabel, (CategoryDataset) data, PlotOrientation.VERTICAL, true, false, false);
  55.165 +      case STACKED_VERTICAL_BAR_3D :
  55.166 +        check(data, CategoryDataset.class, chartType);
  55.167 +        return ChartFactory.createStackedBarChart3D(title, xAxisLabel, yAxisLabel, (CategoryDataset) data, PlotOrientation.VERTICAL, true, false, false);
  55.168 +      case VERTICAL_BAR :
  55.169 +        check(data, CategoryDataset.class, chartType);
  55.170 +        return ChartFactory.createBarChart(title, xAxisLabel, yAxisLabel, (CategoryDataset) data, PlotOrientation.VERTICAL, true, false, false);
  55.171 +      case VERTICAL_BAR_3D :
  55.172 +        check(data, CategoryDataset.class, chartType);
  55.173 +        return ChartFactory.createBarChart3D(title, xAxisLabel, yAxisLabel, (CategoryDataset) data, PlotOrientation.VERTICAL, true, false, false);
  55.174 +      case TIME_SERIES :
  55.175 +        check(data, XYDataset.class, chartType);
  55.176 +        return ChartFactory.createTimeSeriesChart(title, xAxisLabel, yAxisLabel, (XYDataset) data, true, false, false);
  55.177 +      case CANDLE_STICK :
  55.178 +        check(data, OHLCDataset.class, chartType);
  55.179 +        return ChartFactory.createCandlestickChart(title, xAxisLabel, yAxisLabel, (OHLCDataset) data, true);
  55.180 +      case HIGH_LOW :
  55.181 +        check(data, OHLCDataset.class, chartType);
  55.182 +        return ChartFactory.createHighLowChart(title, xAxisLabel, yAxisLabel, (OHLCDataset) data, true);
  55.183 +      case GANTT :
  55.184 +        check(data, IntervalCategoryDataset.class, chartType);
  55.185 +        return ChartFactory.createGanttChart(title, xAxisLabel, yAxisLabel, (IntervalCategoryDataset) data, true, false, false);
  55.186 +      case WIND :
  55.187 +        check(data, WindDataset.class, chartType);
  55.188 +        return ChartFactory.createWindPlot(title, xAxisLabel, yAxisLabel, (WindDataset) data, true, false, false);
  55.189 +      //case SIGNAL :
  55.190 +      //  check(data, SignalsDataset.class, chartType);
  55.191 +      //  return ChartFactory.createSignalChart(title, xAxisLabel, yAxisLabel, (SignalsDataset) data, true);
  55.192 +      case VERRTICAL_XY_BAR :
  55.193 +        check(data, IntervalXYDataset.class, chartType);
  55.194 +        return ChartFactory.createXYBarChart(title, xAxisLabel, true,yAxisLabel, (IntervalXYDataset) data, PlotOrientation.VERTICAL, true, false, false);
  55.195 +      case PIE_3D :
  55.196 +        check(data, PieDataset.class, chartType);
  55.197 +        return ChartFactory.createPieChart3D(title, (PieDataset) data, true, false, false);
  55.198 +      case METER :
  55.199 +        check(data, ValueDataset.class, chartType);
  55.200 +        MeterPlot plot = new MeterPlot((ValueDataset) data);
  55.201 +        JFreeChart chart = new JFreeChart(title, plot);
  55.202 +        return chart;
  55.203 +      case STACKED_AREA :
  55.204 +        check(data, CategoryDataset.class, chartType);
  55.205 +        return ChartFactory.createStackedAreaChart(title, xAxisLabel, yAxisLabel, (CategoryDataset) data, PlotOrientation.VERTICAL, true, false, false);
  55.206 +      case BUBBLE :
  55.207 +        check(data, XYZDataset.class, chartType);
  55.208 +        return ChartFactory.createBubbleChart(title, xAxisLabel, yAxisLabel, (XYZDataset) data, PlotOrientation.VERTICAL, true, false, false);
  55.209 +      default :
  55.210 +        throw new UnsupportedChartTypeException(chartType + " is not supported.");
  55.211 +    }
  55.212 +  }
  55.213 +
  55.214 +    public static JFreeChart getOverlaidChartInstance(String chartType, String title, String xAxisLabel, String yAxisLabel, int xAxisType, int yAxisType, List plotDefinitions)
  55.215 +    throws ChartValidationException, DatasetProduceException {
  55.216 +    final int chartTypeConst = getChartTypeConstant(chartType);
  55.217 +    final AxisFactory axisFactory = AxisFactory.getInstance();
  55.218 +    switch (chartTypeConst) {
  55.219 +      case OVERLAY_XY :
  55.220 +        ValueAxis domainAxis = (ValueAxis) axisFactory.createAxis(ORIENTATION_HORIZONTAL, xAxisType, xAxisLabel);
  55.221 +        // get main plot
  55.222 +        PlotDefinition mainPlotDef = (PlotDefinition) plotDefinitions.get(0);
  55.223 +        check((Dataset) mainPlotDef.getDataset(), XYDataset.class, chartType);
  55.224 +        XYPlot plot = (XYPlot) mainPlotDef.getPlot(chartTypeConst);
  55.225 +        plot.setDomainAxis(domainAxis);
  55.226 +        plot.setRangeAxis((ValueAxis) axisFactory.createAxis(ORIENTATION_VERTICAL, yAxisType, yAxisLabel));
  55.227 +        //plot.setRenderer(new StandardXYItemRenderer());
  55.228 +        // add second and later datasets to main plot
  55.229 +        for (int plotidx = 1;plotidx<plotDefinitions.size();plotidx++) {
  55.230 +          PlotDefinition subPlotDef = (PlotDefinition) plotDefinitions.get(plotidx);
  55.231 +          check((Dataset) subPlotDef.getDataset(), XYDataset.class, chartType);
  55.232 +          plot.setDataset(plotidx, (XYDataset)subPlotDef.getDataset());
  55.233 +
  55.234 +          int rendererIndex = PlotTypes.getRendererIndex(subPlotDef.getType());
  55.235 +          XYItemRenderer rend = (XYItemRenderer) PlotTypes.getRenderer(rendererIndex);
  55.236 +          plot.setRenderer(plotidx, rend);
  55.237 +        }
  55.238 +        return new JFreeChart(title, JFreeChart.DEFAULT_TITLE_FONT, plot, true);
  55.239 +      case OVERLAY_CATEGORY ://added by lrh 2005-07-11
  55.240 +        CategoryAxis domainAxis2 = (CategoryAxis)axisFactory.createAxis(ORIENTATION_HORIZONTAL, xAxisType, xAxisLabel);
  55.241 +        // get main plot
  55.242 +        mainPlotDef = (PlotDefinition) plotDefinitions.get(0);
  55.243 +        check((Dataset) mainPlotDef.getDataset(), CategoryDataset.class, chartType);
  55.244 +        CategoryPlot plot2 = (CategoryPlot) mainPlotDef.getPlot(chartTypeConst);
  55.245 +        plot2.setDomainAxis(domainAxis2);
  55.246 +        plot2.setRangeAxis((ValueAxis)axisFactory.createAxis(ORIENTATION_VERTICAL, yAxisType, yAxisLabel));
  55.247 +        //plot.setRenderer(new StandardXYItemRenderer());
  55.248 +        // add second and later datasets to main plot
  55.249 +        for (int plotidx = 1;plotidx<plotDefinitions.size();plotidx++) {
  55.250 +          PlotDefinition subPlotDef = (PlotDefinition) plotDefinitions.get(plotidx);
  55.251 +          check((Dataset) subPlotDef.getDataset(), CategoryDataset.class, chartType);
  55.252 +          plot2.setDataset(plotidx, (CategoryDataset)subPlotDef.getDataset());
  55.253 +
  55.254 +          int rendererIndex = PlotTypes.getRendererIndex(subPlotDef.getType()); 
  55.255 +          CategoryItemRenderer rend2 = (CategoryItemRenderer) PlotTypes.getRenderer(rendererIndex);
  55.256 +          plot2.setRenderer(plotidx, rend2);
  55.257 +        }
  55.258 +        return new JFreeChart(title, JFreeChart.DEFAULT_TITLE_FONT, plot2, true);
  55.259 +      default :
  55.260 +        throw new UnsupportedChartTypeException(chartType + " is not supported.");
  55.261 +    }
  55.262 +  }
  55.263 +
  55.264 +  // [tb]
  55.265 +  public static JFreeChart getCombinedChartInstance(String chartType, String title, String xAxisLabel, String yAxisLabel, List plotDefinitions, String layout)
  55.266 +    throws ChartValidationException, DatasetProduceException {
  55.267 +    final int chartTypeConst = getChartTypeConstant(chartType);
  55.268 +    switch (chartTypeConst) {
  55.269 +      case COMBINED_XY :
  55.270 +        final int layoutConst = getLayoutConstant(layout);
  55.271 +        Plot plot = null;
  55.272 +        switch (layoutConst) {
  55.273 +          case DOMAIN :
  55.274 +            ValueAxis domainAxis = new DateAxis(xAxisLabel);
  55.275 +            plot = new CombinedDomainXYPlot(domainAxis);
  55.276 +            for (int i = 0; i < plotDefinitions.size(); i++) {
  55.277 +              PlotDefinition pd = (PlotDefinition) plotDefinitions.get(i);
  55.278 +              check((Dataset) pd.getDataset(), XYDataset.class, chartType);
  55.279 +              XYPlot temp = (XYPlot) pd.getPlot(chartTypeConst);
  55.280 +              temp.setRangeAxis(new NumberAxis(pd.getYaxislabel()));
  55.281 +              ((CombinedDomainXYPlot) plot).add(temp);
  55.282 +            }
  55.283 +            return new JFreeChart(title, JFreeChart.DEFAULT_TITLE_FONT, plot, true);
  55.284 +          case RANGE :
  55.285 +            ValueAxis rangeAxis = new NumberAxis(yAxisLabel);
  55.286 +            plot = new CombinedRangeXYPlot(rangeAxis);
  55.287 +            for (int i = 0; i < plotDefinitions.size(); i++) {
  55.288 +              PlotDefinition pd = (PlotDefinition) plotDefinitions.get(i);
  55.289 +              check((Dataset) pd.getDataset(), XYDataset.class, chartType);
  55.290 +              XYPlot temp = (XYPlot) pd.getPlot(chartTypeConst);
  55.291 +              temp.setDomainAxis(new DateAxis(pd.getXaxislabel()));
  55.292 +              ((CombinedRangeXYPlot) plot).add(temp);
  55.293 +            }
  55.294 +            return new JFreeChart(title, JFreeChart.DEFAULT_TITLE_FONT, plot, true);
  55.295 +          default :
  55.296 +            throw new AttributeValidationException(layout, " any value");
  55.297 +        }
  55.298 +      default :
  55.299 +        throw new UnsupportedChartTypeException(chartType);
  55.300 +    }
  55.301 +  }
  55.302 +
  55.303 +  /**
  55.304 +   * Helper to check if the given dataset is the expected type.
  55.305 +   * @param data The dataset
  55.306 +   * @param clazz Expected type (class)
  55.307 +   * @param chartType The chart type string
  55.308 +   * @throws IncompatibleDatasetException If not the expected class
  55.309 +   */
  55.310 +  public static void check(Dataset data, Class clazz, String chartType) throws IncompatibleDatasetException {
  55.311 +    if (!clazz.isInstance(data)) {
  55.312 +      throw new IncompatibleDatasetException("Charts of type " + chartType + " " + "need datasets of type " + clazz.getName());
  55.313 +    }
  55.314 +  }
  55.315 +
  55.316 +}
    56.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    56.2 +++ b/java/cewolf-1.0/src/main/java/de/laures/cewolf/taglib/ChartConstants.java	Sat Feb 28 21:31:02 2009 +0100
    56.3 @@ -0,0 +1,60 @@
    56.4 +/* ================================================================
    56.5 + * Cewolf : Chart enabling Web Objects Framework
    56.6 + * ================================================================
    56.7 + *
    56.8 + * Project Info:  http://cewolf.sourceforge.net
    56.9 + * Project Lead:  Guido Laures (guido@laures.de);
   56.10 + *
   56.11 + * (C) Copyright 2002, by Guido Laures
   56.12 + *
   56.13 + * This library is free software; you can redistribute it and/or modify it under the terms
   56.14 + * of the GNU Lesser General Public License as published by the Free Software Foundation;
   56.15 + * either version 2.1 of the License, or (at your option) any later version.
   56.16 + *
   56.17 + * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
   56.18 + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
   56.19 + * See the GNU Lesser General Public License for more details.
   56.20 + *
   56.21 + * You should have received a copy of the GNU Lesser General Public License along with this
   56.22 + * library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
   56.23 + * Boston, MA 02111-1307, USA.
   56.24 + */
   56.25 +
   56.26 +package de.laures.cewolf.taglib;
   56.27 +
   56.28 +/**
   56.29 + * Contains some base constants to avoid explicit dependancy to concrete chart 
   56.30 + * implementation's constant values. The constants of this class also serve as
   56.31 + * the base contract for data exchange between sub packages.
   56.32 + * @author  Guido Laures
   56.33 + */
   56.34 +public interface ChartConstants {
   56.35 +
   56.36 +    int AREA = 0;
   56.37 +    int AREA_XY = 1;
   56.38 +    int HORIZONTAL_BAR = 2;
   56.39 +    int HORIZONTAL_BAR_3D = 3;
   56.40 +    int LINE = 4;
   56.41 +    int PIE = 5;
   56.42 +    int SCATTER = 6;
   56.43 +    int STACKED_HORIZONTAL_BAR = 7;
   56.44 +    int STACKED_VERTICAL_BAR = 8;
   56.45 +    int STACKED_VERTICAL_BAR_3D = 9;
   56.46 +    int TIME_SERIES = 10;
   56.47 +    int VERTICAL_BAR = 11;
   56.48 +    int VERTICAL_BAR_3D = 12;
   56.49 +    int XY = 13;
   56.50 +    int CANDLE_STICK = 14;
   56.51 +    int HIGH_LOW = 15;
   56.52 +    int GANTT = 16;
   56.53 +    int WIND = 17;
   56.54 +    int SIGNAL = 18;
   56.55 +    int VERRTICAL_XY_BAR = 19;
   56.56 +    int PIE_3D = 20;
   56.57 +    int OVERLAY_XY = 21;
   56.58 +    int OVERLAY_CATEGORY = 22;
   56.59 +    int COMBINED_XY = 23;
   56.60 +    int METER = 24;
   56.61 +    int STACKED_AREA = 25;
   56.62 +    int BUBBLE = 26;
   56.63 +}
    57.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    57.2 +++ b/java/cewolf-1.0/src/main/java/de/laures/cewolf/taglib/ChartImageDefinition.java	Sat Feb 28 21:31:02 2009 +0100
    57.3 @@ -0,0 +1,169 @@
    57.4 +/* ================================================================
    57.5 + * Cewolf : Chart enabling Web Objects Framework
    57.6 + * ================================================================
    57.7 + *
    57.8 + * Project Info:  http://cewolf.sourceforge.net
    57.9 + * Project Lead:  Guido Laures (guido@laures.de);
   57.10 + *
   57.11 + * (C) Copyright 2002, by Guido Laures
   57.12 + *
   57.13 + * This library is free software; you can redistribute it and/or modify it under the terms
   57.14 + * of the GNU Lesser General Public License as published by the Free Software Foundation;
   57.15 + * either version 2.1 of the License, or (at your option) any later version.
   57.16 + *
   57.17 + * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
   57.18 + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
   57.19 + * See the GNU Lesser General Public License for more details.
   57.20 + *
   57.21 + * You should have received a copy of the GNU Lesser General Public License along with this
   57.22 + * library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
   57.23 + * Boston, MA 02111-1307, USA.
   57.24 + */
   57.25 +
   57.26 +package de.laures.cewolf.taglib;
   57.27 +
   57.28 +import java.io.Serializable;
   57.29 +import java.util.Calendar;
   57.30 +import java.util.Date;
   57.31 +import java.util.GregorianCalendar;
   57.32 +
   57.33 +import org.apache.commons.logging.Log;
   57.34 +import org.apache.commons.logging.LogFactory;
   57.35 +
   57.36 +import de.laures.cewolf.CewolfException;
   57.37 +import de.laures.cewolf.ChartHolder;
   57.38 +import de.laures.cewolf.ChartImage;
   57.39 +import de.laures.cewolf.ChartValidationException;
   57.40 +import de.laures.cewolf.DatasetProduceException;
   57.41 +import de.laures.cewolf.PostProcessingException;
   57.42 +import de.laures.cewolf.event.ChartImageRenderListener;
   57.43 +import de.laures.cewolf.util.RenderedImage;
   57.44 +import de.laures.cewolf.util.Renderer;
   57.45 +
   57.46 +/**
   57.47 + * Serializable implementaton of a ChartImage.
   57.48 + * @author glaures
   57.49 + * @see de.laures.cewolf.ChartImage
   57.50 + */
   57.51 +public class ChartImageDefinition implements ChartImage, ChartHolder, Serializable {
   57.52 +	
   57.53 +    private static final Log log = LogFactory.getLog(ChartImageDefinition.class);
   57.54 +
   57.55 +	private final ChartHolder chartHolder;
   57.56 +	private final int height;
   57.57 +	private final int width;
   57.58 +	private final int type;
   57.59 +	private final String mimeType;
   57.60 +	transient private final Date timeoutTime;
   57.61 +	
   57.62 +	private RenderedImage renderedImage;
   57.63 +
   57.64 +	/**
   57.65 +	 * Constructor for ChartImage
   57.66 +	 */
   57.67 +	public ChartImageDefinition(ChartHolder ch, int width, int height, int type, String mimeType, int timeout) {
   57.68 +		if(width <= 0 || height <= 0){
   57.69 +			throw new IllegalArgumentException("ChartImage with height or width <= 0 is illegal");
   57.70 +		}
   57.71 +		this.chartHolder = ch;
   57.72 +		this.width = width;
   57.73 +		this.height = height;
   57.74 +		this.type = type;
   57.75 +		this.mimeType = mimeType;
   57.76 +    Calendar cal = new GregorianCalendar();
   57.77 +    cal.add(Calendar.SECOND,timeout);
   57.78 +    this.timeoutTime = cal.getTime();
   57.79 +	}
   57.80 +		
   57.81 +	/**
   57.82 +	 * Returns the height.
   57.83 +	 * @return int
   57.84 +	 */
   57.85 +	public int getHeight() {
   57.86 +		return height;
   57.87 +	}
   57.88 +
   57.89 +	/**
   57.90 +	 * Returns the width.
   57.91 +	 * @return int
   57.92 +	 */
   57.93 +	public int getWidth() {
   57.94 +		return width;
   57.95 +	}
   57.96 +
   57.97 +	public int getType() {
   57.98 +		return type;
   57.99 +	}
  57.100 +
  57.101 +	public Object getChart() throws DatasetProduceException, ChartValidationException, PostProcessingException {
  57.102 +		return chartHolder.getChart();
  57.103 +	}
  57.104 +
  57.105 +	public Object getDataset() throws DatasetProduceException {
  57.106 +		return chartHolder.getDataset();
  57.107 +	}
  57.108 +
  57.109 +	/**
  57.110 +	 * Returns the mimeType.
  57.111 +	 * @return String
  57.112 +	 */
  57.113 +	public String getMimeType() {
  57.114 +		return mimeType;
  57.115 +	}
  57.116 +	
  57.117 +	/**
  57.118 +	 * @see java.lang.Object#finalize()
  57.119 +	 */
  57.120 +	protected void finalize() throws Throwable {
  57.121 +		super.finalize();
  57.122 +		log.debug(this + " finalized.");
  57.123 +	}
  57.124 +	
  57.125 +	/**
  57.126 +	 * @see de.laures.cewolf.ChartImage#getRenderingInfo()
  57.127 +	 */
  57.128 +	public Object getRenderingInfo() throws CewolfException {
  57.129 +		ensureRendered();
  57.130 +		return renderedImage.renderingInfo;
  57.131 +	}
  57.132 +	
  57.133 +	public byte[] getBytes() throws CewolfException{
  57.134 +		ensureRendered();
  57.135 +		return renderedImage.data;
  57.136 +	}
  57.137 +	
  57.138 +	private void ensureRendered() throws CewolfException{
  57.139 +		if(renderedImage == null){
  57.140 +			renderedImage = Renderer.render(this, chartHolder.getChart());
  57.141 +			onImageRendered(renderedImage);
  57.142 +		}
  57.143 +	}
  57.144 +
  57.145 +	/**
  57.146 +	 * @see de.laures.cewolf.ChartImage#getSize()
  57.147 +	 */
  57.148 +	public int getSize() throws CewolfException {
  57.149 +		ensureRendered();
  57.150 +		return renderedImage.data.length;
  57.151 +	}
  57.152 +
  57.153 +	/* (non-Javadoc)
  57.154 +	 * @see de.laures.cewolf.ChartImage#getTimeoutTime()
  57.155 +	 */
  57.156 +	public Date getTimeoutTime() {
  57.157 +		return timeoutTime;
  57.158 +	}
  57.159 +
  57.160 +	/**
  57.161 +	 * Implemented onImageRendered method.
  57.162 +	 * @see de.laures.cewolf.ChartHolder#onImageRendered(de.laures.cewolf.util.RenderedImage).
  57.163 +	 * @param renderedImage The image
  57.164 +	 */
  57.165 +	private void onImageRendered(RenderedImage renderedImage) {
  57.166 +		if (chartHolder instanceof ChartImageRenderListener) {
  57.167 +			// delegate to chartHolder if it's interested...
  57.168 +			((ChartImageRenderListener) chartHolder).onImageRendered(renderedImage);
  57.169 +		}
  57.170 +	}
  57.171 +
  57.172 +}
    58.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    58.2 +++ b/java/cewolf-1.0/src/main/java/de/laures/cewolf/taglib/ChartTypes.java	Sat Feb 28 21:31:02 2009 +0100
    58.3 @@ -0,0 +1,75 @@
    58.4 +/* ================================================================
    58.5 + * Cewolf : Chart enabling Web Objects Framework
    58.6 + * ================================================================
    58.7 + *
    58.8 + * Project Info:  http://cewolf.sourceforge.net
    58.9 + * Project Lead:  Guido Laures (guido@laures.de);
   58.10 + *
   58.11 + * (C) Copyright 2002, by Guido Laures
   58.12 + *
   58.13 + * This library is free software; you can redistribute it and/or modify it under the terms
   58.14 + * of the GNU Lesser General Public License as published by the Free Software Foundation;
   58.15 + * either version 2.1 of the License, or (at your option) any later version.
   58.16 + *
   58.17 + * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
   58.18 + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
   58.19 + * See the GNU Lesser General Public License for more details.
   58.20 + *
   58.21 + * You should have received a copy of the GNU Lesser General Public License along with this
   58.22 + * library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
   58.23 + * Boston, MA 02111-1307, USA.
   58.24 + */
   58.25 +
   58.26 +package de.laures.cewolf.taglib;
   58.27 +
   58.28 +import java.util.Arrays;
   58.29 +import java.util.List;
   58.30 +
   58.31 +/**
   58.32 + * Contains the list of all possible chart type string values which can be used
   58.33 + * in the <code>type</code> attribute of a &lt;chart&gt; tag.
   58.34 + * @author  Guido Laures
   58.35 + */
   58.36 +public class ChartTypes {
   58.37 +
   58.38 +    /** All type strings in an array */
   58.39 +    public static final String[] typeNames =    {
   58.40 +        "area",
   58.41 +        "areaxy",
   58.42 +        "horizontalbar",
   58.43 +        "horizontalbar3d",
   58.44 +        "line",
   58.45 +        "pie",
   58.46 +        "scatter",
   58.47 +        "stackedhorizontalbar",
   58.48 +        "stackedverticalbar",
   58.49 +        "stackedverticalbar3d",
   58.50 +        "timeseries",
   58.51 +        "verticalbar",
   58.52 +        "verticalbar3d",
   58.53 +        "xy",
   58.54 +        "candlestick",
   58.55 +        "highlow",
   58.56 +        "gantt",
   58.57 +        "wind",
   58.58 +        "signal",
   58.59 +        "verticalxybar",
   58.60 +        "pie3d",
   58.61 +        "overlaidxy",
   58.62 +        "overlaidcategory",
   58.63 +        "combinedxy",
   58.64 +        "meter",
   58.65 +        "stackedarea",
   58.66 +        "bubble"
   58.67 +    };
   58.68 +
   58.69 +    /**
   58.70 +     * The whole typeNames array inside of a list.
   58.71 +     * @see #typeNames
   58.72 +     */
   58.73 +    public static final List typeList = Arrays.asList(typeNames);
   58.74 +
   58.75 +    private ChartTypes() {
   58.76 +    }
   58.77 +
   58.78 +}
    59.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    59.2 +++ b/java/cewolf-1.0/src/main/java/de/laures/cewolf/taglib/CombinedChartDefinition.java	Sat Feb 28 21:31:02 2009 +0100
    59.3 @@ -0,0 +1,43 @@
    59.4 +package de.laures.cewolf.taglib;
    59.5 +
    59.6 +import java.io.Serializable;
    59.7 +import java.util.ArrayList;
    59.8 +import java.util.List;
    59.9 +
   59.10 +import org.jfree.chart.JFreeChart;
   59.11 +import org.jfree.chart.plot.DefaultDrawingSupplier;
   59.12 +import org.jfree.chart.plot.DrawingSupplier;
   59.13 +
   59.14 +import de.laures.cewolf.ChartValidationException;
   59.15 +import de.laures.cewolf.DatasetProduceException;
   59.16 +
   59.17 +/**
   59.18 + * Chart definition subclass to handle combined charts
   59.19 + *
   59.20 + * @author guido
   59.21 + * @author tbardzil
   59.22 + */
   59.23 +public class CombinedChartDefinition extends AbstractChartDefinition implements Serializable {
   59.24 +    private String layout;
   59.25 +
   59.26 +    private List plotDefinitions = new ArrayList();
   59.27 +    private transient DrawingSupplier drawingSupplier = new DefaultDrawingSupplier();
   59.28 +
   59.29 +    public void setLayout(String layout) {
   59.30 +        this.layout = layout;
   59.31 +    }
   59.32 +
   59.33 +    public Object getDataset() throws DatasetProduceException {
   59.34 +        return ((PlotDefinition)plotDefinitions.get(0)).getDataset();
   59.35 +    }
   59.36 +
   59.37 +    public void addPlot(PlotDefinition pd) {
   59.38 +        pd.setDrawingSupplier(drawingSupplier);
   59.39 +        plotDefinitions.add(pd);
   59.40 +    }
   59.41 +
   59.42 +    protected JFreeChart produceChart() throws DatasetProduceException, ChartValidationException {
   59.43 +        return CewolfChartFactory.getCombinedChartInstance(type, title, xAxisLabel, yAxisLabel, plotDefinitions, layout);
   59.44 +    }
   59.45 +
   59.46 +}
    60.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    60.2 +++ b/java/cewolf-1.0/src/main/java/de/laures/cewolf/taglib/DataAware.java	Sat Feb 28 21:31:02 2009 +0100
    60.3 @@ -0,0 +1,13 @@
    60.4 +package de.laures.cewolf.taglib;
    60.5 +
    60.6 +import java.util.Map;
    60.7 +
    60.8 +import de.laures.cewolf.DatasetProducer;
    60.9 +
   60.10 +/**
   60.11 + * @author glaures
   60.12 + */
   60.13 +public interface DataAware {
   60.14 +	
   60.15 +	public void setDataProductionConfig(DatasetProducer dsp, Map params, boolean useCache);
   60.16 +}
    61.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    61.2 +++ b/java/cewolf-1.0/src/main/java/de/laures/cewolf/taglib/DataContainer.java	Sat Feb 28 21:31:02 2009 +0100
    61.3 @@ -0,0 +1,96 @@
    61.4 +/*
    61.5 + * Created on 13.04.2003
    61.6 + *
    61.7 + * To change the template for this generated file go to
    61.8 + * Window>Preferences>Java>Code Generation>Code and Comments
    61.9 + */
   61.10 +package de.laures.cewolf.taglib;
   61.11 +
   61.12 +import java.io.Serializable;
   61.13 +import java.util.Date;
   61.14 +import java.util.Map;
   61.15 +
   61.16 +import org.apache.commons.logging.Log;
   61.17 +import org.apache.commons.logging.LogFactory;
   61.18 +import org.jfree.data.general.Dataset;
   61.19 +
   61.20 +import de.laures.cewolf.DatasetProduceException;
   61.21 +import de.laures.cewolf.DatasetProducer;
   61.22 +import de.laures.cewolf.taglib.util.DatasetProductionTimeStore;
   61.23 +import de.laures.cewolf.taglib.util.KeyGenerator;
   61.24 +import de.laures.cewolf.util.Assert;
   61.25 +
   61.26 +/**
   61.27 + * @author guido
   61.28 + *
   61.29 + * To change the template for this generated type comment go to
   61.30 + * Window>Preferences>Java>Code Generation>Code and Comments
   61.31 + */
   61.32 +public class DataContainer implements DataAware, Serializable {
   61.33 +
   61.34 +    private static transient final Log log = LogFactory.getLog(ChartImageDefinition.class);
   61.35 +
   61.36 +    private transient Dataset data;
   61.37 +    private transient DatasetProducer producer;
   61.38 +
   61.39 +    private Map datasetProductionParams;
   61.40 +    private long datasetProduceTime;
   61.41 +    private boolean useCache = true;
   61.42 +
   61.43 +    public void setDataProductionConfig(DatasetProducer dsp, Map params, boolean useCache) {
   61.44 +        log.debug("setDataProductionConfig");
   61.45 +        producer = dsp;
   61.46 +        datasetProductionParams = params;
   61.47 +        this.useCache = useCache;
   61.48 +        checkDataProductionNeed();
   61.49 +    }
   61.50 +
   61.51 +    public Object getDataset() throws DatasetProduceException {
   61.52 +        Assert.check(producer != null, "you need to specifiy a producer for the data of the chart.");
   61.53 +        log.debug("getting data..");
   61.54 +        if (data == null) {
   61.55 +            log.debug("producing new dataset for " + producer.getProducerId());
   61.56 +            data = (Dataset) producer.produceDataset(datasetProductionParams);
   61.57 +            DatasetProductionTimeStore dataCache = DatasetProductionTimeStore.getInstance();
   61.58 +            dataCache.addEntry(producer.getProducerId(), datasetProductionParams, new Date(datasetProduceTime));
   61.59 +        }
   61.60 +        Assert.check(data != null, "your producer of type " + producer.getClass().getName() + " produced a null dataset.");
   61.61 +        return data;
   61.62 +    }
   61.63 +
   61.64 +    /**
   61.65 +     * This method checks if there has been a dataset production 
   61.66 +     * for the same DatasetProvider and parameters. If so the DatasetProducer
   61.67 +     * is consulted to check the expiry of this data.
   61.68 +     * If the data has expired the retrieval of a cached image of this
   61.69 +     * ChartDefinition is avoided by setting the datasetProduceTime to the
   61.70 +     * actual time. After this the hash code of this object can not be
   61.71 +     * present in the image cache and so a new image with new data will
   61.72 +     * be rendered.
   61.73 +     * If the data did not expire the last dataset production time is stored
   61.74 +     * as a memeber to reach the same hash code for this object as the one
   61.75 +     * before if possible.
   61.76 +     * This method is called during serialization to ensure the same serialized
   61.77 +     * representation of this and a eventually formally stored object.
   61.78 +     */
   61.79 +    private void checkDataProductionNeed() {
   61.80 +        log.debug("checking data actuality..." + producer + ", " + datasetProductionParams);
   61.81 +        final String prodId = producer.getProducerId();
   61.82 +        log.debug(prodId + ", " + KeyGenerator.generateKey((Serializable)datasetProductionParams));
   61.83 +        log.debug("useCache = " + useCache);
   61.84 +        DatasetProductionTimeStore dataCache = DatasetProductionTimeStore.getInstance();
   61.85 +        if (useCache && dataCache.containsEntry(prodId, datasetProductionParams)) {
   61.86 +            Date produceTime = dataCache.getProductionTime(prodId, datasetProductionParams);
   61.87 +            log.debug("cached data available.");
   61.88 +            // cached data available
   61.89 +            if (!producer.hasExpired(datasetProductionParams, produceTime)) {
   61.90 +                log.debug("cached data is still valid.");
   61.91 +                this.datasetProduceTime = produceTime.getTime();
   61.92 +                return;
   61.93 +            }
   61.94 +            dataCache.removeEntry(prodId, datasetProductionParams);
   61.95 +        }
   61.96 +        datasetProduceTime = System.currentTimeMillis();
   61.97 +    }
   61.98 +
   61.99 +}
    62.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    62.2 +++ b/java/cewolf-1.0/src/main/java/de/laures/cewolf/taglib/IncompatibleDatasetException.java	Sat Feb 28 21:31:02 2009 +0100
    62.3 @@ -0,0 +1,43 @@
    62.4 +/* ================================================================
    62.5 + * Cewolf : Chart enabling Web Objects Framework
    62.6 + * ================================================================
    62.7 + *
    62.8 + * Project Info:  http://cewolf.sourceforge.net
    62.9 + * Project Lead:  Guido Laures (guido@laures.de);
   62.10 + *
   62.11 + * (C) Copyright 2002, by Guido Laures
   62.12 + *
   62.13 + * This library is free software; you can redistribute it and/or modify it under the terms
   62.14 + * of the GNU Lesser General Public License as published by the Free Software Foundation;
   62.15 + * either version 2.1 of the License, or (at your option) any later version.
   62.16 + *
   62.17 + * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
   62.18 + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
   62.19 + * See the GNU Lesser General Public License for more details.
   62.20 + *
   62.21 + * You should have received a copy of the GNU Lesser General Public License along with this
   62.22 + * library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
   62.23 + * Boston, MA 02111-1307, USA.
   62.24 + */
   62.25 +
   62.26 +package de.laures.cewolf.taglib;
   62.27 +
   62.28 +import de.laures.cewolf.ChartValidationException;
   62.29 +
   62.30 +/**
   62.31 + * This exception is thrown if a chart is created with an incompatible dataset.
   62.32 + * @author glaures
   62.33 + * @since 0.9
   62.34 + */
   62.35 +public class IncompatibleDatasetException extends ChartValidationException {
   62.36 +
   62.37 +	
   62.38 +	/**
   62.39 +	 * Constructor for IncompatibleDatasetException.
   62.40 +	 * @param msg the excpetion message
   62.41 +	 */
   62.42 +	public IncompatibleDatasetException(String msg) {
   62.43 +		super(msg);
   62.44 +	}
   62.45 +
   62.46 +}
    63.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    63.2 +++ b/java/cewolf-1.0/src/main/java/de/laures/cewolf/taglib/LayoutConstants.java	Sat Feb 28 21:31:02 2009 +0100
    63.3 @@ -0,0 +1,38 @@
    63.4 +/* ================================================================
    63.5 + * Cewolf : Chart enabling Web Objects Framework
    63.6 + * ================================================================
    63.7 + *
    63.8 + * Project Info:  http://cewolf.sourceforge.net
    63.9 + * Project Lead:  Guido Laures (guido@laures.de);
   63.10 + *
   63.11 + * (C) Copyright 2002, by Guido Laures
   63.12 + *
   63.13 + * This library is free software; you can redistribute it and/or modify it under the terms
   63.14 + * of the GNU Lesser General Public License as published by the Free Software Foundation;
   63.15 + * either version 2.1 of the License, or (at your option) any later version.
   63.16 + *
   63.17 + * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
   63.18 + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
   63.19 + * See the GNU Lesser General Public License for more details.
   63.20 + *
   63.21 + * You should have received a copy of the GNU Lesser General Public License along with this
   63.22 + * library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
   63.23 + * Boston, MA 02111-1307, USA.
   63.24 + */
   63.25 +
   63.26 +package de.laures.cewolf.taglib;
   63.27 +
   63.28 +/**
   63.29 + * Contains some base constants to avoid explicit dependancy to concrete chart 
   63.30 + * implementation's constant values. The constants of this class also serve as
   63.31 + * the base contract for data exchange between sub packages.
   63.32 + *
   63.33 + * @author  Guido Laures
   63.34 + * @author Tim Bardzil
   63.35 + */
   63.36 +public interface LayoutConstants {
   63.37 +
   63.38 +    int DOMAIN = 0;
   63.39 +    int RANGE = 1;
   63.40 +
   63.41 +}
    64.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    64.2 +++ b/java/cewolf-1.0/src/main/java/de/laures/cewolf/taglib/LayoutTypes.java	Sat Feb 28 21:31:02 2009 +0100
    64.3 @@ -0,0 +1,51 @@
    64.4 +/* ================================================================
    64.5 + * Cewolf : Chart enabling Web Objects Framework
    64.6 + * ================================================================
    64.7 + *
    64.8 + * Project Info:  http://cewolf.sourceforge.net
    64.9 + * Project Lead:  Guido Laures (guido@laures.de);
   64.10 + *
   64.11 + * (C) Copyright 2002, by Guido Laures
   64.12 + *
   64.13 + * This library is free software; you can redistribute it and/or modify it under the terms
   64.14 + * of the GNU Lesser General Public License as published by the Free Software Foundation;
   64.15 + * either version 2.1 of the License, or (at your option) any later version.
   64.16 + *
   64.17 + * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
   64.18 + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
   64.19 + * See the GNU Lesser General Public License for more details.
   64.20 + *
   64.21 + * You should have received a copy of the GNU Lesser General Public License along with this
   64.22 + * library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
   64.23 + * Boston, MA 02111-1307, USA.
   64.24 + */
   64.25 +
   64.26 +package de.laures.cewolf.taglib;
   64.27 +
   64.28 +import java.util.Arrays;
   64.29 +import java.util.List;
   64.30 +
   64.31 +/**
   64.32 + * Contains the list of all possible layout type string values which can be used
   64.33 + * in the <code>layout</code> attribute of a &lt;combined-chart&gt; tag.
   64.34 + * @author  Guido Laures
   64.35 + * @author Tim Bardzil
   64.36 + */
   64.37 +public class LayoutTypes {
   64.38 +
   64.39 +    /** All layout strings in an array */
   64.40 +    public static final String[] typeNames =    {
   64.41 +        "vertical",
   64.42 +        "horizontal",
   64.43 +    };
   64.44 +
   64.45 +    /**
   64.46 +     * The whole typeNames array inside of a list.
   64.47 +     * @see #typeNames
   64.48 +     */
   64.49 +    public static final List typeList = Arrays.asList(typeNames);
   64.50 +
   64.51 +    private LayoutTypes() {
   64.52 +    }
   64.53 +
   64.54 +}
    65.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    65.2 +++ b/java/cewolf-1.0/src/main/java/de/laures/cewolf/taglib/OverlaidChartDefinition.java	Sat Feb 28 21:31:02 2009 +0100
    65.3 @@ -0,0 +1,64 @@
    65.4 +/*
    65.5 + * Created on 13.04.2003
    65.6 + *
    65.7 + * To change the template for this generated file go to
    65.8 + * Window>Preferences>Java>Code Generation>Code and Comments
    65.9 + */
   65.10 +package de.laures.cewolf.taglib;
   65.11 +
   65.12 +import java.io.Serializable;
   65.13 +import java.util.ArrayList;
   65.14 +import java.util.List;
   65.15 +
   65.16 +import org.jfree.chart.JFreeChart;
   65.17 +import org.jfree.chart.plot.DefaultDrawingSupplier;
   65.18 +import org.jfree.chart.plot.DrawingSupplier;
   65.19 +
   65.20 +import de.laures.cewolf.ChartValidationException;
   65.21 +import de.laures.cewolf.DatasetProduceException;
   65.22 +
   65.23 +/**
   65.24 + * @author guido
   65.25 + *
   65.26 + * To change the template for this generated type comment go to
   65.27 + * Window>Preferences>Java>Code Generation>Code and Comments
   65.28 + */
   65.29 +public class OverlaidChartDefinition extends AbstractChartDefinition implements Serializable {
   65.30 +
   65.31 +	private int xAxisType = 0;
   65.32 +	private int yAxisType = 0;
   65.33 +	
   65.34 +    private List plotDefinitions = new ArrayList();
   65.35 +    private transient DrawingSupplier drawingSupplier = new DefaultDrawingSupplier();
   65.36 +
   65.37 +    public Object getDataset() throws DatasetProduceException {
   65.38 +        return ((PlotDefinition)plotDefinitions.get(0)).getDataset();
   65.39 +    }
   65.40 +
   65.41 +    public void addPlot(PlotDefinition pd) {
   65.42 +        pd.setDrawingSupplier(drawingSupplier);
   65.43 +        plotDefinitions.add(pd);
   65.44 +    }
   65.45 +
   65.46 +    protected JFreeChart produceChart() throws DatasetProduceException, ChartValidationException {
   65.47 +        log.debug("xAxisType = " + xAxisType);
   65.48 +        return CewolfChartFactory.getOverlaidChartInstance(type, title, xAxisLabel, yAxisLabel, xAxisType, yAxisType, plotDefinitions);
   65.49 +    }
   65.50 +
   65.51 +	/**
   65.52 +	 * Sets the xAxisType.
   65.53 +	 * @param xAxisType The xAxisType to set
   65.54 +	 */
   65.55 +	public void setXAxisType(int xAxisType) {
   65.56 +		this.xAxisType = xAxisType;
   65.57 +	}
   65.58 +
   65.59 +	/**
   65.60 +	 * Sets the yAxisType.
   65.61 +	 * @param yAxisType The yAxisType to set
   65.62 +	 */
   65.63 +	public void setYAxisType(int yAxisType) {
   65.64 +		this.yAxisType = yAxisType;
   65.65 +	}
   65.66 +
   65.67 +}
    66.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    66.2 +++ b/java/cewolf-1.0/src/main/java/de/laures/cewolf/taglib/PlotConstants.java	Sat Feb 28 21:31:02 2009 +0100
    66.3 @@ -0,0 +1,45 @@
    66.4 +/* ================================================================
    66.5 + * Cewolf : Chart enabling Web Objects Framework
    66.6 + * ================================================================
    66.7 + *
    66.8 + * Project Info:  http://cewolf.sourceforge.net
    66.9 + * Project Lead:  Guido Laures (guido@laures.de);
   66.10 + *
   66.11 + * (C) Copyright 2002, by Guido Laures and contributers
   66.12 + *
   66.13 + * This library is free software; you can redistribute it and/or modify it under the terms
   66.14 + * of the GNU Lesser General Public License as published by the Free Software Foundation;
   66.15 + * either version 2.1 of the License, or (at your option) any later version.
   66.16 + *
   66.17 + * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
   66.18 + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
   66.19 + * See the GNU Lesser General Public License for more details.
   66.20 + *
   66.21 + * You should have received a copy of the GNU Lesser General Public License along with this
   66.22 + * library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
   66.23 + * Boston, MA 02111-1307, USA.
   66.24 + */
   66.25 +
   66.26 +package de.laures.cewolf.taglib;
   66.27 +
   66.28 +/**
   66.29 + * Contains some base constants to avoid explicit dependancy to concrete Plot 
   66.30 + * implementation's constant values. The constants of this class also serve as
   66.31 + * the base contract for data exchange between sub packages.
   66.32 + * @author  Chris McCann
   66.33 + */
   66.34 +public interface PlotConstants {
   66.35 +    int XY_AREA = 0;
   66.36 +    int XY_LINE = 1;
   66.37 +    int XY_SHAPES_AND_LINES = 2;
   66.38 +    int SCATTER = 3;
   66.39 +    int XY_VERTICAL_BAR = 4;
   66.40 +    int STEP = 5;
   66.41 +    int CANDLESTICK = 6;
   66.42 +    int HIGH_LOW = 7;
   66.43 +    int SIGNAL = 8;
   66.44 +    int VERTICAL_BAR = 9;
   66.45 +    int AREA = 10;
   66.46 +    int LINE = 11;
   66.47 +    int SHAPES_AND_LINES = 13;
   66.48 +}
    67.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    67.2 +++ b/java/cewolf-1.0/src/main/java/de/laures/cewolf/taglib/PlotContainer.java	Sat Feb 28 21:31:02 2009 +0100
    67.3 @@ -0,0 +1,19 @@
    67.4 +/*
    67.5 + * Created on 13.04.2003
    67.6 + *
    67.7 + * To change the template for this generated file go to
    67.8 + * Window>Preferences>Java>Code Generation>Code and Comments
    67.9 + */
   67.10 +package de.laures.cewolf.taglib;
   67.11 +
   67.12 +/**
   67.13 + * @author guido
   67.14 + *
   67.15 + * To change the template for this generated type comment go to
   67.16 + * Window>Preferences>Java>Code Generation>Code and Comments
   67.17 + */
   67.18 +public interface PlotContainer {
   67.19 +
   67.20 +	public void addPlot(PlotDefinition pd);
   67.21 +
   67.22 +}
    68.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    68.2 +++ b/java/cewolf-1.0/src/main/java/de/laures/cewolf/taglib/PlotDefinition.java	Sat Feb 28 21:31:02 2009 +0100
    68.3 @@ -0,0 +1,196 @@
    68.4 +/* ================================================================
    68.5 + * Cewolf : Chart enabling Web Objects Framework
    68.6 + * ================================================================
    68.7 + *
    68.8 + * Project Info:  http://cewolf.sourceforge.net
    68.9 + * Project Lead:  Guido Laures (guido@laures.de);
   68.10 + *
   68.11 + * (C) Copyright 2002, by Guido Laures and contributers
   68.12 + *
   68.13 + * This library is free software; you can redistribute it and/or modify it under the terms
   68.14 + * of the GNU Lesser General Public License as published by the Free Software Foundation;
   68.15 + * either version 2.1 of
   68.16 + * the License, or (at your option) any later version.
   68.17 + *
   68.18 + * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
   68.19 + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
   68.20 + * See the GNU Lesser General Public License for more details.
   68.21 + *
   68.22 + * You should have received a copy of the GNU Lesser General Public License along with this
   68.23 + * library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
   68.24 + * Boston, MA 02111-1307, USA.
   68.25 + */
   68.26 +package de.laures.cewolf.taglib;
   68.27 +
   68.28 +import java.io.Serializable;
   68.29 +import java.util.Map;
   68.30 +
   68.31 +import org.apache.commons.logging.Log;
   68.32 +import org.apache.commons.logging.LogFactory;
   68.33 +import org.jfree.chart.plot.CategoryPlot;
   68.34 +import org.jfree.chart.plot.DrawingSupplier;
   68.35 +import org.jfree.chart.plot.Plot;
   68.36 +import org.jfree.chart.plot.XYPlot;
   68.37 +import org.jfree.chart.renderer.AbstractRenderer;
   68.38 +import org.jfree.chart.renderer.category.CategoryItemRenderer;
   68.39 +import org.jfree.chart.renderer.xy.XYItemRenderer;
   68.40 +import org.jfree.data.category.CategoryDataset;
   68.41 +import org.jfree.data.general.Dataset;
   68.42 +import org.jfree.data.xy.IntervalXYDataset;
   68.43 +import org.jfree.data.xy.OHLCDataset;
   68.44 +import org.jfree.data.xy.XYDataset;
   68.45 +
   68.46 +import de.laures.cewolf.ChartValidationException;
   68.47 +import de.laures.cewolf.DatasetProduceException;
   68.48 +import de.laures.cewolf.DatasetProducer;
   68.49 +
   68.50 +/**
   68.51 + * (sub) Plot definition for combined/overlaid charts.
   68.52 + * 
   68.53 + * @author Chris McCann
   68.54 + * @author Guido Laures
   68.55 + */
   68.56 +public class PlotDefinition implements DataAware, Serializable, TaglibConstants, PlotConstants {
   68.57 +
   68.58 +	private transient Log log = LogFactory.getLog(getClass());
   68.59 +
   68.60 +	private String type;
   68.61 +	private String xAxisLabel; // [tb]
   68.62 +	private String yAxisLabel; // [tb]
   68.63 +
   68.64 +	private DataContainer dataAware = new DataContainer();
   68.65 +	private transient Plot plot;
   68.66 +	private transient DrawingSupplier drawingSupplier = null;
   68.67 +
   68.68 +	public Plot getPlot(int chartType) throws DatasetProduceException, ChartValidationException {
   68.69 +    log.debug("Plot.getPlot: chartType: " + chartType);
   68.70 +		if (plot == null) {
   68.71 +			int rendererIndex = PlotTypes.getRendererIndex(type);
   68.72 +			
   68.73 +			Dataset data = (Dataset) getDataset();
   68.74 +			log.debug("Plot.getPlot: data name: " +data.getClass().getName());
   68.75 +			AbstractRenderer rend = PlotTypes.getRenderer(rendererIndex);
   68.76 +			log.debug("Plot.getPlot: rendererIndex: " + rendererIndex);
   68.77 +			if (chartType == ChartConstants.OVERLAY_XY || chartType == ChartConstants.COMBINED_XY) {
   68.78 +				switch (rendererIndex) {
   68.79 +					case XY_AREA :
   68.80 +					case XY_LINE :
   68.81 +					case XY_SHAPES_AND_LINES :
   68.82 +					case SCATTER :
   68.83 +					case STEP :
   68.84 +						check(data, XYDataset.class, rendererIndex);
   68.85 +						plot = new XYPlot((XYDataset) data, null, null, (XYItemRenderer) rend);
   68.86 +						break;
   68.87 +					case XY_VERTICAL_BAR :
   68.88 +						check(data, IntervalXYDataset.class, rendererIndex);
   68.89 +						plot = new XYPlot((IntervalXYDataset) data, null, null, (XYItemRenderer) rend);
   68.90 +						break;
   68.91 +					case CANDLESTICK :
   68.92 +					case HIGH_LOW :
   68.93 +						check(data, OHLCDataset.class, rendererIndex);
   68.94 +						plot = new XYPlot((OHLCDataset) data, null, null, (XYItemRenderer) rend);
   68.95 +						break;
   68.96 +					//case SIGNAL :
   68.97 +					//	check(data, SignalsDataset.class, rendererIndex);
   68.98 +					//	plot = new XYPlot((SignalsDataset) data, null, null, (XYItemRenderer) rend);
   68.99 +					default :
  68.100 +						throw new AttributeValidationException(chartType + ".type", type);
  68.101 +				}
  68.102 +			} else if (chartType == ChartConstants.OVERLAY_CATEGORY) {
  68.103 +				switch (rendererIndex) {
  68.104 +					case AREA :
  68.105 +					case VERTICAL_BAR :
  68.106 +					case LINE :
  68.107 +					case SHAPES_AND_LINES :
  68.108 +						check(data, CategoryDataset.class, rendererIndex);
  68.109 +						plot =
  68.110 +							new CategoryPlot(
  68.111 +								(CategoryDataset) data,
  68.112 +								null,
  68.113 +								null,
  68.114 +								(CategoryItemRenderer) rend);
  68.115 +						break;
  68.116 +					default :
  68.117 +						throw new AttributeValidationException(chartType + ".type", type);
  68.118 +				}
  68.119 +			}
  68.120 +		}
  68.121 +		plot.setDrawingSupplier(drawingSupplier);
  68.122 +		return plot;
  68.123 +	}
  68.124 +
  68.125 +	public Object getDataset() throws DatasetProduceException {
  68.126 +		return dataAware.getDataset();
  68.127 +	}
  68.128 +
  68.129 +	/**
  68.130 +	 * Gets the y-axis label. [tb]
  68.131 +	 *
  68.132 +	 * @return the y-axis label.
  68.133 +	 */
  68.134 +	public String getXaxislabel() {
  68.135 +		return xAxisLabel;
  68.136 +	}
  68.137 +
  68.138 +	/**
  68.139 +	 * Sets the x-axis label [tb]
  68.140 +	 *
  68.141 +	 * @return the x-axis label
  68.142 +	 */
  68.143 +	public String getYaxislabel() {
  68.144 +		return yAxisLabel;
  68.145 +	}
  68.146 +
  68.147 +	/**
  68.148 +	 * Sets the x-axis label [tb]
  68.149 +	 *
  68.150 +	 * @param xAxisLabel New value of property xAxisLabel.
  68.151 +	 */
  68.152 +	public void setXaxislabel(String xAxisLabel) {
  68.153 +		this.xAxisLabel = xAxisLabel;
  68.154 +	}
  68.155 +
  68.156 +	/**
  68.157 +	 * Sets the y-axis label [tb]
  68.158 +	 *
  68.159 +	 * @param yAxisLabel New value of property yAxisLabel.
  68.160 +	 */
  68.161 +	public void setYaxislabel(String yAxisLabel) {
  68.162 +		this.yAxisLabel = yAxisLabel;
  68.163 +	}
  68.164 +	/**
  68.165 +	 * Sets the type.
  68.166 +	 * @param type The type to set
  68.167 +	 */
  68.168 +	public void setType(String type) {
  68.169 +		this.type = type;
  68.170 +	}
  68.171 +	/**
  68.172 +	 * Gets the type.
  68.173 +	 * @return type of plot as a String
  68.174 +	 */
  68.175 +	public String getType() {
  68.176 +		return this.type;
  68.177 +	}
  68.178 +
  68.179 +	public void check(Dataset data, Class clazz, int plotType) throws IncompatibleDatasetException {
  68.180 +		if (!clazz.isInstance(data)) {
  68.181 +			throw new IncompatibleDatasetException(
  68.182 +				"Plots of type " + PlotTypes.typeNames[plotType] + " need a dataset of type " + clazz.getName());
  68.183 +		}
  68.184 +	}
  68.185 +
  68.186 +	public void setDataProductionConfig(DatasetProducer dsp, Map params, boolean useCache) {
  68.187 +		log.debug("setDataProductionConfig(" + dsp + ", " + params);
  68.188 +		dataAware.setDataProductionConfig(dsp, params, useCache);
  68.189 +	}
  68.190 +
  68.191 +	/**
  68.192 +	 * Sets the drawingSupplier.
  68.193 +	 * @param drawingSupplier The drawingSupplier to set
  68.194 +	 */
  68.195 +	public void setDrawingSupplier(DrawingSupplier drawingSupplier) {
  68.196 +		this.drawingSupplier = drawingSupplier;
  68.197 +	}
  68.198 +
  68.199 +}
    69.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    69.2 +++ b/java/cewolf-1.0/src/main/java/de/laures/cewolf/taglib/PlotTypes.java	Sat Feb 28 21:31:02 2009 +0100
    69.3 @@ -0,0 +1,116 @@
    69.4 +/* ================================================================
    69.5 + * Cewolf : Chart enabling Web Objects Framework
    69.6 + * ================================================================
    69.7 + *
    69.8 + * Project Info:  http://cewolf.sourceforge.net
    69.9 + * Project Lead:  Guido Laures (guido@laures.de);
   69.10 + *
   69.11 + * (C) Copyright 2002, by Guido Laures
   69.12 + *
   69.13 + * This library is free software; you can redistribute it and/or modify it under the terms
   69.14 + * of the GNU Lesser General Public License as published by the Free Software Foundation;
   69.15 + * either version 2.1 of the License, or (at your option) any later version.
   69.16 + *
   69.17 + * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
   69.18 + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
   69.19 + * See the GNU Lesser General Public License for more details.
   69.20 + *
   69.21 + * You should have received a copy of the GNU Lesser General Public License along with this
   69.22 + * library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
   69.23 + * Boston, MA 02111-1307, USA.
   69.24 + */
   69.25 +
   69.26 +package de.laures.cewolf.taglib;
   69.27 +
   69.28 +import java.util.Arrays;
   69.29 +import java.util.List;
   69.30 +
   69.31 +import org.jfree.chart.renderer.AbstractRenderer;
   69.32 +import org.jfree.chart.renderer.category.AreaRenderer;
   69.33 +import org.jfree.chart.renderer.category.BarRenderer;
   69.34 +import org.jfree.chart.renderer.category.LineAndShapeRenderer;
   69.35 +import org.jfree.chart.renderer.xy.CandlestickRenderer;
   69.36 +import org.jfree.chart.renderer.xy.HighLowRenderer;
   69.37 +import org.jfree.chart.renderer.xy.StandardXYItemRenderer;
   69.38 +import org.jfree.chart.renderer.xy.XYAreaRenderer;
   69.39 +import org.jfree.chart.renderer.xy.XYBarRenderer;
   69.40 +import org.jfree.chart.renderer.xy.XYStepRenderer;
   69.41 +
   69.42 +/**
   69.43 + * Contains the list of all possible plot type string values which can be used
   69.44 + * in the <code>type</code> attribute of a &lt;chart&gt; tag.
   69.45 + *
   69.46 + * It also contains all the renders that correspond with the plot types
   69.47 + * @author  Chris McCann
   69.48 + */
   69.49 +public class PlotTypes {
   69.50 +
   69.51 +	/** All type strings in an array */
   69.52 +	public static final String[] typeNames =
   69.53 +		{
   69.54 +			"xyarea",
   69.55 +			"xyline",
   69.56 +			"xyshapesandlines",
   69.57 +			"scatter",
   69.58 +			"xyverticalbar",
   69.59 +			"step",
   69.60 +			"candlestick",
   69.61 +			"highlow",
   69.62 +			"signal",
   69.63 +			"verticalbar",
   69.64 +			"area",
   69.65 +			"line",
   69.66 +			"shapesandlines" };
   69.67 +
   69.68 +	/**
   69.69 +	 * The whole typeNames array inside of a list.
   69.70 +	 * @see #typeNames
   69.71 +	 */
   69.72 +	private static final List typeList = Arrays.asList(typeNames);
   69.73 +	
   69.74 +	/**
   69.75 +	 * Create a renderer for the given type index.
   69.76 +	 * We create a new renderer instance for each chart, because they may want to customize
   69.77 +	 * it in a post-processor.
   69.78 +	 * 
   69.79 +	 * @param idx The index of the type
   69.80 +	 * @return A new renderer instance
   69.81 +	 */
   69.82 +	public static AbstractRenderer getRenderer(int idx) {
   69.83 +		switch (idx) {
   69.84 +			case 0: return new XYAreaRenderer();
   69.85 +			case 1: return new StandardXYItemRenderer();
   69.86 +			case 2: return new StandardXYItemRenderer(StandardXYItemRenderer.SHAPES_AND_LINES);
   69.87 +			case 3: return new StandardXYItemRenderer(StandardXYItemRenderer.SHAPES);
   69.88 +			case 4: return new XYBarRenderer();
   69.89 +			case 5: return new XYStepRenderer();
   69.90 +			case 6: return new CandlestickRenderer();
   69.91 +			case 7: return new HighLowRenderer();
   69.92 +			//case 8: return new SignalRenderer();
   69.93 +			case 9: return new BarRenderer();
   69.94 +			case 10: return new AreaRenderer();
   69.95 +			case 11: return new LineAndShapeRenderer(true,false);
   69.96 +			case 12: return new LineAndShapeRenderer(true,true);
   69.97 +			default:
   69.98 +				throw new RuntimeException("Invalid renderer index:" + idx);
   69.99 +		}		
  69.100 +	}
  69.101 +
  69.102 +	private PlotTypes() {
  69.103 +	}
  69.104 +
  69.105 +    /**
  69.106 +     * Get the renderer index for the given plot type.
  69.107 +     * @param plotType The type string of the plot
  69.108 +     * @return The index The index of renderer
  69.109 +     * @throws AttributeValidationException if unknown type
  69.110 +     */
  69.111 +    public static int getRendererIndex(String plotType) throws AttributeValidationException  {
  69.112 +        int rendererIndex = PlotTypes.typeList.indexOf(plotType.toLowerCase());
  69.113 +        if (rendererIndex < 0) {
  69.114 +          throw new AttributeValidationException("plot.type", plotType);
  69.115 +        }
  69.116 +        return rendererIndex;
  69.117 +    }
  69.118 +
  69.119 +}
    70.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    70.2 +++ b/java/cewolf-1.0/src/main/java/de/laures/cewolf/taglib/SimpleChartDefinition.java	Sat Feb 28 21:31:02 2009 +0100
    70.3 @@ -0,0 +1,43 @@
    70.4 +/*
    70.5 + * Created on 13.04.2003
    70.6 + *
    70.7 + * To change the template for this generated file go to
    70.8 + * Window>Preferences>Java>Code Generation>Code and Comments
    70.9 + */
   70.10 +package de.laures.cewolf.taglib;
   70.11 +
   70.12 +import java.io.Serializable;
   70.13 +import java.util.Map;
   70.14 +
   70.15 +import org.jfree.chart.JFreeChart;
   70.16 +import org.jfree.data.general.Dataset;
   70.17 +
   70.18 +import de.laures.cewolf.ChartValidationException;
   70.19 +import de.laures.cewolf.DatasetProduceException;
   70.20 +import de.laures.cewolf.DatasetProducer;
   70.21 +
   70.22 +/**
   70.23 + * @author guido
   70.24 + *
   70.25 + * To change the template for this generated type comment go to
   70.26 + * Window>Preferences>Java>Code Generation>Code and Comments
   70.27 + */
   70.28 +public class SimpleChartDefinition extends AbstractChartDefinition implements DataAware, Serializable {
   70.29 +
   70.30 +	private DataContainer dataAware = new DataContainer();
   70.31 +	
   70.32 +    protected JFreeChart produceChart() throws DatasetProduceException, ChartValidationException {
   70.33 +    	return CewolfChartFactory.getChartInstance(type, title, xAxisLabel, yAxisLabel, (Dataset)getDataset());
   70.34 +    }
   70.35 +
   70.36 +    public Object getDataset() throws DatasetProduceException {
   70.37 +        return dataAware.getDataset();
   70.38 +    }
   70.39 +
   70.40 +    public void setDataProductionConfig(DatasetProducer dsp, Map params, boolean useCache) {
   70.41 +    	dataAware.setDataProductionConfig(dsp, params, useCache);
   70.42 +    }
   70.43 +
   70.44 +    
   70.45 +
   70.46 +}
    71.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    71.2 +++ b/java/cewolf-1.0/src/main/java/de/laures/cewolf/taglib/TagValidationException.java	Sat Feb 28 21:31:02 2009 +0100
    71.3 @@ -0,0 +1,45 @@
    71.4 +/* ================================================================
    71.5 + * Cewolf : Chart enabling Web Objects Framework
    71.6 + * ================================================================
    71.7 + *
    71.8 + * Project Info:  http://cewolf.sourceforge.net
    71.9 + * Project Lead:  Guido Laures (guido@laures.de);
   71.10 + *
   71.11 + * (C) Copyright 2002, by Guido Laures
   71.12 + *
   71.13 + * This library is free software; you can redistribute it and/or modify it under the terms
   71.14 + * of the GNU Lesser General Public License as published by the Free Software Foundation;
   71.15 + * either version 2.1 of the License, or (at your option) any later version.
   71.16 + *
   71.17 + * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
   71.18 + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
   71.19 + * See the GNU Lesser General Public License for more details.
   71.20 + *
   71.21 + * You should have received a copy of the GNU Lesser General Public License along with this
   71.22 + * library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
   71.23 + * Boston, MA 02111-1307, USA.
   71.24 + */
   71.25 +
   71.26 +package de.laures.cewolf.taglib;
   71.27 +
   71.28 +import org.xml.sax.SAXException;
   71.29 +
   71.30 +/** 
   71.31 + * Thrown by some of the libraries validators.
   71.32 + * @author  Guido Laures 
   71.33 + */
   71.34 +public class TagValidationException extends SAXException {
   71.35 +
   71.36 +    private final String tag;
   71.37 +
   71.38 +    /** Creates a new instance of TagValidationException */
   71.39 +    public TagValidationException(String tag, String msg) {
   71.40 +        super(msg);
   71.41 +        this.tag = tag;
   71.42 +    }
   71.43 +
   71.44 +    public String getTag() {
   71.45 +        return tag;
   71.46 +    }
   71.47 +
   71.48 +}
    72.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    72.2 +++ b/java/cewolf-1.0/src/main/java/de/laures/cewolf/taglib/TaglibConstants.java	Sat Feb 28 21:31:02 2009 +0100
    72.3 @@ -0,0 +1,40 @@
    72.4 +/* ================================================================
    72.5 + * Cewolf : Chart enabling Web Objects Framework
    72.6 + * ================================================================
    72.7 + *
    72.8 + * Project Info:  http://cewolf.sourceforge.net
    72.9 + * Project Lead:  Guido Laures (guido@laures.de);
   72.10 + *
   72.11 + * (C) Copyright 2002, by Guido Laures
   72.12 + *
   72.13 + * This library is free software; you can redistribute it and/or modify it under the terms
   72.14 + * of the GNU Lesser General Public License as published by the Free Software Foundation;
   72.15 + * either version 2.1 of the License, or (at your option) any later version.
   72.16 + *
   72.17 + * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
   72.18 + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
   72.19 + * See the GNU Lesser General Public License for more details.
   72.20 + *
   72.21 + * You should have received a copy of the GNU Lesser General Public License along with this
   72.22 + * library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
   72.23 + * Boston, MA 02111-1307, USA.
   72.24 + */
   72.25 +
   72.26 +package de.laures.cewolf.taglib;
   72.27 +
   72.28 +/**
   72.29 + * Contains some base constants to avoid explicit dependancy to concrete chart 
   72.30 + * implementation's constant values. The constants of this class also serve as
   72.31 + * the base contract for data exchange between sub packages.
   72.32 + * @author  Guido Laures
   72.33 + */
   72.34 +public interface TaglibConstants {
   72.35 +
   72.36 +    int ANCHOR_NORTH = 100;
   72.37 +    int ANCHOR_SOUTH = 101;
   72.38 +    int ANCHOR_EAST = 102;
   72.39 +    int ANCHOR_WEST = 103;
   72.40 +    
   72.41 +    String TOOLTIPS_ENABLED_KEY = "ttenabled";
   72.42 +    
   72.43 +}
    73.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    73.2 +++ b/java/cewolf-1.0/src/main/java/de/laures/cewolf/taglib/UnsupportedChartTypeException.java	Sat Feb 28 21:31:02 2009 +0100
    73.3 @@ -0,0 +1,37 @@
    73.4 +/* ================================================================
    73.5 + * Cewolf : Chart enabling Web Objects Framework
    73.6 + * ================================================================
    73.7 + *
    73.8 + * Project Info:  http://cewolf.sourceforge.net
    73.9 + * Project Lead:  Guido Laures (guido@laures.de);
   73.10 + *
   73.11 + * (C) Copyright 2002, by Guido Laures
   73.12 + *
   73.13 + * This library is free software; you can redistribute it and/or modify it under the terms
   73.14 + * of the GNU Lesser General Public License as published by the Free Software Foundation;
   73.15 + * either version 2.1 of the License, or (at your option) any later version.
   73.16 + *
   73.17 + * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
   73.18 + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
   73.19 + * See the GNU Lesser General Public License for more details.
   73.20 + *
   73.21 + * You should have received a copy of the GNU Lesser General Public License along with this
   73.22 + * library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
   73.23 + * Boston, MA 02111-1307, USA.
   73.24 + */
   73.25 +
   73.26 +package de.laures.cewolf.taglib;
   73.27 +
   73.28 +import de.laures.cewolf.ChartValidationException;
   73.29 +;
   73.30 +
   73.31 +/**
   73.32 + * @author glaures
   73.33 + */
   73.34 +public class UnsupportedChartTypeException extends ChartValidationException {
   73.35 +	
   73.36 +	public UnsupportedChartTypeException(String type){
   73.37 +		super("chart type " + type + " is unsupported.");
   73.38 +	}
   73.39 +
   73.40 +}
    74.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    74.2 +++ b/java/cewolf-1.0/src/main/java/de/laures/cewolf/taglib/html/AbstractHTMLBaseTag.java	Sat Feb 28 21:31:02 2009 +0100
    74.3 @@ -0,0 +1,307 @@
    74.4 +/* ================================================================
    74.5 + * Cewolf : Chart enabling Web Objects Framework
    74.6 + * ================================================================
    74.7 + *
    74.8 + * Project Info:  http://cewolf.sourceforge.net
    74.9 + * Project Lead:  Guido Laures (guido@laures.de);
   74.10 + *
   74.11 + * (C) Copyright 2002, by Guido Laures
   74.12 + *
   74.13 + * This library is free software; you can redistribute it and/or modify it under the terms
   74.14 + * of the GNU Lesser General Public License as published by the Free Software Foundation;
   74.15 + * either version 2.1 of
   74.16 + * the License, or (at your option) any later version.
   74.17 + *
   74.18 + * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
   74.19 + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
   74.20 + * See the GNU Lesser General Public License for more details.
   74.21 + *
   74.22 + * You should have received a copy of the GNU Lesser General Public License along with this
   74.23 + * library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
   74.24 + * Boston, MA 02111-1307, USA.
   74.25 + */
   74.26 +
   74.27 +package de.laures.cewolf.taglib.html;
   74.28 +
   74.29 +import java.io.IOException;
   74.30 +import java.io.Serializable;
   74.31 +import java.io.Writer;
   74.32 +
   74.33 +import javax.servlet.jsp.JspException;
   74.34 +import javax.servlet.jsp.JspWriter;
   74.35 +
   74.36 +import de.laures.cewolf.taglib.tags.CewolfBodyTag;
   74.37 +
   74.38 +/**
   74.39 + * Abstract base class which holds attribbutes common for all HTML 4.0 tags.
   74.40 + * @author  Guido Laures
   74.41 + */
   74.42 +public abstract class AbstractHTMLBaseTag extends CewolfBodyTag implements Serializable{
   74.43 +    
   74.44 +    protected static final int UNDEFINED_INT = -1;
   74.45 +    protected static final float UNDEFINED_FLOAT = -1.0f;
   74.46 +    protected static final String UNDEFINED_STR = null;
   74.47 +    
   74.48 +    /** Holds value of property ID. */
   74.49 +    protected String id = UNDEFINED_STR;
   74.50 +    
   74.51 +    /** Holds value of property clazz. */
   74.52 +    protected String clazz = UNDEFINED_STR;
   74.53 +    
   74.54 +    /** Holds value of property style. */
   74.55 +    protected String style = UNDEFINED_STR;
   74.56 +    
   74.57 +    /** Holds value of property title. */
   74.58 +    protected String title = UNDEFINED_STR;
   74.59 +    
   74.60 +    /** Holds value of property lang. */
   74.61 +    protected String lang = UNDEFINED_STR;
   74.62 +    
   74.63 +    /** Holds value of property dir. */
   74.64 +    protected String dir = UNDEFINED_STR;
   74.65 +    
   74.66 +    /** Holds value of property onclick. */
   74.67 +    protected String onclick = UNDEFINED_STR;
   74.68 +    
   74.69 +    /** Holds value of property ondbclick. */
   74.70 +    protected String ondbclick = UNDEFINED_STR;
   74.71 +    
   74.72 +    /** Holds value of property onmousedown. */
   74.73 +    protected String onmousedown = UNDEFINED_STR;
   74.74 +    
   74.75 +    /** Holds value of property onmouseup. */
   74.76 +    protected String onmouseup = UNDEFINED_STR;
   74.77 +    
   74.78 +    /** Holds value of property onmouseover. */
   74.79 +    protected String onmouseover = UNDEFINED_STR;
   74.80 +    
   74.81 +    /** Holds value of property onmousemove. */
   74.82 +    protected String onmousemove = UNDEFINED_STR;
   74.83 +    
   74.84 +    /** Holds value of property onmouseout. */
   74.85 +    protected String onmouseout = UNDEFINED_STR;
   74.86 +    
   74.87 +    /** Holds value of property onkeypress. */
   74.88 +    protected String onkeypress = UNDEFINED_STR;
   74.89 +    
   74.90 +    /** Holds value of property onkeydown. */
   74.91 +    protected String onkeydown = UNDEFINED_STR;
   74.92 +    
   74.93 +    /** Holds value of property onkeyup. */
   74.94 +    protected String onkeyup = UNDEFINED_STR;
   74.95 +    
   74.96 +    public AbstractHTMLBaseTag(){
   74.97 +    	setId(UNDEFINED_STR);
   74.98 +    }
   74.99 +    
  74.100 +    protected abstract String getTagName();
  74.101 +    
  74.102 +    protected abstract boolean hasBody();
  74.103 +    
  74.104 +    protected abstract boolean wellFormed();
  74.105 +    
  74.106 +    protected void reset(){
  74.107 +        this.clazz = UNDEFINED_STR;
  74.108 +        this.dir = UNDEFINED_STR;
  74.109 +        this.id = UNDEFINED_STR;
  74.110 +        this.lang = UNDEFINED_STR;
  74.111 +        this.onclick = UNDEFINED_STR;
  74.112 +        this.ondbclick = UNDEFINED_STR;
  74.113 +        this.onkeydown = UNDEFINED_STR;
  74.114 +        this.onkeypress = UNDEFINED_STR;
  74.115 +        this.onkeyup = UNDEFINED_STR;
  74.116 +        this.onmousedown = UNDEFINED_STR;
  74.117 +        this.onmousemove = UNDEFINED_STR;
  74.118 +        this.onmouseout = UNDEFINED_STR;
  74.119 +        this.onmouseover = UNDEFINED_STR;
  74.120 +        this.onmouseup = UNDEFINED_STR;
  74.121 +        this.style = UNDEFINED_STR;
  74.122 +        this.title = UNDEFINED_STR;
  74.123 +    }
  74.124 +    
  74.125 +    public int doStartTag() throws JspException {
  74.126 +        JspWriter writer = pageContext.getOut();
  74.127 +        try {
  74.128 +            writer.write("<" + getTagName());
  74.129 +            writeAttributes(writer);
  74.130 +            if(hasBody()){
  74.131 +                writer.write(">");
  74.132 +                return EVAL_PAGE;
  74.133 +            } else {
  74.134 +                return SKIP_BODY;
  74.135 +            }
  74.136 +        } catch(IOException ioe){
  74.137 +        	super.pageContext.getServletContext().log("",ioe);
  74.138 +            throw new JspException(ioe.getMessage());
  74.139 +        }
  74.140 +    }
  74.141 +    
  74.142 +    public int doEndTag() throws JspException {
  74.143 +        JspWriter writer = pageContext.getOut();
  74.144 +        try{
  74.145 +            if(hasBody()){
  74.146 +                writer.write("</" + getTagName() + ">");
  74.147 +            } else {
  74.148 +                if(wellFormed()){
  74.149 +                    writer.write(" /");
  74.150 +                }
  74.151 +                writer.write(">");
  74.152 +            }
  74.153 +            return doAfterEndTag(EVAL_PAGE);
  74.154 +        } catch(IOException ioe){
  74.155 +        	super.pageContext.getServletContext().log("",ioe);
  74.156 +            throw new JspException(ioe.getMessage());
  74.157 +        }
  74.158 +    }
  74.159 +    
  74.160 +    public void writeAttributes(Writer wr){
  74.161 +        try {
  74.162 +            appendAttributeDeclaration(wr, getId(), "ID");
  74.163 +            appendAttributeDeclaration(wr, this.clazz, "CLASS");
  74.164 +            appendAttributeDeclaration(wr, this.style, "STYLE");
  74.165 +            appendAttributeDeclaration(wr, this.onclick, "ONCLICK");
  74.166 +            appendAttributeDeclaration(wr, this.ondbclick, "ONDBCLICK");
  74.167 +            appendAttributeDeclaration(wr, this.onkeydown, "ONKEYDOWN");
  74.168 +            appendAttributeDeclaration(wr, this.onkeypress, "ONKEYPRESS");
  74.169 +            appendAttributeDeclaration(wr, this.onkeyup, "ONKEYUP");
  74.170 +            appendAttributeDeclaration(wr, this.onmousedown, "ONMOUSEDOWN");
  74.171 +            appendAttributeDeclaration(wr, this.onmousemove, "ONMOUSEMOVE");
  74.172 +            appendAttributeDeclaration(wr, this.onmouseout, "ONMOUSEOUT");
  74.173 +            appendAttributeDeclaration(wr, this.onmouseover, "ONMOUSEOVER");
  74.174 +            appendAttributeDeclaration(wr, this.onmouseup, "ONMOUSEUP");
  74.175 +            appendAttributeDeclaration(wr, this.title, "TITLE");
  74.176 +            appendAttributeDeclaration(wr, this.lang, "LANG");
  74.177 +            appendAttributeDeclaration(wr, this.dir, "DIR");
  74.178 +        } catch(IOException ioex){
  74.179 +            ioex.printStackTrace();
  74.180 +        }
  74.181 +    }
  74.182 +    
  74.183 +    protected void appendAttributeDeclaration(Writer wr, String attr, String name) throws IOException {
  74.184 +        if(attr != UNDEFINED_STR){
  74.185 +            wr.write(" " + name + "=\"" + attr + "\"");
  74.186 +        }
  74.187 +    }
  74.188 +    
  74.189 +    protected void appendAttributeDeclaration(Writer wr, int attr, String name) throws IOException {
  74.190 +        // does not call the according method for Strings to avoid additional
  74.191 +        // String instantiation
  74.192 +        if(attr != UNDEFINED_INT){
  74.193 +            wr.write(" " + name + "=\"" + attr + "\"");
  74.194 +        }
  74.195 +    }
  74.196 +    
  74.197 +    protected void appendAttributeDeclaration(Writer wr, float attr, String name) throws IOException {
  74.198 +        // does not call the according method for Strings to avoid additional
  74.199 +        // String instantiation
  74.200 +        if(attr != UNDEFINED_FLOAT){
  74.201 +            wr.write(" " + name + "=\"" + attr + "\"");
  74.202 +        }
  74.203 +    }
  74.204 +    
  74.205 +    /** Setter for property clazz.
  74.206 +     * @param clazz New value of property clazz.
  74.207 +     */
  74.208 +    public void setClass(String clazz) {
  74.209 +        this.clazz = clazz;
  74.210 +    }
  74.211 +    
  74.212 +    /** Setter for property style.
  74.213 +     * @param style New value of property style.
  74.214 +     */
  74.215 +    public void setStyle(String style) {
  74.216 +        this.style = style;
  74.217 +    }
  74.218 +    
  74.219 +    /** Setter for property title.
  74.220 +     * @param title New value of property title.
  74.221 +     */
  74.222 +    public void setHtmltitle(String title) {
  74.223 +        this.title = title;
  74.224 +    }
  74.225 +    
  74.226 +    /** Setter for property lang.
  74.227 +     * @param lang New value of property lang.
  74.228 +     */
  74.229 +    public void setLang(String lang) {
  74.230 +        this.lang = lang;
  74.231 +    }
  74.232 +    
  74.233 +    /** Setter for property dir.
  74.234 +     * @param dir New value of property dir.
  74.235 +     */
  74.236 +    public void setDir(String dir) {
  74.237 +        this.dir = dir;
  74.238 +    }
  74.239 +    
  74.240 +    /** Setter for property onclick.
  74.241 +     * @param onclick New value of property onclick.
  74.242 +     */
  74.243 +    public void setOnclick(String onclick) {
  74.244 +        this.onclick = onclick;
  74.245 +    }
  74.246 +    
  74.247 +    /** Setter for property ondbclick.
  74.248 +     * @param ondbclick New value of property ondbclick.
  74.249 +     */
  74.250 +    public void setOndbclick(String ondbclick) {
  74.251 +        this.ondbclick = ondbclick;
  74.252 +    }
  74.253 +    
  74.254 +    /** Setter for property onmousedown.
  74.255 +     * @param onmousedown New value of property onmousedown.
  74.256 +     */
  74.257 +    public void setOnmousedown(String onmousedown) {
  74.258 +        this.onmousedown = onmousedown;
  74.259 +    }
  74.260 +    
  74.261 +    /** Setter for property onmouseup.
  74.262 +     * @param onmouseup New value of property onmouseup.
  74.263 +     */
  74.264 +    public void setOnmouseup(String onmouseup) {
  74.265 +        this.onmouseup = onmouseup;
  74.266 +    }
  74.267 +    
  74.268 +    /** Setter for property onmouseover.
  74.269 +     * @param onmouseover New value of property onmouseover.
  74.270 +     */
  74.271 +    public void setOnmouseover(String onmouseover) {
  74.272 +        this.onmouseover = onmouseover;
  74.273 +    }
  74.274 +    
  74.275 +    /** Setter for property onmousemove.
  74.276 +     * @param onmousemove New value of property onmousemove.
  74.277 +     */
  74.278 +    public void setOnmousemove(String onmousemove) {
  74.279 +        this.onmousemove = onmousemove;
  74.280 +    }
  74.281 +    
  74.282 +    /** Setter for property onmouseout.
  74.283 +     * @param onmouseout New value of property onmouseout.
  74.284 +     */
  74.285 +    public void setOnmouseout(String onmouseout) {
  74.286 +        this.onmouseout = onmouseout;
  74.287 +    }
  74.288 +    
  74.289 +    /** Setter for property onkeypress.
  74.290 +     * @param onkeypress New value of property onkeypress.
  74.291 +     */
  74.292 +    public void setOnkeypress(String onkeypress) {
  74.293 +        this.onkeypress = onkeypress;
  74.294 +    }
  74.295 +    
  74.296 +    /** Setter for property onkeydown.
  74.297 +     * @param onkeydown New value of property onkeydown.
  74.298 +     */
  74.299 +    public void setOnkeydown(String onkeydown) {
  74.300 +        this.onkeydown = onkeydown;
  74.301 +    }
  74.302 +    
  74.303 +    /** Setter for property onkeyup.
  74.304 +     * @param onkeyup New value of property onkeyup.
  74.305 +     */
  74.306 +    public void setOnkeyup(String onkeyup) {
  74.307 +        this.onkeyup = onkeyup;
  74.308 +    }
  74.309 +    
  74.310 +}
    75.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    75.2 +++ b/java/cewolf-1.0/src/main/java/de/laures/cewolf/taglib/html/HTMLImgTag.java	Sat Feb 28 21:31:02 2009 +0100
    75.3 @@ -0,0 +1,242 @@
    75.4 +/* ================================================================
    75.5 + * Cewolf : Chart enabling Web Objects Framework
    75.6 + * ================================================================
    75.7 + *
    75.8 + * Project Info:  http://cewolf.sourceforge.net
    75.9 + * Project Lead:  Guido Laures (guido@laures.de);
   75.10 + *
   75.11 + * (C) Copyright 2002, by Guido Laures
   75.12 + *
   75.13 + * This library is free software; you can redistribute it and/or modify it under the terms
   75.14 + * of the GNU Lesser General Public License as published by the Free Software Foundation;
   75.15 + * either version 2.1 of
   75.16 + * the License, or (at your option) any later version.
   75.17 + *
   75.18 + * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
   75.19 + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
   75.20 + * See the GNU Lesser General Public License for more details.
   75.21 + *
   75.22 + * You should have received a copy of the GNU Lesser General Public License along with this
   75.23 + * library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
   75.24 + * Boston, MA 02111-1307, USA.
   75.25 + */
   75.26 +
   75.27 +package de.laures.cewolf.taglib.html;
   75.28 +
   75.29 +import java.io.IOException;
   75.30 +import java.io.Serializable;
   75.31 +import java.io.Writer;
   75.32 +
   75.33 +/**
   75.34 + * HTML img tag.
   75.35 + * @author  Guido Laures
   75.36 + */
   75.37 +public class HTMLImgTag extends AbstractHTMLBaseTag implements Serializable{
   75.38 +	
   75.39 +	private final static String TAG_NAME = "IMG";
   75.40 +    
   75.41 +    /** Holds value of property width. */
   75.42 +    protected int width = UNDEFINED_INT;
   75.43 +    
   75.44 +    /** Holds value of property height. */
   75.45 +    protected int height = UNDEFINED_INT;
   75.46 +    
   75.47 +    /** Holds value of property src. */
   75.48 +    protected String src = UNDEFINED_STR;
   75.49 +    
   75.50 +    /** Holds value of property alt. */
   75.51 +    protected String alt = "";
   75.52 +    
   75.53 +    /** Holds value of property longDesc. */
   75.54 +    protected String longDesc = UNDEFINED_STR;
   75.55 +    
   75.56 +    /** Holds value of property useMap. */
   75.57 +    protected String useMap = UNDEFINED_STR;
   75.58 +    
   75.59 +    /** Holds value of property ismap. */
   75.60 +    protected String ismap = UNDEFINED_STR;
   75.61 +    
   75.62 +    /** Holds value of property align. */
   75.63 +    protected String align = UNDEFINED_STR;
   75.64 +    
   75.65 +    /** Holds value of property border. */
   75.66 +    protected int border = 0;
   75.67 +    
   75.68 +    /** Holds value of property hSpace. */
   75.69 +    protected int hSpace = UNDEFINED_INT;
   75.70 +    
   75.71 +    /** Holds value of property vSpace. */
   75.72 +    protected int vSpace = UNDEFINED_INT;
   75.73 +    
   75.74 +    /**
   75.75 +     * Add or not JSESSIONID
   75.76 +     */
   75.77 +    protected boolean forceSessionId = true;
   75.78 +
   75.79 +    /**
   75.80 +     * Remove image from Storage after rendering
   75.81 +     */
   75.82 +    protected boolean removeAfterRender = false;
   75.83 +
   75.84 +    /*
   75.85 +     public void writeTag(Writer writer) throws IOException {
   75.86 +        writer.write("<img ");
   75.87 +        writeAttributes(writer);
   75.88 +        writer.write("/>");
   75.89 +    }
   75.90 +     **/
   75.91 +    
   75.92 +    public void writeAttributes(Writer wr){
   75.93 +        try {
   75.94 +            super.writeAttributes(wr);
   75.95 +            appendAttributeDeclaration(wr, this.border, "BORDER");
   75.96 +            appendAttributeDeclaration(wr, this.hSpace, "HSPACE");
   75.97 +            appendAttributeDeclaration(wr, this.height, "HEIGHT");
   75.98 +            appendAttributeDeclaration(wr, this.vSpace, "VSPACE");
   75.99 +            appendAttributeDeclaration(wr, this.width, "WIDTH");
  75.100 +            appendAttributeDeclaration(wr, this.align, "ALIGN");
  75.101 +            appendAttributeDeclaration(wr, this.alt, "ALT");
  75.102 +            appendAttributeDeclaration(wr, this.ismap, "ISMAP");
  75.103 +            appendAttributeDeclaration(wr, this.longDesc, "LONGDESC");
  75.104 +            appendAttributeDeclaration(wr, this.src, "SRC");
  75.105 +            appendAttributeDeclaration(wr, this.useMap, "USEMAP");
  75.106 +        } catch(IOException ioex){
  75.107 +            ioex.printStackTrace();
  75.108 +        }
  75.109 +    }
  75.110 +    
  75.111 +    protected void reset(){
  75.112 +        // width = UNDEFINED_INT;
  75.113 +        // height = UNDEFINED_INT;
  75.114 +        src = UNDEFINED_STR;
  75.115 +        alt = "";
  75.116 +        longDesc = UNDEFINED_STR;
  75.117 +        useMap = UNDEFINED_STR;
  75.118 +        ismap = UNDEFINED_STR;
  75.119 +        align = UNDEFINED_STR;
  75.120 +        border = 0;
  75.121 +        hSpace = UNDEFINED_INT;
  75.122 +        vSpace = UNDEFINED_INT;
  75.123 +        forceSessionId = true;
  75.124 +        removeAfterRender = false;
  75.125 +        super.reset();
  75.126 +    }
  75.127 +    
  75.128 +    /** Setter for property width.
  75.129 +     * @param width New value of property width.
  75.130 +     */
  75.131 +    public void setWidth(int width) {
  75.132 +        this.width = width;
  75.133 +    }
  75.134 +    
  75.135 +    /** Setter for property height.
  75.136 +     * @param height New value of property height.
  75.137 +     */
  75.138 +    public void setHeight(int height) {
  75.139 +        this.height = height;
  75.140 +    }
  75.141 +    
  75.142 +    /** Setter for property src.
  75.143 +     * @param src New value of property src.
  75.144 +     */
  75.145 +    public void setSrc(String src) {
  75.146 +        this.src = src;
  75.147 +    }
  75.148 +    
  75.149 +    /** Setter for property alt.
  75.150 +     * @param alt New value of property alt.
  75.151 +     */
  75.152 +    public void setAlt(String alt) {
  75.153 +        this.alt = alt;
  75.154 +    }
  75.155 +    
  75.156 +    /** Setter for property longDesc.
  75.157 +     * @param longDesc New value of property longDesc.
  75.158 +     */
  75.159 +    public void setLongdesc(String longDesc) {
  75.160 +        this.longDesc = longDesc;
  75.161 +    }
  75.162 +
  75.163 +    /** Setter for property useMap.
  75.164 +     * @param useMap New value of property useMap.
  75.165 +     */
  75.166 +    public void setUsemap(String useMap) {
  75.167 +        this.useMap = useMap;
  75.168 +    }
  75.169 +    
  75.170 +    /** Setter for property ismap.
  75.171 +     * @param ismap New value of property ismap.
  75.172 +     */
  75.173 +    public void setIsmap(String ismap) {
  75.174 +        this.ismap = ismap;
  75.175 +    }
  75.176 +    
  75.177 +    /** Setter for property align.
  75.178 +     * @param align New value of property align.
  75.179 +     */
  75.180 +    public void setAlign(String align) {
  75.181 +        this.align = align;
  75.182 +    }
  75.183 +    
  75.184 +    /** Setter for property border.
  75.185 +     * @param border New value of property border.
  75.186 +     */
  75.187 +    public void setBorder(int border) {
  75.188 +        this.border = border;
  75.189 +    }
  75.190 +    
  75.191 +    /** Setter for property hSpace.
  75.192 +     * @param hSpace New value of property hSpace.
  75.193 +     */
  75.194 +    public void setHspace(int hSpace) {
  75.195 +        this.hSpace = hSpace;
  75.196 +    }
  75.197 +    
  75.198 +    /** Setter for property vSpace.
  75.199 +     * @param vSpace New value of property vSpace.
  75.200 +     */
  75.201 +    public void setVspace(int vSpace) {
  75.202 +        this.vSpace = vSpace;
  75.203 +    }
  75.204 +    
  75.205 +    protected String getTagName() {
  75.206 +        return TAG_NAME;
  75.207 +    }
  75.208 +    
  75.209 +    protected boolean hasBody() {
  75.210 +        return false;
  75.211 +    }
  75.212 +    
  75.213 +    protected boolean wellFormed() {
  75.214 +        return false;
  75.215 +    }
  75.216 +    
  75.217 +
  75.218 +    /**
  75.219 +     * @return Returns the forceSessionId.
  75.220 +     */
  75.221 +    public boolean isForceSessionId() {
  75.222 +    	return forceSessionId;
  75.223 +    }
  75.224 +
  75.225 +    /**
  75.226 +     * @param forceSessionId The forceSessionId to set.
  75.227 +     */
  75.228 +    public void setForceSessionId(boolean forceSessionId) {
  75.229 +    	this.forceSessionId = forceSessionId;
  75.230 +    }
  75.231 +
  75.232 +	/**
  75.233 +	 * @return Returns the removeAfterRender.
  75.234 +	 */
  75.235 +	public boolean isRemoveAfterRender() {
  75.236 +		return removeAfterRender;
  75.237 +	}
  75.238 +
  75.239 +	/**
  75.240 +	 * @param removeAfterRender The removeAfterRender to set.
  75.241 +	 */
  75.242 +	public void setRemoveAfterRender(boolean removeAfterRender) {
  75.243 +		this.removeAfterRender = removeAfterRender;
  75.244 +	}
  75.245 +}
    76.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    76.2 +++ b/java/cewolf-1.0/src/main/java/de/laures/cewolf/taglib/html/package.html	Sat Feb 28 21:31:02 2009 +0100
    76.3 @@ -0,0 +1,10 @@
    76.4 +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    76.5 +
    76.6 +<HTML>
    76.7 +<HEAD>
    76.8 +<TITLE></TITLE>
    76.9 +</HEAD>
   76.10 +<BODY>
   76.11 +Value objects to hold HTML attributes.
   76.12 +</BODY>
   76.13 +</HTML>
    77.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    77.2 +++ b/java/cewolf-1.0/src/main/java/de/laures/cewolf/taglib/package.html	Sat Feb 28 21:31:02 2009 +0100
    77.3 @@ -0,0 +1,10 @@
    77.4 +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    77.5 +
    77.6 +<HTML>
    77.7 +<HEAD>
    77.8 +<TITLE></TITLE>
    77.9 +</HEAD>
   77.10 +<BODY>
   77.11 +Framework classes for the tag library implementation.
   77.12 +</BODY>
   77.13 +</HTML>
    78.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    78.2 +++ b/java/cewolf-1.0/src/main/java/de/laures/cewolf/taglib/tags/AbstractChartTag.java	Sat Feb 28 21:31:02 2009 +0100
    78.3 @@ -0,0 +1,144 @@
    78.4 +/* ================================================================
    78.5 + * Cewolf : Chart enabling Web Objects Framework
    78.6 + * ================================================================
    78.7 + *
    78.8 + * Project Info:  http://cewolf.sourceforge.net
    78.9 + * Project Lead:  Guido Laures (guido@laures.de);
   78.10 + *
   78.11 + * (C) Copyright 2002, by Guido Laures
   78.12 + *
   78.13 + * This library is free software; you can redistribute it and/or modify it under the terms
   78.14 + * of the GNU Lesser General Public License as published by the Free Software Foundation;
   78.15 + * either version 2.1 of
   78.16 + * the License, or (at your option) any later version.
   78.17 + *
   78.18 + * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
   78.19 + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
   78.20 + * See the GNU Lesser General Public License for more details.
   78.21 + *
   78.22 + * You should have received a copy of the GNU Lesser General Public License along with this
   78.23 + * library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
   78.24 + * Boston, MA 02111-1307, USA.
   78.25 + */
   78.26 +
   78.27 +package de.laures.cewolf.taglib.tags;
   78.28 +
   78.29 +import java.awt.Paint;
   78.30 +import java.util.Map;
   78.31 +
   78.32 +import javax.servlet.jsp.JspException;
   78.33 +import javax.servlet.jsp.PageContext;
   78.34 +
   78.35 +import de.laures.cewolf.ChartPostProcessor;
   78.36 +import de.laures.cewolf.taglib.AbstractChartDefinition;
   78.37 +import de.laures.cewolf.taglib.TaglibConstants;
   78.38 +
   78.39 +/**
   78.40 + * Root tag &lt;chart&gt; of a chart definition. Defines all values for the
   78.41 + * page scope variable of type ChartDefinition which is used by the img
   78.42 + * tag to render the appropriate chart.
   78.43 + * @author  Guido Laures
   78.44 + */
   78.45 +public abstract class AbstractChartTag extends CewolfTag implements CewolfRootTag, TaglibConstants, Painted {
   78.46 +    
   78.47 +    protected AbstractChartDefinition chartDefinition = createChartDefinition();
   78.48 +    
   78.49 +    protected abstract AbstractChartDefinition createChartDefinition();
   78.50 +    
   78.51 +    public int doStartTag(){
   78.52 +        return EVAL_BODY_INCLUDE;
   78.53 +    }
   78.54 +    
   78.55 +    public int doEndTag() throws JspException {
   78.56 +        pageContext.setAttribute(getId(), chartDefinition, PageContext.PAGE_SCOPE);
   78.57 +        return doAfterEndTag(EVAL_PAGE);
   78.58 +    }
   78.59 +    
   78.60 +    
   78.61 +    public void reset() {
   78.62 +    	chartDefinition = createChartDefinition();
   78.63 +    }
   78.64 +    
   78.65 +    public String getChartId() {
   78.66 +        return getId();
   78.67 +    }
   78.68 +    
   78.69 +    /**
   78.70 +     * Setter for property title.
   78.71 +     * @param title New value of property title.
   78.72 +     */
   78.73 +    public void setTitle(String title) {
   78.74 +        chartDefinition.setTitle(title);
   78.75 +    }
   78.76 +    
   78.77 +    /**
   78.78 +     * Setter for property xAxisLabel.
   78.79 +     * @param xAxisLabel New value of property xAxisLabel.
   78.80 +     */
   78.81 +    public void setXaxislabel(String xAxisLabel) {
   78.82 +        chartDefinition.setXAxisLabel(xAxisLabel);
   78.83 +    }
   78.84 +    
   78.85 +    /**
   78.86 +     * Setter for property xAxisLabel.
   78.87 +     * @param xAxisLabel New value of property xAxisLabel.
   78.88 +     */
   78.89 +    public void setYaxislabel(String yAxisLabel) {
   78.90 +        chartDefinition.setYAxisLabel(yAxisLabel);
   78.91 +    }
   78.92 +    
   78.93 +    public void setBackground(String src) {
   78.94 +        String srcFile = pageContext.getServletContext().getRealPath(src);
   78.95 +        chartDefinition.setBackground(srcFile);
   78.96 +    }
   78.97 +    
   78.98 +    public void setBackgroundimagealpha(Float alpha) {
   78.99 +        chartDefinition.setBackgroundImageAlpha(alpha.floatValue());
  78.100 +    }
  78.101 +    
  78.102 +    public void setAntialias(boolean anti) {
  78.103 +        chartDefinition.setAntialias(anti);
  78.104 +    }
  78.105 +    
  78.106 +    /**
  78.107 +     * Setter for property legend.
  78.108 +     * @param legend New value of property legend.
  78.109 +     */
  78.110 +    public void setShowlegend(boolean legend) {
  78.111 +        chartDefinition.setShowLegend(legend);
  78.112 +    }
  78.113 +    
  78.114 +    /**
  78.115 +     * Setter for property legend.
  78.116 +     * @param legend New value of property legend.
  78.117 +     */
  78.118 +    public void setLegendanchor(String anchor) {
  78.119 +        if ("north".equalsIgnoreCase(anchor)) {
  78.120 +            chartDefinition.setLegendAnchor(ANCHOR_NORTH);
  78.121 +        } else if ("south".equalsIgnoreCase(anchor)) {
  78.122 +            chartDefinition.setLegendAnchor(ANCHOR_SOUTH);
  78.123 +        } else if ("west".equalsIgnoreCase(anchor)) {
  78.124 +            chartDefinition.setLegendAnchor(ANCHOR_WEST);
  78.125 +        } else if ("east".equalsIgnoreCase(anchor)) {
  78.126 +            chartDefinition.setLegendAnchor(ANCHOR_EAST);
  78.127 +        }
  78.128 +    }
  78.129 +    
  78.130 +    public void addChartPostProcessor(ChartPostProcessor pp, Map params) {
  78.131 +        chartDefinition.addPostProcessor(pp);
  78.132 +        chartDefinition.addPostProcessorParams(params);
  78.133 +    }
  78.134 +    
  78.135 +    public void setPaint(Paint paint){
  78.136 +        chartDefinition.setPaint(paint);
  78.137 +    }
  78.138 +
  78.139 +    /**
  78.140 +         * Setter for property type.
  78.141 +         * @param type New value of property type.
  78.142 +         */
  78.143 +    public void setType(String type) {
  78.144 +        chartDefinition.setType(type);
  78.145 +    }
  78.146 +    
  78.147 +}
    79.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    79.2 +++ b/java/cewolf-1.0/src/main/java/de/laures/cewolf/taglib/tags/AbstractObjectTag.java	Sat Feb 28 21:31:02 2009 +0100
    79.3 @@ -0,0 +1,35 @@
    79.4 +/* ================================================================
    79.5 + * Cewolf : Chart enabling Web Objects Framework
    79.6 + * ================================================================
    79.7 + *
    79.8 + * Project Info:  http://cewolf.sourceforge.net
    79.9 + * Project Lead:  Guido Laures (guido@laures.de);
   79.10 + *
   79.11 + * (C) Copyright 2002, by Guido Laures
   79.12 + *
   79.13 + * This library is free software; you can redistribute it and/or modify it under the terms
   79.14 + * of the GNU Lesser General Public License as published by the Free Software Foundation;
   79.15 + * either version 2.1 of the License, or (at your option) any later version.
   79.16 + *
   79.17 + * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
   79.18 + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
   79.19 + * See the GNU Lesser General Public License for more details.
   79.20 + *
   79.21 + * You should have received a copy of the GNU Lesser General Public License along with this
   79.22 + * library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
   79.23 + * Boston, MA 02111-1307, USA.
   79.24 + */
   79.25 +
   79.26 +package de.laures.cewolf.taglib.tags;
   79.27 +
   79.28 +/** 
   79.29 + * Abstract base class for all tags referencing a scripting variable by its ID.
   79.30 + * @author  Guido Laures 
   79.31 + */
   79.32 +public abstract class AbstractObjectTag extends CewolfBodyTag {
   79.33 +
   79.34 +    protected Object getObject() {
   79.35 +        return pageContext.findAttribute(getId());
   79.36 +    }
   79.37 +    
   79.38 +}
    80.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    80.2 +++ b/java/cewolf-1.0/src/main/java/de/laures/cewolf/taglib/tags/AbstractParameterizedObjectTag.java	Sat Feb 28 21:31:02 2009 +0100
    80.3 @@ -0,0 +1,50 @@
    80.4 +/* ================================================================
    80.5 + * Cewolf : Chart enabling Web Objects Framework
    80.6 + * ================================================================
    80.7 + *
    80.8 + * Project Info:  http://cewolf.sourceforge.net
    80.9 + * Project Lead:  Guido Laures (guido@laures.de);
   80.10 + *
   80.11 + * (C) Copyright 2002, by Guido Laures
   80.12 + *
   80.13 + * This library is free software; you can redistribute it and/or modify it under the terms
   80.14 + * of the GNU Lesser General Public License as published by the Free Software Foundation;
   80.15 + * either version 2.1 of the License, or (at your option) any later version.
   80.16 + *
   80.17 + * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
   80.18 + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
   80.19 + * See the GNU Lesser General Public License for more details.
   80.20 + *
   80.21 + * You should have received a copy of the GNU Lesser General Public License along with this
   80.22 + * library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
   80.23 + * Boston, MA 02111-1307, USA.
   80.24 + */
   80.25 +
   80.26 +package de.laures.cewolf.taglib.tags;
   80.27 +
   80.28 +import java.util.HashMap;
   80.29 +import java.util.Map;
   80.30 +
   80.31 +/** 
   80.32 + * Abstract base class for all tags referencing a scripting variable by its ID
   80.33 + * which they want to parameterize further.
   80.34 + * @see Parameterized
   80.35 + * @author  Guido Laures 
   80.36 + */
   80.37 +public abstract class AbstractParameterizedObjectTag extends AbstractObjectTag implements Parameterized {
   80.38 +    
   80.39 +    private Map params = new HashMap();
   80.40 +    
   80.41 +    protected void reset(){
   80.42 +        params = new HashMap();
   80.43 +    }
   80.44 +
   80.45 +    protected Map getParameters() {
   80.46 +        return params;
   80.47 +    }
   80.48 +
   80.49 +    public void addParameter(String name, Object value) {
   80.50 +        params.put(name, value);
   80.51 +    }
   80.52 +
   80.53 +}
    81.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    81.2 +++ b/java/cewolf-1.0/src/main/java/de/laures/cewolf/taglib/tags/CewolfBodyTag.java	Sat Feb 28 21:31:02 2009 +0100
    81.3 @@ -0,0 +1,35 @@
    81.4 +package de.laures.cewolf.taglib.tags;
    81.5 +
    81.6 +import javax.servlet.jsp.JspException;
    81.7 +import javax.servlet.jsp.tagext.BodyTagSupport;
    81.8 +
    81.9 +import org.apache.commons.logging.Log;
   81.10 +import org.apache.commons.logging.LogFactory;
   81.11 +
   81.12 +/**
   81.13 + * @author glaures
   81.14 + *
   81.15 + * To change this generated comment edit the template variable "typecomment":
   81.16 + * Window>Preferences>Java>Templates.
   81.17 + * To enable and disable the creation of type comments go to
   81.18 + * Window>Preferences>Java>Code Generation.
   81.19 + */
   81.20 +public abstract class CewolfBodyTag extends BodyTagSupport {
   81.21 +	
   81.22 +    protected Log log = LogFactory.getLog(getClass());
   81.23 +
   81.24 +	protected final int doAfterEndTag(int returnVal) {
   81.25 +		reset();
   81.26 +		return returnVal;
   81.27 +	}
   81.28 +	
   81.29 +	protected abstract void reset();
   81.30 +
   81.31 +	/**
   81.32 +	 * @see javax.servlet.jsp.tagext.Tag#doEndTag()
   81.33 +	 */
   81.34 +	public int doEndTag() throws JspException {
   81.35 +		return doAfterEndTag(super.doEndTag());
   81.36 +	}
   81.37 +
   81.38 +}
    82.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    82.2 +++ b/java/cewolf-1.0/src/main/java/de/laures/cewolf/taglib/tags/CewolfRootTag.java	Sat Feb 28 21:31:02 2009 +0100
    82.3 @@ -0,0 +1,37 @@
    82.4 +/* ================================================================
    82.5 + * Cewolf : Chart enabling Web Objects Framework
    82.6 + * ================================================================
    82.7 + *
    82.8 + * Project Info:  http://cewolf.sourceforge.net
    82.9 + * Project Lead:  Guido Laures (guido@laures.de);
   82.10 + *
   82.11 + * (C) Copyright 2002, by Guido Laures
   82.12 + *
   82.13 + * This library is free software; you can redistribute it and/or modify it under the terms
   82.14 + * of the GNU Lesser General Public License as published by the Free Software Foundation;
   82.15 + * either version 2.1 of the License, or (at your option) any later version.
   82.16 + *
   82.17 + * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
   82.18 + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
   82.19 + * See the GNU Lesser General Public License for more details.
   82.20 + *
   82.21 + * You should have received a copy of the GNU Lesser General Public License along with this
   82.22 + * library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
   82.23 + * Boston, MA 02111-1307, USA.
   82.24 + */
   82.25 +
   82.26 +package de.laures.cewolf.taglib.tags;
   82.27 +
   82.28 +/**
   82.29 + * A root tag always holds a chart ID as it always is assigne dto a chart.
   82.30 + * @author  glaures
   82.31 + */
   82.32 +public interface CewolfRootTag {
   82.33 +    
   82.34 +	/**
   82.35 +	 * Method getChartId.
   82.36 +	 * @return String
   82.37 +	 */
   82.38 +    String getChartId();
   82.39 +    
   82.40 +}
    83.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    83.2 +++ b/java/cewolf-1.0/src/main/java/de/laures/cewolf/taglib/tags/CewolfTag.java	Sat Feb 28 21:31:02 2009 +0100
    83.3 @@ -0,0 +1,35 @@
    83.4 +package de.laures.cewolf.taglib.tags;
    83.5 +
    83.6 +import javax.servlet.jsp.JspException;
    83.7 +import javax.servlet.jsp.tagext.TagSupport;
    83.8 +
    83.9 +import org.apache.commons.logging.Log;
   83.10 +import org.apache.commons.logging.LogFactory;
   83.11 +
   83.12 +/**
   83.13 + * @author glaures
   83.14 + *
   83.15 + * To change this generated comment edit the template variable "typecomment":
   83.16 + * Window>Preferences>Java>Templates.
   83.17 + * To enable and disable the creation of type comments go to
   83.18 + * Window>Preferences>Java>Code Generation.
   83.19 + */
   83.20 +public abstract class CewolfTag extends TagSupport {
   83.21 +
   83.22 +    protected Log log = LogFactory.getLog(this.getClass());
   83.23 +    
   83.24 +	protected final int doAfterEndTag(int returnVal) {
   83.25 +		reset();
   83.26 +		return returnVal;
   83.27 +	}
   83.28 +	
   83.29 +	protected abstract void reset();
   83.30 +
   83.31 +	/**
   83.32 +	 * @see javax.servlet.jsp.tagext.Tag#doEndTag()
   83.33 +	 */
   83.34 +	public int doEndTag() throws JspException {
   83.35 +		return doAfterEndTag(super.doEndTag());
   83.36 +	}
   83.37 +
   83.38 +}
    84.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    84.2 +++ b/java/cewolf-1.0/src/main/java/de/laures/cewolf/taglib/tags/ChartImgTag.java	Sat Feb 28 21:31:02 2009 +0100
    84.3 @@ -0,0 +1,325 @@
    84.4 +/* ================================================================
    84.5 + * Cewolf : Chart enabling Web Objects Framework
    84.6 + * ================================================================
    84.7 + *
    84.8 + * Project Info:  http://cewolf.sourceforge.net
    84.9 + * Project Lead:  Guido Laures (guido@laures.de);
   84.10 + *
   84.11 + * (C) Copyright 2002, by Guido Laures
   84.12 + *
   84.13 + * This library is free software; you can redistribute it and/or modify it under the terms
   84.14 + * of the GNU Lesser General Public License as published by the Free Software Foundation;
   84.15 + * either version 2.1 of
   84.16 + * the License, or (at your option) any later version.
   84.17 + *
   84.18 + * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
   84.19 + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
   84.20 + * See the GNU Lesser General Public License for more details.
   84.21 + *
   84.22 + * You should have received a copy of the GNU Lesser General Public License along with this
   84.23 + * library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
   84.24 + * Boston, MA 02111-1307, USA.
   84.25 + */
   84.26 +
   84.27 +package de.laures.cewolf.taglib.tags;
   84.28 +
   84.29 +import java.io.IOException;
   84.30 +import java.io.Writer;
   84.31 +
   84.32 +import javax.servlet.http.HttpServletRequest;
   84.33 +import javax.servlet.http.HttpServletResponse;
   84.34 +import javax.servlet.jsp.JspException;
   84.35 +import javax.servlet.jsp.JspWriter;
   84.36 +import javax.servlet.jsp.PageContext;
   84.37 +import javax.servlet.jsp.tagext.BodyContent;
   84.38 +
   84.39 +import de.laures.cewolf.CewolfException;
   84.40 +import de.laures.cewolf.ChartHolder;
   84.41 +import de.laures.cewolf.ChartImage;
   84.42 +import de.laures.cewolf.Configuration;
   84.43 +import de.laures.cewolf.Storage;
   84.44 +import de.laures.cewolf.WebConstants;
   84.45 +import de.laures.cewolf.taglib.ChartImageDefinition;
   84.46 +import de.laures.cewolf.taglib.TaglibConstants;
   84.47 +import de.laures.cewolf.taglib.html.HTMLImgTag;
   84.48 +import de.laures.cewolf.taglib.util.MIMEExtensionHelper;
   84.49 +import de.laures.cewolf.taglib.util.PageUtils;
   84.50 +
   84.51 +/**
   84.52 + * This is the tag implementation of the &lt;img&gt; tag. This tag inputs the
   84.53 + * proper &lt;img&gt; tag into the HTML page delivered to the client. It
   84.54 + * therefor determines the chart ID which will be used by the rendering servlet
   84.55 + * to retrieve the chart.
   84.56 + * 
   84.57 + * @author glaures
   84.58 + * @see de.laures.cewolf.ChartImage
   84.59 + */
   84.60 +public class ChartImgTag extends HTMLImgTag implements CewolfRootTag, Mapped, TaglibConstants, WebConstants
   84.61 +{
   84.62 +
   84.63 +  private static final String  DEFAULT_MIME_TYPE = MIME_PNG;
   84.64 +  private static final String  TAG_NAME_SVG      = "EMBED";
   84.65 +  private static final int     DEFAULT_TIMEOUT   = 300;
   84.66 +
   84.67 +  private String               chartId           = null;
   84.68 +  private String               renderer;
   84.69 +  private String               mimeType          = DEFAULT_MIME_TYPE;
   84.70 +  private int                  timeout           = DEFAULT_TIMEOUT;
   84.71 +  protected String             sessionKey        = null;
   84.72 +  
   84.73 +  private ChartImageDefinition chartImageDefinition;
   84.74 +
   84.75 +  public int doStartTag() throws JspException
   84.76 +  {
   84.77 +    final ChartHolder chartHolder = PageUtils.getChartHolder(chartId, pageContext);
   84.78 +    this.chartImageDefinition = new ChartImageDefinition(chartHolder, width, height, ChartImage.IMG_TYPE_CHART, mimeType,timeout);
   84.79 +    Storage storage = Configuration.getInstance(pageContext.getServletContext()).getStorage();
   84.80 +    try
   84.81 +    {
   84.82 +      this.sessionKey = storage.storeChartImage(chartImageDefinition, pageContext);
   84.83 +    }
   84.84 +    catch (CewolfException cwex)
   84.85 +    {
   84.86 +      throw new JspException(cwex.getMessage());
   84.87 +    }
   84.88 +    return EVAL_PAGE;
   84.89 +  }
   84.90 +
   84.91 +  public int doAfterBody() throws JspException
   84.92 +  {
   84.93 +    try
   84.94 +    {
   84.95 +      // double checking for null as Resin had problems with that
   84.96 +      final BodyContent body = getBodyContent();
   84.97 +      if ( body != null )
   84.98 +      {
   84.99 +        final JspWriter writer = getPreviousOut();
  84.100 +        if ( writer != null )
  84.101 +        {
  84.102 +          body.writeOut(writer);
  84.103 +        }
  84.104 +      }
  84.105 +
  84.106 +    }
  84.107 +    catch (IOException ioex)
  84.108 +    {
  84.109 +      log.error(ioex);	
  84.110 +      throw new JspException(ioex.getMessage());
  84.111 +    }
  84.112 +    return SKIP_BODY;
  84.113 +  }
  84.114 +
  84.115 +  public int doEndTag() throws JspException
  84.116 +  {
  84.117 +    super.doStartTag();
  84.118 +    final StringBuffer buffer = new StringBuffer(" src=\"");
  84.119 +    buffer.append(getImgURL());
  84.120 +    buffer.append("\"");
  84.121 +    try
  84.122 +    {
  84.123 +      pageContext.getOut().write(buffer.toString());
  84.124 +    }
  84.125 +    catch (IOException ioex)
  84.126 +    {
  84.127 +      reset();
  84.128 +      log.error(ioex);
  84.129 +      throw new JspException(ioex.getMessage());
  84.130 +    }
  84.131 +    return super.doEndTag();
  84.132 +  }
  84.133 +
  84.134 +  /**
  84.135 +   * Fix an absolute url given as attribute by adding the full application url path to it.
  84.136 +   * It is considered absolute url (not relative) when it starts with "/"
  84.137 +   * @param url The url to fix
  84.138 +   * @param request The http request
  84.139 +   * @return Fixed url contains the full path
  84.140 +   */
  84.141 +  public static String fixAbsolutURL(String url, HttpServletRequest request) {
  84.142 +    if ( url.startsWith("/") )
  84.143 +    {
  84.144 +      //final HttpServletRequest request = (HttpServletRequest) pageContext.getRequest();
  84.145 +      final String context = request.getContextPath();
  84.146 +      url = context + url;
  84.147 +    }
  84.148 +    return url;
  84.149 +  }
  84.150 +  
  84.151 +  /**
  84.152 +   * Same as the other fixAbsolutURL, convinience only.
  84.153 +   * @param url The url to fix
  84.154 +   * @param pageContext The page context
  84.155 +   * @return Fixed url contains the full path
  84.156 +   */
  84.157 +  public static String fixAbsolutURL(String url, PageContext pageContext) {
  84.158 +  	return fixAbsolutURL(url, (HttpServletRequest) pageContext.getRequest());
  84.159 +  }
  84.160 +  
  84.161 +  /**
  84.162 +   * Build the image url
  84.163 +   * @param renderer the url of the renderer
  84.164 +   * @param pageContext Page context
  84.165 +   * @param sessionKey The session key for the image stored.
  84.166 +   * @param width The width 
  84.167 +   * @param height The height
  84.168 +   * @param mimeType the mime-type (for example png) of it
  84.169 +   * @return The full url 
  84.170 +   */
  84.171 +  public static String buildImgURL(
  84.172 +		  String renderer, PageContext pageContext, String sessionKey, int width, int height, String mimeType,
  84.173 +		  boolean forceSessionId, boolean removeAfterRender) {
  84.174 +	renderer = fixAbsolutURL(renderer, pageContext);
  84.175 +	final HttpServletResponse response = (HttpServletResponse) pageContext.getResponse();
  84.176 +	StringBuffer url = new StringBuffer(response.encodeURL(renderer));
  84.177 +	if ( url.toString().indexOf(SESSIONID_KEY) == -1 )
  84.178 +	{
  84.179 +		if (forceSessionId)
  84.180 +		{
  84.181 +			  final String sessionId = pageContext.getSession().getId();
  84.182 +			  url.append(";" + SESSIONID_KEY + "=" + sessionId);			
  84.183 +		}
  84.184 +	}
  84.185 +	url.append("?" + IMG_PARAM + "=" + sessionKey);
  84.186 +	url.append(AMPERSAND + WIDTH_PARAM + "=" + width);
  84.187 +	url.append(AMPERSAND + HEIGHT_PARAM + "=" + height);
  84.188 +	if (removeAfterRender)
  84.189 +	{
  84.190 +		url.append(AMPERSAND + REMOVE_AFTER_RENDERING + "=true");		
  84.191 +	}
  84.192 +	url.append(AMPERSAND + "iehack=" + MIMEExtensionHelper.getExtensionForMimeType(mimeType));
  84.193 +	return url.toString();  	
  84.194 +  }
  84.195 +  
  84.196 +  /**
  84.197 +   * To enable further server side scriptings on JSP output the session ID is
  84.198 +   * always encoded into the image URL even if cookies are enabled on the client
  84.199 +   * side.
  84.200 +   */
  84.201 +  protected String getImgURL()
  84.202 +  {
  84.203 +  	return buildImgURL(renderer, pageContext, sessionKey, width, height, mimeType, forceSessionId, removeAfterRender);
  84.204 +  }
  84.205 +
  84.206 +  public Object getRenderingInfo() throws CewolfException
  84.207 +  {
  84.208 +    return chartImageDefinition.getRenderingInfo();
  84.209 +  }
  84.210 +
  84.211 +  protected String getMimeType()
  84.212 +  {
  84.213 +    return mimeType;
  84.214 +  }
  84.215 +
  84.216 +  protected void reset()
  84.217 +  {
  84.218 +    this.mimeType = DEFAULT_MIME_TYPE;
  84.219 +    // as of a weird JSP compiler in resin
  84.220 +    // a reused tag's attribute is only set if
  84.221 +    // it changes. So width an height may not
  84.222 +    // be unset to ensure correct values.
  84.223 +    int lHeight = this.height;
  84.224 +    int lWidth = this.width;
  84.225 +    int lTimeout = this.timeout;
  84.226 +    super.reset();
  84.227 +    this.height = lHeight;
  84.228 +    this.width = lWidth;
  84.229 +    this.timeout = lTimeout;
  84.230 +  }
  84.231 +
  84.232 +  public void enableMapping()
  84.233 +  {
  84.234 +    setUsemap("#" + chartId);
  84.235 +  }
  84.236 +
  84.237 +  public String getChartId()
  84.238 +  {
  84.239 +    return getChartid();
  84.240 +  }
  84.241 +
  84.242 +  public void setChartid( String id )
  84.243 +  {
  84.244 +    this.chartId = id;
  84.245 +  }
  84.246 +
  84.247 +  public String getChartid()
  84.248 +  {
  84.249 +    return chartId;
  84.250 +  }
  84.251 +
  84.252 +  public void setRenderer( String renderer )
  84.253 +  {
  84.254 +    this.renderer = renderer;
  84.255 +  }
  84.256 +
  84.257 +  protected String getRenderer()
  84.258 +  {
  84.259 +    return this.renderer;
  84.260 +  }
  84.261 +
  84.262 +  public int getWidth()
  84.263 +  {
  84.264 +    return this.width;
  84.265 +  }
  84.266 +
  84.267 +  public int getHeight()
  84.268 +  {
  84.269 +    return height;
  84.270 +  }
  84.271 +
  84.272 +  /**
  84.273 +   * Sets the mimeType.
  84.274 +   * 
  84.275 +   * @param mimeType
  84.276 +   *          The mimeType to set
  84.277 +   */
  84.278 +  public void setMime( String mimeType )
  84.279 +  {
  84.280 +    this.mimeType = mimeType;
  84.281 +  }
  84.282 +
  84.283 +  /**
  84.284 +   * @see de.laures.cewolf.taglib.html.AbstractHTMLBaseTag#getTagName()
  84.285 +   */
  84.286 +  protected String getTagName()
  84.287 +  {
  84.288 +    if ( MIME_SVG.equals(mimeType) )
  84.289 +    {
  84.290 +      return TAG_NAME_SVG;
  84.291 +    }
  84.292 +    return super.getTagName();
  84.293 +  }
  84.294 +
  84.295 +  /**
  84.296 +   * @see de.laures.cewolf.taglib.html.AbstractHTMLBaseTag#writeAttributes(Writer)
  84.297 +   */
  84.298 +  public void writeAttributes( Writer wr )
  84.299 +  {
  84.300 +    super.writeAttributes(wr);
  84.301 +    if ( MIME_SVG.equals(mimeType) )
  84.302 +    {
  84.303 +      try
  84.304 +      {
  84.305 +        appendAttributeDeclaration(wr, "http://www.adobe.com/svg/viewer/install/", "PLUGINSPAGE");
  84.306 +      }
  84.307 +      catch (IOException ioex)
  84.308 +      {
  84.309 +        ioex.printStackTrace();
  84.310 +      }
  84.311 +    }
  84.312 +  }
  84.313 +
  84.314 +  /**
  84.315 +   * @return Returns the timeout.
  84.316 +   */
  84.317 +  public int getTimeout()
  84.318 +  {
  84.319 +    return timeout;
  84.320 +  }
  84.321 +  /**
  84.322 +   * @param timeout The timeout to set.
  84.323 +   */
  84.324 +  public void setTimeout( int timeout )
  84.325 +  {
  84.326 +    this.timeout = timeout;
  84.327 +  }
  84.328 +}
  84.329 \ No newline at end of file
    85.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    85.2 +++ b/java/cewolf-1.0/src/main/java/de/laures/cewolf/taglib/tags/ChartImgURLTag.java	Sat Feb 28 21:31:02 2009 +0100
    85.3 @@ -0,0 +1,79 @@
    85.4 +/* ================================================================
    85.5 + * Cewolf : Chart enabling Web Objects Framework
    85.6 + * ================================================================
    85.7 + *
    85.8 + * Project Info:  http://cewolf.sourceforge.net
    85.9 + * Project Lead:  Guido Laures (guido@laures.de);
   85.10 + *
   85.11 + * (C) Copyright 2002, by Guido Laures
   85.12 + *
   85.13 + * This library is free software; you can redistribute it and/or modify it under the terms
   85.14 + * of the GNU Lesser General Public License as published by the Free Software Foundation;
   85.15 + * either version 2.1 of
   85.16 + * the License, or (at your option) any later version.
   85.17 + *
   85.18 + * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
   85.19 + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
   85.20 + * See the GNU Lesser General Public License for more details.
   85.21 + *
   85.22 + * You should have received a copy of the GNU Lesser General Public License along with this
   85.23 + * library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
   85.24 + * Boston, MA 02111-1307, USA.
   85.25 + */
   85.26 +
   85.27 +package de.laures.cewolf.taglib.tags;
   85.28 +
   85.29 +import java.io.IOException;
   85.30 +
   85.31 +import javax.servlet.jsp.JspException;
   85.32 +
   85.33 +/**
   85.34 + * This tag only renders the image URL instead of a full &lt;img&gt; tag.
   85.35 + * @author glaures
   85.36 + * @see de.laures.cewolf.taglib.tags.ChartImgTag
   85.37 + */
   85.38 +public class ChartImgURLTag extends ChartImgTag {
   85.39 +	
   85.40 +	public static final String VAR_NAME = "var";
   85.41 +	
   85.42 +	String var = null;
   85.43 +    
   85.44 +    public int doEndTag() throws JspException {
   85.45 +        try {
   85.46 +        	if(var == null){
   85.47 +	            pageContext.getOut().write(getImgURL());
   85.48 +        	} else {
   85.49 +        		pageContext.setAttribute(var, getImgURL());
   85.50 +        	}
   85.51 +        } catch(IOException ioex){
   85.52 +        	log.error(ioex);
   85.53 +            throw new JspException(ioex.getMessage());
   85.54 +        }
   85.55 +    	return doAfterEndTag(EVAL_PAGE);
   85.56 +    }
   85.57 +    
   85.58 +	/**
   85.59 +	 * @see de.laures.cewolf.taglib.tags.CewolfBodyTag#reset()
   85.60 +	 */
   85.61 +	protected void reset() {
   85.62 +		super.reset();
   85.63 +		var = null;
   85.64 +	}
   85.65 +
   85.66 +	/**
   85.67 +	 * Returns the var.
   85.68 +	 * @return String
   85.69 +	 */
   85.70 +	public String getVar() {
   85.71 +		return var;
   85.72 +	}
   85.73 +
   85.74 +	/**
   85.75 +	 * Sets the var.
   85.76 +	 * @param var The var to set
   85.77 +	 */
   85.78 +	public void setVar(String var) {
   85.79 +		this.var = var;
   85.80 +	}
   85.81 +
   85.82 +}
    86.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    86.2 +++ b/java/cewolf-1.0/src/main/java/de/laures/cewolf/taglib/tags/ChartImgURLTagEI.java	Sat Feb 28 21:31:02 2009 +0100
    86.3 @@ -0,0 +1,49 @@
    86.4 +/* ================================================================
    86.5 + * Cewolf : Chart enabling Web Objects Framework
    86.6 + * ================================================================
    86.7 + *
    86.8 + * Project Info:  http://cewolf.sourceforge.net
    86.9 + * Project Lead:  Guido Laures (guido@laures.de);
   86.10 + *
   86.11 + * (C) Copyright 2002, by Guido Laures
   86.12 + *
   86.13 + * This library is free software; you can redistribute it and/or modify it under the terms
   86.14 + * of the GNU Lesser General Public License as published by the Free Software Foundation;
   86.15 + * either version 2.1 of
   86.16 + * the License, or (at your option) any later version.
   86.17 + *
   86.18 + * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
   86.19 + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
   86.20 + * See the GNU Lesser General Public License for more details.
   86.21 + *
   86.22 + * You should have received a copy of the GNU Lesser General Public License along with this
   86.23 + * library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
   86.24 + * Boston, MA 02111-1307, USA.
   86.25 + */
   86.26 +
   86.27 +package de.laures.cewolf.taglib.tags;
   86.28 +
   86.29 +import javax.servlet.jsp.tagext.TagData;
   86.30 +import javax.servlet.jsp.tagext.TagExtraInfo;
   86.31 +import javax.servlet.jsp.tagext.VariableInfo;
   86.32 +
   86.33 +/**
   86.34 + * TagExxtraInfo for the ChartImgURLTag
   86.35 + * @see ChartImgURLTag
   86.36 + * @author glaures
   86.37 + */
   86.38 +public class ChartImgURLTagEI extends TagExtraInfo {
   86.39 +	
   86.40 +	/**
   86.41 +	 * @see javax.servlet.jsp.tagext.TagExtraInfo#getVariableInfo(TagData)
   86.42 +	 */
   86.43 +	public VariableInfo[] getVariableInfo(TagData tagData) {
   86.44 +		String varName = (String)(tagData.getAttribute(ChartImgURLTag.VAR_NAME));
   86.45 +		if(varName == null){
   86.46 +			return new VariableInfo[] {};
   86.47 +		}
   86.48 +		VariableInfo info = new VariableInfo(varName, "java.lang.String", true, VariableInfo.AT_END);
   86.49 +		return new VariableInfo[] {info};
   86.50 +	}
   86.51 +
   86.52 +}
    87.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    87.2 +++ b/java/cewolf-1.0/src/main/java/de/laures/cewolf/taglib/tags/ChartMapTag.java	Sat Feb 28 21:31:02 2009 +0100
    87.3 @@ -0,0 +1,272 @@
    87.4 +/* ================================================================
    87.5 + * Cewolf : Chart enabling Web Objects Framework
    87.6 + * ================================================================
    87.7 + *
    87.8 + * Project Info:  http://cewolf.sourceforge.net
    87.9 + * Project Lead:  Guido Laures (guido@laures.de);
   87.10 + *
   87.11 + * (C) Copyright 2002, by Guido Laures
   87.12 + *
   87.13 + * This library is free software; you can redistribute it and/or modify it under the terms
   87.14 + * of the GNU Lesser General Public License as published by the Free Software Foundation;
   87.15 + * either version 2.1 of the License, or (at your option) any later version.
   87.16 + *
   87.17 + * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
   87.18 + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
   87.19 + * See the GNU Lesser General Public License for more details.
   87.20 + *
   87.21 + * You should have received a copy of the GNU Lesser General Public License along with this
   87.22 + * library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
   87.23 + * Boston, MA 02111-1307, USA.
   87.24 + */
   87.25 +
   87.26 +package de.laures.cewolf.taglib.tags;
   87.27 +
   87.28 +import java.io.IOException;
   87.29 +import java.io.Writer;
   87.30 +import java.util.Iterator;
   87.31 +
   87.32 +import javax.servlet.http.HttpServletRequest;
   87.33 +import javax.servlet.http.HttpServletResponse;
   87.34 +import javax.servlet.jsp.JspException;
   87.35 +
   87.36 +import org.apache.commons.logging.Log;
   87.37 +import org.apache.commons.logging.LogFactory;
   87.38 +import org.jfree.chart.ChartRenderingInfo;
   87.39 +import org.jfree.chart.entity.CategoryItemEntity;
   87.40 +import org.jfree.chart.entity.ChartEntity;
   87.41 +import org.jfree.chart.entity.LegendItemEntity;
   87.42 +import org.jfree.chart.entity.PieSectionEntity;
   87.43 +import org.jfree.chart.entity.XYItemEntity;
   87.44 +import org.jfree.data.category.CategoryDataset;
   87.45 +import org.jfree.data.general.Dataset;
   87.46 +import org.jfree.data.general.PieDataset;
   87.47 +import org.jfree.data.xy.XYDataset;
   87.48 +
   87.49 +import de.laures.cewolf.CewolfException;
   87.50 +import de.laures.cewolf.Configuration;
   87.51 +import de.laures.cewolf.links.CategoryItemLinkGenerator;
   87.52 +import de.laures.cewolf.links.LinkGenerator;
   87.53 +import de.laures.cewolf.links.PieSectionLinkGenerator;
   87.54 +import de.laures.cewolf.links.XYItemLinkGenerator;
   87.55 +import de.laures.cewolf.taglib.util.BrowserDetection;
   87.56 +import de.laures.cewolf.taglib.util.PageUtils;
   87.57 +import de.laures.cewolf.tooltips.CategoryToolTipGenerator;
   87.58 +import de.laures.cewolf.tooltips.PieToolTipGenerator;
   87.59 +import de.laures.cewolf.tooltips.ToolTipGenerator;
   87.60 +import de.laures.cewolf.tooltips.XYToolTipGenerator;
   87.61 +
   87.62 +/**
   87.63 + * Tag &lt;map&gt; which defines the tooltip and link tags.
   87.64 + * @see DataTag
   87.65 + * @author  Guido Laures
   87.66 + */
   87.67 +public class ChartMapTag extends CewolfTag {
   87.68 +
   87.69 +	private static final long serialVersionUID = -3742340487378471159L;
   87.70 +	
   87.71 +	private static final Log LOG = LogFactory.getLog(ChartMapTag.class);
   87.72 +		
   87.73 +	ToolTipGenerator toolTipGenerator = null;
   87.74 +	LinkGenerator linkGenerator = null;
   87.75 +	
   87.76 +	// If the links provided by the JFreeChart renderer should be used.
   87.77 +	boolean useJFreeChartLinkGenerator = false;
   87.78 +	// If the tooltips provided by the JFreeChart renderer should be used.
   87.79 +	boolean useJFreeChartTooltipGenerator = false;
   87.80 +
   87.81 +	public int doStartTag() throws JspException {
   87.82 +		// Object linkGenerator = getLinkGenerator();
   87.83 +		Mapped root = (Mapped) PageUtils.findRoot(this, pageContext);
   87.84 +		root.enableMapping();
   87.85 +		String chartId = ((CewolfRootTag) root).getChartId();
   87.86 +		try {
   87.87 +			Dataset dataset = PageUtils.getDataset(chartId, pageContext);
   87.88 +			Writer out = pageContext.getOut();
   87.89 +			final boolean isIE = BrowserDetection.isIE((HttpServletRequest) pageContext.getRequest());
   87.90 +			if (hasToolTips()) {
   87.91 +				enableToolTips(out, isIE);
   87.92 +			}
   87.93 +			out.write("<MAP name=\"" + chartId + "\">\n");
   87.94 +			ChartRenderingInfo info = (ChartRenderingInfo) root.getRenderingInfo();
   87.95 +			Iterator entities = info.getEntityCollection().iterator();
   87.96 +			while (entities.hasNext()) {
   87.97 +				ChartEntity ce = (ChartEntity) entities.next();
   87.98 +				out.write("\n<AREA shape=\"" + ce.getShapeType() + "\" ");
   87.99 +				out.write("COORDS=\"" + ce.getShapeCoords() + "\" ");
  87.100 +		        if (ce instanceof XYItemEntity)
  87.101 +		        {
  87.102 +		          dataset = ((XYItemEntity)ce).getDataset();
  87.103 +		        }
  87.104 +				if (!(ce instanceof LegendItemEntity)) {
  87.105 +					if (hasToolTips()) {
  87.106 +						writeOutToolTip(dataset, out, isIE, ce);
  87.107 +					}
  87.108 +					if (hasLinks()) {
  87.109 +						writeOutLink(linkGenerator, dataset, out, ce);
  87.110 +					}
  87.111 +				}
  87.112 +				out.write(">");
  87.113 +			}
  87.114 +		} catch (IOException ioex) {
  87.115 +			log.error(ioex);
  87.116 +			throw new JspException(ioex.getMessage());
  87.117 +		} catch (CewolfException cwex) {
  87.118 +			log.error(cwex);
  87.119 +			throw new JspException(cwex.getMessage());
  87.120 +		}
  87.121 +		return EVAL_PAGE;
  87.122 +	}
  87.123 +
  87.124 +	public int doEndTag() throws JspException {
  87.125 +		// print out image map end
  87.126 +		Writer out = pageContext.getOut();
  87.127 +		try {
  87.128 +			out.write("</MAP>");
  87.129 +		} catch (IOException ioex) {
  87.130 +			log.error(ioex);
  87.131 +			throw new JspException(ioex.getMessage());
  87.132 +		}
  87.133 +		return doAfterEndTag(EVAL_PAGE);
  87.134 +	}
  87.135 +
  87.136 +	public void reset() {
  87.137 +		this.toolTipGenerator = null;
  87.138 +		this.linkGenerator = null;
  87.139 +	}
  87.140 +
  87.141 +	public void writeOutLink(Object linkGen, Dataset dataset, Writer out, ChartEntity ce) throws IOException {
  87.142 +		final String link = generateLink(dataset, ce);
  87.143 +		
  87.144 +		if (null != link) {
  87.145 +			final String href = ((HttpServletResponse) pageContext.getResponse()).encodeURL(link);
  87.146 +			out.write("HREF=\"" + href + "\"");
  87.147 +		}
  87.148 +	}
  87.149 +
  87.150 +	private void writeOutToolTip(Dataset dataset, Writer out, final boolean isIE, ChartEntity ce) throws IOException, JspException {
  87.151 +		String toolTip = generateToolTip(dataset, ce);
  87.152 +		if (null != toolTip) {
  87.153 +			if (!isIE) {
  87.154 +				out.write("ONMOUSEOVER=\"return overlib('"
  87.155 +						+ toolTip + "', WIDTH, '20');\" ONMOUSEOUT=\"return nd();\" ");
  87.156 +			} else {
  87.157 +				out.write("ALT=\"" + toolTip + "\" ");
  87.158 +			}
  87.159 +		}
  87.160 +	}
  87.161 +
  87.162 +	public void enableToolTips(Writer out, final boolean isIE) throws IOException {
  87.163 +		if (!PageUtils.isToolTipsEnabled(pageContext) && !isIE) {
  87.164 +			Configuration config = Configuration.getInstance(pageContext.getServletContext());
  87.165 +			String overLibURL = ChartImgTag.fixAbsolutURL(config.getOverlibURL(), pageContext);
  87.166 +			out.write("<script language=\"JavaScript\" src=\"");
  87.167 +			out.write(overLibURL + "\"><!-- overLIB (c) Erik Bosrup --></script>\n");
  87.168 +			out.write("<div id=\"overDiv\" style=\"position:absolute; visibility:hidden; z-index:1000;\"></div>\n");
  87.169 +			PageUtils.setToolTipsEnabled(pageContext);
  87.170 +		}
  87.171 +	}
  87.172 +
  87.173 +	private String generateLink(Dataset dataset, ChartEntity ce) {
  87.174 +		String link = null;
  87.175 +		if (useJFreeChartLinkGenerator) {
  87.176 +			link = ce.getURLText();
  87.177 +		} else if (linkGenerator instanceof CategoryItemLinkGenerator || linkGenerator instanceof XYItemLinkGenerator || linkGenerator instanceof PieSectionLinkGenerator) {
  87.178 +    		if (linkGenerator instanceof CategoryItemLinkGenerator) {
  87.179 +    			if (ce instanceof CategoryItemEntity) {
  87.180 +    				CategoryItemEntity catEnt = (CategoryItemEntity) ce;
  87.181 +    				link = ((CategoryItemLinkGenerator) linkGenerator).generateLink(dataset, catEnt.getSeries(), catEnt.getCategory());
  87.182 +    			}
  87.183 +    		}
  87.184 +    		if (linkGenerator instanceof XYItemLinkGenerator) {
  87.185 +  		    if (ce instanceof XYItemEntity) {
  87.186 +    				XYItemEntity xyEnt = (XYItemEntity) ce;
  87.187 +    				link = ((XYItemLinkGenerator) linkGenerator).generateLink(dataset, xyEnt.getSeriesIndex(), xyEnt.getItem());
  87.188 +  		    } else {
  87.189 +  		        // Note; there is a simple ChartEntity also passed since Jfreechart 1.0rc1, that is ignored
  87.190 +  		        LOG.debug("Link entity skipped, not XYItemEntity.class:" + ce);
  87.191 +  		    }
  87.192 +    		}
  87.193 +    		if (linkGenerator instanceof PieSectionLinkGenerator) {
  87.194 +  		    if (ce instanceof PieSectionEntity) {
  87.195 +    				PieSectionEntity pieEnt = (PieSectionEntity) ce;
  87.196 +    				link = ((PieSectionLinkGenerator) linkGenerator).generateLink(dataset, pieEnt.getSectionKey());
  87.197 +  		    }
  87.198 +    		}
  87.199 +  	}
  87.200 +		return link;
  87.201 +	}
  87.202 +
  87.203 +	private String generateToolTip(Dataset dataset, ChartEntity ce) throws JspException {
  87.204 +		String tooltip = null;
  87.205 +		if (useJFreeChartTooltipGenerator) {
  87.206 +			tooltip = ce.getToolTipText();
  87.207 +		} else if (toolTipGenerator instanceof CategoryToolTipGenerator || toolTipGenerator instanceof XYToolTipGenerator || toolTipGenerator instanceof PieToolTipGenerator) {
  87.208 +		  if (toolTipGenerator instanceof CategoryToolTipGenerator) {
  87.209 +		    if (ce instanceof CategoryItemEntity) {
  87.210 +				CategoryItemEntity catEnt = (CategoryItemEntity) ce;
  87.211 +				tooltip = ((CategoryToolTipGenerator) toolTipGenerator).generateToolTip((CategoryDataset) dataset, catEnt.getSeries(), catEnt.getCategoryIndex());
  87.212 +		    }
  87.213 +		  }
  87.214 +		    
  87.215 +		  if (toolTipGenerator instanceof XYToolTipGenerator) {
  87.216 +		    if (ce instanceof XYItemEntity) {
  87.217 +				XYItemEntity xyEnt = (XYItemEntity) ce;
  87.218 +				tooltip = ((XYToolTipGenerator) toolTipGenerator).generateToolTip((XYDataset) dataset, xyEnt.getSeriesIndex(), xyEnt.getItem());
  87.219 +		    }
  87.220 +		  }
  87.221 +
  87.222 +		  if (toolTipGenerator instanceof PieToolTipGenerator) {
  87.223 +		    if (ce instanceof PieSectionEntity) {
  87.224 +				PieSectionEntity pieEnt = (PieSectionEntity) ce;
  87.225 +				PieDataset ds = (PieDataset) dataset;
  87.226 +				final int index = pieEnt.getSectionIndex();
  87.227 +				tooltip = ((PieToolTipGenerator) toolTipGenerator).generateToolTip(ds, ds.getKey(index), index);
  87.228 +		    }
  87.229 +		  }
  87.230 +		} else {
  87.231 +			// throw because category is unknown
  87.232 +		    throw new JspException(
  87.233 +				"TooltipgGenerator of class " + toolTipGenerator.getClass().getName() + " does not implement the appropriate TooltipGenerator interface for entity type " + ce.getClass().getName());
  87.234 +		}
  87.235 +		return tooltip;
  87.236 +	}
  87.237 +
  87.238 +	private boolean hasToolTips() throws JspException {
  87.239 +		if (toolTipGenerator!=null && useJFreeChartTooltipGenerator) {
  87.240 +			throw new JspException("Can't have both tooltipGenerator and useJFreeChartTooltipGenerator parameters specified!");
  87.241 +	}
  87.242 +		return toolTipGenerator != null || useJFreeChartTooltipGenerator;
  87.243 +	}
  87.244 +
  87.245 +	public void setTooltipgeneratorid(String id) {
  87.246 +		this.toolTipGenerator = (ToolTipGenerator) pageContext.findAttribute(id);
  87.247 +	}
  87.248 +
  87.249 +	private boolean hasLinks() throws JspException {
  87.250 +		if (linkGenerator!=null && useJFreeChartLinkGenerator) {
  87.251 +			throw new JspException("Can't have both linkGenerator and useJFreeChartLinkGenerator parameters specified!");
  87.252 +	}
  87.253 +		return linkGenerator != null || useJFreeChartLinkGenerator;
  87.254 +	}
  87.255 +
  87.256 +	public void setLinkgeneratorid(String id) {
  87.257 +		this.linkGenerator = (LinkGenerator) pageContext.findAttribute(id);
  87.258 +	}
  87.259 +	
  87.260 +	/**
  87.261 +	 * Setter of the useJFreeChartLinkGenerator field.
  87.262 +	 * @param useJFreeChartLinkGenerator the useJFreeChartLinkGenerator to set.
  87.263 +	 */
  87.264 +	public void setUseJFreeChartLinkGenerator(boolean useJFreeChartLinkGenerator) {
  87.265 +		this.useJFreeChartLinkGenerator = useJFreeChartLinkGenerator;
  87.266 +	}
  87.267 +	/**
  87.268 +	 * Setter of the useJFreeChartTooltipGenerator field.
  87.269 +	 * @param useJFreeChartTooltipGenerator the useJFreeChartTooltipGenerator to set.
  87.270 +	 */
  87.271 +	public void setUseJFreeChartTooltipGenerator(boolean useJFreeChartTooltipGenerator) {
  87.272 +		this.useJFreeChartTooltipGenerator = useJFreeChartTooltipGenerator;
  87.273 +	}
  87.274 +	
  87.275 +}
    88.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    88.2 +++ b/java/cewolf-1.0/src/main/java/de/laures/cewolf/taglib/tags/ChartPostProcessorTag.java	Sat Feb 28 21:31:02 2009 +0100
    88.3 @@ -0,0 +1,54 @@
    88.4 +/* ================================================================
    88.5 + * Cewolf : Chart enabling Web Objects Framework
    88.6 + * ================================================================
    88.7 + *
    88.8 + * Project Info:  http://cewolf.sourceforge.net
    88.9 + * Project Lead:  Guido Laures (guido@laures.de);
   88.10 + *
   88.11 + * (C) Copyright 2002, by Guido Laures
   88.12 + *
   88.13 + * This library is free software; you can redistribute it and/or modify it under the terms
   88.14 + * of the GNU Lesser General Public License as published by the Free Software Foundation;
   88.15 + * either version 2.1 of the License, or (at your option) any later version.
   88.16 + *
   88.17 + * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
   88.18 + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
   88.19 + * See the GNU Lesser General Public License for more details.
   88.20 + *
   88.21 + * You should have received a copy of the GNU Lesser General Public License along with this
   88.22 + * library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
   88.23 + * Boston, MA 02111-1307, USA.
   88.24 + */
   88.25 +
   88.26 +package de.laures.cewolf.taglib.tags;
   88.27 +
   88.28 +import javax.servlet.jsp.JspException;
   88.29 +
   88.30 +import de.laures.cewolf.ChartPostProcessor;
   88.31 +import de.laures.cewolf.taglib.util.PageUtils;
   88.32 +
   88.33 +/** 
   88.34 + * Tag to define a post processor.
   88.35 + * @see ChartPostProcessor
   88.36 + * @author  Guido Laures 
   88.37 + */
   88.38 +public class ChartPostProcessorTag extends AbstractParameterizedObjectTag {
   88.39 +
   88.40 +    public int doEndTag() throws JspException {
   88.41 +        ChartPostProcessor pp = null;
   88.42 +        try {
   88.43 +            pp = (ChartPostProcessor)getObject();
   88.44 +            if (pp == null) {
   88.45 +                throw new JspException("Could not find ChartEnhanncer under ID '" + getId() + "'");
   88.46 +            }
   88.47 +        } catch (ClassCastException cce) {
   88.48 +            throw new JspException("Bean under ID '" + getId() + "' is of type '"
   88.49 +            + pp.getClass().getName() +
   88.50 +            "'.\nType expected:" + ChartPostProcessor.class.getName());
   88.51 +        }
   88.52 +        AbstractChartTag rt = (AbstractChartTag)PageUtils.findRoot(this, pageContext);
   88.53 +        rt.addChartPostProcessor((ChartPostProcessor)getObject(), getParameters());
   88.54 +        return doAfterEndTag(EVAL_PAGE);
   88.55 +    }
   88.56 +
   88.57 +}
    89.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    89.2 +++ b/java/cewolf-1.0/src/main/java/de/laures/cewolf/taglib/tags/ColorTag.java	Sat Feb 28 21:31:02 2009 +0100
    89.3 @@ -0,0 +1,63 @@
    89.4 +/* ================================================================
    89.5 + * Cewolf : Chart enabling Web Objects Framework
    89.6 + * ================================================================
    89.7 + *
    89.8 + * Project Info:  http://cewolf.sourceforge.net
    89.9 + * Project Lead:  Guido Laures (guido@laures.de);
   89.10 + *
   89.11 + * (C) Copyright 2002, by Guido Laures
   89.12 + *
   89.13 + * This library is free software; you can redistribute it and/or modify it under the terms
   89.14 + * of the GNU Lesser General Public License as published by the Free Software Foundation;
   89.15 + * either version 2.1 of
   89.16 + * the License, or (at your option) any later version.
   89.17 + *
   89.18 + * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
   89.19 + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
   89.20 + * See the GNU Lesser General Public License for more details.
   89.21 + *
   89.22 + * You should have received a copy of the GNU Lesser General Public License along with this
   89.23 + * library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
   89.24 + * Boston, MA 02111-1307, USA.
   89.25 + */
   89.26 +
   89.27 +package de.laures.cewolf.taglib.tags;
   89.28 +
   89.29 +import java.awt.Color;
   89.30 +import java.util.Map;
   89.31 +
   89.32 +import de.laures.cewolf.ChartPostProcessor;
   89.33 +import de.laures.cewolf.taglib.util.ColorHelper;
   89.34 +
   89.35 +
   89.36 +/** 
   89.37 + * Tag &lt;color&gt; which sets the color of its parent tag.
   89.38 + * This must implement the Colored interface
   89.39 + * @see Colored
   89.40 + * @author  Guido Laures 
   89.41 + */
   89.42 +public class ColorTag extends CewolfBodyTag implements ChartPostProcessor {
   89.43 +
   89.44 +    private Color color = Color.white;
   89.45 +
   89.46 +    public int doEndTag() {
   89.47 +        ((Painted)getParent()).setPaint(color);
   89.48 +        return doAfterEndTag(EVAL_PAGE);
   89.49 +    }
   89.50 +    
   89.51 +    protected void reset(){
   89.52 +    }
   89.53 +
   89.54 +    public void setColor(String s) {
   89.55 +        this.color = ColorHelper.getColor(s);
   89.56 +    }
   89.57 +
   89.58 +    protected Color getColor() {
   89.59 +        return color;
   89.60 +    }
   89.61 +    
   89.62 +    public void processChart(Object chart, Map args){
   89.63 +        ((org.jfree.chart.JFreeChart)chart).setBackgroundPaint(color);
   89.64 +    }
   89.65 +
   89.66 +}
    90.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    90.2 +++ b/java/cewolf-1.0/src/main/java/de/laures/cewolf/taglib/tags/Colored.java	Sat Feb 28 21:31:02 2009 +0100
    90.3 @@ -0,0 +1,36 @@
    90.4 +/* ================================================================
    90.5 + * Cewolf : Chart enabling Web Objects Framework
    90.6 + * ================================================================
    90.7 + *
    90.8 + * Project Info:  http://cewolf.sourceforge.net
    90.9 + * Project Lead:  Guido Laures (guido@laures.de);
   90.10 + *
   90.11 + * (C) Copyright 2002, by Guido Laures
   90.12 + *
   90.13 + * This library is free software; you can redistribute it and/or modify it under the terms
   90.14 + * of the GNU Lesser General Public License as published by the Free Software Foundation;
   90.15 + * either version 2.1 of
   90.16 + * the License, or (at your option) any later version.
   90.17 + *
   90.18 + * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
   90.19 + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
   90.20 + * See the GNU Lesser General Public License for more details.
   90.21 + *
   90.22 + * You should have received a copy of the GNU Lesser General Public License along with this
   90.23 + * library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
   90.24 + * Boston, MA 02111-1307, USA.
   90.25 + */
   90.26 +
   90.27 +package de.laures.cewolf.taglib.tags;
   90.28 +
   90.29 +import java.awt.Color;
   90.30 +
   90.31 +/** 
   90.32 + * Tags implementing this interface can nest a &lt;color&gt; tag.
   90.33 + * @see ColorTag
   90.34 + * @author  Guido Laures 
   90.35 + */
   90.36 +public interface Colored {
   90.37 +
   90.38 +    void setColor(Color col);
   90.39 +}
    91.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    91.2 +++ b/java/cewolf-1.0/src/main/java/de/laures/cewolf/taglib/tags/CombinedChartTag.java	Sat Feb 28 21:31:02 2009 +0100
    91.3 @@ -0,0 +1,33 @@
    91.4 +package de.laures.cewolf.taglib.tags;
    91.5 +
    91.6 +import de.laures.cewolf.taglib.AbstractChartDefinition;
    91.7 +import de.laures.cewolf.taglib.CombinedChartDefinition;
    91.8 +import de.laures.cewolf.taglib.PlotContainer;
    91.9 +import de.laures.cewolf.taglib.PlotDefinition;
   91.10 +
   91.11 +
   91.12 +/**
   91.13 + * Chart tag subclass to handle combined charts
   91.14 + *
   91.15 + * @author guido
   91.16 + * @author tbardzil
   91.17 + *
   91.18 + */
   91.19 +public class CombinedChartTag extends AbstractChartTag implements PlotContainer {
   91.20 +
   91.21 +    protected AbstractChartDefinition createChartDefinition() {
   91.22 +        return new CombinedChartDefinition();
   91.23 +    }
   91.24 +
   91.25 +	public void addPlot(PlotDefinition pd){
   91.26 +		((CombinedChartDefinition) chartDefinition).addPlot(pd);
   91.27 +	}
   91.28 +
   91.29 +    /**
   91.30 +     * Setter for property layout [tb]
   91.31 +     * @param layout
   91.32 +     */
   91.33 +    public void setLayout(String layout) {
   91.34 +        ((CombinedChartDefinition) chartDefinition).setLayout(layout);
   91.35 +    }
   91.36 +}
    92.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    92.2 +++ b/java/cewolf-1.0/src/main/java/de/laures/cewolf/taglib/tags/DataTag.java	Sat Feb 28 21:31:02 2009 +0100
    92.3 @@ -0,0 +1,41 @@
    92.4 +/* ================================================================
    92.5 + * Cewolf : Chart enabling Web Objects Framework
    92.6 + * ================================================================
    92.7 + *
    92.8 + * Project Info:  http://cewolf.sourceforge.net
    92.9 + * Project Lead:  Guido Laures (guido@laures.de);
   92.10 + *
   92.11 + * (C) Copyright 2002, by Guido Laures
   92.12 + *
   92.13 + * This library is free software; you can redistribute it and/or modify it under the terms
   92.14 + * of the GNU Lesser General Public License as published by the Free Software Foundation;
   92.15 + * either version 2.1 of the License, or (at your option) any later version.
   92.16 + *
   92.17 + * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
   92.18 + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
   92.19 + * See the GNU Lesser General Public License for more details.
   92.20 + *
   92.21 + * You should have received a copy of the GNU Lesser General Public License along with this
   92.22 + * library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
   92.23 + * Boston, MA 02111-1307, USA.
   92.24 + */
   92.25 +
   92.26 +package de.laures.cewolf.taglib.tags;
   92.27 +
   92.28 +import javax.servlet.jsp.JspException;
   92.29 +import javax.servlet.jsp.tagext.TagSupport;
   92.30 +
   92.31 +/** 
   92.32 + * Tag &lt;data&gt; which nests the data definition of the chart. Currently only
   92.33 + * the &lt;producer&gt; tag is supported. Future versions will define further
   92.34 + * tags to provide data via SQL, CVS or XML directly in the JSP.
   92.35 + * @see ProducerTag
   92.36 + * @author  Guido Laures 
   92.37 + */
   92.38 +public class DataTag extends TagSupport {
   92.39 +
   92.40 +    public int doStartTag() throws JspException {
   92.41 +        return EVAL_BODY_INCLUDE;
   92.42 +    }
   92.43 +
   92.44 +}
    93.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    93.2 +++ b/java/cewolf-1.0/src/main/java/de/laures/cewolf/taglib/tags/GradientTag.java	Sat Feb 28 21:31:02 2009 +0100
    93.3 @@ -0,0 +1,71 @@
    93.4 +/* ================================================================
    93.5 + * Cewolf : Chart enabling Web Objects Framework
    93.6 + * ================================================================
    93.7 + *
    93.8 + * Project Info:  http://cewolf.sourceforge.net
    93.9 + * Project Lead:  Guido Laures (guido@laures.de);
   93.10 + *
   93.11 + * (C) Copyright 2002, by Guido Laures
   93.12 + *
   93.13 + * This library is free software; you can redistribute it and/or modify it under the terms
   93.14 + * of the GNU Lesser General Public License as published by the Free Software Foundation;
   93.15 + * either version 2.1 of
   93.16 + * the License, or (at your option) any later version.
   93.17 + *
   93.18 + * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
   93.19 + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
   93.20 + * See the GNU Lesser General Public License for more details.
   93.21 + *
   93.22 + * You should have received a copy of the GNU Lesser General Public License along with this
   93.23 + * library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
   93.24 + * Boston, MA 02111-1307, USA.
   93.25 + */
   93.26 +
   93.27 +package de.laures.cewolf.taglib.tags;
   93.28 +
   93.29 +import java.awt.Color;
   93.30 +
   93.31 +
   93.32 +/** 
   93.33 + * Tag &lt;gradient-paint&gt; which defines a paint of type gradient.
   93.34 + * @author  Guido Laures 
   93.35 + */
   93.36 +public class GradientTag extends CewolfTag implements Pointed {
   93.37 +
   93.38 +    private SerializableGradientPaint gPaint = new SerializableGradientPaint();
   93.39 +    private int pointCount = 0;
   93.40 +
   93.41 +    public int doStartTag() {
   93.42 +        return EVAL_PAGE;
   93.43 +    }
   93.44 +
   93.45 +    public int doEndTag() {
   93.46 +        ((Painted)getParent()).setPaint(gPaint);
   93.47 +        return doAfterEndTag(EVAL_PAGE);
   93.48 +    }
   93.49 +
   93.50 +    public void reset() {
   93.51 +        gPaint = new SerializableGradientPaint();
   93.52 +        pointCount = 0;
   93.53 +    }
   93.54 +
   93.55 +    public void addPoint(int x, int y, Color c) {
   93.56 +        switch (pointCount) {
   93.57 +            case 0:
   93.58 +                gPaint.setPoint1(x, y, c);
   93.59 +                break;
   93.60 +            default:
   93.61 +                gPaint.setPoint2(x, y, c);
   93.62 +        }
   93.63 +        pointCount ++;
   93.64 +    }
   93.65 +
   93.66 +    /**
   93.67 +     * Setter for property cyclic.
   93.68 +     * @param cyclic New value of property cyclic.
   93.69 +     */
   93.70 +    public void setCyclic(boolean cyclic) {
   93.71 +        gPaint.setCyclic(cyclic);
   93.72 +    }
   93.73 +
   93.74 +}
    94.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    94.2 +++ b/java/cewolf-1.0/src/main/java/de/laures/cewolf/taglib/tags/LegendTag.java	Sat Feb 28 21:31:02 2009 +0100
    94.3 @@ -0,0 +1,135 @@
    94.4 +/* ================================================================
    94.5 + * Cewolf : Chart enabling Web Objects Framework
    94.6 + * ================================================================
    94.7 + *
    94.8 + * Project Info:  http://cewolf.sourceforge.net
    94.9 + * Project Lead:  Guido Laures (guido@laures.de);
   94.10 + *
   94.11 + * (C) Copyright 2002, by Guido Laures
   94.12 + *
   94.13 + * This library is free software; you can redistribute it and/or modify it under the terms
   94.14 + * of the GNU Lesser General Public License as published by the Free Software Foundation;
   94.15 + * either version 2.1 of
   94.16 + * the License, or (at your option) any later version.
   94.17 + *
   94.18 + * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
   94.19 + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
   94.20 + * See the GNU Lesser General Public License for more details.
   94.21 + *
   94.22 + * You should have received a copy of the GNU Lesser General Public License along with this
   94.23 + * library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
   94.24 + * Boston, MA 02111-1307, USA.
   94.25 + */
   94.26 +
   94.27 +package de.laures.cewolf.taglib.tags;
   94.28 +
   94.29 +import java.io.IOException;
   94.30 +
   94.31 +import javax.servlet.jsp.JspException;
   94.32 +
   94.33 +import de.laures.cewolf.CewolfException;
   94.34 +import de.laures.cewolf.ChartHolder;
   94.35 +import de.laures.cewolf.ChartImage;
   94.36 +import de.laures.cewolf.Configuration;
   94.37 +import de.laures.cewolf.Storage;
   94.38 +import de.laures.cewolf.WebConstants;
   94.39 +import de.laures.cewolf.taglib.ChartImageDefinition;
   94.40 +import de.laures.cewolf.taglib.TaglibConstants;
   94.41 +import de.laures.cewolf.taglib.html.HTMLImgTag;
   94.42 +import de.laures.cewolf.taglib.util.PageUtils;
   94.43 +
   94.44 +/**
   94.45 + * Tag &lt;legend&gt; which can be used to render a chart's legend
   94.46 + * separately somewhere in the page.
   94.47 + * @author  Guido Laures
   94.48 + */
   94.49 +public class LegendTag extends HTMLImgTag implements CewolfRootTag, TaglibConstants, WebConstants {
   94.50 +
   94.51 +    private static final String DEFAULT_MIME_TYPE = MIME_PNG;
   94.52 +    private static final int DEFAULT_TIMEOUT = 300;
   94.53 +    private int timeout = DEFAULT_TIMEOUT;
   94.54 +    private transient String sessionKey;
   94.55 +    private transient String renderer;
   94.56 +    private String mimeType = DEFAULT_MIME_TYPE;
   94.57 +
   94.58 +    public int doStartTag() throws JspException {
   94.59 +        ChartHolder cd = PageUtils.getChartHolder(getChartId(), pageContext);
   94.60 +        ChartImage cid = new ChartImageDefinition(cd, width, height, ChartImage.IMG_TYPE_LEGEND, mimeType,timeout);
   94.61 +        Storage storage = Configuration.getInstance(pageContext.getServletContext()).getStorage();
   94.62 +        try {
   94.63 +        	this.sessionKey = storage.storeChartImage(cid, pageContext);
   94.64 +        } catch(CewolfException cwex){
   94.65 +        	log.error(cwex);
   94.66 +        	throw new JspException(cwex.getMessage());
   94.67 +        }
   94.68 +        return SKIP_BODY;
   94.69 +    }
   94.70 +
   94.71 +    public int doEndTag() throws JspException {
   94.72 +		super.doStartTag();
   94.73 +		final StringBuffer buffer = new StringBuffer(" src=\"");
   94.74 +		buffer.append(getImgURL());
   94.75 +		buffer.append("\"");
   94.76 +		try {
   94.77 +			pageContext.getOut().write(buffer.toString());
   94.78 +		} catch (IOException ioex) {
   94.79 +			reset();
   94.80 +			log.error(ioex);
   94.81 +			throw new JspException(ioex.getMessage());
   94.82 +		}
   94.83 +		return super.doEndTag();
   94.84 +    }
   94.85 +
   94.86 +	/**
   94.87 +	* To enable further server side scriptings on JSP output the session ID is always
   94.88 +	* encoded into the image URL even if cookies are enabled on the client side.
   94.89 +	*/
   94.90 +	protected String getImgURL() {
   94.91 +		return ChartImgTag.buildImgURL(renderer, pageContext, sessionKey, width, height, mimeType, forceSessionId,removeAfterRender);
   94.92 +	}
   94.93 +
   94.94 +    protected void reset() {
   94.95 +        // as of a weird JSP compiler in resin
   94.96 +        // a reused tag's attribute is only set if 
   94.97 +        // it changes. So width an height may not
   94.98 +        // be unset to ensure correct values.
   94.99 +        int lHeight = this.height;
  94.100 +        int lWidth = this.width;
  94.101 +        int lTimeout = this.timeout;
  94.102 +        super.reset();
  94.103 +        this.height = lHeight;
  94.104 +        this.width = lWidth;
  94.105 +        this.timeout = lTimeout;
  94.106 +    }
  94.107 +
  94.108 +    public String getChartId() {
  94.109 +        return getId();
  94.110 +    }
  94.111 +
  94.112 +    public void setRenderer(String rend) {
  94.113 +        this.renderer = rend;
  94.114 +    }
  94.115 +
  94.116 +    /**
  94.117 +     * Sets the mimeType.
  94.118 +     * @param mimeType The mimeType to set
  94.119 +     */
  94.120 +    public void setMime(String mimeType) {
  94.121 +        this.mimeType = mimeType;
  94.122 +    }
  94.123 +
  94.124 +    /**
  94.125 +     * @return Returns the timeout.
  94.126 +     */
  94.127 +    public int getTimeout()
  94.128 +    {
  94.129 +      return timeout;
  94.130 +    }
  94.131 +    /**
  94.132 +     * @param timeout The timeout to set.
  94.133 +     */
  94.134 +    public void setTimeout( int timeout )
  94.135 +    {
  94.136 +      this.timeout = timeout;
  94.137 +    }
  94.138 +}
    95.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    95.2 +++ b/java/cewolf-1.0/src/main/java/de/laures/cewolf/taglib/tags/Mapped.java	Sat Feb 28 21:31:02 2009 +0100
    95.3 @@ -0,0 +1,46 @@
    95.4 +/* ================================================================
    95.5 + * Cewolf : Chart enabling Web Objects Framework
    95.6 + * ================================================================
    95.7 + *
    95.8 + * Project Info:  http://cewolf.sourceforge.net
    95.9 + * Project Lead:  Guido Laures (guido@laures.de);
   95.10 + *
   95.11 + * (C) Copyright 2002, by Guido Laures
   95.12 + *
   95.13 + * This library is free software; you can redistribute it and/or modify it under the terms
   95.14 + * of the GNU Lesser General Public License as published by the Free Software Foundation;
   95.15 + * either version 2.1 of the License, or (at your option) any later version.
   95.16 + *
   95.17 + * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
   95.18 + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
   95.19 + * See the GNU Lesser General Public License for more details.
   95.20 + *
   95.21 + * You should have received a copy of the GNU Lesser General Public License along with this
   95.22 + * library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
   95.23 + * Boston, MA 02111-1307, USA.
   95.24 + */
   95.25 +
   95.26 +package de.laures.cewolf.taglib.tags;
   95.27 +
   95.28 +import de.laures.cewolf.CewolfException;
   95.29 +
   95.30 +/**
   95.31 + * Image maps can be attacjed to objects 
   95.32 + * implementing this interface.
   95.33 + * @author  glaures
   95.34 + */
   95.35 +public interface Mapped {
   95.36 +    
   95.37 +	/**
   95.38 +	 * Method getImageKey.
   95.39 +	 * @return int
   95.40 +	 */
   95.41 +    public Object getRenderingInfo() throws CewolfException;
   95.42 +    
   95.43 +	/**
   95.44 +	 * Method setUsemap.
   95.45 +	 * @param map
   95.46 +	 */
   95.47 +    public void enableMapping();
   95.48 +    
   95.49 +}
    96.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    96.2 +++ b/java/cewolf-1.0/src/main/java/de/laures/cewolf/taglib/tags/OverlaidChartTag.java	Sat Feb 28 21:31:02 2009 +0100
    96.3 @@ -0,0 +1,50 @@
    96.4 +/*
    96.5 + * Created on 13.04.2003
    96.6 + *
    96.7 + * To change the template for this generated file go to
    96.8 + * Window>Preferences>Java>Code Generation>Code and Comments
    96.9 + */
   96.10 +package de.laures.cewolf.taglib.tags;
   96.11 +
   96.12 +import de.laures.cewolf.taglib.AbstractChartDefinition;
   96.13 +import de.laures.cewolf.taglib.AxisTypes;
   96.14 +import de.laures.cewolf.taglib.OverlaidChartDefinition;
   96.15 +import de.laures.cewolf.taglib.PlotContainer;
   96.16 +import de.laures.cewolf.taglib.PlotDefinition;
   96.17 +
   96.18 +
   96.19 +/**
   96.20 + * @author guido
   96.21 + *
   96.22 + * To change the template for this generated type comment go to
   96.23 + * Window>Preferences>Java>Code Generation>Code and Comments
   96.24 + */
   96.25 +public class OverlaidChartTag extends AbstractChartTag implements PlotContainer {
   96.26 +	
   96.27 +    protected AbstractChartDefinition createChartDefinition() {
   96.28 +        return new OverlaidChartDefinition();
   96.29 +    }
   96.30 +
   96.31 +	public void addPlot(PlotDefinition pd){
   96.32 +		((OverlaidChartDefinition)chartDefinition).addPlot(pd);
   96.33 +	}
   96.34 +    
   96.35 +	/**
   96.36 +	 * Sets the xAxisType.
   96.37 +	 * @param xAxisType The xAxisType to set
   96.38 +	 */
   96.39 +	public void setxaxistype(String xAxisType) {
   96.40 +        final int xAxisTypeConst = AxisTypes.typeList.indexOf(xAxisType);
   96.41 +		((OverlaidChartDefinition)chartDefinition).setXAxisType(xAxisTypeConst);
   96.42 +	}
   96.43 +
   96.44 +	/**
   96.45 +	 * Sets the yAxisType.
   96.46 +	 * @param yAxisType The yAxisType to set
   96.47 +	 */
   96.48 +	public void setyaxistype(String yAxisType) {
   96.49 +        final int yAxisTypeConst = AxisTypes.typeList.indexOf(yAxisType);
   96.50 +        ((OverlaidChartDefinition)chartDefinition).setYAxisType(yAxisTypeConst);
   96.51 +	}
   96.52 +
   96.53 +}
    97.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    97.2 +++ b/java/cewolf-1.0/src/main/java/de/laures/cewolf/taglib/tags/Painted.java	Sat Feb 28 21:31:02 2009 +0100
    97.3 @@ -0,0 +1,40 @@
    97.4 +/* ================================================================
    97.5 + * Cewolf : Chart enabling Web Objects Framework
    97.6 + * ================================================================
    97.7 + *
    97.8 + * Project Info:  http://cewolf.sourceforge.net
    97.9 + * Project Lead:  Guido Laures (guido@laures.de);
   97.10 + *
   97.11 + * (C) Copyright 2002, by Guido Laures
   97.12 + *
   97.13 + * This library is free software; you can redistribute it and/or modify it under the terms
   97.14 + * of the GNU Lesser General Public License as published by the Free Software Foundation;
   97.15 + * either version 2.1 of the License, or (at your option) any later version.
   97.16 + *
   97.17 + * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
   97.18 + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
   97.19 + * See the GNU Lesser General Public License for more details.
   97.20 + *
   97.21 + * You should have received a copy of the GNU Lesser General Public License along with this
   97.22 + * library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
   97.23 + * Boston, MA 02111-1307, USA.
   97.24 + */
   97.25 +
   97.26 +package de.laures.cewolf.taglib.tags;
   97.27 +
   97.28 +import java.awt.Paint;
   97.29 +
   97.30 +/**
   97.31 + * Paint objects can be assigned to objects impmlementing this interface.
   97.32 + * @see java.awt.Paint
   97.33 + * @author  glaures
   97.34 + */
   97.35 +public interface Painted {
   97.36 +    
   97.37 +	/**
   97.38 +	 * Method setPaint.
   97.39 +	 * @param p
   97.40 +	 */
   97.41 +    public void setPaint(Paint p);
   97.42 +    
   97.43 +}
    98.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    98.2 +++ b/java/cewolf-1.0/src/main/java/de/laures/cewolf/taglib/tags/ParamTag.java	Sat Feb 28 21:31:02 2009 +0100
    98.3 @@ -0,0 +1,56 @@
    98.4 +/* ================================================================
    98.5 + * Cewolf : Chart enabling Web Objects Framework
    98.6 + * ================================================================
    98.7 + *
    98.8 + * Project Info:  http://cewolf.sourceforge.net
    98.9 + * Project Lead:  Guido Laures (guido@laures.de);
   98.10 + *
   98.11 + * (C) Copyright 2002, by Guido Laures
   98.12 + *
   98.13 + * This library is free software; you can redistribute it and/or modify it under the terms
   98.14 + * of the GNU Lesser General Public License as published by the Free Software Foundation;
   98.15 + * either version 2.1 of
   98.16 + * the License, or (at your option) any later version.
   98.17 + *
   98.18 + * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
   98.19 + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
   98.20 + * See the GNU Lesser General Public License for more details.
   98.21 + *
   98.22 + * You should have received a copy of the GNU Lesser General Public License along with this
   98.23 + * library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
   98.24 + * Boston, MA 02111-1307, USA.
   98.25 + */
   98.26 +
   98.27 +package de.laures.cewolf.taglib.tags;
   98.28 +
   98.29 +import java.io.Serializable;
   98.30 +
   98.31 +/** 
   98.32 + * Tag &lt;param&gt; which defines a key/value pair which is set in the parent
   98.33 + * tag. This must implement the Parameterized interface.
   98.34 + * @see Parameterized
   98.35 + * @author  Guido Laures 
   98.36 + */
   98.37 +public class ParamTag extends CewolfBodyTag {
   98.38 +
   98.39 +    private String name;
   98.40 +    private Object value;
   98.41 +
   98.42 +    public int doEndTag() {
   98.43 +        Parameterized parent = (Parameterized)getParent();
   98.44 +        parent.addParameter(name, value);
   98.45 +        return doAfterEndTag(EVAL_PAGE);
   98.46 +    }
   98.47 +
   98.48 +    protected void reset() {
   98.49 +    }
   98.50 +
   98.51 +    public void setName(String name) {
   98.52 +        this.name = name;
   98.53 +    }
   98.54 +
   98.55 +    public void setValue(Serializable val) {
   98.56 +        this.value = val;
   98.57 +    }
   98.58 +
   98.59 +}
    99.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    99.2 +++ b/java/cewolf-1.0/src/main/java/de/laures/cewolf/taglib/tags/Parameterized.java	Sat Feb 28 21:31:02 2009 +0100
    99.3 @@ -0,0 +1,35 @@
    99.4 +/* ================================================================
    99.5 + * Cewolf : Chart enabling Web Objects Framework
    99.6 + * ================================================================
    99.7 + *
    99.8 + * Project Info:  http://cewolf.sourceforge.net
    99.9 + * Project Lead:  Guido Laures (guido@laures.de);
   99.10 + *
   99.11 + * (C) Copyright 2002, by Guido Laures
   99.12 + *
   99.13 + * This library is free software; you can redistribute it and/or modify it under the terms
   99.14 + * of the GNU Lesser General Public License as published by the Free Software Foundation;
   99.15 + * either version 2.1 of the License, or (at your option) any later version.
   99.16 + *
   99.17 + * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
   99.18 + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
   99.19 + * See the GNU Lesser General Public License for more details.
   99.20 + *
   99.21 + * You should have received a copy of the GNU Lesser General Public License along with this
   99.22 + * library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
   99.23 + * Boston, MA 02111-1307, USA.
   99.24 + */
   99.25 +
   99.26 +package de.laures.cewolf.taglib.tags;
   99.27 +
   99.28 +/** 
   99.29 + * Tags implementing this interface can be paramterized by a nested &lt;param&gt;
   99.30 + * tag.
   99.31 + * @see ParamTag
   99.32 + * @author  Guido Laures 
   99.33 + */
   99.34 +public interface Parameterized {
   99.35 +
   99.36 +    void addParameter(String name, Object value);
   99.37 +
   99.38 +}
   100.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   100.2 +++ b/java/cewolf-1.0/src/main/java/de/laures/cewolf/taglib/tags/PlotTag.java	Sat Feb 28 21:31:02 2009 +0100
   100.3 @@ -0,0 +1,90 @@
   100.4 +/* ================================================================
   100.5 + * Cewolf : Chart enabling Web Objects Framework
   100.6 + * ================================================================
   100.7 + *
   100.8 + * Project Info:  http://cewolf.sourceforge.net
   100.9 + * Project Lead:  Guido Laures (guido@laures.de);
  100.10 + *
  100.11 + * (C) Copyright 2002, by Guido Laures, and contributers
  100.12 + *
  100.13 + * This library is free software; you can redistribute it and/or modify it under the terms
  100.14 + * of the GNU Lesser General Public License as published by the Free Software Foundation;
  100.15 + * either version 2.1 of
  100.16 + * the License, or (at your option) any later version.
  100.17 + *
  100.18 + * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
  100.19 + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  100.20 + * See the GNU Lesser General Public License for more details.
  100.21 + *
  100.22 + * You should have received a copy of the GNU Lesser General Public License along with this
  100.23 + * library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
  100.24 + * Boston, MA 02111-1307, USA.
  100.25 + */
  100.26 +
  100.27 +package de.laures.cewolf.taglib.tags;
  100.28 +
  100.29 +import java.util.Map;
  100.30 +
  100.31 +import javax.servlet.jsp.JspException;
  100.32 +
  100.33 +import de.laures.cewolf.DatasetProducer;
  100.34 +import de.laures.cewolf.taglib.DataAware;
  100.35 +import de.laures.cewolf.taglib.PlotContainer;
  100.36 +import de.laures.cewolf.taglib.PlotDefinition;
  100.37 +import de.laures.cewolf.taglib.TaglibConstants;
  100.38 +
  100.39 +/** 
  100.40 + * Tag &lt;sub-plot&gt; which defines a plot to overlay 
  100.41 + * @author Chris McCann
  100.42 + */
  100.43 +public class PlotTag extends CewolfTag implements TaglibConstants, DataAware {
  100.44 +
  100.45 +    private PlotDefinition plotDefinition = new PlotDefinition();
  100.46 +
  100.47 +    public int doStartTag() throws JspException {
  100.48 +        return EVAL_BODY_INCLUDE;
  100.49 +    }
  100.50 +    
  100.51 +    public int doEndTag() throws JspException {
  100.52 +        PlotContainer pc = (PlotContainer)findAncestorWithClass(this, PlotContainer.class);
  100.53 +        if (pc == null) {
  100.54 +            throw new JspException("&lt;plot&gt; must be nested in a PlotContainer tag like &lt;overlaid-chart&gt;");
  100.55 +        }
  100.56 +        pc.addPlot(plotDefinition);
  100.57 +        return doAfterEndTag(EVAL_PAGE);
  100.58 +    }
  100.59 +
  100.60 +    public void reset() {
  100.61 +        plotDefinition = new PlotDefinition();
  100.62 +    }
  100.63 +
  100.64 +    /**
  100.65 +     * Setter for property type.
  100.66 +     * @param type New value of property type.
  100.67 +     */
  100.68 +    public void setType(String type) {
  100.69 +        plotDefinition.setType(type);
  100.70 +    }
  100.71 +
  100.72 +    public void setDataProductionConfig(DatasetProducer dsp, Map params, boolean useCache) {
  100.73 +        plotDefinition.setDataProductionConfig(dsp, params, useCache);
  100.74 +    }
  100.75 +    
  100.76 +    /**
  100.77 +     * Setter for property xAxisLabel. [tb]
  100.78 +     * @param xAxisLabel New value of property xAxisLabel.
  100.79 +     */
  100.80 +    public void setXaxislabel(String xAxisLabel) {
  100.81 +        plotDefinition.setXaxislabel(xAxisLabel);
  100.82 +    }
  100.83 +
  100.84 +    /**
  100.85 +     * Setter for property yAxisLabel. [tb]
  100.86 +     * @param yAxisLabel New value of property xAxisLabel.
  100.87 +     */
  100.88 +    public void setYaxislabel(String yAxisLabel) {
  100.89 +        plotDefinition.setYaxislabel(yAxisLabel);
  100.90 +    }
  100.91 +
  100.92 +
  100.93 +}
   101.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   101.2 +++ b/java/cewolf-1.0/src/main/java/de/laures/cewolf/taglib/tags/PointTag.java	Sat Feb 28 21:31:02 2009 +0100
   101.3 @@ -0,0 +1,50 @@
   101.4 +/* ================================================================
   101.5 + * Cewolf : Chart enabling Web Objects Framework
   101.6 + * ================================================================
   101.7 + *
   101.8 + * Project Info:  http://cewolf.sourceforge.net
   101.9 + * Project Lead:  Guido Laures (guido@laures.de);
  101.10 + *
  101.11 + * (C) Copyright 2002, by Guido Laures
  101.12 + *
  101.13 + * This library is free software; you can redistribute it and/or modify it under the terms
  101.14 + * of the GNU Lesser General Public License as published by the Free Software Foundation;
  101.15 + * either version 2.1 of
  101.16 + * the License, or (at your option) any later version.
  101.17 + *
  101.18 + * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
  101.19 + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  101.20 + * See the GNU Lesser General Public License for more details.
  101.21 + *
  101.22 + * You should have received a copy of the GNU Lesser General Public License along with this
  101.23 + * library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
  101.24 + * Boston, MA 02111-1307, USA.
  101.25 + */
  101.26 +
  101.27 +package de.laures.cewolf.taglib.tags;
  101.28 +
  101.29 +/** 
  101.30 + * Tag &lt;point&gt; which adds a colored point with x and y coordinates to the
  101.31 + * parent tag. This must implement the Pointed interface.
  101.32 + * @see Pointed
  101.33 + * @author  Guido Laures 
  101.34 + */
  101.35 +public class PointTag extends ColorTag {
  101.36 +
  101.37 +    private int x;
  101.38 +    private int y;
  101.39 +
  101.40 +    public int doEndTag() {
  101.41 +        ((Pointed)getParent()).addPoint(x, y, getColor());
  101.42 +        return doAfterEndTag(EVAL_PAGE);
  101.43 +    }
  101.44 +
  101.45 +    public void setX(int x) {
  101.46 +        this.x = x;
  101.47 +    }
  101.48 +
  101.49 +    public void setY(int y) {
  101.50 +        this.y = y;
  101.51 +    }
  101.52 +    
  101.53 +}
   102.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   102.2 +++ b/java/cewolf-1.0/src/main/java/de/laures/cewolf/taglib/tags/Pointed.java	Sat Feb 28 21:31:02 2009 +0100
   102.3 @@ -0,0 +1,37 @@
   102.4 +/* ================================================================
   102.5 + * Cewolf : Chart enabling Web Objects Framework
   102.6 + * ================================================================
   102.7 + *
   102.8 + * Project Info:  http://cewolf.sourceforge.net
   102.9 + * Project Lead:  Guido Laures (guido@laures.de);
  102.10 + *
  102.11 + * (C) Copyright 2002, by Guido Laures
  102.12 + *
  102.13 + * This library is free software; you can redistribute it and/or modify it under the terms
  102.14 + * of the GNU Lesser General Public License as published by the Free Software Foundation;
  102.15 + * either version 2.1 of
  102.16 + * the License, or (at your option) any later version.
  102.17 + *
  102.18 + * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
  102.19 + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  102.20 + * See the GNU Lesser General Public License for more details.
  102.21 + *
  102.22 + * You should have received a copy of the GNU Lesser General Public License along with this
  102.23 + * library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
  102.24 + * Boston, MA 02111-1307, USA.
  102.25 + */
  102.26 +
  102.27 +package de.laures.cewolf.taglib.tags;
  102.28 +
  102.29 +import java.awt.Color;
  102.30 +
  102.31 +/** 
  102.32 + * Tag implemeting this interface can add points by nesting the &lt;point&gt;
  102.33 + * tag.
  102.34 + * @see PointTag
  102.35 + * @author  Guido Laures 
  102.36 + */
  102.37 +public interface Pointed {
  102.38 +
  102.39 +    void addPoint(int x, int y, Color col);
  102.40 +}
   103.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   103.2 +++ b/java/cewolf-1.0/src/main/java/de/laures/cewolf/taglib/tags/ProducerTag.java	Sat Feb 28 21:31:02 2009 +0100
   103.3 @@ -0,0 +1,71 @@
   103.4 +/* ================================================================
   103.5 + * Cewolf : Chart enabling Web Objects Framework
   103.6 + * ================================================================
   103.7 + *
   103.8 + * Project Info:  http://cewolf.sourceforge.net
   103.9 + * Project Lead:  Guido Laures (guido@laures.de);
  103.10 + *
  103.11 + * (C) Copyright 2002, by Guido Laures
  103.12 + *
  103.13 + * This library is free software; you can redistribute it and/or modify it under the terms
  103.14 + * of the GNU Lesser General Public License as published by the Free Software Foundation;
  103.15 + * either version 2.1 of the License, or (at your option) any later version.
  103.16 + *
  103.17 + * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
  103.18 + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  103.19 + * See the GNU Lesser General Public License for more details.
  103.20 + *
  103.21 + * You should have received a copy of the GNU Lesser General Public License along with this
  103.22 + * library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
  103.23 + * Boston, MA 02111-1307, USA.
  103.24 + */
  103.25 +
  103.26 +package de.laures.cewolf.taglib.tags;
  103.27 +
  103.28 +import javax.servlet.jsp.JspException;
  103.29 +
  103.30 +import de.laures.cewolf.DatasetProducer;
  103.31 +import de.laures.cewolf.taglib.DataAware;
  103.32 +
  103.33 +/** 
  103.34 + * Tag &lt;producer&gt; which defines a DatasetProducer.
  103.35 + * @see DataTag
  103.36 + * @author  Guido Laures 
  103.37 + */
  103.38 +public class ProducerTag extends AbstractParameterizedObjectTag {
  103.39 +
  103.40 +    private boolean useCache = true;
  103.41 +
  103.42 +    public int doEndTag() throws JspException {
  103.43 +        DatasetProducer dataProducer = null;
  103.44 +        try {
  103.45 +            dataProducer = (DatasetProducer) getObject();
  103.46 +            if (dataProducer == null) {
  103.47 +                throw new JspException("Could not find datasetproducer under ID '" + getId() + "'");
  103.48 +            }
  103.49 +        } catch (ClassCastException cce) {
  103.50 +            throw new JspException(
  103.51 +                "Bean under ID '"
  103.52 +                    + getId()
  103.53 +                    + "' is of type '"
  103.54 +                    + getObject().getClass().getName()
  103.55 +                    + "'.\nType expected:"
  103.56 +                    + DatasetProducer.class.getName());
  103.57 +        }
  103.58 +        DataAware dw = (DataAware) findAncestorWithClass(this, DataAware.class);
  103.59 +        log.debug("setting data config on " + dw);
  103.60 +        log.debug("useCache = " + useCache);
  103.61 +        addParameter(DatasetProducer.PRODUCER_ATTRIBUTE_NAME, getId());
  103.62 +        dw.setDataProductionConfig(dataProducer, getParameters(), useCache);
  103.63 +        return doAfterEndTag(EVAL_BODY_INCLUDE);
  103.64 +    }
  103.65 +
  103.66 +    /**
  103.67 +     * Sets the useCache.
  103.68 +     * @param useCache The useCache to set
  103.69 +     */
  103.70 +    public void setUsecache(boolean useCache) {
  103.71 +        this.useCache = useCache;
  103.72 +    }
  103.73 +
  103.74 +}
   104.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   104.2 +++ b/java/cewolf-1.0/src/main/java/de/laures/cewolf/taglib/tags/SerializableGradientPaint.java	Sat Feb 28 21:31:02 2009 +0100
   104.3 @@ -0,0 +1,103 @@
   104.4 +/* ================================================================
   104.5 + * Cewolf : Chart enabling Web Objects Framework
   104.6 + * ================================================================
   104.7 + *
   104.8 + * Project Info:  http://cewolf.sourceforge.net
   104.9 + * Project Lead:  Guido Laures (guido@laures.de);
  104.10 + *
  104.11 + * (C) Copyright 2002, by Guido Laures
  104.12 + *
  104.13 + * This library is free software; you can redistribute it and/or modify it under the terms
  104.14 + * of the GNU Lesser General Public License as published by the Free Software Foundation;
  104.15 + * either version 2.1 of the License, or (at your option) any later version.
  104.16 + *
  104.17 + * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
  104.18 + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  104.19 + * See the GNU Lesser General Public License for more details.
  104.20 + *
  104.21 + * You should have received a copy of the GNU Lesser General Public License along with this
  104.22 + * library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
  104.23 + * Boston, MA 02111-1307, USA.
  104.24 + */
  104.25 +
  104.26 +package de.laures.cewolf.taglib.tags;
  104.27 +
  104.28 +import java.awt.Color;
  104.29 +import java.awt.GradientPaint;
  104.30 +import java.awt.Paint;
  104.31 +import java.awt.Rectangle;
  104.32 +import java.awt.RenderingHints;
  104.33 +import java.awt.geom.AffineTransform;
  104.34 +import java.awt.geom.Rectangle2D;
  104.35 +import java.awt.image.ColorModel;
  104.36 +import java.io.Serializable;
  104.37 +
  104.38 +/** 
  104.39 + * Special gradient paint which can be serialized.
  104.40 + * @see GradientPaint
  104.41 + * @author  Guido Laures 
  104.42 + */
  104.43 +public class SerializableGradientPaint implements Paint, Serializable {
  104.44 +
  104.45 +    private int x1;
  104.46 +    private int y1;
  104.47 +    private Color c1 = Color.white;
  104.48 +    private int x2;
  104.49 +    private int y2;
  104.50 +    private Color c2 = Color.white;
  104.51 +    private boolean cyclic = false;
  104.52 +    private transient Paint paint = null;
  104.53 +
  104.54 +    public SerializableGradientPaint() {
  104.55 +    }
  104.56 +
  104.57 +    /** Creates a new instance of SerializableGradientPaint */
  104.58 +    public SerializableGradientPaint(int x1, int y1, Color c1, int x2, int y2, Color c2) {
  104.59 +        this.x1 = x1;
  104.60 +        this.y1 = y1;
  104.61 +        this.c1 = c1;
  104.62 +        this.x2 = x2;
  104.63 +        this.y2 = y2;
  104.64 +        this.c2 = c2;
  104.65 +    }
  104.66 +
  104.67 +    private Paint getPaint() {
  104.68 +        if (paint == null) {
  104.69 +            createPaint();
  104.70 +        }
  104.71 +        return paint;
  104.72 +    }
  104.73 +
  104.74 +    private void createPaint() {
  104.75 +        paint = new GradientPaint(x1, y1, c1, x2, y2, c2, cyclic);
  104.76 +    }
  104.77 +
  104.78 +    public void setPoint1(int x, int y, Color c) {
  104.79 +        this.x1 = x;
  104.80 +        this.y1 = y;
  104.81 +        this.c1 = c;
  104.82 +    }
  104.83 +
  104.84 +    public void setPoint2(int x, int y, Color c) {
  104.85 +        this.x2 = x;
  104.86 +        this.y2 = y;
  104.87 +        this.c2 = c;
  104.88 +    }
  104.89 +
  104.90 +    public java.awt.PaintContext createContext(ColorModel colorModel, Rectangle rectangle, Rectangle2D rectangle2D,
  104.91 +    AffineTransform affineTransform, RenderingHints renderingHints) {
  104.92 +        return getPaint().createContext(colorModel, rectangle, rectangle2D, affineTransform, renderingHints);
  104.93 +    }
  104.94 +
  104.95 +    public int getTransparency() {
  104.96 +        return getPaint().getTransparency();
  104.97 +    }
  104.98 +
  104.99 +    public void setCyclic(boolean b) {
 104.100 +        this.cyclic = b;
 104.101 +    }
 104.102 +
 104.103 +    public String toString() {
 104.104 +        return "" + x1 + "," + y1 + "," + c1 + "," + x2 + "," + y2 + "," + c2;
 104.105 +    }
 104.106 +}
   105.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   105.2 +++ b/java/cewolf-1.0/src/main/java/de/laures/cewolf/taglib/tags/SerializableTexturePaint.java	Sat Feb 28 21:31:02 2009 +0100
   105.3 @@ -0,0 +1,81 @@
   105.4 +/* ================================================================
   105.5 + * Cewolf : Chart enabling Web Objects Framework
   105.6 + * ================================================================
   105.7 + *
   105.8 + * Project Info:  http://cewolf.sourceforge.net
   105.9 + * Project Lead:  Guido Laures (guido@laures.de);
  105.10 + *
  105.11 + * (C) Copyright 2002, by Guido Laures
  105.12 + *
  105.13 + * This library is free software; you can redistribute it and/or modify it under the terms
  105.14 + * of the GNU Lesser General Public License as published by the Free Software Foundation;
  105.15 + * either version 2.1 of the License, or (at your option) any later version.
  105.16 + *
  105.17 + * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
  105.18 + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  105.19 + * See the GNU Lesser General Public License for more details.
  105.20 + *
  105.21 + * You should have received a copy of the GNU Lesser General Public License along with this
  105.22 + * library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
  105.23 + * Boston, MA 02111-1307, USA.
  105.24 + */
  105.25 +
  105.26 +package de.laures.cewolf.taglib.tags;
  105.27 +
  105.28 +import java.awt.Paint;
  105.29 +import java.awt.Rectangle;
  105.30 +import java.awt.RenderingHints;
  105.31 +import java.awt.TexturePaint;
  105.32 +import java.awt.geom.AffineTransform;
  105.33 +import java.awt.geom.Rectangle2D;
  105.34 +import java.awt.image.BufferedImage;
  105.35 +import java.awt.image.ColorModel;
  105.36 +import java.io.Serializable;
  105.37 +
  105.38 +import de.laures.cewolf.util.ImageHelper;
  105.39 +
  105.40 +/** 
  105.41 + * Special texture paint which can be serialized.
  105.42 + * @see TexturePaint
  105.43 + * @author  Guido Laures 
  105.44 + */
  105.45 +public class SerializableTexturePaint implements Paint, Serializable {
  105.46 +
  105.47 +    private String image;
  105.48 +    private int width;
  105.49 +    private int height;
  105.50 +    private transient Paint paint = null;
  105.51 +
  105.52 +    public SerializableTexturePaint() {
  105.53 +    }
  105.54 +
  105.55 +    /** Creates a new instance of SerializableGradientPaint */
  105.56 +    public SerializableTexturePaint(String image, int width, int height) {
  105.57 +        this.image = image;
  105.58 +        this.width = width;
  105.59 +        this.height = height;
  105.60 +    }
  105.61 +
  105.62 +    private Paint getPaint() {
  105.63 +        if (paint == null) {
  105.64 +            createPaint();
  105.65 +        }
  105.66 +        return paint;
  105.67 +    }
  105.68 +
  105.69 +    private void createPaint() {
  105.70 +        BufferedImage bim = ImageHelper.loadBufferedImage(image);
  105.71 +        Rectangle rect = new Rectangle(width, height);
  105.72 +        paint = new TexturePaint(bim, rect);
  105.73 +    }
  105.74 +
  105.75 +    public java.awt.PaintContext createContext(ColorModel colorModel, Rectangle rectangle, Rectangle2D rectangle2D,
  105.76 +    AffineTransform affineTransform, RenderingHints renderingHints) {
  105.77 +        return getPaint().createContext(colorModel, rectangle, rectangle2D, affineTransform, renderingHints);
  105.78 +    }
  105.79 +
  105.80 +    public int getTransparency() {
  105.81 +        return getPaint().getTransparency();
  105.82 +    }
  105.83 +
  105.84 +}
   106.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   106.2 +++ b/java/cewolf-1.0/src/main/java/de/laures/cewolf/taglib/tags/SimpleChartTag.java	Sat Feb 28 21:31:02 2009 +0100
   106.3 @@ -0,0 +1,32 @@
   106.4 +/*
   106.5 + * Created on 13.04.2003
   106.6 + *
   106.7 + * To change the template for this generated file go to
   106.8 + * Window>Preferences>Java>Code Generation>Code and Comments
   106.9 + */
  106.10 +package de.laures.cewolf.taglib.tags;
  106.11 +
  106.12 +import java.util.Map;
  106.13 +
  106.14 +import de.laures.cewolf.DatasetProducer;
  106.15 +import de.laures.cewolf.taglib.AbstractChartDefinition;
  106.16 +import de.laures.cewolf.taglib.DataAware;
  106.17 +import de.laures.cewolf.taglib.SimpleChartDefinition;
  106.18 +
  106.19 +/**
  106.20 + * @author guido
  106.21 + *
  106.22 + * To change the template for this generated type comment go to
  106.23 + * Window>Preferences>Java>Code Generation>Code and Comments
  106.24 + */
  106.25 +public class SimpleChartTag extends AbstractChartTag implements DataAware{
  106.26 +    
  106.27 +    protected AbstractChartDefinition createChartDefinition() {
  106.28 +        return new SimpleChartDefinition();
  106.29 +    }
  106.30 +
  106.31 +     public void setDataProductionConfig(DatasetProducer dsp, Map params, boolean useCache) {
  106.32 +        ((SimpleChartDefinition)chartDefinition).setDataProductionConfig(dsp, params, useCache);
  106.33 +    }
  106.34 +
  106.35 +}
   107.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   107.2 +++ b/java/cewolf-1.0/src/main/java/de/laures/cewolf/taglib/tags/TextureTag.java	Sat Feb 28 21:31:02 2009 +0100
   107.3 @@ -0,0 +1,59 @@
   107.4 +/* ================================================================
   107.5 + * Cewolf : Chart enabling Web Objects Framework
   107.6 + * ================================================================
   107.7 + *
   107.8 + * Project Info:  http://cewolf.sourceforge.net
   107.9 + * Project Lead:  Guido Laures (guido@laures.de);
  107.10 + *
  107.11 + * (C) Copyright 2002, by Guido Laures
  107.12 + *
  107.13 + * This library is free software; you can redistribute it and/or modify it under the terms
  107.14 + * of the GNU Lesser General Public License as published by the Free Software Foundation;
  107.15 + * either version 2.1 of
  107.16 + * the License, or (at your option) any later version.
  107.17 + *
  107.18 + * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
  107.19 + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  107.20 + * See the GNU Lesser General Public License for more details.
  107.21 + *
  107.22 + * You should have received a copy of the GNU Lesser General Public License along with this
  107.23 + * library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
  107.24 + * Boston, MA 02111-1307, USA.
  107.25 + */
  107.26 +
  107.27 +package de.laures.cewolf.taglib.tags;
  107.28 +
  107.29 +import javax.servlet.jsp.JspException;
  107.30 +
  107.31 +
  107.32 +/** 
  107.33 + * Tag &lt;texture&gt; which defines a texture paint.
  107.34 + * @author  Guido Laures 
  107.35 + */
  107.36 +public class TextureTag extends CewolfBodyTag {
  107.37 +
  107.38 +    private String image;
  107.39 +    private int width;
  107.40 +    private int height;
  107.41 +
  107.42 +    public int doEndTag() throws JspException {
  107.43 +        String realFileName = pageContext.getServletContext().getRealPath(image);
  107.44 +        ((Painted)getParent()).setPaint(new SerializableTexturePaint(realFileName, width, height));
  107.45 +        return doAfterEndTag(EVAL_PAGE);
  107.46 +    }
  107.47 +
  107.48 +    protected void reset() {
  107.49 +    }
  107.50 +
  107.51 +    public void setImage(String s) {
  107.52 +        this.image = s;
  107.53 +    }
  107.54 +
  107.55 +    public void setWidth(int width) {
  107.56 +        this.width = width;
  107.57 +    }
  107.58 +
  107.59 +    public void setHeight(int height) {
  107.60 +        this.height = height;
  107.61 +    }
  107.62 +}
   108.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   108.2 +++ b/java/cewolf-1.0/src/main/java/de/laures/cewolf/taglib/tags/package.html	Sat Feb 28 21:31:02 2009 +0100
   108.3 @@ -0,0 +1,10 @@
   108.4 +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
   108.5 +
   108.6 +<HTML>
   108.7 +<HEAD>
   108.8 +<TITLE></TITLE>
   108.9 +</HEAD>
  108.10 +<BODY>
  108.11 +Implementation of the specific tags.
  108.12 +</BODY>
  108.13 +</HTML>
   109.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   109.2 +++ b/java/cewolf-1.0/src/main/java/de/laures/cewolf/taglib/util/BrowserDetection.java	Sat Feb 28 21:31:02 2009 +0100
   109.3 @@ -0,0 +1,50 @@
   109.4 +/* ================================================================
   109.5 + * Cewolf : Chart enabling Web Objects Framework
   109.6 + * ================================================================
   109.7 + *
   109.8 + * Project Info:  http://cewolf.sourceforge.net
   109.9 + * Project Lead:  Guido Laures (guido@laures.de);
  109.10 + *
  109.11 + * (C) Copyright 2002, by Guido Laures
  109.12 + *
  109.13 + * This library is free software; you can redistribute it and/or modify it under the terms
  109.14 + * of the GNU Lesser General Public License as published by the Free Software Foundation;
  109.15 + * either version 2.1 of the License, or (at your option) any later version.
  109.16 + *
  109.17 + * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
  109.18 + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  109.19 + * See the GNU Lesser General Public License for more details.
  109.20 + *
  109.21 + * You should have received a copy of the GNU Lesser General Public License along with this
  109.22 + * library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
  109.23 + * Boston, MA 02111-1307, USA.
  109.24 + */
  109.25 +
  109.26 +package de.laures.cewolf.taglib.util;
  109.27 +
  109.28 +import javax.servlet.http.HttpServletRequest;
  109.29 +/**
  109.30 + * @author glaures
  109.31 + */
  109.32 +public class BrowserDetection {
  109.33 +	
  109.34 +	private final static String USER_AGENT_KEY = "user-agent";
  109.35 +	private final static String MSIE = "msie";
  109.36 +	
  109.37 +	private final static int IE = 0;
  109.38 +	private final static int OTHER = 1;
  109.39 +	
  109.40 +	public static final int getBrowser(HttpServletRequest request){
  109.41 +		String agent = request.getHeader(USER_AGENT_KEY);
  109.42 +		if(agent == null || agent.toLowerCase().indexOf(MSIE) < 0){
  109.43 +			return OTHER;
  109.44 +		} else {
  109.45 +			return IE;
  109.46 +		}
  109.47 +	}
  109.48 +	
  109.49 +	public static final boolean isIE(HttpServletRequest request){
  109.50 +		return getBrowser(request) == IE;
  109.51 +	}
  109.52 +
  109.53 +}
   110.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   110.2 +++ b/java/cewolf-1.0/src/main/java/de/laures/cewolf/taglib/util/ColorHelper.java	Sat Feb 28 21:31:02 2009 +0100
   110.3 @@ -0,0 +1,56 @@
   110.4 +/* ================================================================
   110.5 + * Cewolf : Chart enabling Web Objects Framework
   110.6 + * ================================================================
   110.7 + *
   110.8 + * Project Info:  http://cewolf.sourceforge.net
   110.9 + * Project Lead:  Guido Laures (guido@laures.de);
  110.10 + *
  110.11 + * (C) Copyright 2002, by Guido Laures
  110.12 + *
  110.13 + * This library is free software; you can redistribute it and/or modify it under the terms
  110.14 + * of the GNU Lesser General Public License as published by the Free Software Foundation;
  110.15 + * either version 2.1 of the License, or (at your option) any later version.
  110.16 + *
  110.17 + * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
  110.18 + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  110.19 + * See the GNU Lesser General Public License for more details.
  110.20 + *
  110.21 + * You should have received a copy of the GNU Lesser General Public License along with this
  110.22 + * library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
  110.23 + * Boston, MA 02111-1307, USA.
  110.24 + */
  110.25 +
  110.26 +package de.laures.cewolf.taglib.util;
  110.27 +
  110.28 +import java.awt.Color;
  110.29 +
  110.30 +
  110.31 +/** @author  Guido Laures */
  110.32 +public class ColorHelper {
  110.33 +
  110.34 +    private ColorHelper() {
  110.35 +    }
  110.36 +
  110.37 +    public static final Color getColor(String hexString) {
  110.38 +        try {
  110.39 +             if (hexString == null || hexString.length() < 7) {
  110.40 +                return Color.black;
  110.41 +            }
  110.42 +            final int red = Integer.parseInt(hexString.substring(1, 3), 16);
  110.43 +            final int green = Integer.parseInt(hexString.substring(3, 5), 16);
  110.44 +            final int blue = Integer.parseInt(hexString.substring(5, 7), 16);
  110.45 +            int alpha = 0;
  110.46 +            if (hexString.length() > 8) {
  110.47 +                alpha = Integer.parseInt(hexString.substring(7, 9), 16);
  110.48 +            }
  110.49 +            if (alpha > 0) {
  110.50 +                return new Color(red, green, blue, alpha);
  110.51 +            } else {
  110.52 +                return new Color(red, green, blue);
  110.53 +            }
  110.54 +        } catch (NumberFormatException nfe) {
  110.55 +            return Color.black;
  110.56 +        }
  110.57 +    }
  110.58 +
  110.59 +}
   111.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   111.2 +++ b/java/cewolf-1.0/src/main/java/de/laures/cewolf/taglib/util/DatasetProductionTimeStore.java	Sat Feb 28 21:31:02 2009 +0100
   111.3 @@ -0,0 +1,77 @@
   111.4 +/* ================================================================
   111.5 + * Cewolf : Chart enabling Web Objects Framework
   111.6 + * ================================================================
   111.7 + *
   111.8 + * Project Info:  http://cewolf.sourceforge.net
   111.9 + * Project Lead:  Guido Laures (guido@laures.de);
  111.10 + *
  111.11 + * (C) Copyright 2002, by Guido Laures
  111.12 + *
  111.13 + * This library is free software; you can redistribute it and/or modify it under the terms
  111.14 + * of the GNU Lesser General Public License as published by the Free Software Foundation;
  111.15 + * either version 2.1 of the License, or (at your option) any later version.
  111.16 + *
  111.17 + * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
  111.18 + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  111.19 + * See the GNU Lesser General Public License for more details.
  111.20 + *
  111.21 + * You should have received a copy of the GNU Lesser General Public License along with this
  111.22 + * library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
  111.23 + * Boston, MA 02111-1307, USA.
  111.24 + */
  111.25 +
  111.26 +package de.laures.cewolf.taglib.util;
  111.27 +
  111.28 +import java.util.Date;
  111.29 +import java.util.Hashtable;
  111.30 +import java.util.Iterator;
  111.31 +import java.util.Map;
  111.32 +
  111.33 +import org.apache.commons.logging.Log;
  111.34 +import org.apache.commons.logging.LogFactory;
  111.35 +
  111.36 +/**
  111.37 + * @author glaures
  111.38 + */
  111.39 +public class DatasetProductionTimeStore extends Hashtable {
  111.40 +
  111.41 +    private static final DatasetProductionTimeStore instance = new DatasetProductionTimeStore();
  111.42 +    private static final Log log = LogFactory.getLog(DatasetProductionTimeStore.class);
  111.43 +    public static final DatasetProductionTimeStore getInstance() {
  111.44 +        return instance;
  111.45 +    }
  111.46 +
  111.47 +    private DatasetProductionTimeStore() {
  111.48 +    }
  111.49 +
  111.50 +    public boolean containsEntry(String producerId, Map params) {
  111.51 +        return containsKey(new DatasetProductionTimesKey(producerId, params));
  111.52 +    }
  111.53 +
  111.54 +    public void addEntry(String producerId, Map params, Date produceTime) {
  111.55 +      log.debug("add entry: " + producerId);
  111.56 +        put(new DatasetProductionTimesKey(producerId, params), produceTime);
  111.57 +    }
  111.58 +
  111.59 +    public void removeEntry(String producerId, Map params) {
  111.60 +      log.debug("remove entry: " + producerId);
  111.61 +      
  111.62 +        remove(new DatasetProductionTimesKey(producerId, params));
  111.63 +    }
  111.64 +
  111.65 +    public Date getProductionTime(String producerId, Map params) {
  111.66 +        return (Date) get(new DatasetProductionTimesKey(producerId, params));
  111.67 +    }
  111.68 +
  111.69 +    public String paramsToString(Map params){
  111.70 +    	Iterator it = params.keySet().iterator();
  111.71 +    	StringBuffer buf = new StringBuffer("[");
  111.72 +    	while(it.hasNext()){
  111.73 +    		String key = (String)it.next();
  111.74 +    		buf.append(key + ":" + params.get(key));
  111.75 +    	}
  111.76 +    	buf.append("]");
  111.77 +    	return buf.toString();
  111.78 +    }
  111.79 +    		
  111.80 +}
   112.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   112.2 +++ b/java/cewolf-1.0/src/main/java/de/laures/cewolf/taglib/util/DatasetProductionTimesKey.java	Sat Feb 28 21:31:02 2009 +0100
   112.3 @@ -0,0 +1,66 @@
   112.4 +/* ================================================================
   112.5 + * Cewolf : Chart enabling Web Objects Framework
   112.6 + * ================================================================
   112.7 + *
   112.8 + * Project Info:  http://cewolf.sourceforge.net
   112.9 + * Project Lead:  Guido Laures (guido@laures.de);
  112.10 + *
  112.11 + * (C) Copyright 2002, by Guido Laures
  112.12 + *
  112.13 + * This library is free software; you can redistribute it and/or modify it under the terms
  112.14 + * of the GNU Lesser General Public License as published by the Free Software Foundation;
  112.15 + * either version 2.1 of the License, or (at your option) any later version.
  112.16 + *
  112.17 + * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
  112.18 + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  112.19 + * See the GNU Lesser General Public License for more details.
  112.20 + *
  112.21 + * You should have received a copy of the GNU Lesser General Public License along with this
  112.22 + * library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
  112.23 + * Boston, MA 02111-1307, USA.
  112.24 + */
  112.25 +
  112.26 +package de.laures.cewolf.taglib.util;
  112.27 +
  112.28 +import java.io.Serializable;
  112.29 +import java.util.Map;
  112.30 +
  112.31 +import org.apache.commons.logging.Log;
  112.32 +import org.apache.commons.logging.LogFactory;
  112.33 +
  112.34 +/**
  112.35 + * @author glaures
  112.36 + */
  112.37 +class DatasetProductionTimesKey implements Serializable {
  112.38 +	
  112.39 +    private static final Log log = LogFactory.getLog(DatasetProductionTimesKey.class);
  112.40 +
  112.41 +	private final transient int key;
  112.42 +	
  112.43 +	public DatasetProductionTimesKey(String producerId, Map params){
  112.44 +		key = KeyGenerator.generateKey((Serializable) params);
  112.45 +		log.debug("data key is " + key + " producerId=" + producerId);
  112.46 +	}
  112.47 +	
  112.48 +	public int getKey(){
  112.49 +		return key;
  112.50 +	}
  112.51 +	
  112.52 +	public String toString() {
  112.53 +		return String.valueOf(key);
  112.54 +	}
  112.55 +	
  112.56 +	public int hashCode() {
  112.57 +		return key;
  112.58 +	}
  112.59 +	
  112.60 +	public boolean equals(Object o) {
  112.61 +		if (this == o) {
  112.62 +			return true;
  112.63 +		}
  112.64 +		if (o instanceof DatasetProductionTimesKey) {
  112.65 +			return key == ((DatasetProductionTimesKey) o).getKey();
  112.66 +		}
  112.67 +		return false;
  112.68 +	}
  112.69 +}
   113.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   113.2 +++ b/java/cewolf-1.0/src/main/java/de/laures/cewolf/taglib/util/KeyGenerator.java	Sat Feb 28 21:31:02 2009 +0100
   113.3 @@ -0,0 +1,58 @@
   113.4 +/* ================================================================
   113.5 + * Cewolf : Chart enabling Web Objects Framework
   113.6 + * ================================================================
   113.7 + *
   113.8 + * Project Info:  http://cewolf.sourceforge.net
   113.9 + * Project Lead:  Guido Laures (guido@laures.de);
  113.10 + *
  113.11 + * (C) Copyright 2002, by Guido Laures
  113.12 + *
  113.13 + * This library is free software; you can redistribute it and/or modify it under the terms
  113.14 + * of the GNU Lesser General Public License as published by the Free Software Foundation;
  113.15 + * either version 2.1 of the License, or (at your option) any later version.
  113.16 + *
  113.17 + * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
  113.18 + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  113.19 + * See the GNU Lesser General Public License for more details.
  113.20 + *
  113.21 + * You should have received a copy of the GNU Lesser General Public License along with this
  113.22 + * library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
  113.23 + * Boston, MA 02111-1307, USA.
  113.24 + */
  113.25 +
  113.26 +package de.laures.cewolf.taglib.util;
  113.27 +
  113.28 +import java.io.IOException;
  113.29 +import java.io.Serializable;
  113.30 +import java.rmi.MarshalledObject;
  113.31 +
  113.32 +import org.apache.commons.logging.Log;
  113.33 +import org.apache.commons.logging.LogFactory;
  113.34 +
  113.35 +/**
  113.36 + * @author  Guido Laures
  113.37 + */
  113.38 +public abstract class KeyGenerator {
  113.39 +    
  113.40 +    private static final Log log = LogFactory.getLog(KeyGenerator.class);
  113.41 +
  113.42 +    private static class NoKeyException extends RuntimeException {
  113.43 +        public NoKeyException(String msg){
  113.44 +            super(msg);
  113.45 +        }
  113.46 +    }
  113.47 +
  113.48 +    public static int generateKey(Serializable obj) {
  113.49 +        if (obj == null) {
  113.50 +            NoKeyException ex = new NoKeyException("assertion failed: can not generate key for null,");
  113.51 +            throw ex;
  113.52 +        }
  113.53 +        try {
  113.54 +            MarshalledObject mo = new MarshalledObject(obj);
  113.55 +            return mo.hashCode();
  113.56 +        } catch (IOException ioex) {
  113.57 +            log.error("IOException during key generation KeyGenerator.generateKey()", ioex);
  113.58 +            throw new NoKeyException(obj + " is not serializable.");
  113.59 +        }
  113.60 +    }
  113.61 +}
   114.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   114.2 +++ b/java/cewolf-1.0/src/main/java/de/laures/cewolf/taglib/util/MIMEExtensionHelper.java	Sat Feb 28 21:31:02 2009 +0100
   114.3 @@ -0,0 +1,45 @@
   114.4 +/* ================================================================
   114.5 + * Cewolf : Chart enabling Web Objects Framework
   114.6 + * ================================================================
   114.7 + *
   114.8 + * Project Info:  http://cewolf.sourceforge.net
   114.9 + * Project Lead:  Guido Laures (guido@laures.de);
  114.10 + *
  114.11 + * (C) Copyright 2002, by Guido Laures
  114.12 + *
  114.13 + * This library is free software; you can redistribute it and/or modify it under the terms
  114.14 + * of the GNU Lesser General Public License as published by the Free Software Foundation;
  114.15 + * either version 2.1 of the License, or (at your option) any later version.
  114.16 + *
  114.17 + * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
  114.18 + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  114.19 + * See the GNU Lesser General Public License for more details.
  114.20 + *
  114.21 + * You should have received a copy of the GNU Lesser General Public License along with this
  114.22 + * library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
  114.23 + * Boston, MA 02111-1307, USA.
  114.24 + */
  114.25 +
  114.26 +package de.laures.cewolf.taglib.util;
  114.27 +
  114.28 +import de.laures.cewolf.WebConstants;
  114.29 +
  114.30 +/**
  114.31 + * @author glaures
  114.32 + */
  114.33 +public class MIMEExtensionHelper {
  114.34 +
  114.35 +	public static String getExtensionForMimeType(String mimeType) {
  114.36 +		if (WebConstants.MIME_SVG.equalsIgnoreCase(mimeType)) {
  114.37 +			return ".svg";
  114.38 +		} else if (WebConstants.MIME_PNG.equalsIgnoreCase(mimeType)) {
  114.39 +			return ".png";
  114.40 +		}
  114.41 +		if (WebConstants.MIME_JPEG.equalsIgnoreCase(mimeType)) {
  114.42 +		    return ".jpg";
  114.43 +		}
  114.44 +		return null;
  114.45 +	}
  114.46 +
  114.47 +
  114.48 +}
   115.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   115.2 +++ b/java/cewolf-1.0/src/main/java/de/laures/cewolf/taglib/util/PageUtils.java	Sat Feb 28 21:31:02 2009 +0100
   115.3 @@ -0,0 +1,80 @@
   115.4 +/* ================================================================
   115.5 + * Cewolf : Chart enabling Web Objects Framework
   115.6 + * ================================================================
   115.7 + *
   115.8 + * Project Info:  http://cewolf.sourceforge.net
   115.9 + * Project Lead:  Guido Laures (guido@laures.de);
  115.10 + *
  115.11 + * (C) Copyright 2002, by Guido Laures
  115.12 + *
  115.13 + * This library is free software; you can redistribute it and/or modify it under the terms
  115.14 + * of the GNU Lesser General Public License as published by the Free Software Foundation;
  115.15 + * either version 2.1 of the License, or (at your option) any later version.
  115.16 + *
  115.17 + * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
  115.18 + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  115.19 + * See the GNU Lesser General Public License for more details.
  115.20 + *
  115.21 + * You should have received a copy of the GNU Lesser General Public License along with this
  115.22 + * library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
  115.23 + * Boston, MA 02111-1307, USA.
  115.24 + */
  115.25 +
  115.26 +package de.laures.cewolf.taglib.util;
  115.27 +
  115.28 +import javax.servlet.jsp.PageContext;
  115.29 +import javax.servlet.jsp.tagext.Tag;
  115.30 +
  115.31 +import org.jfree.data.general.Dataset;
  115.32 +
  115.33 +import de.laures.cewolf.ChartHolder;
  115.34 +import de.laures.cewolf.DatasetProduceException;
  115.35 +import de.laures.cewolf.taglib.tags.CewolfRootTag;
  115.36 +
  115.37 +/**
  115.38 + * Helper class to easily retrieve some objects of page context.
  115.39 + * @author  glaures
  115.40 + */
  115.41 +public class PageUtils {
  115.42 +    
  115.43 +    private final static String TOOLTIPS_ENABLED_ATTR = PageUtils.class.getName() + ".ttenabled";
  115.44 +    
  115.45 +    /** Creates a new instance of ChartDefinitionFactory */
  115.46 +    private PageUtils() {}
  115.47 +    
  115.48 +    public static ChartHolder getChartHolder(String chartId, PageContext ctx){
  115.49 +        return (ChartHolder)ctx.getAttribute(chartId, PageContext.PAGE_SCOPE);
  115.50 +    }
  115.51 +    
  115.52 +    public static final ChartHolder getChartHolder(Tag tag, PageContext ctx){
  115.53 +        CewolfRootTag root = findRoot(tag, ctx);
  115.54 +        if(root instanceof ChartHolder){
  115.55 +            return (ChartHolder)root;
  115.56 +        } else {
  115.57 +            return getChartHolder(root.getChartId(), ctx);
  115.58 +        }
  115.59 +    }
  115.60 +    
  115.61 +    public static final Dataset getDataset(String chartId, PageContext ctx) throws DatasetProduceException {
  115.62 +        return (Dataset) getChartHolder(chartId, ctx).getDataset();
  115.63 +    }
  115.64 +
  115.65 +    public static final CewolfRootTag findRoot(Tag t, PageContext ctx){
  115.66 +        Tag res = t;
  115.67 +        while(!(res instanceof CewolfRootTag)){
  115.68 +            res = res.getParent();
  115.69 +        }
  115.70 +        return (CewolfRootTag)res;
  115.71 +    }
  115.72 +    
  115.73 +    public static final void setToolTipsEnabled(PageContext ctx){
  115.74 +        if(!isToolTipsEnabled(ctx)){
  115.75 +            ctx.setAttribute(TOOLTIPS_ENABLED_ATTR, "true", PageContext.PAGE_SCOPE);
  115.76 +        }
  115.77 +    }
  115.78 +    
  115.79 +    public static final boolean isToolTipsEnabled(PageContext ctx){
  115.80 +        return ctx.getAttribute(TOOLTIPS_ENABLED_ATTR, PageContext.PAGE_SCOPE) != null;
  115.81 +    }
  115.82 +    
  115.83 +}
   116.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   116.2 +++ b/java/cewolf-1.0/src/main/java/de/laures/cewolf/taglib/util/package.html	Sat Feb 28 21:31:02 2009 +0100
   116.3 @@ -0,0 +1,10 @@
   116.4 +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
   116.5 +
   116.6 +<HTML>
   116.7 +<HEAD>
   116.8 +<TITLE></TITLE>
   116.9 +</HEAD>
  116.10 +<BODY>
  116.11 +Utility classes for the tag library.
  116.12 +</BODY>
  116.13 +</HTML>
   117.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   117.2 +++ b/java/cewolf-1.0/src/main/java/de/laures/cewolf/tooltips/CategoryToolTipGenerator.java	Sat Feb 28 21:31:02 2009 +0100
   117.3 @@ -0,0 +1,33 @@
   117.4 +/* ================================================================
   117.5 + * Cewolf : Chart enabling Web Objects Framework
   117.6 + * ================================================================
   117.7 + *
   117.8 + * Project Info:  http://cewolf.sourceforge.net
   117.9 + * Project Lead:  Guido Laures (guido@laures.de);
  117.10 + *
  117.11 + * (C) Copyright 2002, by Guido Laures
  117.12 + *
  117.13 + * This library is free software; you can redistribute it and/or modify it under the terms
  117.14 + * of the GNU Lesser General Public License as published by the Free Software Foundation;
  117.15 + * either version 2.1 of the License, or (at your option) any later version.
  117.16 + *
  117.17 + * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
  117.18 + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  117.19 + * See the GNU Lesser General Public License for more details.
  117.20 + *
  117.21 + * You should have received a copy of the GNU Lesser General Public License along with this
  117.22 + * library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
  117.23 + * Boston, MA 02111-1307, USA.
  117.24 + */
  117.25 +
  117.26 +package de.laures.cewolf.tooltips;
  117.27 +
  117.28 +import org.jfree.data.category.CategoryDataset;
  117.29 +
  117.30 +/**
  117.31 + * @author glaures
  117.32 + */
  117.33 +public interface CategoryToolTipGenerator extends ToolTipGenerator {
  117.34 +
  117.35 +	String generateToolTip(CategoryDataset data, int series, int item);
  117.36 +}
   118.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   118.2 +++ b/java/cewolf-1.0/src/main/java/de/laures/cewolf/tooltips/PieToolTipGenerator.java	Sat Feb 28 21:31:02 2009 +0100
   118.3 @@ -0,0 +1,42 @@
   118.4 +/* ================================================================
   118.5 + * Cewolf : Chart enabling Web Objects Framework
   118.6 + * ================================================================
   118.7 + *
   118.8 + * Project Info:  http://cewolf.sourceforge.net
   118.9 + * Project Lead:  Guido Laures (guido@laures.de);
  118.10 + *
  118.11 + * (C) Copyright 2002, by Guido Laures
  118.12 + *
  118.13 + * This library is free software; you can redistribute it and/or modify it under the terms
  118.14 + * of the GNU Lesser General Public License as published by the Free Software Foundation;
  118.15 + * either version 2.1 of the License, or (at your option) any later version.
  118.16 + *
  118.17 + * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
  118.18 + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  118.19 + * See the GNU Lesser General Public License for more details.
  118.20 + *
  118.21 + * You should have received a copy of the GNU Lesser General Public License along with this
  118.22 + * library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
  118.23 + * Boston, MA 02111-1307, USA.
  118.24 + */
  118.25 +
  118.26 +package de.laures.cewolf.tooltips;
  118.27 +
  118.28 +import org.jfree.data.general.PieDataset;
  118.29 +
  118.30 +/**
  118.31 + * @author glaures
  118.32 + */
  118.33 +public interface PieToolTipGenerator extends ToolTipGenerator {
  118.34 +
  118.35 +	/**
  118.36 +	 * Generates a tool tip text item for a particular category in the dataset.
  118.37 +	 * 
  118.38 +	 * @param data  the dataset.
  118.39 +	 * @param key  the item key.
  118.40 +	 * @param pieIndex  the pie index (differentiates between pies in a 'multi' pie chart).
  118.41 +	 *
  118.42 +	 * @return The tool tip text.
  118.43 +	 */
  118.44 +	String generateToolTip(PieDataset data, Comparable key, int pieIndex);
  118.45 +}
   119.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   119.2 +++ b/java/cewolf-1.0/src/main/java/de/laures/cewolf/tooltips/ToolTipGenerator.java	Sat Feb 28 21:31:02 2009 +0100
   119.3 @@ -0,0 +1,32 @@
   119.4 +/* ================================================================
   119.5 + * Cewolf : Chart enabling Web Objects Framework
   119.6 + * ================================================================
   119.7 + *
   119.8 + * Project Info:  http://cewolf.sourceforge.net
   119.9 + * Project Lead:  Guido Laures (guido@laures.de);
  119.10 + *
  119.11 + * (C) Copyright 2002, by Guido Laures
  119.12 + *
  119.13 + * This library is free software; you can redistribute it and/or modify it under the terms
  119.14 + * of the GNU Lesser General Public License as published by the Free Software Foundation;
  119.15 + * either version 2.1 of the License, or (at your option) any later version.
  119.16 + *
  119.17 + * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
  119.18 + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  119.19 + * See the GNU Lesser General Public License for more details.
  119.20 + *
  119.21 + * You should have received a copy of the GNU Lesser General Public License along with this
  119.22 + * library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
  119.23 + * Boston, MA 02111-1307, USA.
  119.24 + */
  119.25 +
  119.26 +package de.laures.cewolf.tooltips;
  119.27 +
  119.28 +
  119.29 +/**
  119.30 + * Interface for all tooltip generators.
  119.31 + * @author glaures
  119.32 + */
  119.33 +public interface ToolTipGenerator {
  119.34 +
  119.35 +}
   120.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   120.2 +++ b/java/cewolf-1.0/src/main/java/de/laures/cewolf/tooltips/XYToolTipGenerator.java	Sat Feb 28 21:31:02 2009 +0100
   120.3 @@ -0,0 +1,41 @@
   120.4 +/* ================================================================
   120.5 + * Cewolf : Chart enabling Web Objects Framework
   120.6 + * ================================================================
   120.7 + *
   120.8 + * Project Info:  http://cewolf.sourceforge.net
   120.9 + * Project Lead:  Guido Laures (guido@laures.de);
  120.10 + *
  120.11 + * (C) Copyright 2002, by Guido Laures
  120.12 + *
  120.13 + * This library is free software; you can redistribute it and/or modify it under the terms
  120.14 + * of the GNU Lesser General Public License as published by the Free Software Foundation;
  120.15 + * either version 2.1 of the License, or (at your option) any later version.
  120.16 + *
  120.17 + * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
  120.18 + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  120.19 + * See the GNU Lesser General Public License for more details.
  120.20 + *
  120.21 + * You should have received a copy of the GNU Lesser General Public License along with this
  120.22 + * library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
  120.23 + * Boston, MA 02111-1307, USA.
  120.24 + */
  120.25 +
  120.26 +package de.laures.cewolf.tooltips;
  120.27 +
  120.28 +import org.jfree.data.xy.XYDataset;
  120.29 +
  120.30 +/**
  120.31 + * @author glaures
  120.32 + */
  120.33 +public interface XYToolTipGenerator extends ToolTipGenerator {
  120.34 +
  120.35 +	/**
  120.36 +	 * Generates a tool tip text item for a particular item within a series.
  120.37 +	 * @param data  the dataset.
  120.38 +	 * @param series  the series index (zero-based).
  120.39 +	 * @param item  the item index (zero-based).
  120.40 +	 * @return the tooltip text.
  120.41 +	 */
  120.42 +	String generateToolTip(XYDataset data, int series, int item);
  120.43 +
  120.44 +}
   121.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   121.2 +++ b/java/cewolf-1.0/src/main/java/de/laures/cewolf/util/Assert.java	Sat Feb 28 21:31:02 2009 +0100
   121.3 @@ -0,0 +1,42 @@
   121.4 +/* ================================================================
   121.5 + * Cewolf : Chart enabling Web Objects Framework
   121.6 + * ================================================================
   121.7 + *
   121.8 + * Project Info:  http://cewolf.sourceforge.net
   121.9 + * Project Lead:  Guido Laures (guido@laures.de);
  121.10 + *
  121.11 + * (C) Copyright 2002, by Guido Laures
  121.12 + *
  121.13 + * This library is free software; you can redistribute it and/or modify it under the terms
  121.14 + * of the GNU Lesser General Public License as published by the Free Software Foundation;
  121.15 + * either version 2.1 of the License, or (at your option) any later version.
  121.16 + *
  121.17 + * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
  121.18 + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  121.19 + * See the GNU Lesser General Public License for more details.
  121.20 + *
  121.21 + * You should have received a copy of the GNU Lesser General Public License along with this
  121.22 + * library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
  121.23 + * Boston, MA 02111-1307, USA.
  121.24 + */
  121.25 +
  121.26 +package de.laures.cewolf.util;
  121.27 +
  121.28 +/**
  121.29 + * Simple assertion class.
  121.30 + * @author glaures
  121.31 + * @since 0.9
  121.32 + */
  121.33 +public class Assert {
  121.34 +	
  121.35 +	private static class AssertionException extends RuntimeException {
  121.36 +		public AssertionException(String msg){
  121.37 +			super(msg);
  121.38 +		}
  121.39 +	}
  121.40 +	
  121.41 +	public static void check(boolean b, String msg){
  121.42 +		if(!b) throw new AssertionException(msg);
  121.43 +	}
  121.44 +
  121.45 +}
   122.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   122.2 +++ b/java/cewolf-1.0/src/main/java/de/laures/cewolf/util/HTMLStateTable.java	Sat Feb 28 21:31:02 2009 +0100
   122.3 @@ -0,0 +1,50 @@
   122.4 +/* ================================================================
   122.5 + * Cewolf : Chart enabling Web Objects Framework
   122.6 + * ================================================================
   122.7 + *
   122.8 + * Project Info:  http://cewolf.sourceforge.net
   122.9 + * Project Lead:  Guido Laures (guido@laures.de);
  122.10 + *
  122.11 + * (C) Copyright 2002, by Guido Laures
  122.12 + *
  122.13 + * This library is free software; you can redistribute it and/or modify it under the terms
  122.14 + * of the GNU Lesser General Public License as published by the Free Software Foundation;
  122.15 + * either version 2.1 of the License, or (at your option) any later version.
  122.16 + *
  122.17 + * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
  122.18 + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  122.19 + * See the GNU Lesser General Public License for more details.
  122.20 + *
  122.21 + * You should have received a copy of the GNU Lesser General Public License along with this
  122.22 + * library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
  122.23 + * Boston, MA 02111-1307, USA.
  122.24 + */
  122.25 +
  122.26 +package de.laures.cewolf.util;
  122.27 +
  122.28 +import java.util.Iterator;
  122.29 +import java.util.List;
  122.30 +
  122.31 +/**
  122.32 + * Renders the state of a StateDescriptor as an HTML table.
  122.33 + * @since 0.9
  122.34 + * @see de.laures.cewolf.util.StateDescriptor
  122.35 + * @author glaures
  122.36 + */
  122.37 +public class HTMLStateTable {
  122.38 +	
  122.39 +	public static String getStateTable(StateDescriptor sd){
  122.40 +		StringBuffer res = new StringBuffer("<TABLE BORDER='1'>");
  122.41 +		res.append("<TR><TH colspan='2'>" + sd.getID() + "</TH></TR>");
  122.42 +		List params = sd.getStateParameters();
  122.43 +		Iterator it = params.iterator();
  122.44 +		while(it.hasNext()){
  122.45 +			Object key = it.next();
  122.46 +			Object val = sd.getState(key);
  122.47 +			res.append("<TR><TD>" + key + "</TD><TD>" + val + "</TD></TR>");
  122.48 +		}
  122.49 +		res.append("</TABLE>");
  122.50 +		return res.toString();
  122.51 +	}
  122.52 +
  122.53 +}
   123.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   123.2 +++ b/java/cewolf-1.0/src/main/java/de/laures/cewolf/util/ImageHelper.java	Sat Feb 28 21:31:02 2009 +0100
   123.3 @@ -0,0 +1,106 @@
   123.4 +/* ================================================================
   123.5 + * Cewolf : Chart enabling Web Objects Framework
   123.6 + * ================================================================
   123.7 + *
   123.8 + * Project Info:  http://cewolf.sourceforge.net
   123.9 + * Project Lead:  Guido Laures (guido@laures.de);
  123.10 + *
  123.11 + * (C) Copyright 2002, by Guido Laures
  123.12 + *
  123.13 + * This library is free software; you can redistribute it and/or modify it under the terms
  123.14 + * of the GNU Lesser General Public License as published by the Free Software Foundation;
  123.15 + * either version 2.1 of the License, or (at your option) any later version.
  123.16 + *
  123.17 + * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
  123.18 + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  123.19 + * See the GNU Lesser General Public License for more details.
  123.20 + *
  123.21 + * You should have received a copy of the GNU Lesser General Public License along with this
  123.22 + * library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
  123.23 + * Boston, MA 02111-1307, USA.
  123.24 + */
  123.25 +
  123.26 +package de.laures.cewolf.util;
  123.27 +
  123.28 +import java.awt.Component;
  123.29 +import java.awt.Graphics;
  123.30 +import java.awt.Image;
  123.31 +import java.awt.MediaTracker;
  123.32 +import java.awt.image.BufferedImage;
  123.33 +import java.awt.image.ColorModel;
  123.34 +import java.awt.image.PixelGrabber;
  123.35 +
  123.36 +import org.apache.commons.logging.Log;
  123.37 +import org.apache.commons.logging.LogFactory;
  123.38 +
  123.39 +/** 
  123.40 + * Some simple image rendering helper methods.
  123.41 + * @author  Guido Laures 
  123.42 + */
  123.43 +public class ImageHelper {
  123.44 +
  123.45 +    private static final Component comp = new Component() { };
  123.46 +    private static final MediaTracker tracker = new MediaTracker(comp);
  123.47 +    private static final Log log = LogFactory.getLog(ImageHelper.class);
  123.48 +
  123.49 +    /** Creates a new instance of ImageHelper */
  123.50 +    private ImageHelper() {
  123.51 +    }
  123.52 +
  123.53 +    public static final Image loadImage(String fileName) {
  123.54 +        final Image image = java.awt.Toolkit.getDefaultToolkit().getImage(fileName);
  123.55 +        synchronized(tracker) {
  123.56 +            tracker.addImage(image, 0);
  123.57 +            try {
  123.58 +                tracker.waitForID(0, 0);
  123.59 +            } catch (InterruptedException e) {
  123.60 +                log.debug("INTERRUPTED while loading Image");
  123.61 +            }
  123.62 +            tracker.removeImage(image, 0);
  123.63 +        }
  123.64 +        return image;
  123.65 +    }
  123.66 +
  123.67 +    public static BufferedImage loadBufferedImage(String fileName) {
  123.68 +        Image image = loadImage(fileName);
  123.69 +        if (image instanceof BufferedImage) {
  123.70 +            return (BufferedImage)image;
  123.71 +        }
  123.72 +        /*        final boolean hasAlpha = hasAlpha(image);
  123.73 +       int transparency = Transparency.OPAQUE;
  123.74 +        if (hasAlpha) {
  123.75 +            transparency = Transparency.BITMASK;
  123.76 +        }*/
  123.77 +        int width = (int)Math.max(1.0, image.getWidth(null));
  123.78 +        int height = (int)Math.max(1.0, image.getHeight(null));
  123.79 +        // BufferedImage bimage = GRAPHICS_CONV.createCompatibleImage(width, height, transparency);
  123.80 +        BufferedImage bimage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
  123.81 +        final Graphics g = bimage.createGraphics();
  123.82 +        g.drawImage(image, 0, 0, null);
  123.83 +        g.dispose();
  123.84 +        return bimage;
  123.85 +    }
  123.86 +
  123.87 +    public static boolean hasAlpha(Image image) {
  123.88 +        if (image instanceof BufferedImage) {
  123.89 +            return ((BufferedImage)image).getColorModel().hasAlpha();
  123.90 +        }
  123.91 +        PixelGrabber pg = new PixelGrabber(image, 0, 0, 1, 1, false);
  123.92 +        try {
  123.93 +            pg.grabPixels();
  123.94 +        } catch (InterruptedException e) {
  123.95 +            e.printStackTrace();
  123.96 +        }
  123.97 +        ColorModel cm = pg.getColorModel();
  123.98 +        if(cm == null){
  123.99 +        	return false;
 123.100 +        }
 123.101 +        return cm.hasAlpha();
 123.102 +    }
 123.103 +
 123.104 +    public static BufferedImage createImage(int width, int height) {
 123.105 +        // return GRAPHICS_CONV.createCompatibleImage(width, height);
 123.106 +        return new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
 123.107 +    }
 123.108 +
 123.109 +}
   124.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   124.2 +++ b/java/cewolf-1.0/src/main/java/de/laures/cewolf/util/RenderedImage.java	Sat Feb 28 21:31:02 2009 +0100
   124.3 @@ -0,0 +1,18 @@
   124.4 +package de.laures.cewolf.util;
   124.5 +
   124.6 +/**
   124.7 + * @author glaures
   124.8 + */
   124.9 +public class RenderedImage {
  124.10 +
  124.11 +	public final byte[] data;
  124.12 +	public final String mimeType;
  124.13 +	public final transient Object renderingInfo;
  124.14 +
  124.15 +	public RenderedImage(byte[] data, String mimeType, Object renderingInfo) {
  124.16 +		this.data = data;
  124.17 +		this.mimeType = mimeType;
  124.18 +		this.renderingInfo = renderingInfo;
  124.19 +	}
  124.20 +
  124.21 +}
   125.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   125.2 +++ b/java/cewolf-1.0/src/main/java/de/laures/cewolf/util/Renderer.java	Sat Feb 28 21:31:02 2009 +0100
   125.3 @@ -0,0 +1,278 @@
   125.4 +/* ================================================================
   125.5 + * Cewolf : Chart enabling Web Objects Framework
   125.6 + * ================================================================
   125.7 + *
   125.8 + * Project Info:  http://cewolf.sourceforge.net
   125.9 + * Project Lead:  Guido Laures (guido@laures.de);
  125.10 + *
  125.11 + * (C) Copyright 2002, by Guido Laures
  125.12 + *
  125.13 + * This library is free software; you can redistribute it and/or modify it under the terms
  125.14 + * of the GNU Lesser General Public License as published by the Free Software Foundation;
  125.15 + * either version 2.1 of the License, or (at your option) any later version.
  125.16 + *
  125.17 + * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
  125.18 + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  125.19 + * See the GNU Lesser General Public License for more details.
  125.20 + *
  125.21 + * You should have received a copy of the GNU Lesser General Public License along with this
  125.22 + * library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
  125.23 + * Boston, MA 02111-1307, USA.
  125.24 + */
  125.25 +
  125.26 +package de.laures.cewolf.util;
  125.27 +
  125.28 +import java.awt.Color;
  125.29 +import java.awt.Dimension;
  125.30 +import java.awt.Graphics2D;
  125.31 +import java.awt.Rectangle;
  125.32 +import java.awt.geom.Rectangle2D;
  125.33 +import java.awt.image.BufferedImage;
  125.34 +import java.io.ByteArrayOutputStream;
  125.35 +import java.io.IOException;
  125.36 +import java.io.OutputStreamWriter;
  125.37 +import java.util.Iterator;
  125.38 +import java.util.List;
  125.39 +
  125.40 +import org.apache.batik.dom.GenericDOMImplementation;
  125.41 +import org.apache.batik.svggen.SVGGeneratorContext;
  125.42 +import org.apache.batik.svggen.SVGGraphics2D;
  125.43 +import org.apache.commons.logging.Log;
  125.44 +import org.apache.commons.logging.LogFactory;
  125.45 +import org.jfree.chart.ChartRenderingInfo;
  125.46 +import org.jfree.chart.ChartUtilities;
  125.47 +import org.jfree.chart.JFreeChart;
  125.48 +import org.jfree.chart.block.RectangleConstraint;
  125.49 +import org.jfree.chart.entity.StandardEntityCollection;
  125.50 +import org.jfree.chart.title.LegendTitle;
  125.51 +import org.jfree.ui.RectangleEdge;
  125.52 +import org.w3c.dom.DOMImplementation;
  125.53 +import org.w3c.dom.Document;
  125.54 +
  125.55 +import com.sun.image.codec.jpeg.JPEGCodec;
  125.56 +import com.sun.image.codec.jpeg.JPEGEncodeParam;
  125.57 +import com.sun.image.codec.jpeg.JPEGImageEncoder;
  125.58 +
  125.59 +import de.laures.cewolf.CewolfException;
  125.60 +import de.laures.cewolf.ChartImage;
  125.61 +import de.laures.cewolf.ChartRenderingException;
  125.62 +import de.laures.cewolf.ConfigurationException;
  125.63 +import de.laures.cewolf.WebConstants;
  125.64 +
  125.65 +/**
  125.66 + * Renderer for ChartImageDefinitions.
  125.67 + *
  125.68 + * @author glaures
  125.69 + * @author tbardzil
  125.70 + * @see    de.laures.cewolf.ChartImage
  125.71 + */
  125.72 +public class Renderer implements WebConstants {
  125.73 +	
  125.74 +	private final static Log log = LogFactory.getLog(Renderer.class);
  125.75 +
  125.76 +	/** Creates a new instance of Renderer */
  125.77 +	private Renderer() {
  125.78 +	};
  125.79 +
  125.80 +	/**
  125.81 +	 * Renders a chart image
  125.82 +	 *
  125.83 +	 * @param  cd                  the chart to render
  125.84 +	 * @return                     the rendered image
  125.85 +	 * @throws CewolfException
  125.86 +	 */
  125.87 +	public static RenderedImage render(ChartImage cd, Object chart) throws CewolfException {
  125.88 +		log.debug("rendering " + cd);
  125.89 +		switch (cd.getType()) {
  125.90 +			case ChartImage.IMG_TYPE_CHART :
  125.91 +				return renderChart(cd, chart);
  125.92 +			case ChartImage.IMG_TYPE_LEGEND :
  125.93 +				return renderLegend(cd, chart);
  125.94 +			default :
  125.95 +				throw new ConfigurationException(cd.getType() + " is not a supported image type");
  125.96 +		}
  125.97 +	}
  125.98 +
  125.99 +	/**
 125.100 +	 * Renders a chart
 125.101 +	 * @param cd the chart image to be rendered
 125.102 +	 * @return the rendered image
 125.103 +	 * @throws CewolfException
 125.104 +	 */
 125.105 +	private static RenderedImage renderChart(ChartImage cd, Object chart) throws CewolfException {
 125.106 +		try {
 125.107 +			final ByteArrayOutputStream baos = new ByteArrayOutputStream();
 125.108 +			final ChartRenderingInfo info = new ChartRenderingInfo(new StandardEntityCollection());
 125.109 +			final String mimeType = cd.getMimeType();
 125.110 +			if (MIME_PNG.equals(mimeType)) {
 125.111 +				handlePNG(baos, (JFreeChart)chart, cd.getWidth(), cd.getHeight(), info);
 125.112 +			} else if (MIME_JPEG.equals(mimeType)) {
 125.113 +			    handleJPEG(baos, (JFreeChart)chart, cd.getWidth(), cd.getHeight(), info);
 125.114 +			} else if (MIME_SVG.equals(mimeType)) {
 125.115 +				handleSVG(baos, (JFreeChart)chart, cd.getWidth(), cd.getHeight());
 125.116 +			} else {
 125.117 +				throw new RenderingException("Mime type " + mimeType + " is unsupported.");
 125.118 +			}
 125.119 +			baos.close();
 125.120 +			return new RenderedImage(baos.toByteArray(), mimeType, info);
 125.121 +		} catch (IOException ioe) {
 125.122 +			log.error(ioe);
 125.123 +			throw new ChartRenderingException(ioe.getMessage(),ioe);
 125.124 +		}
 125.125 +	}
 125.126 +
 125.127 +	/**
 125.128 +	 * Handles rendering a chart as a PNG. Currently this method is synchronized
 125.129 +	 * because of concurrency issues with JFreeChart.
 125.130 +	 *
 125.131 +	 * @param  baos
 125.132 +	 * @param  chart
 125.133 +	 * @param  width
 125.134 +	 * @param  height
 125.135 +	 * @param  info
 125.136 +	 * @throws IOException
 125.137 +	 */
 125.138 +	private static synchronized void handlePNG(
 125.139 +		ByteArrayOutputStream baos,
 125.140 +		JFreeChart chart,
 125.141 +		int width,
 125.142 +		int height,
 125.143 +		ChartRenderingInfo info)
 125.144 +		throws IOException {
 125.145 +		ChartUtilities.writeChartAsPNG(baos, chart, width, height, info);
 125.146 +	}
 125.147 +	
 125.148 +	/**
 125.149 +	 * Handles rendering a chart as a JPEG. Currently this method is synchronized
 125.150 +	 * because of concurrency issues with JFreeChart.
 125.151 +	 *
 125.152 +	 * @param  baos
 125.153 +	 * @param  chart
 125.154 +	 * @param  width
 125.155 +	 * @param  height
 125.156 +	 * @param  info
 125.157 +	 * @throws IOException
 125.158 +	 */
 125.159 +	private static synchronized void handleJPEG(
 125.160 +		ByteArrayOutputStream baos,
 125.161 +		JFreeChart chart,
 125.162 +		int width,
 125.163 +		int height,
 125.164 +		ChartRenderingInfo info)
 125.165 +		throws IOException {
 125.166 +		ChartUtilities.writeChartAsJPEG(baos, chart, width, height, info);
 125.167 +	}			
 125.168 +
 125.169 +	/**
 125.170 +	 * Handles rendering a chart as a SVG. Currently this method is synchronized
 125.171 +	 * because of concurrency issues with JFreeChart.
 125.172 +	 *
 125.173 +	 * @param  baos
 125.174 +	 * @param  chart
 125.175 +	 * @param  width
 125.176 +	 * @param  height
 125.177 +	 * @throws IOException
 125.178 +	 */
 125.179 +	private static synchronized void handleSVG(ByteArrayOutputStream baos, JFreeChart chart, int width, int height)
 125.180 +		throws IOException {
 125.181 +		OutputStreamWriter writer = new OutputStreamWriter(baos, "UTF-8");
 125.182 +		DOMImplementation domImpl = GenericDOMImplementation.getDOMImplementation();
 125.183 +		Document document = domImpl.createDocument("cewolf-svg", "svg", null);
 125.184 +		SVGGeneratorContext ctx = SVGGeneratorContext.createDefault(document);
 125.185 +		ctx.setComment("Generated by Cewolf using JFreeChart and Apache Batik SVG Generator");
 125.186 +		SVGGraphics2D svgGenerator = new SVGGraphics2D(ctx, false);
 125.187 +		svgGenerator.setSVGCanvasSize(new Dimension(width, height));
 125.188 +		chart.draw(svgGenerator, new Rectangle2D.Double(0, 0, width, height), null);
 125.189 +		svgGenerator.stream(writer, false);
 125.190 +		writer.close();
 125.191 +	}
 125.192 +
 125.193 +  //gets first legend in the list
 125.194 +  public static LegendTitle getLegend(JFreeChart chart)
 125.195 +  {
 125.196 +    //i need to find the legend now.
 125.197 +    LegendTitle legend = null;
 125.198 +    List subTitles = chart.getSubtitles();
 125.199 +    Iterator iter = subTitles.iterator();
 125.200 +    while (iter.hasNext())
 125.201 +    {
 125.202 +      Object o = iter.next();
 125.203 +      if (o instanceof LegendTitle)
 125.204 +      {
 125.205 +        legend = (LegendTitle) o;
 125.206 +        break;
 125.207 +      }
 125.208 +    }
 125.209 +    return legend;
 125.210 +  }
 125.211 +  
 125.212 +  //removes first legend in the list
 125.213 +  public static void removeLegend(JFreeChart chart)
 125.214 +  {
 125.215 +    List subTitles = chart.getSubtitles();
 125.216 +    Iterator iter = subTitles.iterator();
 125.217 +    while (iter.hasNext())
 125.218 +    {
 125.219 +      Object o = iter.next();
 125.220 +      if (o instanceof LegendTitle)
 125.221 +      {
 125.222 +        iter.remove();
 125.223 +        break;
 125.224 +      }
 125.225 +    }
 125.226 +  }
 125.227 +  
 125.228 +	/**
 125.229 +	 * Renders a legend
 125.230 +	 * @param cd the chart iamge to be rendred
 125.231 +	 * @return the rendered image
 125.232 +	 * @throws CewolfException
 125.233 +	 */
 125.234 +	private static RenderedImage renderLegend(ChartImage cd, Object c) throws CewolfException {
 125.235 +		try {
 125.236 +		    JFreeChart chart = (JFreeChart) c;
 125.237 +			final int width = cd.getWidth();
 125.238 +			final int height = cd.getHeight();
 125.239 +			LegendTitle legend = getLegend(chart);
 125.240 +			boolean haslegend = true;
 125.241 +			
 125.242 +			// with JFreeChart v0.9.20, the only way to get a valid legend,
 125.243 +			// is either to retrieve it from the chart or to assign a new
 125.244 +			// one to the chart. In the case where the chart has no legend,
 125.245 +			// a new one must be assigned, but just for rendering. After, we
 125.246 +			// have to reset the legend to null in the chart.
 125.247 +			if (null == legend) {
 125.248 +				haslegend = false;
 125.249 +				legend = new LegendTitle(chart.getPlot());   
 125.250 +			}
 125.251 +			legend.setPosition(RectangleEdge.BOTTOM);
 125.252 +			BufferedImage bimage = ImageHelper.createImage(width, height);
 125.253 +			Graphics2D g = bimage.createGraphics();
 125.254 +			g.setColor(Color.white);
 125.255 +			g.fillRect(0, 0, width, height);
 125.256 +			legend.arrange(g,new RectangleConstraint(width,height));
 125.257 + 			legend.draw(g, new Rectangle(width, height));
 125.258 +			ByteArrayOutputStream out = new ByteArrayOutputStream();
 125.259 +			JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
 125.260 +			JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(bimage);
 125.261 +			param.setQuality(1.0f, true);
 125.262 +			encoder.encode(bimage, param);
 125.263 +			out.close();
 125.264 +
 125.265 +			// if the chart had no legend, reset it to null in order to give back the
 125.266 +			// chart in the state we received it.
 125.267 +			if (!haslegend) {
 125.268 +				removeLegend(chart);
 125.269 +			}
 125.270 +			
 125.271 +			return new RenderedImage(
 125.272 +				out.toByteArray(),
 125.273 +				"image/jpeg",
 125.274 +				new ChartRenderingInfo(new StandardEntityCollection()));
 125.275 +		} catch (IOException ioex) {
 125.276 +			log.error(ioex);
 125.277 +			throw new ChartRenderingException(ioex.getMessage(), ioex);
 125.278 +		}
 125.279 +	}
 125.280 +
 125.281 +}
   126.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   126.2 +++ b/java/cewolf-1.0/src/main/java/de/laures/cewolf/util/RenderingException.java	Sat Feb 28 21:31:02 2009 +0100
   126.3 @@ -0,0 +1,63 @@
   126.4 +/* ================================================================
   126.5 + * Cewolf : Chart enabling Web Objects Framework
   126.6 + * ================================================================
   126.7 + *
   126.8 + * Project Info:  http://cewolf.sourceforge.net
   126.9 + * Project Lead:  Guido Laures (guido@laures.de);
  126.10 + *
  126.11 + * (C) Copyright 2002, by Guido Laures
  126.12 + *
  126.13 + * This library is free software; you can redistribute it and/or modify it under the terms
  126.14 + * of the GNU Lesser General Public License as published by the Free Software Foundation;
  126.15 + * either version 2.1 of the License, or (at your option) any later version.
  126.16 + *
  126.17 + * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
  126.18 + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  126.19 + * See the GNU Lesser General Public License for more details.
  126.20 + *
  126.21 + * You should have received a copy of the GNU Lesser General Public License along with this
  126.22 + * library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
  126.23 + * Boston, MA 02111-1307, USA.
  126.24 + */
  126.25 +
  126.26 +package de.laures.cewolf.util;
  126.27 +
  126.28 +import de.laures.cewolf.CewolfException;
  126.29 +
  126.30 +/**
  126.31 + * Thrown when an error during rendering occured.
  126.32 + * @author glaures
  126.33 + *
  126.34 + */
  126.35 +public class RenderingException extends CewolfException {
  126.36 +	
  126.37 +	private Throwable wrapped;
  126.38 +
  126.39 +	/**
  126.40 +	 * Constructor for RenderingException.
  126.41 +	 */
  126.42 +	public RenderingException() {
  126.43 +		super();
  126.44 +	}
  126.45 +
  126.46 +	/**
  126.47 +	 * Constructor for RenderingException.
  126.48 +	 * @param msg
  126.49 +	 */
  126.50 +	public RenderingException(String msg) {
  126.51 +		super(msg);
  126.52 +	}
  126.53 +	
  126.54 +	public RenderingException(Throwable ex){
  126.55 +		super(ex.getMessage());
  126.56 +	}
  126.57 +	
  126.58 +	public void printStackTrace(){
  126.59 +		if(wrapped != null){
  126.60 +			wrapped.printStackTrace();
  126.61 +		} else {
  126.62 +			super.printStackTrace();
  126.63 +		}		
  126.64 +	}
  126.65 +
  126.66 +}
   127.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   127.2 +++ b/java/cewolf-1.0/src/main/java/de/laures/cewolf/util/RenderingHelper.java	Sat Feb 28 21:31:02 2009 +0100
   127.3 @@ -0,0 +1,100 @@
   127.4 +/* ================================================================
   127.5 + * Cewolf : Chart enabling Web Objects Framework
   127.6 + * ================================================================
   127.7 + *
   127.8 + * Project Info:  http://cewolf.sourceforge.net
   127.9 + * Project Lead:  Guido Laures (guido@laures.de);
  127.10 + *
  127.11 + * (C) Copyright 2002, by Guido Laures
  127.12 + *
  127.13 + * This library is free software; you can redistribute it and/or modify it under the terms
  127.14 + * of the GNU Lesser General Public License as published by the Free Software Foundation;
  127.15 + * either version 2.1 of the License, or (at your option) any later version.
  127.16 + *
  127.17 + * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
  127.18 + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  127.19 + * See the GNU Lesser General Public License for more details.
  127.20 + *
  127.21 + * You should have received a copy of the GNU Lesser General Public License along with this
  127.22 + * library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
  127.23 + * Boston, MA 02111-1307, USA.
  127.24 + */
  127.25 +
  127.26 +package de.laures.cewolf.util;
  127.27 +
  127.28 +import java.awt.Color;
  127.29 +import java.awt.Font;
  127.30 +import java.awt.Graphics;
  127.31 +import java.awt.image.BufferedImage;
  127.32 +import java.io.IOException;
  127.33 +import java.io.OutputStream;
  127.34 +import java.io.PrintWriter;
  127.35 +import java.io.StringWriter;
  127.36 +import java.util.Enumeration;
  127.37 +import java.util.StringTokenizer;
  127.38 +
  127.39 +import com.sun.image.codec.jpeg.JPEGCodec;
  127.40 +import com.sun.image.codec.jpeg.JPEGEncodeParam;
  127.41 +import com.sun.image.codec.jpeg.JPEGImageEncoder;
  127.42 +
  127.43 +/**
  127.44 + * Some methods to render messages or exceptions into an image.
  127.45 + * @author glaures
  127.46 + */
  127.47 +public class RenderingHelper {
  127.48 +	
  127.49 +	private final static int PADDING_X = 5;
  127.50 +	
  127.51 +	public static String renderMessage(String msg, int width, int height, OutputStream out) throws IOException {
  127.52 +		BufferedImage image = ImageHelper.createImage(width, height);
  127.53 +		Graphics gr = image.getGraphics();
  127.54 +		gr.setColor(Color.white);
  127.55 +		gr.fillRect(0, 0, width, height);
  127.56 +		gr.setColor(Color.black);
  127.57 +		gr.drawString(msg, PADDING_X, height/2 - 7);
  127.58 +		JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
  127.59 +		JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(image);
  127.60 +		param.setQuality(1.0f, true);
  127.61 +		encoder.encode(image, param);
  127.62 +		return "image/jpeg";
  127.63 +	}
  127.64 +    
  127.65 +	public static String renderException(Throwable ex, int width, int height, OutputStream out) throws IOException {
  127.66 +		BufferedImage image = ImageHelper.createImage(width, height);
  127.67 +		Graphics gr = image.getGraphics();
  127.68 +		gr.setColor(Color.white);
  127.69 +		gr.fillRect(0, 0, width, height);
  127.70 +		gr.setColor(Color.red);
  127.71 +		gr.drawString(ex.getClass().getName() + " raised:", PADDING_X, 15);
  127.72 +		gr.drawString(String.valueOf(ex.getMessage()), PADDING_X, 30);
  127.73 +		gr.setColor(Color.black);
  127.74 +		Font stFont = gr.getFont().deriveFont(9f);
  127.75 +		gr.setFont(stFont);
  127.76 +		drawStackTrace(gr, PADDING_X, 50, ex);
  127.77 +		JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
  127.78 +		JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(image);
  127.79 +		param.setQuality(1.0f, true);
  127.80 +		encoder.encode(image, param);
  127.81 +		return "image/jpeg";
  127.82 +	}
  127.83 +    
  127.84 +    private static void drawStackTrace(Graphics gr, int x, int y, Throwable ex) {
  127.85 +        final int linePadding = 4;
  127.86 +        int lineHeight = gr.getFont().getSize() + linePadding;
  127.87 +        int currY = y;
  127.88 +        Enumeration lines = new StringTokenizer(getStackTrace(ex), "\n", false);
  127.89 +        while (lines.hasMoreElements()) {
  127.90 +            gr.drawString(((String)lines.nextElement()).trim(), x, currY);
  127.91 +            currY += lineHeight;
  127.92 +        }
  127.93 +    }
  127.94 +    
  127.95 +    private static String getStackTrace(Throwable t) {
  127.96 +        StringWriter sw = new StringWriter();
  127.97 +        PrintWriter pw = new PrintWriter(sw);
  127.98 +        t.printStackTrace(pw);
  127.99 +        pw.close();
 127.100 +        return sw.getBuffer().toString();
 127.101 +    }
 127.102 +    
 127.103 +}
   128.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   128.2 +++ b/java/cewolf-1.0/src/main/java/de/laures/cewolf/util/StateDescriptor.java	Sat Feb 28 21:31:02 2009 +0100
   128.3 @@ -0,0 +1,38 @@
   128.4 +/* ================================================================
   128.5 + * Cewolf : Chart enabling Web Objects Framework
   128.6 + * ================================================================
   128.7 + *
   128.8 + * Project Info:  http://cewolf.sourceforge.net
   128.9 + * Project Lead:  Guido Laures (guido@laures.de);
  128.10 + *
  128.11 + * (C) Copyright 2002, by Guido Laures
  128.12 + *
  128.13 + * This library is free software; you can redistribute it and/or modify it under the terms
  128.14 + * of the GNU Lesser General Public License as published by the Free Software Foundation;
  128.15 + * either version 2.1 of the License, or (at your option) any later version.
  128.16 + *
  128.17 + * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
  128.18 + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  128.19 + * See the GNU Lesser General Public License for more details.
  128.20 + *
  128.21 + * You should have received a copy of the GNU Lesser General Public License along with this
  128.22 + * library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
  128.23 + * Boston, MA 02111-1307, USA.
  128.24 + */
  128.25 +
  128.26 +package de.laures.cewolf.util;
  128.27 +
  128.28 +import java.util.List;
  128.29 +
  128.30 +/**
  128.31 + * States of objects implementing this interface can be monitored in some way.
  128.32 + * @todo change this into an aspect or use MBeans for this
  128.33 + * @author glaures
  128.34 + */
  128.35 +public interface StateDescriptor {
  128.36 +	
  128.37 +	public String getID();
  128.38 +	public List getStateParameters();
  128.39 +	public Object getState(Object stateParam);
  128.40 +
  128.41 +}
   129.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   129.2 +++ b/java/cewolf-1.0/src/main/java/de/laures/cewolf/util/package.html	Sat Feb 28 21:31:02 2009 +0100
   129.3 @@ -0,0 +1,10 @@
   129.4 +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
   129.5 +
   129.6 +<HTML>
   129.7 +<HEAD>
   129.8 +<TITLE></TITLE>
   129.9 +</HEAD>
  129.10 +<BODY>
  129.11 +Utility classes used by Cewolf.
  129.12 +</BODY>
  129.13 +</HTML>
   130.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   130.2 +++ b/java/cewolf-1.0/src/main/resources/cewolf-1.1.tld	Sat Feb 28 21:31:02 2009 +0100
   130.3 @@ -0,0 +1,1234 @@
   130.4 +<?xml version="1.0" encoding="ISO-8859-1"?>
   130.5 +<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN" "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
   130.6 +
   130.7 +<taglib>
   130.8 +<tlib-version>0.9.3</tlib-version>
   130.9 +<jsp-version>1.2</jsp-version>
  130.10 +<short-name>Cewolf Tag Library</short-name>
  130.11 +<uri>http://cewolf.sourceforge.net/taglib/cewolf.tld</uri>
  130.12 +<display-name>Cewolf Tag Library</display-name>
  130.13 +<description>This tag library is designed to describe charts of all kinds.</description>
  130.14 +<tag>
  130.15 +    <name>plot</name>
  130.16 +    <tag-class>de.laures.cewolf.taglib.tags.PlotTag</tag-class>
  130.17 +    <body-content>JSP</body-content>
  130.18 +    <description>
  130.19 +    	The plot tag is nested inside a complex chart to define a nested or layerd plot instance.
  130.20 +        @required-child data
  130.21 +    </description>
  130.22 +    <attribute>
  130.23 +        <name>type</name>
  130.24 +        <required>true</required>
  130.25 +        <rtexprvalue>true</rtexprvalue>
  130.26 +        <description>
  130.27 +        	The type  of the plot. One of xyarea, xyline, xyshapesandlines ,
  130.28 +			scatter, xyverticalbar, step, candlestick, highlow, signal,
  130.29 +			verticlebar, area, line, shapesandlines
  130.30 +	    </description>
  130.31 +    </attribute>
  130.32 +    <attribute>
  130.33 +        <name>xaxislabel</name>
  130.34 +        <required>false</required>
  130.35 +        <rtexprvalue>true</rtexprvalue>
  130.36 +        <description>
  130.37 +            Title of the plot's x-axis. This attributes is
  130.38 +            only used for horizontally combined charts.
  130.39 +        </description>
  130.40 +    </attribute>
  130.41 +    <attribute>
  130.42 +        <name>yaxislabel</name>
  130.43 +        <required>false</required>
  130.44 +        <rtexprvalue>true</rtexprvalue>
  130.45 +        <description>
  130.46 +            Title of the plot's y-axis. This attributes is
  130.47 +            only used for vertically combined charts.
  130.48 +        </description>
  130.49 +    </attribute>
  130.50 +</tag>
  130.51 +<tag>
  130.52 +    <name>img</name>
  130.53 +    <tag-class>de.laures.cewolf.taglib.tags.ChartImgTag</tag-class>
  130.54 +    <body-content>JSP</body-content>
  130.55 +    <description>
  130.56 +    	This tag is a specialized HTML img tag. It renders the chart
  130.57 +    	which has been specified by a &lt;chart&gt; tag in the same page.
  130.58 +      @optional-child map
  130.59 +    </description>
  130.60 +    <attribute>
  130.61 +        <name>renderer</name>
  130.62 +        <required>true</required>
  130.63 +        <rtexprvalue>true</rtexprvalue>
  130.64 +        <description>
  130.65 +            Path to rendering servlet. Any path that starts with a '/' is assumed to refer to a resource relative to web application root. Otherwise, the path is assumed to refer to resource relative to the current page directory.
  130.66 +        </description>
  130.67 +    </attribute>
  130.68 +    <attribute>
  130.69 +        <name>chartid</name>
  130.70 +        <required>true</required>
  130.71 +        <rtexprvalue>true</rtexprvalue>
  130.72 +        <description>
  130.73 +        	The id of the chart to render.
  130.74 +        </description>
  130.75 +    </attribute>
  130.76 +    <attribute>
  130.77 +        <name>width</name>
  130.78 +        <required>true</required>
  130.79 +        <rtexprvalue>true</rtexprvalue>
  130.80 +        <description>
  130.81 +            Width of the rendered chart image in pixel.
  130.82 +        </description>
  130.83 +    </attribute>
  130.84 +    <attribute>
  130.85 +        <name>height</name>
  130.86 +        <required>true</required>
  130.87 +        <rtexprvalue>true</rtexprvalue>
  130.88 +        <description>
  130.89 +            Height of the rendered chart image in pixel.
  130.90 +        </description>
  130.91 +    </attribute>
  130.92 +    <attribute>
  130.93 +        <name>mime</name>
  130.94 +        <required>false</required>
  130.95 +        <rtexprvalue>true</rtexprvalue>
  130.96 +        <description>
  130.97 +            The MIME type of the image. Currently image/png (default) and image/svg are supported.
  130.98 +            @default image/png
  130.99 +        </description>
 130.100 +    </attribute>
 130.101 +    <attribute>
 130.102 +        <name>alt</name>
 130.103 +        <required>false</required>
 130.104 +        <rtexprvalue>true</rtexprvalue>
 130.105 +        <description>
 130.106 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
 130.107 +        </description>
 130.108 +    </attribute>
 130.109 +        <attribute>
 130.110 +        <name>timeout</name>
 130.111 +        <required>false</required>
 130.112 +        <rtexprvalue>true</rtexprvalue>
 130.113 +        <description>
 130.114 +           Sets the timeout value used in the LongTermSessionStorage obj. Value is in seconds.
 130.115 +        </description>
 130.116 +    </attribute>
 130.117 +    <attribute>
 130.118 +        <name>hspace</name>
 130.119 +        <required>false</required>
 130.120 +        <rtexprvalue>true</rtexprvalue>
 130.121 +        <description>
 130.122 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
 130.123 +        </description>
 130.124 +    </attribute>
 130.125 +    <attribute>
 130.126 +        <name>vspace</name>
 130.127 +        <required>false</required>
 130.128 +        <rtexprvalue>true</rtexprvalue>
 130.129 +        <description>
 130.130 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
 130.131 +        </description>
 130.132 +    </attribute>
 130.133 +    <attribute>
 130.134 +        <name>align</name>
 130.135 +        <required>false</required>
 130.136 +        <rtexprvalue>true</rtexprvalue>
 130.137 +        <description>
 130.138 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
 130.139 +        </description>
 130.140 +    </attribute>
 130.141 +    <attribute>
 130.142 +        <name>border</name>
 130.143 +        <required>false</required>
 130.144 +        <rtexprvalue>true</rtexprvalue>
 130.145 +        <description>
 130.146 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
 130.147 +        </description>
 130.148 +    </attribute>
 130.149 +    <attribute>
 130.150 +        <name>ismap</name>
 130.151 +        <required>false</required>
 130.152 +        <rtexprvalue>true</rtexprvalue>
 130.153 +        <description>
 130.154 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
 130.155 +        </description>
 130.156 +    </attribute>
 130.157 +    <attribute>
 130.158 +        <name>longdesc</name>
 130.159 +        <required>false</required>
 130.160 +        <rtexprvalue>true</rtexprvalue>
 130.161 +        <description>
 130.162 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
 130.163 +        </description>
 130.164 +    </attribute>
 130.165 +    <attribute>
 130.166 +        <name>usemap</name>
 130.167 +        <required>false</required>
 130.168 +        <rtexprvalue>true</rtexprvalue>
 130.169 +        <description>
 130.170 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
 130.171 +        </description>
 130.172 +    </attribute>
 130.173 +    <attribute>
 130.174 +        <name>class</name>
 130.175 +        <required>false</required>
 130.176 +        <rtexprvalue>true</rtexprvalue>
 130.177 +        <description>
 130.178 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
 130.179 +        </description>
 130.180 +    </attribute>
 130.181 +    <attribute>
 130.182 +        <name>dir</name>
 130.183 +        <required>false</required>
 130.184 +        <rtexprvalue>true</rtexprvalue>
 130.185 +        <description>
 130.186 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
 130.187 +        </description>
 130.188 +    </attribute>
 130.189 +    <attribute>
 130.190 +        <name>lang</name>
 130.191 +        <required>false</required>
 130.192 +        <rtexprvalue>true</rtexprvalue>
 130.193 +        <description>
 130.194 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
 130.195 +        </description>
 130.196 +    </attribute>
 130.197 +    <attribute>
 130.198 +        <name>onclick</name>
 130.199 +        <required>false</required>
 130.200 +        <rtexprvalue>true</rtexprvalue>
 130.201 +        <description>
 130.202 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
 130.203 +        </description>
 130.204 +    </attribute>
 130.205 +    <attribute>
 130.206 +        <name>ondbclick</name>
 130.207 +        <required>false</required>
 130.208 +        <rtexprvalue>true</rtexprvalue>
 130.209 +        <description>
 130.210 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
 130.211 +        </description>
 130.212 +    </attribute>
 130.213 +    <attribute>
 130.214 +        <name>onkeydown</name>
 130.215 +        <required>false</required>
 130.216 +        <rtexprvalue>true</rtexprvalue>
 130.217 +        <description>
 130.218 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
 130.219 +        </description>
 130.220 +    </attribute>
 130.221 +    <attribute>
 130.222 +        <name>onkeypress</name>
 130.223 +        <required>false</required>
 130.224 +        <rtexprvalue>true</rtexprvalue>
 130.225 +        <description>
 130.226 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
 130.227 +        </description>
 130.228 +    </attribute>
 130.229 +    <attribute>
 130.230 +        <name>onkeyup</name>
 130.231 +        <required>false</required>
 130.232 +        <rtexprvalue>true</rtexprvalue>
 130.233 +        <description>
 130.234 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
 130.235 +        </description>
 130.236 +    </attribute>
 130.237 +    <attribute>
 130.238 +        <name>onmousedown</name>
 130.239 +        <required>false</required>
 130.240 +        <rtexprvalue>true</rtexprvalue>
 130.241 +        <description>
 130.242 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
 130.243 +        </description>
 130.244 +    </attribute>
 130.245 +    <attribute>
 130.246 +        <name>onmousemove</name>
 130.247 +        <required>false</required>
 130.248 +        <rtexprvalue>true</rtexprvalue>
 130.249 +        <description>
 130.250 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
 130.251 +        </description>
 130.252 +    </attribute>
 130.253 +    <attribute>
 130.254 +        <name>onmouseout</name>
 130.255 +        <required>false</required>
 130.256 +        <rtexprvalue>true</rtexprvalue>
 130.257 +        <description>
 130.258 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
 130.259 +        </description>
 130.260 +    </attribute>
 130.261 +    <attribute>
 130.262 +        <name>onmouseover</name>
 130.263 +        <required>false</required>
 130.264 +        <rtexprvalue>true</rtexprvalue>
 130.265 +        <description>
 130.266 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
 130.267 +        </description>
 130.268 +    </attribute>
 130.269 +    <attribute>
 130.270 +        <name>onmouseup</name>
 130.271 +        <required>false</required>
 130.272 +        <rtexprvalue>true</rtexprvalue>
 130.273 +        <description>
 130.274 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
 130.275 +        </description>
 130.276 +    </attribute>
 130.277 +    <attribute>
 130.278 +        <name>style</name>
 130.279 +        <required>false</required>
 130.280 +        <rtexprvalue>true</rtexprvalue>
 130.281 +        <description>
 130.282 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
 130.283 +        </description>
 130.284 +    </attribute>
 130.285 +    <attribute>
 130.286 +        <name>htmltitle</name>
 130.287 +        <required>false</required>
 130.288 +        <rtexprvalue>true</rtexprvalue>
 130.289 +        <description>
 130.290 +           Corresponds to appropriate HMTL &lt;img&gt; title attribute.
 130.291 +        </description>
 130.292 +    </attribute>
 130.293 +    <attribute>
 130.294 +        <name>forceSessionId</name>
 130.295 +        <required>false</required>
 130.296 +        <rtexprvalue>true</rtexprvalue>
 130.297 +        <description>
 130.298 +           Add JSession id.
 130.299 +        </description>
 130.300 +    </attribute>
 130.301 +    <attribute>
 130.302 +        <name>removeAfterRender</name>
 130.303 +        <required>false</required>
 130.304 +        <rtexprvalue>true</rtexprvalue>
 130.305 +        <description>
 130.306 +           Remove image after rendering (defaults to false).
 130.307 +        </description>
 130.308 +    </attribute>
 130.309 +</tag>
 130.310 +<tag>
 130.311 +    <name>imgurl</name>
 130.312 +    <tag-class>de.laures.cewolf.taglib.tags.ChartImgURLTag</tag-class>
 130.313 +    <tei-class>de.laures.cewolf.taglib.tags.ChartImgURLTagEI</tei-class>
 130.314 +    <description>
 130.315 +    	This tag can be used as the src attribute of a HTML img tag. E.g.: 
 130.316 +    	&lt;img src='&lt;imgurl chartid="foobar" renderer="cewolf" width="100" height="100"/&gt;'&gt;
 130.317 +    	If the var attribute is used the URL is exposed as a page attribute of type String.
 130.318 +        @extends img
 130.319 +    </description>
 130.320 +    <attribute>
 130.321 +        <name>var</name>
 130.322 +        <required>false</required>
 130.323 +        <rtexprvalue>true</rtexprvalue>
 130.324 +        <description>
 130.325 +            Name of the page scope attribute to hold the URL. If not specified the URL is printed to the page outstream.
 130.326 +        </description>
 130.327 +    </attribute>
 130.328 +    <attribute>
 130.329 +        <name>renderer</name>
 130.330 +        <required>true</required>
 130.331 +        <rtexprvalue>true</rtexprvalue>
 130.332 +        <description>
 130.333 +            Path to rendering servlet. Any path that starts with a '/' is assumed to refer to a resource relative to web application root. Otherwise, the path is assumed to refer to resource relative to the current page directory.
 130.334 +        </description>
 130.335 +    </attribute>
 130.336 +    <attribute>
 130.337 +        <name>chartid</name>
 130.338 +        <required>true</required>
 130.339 +        <rtexprvalue>true</rtexprvalue>
 130.340 +        <description>
 130.341 +        	The id of the chart to render.
 130.342 +        </description>
 130.343 +    </attribute>
 130.344 +    <attribute>
 130.345 +        <name>width</name>
 130.346 +        <required>true</required>
 130.347 +        <rtexprvalue>true</rtexprvalue>
 130.348 +        <description>
 130.349 +            Width of the rendered chart image in pixel.
 130.350 +        </description>
 130.351 +    </attribute>
 130.352 +    <attribute>
 130.353 +        <name>height</name>
 130.354 +        <required>true</required>
 130.355 +        <rtexprvalue>true</rtexprvalue>
 130.356 +        <description>
 130.357 +            Height of the rendered chart image in pixel.
 130.358 +        </description>
 130.359 +    </attribute>
 130.360 +    <attribute>
 130.361 +        <name>mime</name>
 130.362 +        <required>false</required>
 130.363 +        <rtexprvalue>true</rtexprvalue>
 130.364 +        <description>
 130.365 +            The MIME type of the image. Currently image/png (default) and image/svg are supported.
 130.366 +            @default image/png
 130.367 +        </description>
 130.368 +    </attribute>
 130.369 +</tag>
 130.370 +<tag>
 130.371 +    <name>chart</name>
 130.372 +    <tag-class>de.laures.cewolf.taglib.tags.SimpleChartTag</tag-class>
 130.373 +    <description>
 130.374 +        Root tag of a chart description.
 130.375 +        @root
 130.376 +        @required-child data
 130.377 +        @optional-child chartpostprocessor
 130.378 +    </description>
 130.379 +    <attribute>
 130.380 +        <name>id</name>
 130.381 +        <required>true</required>
 130.382 +        <rtexprvalue>true</rtexprvalue>
 130.383 +        <description>
 130.384 +            ID under which the chart description bean will be stored in the
 130.385 +            page to be found by the img tag. Beware of using an
 130.386 +            ID which is not yet used for other beans in the page to avoid
 130.387 +            compile errors.
 130.388 +        </description>
 130.389 +    </attribute>
 130.390 +    <attribute>
 130.391 +        <name>type</name>
 130.392 +        <required>true</required>
 130.393 +        <rtexprvalue>true</rtexprvalue>
 130.394 +        <description>
 130.395 +            Type of the chart. One of area, areaxy, horizontalbar, horizontalbar3d,
 130.396 +            line, pie, scatter, stackedarea, stackedhorizontalbar, stackedverticalbar, 
 130.397 +            stackedverticalbar3d, timeseries, verticalbar, verticalbar3d, xy,
 130.398 +            candlestick, highlow, gantt, wind, signal, verticalxybar, pie3d, meter
 130.399 +        </description>
 130.400 +    </attribute>
 130.401 +    <attribute>
 130.402 +        <name>title</name>
 130.403 +        <required>false</required>
 130.404 +        <rtexprvalue>true</rtexprvalue>
 130.405 +        <description>
 130.406 +            Title of the chart which is displayed on the chart panel
 130.407 +            above the plot pane.
 130.408 +        </description>
 130.409 +    </attribute>
 130.410 +    <attribute>
 130.411 +        <name>xaxislabel</name>
 130.412 +        <required>false</required>
 130.413 +        <rtexprvalue>true</rtexprvalue>
 130.414 +        <description>
 130.415 +            Title of the chart's x-axis. This attributes is
 130.416 +            ignored if the type attribute of the parent chart tag is one
 130.417 +            of pie3d or pie.
 130.418 +        </description>
 130.419 +    </attribute>
 130.420 +    <attribute>
 130.421 +        <name>yaxislabel</name>
 130.422 +        <required>false</required>
 130.423 +        <rtexprvalue>true</rtexprvalue>
 130.424 +        <description>
 130.425 +            Title of the chart's y-axis. This attributes is
 130.426 +            ignored if the type attribute of the parent chart tag is one
 130.427 +            of pie3d or pie.
 130.428 +        </description>
 130.429 +    </attribute>
 130.430 +    <attribute>
 130.431 +        <name>background</name>
 130.432 +        <required>false</required>
 130.433 +        <rtexprvalue>true</rtexprvalue>
 130.434 +        <description>
 130.435 +            Background image of the chart panel. The value of this 
 130.436 +            attribute is the filename of a graphics file relative to the web
 130.437 +            application's root directory (e.g. /WEB-INF/img/bg.jpg).
 130.438 +            The image must be loadable by the default java.awt.Toolkit of the
 130.439 +            servlet container's JVM.
 130.440 +        </description>
 130.441 +    </attribute>
 130.442 +    <attribute>
 130.443 +        <name>backgroundimagealpha</name>
 130.444 +        <required>false</required>
 130.445 +        <rtexprvalue>true</rtexprvalue>
 130.446 +        <type>java.lang.Float</type>
 130.447 +        <description>
 130.448 +            Chart's backgound alpha blending value as a float. Value ranges
 130.449 +            from 0.0 to 1.0.
 130.450 +            @default 0.0
 130.451 +            @overrides /chart[backgroundimagealpha]
 130.452 +        </description>
 130.453 +    </attribute>
 130.454 +    <attribute>
 130.455 +        <name>antialias</name>
 130.456 +        <required>false</required>
 130.457 +        <rtexprvalue>true</rtexprvalue>
 130.458 +        <description>
 130.459 +            Antialiased rendering of the chart.
 130.460 +            @default true
 130.461 +            @overrides /chart[backgroundimagealpha]
 130.462 +        </description>
 130.463 +    </attribute>
 130.464 +    <attribute>
 130.465 +        <name>showlegend</name>
 130.466 +        <required>false</required>
 130.467 +        <rtexprvalue>true</rtexprvalue>
 130.468 +        <description>
 130.469 +           Boolean value to switch on or off the legend display inside of this panel.
 130.470 +           @default true
 130.471 +        </description>
 130.472 +    </attribute>
 130.473 +    <attribute>
 130.474 +        <name>legendanchor</name>
 130.475 +        <required>false</required>
 130.476 +        <rtexprvalue>true</rtexprvalue>
 130.477 +        <description>
 130.478 +            Sets the anchor of the legend inside of the panel. Possible values
 130.479 +            are 'north', 'south', 'west', 'east'.
 130.480 +            Ignored if showlegned is 'false'.
 130.481 +            @default 'south'
 130.482 +        </description>
 130.483 +    </attribute>
 130.484 +</tag>
 130.485 +<tag>
 130.486 +    <name>overlaidchart</name>
 130.487 +    <tag-class>de.laures.cewolf.taglib.tags.OverlaidChartTag</tag-class>
 130.488 +    <description>
 130.489 +        Root tag of a overlaid-chart description.
 130.490 +        @root
 130.491 +        @required-child data
 130.492 +        @optional-child chartpostprocessor
 130.493 +    </description>
 130.494 +    <attribute>
 130.495 +        <name>id</name>
 130.496 +        <required>true</required>
 130.497 +        <rtexprvalue>true</rtexprvalue>
 130.498 +        <description>
 130.499 +            ID under which the chart description bean will be stored in the
 130.500 +            page to be found by the img tag. Beware of using an
 130.501 +            ID which is not yet used for other beans in the page to avoid
 130.502 +            compile errors.
 130.503 +        </description>
 130.504 +    </attribute>
 130.505 +    <attribute>
 130.506 +        <name>type</name>
 130.507 +        <required>true</required>
 130.508 +        <rtexprvalue>true</rtexprvalue>
 130.509 +        <description>
 130.510 +            Type of the chart. In this version only overlaidxy is supported.
 130.511 +        </description>
 130.512 +    </attribute>
 130.513 +    <attribute>
 130.514 +        <name>title</name>
 130.515 +        <required>false</required>
 130.516 +        <rtexprvalue>true</rtexprvalue>
 130.517 +        <description>
 130.518 +            Title of the chart which is displayed on the chart panel
 130.519 +            above the plot pane.
 130.520 +        </description>
 130.521 +    </attribute>
 130.522 +    <attribute>
 130.523 +        <name>xaxistype</name>
 130.524 +        <required>true</required>
 130.525 +        <rtexprvalue>true</rtexprvalue>
 130.526 +        <description>
 130.527 +        	Type of the domain axis. Possible values: date, number
 130.528 +        </description>
 130.529 +    </attribute>
 130.530 +    <attribute>
 130.531 +        <name>xaxislabel</name>
 130.532 +        <required>false</required>
 130.533 +        <rtexprvalue>true</rtexprvalue>
 130.534 +        <description>
 130.535 +            Title of the chart's x-axis. This attributes is
 130.536 +            ignored if the type attribute of the parent chart tag is one
 130.537 +            of pie3d or pie.
 130.538 +        </description>
 130.539 +    </attribute>
 130.540 +    <attribute>
 130.541 +        <name>yaxistype</name>
 130.542 +        <required>false</required>
 130.543 +        <rtexprvalue>true</rtexprvalue>
 130.544 +        <description>
 130.545 +        	Type of the range axis. Possible values: date, number
 130.546 +        </description>
 130.547 +    </attribute>
 130.548 +    <attribute>
 130.549 +        <name>yaxislabel</name>
 130.550 +        <required>false</required>
 130.551 +        <rtexprvalue>true</rtexprvalue>
 130.552 +        <description>
 130.553 +            Title of the chart's y-axis. This attributes is
 130.554 +            ignored if the type attribute of the parent chart tag is one
 130.555 +            of pie3d or pie.
 130.556 +        </description>
 130.557 +    </attribute>
 130.558 +    <attribute>
 130.559 +        <name>background</name>
 130.560 +        <required>false</required>
 130.561 +        <rtexprvalue>true</rtexprvalue>
 130.562 +        <description>
 130.563 +            Background image of the chart panel. The value of this 
 130.564 +            attribute is the filename of a graphics file relative to the web
 130.565 +            application's root directory (e.g. /WEB-INF/img/bg.jpg).
 130.566 +            The image must be loadable by the default java.awt.Toolkit of the
 130.567 +            servlet container's JVM.
 130.568 +        </description>
 130.569 +    </attribute>
 130.570 +    <attribute>
 130.571 +        <name>backgroundimagealpha</name>
 130.572 +        <required>false</required>
 130.573 +        <rtexprvalue>true</rtexprvalue>
 130.574 +        <type>java.lang.Float</type>
 130.575 +        <description>
 130.576 +            Chart's backgound alpha blending value as a float. Value ranges
 130.577 +            from 0.0 to 1.0.
 130.578 +            @default 0.0
 130.579 +            @overrides /chart[backgroundimagealpha]
 130.580 +        </description>
 130.581 +    </attribute>
 130.582 +    <attribute>
 130.583 +        <name>antialias</name>
 130.584 +        <required>false</required>
 130.585 +        <rtexprvalue>true</rtexprvalue>
 130.586 +        <description>
 130.587 +            Antialiased rendering of the chart.
 130.588 +            @default true
 130.589 +            @overrides /chart[backgroundimagealpha]
 130.590 +        </description>
 130.591 +    </attribute>
 130.592 +    <attribute>
 130.593 +        <name>showlegend</name>
 130.594 +        <required>false</required>
 130.595 +        <rtexprvalue>true</rtexprvalue>
 130.596 +        <description>
 130.597 +           Boolean value to switch on or off the legend display inside of this panel.
 130.598 +           @default true
 130.599 +        </description>
 130.600 +    </attribute>
 130.601 +    <attribute>
 130.602 +        <name>legendanchor</name>
 130.603 +        <required>false</required>
 130.604 +        <rtexprvalue>true</rtexprvalue>
 130.605 +        <description>
 130.606 +            Sets the anchor of the legend inside of the panel. Possible values
 130.607 +            are 'north', 'south', 'west', 'east'.
 130.608 +            Ignored if showlegned is 'false'.
 130.609 +            @default 'south'
 130.610 +        </description>
 130.611 +    </attribute>
 130.612 +</tag>
 130.613 +<tag>
 130.614 +    <name>combinedchart</name>
 130.615 +    <tag-class>de.laures.cewolf.taglib.tags.CombinedChartTag</tag-class>
 130.616 +    <description>
 130.617 +        Root tag of a combined-chart description.
 130.618 +        @root
 130.619 +        @required-child plot
 130.620 +        @optional-child chartpostprocessor
 130.621 +    </description>
 130.622 +    <attribute>
 130.623 +        <name>id</name>
 130.624 +        <required>true</required>
 130.625 +        <rtexprvalue>true</rtexprvalue>
 130.626 +        <description>
 130.627 +            ID under which the chart description bean will be stored in the
 130.628 +            page to be found by the img tag. Beware of using an
 130.629 +            ID which is not yet used for other beans in the page to avoid
 130.630 +            compile errors.
 130.631 +        </description>
 130.632 +    </attribute>
 130.633 +    <attribute>
 130.634 +        <name>type</name>
 130.635 +        <required>true</required>
 130.636 +        <rtexprvalue>true</rtexprvalue>
 130.637 +        <description>
 130.638 +            Type of the chart. One of combinedxy
 130.639 +        </description>
 130.640 +    </attribute>
 130.641 +    <attribute>
 130.642 +        <name>layout</name>
 130.643 +        <required>true</required>
 130.644 +        <rtexprvalue>true</rtexprvalue>
 130.645 +        <description>
 130.646 +            Layout of the chart. Either vertical or horizontal
 130.647 +        </description>
 130.648 +    </attribute>
 130.649 +    <attribute>
 130.650 +        <name>title</name>
 130.651 +        <required>false</required>
 130.652 +        <rtexprvalue>true</rtexprvalue>
 130.653 +        <description>
 130.654 +            Title of the chart which is displayed on the chart panel
 130.655 +            above the plot pane.
 130.656 +        </description>
 130.657 +    </attribute>
 130.658 +    <attribute>
 130.659 +        <name>xaxislabel</name>
 130.660 +        <required>false</required>
 130.661 +        <rtexprvalue>true</rtexprvalue>
 130.662 +        <description>
 130.663 +            Title of the chart's x-axis. This attributes is
 130.664 +            ignored if the type attribute of the parent chart tag is one
 130.665 +            of pie3d or pie.
 130.666 +        </description>
 130.667 +    </attribute>
 130.668 +    <attribute>
 130.669 +        <name>yaxislabel</name>
 130.670 +        <required>false</required>
 130.671 +        <rtexprvalue>true</rtexprvalue>
 130.672 +        <description>
 130.673 +            Title of the chart's y-axis. This attributes is
 130.674 +            ignored if the type attribute of the parent chart tag is one
 130.675 +            of pie3d or pie.
 130.676 +        </description>
 130.677 +    </attribute>
 130.678 +    <attribute>
 130.679 +        <name>background</name>
 130.680 +        <required>false</required>
 130.681 +        <rtexprvalue>true</rtexprvalue>
 130.682 +        <description>
 130.683 +            Background image of the chart panel. The value of this
 130.684 +            attribute is the filename of a graphics file relative to the web
 130.685 +            application's root directory (e.g. /WEB-INF/img/bg.jpg).
 130.686 +            The image must be loadable by the default java.awt.Toolkit of the
 130.687 +            servlet container's JVM.
 130.688 +        </description>
 130.689 +    </attribute>
 130.690 +    <attribute>
 130.691 +        <name>backgroundimagealpha</name>
 130.692 +        <required>false</required>
 130.693 +        <rtexprvalue>true</rtexprvalue>
 130.694 +        <type>java.lang.Float</type>
 130.695 +        <description>
 130.696 +            Chart's backgound alpha blending value as a float. Value ranges
 130.697 +            from 0.0 to 1.0.
 130.698 +            @default 0.0
 130.699 +            @overrides /chart[backgroundimagealpha]
 130.700 +        </description>
 130.701 +    </attribute>
 130.702 +    <attribute>
 130.703 +        <name>antialias</name>
 130.704 +        <required>false</required>
 130.705 +        <rtexprvalue>true</rtexprvalue>
 130.706 +        <description>
 130.707 +            Antialiased rendering of the chart.
 130.708 +            @default true
 130.709 +            @overrides /chart[backgroundimagealpha]
 130.710 +        </description>
 130.711 +    </attribute>
 130.712 +    <attribute>
 130.713 +        <name>showlegend</name>
 130.714 +        <required>false</required>
 130.715 +        <rtexprvalue>true</rtexprvalue>
 130.716 +        <description>
 130.717 +           Boolean value to switch on or off the legend display inside of this panel.
 130.718 +           @default true
 130.719 +        </description>
 130.720 +    </attribute>
 130.721 +    <attribute>
 130.722 +        <name>legendanchor</name>
 130.723 +        <required>false</required>
 130.724 +        <rtexprvalue>true</rtexprvalue>
 130.725 +        <description>
 130.726 +            Sets the anchor of the legend inside of the panel. Possible values
 130.727 +            are 'north', 'south', 'west', 'east'.
 130.728 +            Ignored if showlegned is 'false'.
 130.729 +            @default 'south'
 130.730 +        </description>
 130.731 +    </attribute>
 130.732 +</tag>
 130.733 +<tag>
 130.734 +    <name>legend</name>
 130.735 +    <tag-class>de.laures.cewolf.taglib.tags.LegendTag</tag-class>
 130.736 +    <description>
 130.737 +       This tag is used to render the legend of a chart in a separate image.
 130.738 +       It assumes that somewhere else in the JSP a chart tag defines a chart
 130.739 +       with the same ID as this legend tag.
 130.740 +    </description>
 130.741 +    <attribute>
 130.742 +        <name>renderer</name>
 130.743 +        <required>true</required>
 130.744 +        <rtexprvalue>true</rtexprvalue>
 130.745 +        <description>
 130.746 +            Path to rendering servlet relative to web apps root URL
 130.747 +            (e.g. servlet/cewolf).
 130.748 +        </description>
 130.749 +    </attribute>
 130.750 +    <attribute>
 130.751 +        <name>id</name>
 130.752 +        <required>true</required>
 130.753 +        <rtexprvalue>true</rtexprvalue>
 130.754 +        <description>
 130.755 +            ID under which the chart description bean will be stored in the
 130.756 +            session to be found by the rendering servlet. Beware of using an
 130.757 +            ID which is not yet used for other beans in the session to avoid
 130.758 +            overriding.
 130.759 +        </description>
 130.760 +    </attribute>
 130.761 +    <attribute>
 130.762 +        <name>timeout</name>
 130.763 +        <required>false</required>
 130.764 +        <rtexprvalue>true</rtexprvalue>
 130.765 +        <description>
 130.766 +           Sets the timeout value used in the LongTermSessionStorage obj. Value is in seconds.
 130.767 +        </description>
 130.768 +    </attribute>
 130.769 +    <attribute>
 130.770 +        <name>width</name>
 130.771 +        <required>false</required>
 130.772 +        <rtexprvalue>true</rtexprvalue>
 130.773 +        <description>
 130.774 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
 130.775 +        </description>
 130.776 +    </attribute>
 130.777 +    <attribute>
 130.778 +        <name>height</name>
 130.779 +        <required>false</required>
 130.780 +        <rtexprvalue>true</rtexprvalue>
 130.781 +        <description>
 130.782 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
 130.783 +        </description>
 130.784 +    </attribute>
 130.785 +    <attribute>
 130.786 +        <name>mime</name>
 130.787 +        <required>false</required>
 130.788 +        <rtexprvalue>true</rtexprvalue>
 130.789 +        <description>
 130.790 +            The MIME type of the image. Currently image/png (default) and image/svg are supported.
 130.791 +            @default image/png
 130.792 +        </description>
 130.793 +    </attribute>
 130.794 +    <attribute>
 130.795 +        <name>alt</name>
 130.796 +        <required>false</required>
 130.797 +        <rtexprvalue>true</rtexprvalue>
 130.798 +        <description>
 130.799 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
 130.800 +        </description>
 130.801 +    </attribute>
 130.802 +    <attribute>
 130.803 +        <name>hspace</name>
 130.804 +        <required>false</required>
 130.805 +        <rtexprvalue>true</rtexprvalue>
 130.806 +        <description>
 130.807 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
 130.808 +        </description>
 130.809 +    </attribute>
 130.810 +    <attribute>
 130.811 +        <name>vspace</name>
 130.812 +        <required>false</required>
 130.813 +        <rtexprvalue>true</rtexprvalue>
 130.814 +        <description>
 130.815 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
 130.816 +        </description>
 130.817 +    </attribute>
 130.818 +    <attribute>
 130.819 +        <name>align</name>
 130.820 +        <required>false</required>
 130.821 +        <rtexprvalue>true</rtexprvalue>
 130.822 +        <description>
 130.823 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
 130.824 +        </description>
 130.825 +    </attribute>
 130.826 +    <attribute>
 130.827 +        <name>border</name>
 130.828 +        <required>false</required>
 130.829 +        <rtexprvalue>true</rtexprvalue>
 130.830 +        <description>
 130.831 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
 130.832 +        </description>
 130.833 +    </attribute>
 130.834 +    <attribute>
 130.835 +        <name>ismap</name>
 130.836 +        <required>false</required>
 130.837 +        <rtexprvalue>true</rtexprvalue>
 130.838 +        <description>
 130.839 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
 130.840 +        </description>
 130.841 +    </attribute>
 130.842 +    <attribute>
 130.843 +        <name>longdesc</name>
 130.844 +        <required>false</required>
 130.845 +        <rtexprvalue>true</rtexprvalue>
 130.846 +        <description>
 130.847 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
 130.848 +        </description>
 130.849 +    </attribute>
 130.850 +    <attribute>
 130.851 +        <name>usemap</name>
 130.852 +        <required>false</required>
 130.853 +        <rtexprvalue>true</rtexprvalue>
 130.854 +        <description>
 130.855 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
 130.856 +        </description>
 130.857 +    </attribute>
 130.858 +    <attribute>
 130.859 +        <name>class</name>
 130.860 +        <required>false</required>
 130.861 +        <rtexprvalue>true</rtexprvalue>
 130.862 +        <description>
 130.863 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
 130.864 +        </description>
 130.865 +    </attribute>
 130.866 +    <attribute>
 130.867 +        <name>dir</name>
 130.868 +        <required>false</required>
 130.869 +        <rtexprvalue>true</rtexprvalue>
 130.870 +        <description>
 130.871 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
 130.872 +        </description>
 130.873 +    </attribute>
 130.874 +    <attribute>
 130.875 +        <name>lang</name>
 130.876 +        <required>false</required>
 130.877 +        <rtexprvalue>true</rtexprvalue>
 130.878 +        <description>
 130.879 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
 130.880 +        </description>
 130.881 +    </attribute>
 130.882 +    <attribute>
 130.883 +        <name>onclick</name>
 130.884 +        <required>false</required>
 130.885 +        <rtexprvalue>true</rtexprvalue>
 130.886 +        <description>
 130.887 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
 130.888 +        </description>
 130.889 +    </attribute>
 130.890 +    <attribute>
 130.891 +        <name>ondbclick</name>
 130.892 +        <required>false</required>
 130.893 +        <rtexprvalue>true</rtexprvalue>
 130.894 +        <description>
 130.895 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
 130.896 +        </description>
 130.897 +    </attribute>
 130.898 +    <attribute>
 130.899 +        <name>onkeydown</name>
 130.900 +        <required>false</required>
 130.901 +        <rtexprvalue>true</rtexprvalue>
 130.902 +        <description>
 130.903 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
 130.904 +        </description>
 130.905 +    </attribute>
 130.906 +    <attribute>
 130.907 +        <name>onkeypress</name>
 130.908 +        <required>false</required>
 130.909 +        <rtexprvalue>true</rtexprvalue>
 130.910 +        <description>
 130.911 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
 130.912 +        </description>
 130.913 +    </attribute>
 130.914 +    <attribute>
 130.915 +        <name>onkeyup</name>
 130.916 +        <required>false</required>
 130.917 +        <rtexprvalue>true</rtexprvalue>
 130.918 +        <description>
 130.919 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
 130.920 +        </description>
 130.921 +    </attribute>
 130.922 +    <attribute>
 130.923 +        <name>onmousedown</name>
 130.924 +        <required>false</required>
 130.925 +        <rtexprvalue>true</rtexprvalue>
 130.926 +        <description>
 130.927 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
 130.928 +        </description>
 130.929 +    </attribute>
 130.930 +    <attribute>
 130.931 +        <name>onmousemove</name>
 130.932 +        <required>false</required>
 130.933 +        <rtexprvalue>true</rtexprvalue>
 130.934 +        <description>
 130.935 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
 130.936 +        </description>
 130.937 +    </attribute>
 130.938 +    <attribute>
 130.939 +        <name>onmouseout</name>
 130.940 +        <required>false</required>
 130.941 +        <rtexprvalue>true</rtexprvalue>
 130.942 +        <description>
 130.943 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
 130.944 +        </description>
 130.945 +    </attribute>
 130.946 +    <attribute>
 130.947 +        <name>onmouseover</name>
 130.948 +        <required>false</required>
 130.949 +        <rtexprvalue>true</rtexprvalue>
 130.950 +        <description>
 130.951 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
 130.952 +        </description>
 130.953 +    </attribute>
 130.954 +    <attribute>
 130.955 +        <name>onmouseup</name>
 130.956 +        <required>false</required>
 130.957 +        <rtexprvalue>true</rtexprvalue>
 130.958 +        <description>
 130.959 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
 130.960 +        </description>
 130.961 +    </attribute>
 130.962 +    <attribute>
 130.963 +        <name>style</name>
 130.964 +        <required>false</required>
 130.965 +        <rtexprvalue>true</rtexprvalue>
 130.966 +        <description>
 130.967 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
 130.968 +        </description>
 130.969 +    </attribute>
 130.970 +    <attribute>
 130.971 +        <name>htmltitle</name>
 130.972 +        <required>false</required>
 130.973 +        <rtexprvalue>true</rtexprvalue>
 130.974 +        <description>
 130.975 +           Corresponds to appropriate HMTL &lt;img&gt; title attribute.
 130.976 +        </description>
 130.977 +    </attribute>
 130.978 +    <attribute>
 130.979 +        <name>forceSessionId</name>
 130.980 +        <required>false</required>
 130.981 +        <rtexprvalue>true</rtexprvalue>
 130.982 +        <description>
 130.983 +           Add JSession id.
 130.984 +        </description>
 130.985 +    </attribute>    
 130.986 +    <attribute>
 130.987 +        <name>removeAfterRender</name>
 130.988 +        <required>false</required>
 130.989 +        <rtexprvalue>true</rtexprvalue>
 130.990 +        <description>
 130.991 +           Remove image after rendering (defaults to false).
 130.992 +        </description>
 130.993 +    </attribute>
 130.994 +</tag>
 130.995 +<tag>
 130.996 +    <name>data</name>
 130.997 +    <tag-class>de.laures.cewolf.taglib.tags.DataTag</tag-class>
 130.998 +    <description>
 130.999 +        A data tag provides all information needed to retrieve the data which are
130.1000 +        needed by the chart. Current version only supports data provided by a
130.1001 +        DatasetProducer. In future versions there will be tags to provide data
130.1002 +        from a datasource (e.g. via SQL).
130.1003 +        @optional-child producer
130.1004 +    </description>
130.1005 +</tag>
130.1006 +<tag>
130.1007 +    <name>producer</name>
130.1008 +    <tag-class>de.laures.cewolf.taglib.tags.ProducerTag</tag-class>
130.1009 +    <description>
130.1010 +        A data tag provides all information needed to retrieve the data which are
130.1011 +        needed by the chart. Current version only supports data provided by a
130.1012 +        DatasetProducer. In future versions there will be tags to provide data
130.1013 +        from a datasource (e.g. via SQL).
130.1014 +        @optional-child param
130.1015 +    </description>
130.1016 +    <attribute>
130.1017 +        <name>id</name>
130.1018 +        <required>true</required>
130.1019 +        <rtexprvalue>true</rtexprvalue>
130.1020 +        <description>
130.1021 +            ID under which an object of type DatasetProducer can be found in
130.1022 +            pageContext. This object is used to retrieve the dataset of the chart.
130.1023 +        </description>
130.1024 +    </attribute>
130.1025 +    <attribute>
130.1026 +        <name>usecache</name>
130.1027 +        <required>false</required>
130.1028 +        <rtexprvalue>true</rtexprvalue>
130.1029 +        <description>
130.1030 +            Determines if formally produced data should be reused if possible.
130.1031 +            @default true
130.1032 +        </description>
130.1033 +    </attribute>
130.1034 +</tag>
130.1035 +<tag>
130.1036 +    <name>chartpostprocessor</name>
130.1037 +    <tag-class>de.laures.cewolf.taglib.tags.ChartPostProcessorTag</tag-class>
130.1038 +    <description>
130.1039 +        A chart postprocessor tag references an object of type ChartProstProcessor
130.1040 +        which must be defined in pageContext under the provided ID. This object
130.1041 +        is called back after chart generation to post process the chart in any
130.1042 +        manner.
130.1043 +        @optional-child param
130.1044 +    </description>
130.1045 +    <attribute>
130.1046 +        <name>id</name>
130.1047 +        <required>true</required>
130.1048 +        <rtexprvalue>true</rtexprvalue>
130.1049 +        <description>
130.1050 +            ID under which an object of type ChartPostProcessor can be found in
130.1051 +            pageContext. This object is used to postprocess the rendered chart.
130.1052 +        </description>
130.1053 +    </attribute>
130.1054 +</tag>
130.1055 +<tag>
130.1056 +    <name>param</name>
130.1057 +    <tag-class>de.laures.cewolf.taglib.tags.ParamTag</tag-class>
130.1058 +    <description>
130.1059 +        Name/value-pair to paramterize a surrounding tag whose handler must 
130.1060 +        implement the Parameterized interface.
130.1061 +    </description>
130.1062 +    <attribute>
130.1063 +        <name>name</name>
130.1064 +        <required>true</required>
130.1065 +        <rtexprvalue>true</rtexprvalue>
130.1066 +        <description>
130.1067 +            Name of the param
130.1068 +        </description>
130.1069 +    </attribute>
130.1070 +    <attribute>
130.1071 +        <name>value</name>
130.1072 +        <required>true</required>
130.1073 +        <rtexprvalue>true</rtexprvalue>
130.1074 +        <type>java.io.Serializable</type>
130.1075 +        <description>
130.1076 +            Value of the param. Must be serializable.
130.1077 +        </description>
130.1078 +    </attribute>
130.1079 +</tag>
130.1080 +<tag>
130.1081 +    <name>gradientpaint</name>
130.1082 +    <tag-class>de.laures.cewolf.taglib.tags.GradientTag</tag-class>
130.1083 +    <description>
130.1084 +        The gradientpaint tag provides a way to fill a shape with a linear 
130.1085 +        color gradient pattern. If Point P1 with Color C1 and Point P2 with 
130.1086 +        Color C2 are specified in user space, the Color on the P1, P2 
130.1087 +        connecting line is proportionally changed from C1 to C2. Any point 
130.1088 +        P not on the extended P1, P2 connecting line has the color of the 
130.1089 +        point P' that is the perpendicular projection of P on the extended P1,
130.1090 +        P2 connecting line. Points on the extended line outside of the P1,
130.1091 +        P2 segment can be colored in one of two ways.
130.1092 +        &lt;ul&gt;
130.1093 +        &lt;li&gt;If the gradient is cyclic then the points on the extended 
130.1094 +        P1, P2 connecting line cycle back and forth between the colors C1 
130.1095 +        and C2.
130.1096 +        &lt;li&gt;If the gradient is acyclic then points on the P1 side of 
130.1097 +        the segment have the constant Color C1 while points on the P2 side 
130.1098 +        have the constant Color C2.
130.1099 +        The two colors are defined in a nested point tag of this tag. 
130.1100 +        @required-child point
130.1101 +    </description>
130.1102 +    <attribute>
130.1103 +        <name>cyclic</name>
130.1104 +        <required>false</required>
130.1105 +        <rtexprvalue>true</rtexprvalue>
130.1106 +        <description>
130.1107 +            Does the gradient cycle repeatedly between the two colors C1 and C2.
130.1108 +            @default false
130.1109 +        </description>
130.1110 +    </attribute>
130.1111 +</tag>
130.1112 +<tag>
130.1113 +    <name>point</name>
130.1114 +    <tag-class>de.laures.cewolf.taglib.tags.PointTag</tag-class>
130.1115 +    <description>
130.1116 +        Defines a point with x and y coordinates and a color.
130.1117 +        @extends colorpaint
130.1118 +    </description>
130.1119 +    <attribute>
130.1120 +        <name>x</name>
130.1121 +        <required>true</required>
130.1122 +        <rtexprvalue>true</rtexprvalue>
130.1123 +        <description>
130.1124 +            The x coordinate of the point.
130.1125 +        </description>
130.1126 +    </attribute>
130.1127 +    <attribute>
130.1128 +        <name>y</name>
130.1129 +        <required>true</required>
130.1130 +        <rtexprvalue>true</rtexprvalue>
130.1131 +        <description>
130.1132 +            The y coordinate of the point.
130.1133 +        </description>
130.1134 +    </attribute>
130.1135 +    <attribute>
130.1136 +        <name>color</name>
130.1137 +        <required>false</required>
130.1138 +        <rtexprvalue>true</rtexprvalue>
130.1139 +        <description>
130.1140 +            @copy
130.1141 +        </description>
130.1142 +    </attribute>
130.1143 +</tag>
130.1144 +<tag>
130.1145 +    <name>colorpaint</name>
130.1146 +    <tag-class>de.laures.cewolf.taglib.tags.ColorTag</tag-class>
130.1147 +    <description>
130.1148 +        Fills the area defined by the parent tag with a color. 
130.1149 +    </description>
130.1150 +    <attribute>
130.1151 +        <name>color</name>
130.1152 +        <required>true</required>
130.1153 +        <rtexprvalue>true</rtexprvalue>
130.1154 +        <description>
130.1155 +            The color to be used to fill the parent tag's area.
130.1156 +            The color definition is compatible with the
130.1157 +            HTML one. E.g. black is '#000000' and red is '#FF0000'. However it
130.1158 +            is possible to append two hex numbers for the alpha channel. Thus
130.1159 +            '#FF000080' is red with alpha blending of 50%.
130.1160 +        </description>
130.1161 +    </attribute>
130.1162 +</tag>
130.1163 +<tag>
130.1164 +    <name>texturepaint</name>
130.1165 +    <tag-class>de.laures.cewolf.taglib.tags.TextureTag</tag-class>
130.1166 +    <description>
130.1167 +        The texturepaint tag provides a way to fill the area of the parent tag
130.1168 +        with a texture that is specified as an image. The texture is anchored to 
130.1169 +        the upper left corner of the parent tags area.
130.1170 +    </description>
130.1171 +    <attribute>
130.1172 +        <name>image</name>
130.1173 +        <required>true</required>
130.1174 +        <rtexprvalue>true</rtexprvalue>
130.1175 +        <description>
130.1176 +            Image fo the texture. The value of this 
130.1177 +            attribute is the filename of a graphics file relative to the web
130.1178 +            application's root directory (e.g. /WEB-INF/img/bg.jpg).
130.1179 +            The image must be loadable by the default java.awt.Toolkit of the
130.1180 +            servlet container's JVM.
130.1181 +        </description>
130.1182 +    </attribute>
130.1183 +    <attribute>
130.1184 +        <name>width</name>
130.1185 +        <required>true</required>
130.1186 +        <rtexprvalue>true</rtexprvalue>
130.1187 +        <description>
130.1188 +            The width of the texture.
130.1189 +        </description>
130.1190 +    </attribute>
130.1191 +    <attribute>
130.1192 +        <name>height</name>
130.1193 +        <required>true</required>
130.1194 +        <rtexprvalue>true</rtexprvalue>
130.1195 +        <description>
130.1196 +            The height of the texture.
130.1197 +        </description>  
130.1198 +    </attribute>
130.1199 +</tag>
130.1200 +<tag>
130.1201 +    <name>map</name>
130.1202 +    <tag-class>de.laures.cewolf.taglib.tags.ChartMapTag</tag-class>
130.1203 +    <description>
130.1204 +      This tag defines an image and tooltip map for the parent img tag.
130.1205 +      @parent img
130.1206 +    </description>
130.1207 +    <attribute>
130.1208 +        <name>linkgeneratorid</name>
130.1209 +        <required>false</required>
130.1210 +        <rtexprvalue>true</rtexprvalue>
130.1211 +        <description>
130.1212 +          The ID of the class which implements the appropriate de.laures.cewolf.LinkGenerator.
130.1213 +        </description>
130.1214 +    </attribute>
130.1215 +    <attribute>
130.1216 +        <name>tooltipgeneratorid</name>
130.1217 +        <required>false</required>
130.1218 +        <rtexprvalue>true</rtexprvalue>
130.1219 +        <description>
130.1220 +          The ID of the class which implements the appropriate com.jrefinery.chart.tooltips.ToolTipGenerator.
130.1221 +        </description>
130.1222 +    </attribute>
130.1223 +	<attribute>
130.1224 +		<name>useJFreeChartLinkGenerator</name>
130.1225 +		<required>false</required>
130.1226 +		<rtexprvalue>true</rtexprvalue>
130.1227 +		<description>If the links provided by the JFreeChart renderer should be used.</description>
130.1228 +	</attribute>
130.1229 +	<attribute>
130.1230 +		<name>useJFreeChartTooltipGenerator</name>
130.1231 +		<required>false</required>
130.1232 +		<rtexprvalue>true</rtexprvalue>
130.1233 +		<description>If the tooltips provided by the JFreeChart renderer should be used.</description>		
130.1234 +	</attribute>	
130.1235 +	
130.1236 +</tag>
130.1237 +</taglib>
130.1238 \ No newline at end of file
   131.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   131.2 +++ b/java/cewolf-1.0/src/main/resources/cewolf.tld	Sat Feb 28 21:31:02 2009 +0100
   131.3 @@ -0,0 +1,1234 @@
   131.4 +<?xml version="1.0" encoding="ISO-8859-1"?>
   131.5 +<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN" "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
   131.6 +
   131.7 +<taglib>
   131.8 +<tlib-version>0.9.3</tlib-version>
   131.9 +<jsp-version>1.2</jsp-version>
  131.10 +<short-name>Cewolf Tag Library</short-name>
  131.11 +<uri>http://cewolf.sourceforge.net/taglib/cewolf.tld</uri>
  131.12 +<display-name>Cewolf Tag Library</display-name>
  131.13 +<description>This tag library is designed to describe charts of all kinds.</description>
  131.14 +<tag>
  131.15 +    <name>plot</name>
  131.16 +    <tag-class>de.laures.cewolf.taglib.tags.PlotTag</tag-class>
  131.17 +    <body-content>JSP</body-content>
  131.18 +    <description>
  131.19 +    	The plot tag is nested inside a complex chart to define a nested or layerd plot instance.
  131.20 +        @required-child data
  131.21 +    </description>
  131.22 +    <attribute>
  131.23 +        <name>type</name>
  131.24 +        <required>true</required>
  131.25 +        <rtexprvalue>true</rtexprvalue>
  131.26 +        <description>
  131.27 +        	The type  of the plot. One of xyarea, xyline, xyshapesandlines ,
  131.28 +			scatter, xyverticalbar, step, candlestick, highlow, signal,
  131.29 +			verticlebar, area, line, shapesandlines
  131.30 +	    </description>
  131.31 +    </attribute>
  131.32 +    <attribute>
  131.33 +        <name>xaxislabel</name>
  131.34 +        <required>false</required>
  131.35 +        <rtexprvalue>true</rtexprvalue>
  131.36 +        <description>
  131.37 +            Title of the plot's x-axis. This attributes is
  131.38 +            only used for horizontally combined charts.
  131.39 +        </description>
  131.40 +    </attribute>
  131.41 +    <attribute>
  131.42 +        <name>yaxislabel</name>
  131.43 +        <required>false</required>
  131.44 +        <rtexprvalue>true</rtexprvalue>
  131.45 +        <description>
  131.46 +            Title of the plot's y-axis. This attributes is
  131.47 +            only used for vertically combined charts.
  131.48 +        </description>
  131.49 +    </attribute>
  131.50 +</tag>
  131.51 +<tag>
  131.52 +    <name>img</name>
  131.53 +    <tag-class>de.laures.cewolf.taglib.tags.ChartImgTag</tag-class>
  131.54 +    <body-content>JSP</body-content>
  131.55 +    <description>
  131.56 +    	This tag is a specialized HTML img tag. It renders the chart
  131.57 +    	which has been specified by a &lt;chart&gt; tag in the same page.
  131.58 +      @optional-child map
  131.59 +    </description>
  131.60 +    <attribute>
  131.61 +        <name>renderer</name>
  131.62 +        <required>true</required>
  131.63 +        <rtexprvalue>true</rtexprvalue>
  131.64 +        <description>
  131.65 +            Path to rendering servlet. Any path that starts with a '/' is assumed to refer to a resource relative to web application root. Otherwise, the path is assumed to refer to resource relative to the current page directory.
  131.66 +        </description>
  131.67 +    </attribute>
  131.68 +    <attribute>
  131.69 +        <name>chartid</name>
  131.70 +        <required>true</required>
  131.71 +        <rtexprvalue>true</rtexprvalue>
  131.72 +        <description>
  131.73 +        	The id of the chart to render.
  131.74 +        </description>
  131.75 +    </attribute>
  131.76 +    <attribute>
  131.77 +        <name>width</name>
  131.78 +        <required>true</required>
  131.79 +        <rtexprvalue>true</rtexprvalue>
  131.80 +        <description>
  131.81 +            Width of the rendered chart image in pixel.
  131.82 +        </description>
  131.83 +    </attribute>
  131.84 +    <attribute>
  131.85 +        <name>height</name>
  131.86 +        <required>true</required>
  131.87 +        <rtexprvalue>true</rtexprvalue>
  131.88 +        <description>
  131.89 +            Height of the rendered chart image in pixel.
  131.90 +        </description>
  131.91 +    </attribute>
  131.92 +    <attribute>
  131.93 +        <name>mime</name>
  131.94 +        <required>false</required>
  131.95 +        <rtexprvalue>true</rtexprvalue>
  131.96 +        <description>
  131.97 +            The MIME type of the image. Currently image/png (default) and image/svg are supported.
  131.98 +            @default image/png
  131.99 +        </description>
 131.100 +    </attribute>
 131.101 +    <attribute>
 131.102 +        <name>alt</name>
 131.103 +        <required>false</required>
 131.104 +        <rtexprvalue>true</rtexprvalue>
 131.105 +        <description>
 131.106 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
 131.107 +        </description>
 131.108 +    </attribute>
 131.109 +        <attribute>
 131.110 +        <name>timeout</name>
 131.111 +        <required>false</required>
 131.112 +        <rtexprvalue>true</rtexprvalue>
 131.113 +        <description>
 131.114 +           Sets the timeout value used in the LongTermSessionStorage obj. Value is in seconds.
 131.115 +        </description>
 131.116 +    </attribute>
 131.117 +    <attribute>
 131.118 +        <name>hspace</name>
 131.119 +        <required>false</required>
 131.120 +        <rtexprvalue>true</rtexprvalue>
 131.121 +        <description>
 131.122 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
 131.123 +        </description>
 131.124 +    </attribute>
 131.125 +    <attribute>
 131.126 +        <name>vspace</name>
 131.127 +        <required>false</required>
 131.128 +        <rtexprvalue>true</rtexprvalue>
 131.129 +        <description>
 131.130 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
 131.131 +        </description>
 131.132 +    </attribute>
 131.133 +    <attribute>
 131.134 +        <name>align</name>
 131.135 +        <required>false</required>
 131.136 +        <rtexprvalue>true</rtexprvalue>
 131.137 +        <description>
 131.138 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
 131.139 +        </description>
 131.140 +    </attribute>
 131.141 +    <attribute>
 131.142 +        <name>border</name>
 131.143 +        <required>false</required>
 131.144 +        <rtexprvalue>true</rtexprvalue>
 131.145 +        <description>
 131.146 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
 131.147 +        </description>
 131.148 +    </attribute>
 131.149 +    <attribute>
 131.150 +        <name>ismap</name>
 131.151 +        <required>false</required>
 131.152 +        <rtexprvalue>true</rtexprvalue>
 131.153 +        <description>
 131.154 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
 131.155 +        </description>
 131.156 +    </attribute>
 131.157 +    <attribute>
 131.158 +        <name>longdesc</name>
 131.159 +        <required>false</required>
 131.160 +        <rtexprvalue>true</rtexprvalue>
 131.161 +        <description>
 131.162 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
 131.163 +        </description>
 131.164 +    </attribute>
 131.165 +    <attribute>
 131.166 +        <name>usemap</name>
 131.167 +        <required>false</required>
 131.168 +        <rtexprvalue>true</rtexprvalue>
 131.169 +        <description>
 131.170 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
 131.171 +        </description>
 131.172 +    </attribute>
 131.173 +    <attribute>
 131.174 +        <name>class</name>
 131.175 +        <required>false</required>
 131.176 +        <rtexprvalue>true</rtexprvalue>
 131.177 +        <description>
 131.178 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
 131.179 +        </description>
 131.180 +    </attribute>
 131.181 +    <attribute>
 131.182 +        <name>dir</name>
 131.183 +        <required>false</required>
 131.184 +        <rtexprvalue>true</rtexprvalue>
 131.185 +        <description>
 131.186 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
 131.187 +        </description>
 131.188 +    </attribute>
 131.189 +    <attribute>
 131.190 +        <name>lang</name>
 131.191 +        <required>false</required>
 131.192 +        <rtexprvalue>true</rtexprvalue>
 131.193 +        <description>
 131.194 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
 131.195 +        </description>
 131.196 +    </attribute>
 131.197 +    <attribute>
 131.198 +        <name>onclick</name>
 131.199 +        <required>false</required>
 131.200 +        <rtexprvalue>true</rtexprvalue>
 131.201 +        <description>
 131.202 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
 131.203 +        </description>
 131.204 +    </attribute>
 131.205 +    <attribute>
 131.206 +        <name>ondbclick</name>
 131.207 +        <required>false</required>
 131.208 +        <rtexprvalue>true</rtexprvalue>
 131.209 +        <description>
 131.210 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
 131.211 +        </description>
 131.212 +    </attribute>
 131.213 +    <attribute>
 131.214 +        <name>onkeydown</name>
 131.215 +        <required>false</required>
 131.216 +        <rtexprvalue>true</rtexprvalue>
 131.217 +        <description>
 131.218 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
 131.219 +        </description>
 131.220 +    </attribute>
 131.221 +    <attribute>
 131.222 +        <name>onkeypress</name>
 131.223 +        <required>false</required>
 131.224 +        <rtexprvalue>true</rtexprvalue>
 131.225 +        <description>
 131.226 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
 131.227 +        </description>
 131.228 +    </attribute>
 131.229 +    <attribute>
 131.230 +        <name>onkeyup</name>
 131.231 +        <required>false</required>
 131.232 +        <rtexprvalue>true</rtexprvalue>
 131.233 +        <description>
 131.234 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
 131.235 +        </description>
 131.236 +    </attribute>
 131.237 +    <attribute>
 131.238 +        <name>onmousedown</name>
 131.239 +        <required>false</required>
 131.240 +        <rtexprvalue>true</rtexprvalue>
 131.241 +        <description>
 131.242 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
 131.243 +        </description>
 131.244 +    </attribute>
 131.245 +    <attribute>
 131.246 +        <name>onmousemove</name>
 131.247 +        <required>false</required>
 131.248 +        <rtexprvalue>true</rtexprvalue>
 131.249 +        <description>
 131.250 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
 131.251 +        </description>
 131.252 +    </attribute>
 131.253 +    <attribute>
 131.254 +        <name>onmouseout</name>
 131.255 +        <required>false</required>
 131.256 +        <rtexprvalue>true</rtexprvalue>
 131.257 +        <description>
 131.258 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
 131.259 +        </description>
 131.260 +    </attribute>
 131.261 +    <attribute>
 131.262 +        <name>onmouseover</name>
 131.263 +        <required>false</required>
 131.264 +        <rtexprvalue>true</rtexprvalue>
 131.265 +        <description>
 131.266 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
 131.267 +        </description>
 131.268 +    </attribute>
 131.269 +    <attribute>
 131.270 +        <name>onmouseup</name>
 131.271 +        <required>false</required>
 131.272 +        <rtexprvalue>true</rtexprvalue>
 131.273 +        <description>
 131.274 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
 131.275 +        </description>
 131.276 +    </attribute>
 131.277 +    <attribute>
 131.278 +        <name>style</name>
 131.279 +        <required>false</required>
 131.280 +        <rtexprvalue>true</rtexprvalue>
 131.281 +        <description>
 131.282 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
 131.283 +        </description>
 131.284 +    </attribute>
 131.285 +    <attribute>
 131.286 +        <name>htmltitle</name>
 131.287 +        <required>false</required>
 131.288 +        <rtexprvalue>true</rtexprvalue>
 131.289 +        <description>
 131.290 +           Corresponds to appropriate HMTL &lt;img&gt; title attribute.
 131.291 +        </description>
 131.292 +    </attribute>
 131.293 +     <attribute>
 131.294 +        <name>forceSessionId</name>
 131.295 +        <required>false</required>
 131.296 +        <rtexprvalue>true</rtexprvalue>
 131.297 +        <description>
 131.298 +           Add JSession id.
 131.299 +        </description>
 131.300 +    </attribute>
 131.301 +    <attribute>
 131.302 +        <name>removeAfterRender</name>
 131.303 +        <required>false</required>
 131.304 +        <rtexprvalue>true</rtexprvalue>
 131.305 +        <description>
 131.306 +           Remove image after rendering (defaults to false).
 131.307 +        </description>
 131.308 +    </attribute>
 131.309 +</tag>
 131.310 +<tag>
 131.311 +    <name>imgurl</name>
 131.312 +    <tag-class>de.laures.cewolf.taglib.tags.ChartImgURLTag</tag-class>
 131.313 +    <tei-class>de.laures.cewolf.taglib.tags.ChartImgURLTagEI</tei-class>
 131.314 +    <description>
 131.315 +    	This tag can be used as the src attribute of a HTML img tag. E.g.: 
 131.316 +    	&lt;img src='&lt;imgurl chartid="foobar" renderer="cewolf" width="100" height="100"/&gt;'&gt;
 131.317 +    	If the var attribute is used the URL is exposed as a page attribute of type String.
 131.318 +        @extends img
 131.319 +    </description>
 131.320 +    <attribute>
 131.321 +        <name>var</name>
 131.322 +        <required>false</required>
 131.323 +        <rtexprvalue>true</rtexprvalue>
 131.324 +        <description>
 131.325 +            Name of the page scope attribute to hold the URL. If not specified the URL is printed to the page outstream.
 131.326 +        </description>
 131.327 +    </attribute>
 131.328 +    <attribute>
 131.329 +        <name>renderer</name>
 131.330 +        <required>true</required>
 131.331 +        <rtexprvalue>true</rtexprvalue>
 131.332 +        <description>
 131.333 +            Path to rendering servlet. Any path that starts with a '/' is assumed to refer to a resource relative to web application root. Otherwise, the path is assumed to refer to resource relative to the current page directory.
 131.334 +        </description>
 131.335 +    </attribute>
 131.336 +    <attribute>
 131.337 +        <name>chartid</name>
 131.338 +        <required>true</required>
 131.339 +        <rtexprvalue>true</rtexprvalue>
 131.340 +        <description>
 131.341 +        	The id of the chart to render.
 131.342 +        </description>
 131.343 +    </attribute>
 131.344 +    <attribute>
 131.345 +        <name>width</name>
 131.346 +        <required>true</required>
 131.347 +        <rtexprvalue>true</rtexprvalue>
 131.348 +        <description>
 131.349 +            Width of the rendered chart image in pixel.
 131.350 +        </description>
 131.351 +    </attribute>
 131.352 +    <attribute>
 131.353 +        <name>height</name>
 131.354 +        <required>true</required>
 131.355 +        <rtexprvalue>true</rtexprvalue>
 131.356 +        <description>
 131.357 +            Height of the rendered chart image in pixel.
 131.358 +        </description>
 131.359 +    </attribute>
 131.360 +    <attribute>
 131.361 +        <name>mime</name>
 131.362 +        <required>false</required>
 131.363 +        <rtexprvalue>true</rtexprvalue>
 131.364 +        <description>
 131.365 +            The MIME type of the image. Currently image/png (default) and image/svg are supported.
 131.366 +            @default image/png
 131.367 +        </description>
 131.368 +    </attribute>
 131.369 +</tag>
 131.370 +<tag>
 131.371 +    <name>chart</name>
 131.372 +    <tag-class>de.laures.cewolf.taglib.tags.SimpleChartTag</tag-class>
 131.373 +    <description>
 131.374 +        Root tag of a chart description.
 131.375 +        @root
 131.376 +        @required-child data
 131.377 +        @optional-child chartpostprocessor
 131.378 +    </description>
 131.379 +    <attribute>
 131.380 +        <name>id</name>
 131.381 +        <required>true</required>
 131.382 +        <rtexprvalue>true</rtexprvalue>
 131.383 +        <description>
 131.384 +            ID under which the chart description bean will be stored in the
 131.385 +            page to be found by the img tag. Beware of using an
 131.386 +            ID which is not yet used for other beans in the page to avoid
 131.387 +            compile errors.
 131.388 +        </description>
 131.389 +    </attribute>
 131.390 +    <attribute>
 131.391 +        <name>type</name>
 131.392 +        <required>true</required>
 131.393 +        <rtexprvalue>true</rtexprvalue>
 131.394 +        <description>
 131.395 +            Type of the chart. One of area, areaxy, horizontalbar, horizontalbar3d,
 131.396 +            line, pie, scatter, stackedarea, stackedhorizontalbar, stackedverticalbar, 
 131.397 +            stackedverticalbar3d, timeseries, verticalbar, verticalbar3d, xy,
 131.398 +            candlestick, highlow, gantt, wind, signal, verticalxybar, pie3d, meter
 131.399 +        </description>
 131.400 +    </attribute>
 131.401 +    <attribute>
 131.402 +        <name>title</name>
 131.403 +        <required>false</required>
 131.404 +        <rtexprvalue>true</rtexprvalue>
 131.405 +        <description>
 131.406 +            Title of the chart which is displayed on the chart panel
 131.407 +            above the plot pane.
 131.408 +        </description>
 131.409 +    </attribute>
 131.410 +    <attribute>
 131.411 +        <name>xaxislabel</name>
 131.412 +        <required>false</required>
 131.413 +        <rtexprvalue>true</rtexprvalue>
 131.414 +        <description>
 131.415 +            Title of the chart's x-axis. This attributes is
 131.416 +            ignored if the type attribute of the parent chart tag is one
 131.417 +            of pie3d or pie.
 131.418 +        </description>
 131.419 +    </attribute>
 131.420 +    <attribute>
 131.421 +        <name>yaxislabel</name>
 131.422 +        <required>false</required>
 131.423 +        <rtexprvalue>true</rtexprvalue>
 131.424 +        <description>
 131.425 +            Title of the chart's y-axis. This attributes is
 131.426 +            ignored if the type attribute of the parent chart tag is one
 131.427 +            of pie3d or pie.
 131.428 +        </description>
 131.429 +    </attribute>
 131.430 +    <attribute>
 131.431 +        <name>background</name>
 131.432 +        <required>false</required>
 131.433 +        <rtexprvalue>true</rtexprvalue>
 131.434 +        <description>
 131.435 +            Background image of the chart panel. The value of this 
 131.436 +            attribute is the filename of a graphics file relative to the web
 131.437 +            application's root directory (e.g. /WEB-INF/img/bg.jpg).
 131.438 +            The image must be loadable by the default java.awt.Toolkit of the
 131.439 +            servlet container's JVM.
 131.440 +        </description>
 131.441 +    </attribute>
 131.442 +    <attribute>
 131.443 +        <name>backgroundimagealpha</name>
 131.444 +        <required>false</required>
 131.445 +        <rtexprvalue>true</rtexprvalue>
 131.446 +        <type>java.lang.Float</type>
 131.447 +        <description>
 131.448 +            Chart's backgound alpha blending value as a float. Value ranges
 131.449 +            from 0.0 to 1.0.
 131.450 +            @default 0.0
 131.451 +            @overrides /chart[backgroundimagealpha]
 131.452 +        </description>
 131.453 +    </attribute>
 131.454 +    <attribute>
 131.455 +        <name>antialias</name>
 131.456 +        <required>false</required>
 131.457 +        <rtexprvalue>true</rtexprvalue>
 131.458 +        <description>
 131.459 +            Antialiased rendering of the chart.
 131.460 +            @default true
 131.461 +            @overrides /chart[backgroundimagealpha]
 131.462 +        </description>
 131.463 +    </attribute>
 131.464 +    <attribute>
 131.465 +        <name>showlegend</name>
 131.466 +        <required>false</required>
 131.467 +        <rtexprvalue>true</rtexprvalue>
 131.468 +        <description>
 131.469 +           Boolean value to switch on or off the legend display inside of this panel.
 131.470 +           @default true
 131.471 +        </description>
 131.472 +    </attribute>
 131.473 +    <attribute>
 131.474 +        <name>legendanchor</name>
 131.475 +        <required>false</required>
 131.476 +        <rtexprvalue>true</rtexprvalue>
 131.477 +        <description>
 131.478 +            Sets the anchor of the legend inside of the panel. Possible values
 131.479 +            are 'north', 'south', 'west', 'east'.
 131.480 +            Ignored if showlegned is 'false'.
 131.481 +            @default 'south'
 131.482 +        </description>
 131.483 +    </attribute>
 131.484 +</tag>
 131.485 +<tag>
 131.486 +    <name>overlaidchart</name>
 131.487 +    <tag-class>de.laures.cewolf.taglib.tags.OverlaidChartTag</tag-class>
 131.488 +    <description>
 131.489 +        Root tag of a overlaid-chart description.
 131.490 +        @root
 131.491 +        @required-child data
 131.492 +        @optional-child chartpostprocessor
 131.493 +    </description>
 131.494 +    <attribute>
 131.495 +        <name>id</name>
 131.496 +        <required>true</required>
 131.497 +        <rtexprvalue>true</rtexprvalue>
 131.498 +        <description>
 131.499 +            ID under which the chart description bean will be stored in the
 131.500 +            page to be found by the img tag. Beware of using an
 131.501 +            ID which is not yet used for other beans in the page to avoid
 131.502 +            compile errors.
 131.503 +        </description>
 131.504 +    </attribute>
 131.505 +    <attribute>
 131.506 +        <name>type</name>
 131.507 +        <required>true</required>
 131.508 +        <rtexprvalue>true</rtexprvalue>
 131.509 +        <description>
 131.510 +            Type of the chart. In this version only overlaidxy is supported.
 131.511 +        </description>
 131.512 +    </attribute>
 131.513 +    <attribute>
 131.514 +        <name>title</name>
 131.515 +        <required>false</required>
 131.516 +        <rtexprvalue>true</rtexprvalue>
 131.517 +        <description>
 131.518 +            Title of the chart which is displayed on the chart panel
 131.519 +            above the plot pane.
 131.520 +        </description>
 131.521 +    </attribute>
 131.522 +    <attribute>
 131.523 +        <name>xaxistype</name>
 131.524 +        <required>true</required>
 131.525 +        <rtexprvalue>true</rtexprvalue>
 131.526 +        <description>
 131.527 +        	Type of the domain axis. Possible values: date, number
 131.528 +        </description>
 131.529 +    </attribute>
 131.530 +    <attribute>
 131.531 +        <name>xaxislabel</name>
 131.532 +        <required>false</required>
 131.533 +        <rtexprvalue>true</rtexprvalue>
 131.534 +        <description>
 131.535 +            Title of the chart's x-axis. This attributes is
 131.536 +            ignored if the type attribute of the parent chart tag is one
 131.537 +            of pie3d or pie.
 131.538 +        </description>
 131.539 +    </attribute>
 131.540 +    <attribute>
 131.541 +        <name>yaxistype</name>
 131.542 +        <required>false</required>
 131.543 +        <rtexprvalue>true</rtexprvalue>
 131.544 +        <description>
 131.545 +        	Type of the range axis. Possible values: date, number
 131.546 +        </description>
 131.547 +    </attribute>
 131.548 +    <attribute>
 131.549 +        <name>yaxislabel</name>
 131.550 +        <required>false</required>
 131.551 +        <rtexprvalue>true</rtexprvalue>
 131.552 +        <description>
 131.553 +            Title of the chart's y-axis. This attributes is
 131.554 +            ignored if the type attribute of the parent chart tag is one
 131.555 +            of pie3d or pie.
 131.556 +        </description>
 131.557 +    </attribute>
 131.558 +    <attribute>
 131.559 +        <name>background</name>
 131.560 +        <required>false</required>
 131.561 +        <rtexprvalue>true</rtexprvalue>
 131.562 +        <description>
 131.563 +            Background image of the chart panel. The value of this 
 131.564 +            attribute is the filename of a graphics file relative to the web
 131.565 +            application's root directory (e.g. /WEB-INF/img/bg.jpg).
 131.566 +            The image must be loadable by the default java.awt.Toolkit of the
 131.567 +            servlet container's JVM.
 131.568 +        </description>
 131.569 +    </attribute>
 131.570 +    <attribute>
 131.571 +        <name>backgroundimagealpha</name>
 131.572 +        <required>false</required>
 131.573 +        <rtexprvalue>true</rtexprvalue>
 131.574 +        <type>java.lang.Float</type>
 131.575 +        <description>
 131.576 +            Chart's backgound alpha blending value as a float. Value ranges
 131.577 +            from 0.0 to 1.0.
 131.578 +            @default 0.0
 131.579 +            @overrides /chart[backgroundimagealpha]
 131.580 +        </description>
 131.581 +    </attribute>
 131.582 +    <attribute>
 131.583 +        <name>antialias</name>
 131.584 +        <required>false</required>
 131.585 +        <rtexprvalue>true</rtexprvalue>
 131.586 +        <description>
 131.587 +            Antialiased rendering of the chart.
 131.588 +            @default true
 131.589 +            @overrides /chart[backgroundimagealpha]
 131.590 +        </description>
 131.591 +    </attribute>
 131.592 +    <attribute>
 131.593 +        <name>showlegend</name>
 131.594 +        <required>false</required>
 131.595 +        <rtexprvalue>true</rtexprvalue>
 131.596 +        <description>
 131.597 +           Boolean value to switch on or off the legend display inside of this panel.
 131.598 +           @default true
 131.599 +        </description>
 131.600 +    </attribute>
 131.601 +    <attribute>
 131.602 +        <name>legendanchor</name>
 131.603 +        <required>false</required>
 131.604 +        <rtexprvalue>true</rtexprvalue>
 131.605 +        <description>
 131.606 +            Sets the anchor of the legend inside of the panel. Possible values
 131.607 +            are 'north', 'south', 'west', 'east'.
 131.608 +            Ignored if showlegned is 'false'.
 131.609 +            @default 'south'
 131.610 +        </description>
 131.611 +    </attribute>
 131.612 +</tag>
 131.613 +<tag>
 131.614 +    <name>combinedchart</name>
 131.615 +    <tag-class>de.laures.cewolf.taglib.tags.CombinedChartTag</tag-class>
 131.616 +    <description>
 131.617 +        Root tag of a combined-chart description.
 131.618 +        @root
 131.619 +        @required-child plot
 131.620 +        @optional-child chartpostprocessor
 131.621 +    </description>
 131.622 +    <attribute>
 131.623 +        <name>id</name>
 131.624 +        <required>true</required>
 131.625 +        <rtexprvalue>true</rtexprvalue>
 131.626 +        <description>
 131.627 +            ID under which the chart description bean will be stored in the
 131.628 +            page to be found by the img tag. Beware of using an
 131.629 +            ID which is not yet used for other beans in the page to avoid
 131.630 +            compile errors.
 131.631 +        </description>
 131.632 +    </attribute>
 131.633 +    <attribute>
 131.634 +        <name>type</name>
 131.635 +        <required>true</required>
 131.636 +        <rtexprvalue>true</rtexprvalue>
 131.637 +        <description>
 131.638 +            Type of the chart. One of combinedxy
 131.639 +        </description>
 131.640 +    </attribute>
 131.641 +    <attribute>
 131.642 +        <name>layout</name>
 131.643 +        <required>true</required>
 131.644 +        <rtexprvalue>true</rtexprvalue>
 131.645 +        <description>
 131.646 +            Layout of the chart. Either vertical or horizontal
 131.647 +        </description>
 131.648 +    </attribute>
 131.649 +    <attribute>
 131.650 +        <name>title</name>
 131.651 +        <required>false</required>
 131.652 +        <rtexprvalue>true</rtexprvalue>
 131.653 +        <description>
 131.654 +            Title of the chart which is displayed on the chart panel
 131.655 +            above the plot pane.
 131.656 +        </description>
 131.657 +    </attribute>
 131.658 +    <attribute>
 131.659 +        <name>xaxislabel</name>
 131.660 +        <required>false</required>
 131.661 +        <rtexprvalue>true</rtexprvalue>
 131.662 +        <description>
 131.663 +            Title of the chart's x-axis. This attributes is
 131.664 +            ignored if the type attribute of the parent chart tag is one
 131.665 +            of pie3d or pie.
 131.666 +        </description>
 131.667 +    </attribute>
 131.668 +    <attribute>
 131.669 +        <name>yaxislabel</name>
 131.670 +        <required>false</required>
 131.671 +        <rtexprvalue>true</rtexprvalue>
 131.672 +        <description>
 131.673 +            Title of the chart's y-axis. This attributes is
 131.674 +            ignored if the type attribute of the parent chart tag is one
 131.675 +            of pie3d or pie.
 131.676 +        </description>
 131.677 +    </attribute>
 131.678 +    <attribute>
 131.679 +        <name>background</name>
 131.680 +        <required>false</required>
 131.681 +        <rtexprvalue>true</rtexprvalue>
 131.682 +        <description>
 131.683 +            Background image of the chart panel. The value of this
 131.684 +            attribute is the filename of a graphics file relative to the web
 131.685 +            application's root directory (e.g. /WEB-INF/img/bg.jpg).
 131.686 +            The image must be loadable by the default java.awt.Toolkit of the
 131.687 +            servlet container's JVM.
 131.688 +        </description>
 131.689 +    </attribute>
 131.690 +    <attribute>
 131.691 +        <name>backgroundimagealpha</name>
 131.692 +        <required>false</required>
 131.693 +        <rtexprvalue>true</rtexprvalue>
 131.694 +        <type>java.lang.Float</type>
 131.695 +        <description>
 131.696 +            Chart's backgound alpha blending value as a float. Value ranges
 131.697 +            from 0.0 to 1.0.
 131.698 +            @default 0.0
 131.699 +            @overrides /chart[backgroundimagealpha]
 131.700 +        </description>
 131.701 +    </attribute>
 131.702 +    <attribute>
 131.703 +        <name>antialias</name>
 131.704 +        <required>false</required>
 131.705 +        <rtexprvalue>true</rtexprvalue>
 131.706 +        <description>
 131.707 +            Antialiased rendering of the chart.
 131.708 +            @default true
 131.709 +            @overrides /chart[backgroundimagealpha]
 131.710 +        </description>
 131.711 +    </attribute>
 131.712 +    <attribute>
 131.713 +        <name>showlegend</name>
 131.714 +        <required>false</required>
 131.715 +        <rtexprvalue>true</rtexprvalue>
 131.716 +        <description>
 131.717 +           Boolean value to switch on or off the legend display inside of this panel.
 131.718 +           @default true
 131.719 +        </description>
 131.720 +    </attribute>
 131.721 +    <attribute>
 131.722 +        <name>legendanchor</name>
 131.723 +        <required>false</required>
 131.724 +        <rtexprvalue>true</rtexprvalue>
 131.725 +        <description>
 131.726 +            Sets the anchor of the legend inside of the panel. Possible values
 131.727 +            are 'north', 'south', 'west', 'east'.
 131.728 +            Ignored if showlegned is 'false'.
 131.729 +            @default 'south'
 131.730 +        </description>
 131.731 +    </attribute>
 131.732 +</tag>
 131.733 +<tag>
 131.734 +    <name>legend</name>
 131.735 +    <tag-class>de.laures.cewolf.taglib.tags.LegendTag</tag-class>
 131.736 +    <description>
 131.737 +       This tag is used to render the legend of a chart in a separate image.
 131.738 +       It assumes that somewhere else in the JSP a chart tag defines a chart
 131.739 +       with the same ID as this legend tag.
 131.740 +    </description>
 131.741 +     <attribute>
 131.742 +        <name>forceSessionId</name>
 131.743 +        <required>false</required>
 131.744 +        <rtexprvalue>true</rtexprvalue>
 131.745 +        <description>
 131.746 +           Add JSession id.
 131.747 +        </description>
 131.748 +    </attribute>    
 131.749 +    <attribute>
 131.750 +        <name>removeAfterRender</name>
 131.751 +        <required>false</required>
 131.752 +        <rtexprvalue>true</rtexprvalue>
 131.753 +        <description>
 131.754 +           Remove image after rendering (defaults to false).
 131.755 +        </description>
 131.756 +    </attribute>
 131.757 +    <attribute>
 131.758 +        <name>renderer</name>
 131.759 +        <required>true</required>
 131.760 +        <rtexprvalue>true</rtexprvalue>
 131.761 +        <description>
 131.762 +            Path to rendering servlet relative to web apps root URL
 131.763 +            (e.g. servlet/cewolf).
 131.764 +        </description>
 131.765 +    </attribute>
 131.766 +    <attribute>
 131.767 +        <name>id</name>
 131.768 +        <required>true</required>
 131.769 +        <rtexprvalue>true</rtexprvalue>
 131.770 +        <description>
 131.771 +            ID under which the chart description bean will be stored in the
 131.772 +            session to be found by the rendering servlet. Beware of using an
 131.773 +            ID which is not yet used for other beans in the session to avoid
 131.774 +            overriding.
 131.775 +        </description>
 131.776 +    </attribute>
 131.777 +    <attribute>
 131.778 +        <name>timeout</name>
 131.779 +        <required>false</required>
 131.780 +        <rtexprvalue>true</rtexprvalue>
 131.781 +        <description>
 131.782 +           Sets the timeout value used in the LongTermSessionStorage obj. Value is in seconds.
 131.783 +        </description>
 131.784 +    </attribute>
 131.785 +    <attribute>
 131.786 +        <name>width</name>
 131.787 +        <required>false</required>
 131.788 +        <rtexprvalue>true</rtexprvalue>
 131.789 +        <description>
 131.790 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
 131.791 +        </description>
 131.792 +    </attribute>
 131.793 +    <attribute>
 131.794 +        <name>height</name>
 131.795 +        <required>false</required>
 131.796 +        <rtexprvalue>true</rtexprvalue>
 131.797 +        <description>
 131.798 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
 131.799 +        </description>
 131.800 +    </attribute>
 131.801 +    <attribute>
 131.802 +        <name>mime</name>
 131.803 +        <required>false</required>
 131.804 +        <rtexprvalue>true</rtexprvalue>
 131.805 +        <description>
 131.806 +            The MIME type of the image. Currently image/png (default) and image/svg are supported.
 131.807 +            @default image/png
 131.808 +        </description>
 131.809 +    </attribute>
 131.810 +    <attribute>
 131.811 +        <name>alt</name>
 131.812 +        <required>false</required>
 131.813 +        <rtexprvalue>true</rtexprvalue>
 131.814 +        <description>
 131.815 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
 131.816 +        </description>
 131.817 +    </attribute>
 131.818 +    <attribute>
 131.819 +        <name>hspace</name>
 131.820 +        <required>false</required>
 131.821 +        <rtexprvalue>true</rtexprvalue>
 131.822 +        <description>
 131.823 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
 131.824 +        </description>
 131.825 +    </attribute>
 131.826 +    <attribute>
 131.827 +        <name>vspace</name>
 131.828 +        <required>false</required>
 131.829 +        <rtexprvalue>true</rtexprvalue>
 131.830 +        <description>
 131.831 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
 131.832 +        </description>
 131.833 +    </attribute>
 131.834 +    <attribute>
 131.835 +        <name>align</name>
 131.836 +        <required>false</required>
 131.837 +        <rtexprvalue>true</rtexprvalue>
 131.838 +        <description>
 131.839 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
 131.840 +        </description>
 131.841 +    </attribute>
 131.842 +    <attribute>
 131.843 +        <name>border</name>
 131.844 +        <required>false</required>
 131.845 +        <rtexprvalue>true</rtexprvalue>
 131.846 +        <description>
 131.847 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
 131.848 +        </description>
 131.849 +    </attribute>
 131.850 +    <attribute>
 131.851 +        <name>ismap</name>
 131.852 +        <required>false</required>
 131.853 +        <rtexprvalue>true</rtexprvalue>
 131.854 +        <description>
 131.855 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
 131.856 +        </description>
 131.857 +    </attribute>
 131.858 +    <attribute>
 131.859 +        <name>longdesc</name>
 131.860 +        <required>false</required>
 131.861 +        <rtexprvalue>true</rtexprvalue>
 131.862 +        <description>
 131.863 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
 131.864 +        </description>
 131.865 +    </attribute>
 131.866 +    <attribute>
 131.867 +        <name>usemap</name>
 131.868 +        <required>false</required>
 131.869 +        <rtexprvalue>true</rtexprvalue>
 131.870 +        <description>
 131.871 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
 131.872 +        </description>
 131.873 +    </attribute>
 131.874 +    <attribute>
 131.875 +        <name>class</name>
 131.876 +        <required>false</required>
 131.877 +        <rtexprvalue>true</rtexprvalue>
 131.878 +        <description>
 131.879 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
 131.880 +        </description>
 131.881 +    </attribute>
 131.882 +    <attribute>
 131.883 +        <name>dir</name>
 131.884 +        <required>false</required>
 131.885 +        <rtexprvalue>true</rtexprvalue>
 131.886 +        <description>
 131.887 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
 131.888 +        </description>
 131.889 +    </attribute>
 131.890 +    <attribute>
 131.891 +        <name>lang</name>
 131.892 +        <required>false</required>
 131.893 +        <rtexprvalue>true</rtexprvalue>
 131.894 +        <description>
 131.895 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
 131.896 +        </description>
 131.897 +    </attribute>
 131.898 +    <attribute>
 131.899 +        <name>onclick</name>
 131.900 +        <required>false</required>
 131.901 +        <rtexprvalue>true</rtexprvalue>
 131.902 +        <description>
 131.903 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
 131.904 +        </description>
 131.905 +    </attribute>
 131.906 +    <attribute>
 131.907 +        <name>ondbclick</name>
 131.908 +        <required>false</required>
 131.909 +        <rtexprvalue>true</rtexprvalue>
 131.910 +        <description>
 131.911 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
 131.912 +        </description>
 131.913 +    </attribute>
 131.914 +    <attribute>
 131.915 +        <name>onkeydown</name>
 131.916 +        <required>false</required>
 131.917 +        <rtexprvalue>true</rtexprvalue>
 131.918 +        <description>
 131.919 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
 131.920 +        </description>
 131.921 +    </attribute>
 131.922 +    <attribute>
 131.923 +        <name>onkeypress</name>
 131.924 +        <required>false</required>
 131.925 +        <rtexprvalue>true</rtexprvalue>
 131.926 +        <description>
 131.927 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
 131.928 +        </description>
 131.929 +    </attribute>
 131.930 +    <attribute>
 131.931 +        <name>onkeyup</name>
 131.932 +        <required>false</required>
 131.933 +        <rtexprvalue>true</rtexprvalue>
 131.934 +        <description>
 131.935 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
 131.936 +        </description>
 131.937 +    </attribute>
 131.938 +    <attribute>
 131.939 +        <name>onmousedown</name>
 131.940 +        <required>false</required>
 131.941 +        <rtexprvalue>true</rtexprvalue>
 131.942 +        <description>
 131.943 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
 131.944 +        </description>
 131.945 +    </attribute>
 131.946 +    <attribute>
 131.947 +        <name>onmousemove</name>
 131.948 +        <required>false</required>
 131.949 +        <rtexprvalue>true</rtexprvalue>
 131.950 +        <description>
 131.951 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
 131.952 +        </description>
 131.953 +    </attribute>
 131.954 +    <attribute>
 131.955 +        <name>onmouseout</name>
 131.956 +        <required>false</required>
 131.957 +        <rtexprvalue>true</rtexprvalue>
 131.958 +        <description>
 131.959 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
 131.960 +        </description>
 131.961 +    </attribute>
 131.962 +    <attribute>
 131.963 +        <name>onmouseover</name>
 131.964 +        <required>false</required>
 131.965 +        <rtexprvalue>true</rtexprvalue>
 131.966 +        <description>
 131.967 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
 131.968 +        </description>
 131.969 +    </attribute>
 131.970 +    <attribute>
 131.971 +        <name>onmouseup</name>
 131.972 +        <required>false</required>
 131.973 +        <rtexprvalue>true</rtexprvalue>
 131.974 +        <description>
 131.975 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
 131.976 +        </description>
 131.977 +    </attribute>
 131.978 +    <attribute>
 131.979 +        <name>style</name>
 131.980 +        <required>false</required>
 131.981 +        <rtexprvalue>true</rtexprvalue>
 131.982 +        <description>
 131.983 +           Corresponds to appropriate HMTL &lt;img&gt; attribute.
 131.984 +        </description>
 131.985 +    </attribute>
 131.986 +    <attribute>
 131.987 +        <name>htmltitle</name>
 131.988 +        <required>false</required>
 131.989 +        <rtexprvalue>true</rtexprvalue>
 131.990 +        <description>
 131.991 +           Corresponds to appropriate HMTL &lt;img&gt; title attribute.
 131.992 +        </description>
 131.993 +    </attribute>
 131.994 +</tag>
 131.995 +<tag>
 131.996 +    <name>data</name>
 131.997 +    <tag-class>de.laures.cewolf.taglib.tags.DataTag</tag-class>
 131.998 +    <description>
 131.999 +        A data tag provides all information needed to retrieve the data which are
131.1000 +        needed by the chart. Current version only supports data provided by a
131.1001 +        DatasetProducer. In future versions there will be tags to provide data
131.1002 +        from a datasource (e.g. via SQL).
131.1003 +        @optional-child producer
131.1004 +    </description>
131.1005 +</tag>
131.1006 +<tag>
131.1007 +    <name>producer</name>
131.1008 +    <tag-class>de.laures.cewolf.taglib.tags.ProducerTag</tag-class>
131.1009 +    <description>
131.1010 +        A data tag provides all information needed to retrieve the data which are
131.1011 +        needed by the chart. Current version only supports data provided by a
131.1012 +        DatasetProducer. In future versions there will be tags to provide data
131.1013 +        from a datasource (e.g. via SQL).
131.1014 +        @optional-child param
131.1015 +    </description>
131.1016 +    <attribute>
131.1017 +        <name>id</name>
131.1018 +        <required>true</required>
131.1019 +        <rtexprvalue>true</rtexprvalue>
131.1020 +        <description>
131.1021 +            ID under which an object of type DatasetProducer can be found in
131.1022 +            pageContext. This object is used to retrieve the dataset of the chart.
131.1023 +        </description>
131.1024 +    </attribute>
131.1025 +    <attribute>
131.1026 +        <name>usecache</name>
131.1027 +        <required>false</required>
131.1028 +        <rtexprvalue>true</rtexprvalue>
131.1029 +        <description>
131.1030 +            Determines if formally produced data should be reused if possible.
131.1031 +            @default true
131.1032 +        </description>
131.1033 +    </attribute>
131.1034 +</tag>
131.1035 +<tag>
131.1036 +    <name>chartpostprocessor</name>
131.1037 +    <tag-class>de.laures.cewolf.taglib.tags.ChartPostProcessorTag</tag-class>
131.1038 +    <description>
131.1039 +        A chart postprocessor tag references an object of type ChartProstProcessor
131.1040 +        which must be defined in pageContext under the provided ID. This object
131.1041 +        is called back after chart generation to post process the chart in any
131.1042 +        manner.
131.1043 +        @optional-child param
131.1044 +    </description>
131.1045 +    <attribute>
131.1046 +        <name>id</name>
131.1047 +        <required>true</required>
131.1048 +        <rtexprvalue>true</rtexprvalue>
131.1049 +        <description>
131.1050 +            ID under which an object of type ChartPostProcessor can be found in
131.1051 +            pageContext. This object is used to postprocess the rendered chart.
131.1052 +        </description>
131.1053 +    </attribute>
131.1054 +</tag>
131.1055 +<tag>
131.1056 +    <name>param</name>
131.1057 +    <tag-class>de.laures.cewolf.taglib.tags.ParamTag</tag-class>
131.1058 +    <description>
131.1059 +        Name/value-pair to paramterize a surrounding tag whose handler must 
131.1060 +        implement the Parameterized interface.
131.1061 +    </description>
131.1062 +    <attribute>
131.1063 +        <name>name</name>
131.1064 +        <required>true</required>
131.1065 +        <rtexprvalue>true</rtexprvalue>
131.1066 +        <description>
131.1067 +            Name of the param
131.1068 +        </description>
131.1069 +    </attribute>
131.1070 +    <attribute>
131.1071 +        <name>value</name>
131.1072 +        <required>true</required>
131.1073 +        <rtexprvalue>true</rtexprvalue>
131.1074 +        <type>java.io.Serializable</type>
131.1075 +        <description>
131.1076 +            Value of the param. Must be serializable.
131.1077 +        </description>
131.1078 +    </attribute>
131.1079 +</tag>
131.1080 +<tag>
131.1081 +    <name>gradientpaint</name>
131.1082 +    <tag-class>de.laures.cewolf.taglib.tags.GradientTag</tag-class>
131.1083 +    <description>
131.1084 +        The gradientpaint tag provides a way to fill a shape with a linear 
131.1085 +        color gradient pattern. If Point P1 with Color C1 and Point P2 with 
131.1086 +        Color C2 are specified in user space, the Color on the P1, P2 
131.1087 +        connecting line is proportionally changed from C1 to C2. Any point 
131.1088 +        P not on the extended P1, P2 connecting line has the color of the 
131.1089 +        point P' that is the perpendicular projection of P on the extended P1,
131.1090 +        P2 connecting line. Points on the extended line outside of the P1,
131.1091 +        P2 segment can be colored in one of two ways.
131.1092 +        &lt;ul&gt;
131.1093 +        &lt;li&gt;If the gradient is cyclic then the points on the extended 
131.1094 +        P1, P2 connecting line cycle back and forth between the colors C1 
131.1095 +        and C2.
131.1096 +        &lt;li&gt;If the gradient is acyclic then points on the P1 side of 
131.1097 +        the segment have the constant Color C1 while points on the P2 side 
131.1098 +        have the constant Color C2.
131.1099 +        The two colors are defined in a nested point tag of this tag. 
131.1100 +        @required-child point
131.1101 +    </description>
131.1102 +    <attribute>
131.1103 +        <name>cyclic</name>
131.1104 +        <required>false</required>
131.1105 +        <rtexprvalue>true</rtexprvalue>
131.1106 +        <description>
131.1107 +            Does the gradient cycle repeatedly between the two colors C1 and C2.
131.1108 +            @default false
131.1109 +        </description>
131.1110 +    </attribute>
131.1111 +</tag>
131.1112 +<tag>
131.1113 +    <name>point</name>
131.1114 +    <tag-class>de.laures.cewolf.taglib.tags.PointTag</tag-class>
131.1115 +    <description>
131.1116 +        Defines a point with x and y coordinates and a color.
131.1117 +        @extends colorpaint
131.1118 +    </description>
131.1119 +    <attribute>
131.1120 +        <name>x</name>
131.1121 +        <required>true</required>
131.1122 +        <rtexprvalue>true</rtexprvalue>
131.1123 +        <description>
131.1124 +            The x coordinate of the point.
131.1125 +        </description>
131.1126 +    </attribute>
131.1127 +    <attribute>
131.1128 +        <name>y</name>
131.1129 +        <required>true</required>
131.1130 +        <rtexprvalue>true</rtexprvalue>
131.1131 +        <description>
131.1132 +            The y coordinate of the point.
131.1133 +        </description>
131.1134 +    </attribute>
131.1135 +    <attribute>
131.1136 +        <name>color</name>
131.1137 +        <required>false</required>
131.1138 +        <rtexprvalue>true</rtexprvalue>
131.1139 +        <description>
131.1140 +            @copy
131.1141 +        </description>
131.1142 +    </attribute>
131.1143 +</tag>
131.1144 +<tag>
131.1145 +    <name>colorpaint</name>
131.1146 +    <tag-class>de.laures.cewolf.taglib.tags.ColorTag</tag-class>
131.1147 +    <description>
131.1148 +        Fills the area defined by the parent tag with a color. 
131.1149 +    </description>
131.1150 +    <attribute>
131.1151 +        <name>color</name>
131.1152 +        <required>true</required>
131.1153 +        <rtexprvalue>true</rtexprvalue>
131.1154 +        <description>
131.1155 +            The color to be used to fill the parent tag's area.
131.1156 +            The color definition is compatible with the
131.1157 +            HTML one. E.g. black is '#000000' and red is '#FF0000'. However it
131.1158 +            is possible to append two hex numbers for the alpha channel. Thus
131.1159 +            '#FF000080' is red with alpha blending of 50%.
131.1160 +        </description>
131.1161 +    </attribute>
131.1162 +</tag>
131.1163 +<tag>
131.1164 +    <name>texturepaint</name>
131.1165 +    <tag-class>de.laures.cewolf.taglib.tags.TextureTag</tag-class>
131.1166 +    <description>
131.1167 +        The texturepaint tag provides a way to fill the area of the parent tag
131.1168 +        with a texture that is specified as an image. The texture is anchored to 
131.1169 +        the upper left corner of the parent tags area.
131.1170 +    </description>
131.1171 +    <attribute>
131.1172 +        <name>image</name>
131.1173 +        <required>true</required>
131.1174 +        <rtexprvalue>true</rtexprvalue>
131.1175 +        <description>
131.1176 +            Image fo the texture. The value of this 
131.1177 +            attribute is the filename of a graphics file relative to the web
131.1178 +            application's root directory (e.g. /WEB-INF/img/bg.jpg).
131.1179 +            The image must be loadable by the default java.awt.Toolkit of the
131.1180 +            servlet container's JVM.
131.1181 +        </description>
131.1182 +    </attribute>
131.1183 +    <attribute>
131.1184 +        <name>width</name>
131.1185 +        <required>true</required>
131.1186 +        <rtexprvalue>true</rtexprvalue>
131.1187 +        <description>
131.1188 +            The width of the texture.
131.1189 +        </description>
131.1190 +    </attribute>
131.1191 +    <attribute>
131.1192 +        <name>height</name>
131.1193 +        <required>true</required>
131.1194 +        <rtexprvalue>true</rtexprvalue>
131.1195 +        <description>
131.1196 +            The height of the texture.
131.1197 +        </description>  
131.1198 +    </attribute>
131.1199 +</tag>
131.1200 +<tag>
131.1201 +    <name>map</name>
131.1202 +    <tag-class>de.laures.cewolf.taglib.tags.ChartMapTag</tag-class>
131.1203 +    <description>
131.1204 +      This tag defines an image and tooltip map for the parent img tag.
131.1205 +      @parent img
131.1206 +    </description>
131.1207 +    <attribute>
131.1208 +        <name>linkgeneratorid</name>
131.1209 +        <required>false</required>
131.1210 +        <rtexprvalue>true</rtexprvalue>
131.1211 +        <description>
131.1212 +          The ID of the class which implements the appropriate de.laures.cewolf.LinkGenerator.
131.1213 +        </description>
131.1214 +    </attribute>
131.1215 +    <attribute>
131.1216 +        <name>tooltipgeneratorid</name>
131.1217 +        <required>false</required>
131.1218 +        <rtexprvalue>true</rtexprvalue>
131.1219 +        <description>
131.1220 +          The ID of the class which implements the appropriate com.jrefinery.chart.tooltips.ToolTipGenerator.
131.1221 +        </description>
131.1222 +    </attribute>
131.1223 +	<attribute>
131.1224 +		<name>useJFreeChartLinkGenerator</name>
131.1225 +		<required>false</required>
131.1226 +		<rtexprvalue>true</rtexprvalue>
131.1227 +		<description>If the links provided by the JFreeChart renderer should be used.</description>
131.1228 +	</attribute>
131.1229 +	<attribute>
131.1230 +		<name>useJFreeChartTooltipGenerator</name>
131.1231 +		<required>false</required>
131.1232 +		<rtexprvalue>true</rtexprvalue>
131.1233 +		<description>If the tooltips provided by the JFreeChart renderer should be used.</description>		
131.1234 +	</attribute>	
131.1235 +	
131.1236 +</tag>
131.1237 +</taglib>
131.1238 \ No newline at end of file
   132.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   132.2 +++ b/java/cewolf-1.0/src/main/resources/overlib.js	Sat Feb 28 21:31:02 2009 +0100
   132.3 @@ -0,0 +1,1222 @@
   132.4 +//\//////////////////////////////////////////////////////////////////////////////////
   132.5 +//\  overLIB 3.50  --  This notice must remain untouched at all times.
   132.6 +//\  Copyright Erik Bosrup 1998-2001. All rights reserved.
   132.7 +//\
   132.8 +//\  By Erik Bosrup (erik@bosrup.com).  Last modified 2001-08-28.
   132.9 +//\  Portions by Dan Steinman (dansteinman.com). Additions by other people are
  132.10 +//\  listed on the overLIB homepage.
  132.11 +//\
  132.12 +//\  Get the latest version at http://www.bosrup.com/web/overlib/
  132.13 +//\
  132.14 +//\  This script is published under an open source license. Please read the license
  132.15 +//\  agreement online at: http://www.bosrup.com/web/overlib/license.html
  132.16 +//\  If you have questions regarding the license please contact erik@bosrup.com.
  132.17 +//\
  132.18 +//\  This script library was originally created for personal use. By request it has
  132.19 +//\  later been made public. This is free software. Do not sell this as your own
  132.20 +//\  work, or remove this copyright notice. For full details on copying or changing
  132.21 +//\  this script please read the license agreement at the link above.
  132.22 +//\
  132.23 +//\  Please give credit on sites that use overLIB and submit changes of the script
  132.24 +//\  so other people can use them as well. This script is free to use, don't abuse.
  132.25 +//\//////////////////////////////////////////////////////////////////////////////////
  132.26 +//\mini
  132.27 +
  132.28 +
  132.29 +////////////////////////////////////////////////////////////////////////////////////
  132.30 +// CONSTANTS
  132.31 +// Don't touch these. :)
  132.32 +////////////////////////////////////////////////////////////////////////////////////
  132.33 +var INARRAY		=	1;
  132.34 +var CAPARRAY		=	2;
  132.35 +var STICKY		=	3;
  132.36 +var BACKGROUND		=	4;
  132.37 +var NOCLOSE		=	5;
  132.38 +var CAPTION		=	6;
  132.39 +var LEFT		=	7;
  132.40 +var RIGHT		=	8;
  132.41 +var CENTER		=	9;
  132.42 +var OFFSETX		=	10;
  132.43 +var OFFSETY		=	11;
  132.44 +var FGCOLOR		=	12;
  132.45 +var BGCOLOR		=	13;
  132.46 +var TEXTCOLOR		=	14;
  132.47 +var CAPCOLOR		=	15;
  132.48 +var CLOSECOLOR		=	16;
  132.49 +var WIDTH		=	17;
  132.50 +var BORDER		=	18;
  132.51 +var STATUS		=	19;
  132.52 +var AUTOSTATUS		=	20;
  132.53 +var AUTOSTATUSCAP	=	21;
  132.54 +var HEIGHT		=	22;
  132.55 +var CLOSETEXT		=	23;
  132.56 +var SNAPX		=	24;
  132.57 +var SNAPY		=	25;
  132.58 +var FIXX		=	26;
  132.59 +var FIXY		=	27;
  132.60 +var FGBACKGROUND	=	28;
  132.61 +var BGBACKGROUND	=	29;
  132.62 +var PADX		=	30; // PADX2 out
  132.63 +var PADY		=	31; // PADY2 out
  132.64 +var FULLHTML		=	34;
  132.65 +var ABOVE		=	35;
  132.66 +var BELOW		=	36;
  132.67 +var CAPICON		=	37;
  132.68 +var TEXTFONT		=	38;
  132.69 +var CAPTIONFONT		=	39;
  132.70 +var CLOSEFONT		=	40;
  132.71 +var TEXTSIZE		=	41;
  132.72 +var CAPTIONSIZE		=	42;
  132.73 +var CLOSESIZE		=	43;
  132.74 +var FRAME		=	44;
  132.75 +var TIMEOUT		=	45;
  132.76 +var FUNCTION		=	46;
  132.77 +var DELAY		=	47;
  132.78 +var HAUTO		=	48;
  132.79 +var VAUTO		=	49;
  132.80 +var CLOSECLICK		=	50;
  132.81 +var CSSOFF		=	51;
  132.82 +var CSSSTYLE		=	52;
  132.83 +var CSSCLASS		=	53;
  132.84 +var FGCLASS		=	54;
  132.85 +var BGCLASS		=	55;
  132.86 +var TEXTFONTCLASS	=	56;
  132.87 +var CAPTIONFONTCLASS	=	57;
  132.88 +var CLOSEFONTCLASS	=	58;
  132.89 +var PADUNIT		=	59;
  132.90 +var HEIGHTUNIT		=	60;
  132.91 +var WIDTHUNIT		=	61;
  132.92 +var TEXTSIZEUNIT	=	62;
  132.93 +var TEXTDECORATION	=	63;
  132.94 +var TEXTSTYLE		=	64;
  132.95 +var TEXTWEIGHT		=	65;
  132.96 +var CAPTIONSIZEUNIT	=	66;
  132.97 +var CAPTIONDECORATION	=	67;
  132.98 +var CAPTIONSTYLE	=	68;
  132.99 +var CAPTIONWEIGHT	=	69;
 132.100 +var CLOSESIZEUNIT	=	70;
 132.101 +var CLOSEDECORATION	=	71;
 132.102 +var CLOSESTYLE		=	72;
 132.103 +var CLOSEWEIGHT		=	73;
 132.104 +
 132.105 +
 132.106 +////////////////////////////////////////////////////////////////////////////////////
 132.107 +// DEFAULT CONFIGURATION
 132.108 +// You don't have to change anything here if you don't want to. All of this can be
 132.109 +// changed on your html page or through an overLIB call.
 132.110 +////////////////////////////////////////////////////////////////////////////////////
 132.111 +
 132.112 +// Main background color (the large area)
 132.113 +// Usually a bright color (white, yellow etc)
 132.114 +if (typeof ol_fgcolor == 'undefined') { var ol_fgcolor = "#CCCCFF";}
 132.115 +	
 132.116 +// Border color and color of caption
 132.117 +// Usually a dark color (black, brown etc)
 132.118 +if (typeof ol_bgcolor == 'undefined') { var ol_bgcolor = "#333399";}
 132.119 +	
 132.120 +// Text color
 132.121 +// Usually a dark color
 132.122 +if (typeof ol_textcolor == 'undefined') { var ol_textcolor = "#000000";}
 132.123 +	
 132.124 +// Color of the caption text
 132.125 +// Usually a bright color
 132.126 +if (typeof ol_capcolor == 'undefined') { var ol_capcolor = "#FFFFFF";}
 132.127 +	
 132.128 +// Color of "Close" when using Sticky
 132.129 +// Usually a semi-bright color
 132.130 +if (typeof ol_closecolor == 'undefined') { var ol_closecolor = "#9999FF";}
 132.131 +
 132.132 +// Font face for the main text
 132.133 +if (typeof ol_textfont == 'undefined') { var ol_textfont = "Verdana,Arial,Helvetica";}
 132.134 +
 132.135 +// Font face for the caption
 132.136 +if (typeof ol_captionfont == 'undefined') { var ol_captionfont = "Verdana,Arial,Helvetica";}
 132.137 +
 132.138 +// Font face for the close text
 132.139 +if (typeof ol_closefont == 'undefined') { var ol_closefont = "Verdana,Arial,Helvetica";}
 132.140 +
 132.141 +// Font size for the main text
 132.142 +// When using CSS this will be very small.
 132.143 +if (typeof ol_textsize == 'undefined') { var ol_textsize = "1";}
 132.144 +
 132.145 +// Font size for the caption
 132.146 +// When using CSS this will be very small.
 132.147 +if (typeof ol_captionsize == 'undefined') { var ol_captionsize = "1";}
 132.148 +
 132.149 +// Font size for the close text
 132.150 +// When using CSS this will be very small.
 132.151 +if (typeof ol_closesize == 'undefined') { var ol_closesize = "1";}
 132.152 +
 132.153 +// Width of the popups in pixels
 132.154 +// 100-300 pixels is typical
 132.155 +if (typeof ol_width == 'undefined') { var ol_width = "200";}
 132.156 +
 132.157 +// How thick the ol_border should be in pixels
 132.158 +// 1-3 pixels is typical
 132.159 +if (typeof ol_border == 'undefined') { var ol_border = "1";}
 132.160 +
 132.161 +// How many pixels to the right/left of the cursor to show the popup
 132.162 +// Values between 3 and 12 are best
 132.163 +if (typeof ol_offsetx == 'undefined') { var ol_offsetx = 10;}
 132.164 +	
 132.165 +// How many pixels to the below the cursor to show the popup
 132.166 +// Values between 3 and 12 are best
 132.167 +if (typeof ol_offsety == 'undefined') { var ol_offsety = 10;}
 132.168 +
 132.169 +// Default text for popups
 132.170 +// Should you forget to pass something to overLIB this will be displayed.
 132.171 +if (typeof ol_text == 'undefined') { var ol_text = "Default Text"; }
 132.172 +
 132.173 +// Default caption
 132.174 +// You should leave this blank or you will have problems making non caps popups.
 132.175 +if (typeof ol_cap == 'undefined') { var ol_cap = ""; }
 132.176 +
 132.177 +// Decides if sticky popups are default.
 132.178 +// 0 for non, 1 for stickies.
 132.179 +if (typeof ol_sticky == 'undefined') { var ol_sticky = 0; }
 132.180 +
 132.181 +// Default background image. Better left empty unless you always want one.
 132.182 +if (typeof ol_background == 'undefined') { var ol_background = ""; }
 132.183 +
 132.184 +// Text for the closing sticky popups.
 132.185 +// Normal is "Close".
 132.186 +if (typeof ol_close == 'undefined') { var ol_close = "Close"; }
 132.187 +
 132.188 +// Default vertical alignment for popups.
 132.189 +// It's best to leave RIGHT here. Other options are LEFT and CENTER.
 132.190 +if (typeof ol_hpos == 'undefined') { var ol_hpos = RIGHT; }
 132.191 +
 132.192 +// Default status bar text when a popup is invoked.
 132.193 +if (typeof ol_status == 'undefined') { var ol_status = ""; }
 132.194 +
 132.195 +// If the status bar automatically should load either text or caption.
 132.196 +// 0=nothing, 1=text, 2=caption
 132.197 +if (typeof ol_autostatus == 'undefined') { var ol_autostatus = 0; }
 132.198 +
 132.199 +// Default height for popup. Often best left alone.
 132.200 +if (typeof ol_height == 'undefined') { var ol_height = -1; }
 132.201 +
 132.202 +// Horizontal grid spacing that popups will snap to.
 132.203 +// 0 makes no grid, anything else will cause a snap to that grid spacing.
 132.204 +if (typeof ol_snapx == 'undefined') { var ol_snapx = 0; }
 132.205 +
 132.206 +// Vertical grid spacing that popups will snap to.
 132.207 +// 0 makes no grid, andthing else will cause a snap to that grid spacing.
 132.208 +if (typeof ol_snapy == 'undefined') { var ol_snapy = 0; }
 132.209 +
 132.210 +// Sets the popups horizontal position to a fixed column.
 132.211 +// Anything above -1 will cause fixed position.
 132.212 +if (typeof ol_fixx == 'undefined') { var ol_fixx = -1; }
 132.213 +
 132.214 +// Sets the popups vertical position to a fixed row.
 132.215 +// Anything above -1 will cause fixed position.
 132.216 +if (typeof ol_fixy == 'undefined') { var ol_fixy = -1; }
 132.217 +
 132.218 +// Background image for the popups inside.
 132.219 +if (typeof ol_fgbackground == 'undefined') { var ol_fgbackground = ""; }
 132.220 +
 132.221 +// Background image for the popups frame.
 132.222 +if (typeof ol_bgbackground == 'undefined') { var ol_bgbackground = ""; }
 132.223 +
 132.224 +// How much horizontal left padding text should get by default when BACKGROUND is used.
 132.225 +if (typeof ol_padxl == 'undefined') { var ol_padxl = 1; }
 132.226 +
 132.227 +// How much horizontal right padding text should get by default when BACKGROUND is used.
 132.228 +if (typeof ol_padxr == 'undefined') { var ol_padxr = 1; }
 132.229 +
 132.230 +// How much vertical top padding text should get by default when BACKGROUND is used.
 132.231 +if (typeof ol_padyt == 'undefined') { var ol_padyt = 1; }
 132.232 +
 132.233 +// How much vertical bottom padding text should get by default when BACKGROUND is used.
 132.234 +if (typeof ol_padyb == 'undefined') { var ol_padyb = 1; }
 132.235 +
 132.236 +// If the user by default must supply all html for complete popup control.
 132.237 +// Set to 1 to activate, 0 otherwise.
 132.238 +if (typeof ol_fullhtml == 'undefined') { var ol_fullhtml = 0; }
 132.239 +
 132.240 +// Default vertical position of the popup. Default should normally be BELOW.
 132.241 +// ABOVE only works when HEIGHT is defined.
 132.242 +if (typeof ol_vpos == 'undefined') { var ol_vpos = BELOW; }
 132.243 +
 132.244 +// Default height of popup to use when placing the popup above the cursor.
 132.245 +if (typeof ol_aboveheight == 'undefined') { var ol_aboveheight = 0; }
 132.246 +
 132.247 +// Default icon to place next to the popups caption.
 132.248 +if (typeof ol_caption == 'undefined') { var ol_capicon = ""; }
 132.249 +
 132.250 +// Default frame. We default to current frame if there is no frame defined.
 132.251 +if (typeof ol_frame == 'undefined') { var ol_frame = self; }
 132.252 +
 132.253 +// Default timeout. By default there is no timeout.
 132.254 +if (typeof ol_timeout == 'undefined') { var ol_timeout = 0; }
 132.255 +
 132.256 +// Default javascript funktion. By default there is none.
 132.257 +if (typeof ol_function == 'undefined') { var ol_function = Function(); }
 132.258 +
 132.259 +// Default timeout. By default there is no timeout.
 132.260 +if (typeof ol_delay == 'undefined') { var ol_delay = 0; }
 132.261 +
 132.262 +// If overLIB should decide the horizontal placement.
 132.263 +if (typeof ol_hauto == 'undefined') { var ol_hauto = 0; }
 132.264 +
 132.265 +// If overLIB should decide the vertical placement.
 132.266 +if (typeof ol_vauto == 'undefined') { var ol_vauto = 0; }
 132.267 +
 132.268 +
 132.269 +
 132.270 +// If the user has to click to close stickies.
 132.271 +if (typeof ol_closeclick == 'undefined') { var ol_closeclick = 0; }
 132.272 +
 132.273 +// This variable determines if you want to use CSS or inline definitions.
 132.274 +// CSSOFF=no CSS    CSSSTYLE=use CSS inline styles    CSSCLASS=use classes
 132.275 +if (typeof ol_css == 'undefined') { var ol_css = CSSOFF; }
 132.276 +
 132.277 +// Main background class (eqv of fgcolor)
 132.278 +// This is only used if CSS is set to use classes (ol_css = CSSCLASS)
 132.279 +if (typeof ol_fgclass == 'undefined') { var ol_fgclass = ""; }
 132.280 +
 132.281 +// Frame background class (eqv of bgcolor)
 132.282 +// This is only used if CSS is set to use classes (ol_css = CSSCLASS)
 132.283 +if (typeof ol_bgclass == 'undefined') { var ol_bgclass = ""; }
 132.284 +
 132.285 +// Main font class
 132.286 +// This is only used if CSS is set to use classes (ol_css = CSSCLASS)
 132.287 +if (typeof ol_textfontclass == 'undefined') { var ol_textfontclass = ""; }
 132.288 +
 132.289 +// Caption font class
 132.290 +// This is only used if CSS is set to use classes (ol_css = CSSCLASS)
 132.291 +if (typeof ol_captionfontclass == 'undefined') { var ol_captionfontclass = ""; }
 132.292 +
 132.293 +// Close font class
 132.294 +// This is only used if CSS is set to use classes (ol_css = CSSCLASS)
 132.295 +if (typeof ol_closefontclass == 'undefined') { var ol_closefontclass = ""; }
 132.296 +
 132.297 +// Unit to be used for the text padding above
 132.298 +// Only used if CSS inline styles are being used (ol_css = CSSSTYLE)
 132.299 +// Options include "px", "%", "in", "cm" and more
 132.300 +if (typeof ol_padunit == 'undefined') { var ol_padunit = "px";}
 132.301 +
 132.302 +// Unit to be used for height of popup
 132.303 +// Only used if CSS inline styles are being used (ol_css = CSSSTYLE)
 132.304 +// Options include "px", "%", "in", "cm" and more
 132.305 +if (typeof ol_heightunit == 'undefined') { var ol_heightunit = "px";}
 132.306 +
 132.307 +// Unit to be used for width of popup
 132.308 +// Only used if CSS inline styles are being used (ol_css = CSSSTYLE)
 132.309 +// Options include "px", "%", "in", "cm" and more
 132.310 +if (typeof ol_widthunit == 'undefined') { var ol_widthunit = "px";}
 132.311 +
 132.312 +// Font size unit for the main text
 132.313 +// Only used if CSS inline styles are being used (ol_css = CSSSTYLE)
 132.314 +if (typeof ol_textsizeunit == 'undefined') { var ol_textsizeunit = "px";}
 132.315 +
 132.316 +// Decoration of the main text ("none", "underline", "line-through" or "blink")
 132.317 +// Only used if CSS inline styles are being used (ol_css = CSSSTYLE)
 132.318 +if (typeof ol_textdecoration == 'undefined') { var ol_textdecoration = "none";}
 132.319 +
 132.320 +// Font style of the main text ("normal" or "italic")
 132.321 +// Only used if CSS inline styles are being used (ol_css = CSSSTYLE)
 132.322 +if (typeof ol_textstyle == 'undefined') { var ol_textstyle = "normal";}
 132.323 +
 132.324 +// Font weight of the main text ("normal", "bold", "bolder", "lighter", ect.)
 132.325 +// Only used if CSS inline styles are being used (ol_css = CSSSTYLE)
 132.326 +if (typeof ol_textweight == 'undefined') { var ol_textweight = "normal";}
 132.327 +
 132.328 +// Font size unit for the caption
 132.329 +// Only used if CSS inline styles are being used (ol_css = CSSSTYLE)
 132.330 +if (typeof ol_captionsizeunit == 'undefined') { var ol_captionsizeunit = "px";}
 132.331 +
 132.332 +// Decoration of the caption ("none", "underline", "line-through" or "blink")
 132.333 +// Only used if CSS inline styles are being used (ol_css = CSSSTYLE)
 132.334 +if (typeof ol_captiondecoration == 'undefined') { var ol_captiondecoration = "none";}
 132.335 +
 132.336 +// Font style of the caption ("normal" or "italic")
 132.337 +// Only used if CSS inline styles are being used (ol_css = CSSSTYLE)
 132.338 +if (typeof ol_captionstyle == 'undefined') { var ol_captionstyle = "normal";}
 132.339 +
 132.340 +// Font weight of the caption ("normal", "bold", "bolder", "lighter", ect.)
 132.341 +// Only used if CSS inline styles are being used (ol_css = CSSSTYLE)
 132.342 +if (typeof ol_captionweight == 'undefined') { var ol_captionweight = "bold";}
 132.343 +
 132.344 +// Font size unit for the close text
 132.345 +// Only used if CSS inline styles are being used (ol_css = CSSSTYLE)
 132.346 +if (typeof ol_closesizeunit == 'undefined') { var ol_closesizeunit = "px";}
 132.347 +
 132.348 +// Decoration of the close text ("none", "underline", "line-through" or "blink")
 132.349 +// Only used if CSS inline styles are being used (ol_css = CSSSTYLE)
 132.350 +if (typeof ol_closedecoration == 'undefined') { var ol_closedecoration = "none";}
 132.351 +
 132.352 +// Font style of the close text ("normal" or "italic")
 132.353 +// Only used if CSS inline styles are being used (ol_css = CSSSTYLE)
 132.354 +if (typeof ol_closestyle == 'undefined') { var ol_closestyle = "normal";}
 132.355 +
 132.356 +// Font weight of the close text ("normal", "bold", "bolder", "lighter", ect.)
 132.357 +// Only used if CSS inline styles are being used (ol_css = CSSSTYLE)
 132.358 +if (typeof ol_closeweight == 'undefined') { var ol_closeweight = "normal";}
 132.359 +
 132.360 +
 132.361 +
 132.362 +////////////////////////////////////////////////////////////////////////////////////
 132.363 +// ARRAY CONFIGURATION
 132.364 +// You don't have to change anything here if you don't want to. The following
 132.365 +// arrays can be filled with text and html if you don't wish to pass it from
 132.366 +// your html page.
 132.367 +////////////////////////////////////////////////////////////////////////////////////
 132.368 +
 132.369 +// Array with texts.
 132.370 +if (typeof ol_texts == 'undefined') { var ol_texts = new Array("Text 0", "Text 1"); }
 132.371 +
 132.372 +// Array with captions.
 132.373 +if (typeof ol_caps == 'undefined') { var ol_caps = new Array("Caption 0", "Caption 1"); }
 132.374 +
 132.375 +
 132.376 +////////////////////////////////////////////////////////////////////////////////////
 132.377 +// END CONFIGURATION
 132.378 +// Don't change anything below this line, all configuration is above.
 132.379 +////////////////////////////////////////////////////////////////////////////////////
 132.380 +
 132.381 +
 132.382 +
 132.383 +
 132.384 +
 132.385 +
 132.386 +
 132.387 +////////////////////////////////////////////////////////////////////////////////////
 132.388 +// INIT
 132.389 +////////////////////////////////////////////////////////////////////////////////////
 132.390 +
 132.391 +// Runtime variables init. Used for runtime only, don't change, not for config!
 132.392 +var o3_text = "";
 132.393 +var o3_cap = "";
 132.394 +var o3_sticky = 0;
 132.395 +var o3_background = "";
 132.396 +var o3_close = "Close";
 132.397 +var o3_hpos = RIGHT;
 132.398 +var o3_offsetx = 2;
 132.399 +var o3_offsety = 2;
 132.400 +var o3_fgcolor = "";
 132.401 +var o3_bgcolor = "";
 132.402 +var o3_textcolor = "";
 132.403 +var o3_capcolor = "";
 132.404 +var o3_closecolor = "";
 132.405 +var o3_width = 100;
 132.406 +var o3_border = 1;
 132.407 +var o3_status = "";
 132.408 +var o3_autostatus = 0;
 132.409 +var o3_height = -1;
 132.410 +var o3_snapx = 0;
 132.411 +var o3_snapy = 0;
 132.412 +var o3_fixx = -1;
 132.413 +var o3_fixy = -1;
 132.414 +var o3_fgbackground = "";
 132.415 +var o3_bgbackground = "";
 132.416 +var o3_padxl = 0;
 132.417 +var o3_padxr = 0;
 132.418 +var o3_padyt = 0;
 132.419 +var o3_padyb = 0;
 132.420 +var o3_fullhtml = 0;
 132.421 +var o3_vpos = BELOW;
 132.422 +var o3_aboveheight = 0;
 132.423 +var o3_capicon = "";
 132.424 +var o3_textfont = "Verdana,Arial,Helvetica";
 132.425 +var o3_captionfont = "Verdana,Arial,Helvetica";
 132.426 +var o3_closefont = "Verdana,Arial,Helvetica";
 132.427 +var o3_textsize = "1";
 132.428 +var o3_captionsize = "1";
 132.429 +var o3_closesize = "1";
 132.430 +var o3_frame = self;
 132.431 +var o3_timeout = 0;
 132.432 +var o3_timerid = 0;
 132.433 +var o3_allowmove = 0;
 132.434 +var o3_function = Function();
 132.435 +var o3_delay = 0;
 132.436 +var o3_delayid = 0;
 132.437 +var o3_hauto = 0;
 132.438 +var o3_vauto = 0;
 132.439 +var o3_closeclick = 0;
 132.440 +
 132.441 +var o3_css = CSSOFF;
 132.442 +var o3_fgclass = "";
 132.443 +var o3_bgclass = "";
 132.444 +var o3_textfontclass = "";
 132.445 +var o3_captionfontclass = "";
 132.446 +var o3_closefontclass = "";
 132.447 +var o3_padunit = "px";
 132.448 +var o3_heightunit = "px";
 132.449 +var o3_widthunit = "px";
 132.450 +var o3_textsizeunit = "px";
 132.451 +var o3_textdecoration = "";
 132.452 +var o3_textstyle = "";
 132.453 +var o3_textweight = "";
 132.454 +var o3_captionsizeunit = "px";
 132.455 +var o3_captiondecoration = "";
 132.456 +var o3_captionstyle = "";
 132.457 +var o3_captionweight = "";
 132.458 +var o3_closesizeunit = "px";
 132.459 +var o3_closedecoration = "";
 132.460 +var o3_closestyle = "";
 132.461 +var o3_closeweight = "";
 132.462 +
 132.463 +
 132.464 +
 132.465 +// Display state variables
 132.466 +var o3_x = 0;
 132.467 +var o3_y = 0;
 132.468 +var o3_allow = 0;
 132.469 +var o3_showingsticky = 0;
 132.470 +var o3_removecounter = 0;
 132.471 +
 132.472 +// Our layer
 132.473 +var over = null;
 132.474 +
 132.475 +
 132.476 +// Decide browser version
 132.477 +var ns4 = (document.layers)? true:false;
 132.478 +var ns6 = (document.getElementById)? true:false;
 132.479 +var ie4 = (document.all)? true:false;
 132.480 +var ie5 = false;
 132.481 +
 132.482 +// Microsoft Stupidity Check(tm).
 132.483 +if (ie4) {
 132.484 +	if ((navigator.userAgent.indexOf('MSIE 5') > 0) || (navigator.userAgent.indexOf('MSIE 6') > 0)) {
 132.485 +		ie5 = true;
 132.486 +	}
 132.487 +	if (ns6) {
 132.488 +		ns6 = false;
 132.489 +	}
 132.490 +}
 132.491 +
 132.492 +
 132.493 +// Capture events, alt. diffuses the overlib function.
 132.494 +if ( (ns4) || (ie4) || (ns6)) {
 132.495 +	document.onmousemove = mouseMove
 132.496 +	if (ns4) document.captureEvents(Event.MOUSEMOVE)
 132.497 +} else {
 132.498 +	overlib = no_overlib;
 132.499 +	nd = no_overlib;
 132.500 +	ver3fix = true;
 132.501 +}
 132.502 +
 132.503 +
 132.504 +// Fake function for 3.0 users.
 132.505 +function no_overlib() {
 132.506 +	return ver3fix;
 132.507 +}
 132.508 +
 132.509 +
 132.510 +
 132.511 +////////////////////////////////////////////////////////////////////////////////////
 132.512 +// PUBLIC FUNCTIONS
 132.513 +////////////////////////////////////////////////////////////////////////////////////
 132.514 +
 132.515 +
 132.516 +// overlib(arg0, ..., argN)
 132.517 +// Loads parameters into global runtime variables.
 132.518 +function overlib() {
 132.519 +	
 132.520 +	// Load defaults to runtime.
 132.521 +	o3_text = ol_text;
 132.522 +	o3_cap = ol_cap;
 132.523 +	o3_sticky = ol_sticky;
 132.524 +	o3_background = ol_background;
 132.525 +	o3_close = ol_close;
 132.526 +	o3_hpos = ol_hpos;
 132.527 +	o3_offsetx = ol_offsetx;
 132.528 +	o3_offsety = ol_offsety;
 132.529 +	o3_fgcolor = ol_fgcolor;
 132.530 +	o3_bgcolor = ol_bgcolor;
 132.531 +	o3_textcolor = ol_textcolor;
 132.532 +	o3_capcolor = ol_capcolor;
 132.533 +	o3_closecolor = ol_closecolor;
 132.534 +	o3_width = ol_width;
 132.535 +	o3_border = ol_border;
 132.536 +	o3_status = ol_status;
 132.537 +	o3_autostatus = ol_autostatus;
 132.538 +	o3_height = ol_height;
 132.539 +	o3_snapx = ol_snapx;
 132.540 +	o3_snapy = ol_snapy;
 132.541 +	o3_fixx = ol_fixx;
 132.542 +	o3_fixy = ol_fixy;
 132.543 +	o3_fgbackground = ol_fgbackground;
 132.544 +	o3_bgbackground = ol_bgbackground;
 132.545 +	o3_padxl = ol_padxl;
 132.546 +	o3_padxr = ol_padxr;
 132.547 +	o3_padyt = ol_padyt;
 132.548 +	o3_padyb = ol_padyb;
 132.549 +	o3_fullhtml = ol_fullhtml;
 132.550 +	o3_vpos = ol_vpos;
 132.551 +	o3_aboveheight = ol_aboveheight;
 132.552 +	o3_capicon = ol_capicon;
 132.553 +	o3_textfont = ol_textfont;
 132.554 +	o3_captionfont = ol_captionfont;
 132.555 +	o3_closefont = ol_closefont;
 132.556 +	o3_textsize = ol_textsize;
 132.557 +	o3_captionsize = ol_captionsize;
 132.558 +	o3_closesize = ol_closesize;
 132.559 +	o3_timeout = ol_timeout;
 132.560 +	o3_function = ol_function;
 132.561 +	o3_delay = ol_delay;
 132.562 +	o3_hauto = ol_hauto;
 132.563 +	o3_vauto = ol_vauto;
 132.564 +	o3_closeclick = ol_closeclick;
 132.565 +	
 132.566 +	o3_css = ol_css;
 132.567 +	o3_fgclass = ol_fgclass;
 132.568 +	o3_bgclass = ol_bgclass;
 132.569 +	o3_textfontclass = ol_textfontclass;
 132.570 +	o3_captionfontclass = ol_captionfontclass;
 132.571 +	o3_closefontclass = ol_closefontclass;
 132.572 +	o3_padunit = ol_padunit;
 132.573 +	o3_heightunit = ol_heightunit;
 132.574 +	o3_widthunit = ol_widthunit;
 132.575 +	o3_textsizeunit = ol_textsizeunit;
 132.576 +	o3_textdecoration = ol_textdecoration;
 132.577 +	o3_textstyle = ol_textstyle;
 132.578 +	o3_textweight = ol_textweight;
 132.579 +	o3_captionsizeunit = ol_captionsizeunit;
 132.580 +	o3_captiondecoration = ol_captiondecoration;
 132.581 +	o3_captionstyle = ol_captionstyle;
 132.582 +	o3_captionweight = ol_captionweight;
 132.583 +	o3_closesizeunit = ol_closesizeunit;
 132.584 +	o3_closedecoration = ol_closedecoration;
 132.585 +	o3_closestyle = ol_closestyle;
 132.586 +	o3_closeweight = ol_closeweight;
 132.587 +	
 132.588 +
 132.589 +	// Special for frame support, over must be reset...
 132.590 +	if ( (ns4) || (ie4) || (ns6) ) {
 132.591 +		o3_frame = ol_frame;
 132.592 +		if (ns4) over = o3_frame.document.overDiv
 132.593 +		if (ie4) over = o3_frame.overDiv.style
 132.594 +		if (ns6) over = o3_frame.document.getElementById("overDiv");
 132.595 +	}
 132.596 +	
 132.597 +	
 132.598 +	// What the next argument is expected to be.
 132.599 +	var parsemode = -1;
 132.600 +	
 132.601 +	var ar = arguments;
 132.602 +
 132.603 +	for (i = 0; i < ar.length; i++) {
 132.604 +
 132.605 +		if (parsemode < 0) {
 132.606 +			// Arg is maintext, unless INARRAY
 132.607 +			if (ar[i] == INARRAY) {
 132.608 +				o3_text = ol_texts[ar[++i]];
 132.609 +			} else {
 132.610 +				o3_text = ar[i];
 132.611 +			}
 132.612 +
 132.613 +			parsemode = 0;
 132.614 +		} else {
 132.615 +			// Note: NS4 doesn't like switch cases with vars.
 132.616 +			if (ar[i] == INARRAY) { o3_text = ol_texts[ar[++i]]; continue; }
 132.617 +			if (ar[i] == CAPARRAY) { o3_cap = ol_caps[ar[++i]]; continue; }
 132.618 +			if (ar[i] == STICKY) { o3_sticky = 1; continue; }
 132.619 +			if (ar[i] == BACKGROUND) { o3_background = ar[++i]; continue; }
 132.620 +			if (ar[i] == NOCLOSE) { o3_close = ""; continue; }
 132.621 +			if (ar[i] == CAPTION) { o3_cap = ar[++i]; continue; }
 132.622 +			if (ar[i] == CENTER || ar[i] == LEFT || ar[i] == RIGHT) { o3_hpos = ar[i]; continue; }
 132.623 +			if (ar[i] == OFFSETX) { o3_offsetx = ar[++i]; continue; }
 132.624 +			if (ar[i] == OFFSETY) { o3_offsety = ar[++i]; continue; }
 132.625 +			if (ar[i] == FGCOLOR) { o3_fgcolor = ar[++i]; continue; }
 132.626 +			if (ar[i] == BGCOLOR) { o3_bgcolor = ar[++i]; continue; }
 132.627 +			if (ar[i] == TEXTCOLOR) { o3_textcolor = ar[++i]; continue; }
 132.628 +			if (ar[i] == CAPCOLOR) { o3_capcolor = ar[++i]; continue; }
 132.629 +			if (ar[i] == CLOSECOLOR) { o3_closecolor = ar[++i]; continue; }
 132.630 +			if (ar[i] == WIDTH) { o3_width = ar[++i]; continue; }
 132.631 +			if (ar[i] == BORDER) { o3_border = ar[++i]; continue; }
 132.632 +			if (ar[i] == STATUS) { o3_status = ar[++i]; continue; }
 132.633 +			if (ar[i] == AUTOSTATUS) { o3_autostatus = 1; continue; }
 132.634 +			if (ar[i] == AUTOSTATUSCAP) { o3_autostatus = 2; continue; }
 132.635 +			if (ar[i] == HEIGHT) { o3_height = ar[++i]; o3_aboveheight = ar[i]; continue; } // Same param again.
 132.636 +			if (ar[i] == CLOSETEXT) { o3_close = ar[++i]; continue; }
 132.637 +			if (ar[i] == SNAPX) { o3_snapx = ar[++i]; continue; }
 132.638 +			if (ar[i] == SNAPY) { o3_snapy = ar[++i]; continue; }
 132.639 +			if (ar[i] == FIXX) { o3_fixx = ar[++i]; continue; }
 132.640 +			if (ar[i] == FIXY) { o3_fixy = ar[++i]; continue; }
 132.641 +			if (ar[i] == FGBACKGROUND) { o3_fgbackground = ar[++i]; continue; }
 132.642 +			if (ar[i] == BGBACKGROUND) { o3_bgbackground = ar[++i]; continue; }
 132.643 +			if (ar[i] == PADX) { o3_padxl = ar[++i]; o3_padxr = ar[++i]; continue; }
 132.644 +			if (ar[i] == PADY) { o3_padyt = ar[++i]; o3_padyb = ar[++i]; continue; }
 132.645 +			if (ar[i] == FULLHTML) { o3_fullhtml = 1; continue; }
 132.646 +			if (ar[i] == BELOW || ar[i] == ABOVE) { o3_vpos = ar[i]; continue; }
 132.647 +			if (ar[i] == CAPICON) { o3_capicon = ar[++i]; continue; }
 132.648 +			if (ar[i] == TEXTFONT) { o3_textfont = ar[++i]; continue; }
 132.649 +			if (ar[i] == CAPTIONFONT) { o3_captionfont = ar[++i]; continue; }
 132.650 +			if (ar[i] == CLOSEFONT) { o3_closefont = ar[++i]; continue; }
 132.651 +			if (ar[i] == TEXTSIZE) { o3_textsize = ar[++i]; continue; }
 132.652 +			if (ar[i] == CAPTIONSIZE) { o3_captionsize = ar[++i]; continue; }
 132.653 +			if (ar[i] == CLOSESIZE) { o3_closesize = ar[++i]; continue; }
 132.654 +			if (ar[i] == FRAME) { opt_FRAME(ar[++i]); continue; }
 132.655 +			if (ar[i] == TIMEOUT) { o3_timeout = ar[++i]; continue; }
 132.656 +			if (ar[i] == FUNCTION) { opt_FUNCTION(ar[++i]); continue; }
 132.657 +			if (ar[i] == DELAY) { o3_delay = ar[++i]; continue; }
 132.658 +			if (ar[i] == HAUTO) { o3_hauto = (o3_hauto == 0) ? 1 : 0; continue; }
 132.659 +			if (ar[i] == VAUTO) { o3_vauto = (o3_vauto == 0) ? 1 : 0; continue; }
 132.660 +			if (ar[i] == CLOSECLICK) { o3_closeclick = (o3_closeclick == 0) ? 1 : 0; continue; }
 132.661 +			if (ar[i] == CSSOFF) { o3_css = ar[i]; continue; }
 132.662 +			if (ar[i] == CSSSTYLE) { o3_css = ar[i]; continue; }
 132.663 +			if (ar[i] == CSSCLASS) { o3_css = ar[i]; continue; }
 132.664 +			if (ar[i] == FGCLASS) { o3_fgclass = ar[++i]; continue; }
 132.665 +			if (ar[i] == BGCLASS) { o3_bgclass = ar[++i]; continue; }
 132.666 +			if (ar[i] == TEXTFONTCLASS) { o3_textfontclass = ar[++i]; continue; }
 132.667 +			if (ar[i] == CAPTIONFONTCLASS) { o3_captionfontclass = ar[++i]; continue; }
 132.668 +			if (ar[i] == CLOSEFONTCLASS) { o3_closefontclass = ar[++i]; continue; }
 132.669 +			if (ar[i] == PADUNIT) { o3_padunit = ar[++i]; continue; }
 132.670 +			if (ar[i] == HEIGHTUNIT) { o3_heightunit = ar[++i]; continue; }
 132.671 +			if (ar[i] == WIDTHUNIT) { o3_widthunit = ar[++i]; continue; }
 132.672 +			if (ar[i] == TEXTSIZEUNIT) { o3_textsizeunit = ar[++i]; continue; }
 132.673 +			if (ar[i] == TEXTDECORATION) { o3_textdecoration = ar[++i]; continue; }
 132.674 +			if (ar[i] == TEXTSTYLE) { o3_textstyle = ar[++i]; continue; }
 132.675 +			if (ar[i] == TEXTWEIGHT) { o3_textweight = ar[++i]; continue; }
 132.676 +			if (ar[i] == CAPTIONSIZEUNIT) { o3_captionsizeunit = ar[++i]; continue; }
 132.677 +			if (ar[i] == CAPTIONDECORATION) { o3_captiondecoration = ar[++i]; continue; }
 132.678 +			if (ar[i] == CAPTIONSTYLE) { o3_captionstyle = ar[++i]; continue; }
 132.679 +			if (ar[i] == CAPTIONWEIGHT) { o3_captionweight = ar[++i]; continue; }
 132.680 +			if (ar[i] == CLOSESIZEUNIT) { o3_closesizeunit = ar[++i]; continue; }
 132.681 +			if (ar[i] == CLOSEDECORATION) { o3_closedecoration = ar[++i]; continue; }
 132.682 +			if (ar[i] == CLOSESTYLE) { o3_closestyle = ar[++i]; continue; }
 132.683 +			if (ar[i] == CLOSEWEIGHT) { o3_closeweight = ar[++i]; continue; }
 132.684 +		}
 132.685 +	}
 132.686 +
 132.687 +	if (o3_delay == 0) {
 132.688 +		return overlib350();
 132.689 +	} else {
 132.690 +		o3_delayid = setTimeout("overlib350()", o3_delay);
 132.691 +
 132.692 +		if (o3_sticky) {
 132.693 +			return false;
 132.694 +		} else {
 132.695 +			return true;
 132.696 +		}
 132.697 +	}
 132.698 +}
 132.699 +
 132.700 +
 132.701 +
 132.702 +// Clears popups if appropriate
 132.703 +function nd() {
 132.704 +	if ( o3_removecounter >= 1 ) { o3_showingsticky = 0 };
 132.705 +	if ( (ns4) || (ie4) || (ns6) ) {
 132.706 +		if ( o3_showingsticky == 0 ) {
 132.707 +			o3_allowmove = 0;
 132.708 +			if (over != null) hideObject(over);
 132.709 +		} else {
 132.710 +			o3_removecounter++;
 132.711 +		}
 132.712 +	}
 132.713 +	
 132.714 +	return true;
 132.715 +}
 132.716 +
 132.717 +
 132.718 +
 132.719 +
 132.720 +
 132.721 +
 132.722 +
 132.723 +////////////////////////////////////////////////////////////////////////////////////
 132.724 +// OVERLIB 3.50 FUNCTION
 132.725 +////////////////////////////////////////////////////////////////////////////////////
 132.726 +
 132.727 +
 132.728 +// This function decides what it is we want to display and how we want it done.
 132.729 +function overlib350() {
 132.730 +
 132.731 +	// Make layer content
 132.732 +	var layerhtml;
 132.733 +
 132.734 +	if (o3_background != "" || o3_fullhtml) {
 132.735 +		// Use background instead of box.
 132.736 +		layerhtml = ol_content_background(o3_text, o3_background, o3_fullhtml);
 132.737 +	} else {
 132.738 +		// They want a popup box.
 132.739 +
 132.740 +		// Prepare popup background
 132.741 +		if (o3_fgbackground != "" && o3_css == CSSOFF) {
 132.742 +			o3_fgbackground = "BACKGROUND=\""+o3_fgbackground+"\"";
 132.743 +		}
 132.744 +		if (o3_bgbackground != "" && o3_css == CSSOFF) {
 132.745 +			o3_bgbackground = "BACKGROUND=\""+o3_bgbackground+"\"";
 132.746 +		}
 132.747 +
 132.748 +		// Prepare popup colors
 132.749 +		if (o3_fgcolor != "" && o3_css == CSSOFF) {
 132.750 +			o3_fgcolor = "BGCOLOR=\""+o3_fgcolor+"\"";
 132.751 +		}
 132.752 +		if (o3_bgcolor != "" && o3_css == CSSOFF) {
 132.753 +			o3_bgcolor = "BGCOLOR=\""+o3_bgcolor+"\"";
 132.754 +		}
 132.755 +
 132.756 +		// Prepare popup height
 132.757 +		if (o3_height > 0 && o3_css == CSSOFF) {
 132.758 +			o3_height = "HEIGHT=" + o3_height;
 132.759 +		} else {
 132.760 +			o3_height = "";
 132.761 +		}
 132.762 +
 132.763 +		// Decide which kinda box.
 132.764 +		if (o3_cap == "") {
 132.765 +			// Plain
 132.766 +			layerhtml = ol_content_simple(o3_text);
 132.767 +		} else {
 132.768 +			// With caption
 132.769 +			if (o3_sticky) {
 132.770 +				// Show close text
 132.771 +				layerhtml = ol_content_caption(o3_text, o3_cap, o3_close);
 132.772 +			} else {
 132.773 +				// No close text
 132.774 +				layerhtml = ol_content_caption(o3_text, o3_cap, "");
 132.775 +			}
 132.776 +		}
 132.777 +	}
 132.778 +	
 132.779 +	// We want it to stick!
 132.780 +	if (o3_sticky) {
 132.781 +		o3_showingsticky = 1;
 132.782 +		o3_removecounter = 0;
 132.783 +	}
 132.784 +	
 132.785 +	// Write layer
 132.786 +	layerWrite(layerhtml);
 132.787 +	
 132.788 +	// Prepare status bar
 132.789 +	if (o3_autostatus > 0) {
 132.790 +		o3_status = o3_text;
 132.791 +		if (o3_autostatus > 1) {
 132.792 +			o3_status = o3_cap;
 132.793 +		}
 132.794 +	}
 132.795 +
 132.796 +	// When placing the layer the first time, even stickies may be moved.
 132.797 +	o3_allowmove = 0;
 132.798 +
 132.799 +	// Initiate a timer for timeout
 132.800 +	if (o3_timeout > 0) {          
 132.801 +		if (o3_timerid > 0) clearTimeout(o3_timerid);
 132.802 +		o3_timerid = setTimeout("cClick()", o3_timeout);
 132.803 +	}
 132.804 +
 132.805 +	// Show layer
 132.806 +	disp(o3_status);
 132.807 +
 132.808 +	// Stickies should stay where they are.	
 132.809 +	if (o3_sticky) {
 132.810 +		o3_allowmove = 0;
 132.811 +		return false;
 132.812 +	} else {
 132.813 +		return true;
 132.814 +	}
 132.815 +}
 132.816 +
 132.817 +
 132.818 +
 132.819 +////////////////////////////////////////////////////////////////////////////////////
 132.820 +// LAYER GENERATION FUNCTIONS
 132.821 +////////////////////////////////////////////////////////////////////////////////////
 132.822 +
 132.823 +// Makes simple table without caption
 132.824 +function ol_content_simple(text) {
 132.825 +	if (o3_css == CSSCLASS) txt = "<TABLE WIDTH="+o3_width+" BORDER=0 CELLPADDING="+o3_border+" CELLSPACING=0 class=\""+o3_bgclass+"\"><TR><TD><TABLE WIDTH=100% BORDER=0 CELLPADDING=2 CELLSPACING=0 class=\""+o3_fgclass+"\"><TR><TD VALIGN=TOP><FONT class=\""+o3_textfontclass+"\">"+text+"</FONT></TD></TR></TABLE></TD></TR></TABLE>";
 132.826 +	if (o3_css == CSSSTYLE) txt = "<TABLE WIDTH="+o3_width+" BORDER=0 CELLPADDING="+o3_border+" CELLSPACING=0 style=\"background-color: "+o3_bgcolor+"; height: "+o3_height+o3_heightunit+";\"><TR><TD><TABLE WIDTH=100% BORDER=0 CELLPADDING=2 CELLSPACING=0 style=\"color: "+o3_fgcolor+"; background-color: "+o3_fgcolor+"; height: "+o3_height+o3_heightunit+";\"><TR><TD VALIGN=TOP><FONT style=\"font-family: "+o3_textfont+"; color: "+o3_textcolor+"; font-size: "+o3_textsize+o3_textsizeunit+"; text-decoration: "+o3_textdecoration+"; font-weight: "+o3_textweight+"; font-style:"+o3_textstyle+"\">"+text+"</FONT></TD></TR></TABLE></TD></TR></TABLE>";
 132.827 +	if (o3_css == CSSOFF) txt = "<TABLE WIDTH="+o3_width+" BORDER=0 CELLPADDING="+o3_border+" CELLSPACING=0 "+o3_bgcolor+" "+o3_height+"><TR><TD><TABLE WIDTH=100% BORDER=0 CELLPADDING=2 CELLSPACING=0 "+o3_fgcolor+" "+o3_fgbackground+" "+o3_height+"><TR><TD VALIGN=TOP><FONT FACE=\""+o3_textfont+"\" COLOR=\""+o3_textcolor+"\" SIZE=\""+o3_textsize+"\">"+text+"</FONT></TD></TR></TABLE></TD></TR></TABLE>";
 132.828 +
 132.829 +	set_background("");
 132.830 +	return txt;
 132.831 +}
 132.832 +
 132.833 +
 132.834 +
 132.835 +
 132.836 +// Makes table with caption and optional close link
 132.837 +function ol_content_caption(text, title, close) {
 132.838 +	closing = "";
 132.839 +	closeevent = "onMouseOver";
 132.840 +
 132.841 +	if (o3_closeclick == 1) closeevent = "onClick";
 132.842 +	if (o3_capicon != "") o3_capicon = "<IMG SRC=\""+o3_capicon+"\"> ";
 132.843 +
 132.844 +	if (close != "") {
 132.845 +		if (o3_css == CSSCLASS) closing = "<TD ALIGN=RIGHT><A HREF=\"/\" "+closeevent+"=\"return cClick();\" class=\""+o3_closefontclass+"\">"+close+"</A></TD>";
 132.846 +		if (o3_css == CSSSTYLE) closing = "<TD ALIGN=RIGHT><A HREF=\"/\" "+closeevent+"=\"return cClick();\" style=\"color: "+o3_closecolor+"; font-family: "+o3_closefont+"; font-size: "+o3_closesize+o3_closesizeunit+"; text-decoration: "+o3_closedecoration+"; font-weight: "+o3_closeweight+"; font-style:"+o3_closestyle+";\">"+close+"</A></TD>";
 132.847 +		if (o3_css == CSSOFF) closing = "<TD ALIGN=RIGHT><A HREF=\"/\" "+closeevent+"=\"return cClick();\"><FONT COLOR=\""+o3_closecolor+"\" FACE=\""+o3_closefont+"\" SIZE=\""+o3_closesize+"\">"+close+"</FONT></A></TD>";
 132.848 +	}
 132.849 +
 132.850 +	if (o3_css == CSSCLASS) txt = "<TABLE WIDTH="+o3_width+" BORDER=0 CELLPADDING="+o3_border+" CELLSPACING=0 class=\""+o3_bgclass+"\"><TR><TD><TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0><TR><TD><FONT class=\""+o3_captionfontclass+"\">"+o3_capicon+title+"</FONT></TD>"+closing+"</TR></TABLE><TABLE WIDTH=100% BORDER=0 CELLPADDING=2 CELLSPACING=0 class=\""+o3_fgclass+"\"><TR><TD VALIGN=TOP><FONT class=\""+o3_textfontclass+"\">"+text+"</FONT></TD></TR></TABLE></TD></TR></TABLE>";
 132.851 +	if (o3_css == CSSSTYLE) txt = "<TABLE WIDTH="+o3_width+" BORDER=0 CELLPADDING="+o3_border+" CELLSPACING=0 style=\"background-color: "+o3_bgcolor+"; background-image: url("+o3_bgbackground+"); height: "+o3_height+o3_heightunit+";\"><TR><TD><TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0><TR><TD><FONT style=\"font-family: "+o3_captionfont+"; color: "+o3_capcolor+"; font-size: "+o3_captionsize+o3_captionsizeunit+"; font-weight: "+o3_captionweight+"; font-style: "+o3_captionstyle+";\">"+o3_capicon+title+"</FONT></TD>"+closing+"</TR></TABLE><TABLE WIDTH=100% BORDER=0 CELLPADDING=2 CELLSPACING=0 style=\"color: "+o3_fgcolor+"; background-color: "+o3_fgcolor+"; height: "+o3_height+o3_heightunit+";\"><TR><TD VALIGN=TOP><FONT style=\"font-family: "+o3_textfont+"; color: "+o3_textcolor+"; font-size: "+o3_textsize+o3_textsizeunit+"; text-decoration: "+o3_textdecoration+"; font-weight: "+o3_textweight+"; font-style:"+o3_textstyle+"\">"+text+"</FONT></TD></TR></TABLE></TD></TR></TABLE>";
 132.852 +	if (o3_css == CSSOFF) txt = "<TABLE WIDTH="+o3_width+" BORDER=0 CELLPADDING="+o3_border+" CELLSPACING=0 "+o3_bgcolor+" "+o3_bgbackground+" "+o3_height+"><TR><TD><TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0><TR><TD><B><FONT COLOR=\""+o3_capcolor+"\" FACE=\""+o3_captionfont+"\" SIZE=\""+o3_captionsize+"\">"+o3_capicon+title+"</FONT></B></TD>"+closing+"</TR></TABLE><TABLE WIDTH=100% BORDER=0 CELLPADDING=2 CELLSPACING=0 "+o3_fgcolor+" "+o3_fgbackground+" "+o3_height+"><TR><TD VALIGN=TOP><FONT COLOR=\""+o3_textcolor+"\" FACE=\""+o3_textfont+"\" SIZE=\""+o3_textsize+"\">"+text+"</FONT></TD></TR></TABLE></TD></TR></TABLE>";
 132.853 +
 132.854 +	set_background("");
 132.855 +	return txt;
 132.856 +}
 132.857 +
 132.858 +// Sets the background picture, padding and lots more. :)
 132.859 +function ol_content_background(text, picture, hasfullhtml) {
 132.860 +	if (hasfullhtml) {
 132.861 +		txt = text;
 132.862 +	} else {
 132.863 +		if (o3_css == CSSCLASS) txt = "<TABLE WIDTH="+o3_width+o3_widthunit+" BORDER=0 CELLPADDING=0 CELLSPACING=0 HEIGHT="+o3_height+o3_heightunit+"><TR><TD COLSPAN=3 HEIGHT="+o3_padyt+o3_padunit+"></TD></TR><TR><TD WIDTH="+o3_padxl+o3_padunit+"></TD><TD VALIGN=TOP WIDTH="+(o3_width-o3_padxl-o3_padxr)+o3_padunit+"><FONT class=\""+o3_textfontclass+"\">"+text+"</FONT></TD><TD WIDTH="+o3_padxr+o3_padunit+"></TD></TR><TR><TD COLSPAN=3 HEIGHT="+o3_padyb+o3_padunit+"></TD></TR></TABLE>";
 132.864 +		if (o3_css == CSSSTYLE) txt = "<TABLE WIDTH="+o3_width+o3_widthunit+" BORDER=0 CELLPADDING=0 CELLSPACING=0 HEIGHT="+o3_height+o3_heightunit+"><TR><TD COLSPAN=3 HEIGHT="+o3_padyt+o3_padunit+"></TD></TR><TR><TD WIDTH="+o3_padxl+o3_padunit+"></TD><TD VALIGN=TOP WIDTH="+(o3_width-o3_padxl-o3_padxr)+o3_padunit+"><FONT style=\"font-family: "+o3_textfont+"; color: "+o3_textcolor+"; font-size: "+o3_textsize+o3_textsizeunit+";\">"+text+"</FONT></TD><TD WIDTH="+o3_padxr+o3_padunit+"></TD></TR><TR><TD COLSPAN=3 HEIGHT="+o3_padyb+o3_padunit+"></TD></TR></TABLE>";
 132.865 +		if (o3_css == CSSOFF) txt = "<TABLE WIDTH="+o3_width+" BORDER=0 CELLPADDING=0 CELLSPACING=0 HEIGHT="+o3_height+"><TR><TD COLSPAN=3 HEIGHT="+o3_padyt+"></TD></TR><TR><TD WIDTH="+o3_padxl+"></TD><TD VALIGN=TOP WIDTH="+(o3_width-o3_padxl-o3_padxr)+"><FONT FACE=\""+o3_textfont+"\" COLOR=\""+o3_textcolor+"\" SIZE=\""+o3_textsize+"\">"+text+"</FONT></TD><TD WIDTH="+o3_padxr+"></TD></TR><TR><TD COLSPAN=3 HEIGHT="+o3_padyb+"></TD></TR></TABLE>";
 132.866 +	}
 132.867 +	set_background(picture);
 132.868 +	return txt;
 132.869 +}
 132.870 +
 132.871 +// Loads a picture into the div.
 132.872 +function set_background(pic) {
 132.873 +	if (pic == "") {
 132.874 +		if (ie4) over.backgroundImage = "none";
 132.875 +		if (ns6) over.style.backgroundImage = "none";
 132.876 +	} else {
 132.877 +		if (ns4) {
 132.878 +			over.background.src = pic;
 132.879 +		} else if (ie4) {
 132.880 +			over.backgroundImage = "url("+pic+")";
 132.881 +		} else if (ns6) {
 132.882 +			over.style.backgroundImage = "url("+pic+")";
 132.883 +		}
 132.884 +	}
 132.885 +}
 132.886 +
 132.887 +
 132.888 +
 132.889 +////////////////////////////////////////////////////////////////////////////////////
 132.890 +// HANDLING FUNCTIONS
 132.891 +////////////////////////////////////////////////////////////////////////////////////
 132.892 +
 132.893 +
 132.894 +// Displays the popup
 132.895 +function disp(statustext) {
 132.896 +	if ( (ns4) || (ie4) || (ns6) ) {
 132.897 +		if (o3_allowmove == 0) 	{
 132.898 +			placeLayer();
 132.899 +			showObject(over);
 132.900 +			o3_allowmove = 1;
 132.901 +		}
 132.902 +	}
 132.903 +
 132.904 +	if (statustext != "") {
 132.905 +		self.status = statustext;
 132.906 +	}
 132.907 +}
 132.908 +
 132.909 +// Decides where we want the popup.
 132.910 +function placeLayer() {
 132.911 +	var placeX, placeY;
 132.912 +	
 132.913 +	// HORIZONTAL PLACEMENT
 132.914 +	if (o3_fixx > -1) {
 132.915 +		// Fixed position
 132.916 +		placeX = o3_fixx;
 132.917 +	} else {
 132.918 +		winoffset = (ie4) ? o3_frame.document.body.scrollLeft : o3_frame.pageXOffset;
 132.919 +		if (ie4) iwidth = o3_frame.document.body.clientWidth;
 132.920 +		if (ns4) iwidth = o3_frame.innerWidth; // was screwed in mozilla, fixed now?
 132.921 +		if (ns6) iwidth = o3_frame.outerWidth;
 132.922 +		
 132.923 +		// If HAUTO, decide what to use.
 132.924 +		if (o3_hauto == 1) {
 132.925 +			if ( (o3_x - winoffset) > ((eval(iwidth)) / 2)) {
 132.926 +				o3_hpos = LEFT;
 132.927 +			} else {
 132.928 +				o3_hpos = RIGHT;
 132.929 +			}
 132.930 +		}
 132.931 +		
 132.932 +		// From mouse
 132.933 +		if (o3_hpos == CENTER) { // Center
 132.934 +			placeX = o3_x+o3_offsetx-(o3_width/2);
 132.935 +		}
 132.936 +		if (o3_hpos == RIGHT) { // Right
 132.937 +			placeX = o3_x+o3_offsetx;
 132.938 +			if ( (eval(placeX) + eval(o3_width)) > (winoffset + iwidth) ) {
 132.939 +				placeX = iwidth + winoffset - o3_width;
 132.940 +				if (placeX < 0) placeX = 0;
 132.941 +			}
 132.942 +		}
 132.943 +		if (o3_hpos == LEFT) { // Left
 132.944 +			placeX = o3_x-o3_offsetx-o3_width;
 132.945 +			if (placeX < winoffset) placeX = winoffset;
 132.946 +		}
 132.947 +	
 132.948 +		// Snapping!
 132.949 +		if (o3_snapx > 1) {
 132.950 +			var snapping = placeX % o3_snapx;
 132.951 +			if (o3_hpos == LEFT) {
 132.952 +				placeX = placeX - (o3_snapx + snapping);
 132.953 +			} else {
 132.954 +				// CENTER and RIGHT
 132.955 +				placeX = placeX + (o3_snapx - snapping);
 132.956 +			}
 132.957 +			if (placeX < winoffset) placeX = winoffset;
 132.958 +		}
 132.959 +	}
 132.960 +
 132.961 +	
 132.962 +	
 132.963 +	// VERTICAL PLACEMENT
 132.964 +	if (o3_fixy > -1) {
 132.965 +		// Fixed position
 132.966 +		placeY = o3_fixy;
 132.967 +	} else {
 132.968 +		scrolloffset = (ie4) ? o3_frame.document.body.scrollTop : o3_frame.pageYOffset;
 132.969 +
 132.970 +		// If VAUTO, decide what to use.
 132.971 +		if (o3_vauto == 1) {
 132.972 +			if (ie4) iheight = o3_frame.document.body.clientHeight;
 132.973 +			if (ns4) iheight = o3_frame.innerHeight;
 132.974 +			if (ns6) iheight = o3_frame.outerHeight;
 132.975 +
 132.976 +			iheight = (eval(iheight)) / 2;
 132.977 +			if ( (o3_y - scrolloffset) > iheight) {
 132.978 +				o3_vpos = ABOVE;
 132.979 +			} else {
 132.980 +				o3_vpos = BELOW;
 132.981 +			}
 132.982 +		}
 132.983 +
 132.984 +
 132.985 +		// From mouse
 132.986 +		if (o3_vpos == ABOVE) {
 132.987 +			if (o3_aboveheight == 0) {
 132.988 +				var divref = (ie4) ? o3_frame.document.all['overDiv'] : over;
 132.989 +				o3_aboveheight = (ns4) ? divref.clip.height : divref.offsetHeight;
 132.990 +			}
 132.991 +
 132.992 +			placeY = o3_y - (o3_aboveheight + o3_offsety);
 132.993 +			if (placeY < scrolloffset) placeY = scrolloffset;
 132.994 +		} else {
 132.995 +			// BELOW
 132.996 +			placeY = o3_y + o3_offsety;
 132.997 +		}
 132.998 +
 132.999 +		// Snapping!
132.1000 +		if (o3_snapy > 1) {
132.1001 +			var snapping = placeY % o3_snapy;
132.1002 +			
132.1003 +			if (o3_aboveheight > 0 && o3_vpos == ABOVE) {
132.1004 +				placeY = placeY - (o3_snapy + snapping);
132.1005 +			} else {
132.1006 +				placeY = placeY + (o3_snapy - snapping);
132.1007 +			}
132.1008 +			
132.1009 +			if (placeY < scrolloffset) placeY = scrolloffset;
132.1010 +		}
132.1011 +	}
132.1012 +
132.1013 +
132.1014 +	// Actually move the object.	
132.1015 +	repositionTo(over, placeX, placeY);
132.1016 +}
132.1017 +
132.1018 +
132.1019 +// Moves the layer
132.1020 +function mouseMove(e) {
132.1021 +	if ( (ns4) || (ns6) ) {o3_x=e.pageX; o3_y=e.pageY;}
132.1022 +	if (ie4) {o3_x=event.x; o3_y=event.y;}
132.1023 +	if (ie5) {o3_x=event.x+o3_frame.document.body.scrollLeft; o3_y=event.y+o3_frame.document.body.scrollTop;}
132.1024 +	
132.1025 +	if (o3_allowmove == 1) {
132.1026 +		placeLayer();
132.1027 +	}
132.1028 +}
132.1029 +
132.1030 +// The Close onMouseOver function for stickies
132.1031 +function cClick() {
132.1032 +	hideObject(over);
132.1033 +	o3_showingsticky = 0;
132.1034 +	
132.1035 +	return false;
132.1036 +}
132.1037 +
132.1038 +
132.1039 +// Makes sure target frame has overLIB
132.1040 +function compatibleframe(frameid) {        
132.1041 +	if (ns4) {
132.1042 +		if (typeof frameid.document.overDiv =='undefined') return false;
132.1043 +	} else if (ie4) {
132.1044 +		if (typeof frameid.document.all["overDiv"] =='undefined') return false;
132.1045 +	} else if (ns6) {
132.1046 +		if (frameid.document.getElementById('overDiv') == null) return false;
132.1047 +	}
132.1048 +
132.1049 +	return true;
132.1050 +}
132.1051 +
132.1052 +
132.1053 +
132.1054 +////////////////////////////////////////////////////////////////////////////////////
132.1055 +// LAYER FUNCTIONS
132.1056 +////////////////////////////////////////////////////////////////////////////////////
132.1057 +
132.1058 +
132.1059 +// Writes to a layer
132.1060 +function layerWrite(txt) {
132.1061 +	txt += "\n";
132.1062 +	
132.1063 +        if (ns4) {
132.1064 +                var lyr = o3_frame.document.overDiv.document
132.1065 +
132.1066 +                lyr.write(txt)
132.1067 +                lyr.close()
132.1068 +        } else if (ie4) {
132.1069 +		o3_frame.document.all["overDiv"].innerHTML = txt
132.1070 +	} else if (ns6) {
132.1071 +		range = o3_frame.document.createRange();
132.1072 +		range.setStartBefore(over);
132.1073 +		domfrag = range.createContextualFragment(txt);
132.1074 +		while (over.hasChildNodes()) {
132.1075 +			over.removeChild(over.lastChild);
132.1076 +		}
132.1077 +		over.appendChild(domfrag);
132.1078 +	}
132.1079 +}
132.1080 +
132.1081 +// Make an object visible
132.1082 +function showObject(obj) {
132.1083 +        if (ns4) obj.visibility = "show";
132.1084 +        else if (ie4) obj.visibility = "visible";
132.1085 +	else if (ns6) obj.style.visibility = "visible";
132.1086 +}
132.1087 +
132.1088 +// Hides an object
132.1089 +function hideObject(obj) {
132.1090 +        if (ns4) obj.visibility = "hide";
132.1091 +        else if (ie4) obj.visibility = "hidden";
132.1092 +	else if (ns6) obj.style.visibility = "hidden";
132.1093 +        
132.1094 +	if (o3_timerid > 0) clearTimeout(o3_timerid);
132.1095 +	if (o3_delayid > 0) clearTimeout(o3_delayid);
132.1096 +	o3_timerid = 0;
132.1097 +	o3_delayid = 0;
132.1098 +        self.status = "";
132.1099 +}
132.1100 +
132.1101 +// Move a layer
132.1102 +function repositionTo(obj,xL,yL) {
132.1103 +	if ( (ns4) || (ie4) ) {
132.1104 +	        obj.left = xL;
132.1105 +	        obj.top = yL;
132.1106 +	} else if (ns6) {
132.1107 +		obj.style.left = xL + "px";
132.1108 +		obj.style.top = yL+ "px";
132.1109 +	}
132.1110 +}
132.1111 +
132.1112 +
132.1113 +
132.1114 +
132.1115 +
132.1116 +////////////////////////////////////////////////////////////////////////////////////
132.1117 +// PARSER FUNCTIONS
132.1118 +////////////////////////////////////////////////////////////////////////////////////
132.1119 +
132.1120 +
132.1121 +// Defines which frame we should point to.
132.1122 +function opt_FRAME(frm) {
132.1123 +        o3_frame = compatibleframe(frm) ? frm : ol_frame;
132.1124 +
132.1125 +	if ( (ns4) || (ie4 || (ns6)) ) {
132.1126 +		if (ns4) over = o3_frame.document.overDiv;
132.1127 +		if (ie4) over = o3_frame.overDiv.style;
132.1128 +		if (ns6) over = o3_frame.document.getElementById("overDiv");
132.1129 +	}
132.1130 +
132.1131 +	return 0;
132.1132 +}
132.1133 +
132.1134 +// Calls an external function
132.1135 +function opt_FUNCTION(callme) {
132.1136 +	o3_text = callme()
132.1137 +	return 0;
132.1138 +}
132.1139 +
132.1140 +
132.1141 +
132.1142 +
132.1143 +//end (For internal purposes.)
132.1144 +////////////////////////////////////////////////////////////////////////////////////
132.1145 +// OVERLIB 2 COMPATABILITY FUNCTIONS
132.1146 +// If you aren't upgrading you can remove the below section.
132.1147 +////////////////////////////////////////////////////////////////////////////////////
132.1148 +
132.1149 +// Converts old 0=left, 1=right and 2=center into constants.
132.1150 +function vpos_convert(d) {
132.1151 +	if (d == 0) {
132.1152 +		d = LEFT;
132.1153 +	} else {
132.1154 +		if (d == 1) {
132.1155 +			d = RIGHT;
132.1156 +		} else {
132.1157 +			d = CENTER;
132.1158 +		}
132.1159 +	}
132.1160 +	
132.1161 +	return d;
132.1162 +}
132.1163 +
132.1164 +// Simple popup
132.1165 +function dts(d,text) {
132.1166 +	o3_hpos = vpos_convert(d);
132.1167 +	overlib(text, o3_hpos, CAPTION, "");
132.1168 +}
132.1169 +
132.1170 +// Caption popup
132.1171 +function dtc(d,text, title) {
132.1172 +	o3_hpos = vpos_convert(d);
132.1173 +	overlib(text, CAPTION, title, o3_hpos);
132.1174 +}
132.1175 +
132.1176 +// Sticky
132.1177 +function stc(d,text, title) {
132.1178 +	o3_hpos = vpos_convert(d);
132.1179 +	overlib(text, CAPTION, title, o3_hpos, STICKY);
132.1180 +}
132.1181 +
132.1182 +// Simple popup right
132.1183 +function drs(text) {
132.1184 +	dts(1,text);
132.1185 +}
132.1186 +
132.1187 +// Caption popup right
132.1188 +function drc(text, title) {
132.1189 +	dtc(1,text,title);
132.1190 +}
132.1191 +
132.1192 +// Sticky caption right
132.1193 +function src(text,title) {
132.1194 +	stc(1,text,title);
132.1195 +}
132.1196 +
132.1197 +// Simple popup left
132.1198 +function dls(text) {
132.1199 +	dts(0,text);
132.1200 +}
132.1201 +
132.1202 +// Caption popup left
132.1203 +function dlc(text, title) {
132.1204 +	dtc(0,text,title);
132.1205 +}
132.1206 +
132.1207 +// Sticky caption left
132.1208 +function slc(text,title) {
132.1209 +	stc(0,text,title);
132.1210 +}
132.1211 +
132.1212 +// Simple popup center
132.1213 +function dcs(text) {
132.1214 +	dts(2,text);
132.1215 +}
132.1216 +
132.1217 +// Caption popup center
132.1218 +function dcc(text, title) {
132.1219 +	dtc(2,text,title);
132.1220 +}
132.1221 +
132.1222 +// Sticky caption center
132.1223 +function scc(text,title) {
132.1224 +	stc(2,text,title);
132.1225 +}
   133.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   133.2 +++ b/java/cewolf-1.0/src/site/brief.html	Sat Feb 28 21:31:02 2009 +0100
   133.3 @@ -0,0 +1,104 @@
   133.4 +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
   133.5 +<html>
   133.6 +<head>
   133.7 +  <title></title>
   133.8 +  <meta name="author" content="Guido Laures">
   133.9 +  <link href="cewolf.css" rel="stylesheet" type="text/css">
  133.10 +</head>
  133.11 +<body>
  133.12 +<h1>Introduction</h1>
  133.13 +<p class="Body"> Cewolf can be used inside a Servlet/JSP based web
  133.14 +application to embed complex graphical charts of all kinds (e.g. line,
  133.15 +pie, bar chart, plots, etc.) into a web page. Therefore it provides a
  133.16 +full featured tag library to define all properties of the chart (colors,
  133.17 +strokes, legend, etc.). Thus the JSP which embedds the chart is not
  133.18 +polluted with any java code. Everything is described with XML conform
  133.19 +tags. </p>
  133.20 +<p> Cewolf is based on <a
  133.21 + href="http://www.object-refinery.com/jfreechart/">JFreeChart</a> and
  133.22 +uses it's rendering engine to render the final chart image into the
  133.23 +clients response stream. No files are created on server side. Everything
  133.24 +is based on lightweight session objects and dynamic data analysis.
  133.25 +Cewolf consists of one servlet which handles the chart rendering and a
  133.26 +taglibrary which translates the chart definition included in the JSP
  133.27 +into an HTML img tag which consults the rendering servlet for retrieval
  133.28 +of the appropriate chart. </p>
  133.29 +<p> Simce the project has been funded in the middle of 2002 there have
  133.30 +been <b>more then 150.000 page views and 16.000 downloads</b>
  133.31 +(Sourceforge activity max: &gt;99,7%). </p>
  133.32 +<p>
  133.33 +<table border="1" cellpadding="5">
  133.34 +  <tbody>
  133.35 +    <tr>
  133.36 +      <th class="featureGroup">Fully free and open</th>
  133.37 +      <th class="featureGroup">100% Java compliant</th>
  133.38 +    </tr>
  133.39 +    <tr>
  133.40 +      <td valign="top">
  133.41 +      <ul>
  133.42 +        <li>LGPL license</li>
  133.43 +        <li>no charges</li>
  133.44 +        <li>no restrictions</li>
  133.45 +        <li>Support on <a
  133.46 + href="http://sourceforge.net/projects/cewolf">SourceForge Forums</a></li>
  133.47 +        <li>short development and upgrade circles</li>
  133.48 +      </ul>
  133.49 +      </td>
  133.50 +      <td valign="top">
  133.51 +      <ul>
  133.52 +        <li>no usage of native libraries</li>
  133.53 +        <li>should run in every J2EE compliant server or servlet
  133.54 +container</li>
  133.55 +        <li>extensive usage of available open source projects</li>
  133.56 +      </ul>
  133.57 +      </td>
  133.58 +    </tr>
  133.59 +    <tr>
  133.60 +      <th class="featureGroup">Full featured Chart Tag Library</th>
  133.61 +      <th class="featureGroup">Huge number of different Charts</th>
  133.62 +    </tr>
  133.63 +    <tr>
  133.64 +      <td valign="top">
  133.65 +      <ul>
  133.66 +        <li>no java coding inside the JSP needed</li>
  133.67 +        <li>XML description of a chart</li>
  133.68 +        <li>design time validation of chart tags</li>
  133.69 +        <li>extensive <a href="taglib.html">tag documentation</a></li>
  133.70 +      </ul>
  133.71 +      </td>
  133.72 +      <td valign="top">
  133.73 +      <ul>
  133.74 +        <li>Line [XY]</li>
  133.75 +        <li>[3D] Pie</li>
  133.76 +        <li>[3D] Horizonal Bar</li>
  133.77 +        <li>[3D] Vertical [XY] Bar</li>
  133.78 +        <li>[3D] Stacked Vertical Bar</li>
  133.79 +        <li>Area [XY]</li>
  133.80 +        <li>Scatter Plot</li>
  133.81 +        <li>Candlestick</li>
  133.82 +        <li>High Low</li>
  133.83 +        <li>Gantt</li>
  133.84 +        <li>Meter</li>
  133.85 +        <li>Overlaid</li>
  133.86 +        <li>Combined</li>
  133.87 +      </ul>
  133.88 +      </td>
  133.89 +    </tr>
  133.90 +  </tbody>
  133.91 +</table>
  133.92 +</p>
  133.93 +<p> </p>
  133.94 +<h1>Example</h1>
  133.95 +<p> You can simply define a chart by including a chart tag into your JSP
  133.96 +like this: </p>
  133.97 +<pre>&lt;cewolf:chart <br>    id="XYChart"<br>    type="xy"<br>    title="XYChart" <br>    &lt;cewolf:gradient&gt;<br>        &lt;cewolf:point x="0" y="0" color="#FFFFFF"/&gt;<br>        &lt;cewolf:point x="0" y="300" color="#C8C8C8"/&gt;<br>    &lt;/cewolf:gradient&gt;<br>    &lt;cewolf:data&gt;<br>        &lt;cewolf:producer id="xyData"/&gt;<br>    &lt;/cewolf:data&gt;<br>&lt;/cewolf:chart&gt;<br>&lt;cewolf:img chartid="XYChart" renderer="cewolf" width="400" height="300"/&gt;<br></pre>
  133.98 +<p> This results in a rendered chart like this: </p>
  133.99 +<img alt="examplechart" src="img/examplexy.png">
 133.100 +<p> As you can see only the view is defined in the JSP page. The model
 133.101 +is produced by a so called DataProducer which must be available in the
 133.102 +pageContext of the JSP. </p>
 133.103 +<a href="http://sourceforge.net" target="new" height="30"><img
 133.104 + src="http://sourceforge.net/sflogo.php?group_id=57282&amp;type=5"
 133.105 + height="30" border="0" alt="SourceForge Logo"></a>
 133.106 +</body>
 133.107 +</html>
   134.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   134.2 +++ b/java/cewolf-1.0/src/site/cewolf.css	Sat Feb 28 21:31:02 2009 +0100
   134.3 @@ -0,0 +1,105 @@
   134.4 +BODY {
   134.5 +	FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif;
   134.6 +	FONT-SIZE: 11px;
   134.7 +	LINE-HEIGHT: 16px;
   134.8 +    background: #DDE8F2;
   134.9 +  color:#333333;
  134.10 +  padding: 30px 180px 0px 35px;
  134.11 +}
  134.12 +
  134.13 +TD   {
  134.14 +	FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif;
  134.15 +	FONT-SIZE: 11px;
  134.16 +	LINE-HEIGHT: 16px;
  134.17 +    background: #DDE8F2;
  134.18 +  color:#BE4602;
  134.19 +}
  134.20 +
  134.21 +TH {
  134.22 +	FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif;
  134.23 +	FONT-SIZE: 11px;
  134.24 +	LINE-HEIGHT: 16px;
  134.25 +  color:#BE4602;
  134.26 +	FONT-weight: bold;
  134.27 +}
  134.28 +
  134.29 +a:link {
  134.30 +    text-decoration:none; 
  134.31 +    font-weight:bold; 
  134.32 +    color:#BE4602; 
  134.33 +}
  134.34 +
  134.35 +a:visited {
  134.36 +    text-decoration:none; 
  134.37 +    font-weight:bold; 
  134.38 +    color:#BE4602; 
  134.39 +}
  134.40 +
  134.41 +a:hover {
  134.42 +    text-decoration:none; 
  134.43 +    font-weight:bold; 
  134.44 +    background-color:#FFFFFF; 
  134.45 +}
  134.46 +
  134.47 +a:active {
  134.48 +    text-decoration:none; 
  134.49 +    font-weight:bold; 
  134.50 +    background-color:#FFFFFF; 
  134.51 +}
  134.52 +
  134.53 +a.body:link {
  134.54 +    text-decoration:none; 
  134.55 +    font-weight:bold; 
  134.56 +    color:#BE4602; 
  134.57 +}
  134.58 +
  134.59 +a.body:visited {
  134.60 +    text-decoration:none; 
  134.61 +    font-weight:bold; 
  134.62 +    color:#BE4602; 
  134.63 +}
  134.64 +
  134.65 +a.body:hover {
  134.66 +    text-decoration:none; 
  134.67 +    font-weight:bold; 
  134.68 +    color:#BE4602; 
  134.69 +}
  134.70 +
  134.71 +H1 {
  134.72 +	FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif;
  134.73 +	FONT-SIZE: 15px;
  134.74 +	FONT-WEIGHT: bold;
  134.75 +	margin-bottom : 3px;
  134.76 +  color:#BE4602;
  134.77 +}
  134.78 +
  134.79 +H2 {
  134.80 +	FONT-FAMILY: Verdana, Arial, Verdana, Helvetica, sans-serif;
  134.81 +	FONT-SIZE: 13px;
  134.82 +	FONT-WEIGHT: bold;
  134.83 +	margin-bottom : 0px;
  134.84 +	margin-top : 6px;
  134.85 +  color:#BE4602;
  134.86 +}
  134.87 +
  134.88 +H3 {
  134.89 +	FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif;
  134.90 +	FONT-SIZE: 11px;
  134.91 +	FONT-WEIGHT: bold;
  134.92 +	margin-bottom : 0px;
  134.93 +	margin-top : 6px;
  134.94 +  color:#BE4602;
  134.95 +}
  134.96 +
  134.97 +IMG {
  134.98 +    border: 0px;
  134.99 +}
 134.100 +
 134.101 +.featureGroup {
 134.102 +	FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif;
 134.103 +	FONT-weight: bold;
 134.104 +	FONT-SIZE: 12px;
 134.105 +  color:#BE4602;
 134.106 +  background: #FEFED2;
 134.107 +}
 134.108 +
   135.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   135.2 +++ b/java/cewolf-1.0/src/site/chartdatasetcombinations.html	Sat Feb 28 21:31:02 2009 +0100
   135.3 @@ -0,0 +1,199 @@
   135.4 +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
   135.5 +
   135.6 +<HTML>
   135.7 +<HEAD>
   135.8 +	
   135.9 +	<META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=windows-1252">
  135.10 +	<TITLE></TITLE>
  135.11 +	<META NAME="GENERATOR" CONTENT="OpenOffice.org 1.0.2  (Win32)">
  135.12 +	<META NAME="AUTHOR" CONTENT="Guido Laures">
  135.13 +	<META NAME="CREATED" CONTENT="20030713;16224800">
  135.14 +	<META NAME="CHANGEDBY" CONTENT="Guido Laures">
  135.15 +	<META NAME="CHANGED" CONTENT="20030812;19391315">
  135.16 +	
  135.17 +	<STYLE>
  135.18 +		<!-- 
  135.19 +		BODY,DIV,TABLE,THEAD,TBODY,TFOOT,TR,TH,TD,P { font-family:"Albany"; font-size:x-small }
  135.20 +		 -->
  135.21 +	</STYLE>
  135.22 +	
  135.23 +</HEAD>
  135.24 +
  135.25 +<BODY TEXT="#000000">
  135.26 +<TABLE FRAME=VOID CELLSPACING=0 COLS=4 RULES=GROUPS BORDER=1>
  135.27 +	<COLGROUP><COL WIDTH=133><COL WIDTH=184><COL WIDTH=184><COL WIDTH=198></COLGROUP>
  135.28 +	<TBODY>
  135.29 +		<TR>
  135.30 +			<TD WIDTH=133 HEIGHT=27 ALIGN=CENTER><B><I><FONT SIZE=4>Chart</FONT></I></B></TD>
  135.31 +			<TD WIDTH=184 HEIGHT=27 ALIGN=CENTER><B><I><FONT SIZE=4>Dataset</FONT></I></B></TD>
  135.32 +			<TD WIDTH=184 HEIGHT=27 ALIGN=CENTER><B><I><FONT SIZE=4>Plot</FONT></I></B></TD>
  135.33 +			<TD WIDTH=198 HEIGHT=27 ALIGN=CENTER><B><I><FONT SIZE=4>Renderer</FONT></I></B></TD>
  135.34 +		</TR>
  135.35 +		<TR>
  135.36 +			<TD WIDTH=133 HEIGHT=17 ALIGN=LEFT>area</TD>
  135.37 +			<TD WIDTH=184 HEIGHT=17 ALIGN=LEFT>CategoryDataset</TD>
  135.38 +			<TD WIDTH=184 HEIGHT=17 ALIGN=LEFT>VerticalCategoryPlot</TD>
  135.39 +			<TD WIDTH=198 HEIGHT=17 ALIGN=LEFT>AreaRenderer</TD>
  135.40 +		</TR>
  135.41 +		<TR>
  135.42 +			<TD WIDTH=133 HEIGHT=17 ALIGN=LEFT>areaxy</TD>
  135.43 +			<TD WIDTH=184 HEIGHT=17 ALIGN=LEFT>XYDataset</TD>
  135.44 +			<TD WIDTH=184 HEIGHT=17 ALIGN=LEFT>XYPlot</TD>
  135.45 +			<TD WIDTH=198 HEIGHT=17 ALIGN=LEFT><BR></TD>
  135.46 +		</TR>
  135.47 +		<TR>
  135.48 +			<TD WIDTH=133 HEIGHT=17 ALIGN=LEFT>horizontalbar</TD>
  135.49 +			<TD WIDTH=184 HEIGHT=17 ALIGN=LEFT>CategoryDataset</TD>
  135.50 +			<TD WIDTH=184 HEIGHT=17 ALIGN=LEFT><BR></TD>
  135.51 +			<TD WIDTH=198 HEIGHT=17 ALIGN=LEFT><BR></TD>
  135.52 +		</TR>
  135.53 +		<TR>
  135.54 +			<TD WIDTH=133 HEIGHT=17 ALIGN=LEFT>horizontalbar3d</TD>
  135.55 +			<TD WIDTH=184 HEIGHT=17 ALIGN=LEFT>CategoryDataset</TD>
  135.56 +			<TD WIDTH=184 HEIGHT=17 ALIGN=LEFT>HorizontalCategoryPlot</TD>
  135.57 +			<TD WIDTH=198 HEIGHT=17 ALIGN=LEFT>HorizontalBarRenderer3D</TD>
  135.58 +		</TR>
  135.59 +		<TR>
  135.60 +			<TD WIDTH=133 HEIGHT=17 ALIGN=LEFT>line</TD>
  135.61 +			<TD WIDTH=184 HEIGHT=17 ALIGN=LEFT>CategoryDataset</TD>
  135.62 +			<TD WIDTH=184 HEIGHT=17 ALIGN=LEFT>VerticalCategoryPlot</TD>
  135.63 +			<TD WIDTH=198 HEIGHT=17 ALIGN=LEFT>LineAndShapeRenderer</TD>
  135.64 +		</TR>
  135.65 +		<TR>
  135.66 +			<TD WIDTH=133 HEIGHT=17 ALIGN=LEFT>pie</TD>
  135.67 +			<TD WIDTH=184 HEIGHT=17 ALIGN=LEFT>PieDataset</TD>
  135.68 +			<TD WIDTH=184 HEIGHT=17 ALIGN=LEFT>PiePlot</TD>
  135.69 +			<TD WIDTH=198 HEIGHT=17 ALIGN=LEFT><BR></TD>
  135.70 +		</TR>
  135.71 +		<TR>
  135.72 +			<TD WIDTH=133 HEIGHT=17 ALIGN=LEFT>scatter</TD>
  135.73 +			<TD WIDTH=184 HEIGHT=17 ALIGN=LEFT>XYDataset</TD>
  135.74 +			<TD WIDTH=184 HEIGHT=17 ALIGN=LEFT>XYPlot</TD>
  135.75 +			<TD WIDTH=198 HEIGHT=17 ALIGN=LEFT>AreaRenderer</TD>
  135.76 +		</TR>
  135.77 +		<TR>
  135.78 +			<TD WIDTH=133 HEIGHT=17 ALIGN=LEFT>stackedhorizontalbar</TD>
  135.79 +			<TD WIDTH=184 HEIGHT=17 ALIGN=LEFT>CategoryDataset</TD>
  135.80 +			<TD WIDTH=184 HEIGHT=17 ALIGN=LEFT>HorizontalCategoryPlot</TD>
  135.81 +			<TD WIDTH=198 HEIGHT=17 ALIGN=LEFT>StackedHorizontalBarRenderer</TD>
  135.82 +		</TR>
  135.83 +		<TR>
  135.84 +			<TD WIDTH=133 HEIGHT=17 ALIGN=LEFT>stackedverticalbar</TD>
  135.85 +			<TD WIDTH=184 HEIGHT=17 ALIGN=LEFT>CategoryDataset</TD>
  135.86 +			<TD WIDTH=184 HEIGHT=17 ALIGN=LEFT>VerticalCategoryPlot</TD>
  135.87 +			<TD WIDTH=198 HEIGHT=17 ALIGN=LEFT>StackedVerticalBarRenderer</TD>
  135.88 +		</TR>
  135.89 +		<TR>
  135.90 +			<TD WIDTH=133 HEIGHT=17 ALIGN=LEFT>stackedverticalbar3d</TD>
  135.91 +			<TD WIDTH=184 HEIGHT=17 ALIGN=LEFT>CategoryDataset</TD>
  135.92 +			<TD WIDTH=184 HEIGHT=17 ALIGN=LEFT>VerticalCategoryPlot</TD>
  135.93 +			<TD WIDTH=198 HEIGHT=17 ALIGN=LEFT>StackedVerticalBarRenderer3D</TD>
  135.94 +		</TR>
  135.95 +		<TR>
  135.96 +			<TD WIDTH=133 HEIGHT=17 ALIGN=LEFT>timeseries</TD>
  135.97 +			<TD WIDTH=184 HEIGHT=17 ALIGN=LEFT>XYDataset</TD>
  135.98 +			<TD WIDTH=184 HEIGHT=17 ALIGN=LEFT><BR></TD>
  135.99 +			<TD WIDTH=198 HEIGHT=17 ALIGN=LEFT><BR></TD>
 135.100 +		</TR>
 135.101 +		<TR>
 135.102 +			<TD WIDTH=133 HEIGHT=17 ALIGN=LEFT>verticalbar</TD>
 135.103 +			<TD WIDTH=184 HEIGHT=17 ALIGN=LEFT>CategoryDataset</TD>
 135.104 +			<TD WIDTH=184 HEIGHT=17 ALIGN=LEFT><BR></TD>
 135.105 +			<TD WIDTH=198 HEIGHT=17 ALIGN=LEFT><BR></TD>
 135.106 +		</TR>
 135.107 +		<TR>
 135.108 +			<TD WIDTH=133 HEIGHT=17 ALIGN=LEFT>verticalbar3d</TD>
 135.109 +			<TD WIDTH=184 HEIGHT=17 ALIGN=LEFT>CategoryDataset</TD>
 135.110 +			<TD WIDTH=184 HEIGHT=17 ALIGN=LEFT><BR></TD>
 135.111 +			<TD WIDTH=198 HEIGHT=17 ALIGN=LEFT><BR></TD>
 135.112 +		</TR>
 135.113 +		<TR>
 135.114 +			<TD WIDTH=133 HEIGHT=17 ALIGN=LEFT>xy</TD>
 135.115 +			<TD WIDTH=184 HEIGHT=17 ALIGN=LEFT>XYDataset</TD>
 135.116 +			<TD WIDTH=184 HEIGHT=17 ALIGN=LEFT>XYPlot</TD>
 135.117 +			<TD WIDTH=198 HEIGHT=17 ALIGN=LEFT>StandardXYItemRenderer</TD>
 135.118 +		</TR>
 135.119 +		<TR>
 135.120 +			<TD WIDTH=133 HEIGHT=17 ALIGN=LEFT>candlestick</TD>
 135.121 +			<TD WIDTH=184 HEIGHT=17 ALIGN=LEFT>HighLowDataset</TD>
 135.122 +			<TD WIDTH=184 HEIGHT=17 ALIGN=LEFT><BR></TD>
 135.123 +			<TD WIDTH=198 HEIGHT=17 ALIGN=LEFT><BR></TD>
 135.124 +		</TR>
 135.125 +		<TR>
 135.126 +			<TD WIDTH=133 HEIGHT=17 ALIGN=LEFT>highlow</TD>
 135.127 +			<TD WIDTH=184 HEIGHT=17 ALIGN=LEFT>HighLowDataset</TD>
 135.128 +			<TD WIDTH=184 HEIGHT=17 ALIGN=LEFT><BR></TD>
 135.129 +			<TD WIDTH=198 HEIGHT=17 ALIGN=LEFT><BR></TD>
 135.130 +		</TR>
 135.131 +		<TR>
 135.132 +			<TD WIDTH=133 HEIGHT=17 ALIGN=LEFT>gantt</TD>
 135.133 +			<TD WIDTH=184 HEIGHT=17 ALIGN=LEFT>IntervalCategoryDataset</TD>
 135.134 +			<TD WIDTH=184 HEIGHT=17 ALIGN=LEFT>HorizontalCategoryPlot</TD>
 135.135 +			<TD WIDTH=198 HEIGHT=17 ALIGN=LEFT>HorizontalIntervalBarRenderer</TD>
 135.136 +		</TR>
 135.137 +		<TR>
 135.138 +			<TD WIDTH=133 HEIGHT=17 ALIGN=LEFT>wind</TD>
 135.139 +			<TD WIDTH=184 HEIGHT=17 ALIGN=LEFT>WindDataset</TD>
 135.140 +			<TD WIDTH=184 HEIGHT=17 ALIGN=LEFT><BR></TD>
 135.141 +			<TD WIDTH=198 HEIGHT=17 ALIGN=LEFT><BR></TD>
 135.142 +		</TR>
 135.143 +		<TR>
 135.144 +			<TD WIDTH=133 HEIGHT=17 ALIGN=LEFT>signal</TD>
 135.145 +			<TD WIDTH=184 HEIGHT=17 ALIGN=LEFT>SignalsDataset</TD>
 135.146 +			<TD WIDTH=184 HEIGHT=17 ALIGN=LEFT><BR></TD>
 135.147 +			<TD WIDTH=198 HEIGHT=17 ALIGN=LEFT><BR></TD>
 135.148 +		</TR>
 135.149 +		<TR>
 135.150 +			<TD WIDTH=133 HEIGHT=17 ALIGN=LEFT>verticalxybar</TD>
 135.151 +			<TD WIDTH=184 HEIGHT=17 ALIGN=LEFT>IntervalXYDataset</TD>
 135.152 +			<TD WIDTH=184 HEIGHT=17 ALIGN=LEFT><BR></TD>
 135.153 +			<TD WIDTH=198 HEIGHT=17 ALIGN=LEFT><BR></TD>
 135.154 +		</TR>
 135.155 +		<TR>
 135.156 +			<TD WIDTH=133 HEIGHT=17 ALIGN=LEFT>pie3d</TD>
 135.157 +			<TD WIDTH=184 HEIGHT=17 ALIGN=LEFT>PieDataset</TD>
 135.158 +			<TD WIDTH=184 HEIGHT=17 ALIGN=LEFT><BR></TD>
 135.159 +			<TD WIDTH=198 HEIGHT=17 ALIGN=LEFT><BR></TD>
 135.160 +		</TR>
 135.161 +		<TR>
 135.162 +			<TD WIDTH=133 HEIGHT=17 ALIGN=LEFT>overlaidxy</TD>
 135.163 +			<TD WIDTH=184 HEIGHT=17 ALIGN=LEFT><BR></TD>
 135.164 +			<TD WIDTH=184 HEIGHT=17 ALIGN=LEFT><BR></TD>
 135.165 +			<TD WIDTH=198 HEIGHT=17 ALIGN=LEFT><BR></TD>
 135.166 +		</TR>
 135.167 +		<TR>
 135.168 +			<TD WIDTH=133 HEIGHT=17 ALIGN=LEFT>overlaidcategory</TD>
 135.169 +			<TD WIDTH=184 HEIGHT=17 ALIGN=LEFT><BR></TD>
 135.170 +			<TD WIDTH=184 HEIGHT=17 ALIGN=LEFT><BR></TD>
 135.171 +			<TD WIDTH=198 HEIGHT=17 ALIGN=LEFT><BR></TD>
 135.172 +		</TR>
 135.173 +		<TR>
 135.174 +			<TD WIDTH=133 HEIGHT=17 ALIGN=LEFT>combinedxy</TD>
 135.175 +			<TD WIDTH=184 HEIGHT=17 ALIGN=LEFT><BR></TD>
 135.176 +			<TD WIDTH=184 HEIGHT=17 ALIGN=LEFT><BR></TD>
 135.177 +			<TD WIDTH=198 HEIGHT=17 ALIGN=LEFT><BR></TD>
 135.178 +		</TR>
 135.179 +		<TR>
 135.180 +			<TD WIDTH=133 HEIGHT=17 ALIGN=LEFT>meter</TD>
 135.181 +			<TD WIDTH=184 HEIGHT=17 ALIGN=LEFT>MeterDataset</TD>
 135.182 +			<TD WIDTH=184 HEIGHT=17 ALIGN=LEFT>MeterPlot</TD>
 135.183 +			<TD WIDTH=198 HEIGHT=17 ALIGN=LEFT><BR></TD>
 135.184 +		</TR>
 135.185 +		<TR>
 135.186 +			<TD WIDTH=133 HEIGHT=17 ALIGN=LEFT>stackedarea</TD>
 135.187 +			<TD WIDTH=184 HEIGHT=17 ALIGN=LEFT>CategoryDataset</TD>
 135.188 +			<TD WIDTH=184 HEIGHT=17 ALIGN=LEFT>VerticalCategoryPlot</TD>
 135.189 +			<TD WIDTH=198 HEIGHT=17 ALIGN=LEFT>StackedAreaRenderer</TD>
 135.190 +		</TR>
 135.191 +		<TR>
 135.192 +			<TD WIDTH=133 HEIGHT=17 ALIGN=LEFT>bubble</TD>
 135.193 +			<TD WIDTH=184 HEIGHT=17 ALIGN=LEFT>XYZDataset</TD>
 135.194 +			<TD WIDTH=184 HEIGHT=17 ALIGN=LEFT><BR></TD>
 135.195 +			<TD WIDTH=198 HEIGHT=17 ALIGN=LEFT><BR></TD>
 135.196 +		</TR>
 135.197 +	</TBODY>
 135.198 +</TABLE>
 135.199 +<!-- ************************************************************************** -->
 135.200 +</BODY>
 135.201 +
 135.202 +</HTML>
   136.1 Binary file java/cewolf-1.0/src/site/chartdatasetcombinations.sxc has changed
   137.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   137.2 +++ b/java/cewolf-1.0/src/site/demo.html	Sat Feb 28 21:31:02 2009 +0100
   137.3 @@ -0,0 +1,22 @@
   137.4 +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
   137.5 +<html>
   137.6 +<head>
   137.7 +  <title></title>
   137.8 +  <meta name="author" content="Guido Laures">
   137.9 +  <link href="cewolf.css" rel="stylesheet" type="text/css">
  137.10 +</head>
  137.11 +<body>
  137.12 +<h1><a name="Demos">Screens</a></h1>
  137.13 +<p> These are some demo shots of charts generated by Cewolf/JFreeChart.
  137.14 +In sum Cewolf supports 20 types of charts. </p>
  137.15 +<img alt="Horizontal3DChart" src="img/examplehoriz3d.png">&nbsp; <img
  137.16 + alt="Overlaid" src="img/exampleoverlaid.png">&nbsp; <img
  137.17 + alt="PieChart" src="img/examplepie.png">&nbsp; <img alt="ScatterPlot"
  137.18 + src="img/examplescatter.png">&nbsp; <img alt="ScatterPlot"
  137.19 + src="img/examplevert3d.png">&nbsp; <img alt="Vertical3DChart"
  137.20 + src="img/examplexy.png">&nbsp;
  137.21 +<p> <a href="http://sourceforge.net" target="new" height="30"><img
  137.22 + src="http://sourceforge.net/sflogo.php?group_id=57282&amp;type=5"
  137.23 + height="30" border="0" alt="SourceForge Logo"></a> </p>
  137.24 +</body>
  137.25 +</html>
   138.1 Binary file java/cewolf-1.0/src/site/developerguide.sxw has changed
   139.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   139.2 +++ b/java/cewolf-1.0/src/site/devguide.html	Sat Feb 28 21:31:02 2009 +0100
   139.3 @@ -0,0 +1,47 @@
   139.4 +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
   139.5 +<html>
   139.6 +<head>
   139.7 +  <title></title>
   139.8 +  <meta name="author" content="Guido Laures">
   139.9 +  <link href="cewolf.css" rel="stylesheet" type="text/css">
  139.10 +</head>
  139.11 +<body>
  139.12 +<h1><a name="Developer Guido">Developer Guide</a></h1>
  139.13 +<p> Let us assume the following (standard) scenario in which Cewolf
  139.14 +might be a solution.<br>
  139.15 +You have a running web application and you want to know which pages are
  139.16 +most visited by your users. You want to have a vertical bar chart which
  139.17 +looks like the one below </p>
  139.18 +<p> <img src="img/guidevbarchart.gif" alt="verticalbar"> </p>
  139.19 +<p> </p>
  139.20 +<h2>1. Prepare Your Application</h2>
  139.21 +<p> If you have not yet downloaded the Cewolf distribution, this is the
  139.22 +point when you should do it (look at <a
  139.23 + href="http://sourceforge.net/project/showfiles.php?group_id=57282"
  139.24 + target="new">Download</a>). Put the <tt>cewolf.jar</tt> file into your
  139.25 +web application's <tt>/WEB-INF/lib</tt> directory.<br>
  139.26 +That should be all you have to do to prepare your application for
  139.27 +Cewolf usage. If you encounter any problems in using the Cewolf tags
  139.28 +(e.g. "No Tags" is displayed in your containers console) you can
  139.29 +additionally put the <tt>cewolf.tld</tt> file from the distribution's <tt>etc</tt>
  139.30 +directory into a directory of your choice under your web application's
  139.31 +root and reference this file as the cewolf tag library from your JSPs. </p>
  139.32 +<h2>2. Provide a DatasetProducer</h2>
  139.33 +<p> As Cewolf uses a MVC (Model-View-Control) approach the data which
  139.34 +are shown in your chart are separated from the view defined in the JSP
  139.35 +page. So you can change them separately. To provide the chart with the
  139.36 +correct data you must provide an object which implements the interface<tt>de.laures.cewolf.DatasetProducer</tt>.
  139.37 +This object is asked to produce data every time a chart is rendered.
  139.38 +Below you see an implementation of a DatasetProducer which could be used
  139.39 +to provide data needed for our example scenario. </p>
  139.40 +<p> </p>
  139.41 +to be continued ...
  139.42 +<h2>3. Install the Cewolf Servlet in your Web App</h2>
  139.43 +tbd.
  139.44 +<h2>4. Define the chart in your JSP</h2>
  139.45 +<pre>&lt;%@page contentType="text/html"%&gt;<br>&lt;%@taglib uri='/WEB-INF/cewolf.tld' prefix='cewolf' %&gt;<br>&lt;jsp:useBean id="pageViews" class="de.laures.cewolf.example.PageViewCountData"/&gt;<br>&lt;cewolf:chart <br>    id="horizontalBarChart" <br>    title="HorizontalBarChart" <br>    renderer="servlet/chart" <br>    width="300" height="300" <br>    type="horizontalBar" <br>    xAxisLabel="Page" <br>    yAxisLabel="Views"&gt;<br>    &lt;cewolf:data producer="pageViews" /&gt;<br>&lt;/cewolf:chart&gt;<br></pre>
  139.46 +<p> <a href="http://sourceforge.net" target="new" height="30"><img
  139.47 + src="http://sourceforge.net/sflogo.php?group_id=57282&amp;type=5"
  139.48 + height="30" border="0" alt="SourceForge Logo"></a> </p>
  139.49 +</body>
  139.50 +</html>
   140.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   140.2 +++ b/java/cewolf-1.0/src/site/faq/faq.html	Sat Feb 28 21:31:02 2009 +0100
   140.3 @@ -0,0 +1,97 @@
   140.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
   140.5 +<html>
   140.6 +<head>
   140.7 +<title>Cewolf FAQ</title>
   140.8 +<meta name="author" content="Guido Laures">
   140.9 +<link href="../cewolf.css" rel="stylesheet" type="text/css">
  140.10 +</head>
  140.11 +<body>
  140.12 +<h1>Cewolf FAQ</h1>
  140.13 +</body>
  140.14 +</html>
  140.15 +
  140.16 +
  140.17 +<p><i>FAQ Revised: Monday 09 June 2003 23:18:38</i></p>
  140.18 +<hr><h2>Table of Contents</h2>
  140.19 +<dl>
  140.20 +<dt><b>1. General</b></dt>
  140.21 +<dd><ul>
  140.22 +<li><a href="#General0">1.1. What is the purpose of Cewolf?</a></li>
  140.23 +<li><a href="#General1">1.2. Who wrote it?</a></li>
  140.24 +<li><a href="#General2">1.3. Why has Cewolf been developped?</a></li>
  140.25 +</ul></dd>
  140.26 +<dt><b>2. Troubleshooting</b></dt>
  140.27 +<dd><ul>
  140.28 +<li><a href="#Troubleshooting0">2.1. I'm using Cewolf under Unix/Linux. When trying to access a chart I get a NoClassDefFoundError. What am I doing wrong?</a></li>
  140.29 +<li><a href="#Troubleshooting1">2.2. Why does the same chart display again and again even though the data changes?</a></li>
  140.30 +</ul></dd>
  140.31 +</dl>
  140.32 +<hr><h2>1. General</h2>
  140.33 +<dl>
  140.34 +<dt><b><a name="General0">1.1. What is the purpose of Cewolf?</a></b></dt>
  140.35 +<dd>Cewolf enables web applications running in a servlet container to easily include chart images.<br><br></dd>
  140.36 +<dt><b><a name="General1">1.2. Who wrote it?</a></b></dt>
  140.37 +<dd><a href="mailto:guido.laures@users.sourceforge.net">Guido Laures</a> wrote the initial program and released it.<br><br></dd>
  140.38 +<dt><b><a name="General2">1.3. Why has Cewolf been developped?</a></b></dt>
  140.39 +<dd>While developing a web application which needed to provide some chart images Guido 
  140.40 +found out that there is no open source library which provides the ability to define chart images
  140.41 +as JSP tags. So he started to write a simple tag library based on the famous JFreeChart library
  140.42 +for standalone chart images.<br>
  140.43 +In June 2002 Guido decided to donate his library to the public and named it Cewolf.<br><br></dd>
  140.44 +</dl>
  140.45 +<hr><h2>2. Troubleshooting</h2>
  140.46 +<dl>
  140.47 +<dt><b><a name="Troubleshooting0">2.1. I'm using Cewolf under Unix/Linux. When trying to access a chart I get a NoClassDefFoundError. What am I doing wrong?</a></b></dt>
  140.48 +<dd>Essentially, this is a variation of the headless Linux server problem. 
  140.49 +    If there are any Linux wizards out there (I use SuSE 7.1) to point out better solutions, I'd be happy to hear them.<br>
  140.50 +
  140.51 +I was not quite convinced it would be the same problem many other people had, since I _have_ an X server running. However, it is sitting there, idling away with KDM (the KDE Display Manager), and I could not find a way to make that display available to java. I tried to connect to it, tried to set xhost +, but no avail. In the end, I used (as root)
  140.52 +startx -- :2
  140.53 +to start another X server on display :2 (localhost is implied). Unfortunately, startx will start KDE, so the libraries are loaded into memory, but that is a minor annoyance. There might be a possibility of starting just the X server or a minor window manager (twm for example), but I tried with env WANTEDWM=twm startx -- :2 &, but KDE got loaded anyway. In essence, the Xvfb solution might just be the thing I use next time.
  140.54 +<br>
  140.55 +Then, all you have to do is tell Tomcat to use display 2 for painting:
  140.56 +env DISPLAY=:2 bin/startup.sh
  140.57 +(being in /opt/tomcat4).
  140.58 +<br>
  140.59 +Other posts I found helpful were:
  140.60 +<a href="http://www.object-refinery.com/phorum-3.3.2a/read.php?f=2&i=2987&t=2987">http://www.object-refinery.com/phorum-3.3.2a/read.php?f=2&i=2987&t=2987</a>
  140.61 +<a href="http://forum.java.sun.com/thread.jsp?forum=4&thread=201773">http://forum.java.sun.com/thread.jsp?forum=4&thread=201773</a>
  140.62 +<a href="http://forum.java.sun.com/thread.jsp?forum=20&thread=132877">http://forum.java.sun.com/thread.jsp?forum=20&thread=132877</a>
  140.63 +<br>
  140.64 +Generally, try to look for 'headless' on java.sun.com (be sure to include the forums!).
  140.65 +<br>
  140.66 +Why didn't I use the headless option of JDK1.4?
  140.67 +Of course I tried, but the Cewolf classes include a call to de.laures.cewolf.util.ImageHelper, which in its static initializer will throw a headless exception. I verified this under NT and Linux. :(
  140.68 +<br>
  140.69 +One good method to troubleshoot is to call the servlet directly: in IE, right-click on the image (presumably missing, otherwise you wouldn't be here...), choose Properties, select the whole path and copy the path into the address line. Call this, and you will get a stack trace detailing the problem. However, it might be necessary to reload the application in between - somehow, only the stack trace of the first call is useful, the next calls to the same servlet will result in a much more generic (bland) error message.
  140.70 +<br>
  140.71 +With the method above I was able to use the Cewolf.war files from versions 0.7, 0.8 and 0.8.1. However, only the testpage worked satisfyingly in all cases. The Cewolf set in some circumstances created a<br>
  140.72 +<pre>
  140.73 +java.lang.ClassCastException: sun.awt.image.DataBufferNative
  140.74 +at sun.awt.image.codec.JPEGImangeEncoderImpl.encode(lines 405, called from 228 and 235)
  140.75 +at de.laures.cewolf.taglib.Renderer.renderLegend(Renderer.java:97)
  140.76 +at de.laures.cewolf.taglib.LegendTag.doStartTag(LegendTag.java:56)
  140.77 +at org.apache.jsp.cewolfset_jsp. and so on........
  140.78 +</pre>
  140.79 +This is in 0.8.1. In the cewolfset of 0.7, most charts render fine, except for the last two, where it says 'Separate legend befor chart rendering' [sic] and 'Pie Chart with separate legend after chart rendering'. Both charts render fine, but the legends don't. Using above mentioned technique to render the servlet alone (the path is localhost:8080/Cewolf-0.7/cewolf?id=pie&action=renderlegend), the known ClassCastException appears again.
  140.80 +<br>
  140.81 +The one thing I still don't get is why my own application does not work on Linux, even though I use the exact same war file on NT without problems. I just get the empty windows, no stack traces in any logs, and calling the servlets alone gets the ClassCastException again, even though I don't think I do anything differently than in the testpage code.
  140.82 +I just tried to do it under JDK1.4.1_01, but no change (except that the ClassCastException doesn't mention sun.awt.image.DataBufferNative anymore). JDK1.3 might work (I get to see the complete Cewolfset, including the legends), only that I get another error in my DataProvider in a call to Calendar.setTimeInMillis (was protected in 1.3 and is public in 1.4). This error message was what prompted me to switch over to 1.4 in the first place... But I can fix that. Or wait until the casting problem is solved.<br><br></dd>
  140.83 +<dt><b><a name="Troubleshooting1">2.2. Why does the same chart display again and again even though the data changes?</a></b></dt>
  140.84 +<dd>A DatasetProducer is supposed to generate the same data when passed in the same paramters. So Cewolf returns a cached instance of a chart if there
  140.85 +is no change in parameters. If your DatasetProducer produces different data even when parameters do not change you can add a
  140.86 +fake parameter (e.g. time) to avoid caching.<br>
  140.87 +Since version 0.9 this issue has been fixed with the new methods in the DatasetProducer interface.<br><br></dd>
  140.88 +</dl>
  140.89 +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  140.90 +<html>
  140.91 +<head>
  140.92 +</head>
  140.93 +<body>
  140.94 +<hr><!-- You do NOT have to keep this line below in here. I have no issue if
  140.95 +     you wish to remove it. -->
  140.96 +<p>Copyright (c) 2003 Guido Laures<br>
  140.97 +<i>This list of questions  and answers was generated by <a
  140.98 + href="http://www.makefaq.org/">makefaq</a>.</i></p>
  140.99 +</body>
 140.100 +</html>
   141.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   141.2 +++ b/java/cewolf-1.0/src/site/faq/faqfooter.html	Sat Feb 28 21:31:02 2009 +0100
   141.3 @@ -0,0 +1,15 @@
   141.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
   141.5 +<html>
   141.6 +<head>
   141.7 +</head>
   141.8 +<body>
   141.9 +<hr><!-- You do NOT have to keep this line below in here. I have no issue if
  141.10 +     you wish to remove it. -->
  141.11 +<p>Copyright (c) 2003 Guido Laures<br>
  141.12 +<i>This list of questions  and answers was generated by <a
  141.13 + href="http://www.makefaq.org/">makefaq</a>.</i></p>
  141.14 +<a height="30" target="new" href="http://sourceforge.net"><img
  141.15 + alt="SourceForge Logo" border="0" height="30"
  141.16 + src="http://sourceforge.net/sflogo.php?group_id=57282&amp;type=5"></a>
  141.17 +</body>
  141.18 +</html>
   142.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   142.2 +++ b/java/cewolf-1.0/src/site/faq/faqheader.html	Sat Feb 28 21:31:02 2009 +0100
   142.3 @@ -0,0 +1,13 @@
   142.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
   142.5 +<html>
   142.6 +<head>
   142.7 +<title>Cewolf FAQ</title>
   142.8 +<meta name="author" content="Guido Laures">
   142.9 +<link href="../cewolf.css" rel="stylesheet" type="text/css">
  142.10 +</head>
  142.11 +<body>
  142.12 +<h1>Cewolf FAQ</h1>
  142.13 +</body>
  142.14 +</html>
  142.15 +
  142.16 +
   143.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   143.2 +++ b/java/cewolf-1.0/src/site/header.html	Sat Feb 28 21:31:02 2009 +0100
   143.3 @@ -0,0 +1,38 @@
   143.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
   143.5 +<html>
   143.6 +<head>
   143.7 +  <title>header</title>
   143.8 +  <meta http-equiv="content-type"
   143.9 + content="text/html; charset=ISO-8859-1">
  143.10 +</head>
  143.11 +<body
  143.12 + style="background-image: url(img/header_bg.png);">
  143.13 +<table border="0" cellpadding="0" cellspacing="0">
  143.14 +  <tbody>
  143.15 +    <tr>
  143.16 +      <td> <img src="img/cewolf_logo.gif" alt="logo" width="211"
  143.17 + height="80"> </td>
  143.18 +      <td width="100%">&nbsp;</td>
  143.19 +      <td>
  143.20 +      <table>
  143.21 +        <tbody>
  143.22 +          <tr>
  143.23 +            <td valign="top"> <a href="http://www.scriptnow.com"
  143.24 + target="new"><img border="0" alt="Jspin.com"
  143.25 + src="http://www.scriptnow.com/images/banner/scriptnow.com_1.gif"></a> </td>
  143.26 +            <td valign="top"> <a href="http://www.jspin.com"
  143.27 + target="new"><img border="0" alt="Jspin.com" src="img/jspin100.gif"
  143.28 + height="30"></a> </td>
  143.29 +            <td valign="top"> <a href="http://sourceforge.net"
  143.30 + target="new" height="30"><img
  143.31 + src="http://sourceforge.net/sflogo.php?group_id=57282&amp;type=5"
  143.32 + height="30" border="0" alt="SourceForge Logo"></a> </td>
  143.33 +          </tr>
  143.34 +        </tbody>
  143.35 +      </table>
  143.36 +      </td>
  143.37 +    </tr>
  143.38 +  </tbody>
  143.39 +</table>
  143.40 +</body>
  143.41 +</html>
   144.1 Binary file java/cewolf-1.0/src/site/img/Thumbs.db has changed
   145.1 Binary file java/cewolf-1.0/src/site/img/api_button_off.png has changed
   146.1 Binary file java/cewolf-1.0/src/site/img/api_button_on.png has changed
   147.1 Binary file java/cewolf-1.0/src/site/img/architecture.png has changed
   148.1 Binary file java/cewolf-1.0/src/site/img/cewolf_logo.gif has changed
   149.1 Binary file java/cewolf-1.0/src/site/img/downloads_button_off.png has changed
   150.1 Binary file java/cewolf-1.0/src/site/img/downloads_button_on.png has changed
   151.1 Binary file java/cewolf-1.0/src/site/img/examplehoriz3d.png has changed
   152.1 Binary file java/cewolf-1.0/src/site/img/exampleline.png has changed
   153.1 Binary file java/cewolf-1.0/src/site/img/exampleoverlaid.png has changed
   154.1 Binary file java/cewolf-1.0/src/site/img/examplepie.png has changed
   155.1 Binary file java/cewolf-1.0/src/site/img/examplescatter.png has changed
   156.1 Binary file java/cewolf-1.0/src/site/img/examplevert3d.png has changed
   157.1 Binary file java/cewolf-1.0/src/site/img/examplexy.png has changed
   158.1 Binary file java/cewolf-1.0/src/site/img/faq_button_off.png has changed
   159.1 Binary file java/cewolf-1.0/src/site/img/faq_button_on.png has changed
   160.1 Binary file java/cewolf-1.0/src/site/img/header_bg.png has changed
   161.1 Binary file java/cewolf-1.0/src/site/img/intro_button_off.png has changed
   162.1 Binary file java/cewolf-1.0/src/site/img/intro_button_on.png has changed
   163.1 Binary file java/cewolf-1.0/src/site/img/jspin100.gif has changed
   164.1 Binary file java/cewolf-1.0/src/site/img/logo.gif has changed
   165.1 Binary file java/cewolf-1.0/src/site/img/menu_bg.png has changed
   166.1 Binary file java/cewolf-1.0/src/site/img/menu_corner.png has changed
   167.1 Binary file java/cewolf-1.0/src/site/img/project_button_off.png has changed
   168.1 Binary file java/cewolf-1.0/src/site/img/project_button_on.png has changed
   169.1 Binary file java/cewolf-1.0/src/site/img/screens_button_off.png has changed
   170.1 Binary file java/cewolf-1.0/src/site/img/screens_button_on.png has changed
   171.1 Binary file java/cewolf-1.0/src/site/img/sfstats.gif has changed
   172.1 Binary file java/cewolf-1.0/src/site/img/taglib_button_off.png has changed
   173.1 Binary file java/cewolf-1.0/src/site/img/taglib_button_on.png has changed
   174.1 Binary file java/cewolf-1.0/src/site/img/tutorial.png has changed
   175.1 Binary file java/cewolf-1.0/src/site/img/tutorial_button_off.png has changed
   176.1 Binary file java/cewolf-1.0/src/site/img/tutorial_button_on.png has changed
   177.1 Binary file java/cewolf-1.0/src/site/img/web design.psd has changed
   178.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   178.2 +++ b/java/cewolf-1.0/src/site/index.html	Sat Feb 28 21:31:02 2009 +0100
   178.3 @@ -0,0 +1,31 @@
   178.4 +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">
   178.5 +
   178.6 +<html>
   178.7 +<head>
   178.8 +<title>Cewolf - Chart Enabling Web Object Framework</title>
   178.9 +<link href="cewolf.css" rel="stylesheet" type="text/css">
  178.10 +<META NAME="author" CONTENT="Guido Laures">
  178.11 +<META NAME="publisher" CONTENT="">
  178.12 +<META NAME="copyright" CONTENT="2002, Guido Laures">
  178.13 +<META NAME="keywords" CONTENT="jsp, JSP, chart, charts, tag, tag library, library, tld, cewolf, web, servlet, servlets, jfreechart, open source, free, lgpl, taglib, XML, scripting, server-side, J2EE, Java, Java Server Pages, Sourceforge, Download">
  178.14 +<META NAME="description" CONTENT="Cewolf can be used inside a Servlet/JSP based web application to embed complex graphical charts of all kinds (e.g. line, pie, bar chart, plots, etc.) into a web page. Therefore it provides a full featured tag library to define all properties of the chart (colors, strokes, legend, etc.). Thus the JSP which embedds the chart is not polluted with any java code. Everything is described with XML conform tags.
  178.15 +">
  178.16 +<META NAME="expires" CONTENT="">
  178.17 +<META NAME="robots" CONTENT="INDEX,FOLLOW">
  178.18 +<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
  178.19 +</head>
  178.20 +<frameset rows="100,*" frameborder="no" framespacing="0">
  178.21 +    <frame src="header.html" name="header" scrolling="no">
  178.22 +    <frameset cols="137,*" frameborder="no">
  178.23 +        <frame src="menu.html" name="menu" scrolling="no">
  178.24 +        <frame src="brief.html" name="content">
  178.25 +    </frameset>
  178.26 +  <noframes>
  178.27 +  <body>
  178.28 +Cewolf can be used inside a Servlet/JSP based web application to embed complex graphical charts of all kinds (e.g. line, pie, bar chart, plots, etc.) into a web page. Therefore it provides a full featured tag library to define all properties of the chart (colors, strokes, legend, etc.). Thus the JSP which embedds the chart is not polluted with any java code. Everything is described with XML conform tags.
  178.29 +<p>Cewolf is based on <a href="http://www.object-refinery.com/jfreechart/">JFreeChart</a> and uses it's rendering engine to render the final chart image into the clients response stream. No files are created on server side. Everything is based on lightweight session objects and dynamic data analysis. Cewolf consists of one servlet which handles the chart rendering and a taglibrary which translates the chart definition included in the JSP into an HTML img tag which consults the rendering servlet for retrieval of the appropriate chart.   
  178.30 +<p>You need a frame enabled browser to view this page.
  178.31 +  </body>
  178.32 +  </noframes>
  178.33 +</frameset>
  178.34 +</html>
  178.35 \ No newline at end of file
   179.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   179.2 +++ b/java/cewolf-1.0/src/site/menu.html	Sat Feb 28 21:31:02 2009 +0100
   179.3 @@ -0,0 +1,159 @@
   179.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
   179.5 +<html>
   179.6 +<head>
   179.7 +  <title>Menu</title>
   179.8 +  <meta http-equiv="content-type"
   179.9 + content="text/html; charset=ISO-8859-1">
  179.10 +  <style type="text/css">body,table,tr,td {margin: 0px;}</style>
  179.11 +  <script type="text/javascript">
  179.12 +  <!--
  179.13 +    normal1 = new Image();
  179.14 +    normal1.src = "img/intro_button_off.png";
  179.15 +    highlight1 = new Image();
  179.16 +    highlight1.src = "img/intro_button_on.png";
  179.17 +        
  179.18 +    normal2 = new Image();
  179.19 +    normal2.src = "img/tutorial_button_off.png";
  179.20 +    highlight2 = new Image();
  179.21 +    highlight2.src = "img/tutorial_button_on.png";
  179.22 +        
  179.23 +    normal3 = new Image();
  179.24 +    normal3.src = "img/taglib_button_off.png";
  179.25 +    highlight3 = new Image();
  179.26 +    highlight3.src = "img/taglib_button_on.png";
  179.27 +        
  179.28 +    normal4 = new Image();
  179.29 +    normal4.src = "img/screens_button_off.png";
  179.30 +    highlight4 = new Image();
  179.31 +    highlight4.src = "img/screens_button_on.png";
  179.32 +        
  179.33 +    normal5 = new Image();
  179.34 +    normal5.src = "img/api_button_off.png";
  179.35 +    highlight5 = new Image();
  179.36 +    highlight5.src = "img/api_button_on.png";
  179.37 +        
  179.38 +    normal6 = new Image();
  179.39 +    normal6.src = "img/project_button_off.png";
  179.40 +    highlight6 = new Image();
  179.41 +    highlight6.src = "img/project_button_on.png";
  179.42 +        
  179.43 +    normal7 = new Image();
  179.44 +    normal7.src = "img/downloads_button_off.png";
  179.45 +    highlight7 = new Image();
  179.46 +    highlight7.src = "img/downloads_button_on.png";
  179.47 +        
  179.48 +    normal8 = new Image();
  179.49 +    normal8.src = "img/faq_button_off.png";
  179.50 +    highlight8 = new Image();
  179.51 +    highlight8.src = "img/faq_button_on.png";
  179.52 +        
  179.53 +    function changeImg(nr,obj) {
  179.54 +     window.document.images[nr].src = obj.src;
  179.55 +    }
  179.56 +
  179.57 +  //-->
  179.58 +  </script>
  179.59 +</head>
  179.60 +<body
  179.61 + style="background-image: url(img/menu_bg.png);">
  179.62 +<table cellpadding="0" cellspacing="0" border="0" width="100%">
  179.63 +  <tbody>
  179.64 +    <tr>
  179.65 +      <td valign="top" width="164"><img src="img/menu_corner.png"
  179.66 + alt="menu cornder" width="78" height="26"> </td>
  179.67 +    </tr>
  179.68 +    <tr>
  179.69 +      <td valign="top" align="center"> <a href="brief.html"
  179.70 + target="content" onmouseover="changeImg(1,highlight1)"
  179.71 + onmouseout="changeImg(1,normal1)"> <img src="img/intro_button_off.png"
  179.72 + alt="intro" border="0"> </a> </td>
  179.73 +    </tr>
  179.74 +    <tr>
  179.75 +      <td valign="top" height="5">&nbsp;</td>
  179.76 +    </tr>
  179.77 +    <tr align="center">
  179.78 +      <td valign="top"><a href="tutorial.html" target="content"
  179.79 + onmouseover="changeImg(2,highlight2)" onmouseout="changeImg(2,normal2)"> <img
  179.80 + src="img/tutorial_button_off.png" alt="tutorial" width="111"
  179.81 + height="36" border="0"><br>
  179.82 +      </a> </td>
  179.83 +    </tr>
  179.84 +    <tr>
  179.85 +      <td valign="top" height="5">&nbsp;</td>
  179.86 +    </tr>
  179.87 +    <tr align="center">
  179.88 +      <td valign="top" onmouseover="changeImg(3,highlight3)"
  179.89 + onmouseout="changeImg(3,normal3)"> <a href="taglib.html"
  179.90 + target="content"> <img src="img/taglib_button_off.png" alt="taglib"
  179.91 + width="111" height="36" border="0"><br>
  179.92 +      </a> </td>
  179.93 +    </tr>
  179.94 +    <tr>
  179.95 +      <td valign="top" height="5">&nbsp;</td>
  179.96 +    </tr>
  179.97 +    <tr align="center">
  179.98 +      <td valign="top" onmouseover="changeImg(4,highlight4)"
  179.99 + onmouseout="changeImg(4,normal4)"> <a href="demo.html" target="content"> <img
 179.100 + src="img/screens_button_off.png" alt="screens" width="111" height="36"
 179.101 + border="0"><br>
 179.102 +      </a> </td>
 179.103 +    </tr>
 179.104 +    <tr>
 179.105 +      <td valign="top" height="5">&nbsp;</td>
 179.106 +    </tr>
 179.107 +    <tr align="center">
 179.108 +      <td valign="top"> <a href="apidoc/index.html" target="content"
 179.109 + onmouseover="changeImg(5,highlight5)" onmouseout="changeImg(5,normal5)"> <img
 179.110 + src="img/api_button_off.png" alt="api" width="111" height="36"
 179.111 + border="0"><br>
 179.112 +      </a> </td>
 179.113 +    </tr>
 179.114 +    <tr>
 179.115 +      <td valign="top" height="5">&nbsp;</td>
 179.116 +    </tr>
 179.117 +    <tr align="center">
 179.118 +      <td valign="top"> <a href="http://sourceforge.net/projects/cewolf"
 179.119 + target="new" onmouseover="changeImg(6,highlight6)"
 179.120 + onmouseout="changeImg(6,normal6)"> <img
 179.121 + src="img/project_button_off.png" alt="project" width="111" height="36"
 179.122 + border="0"><br>
 179.123 +      </a> </td>
 179.124 +    </tr>
 179.125 +    <tr>
 179.126 +      <td valign="top" height="5">&nbsp;</td>
 179.127 +    </tr>
 179.128 +    <tr align="center">
 179.129 +      <td valign="top"> <a
 179.130 + href="http://sourceforge.net/project/showfiles.php?group_id=57282"
 179.131 + target="content" onmouseover="changeImg(7,highlight7)"
 179.132 + onmouseout="changeImg(7,normal7)"> <img
 179.133 + src="img/downloads_button_off.png" alt="downloads" width="111"
 179.134 + height="36" border="0"><br>
 179.135 +      </a> </td>
 179.136 +    </tr>
 179.137 +    <tr>
 179.138 +      <td valign="top" height="5">&nbsp;</td>
 179.139 +    </tr>
 179.140 +    <tr align="center">
 179.141 +      <td valign="top"> <a href="faq/faq.html" target="content"
 179.142 + onmouseover="changeImg(8,highlight8)" onmouseout="changeImg(8,normal8)"> <img
 179.143 + src="img/faq_button_off.png" alt="FAQ" width="111" height="36"
 179.144 + border="0"><br>
 179.145 +      </a> </td>
 179.146 +    </tr>
 179.147 +    <tr>
 179.148 +      <td valign="top" height="5">&nbsp;</td>
 179.149 +    </tr>
 179.150 +    <tr align="center">
 179.151 +      <td valign="top"> <a href="http://sourceforge.net" target="new"
 179.152 + height="30"><img
 179.153 + src="http://sourceforge.net/sflogo.php?group_id=57282&amp;type=5"
 179.154 + height="30" border="0" alt="SourceForge Logo"></a> </td>
 179.155 +    </tr>
 179.156 +  </tbody>
 179.157 +</table>
 179.158 +<br>
 179.159 +<br>
 179.160 +<br>
 179.161 +</body>
 179.162 +</html>
   180.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   180.2 +++ b/java/cewolf-1.0/src/site/overlib.js	Sat Feb 28 21:31:02 2009 +0100
   180.3 @@ -0,0 +1,1222 @@
   180.4 +//\//////////////////////////////////////////////////////////////////////////////////
   180.5 +//\  overLIB 3.50  --  This notice must remain untouched at all times.
   180.6 +//\  Copyright Erik Bosrup 1998-2001. All rights reserved.
   180.7 +//\
   180.8 +//\  By Erik Bosrup (erik@bosrup.com).  Last modified 2001-08-28.
   180.9 +//\  Portions by Dan Steinman (dansteinman.com). Additions by other people are
  180.10 +//\  listed on the overLIB homepage.
  180.11 +//\
  180.12 +//\  Get the latest version at http://www.bosrup.com/web/overlib/
  180.13 +//\
  180.14 +//\  This script is published under an open source license. Please read the license
  180.15 +//\  agreement online at: http://www.bosrup.com/web/overlib/license.html
  180.16 +//\  If you have questions regarding the license please contact erik@bosrup.com.
  180.17 +//\
  180.18 +//\  This script library was originally created for personal use. By request it has
  180.19 +//\  later been made public. This is free software. Do not sell this as your own
  180.20 +//\  work, or remove this copyright notice. For full details on copying or changing
  180.21 +//\  this script please read the license agreement at the link above.
  180.22 +//\
  180.23 +//\  Please give credit on sites that use overLIB and submit changes of the script
  180.24 +//\  so other people can use them as well. This script is free to use, don't abuse.
  180.25 +//\//////////////////////////////////////////////////////////////////////////////////
  180.26 +//\mini
  180.27 +
  180.28 +
  180.29 +////////////////////////////////////////////////////////////////////////////////////
  180.30 +// CONSTANTS
  180.31 +// Don't touch these. :)
  180.32 +////////////////////////////////////////////////////////////////////////////////////
  180.33 +var INARRAY		=	1;
  180.34 +var CAPARRAY		=	2;
  180.35 +var STICKY		=	3;
  180.36 +var BACKGROUND		=	4;
  180.37 +var NOCLOSE		=	5;
  180.38 +var CAPTION		=	6;
  180.39 +var LEFT		=	7;
  180.40 +var RIGHT		=	8;
  180.41 +var CENTER		=	9;
  180.42 +var OFFSETX		=	10;
  180.43 +var OFFSETY		=	11;
  180.44 +var FGCOLOR		=	12;
  180.45 +var BGCOLOR		=	13;
  180.46 +var TEXTCOLOR		=	14;
  180.47 +var CAPCOLOR		=	15;
  180.48 +var CLOSECOLOR		=	16;
  180.49 +var WIDTH		=	17;
  180.50 +var BORDER		=	18;
  180.51 +var STATUS		=	19;
  180.52 +var AUTOSTATUS		=	20;
  180.53 +var AUTOSTATUSCAP	=	21;
  180.54 +var HEIGHT		=	22;
  180.55 +var CLOSETEXT		=	23;
  180.56 +var SNAPX		=	24;
  180.57 +var SNAPY		=	25;
  180.58 +var FIXX		=	26;
  180.59 +var FIXY		=	27;
  180.60 +var FGBACKGROUND	=	28;
  180.61 +var BGBACKGROUND	=	29;
  180.62 +var PADX		=	30; // PADX2 out
  180.63 +var PADY		=	31; // PADY2 out
  180.64 +var FULLHTML		=	34;
  180.65 +var ABOVE		=	35;
  180.66 +var BELOW		=	36;
  180.67 +var CAPICON		=	37;
  180.68 +var TEXTFONT		=	38;
  180.69 +var CAPTIONFONT		=	39;
  180.70 +var CLOSEFONT		=	40;
  180.71 +var TEXTSIZE		=	41;
  180.72 +var CAPTIONSIZE		=	42;
  180.73 +var CLOSESIZE		=	43;
  180.74 +var FRAME		=	44;
  180.75 +var TIMEOUT		=	45;
  180.76 +var FUNCTION		=	46;
  180.77 +var DELAY		=	47;
  180.78 +var HAUTO		=	48;
  180.79 +var VAUTO		=	49;
  180.80 +var CLOSECLICK		=	50;
  180.81 +var CSSOFF		=	51;
  180.82 +var CSSSTYLE		=	52;
  180.83 +var CSSCLASS		=	53;
  180.84 +var FGCLASS		=	54;
  180.85 +var BGCLASS		=	55;
  180.86 +var TEXTFONTCLASS	=	56;
  180.87 +var CAPTIONFONTCLASS	=	57;
  180.88 +var CLOSEFONTCLASS	=	58;
  180.89 +var PADUNIT		=	59;
  180.90 +var HEIGHTUNIT		=	60;
  180.91 +var WIDTHUNIT		=	61;
  180.92 +var TEXTSIZEUNIT	=	62;
  180.93 +var TEXTDECORATION	=	63;
  180.94 +var TEXTSTYLE		=	64;
  180.95 +var TEXTWEIGHT		=	65;
  180.96 +var CAPTIONSIZEUNIT	=	66;
  180.97 +var CAPTIONDECORATION	=	67;
  180.98 +var CAPTIONSTYLE	=	68;
  180.99 +var CAPTIONWEIGHT	=	69;
 180.100 +var CLOSESIZEUNIT	=	70;
 180.101 +var CLOSEDECORATION	=	71;
 180.102 +var CLOSESTYLE		=	72;
 180.103 +var CLOSEWEIGHT		=	73;
 180.104 +
 180.105 +
 180.106 +////////////////////////////////////////////////////////////////////////////////////
 180.107 +// DEFAULT CONFIGURATION
 180.108 +// You don't have to change anything here if you don't want to. All of this can be
 180.109 +// changed on your html page or through an overLIB call.
 180.110 +////////////////////////////////////////////////////////////////////////////////////
 180.111 +
 180.112 +// Main background color (the large area)
 180.113 +// Usually a bright color (white, yellow etc)
 180.114 +if (typeof ol_fgcolor == 'undefined') { var ol_fgcolor = "#CCCCFF";}
 180.115 +	
 180.116 +// Border color and color of caption
 180.117 +// Usually a dark color (black, brown etc)
 180.118 +if (typeof ol_bgcolor == 'undefined') { var ol_bgcolor = "#333399";}
 180.119 +	
 180.120 +// Text color
 180.121 +// Usually a dark color
 180.122 +if (typeof ol_textcolor == 'undefined') { var ol_textcolor = "#000000";}
 180.123 +	
 180.124 +// Color of the caption text
 180.125 +// Usually a bright color
 180.126 +if (typeof ol_capcolor == 'undefined') { var ol_capcolor = "#FFFFFF";}
 180.127 +	
 180.128 +// Color of "Close" when using Sticky
 180.129 +// Usually a semi-bright color
 180.130 +if (typeof ol_closecolor == 'undefined') { var ol_closecolor = "#9999FF";}
 180.131 +
 180.132 +// Font face for the main text
 180.133 +if (typeof ol_textfont == 'undefined') { var ol_textfont = "Verdana,Arial,Helvetica";}
 180.134 +
 180.135 +// Font face for the caption
 180.136 +if (typeof ol_captionfont == 'undefined') { var ol_captionfont = "Verdana,Arial,Helvetica";}
 180.137 +
 180.138 +// Font face for the close text
 180.139 +if (typeof ol_closefont == 'undefined') { var ol_closefont = "Verdana,Arial,Helvetica";}
 180.140 +
 180.141 +// Font size for the main text
 180.142 +// When using CSS this will be very small.
 180.143 +if (typeof ol_textsize == 'undefined') { var ol_textsize = "1";}
 180.144 +
 180.145 +// Font size for the caption
 180.146 +// When using CSS this will be very small.
 180.147 +if (typeof ol_captionsize == 'undefined') { var ol_captionsize = "1";}
 180.148 +
 180.149 +// Font size for the close text
 180.150 +// When using CSS this will be very small.
 180.151 +if (typeof ol_closesize == 'undefined') { var ol_closesize = "1";}
 180.152 +
 180.153 +// Width of the popups in pixels
 180.154 +// 100-300 pixels is typical
 180.155 +if (typeof ol_width == 'undefined') { var ol_width = "200";}
 180.156 +
 180.157 +// How thick the ol_border should be in pixels
 180.158 +// 1-3 pixels is typical
 180.159 +if (typeof ol_border == 'undefined') { var ol_border = "1";}
 180.160 +
 180.161 +// How many pixels to the right/left of the cursor to show the popup
 180.162 +// Values between 3 and 12 are best
 180.163 +if (typeof ol_offsetx == 'undefined') { var ol_offsetx = 10;}
 180.164 +	
 180.165 +// How many pixels to the below the cursor to show the popup
 180.166 +// Values between 3 and 12 are best
 180.167 +if (typeof ol_offsety == 'undefined') { var ol_offsety = 10;}
 180.168 +
 180.169 +// Default text for popups
 180.170 +// Should you forget to pass something to overLIB this will be displayed.
 180.171 +if (typeof ol_text == 'undefined') { var ol_text = "Default Text"; }
 180.172 +
 180.173 +// Default caption
 180.174 +// You should leave this blank or you will have problems making non caps popups.
 180.175 +if (typeof ol_cap == 'undefined') { var ol_cap = ""; }
 180.176 +
 180.177 +// Decides if sticky popups are default.
 180.178 +// 0 for non, 1 for stickies.
 180.179 +if (typeof ol_sticky == 'undefined') { var ol_sticky = 0; }
 180.180 +
 180.181 +// Default background image. Better left empty unless you always want one.
 180.182 +if (typeof ol_background == 'undefined') { var ol_background = ""; }
 180.183 +
 180.184 +// Text for the closing sticky popups.
 180.185 +// Normal is "Close".
 180.186 +if (typeof ol_close == 'undefined') { var ol_close = "Close"; }
 180.187 +
 180.188 +// Default vertical alignment for popups.
 180.189 +// It's best to leave RIGHT here. Other options are LEFT and CENTER.
 180.190 +if (typeof ol_hpos == 'undefined') { var ol_hpos = RIGHT; }
 180.191 +
 180.192 +// Default status bar text when a popup is invoked.
 180.193 +if (typeof ol_status == 'undefined') { var ol_status = ""; }
 180.194 +
 180.195 +// If the status bar automatically should load either text or caption.
 180.196 +// 0=nothing, 1=text, 2=caption
 180.197 +if (typeof ol_autostatus == 'undefined') { var ol_autostatus = 0; }
 180.198 +
 180.199 +// Default height for popup. Often best left alone.
 180.200 +if (typeof ol_height == 'undefined') { var ol_height = -1; }
 180.201 +
 180.202 +// Horizontal grid spacing that popups will snap to.
 180.203 +// 0 makes no grid, anything else will cause a snap to that grid spacing.
 180.204 +if (typeof ol_snapx == 'undefined') { var ol_snapx = 0; }
 180.205 +
 180.206 +// Vertical grid spacing that popups will snap to.
 180.207 +// 0 makes no grid, andthing else will cause a snap to that grid spacing.
 180.208 +if (typeof ol_snapy == 'undefined') { var ol_snapy = 0; }
 180.209 +
 180.210 +// Sets the popups horizontal position to a fixed column.
 180.211 +// Anything above -1 will cause fixed position.
 180.212 +if (typeof ol_fixx == 'undefined') { var ol_fixx = -1; }
 180.213 +
 180.214 +// Sets the popups vertical position to a fixed row.
 180.215 +// Anything above -1 will cause fixed position.
 180.216 +if (typeof ol_fixy == 'undefined') { var ol_fixy = -1; }
 180.217 +
 180.218 +// Background image for the popups inside.
 180.219 +if (typeof ol_fgbackground == 'undefined') { var ol_fgbackground = ""; }
 180.220 +
 180.221 +// Background image for the popups frame.
 180.222 +if (typeof ol_bgbackground == 'undefined') { var ol_bgbackground = ""; }
 180.223 +
 180.224 +// How much horizontal left padding text should get by default when BACKGROUND is used.
 180.225 +if (typeof ol_padxl == 'undefined') { var ol_padxl = 1; }
 180.226 +
 180.227 +// How much horizontal right padding text should get by default when BACKGROUND is used.
 180.228 +if (typeof ol_padxr == 'undefined') { var ol_padxr = 1; }
 180.229 +
 180.230 +// How much vertical top padding text should get by default when BACKGROUND is used.
 180.231 +if (typeof ol_padyt == 'undefined') { var ol_padyt = 1; }
 180.232 +
 180.233 +// How much vertical bottom padding text should get by default when BACKGROUND is used.
 180.234 +if (typeof ol_padyb == 'undefined') { var ol_padyb = 1; }
 180.235 +
 180.236 +// If the user by default must supply all html for complete popup control.
 180.237 +// Set to 1 to activate, 0 otherwise.
 180.238 +if (typeof ol_fullhtml == 'undefined') { var ol_fullhtml = 0; }
 180.239 +
 180.240 +// Default vertical position of the popup. Default should normally be BELOW.
 180.241 +// ABOVE only works when HEIGHT is defined.
 180.242 +if (typeof ol_vpos == 'undefined') { var ol_vpos = BELOW; }
 180.243 +
 180.244 +// Default height of popup to use when placing the popup above the cursor.
 180.245 +if (typeof ol_aboveheight == 'undefined') { var ol_aboveheight = 0; }
 180.246 +
 180.247 +// Default icon to place next to the popups caption.
 180.248 +if (typeof ol_caption == 'undefined') { var ol_capicon = ""; }
 180.249 +
 180.250 +// Default frame. We default to current frame if there is no frame defined.
 180.251 +if (typeof ol_frame == 'undefined') { var ol_frame = self; }
 180.252 +
 180.253 +// Default timeout. By default there is no timeout.
 180.254 +if (typeof ol_timeout == 'undefined') { var ol_timeout = 0; }
 180.255 +
 180.256 +// Default javascript funktion. By default there is none.
 180.257 +if (typeof ol_function == 'undefined') { var ol_function = Function(); }
 180.258 +
 180.259 +// Default timeout. By default there is no timeout.
 180.260 +if (typeof ol_delay == 'undefined') { var ol_delay = 0; }
 180.261 +
 180.262 +// If overLIB should decide the horizontal placement.
 180.263 +if (typeof ol_hauto == 'undefined') { var ol_hauto = 0; }
 180.264 +
 180.265 +// If overLIB should decide the vertical placement.
 180.266 +if (typeof ol_vauto == 'undefined') { var ol_vauto = 0; }
 180.267 +
 180.268 +
 180.269 +
 180.270 +// If the user has to click to close stickies.
 180.271 +if (typeof ol_closeclick == 'undefined') { var ol_closeclick = 0; }
 180.272 +
 180.273 +// This variable determines if you want to use CSS or inline definitions.
 180.274 +// CSSOFF=no CSS    CSSSTYLE=use CSS inline styles    CSSCLASS=use classes
 180.275 +if (typeof ol_css == 'undefined') { var ol_css = CSSOFF; }
 180.276 +
 180.277 +// Main background class (eqv of fgcolor)
 180.278 +// This is only used if CSS is set to use classes (ol_css = CSSCLASS)
 180.279 +if (typeof ol_fgclass == 'undefined') { var ol_fgclass = ""; }
 180.280 +
 180.281 +// Frame background class (eqv of bgcolor)
 180.282 +// This is only used if CSS is set to use classes (ol_css = CSSCLASS)
 180.283 +if (typeof ol_bgclass == 'undefined') { var ol_bgclass = ""; }
 180.284 +
 180.285 +// Main font class
 180.286 +// This is only used if CSS is set to use classes (ol_css = CSSCLASS)
 180.287 +if (typeof ol_textfontclass == 'undefined') { var ol_textfontclass = ""; }
 180.288 +
 180.289 +// Caption font class
 180.290 +// This is only used if CSS is set to use classes (ol_css = CSSCLASS)
 180.291 +if (typeof ol_captionfontclass == 'undefined') { var ol_captionfontclass = ""; }
 180.292 +
 180.293 +// Close font class
 180.294 +// This is only used if CSS is set to use classes (ol_css = CSSCLASS)
 180.295 +if (typeof ol_closefontclass == 'undefined') { var ol_closefontclass = ""; }
 180.296 +
 180.297 +// Unit to be used for the text padding above
 180.298 +// Only used if CSS inline styles are being used (ol_css = CSSSTYLE)
 180.299 +// Options include "px", "%", "in", "cm" and more
 180.300 +if (typeof ol_padunit == 'undefined') { var ol_padunit = "px";}
 180.301 +
 180.302 +// Unit to be used for height of popup
 180.303 +// Only used if CSS inline styles are being used (ol_css = CSSSTYLE)
 180.304 +// Options include "px", "%", "in", "cm" and more
 180.305 +if (typeof ol_heightunit == 'undefined') { var ol_heightunit = "px";}
 180.306 +
 180.307 +// Unit to be used for width of popup
 180.308 +// Only used if CSS inline styles are being used (ol_css = CSSSTYLE)
 180.309 +// Options include "px", "%", "in", "cm" and more
 180.310 +if (typeof ol_widthunit == 'undefined') { var ol_widthunit = "px";}
 180.311 +
 180.312 +// Font size unit for the main text
 180.313 +// Only used if CSS inline styles are being used (ol_css = CSSSTYLE)
 180.314 +if (typeof ol_textsizeunit == 'undefined') { var ol_textsizeunit = "px";}
 180.315 +
 180.316 +// Decoration of the main text ("none", "underline", "line-through" or "blink")
 180.317 +// Only used if CSS inline styles are being used (ol_css = CSSSTYLE)
 180.318 +if (typeof ol_textdecoration == 'undefined') { var ol_textdecoration = "none";}
 180.319 +
 180.320 +// Font style of the main text ("normal" or "italic")
 180.321 +// Only used if CSS inline styles are being used (ol_css = CSSSTYLE)
 180.322 +if (typeof ol_textstyle == 'undefined') { var ol_textstyle = "normal";}
 180.323 +
 180.324 +// Font weight of the main text ("normal", "bold", "bolder", "lighter", ect.)
 180.325 +// Only used if CSS inline styles are being used (ol_css = CSSSTYLE)
 180.326 +if (typeof ol_textweight == 'undefined') { var ol_textweight = "normal";}
 180.327 +
 180.328 +// Font size unit for the caption
 180.329 +// Only used if CSS inline styles are being used (ol_css = CSSSTYLE)
 180.330 +if (typeof ol_captionsizeunit == 'undefined') { var ol_captionsizeunit = "px";}
 180.331 +
 180.332 +// Decoration of the caption ("none", "underline", "line-through" or "blink")
 180.333 +// Only used if CSS inline styles are being used (ol_css = CSSSTYLE)
 180.334 +if (typeof ol_captiondecoration == 'undefined') { var ol_captiondecoration = "none";}
 180.335 +
 180.336 +// Font style of the caption ("normal" or "italic")
 180.337 +// Only used if CSS inline styles are being used (ol_css = CSSSTYLE)
 180.338 +if (typeof ol_captionstyle == 'undefined') { var ol_captionstyle = "normal";}
 180.339 +
 180.340 +// Font weight of the caption ("normal", "bold", "bolder", "lighter", ect.)
 180.341 +// Only used if CSS inline styles are being used (ol_css = CSSSTYLE)
 180.342 +if (typeof ol_captionweight == 'undefined') { var ol_captionweight = "bold";}
 180.343 +
 180.344 +// Font size unit for the close text
 180.345 +// Only used if CSS inline styles are being used (ol_css = CSSSTYLE)
 180.346 +if (typeof ol_closesizeunit == 'undefined') { var ol_closesizeunit = "px";}
 180.347 +
 180.348 +// Decoration of the close text ("none", "underline", "line-through" or "blink")
 180.349 +// Only used if CSS inline styles are being used (ol_css = CSSSTYLE)
 180.350 +if (typeof ol_closedecoration == 'undefined') { var ol_closedecoration = "none";}
 180.351 +
 180.352 +// Font style of the close text ("normal" or "italic")
 180.353 +// Only used if CSS inline styles are being used (ol_css = CSSSTYLE)
 180.354 +if (typeof ol_closestyle == 'undefined') { var ol_closestyle = "normal";}
 180.355 +
 180.356 +// Font weight of the close text ("normal", "bold", "bolder", "lighter", ect.)
 180.357 +// Only used if CSS inline styles are being used (ol_css = CSSSTYLE)
 180.358 +if (typeof ol_closeweight == 'undefined') { var ol_closeweight = "normal";}
 180.359 +
 180.360 +
 180.361 +
 180.362 +////////////////////////////////////////////////////////////////////////////////////
 180.363 +// ARRAY CONFIGURATION
 180.364 +// You don't have to change anything here if you don't want to. The following
 180.365 +// arrays can be filled with text and html if you don't wish to pass it from
 180.366 +// your html page.
 180.367 +////////////////////////////////////////////////////////////////////////////////////
 180.368 +
 180.369 +// Array with texts.
 180.370 +if (typeof ol_texts == 'undefined') { var ol_texts = new Array("Text 0", "Text 1"); }
 180.371 +
 180.372 +// Array with captions.
 180.373 +if (typeof ol_caps == 'undefined') { var ol_caps = new Array("Caption 0", "Caption 1"); }
 180.374 +
 180.375 +
 180.376 +////////////////////////////////////////////////////////////////////////////////////
 180.377 +// END CONFIGURATION
 180.378 +// Don't change anything below this line, all configuration is above.
 180.379 +////////////////////////////////////////////////////////////////////////////////////
 180.380 +
 180.381 +
 180.382 +
 180.383 +
 180.384 +
 180.385 +
 180.386 +
 180.387 +////////////////////////////////////////////////////////////////////////////////////
 180.388 +// INIT
 180.389 +////////////////////////////////////////////////////////////////////////////////////
 180.390 +
 180.391 +// Runtime variables init. Used for runtime only, don't change, not for config!
 180.392 +var o3_text = "";
 180.393 +var o3_cap = "";
 180.394 +var o3_sticky = 0;
 180.395 +var o3_background = "";
 180.396 +var o3_close = "Close";
 180.397 +var o3_hpos = RIGHT;
 180.398 +var o3_offsetx = 2;
 180.399 +var o3_offsety = 2;
 180.400 +var o3_fgcolor = "";
 180.401 +var o3_bgcolor = "";
 180.402 +var o3_textcolor = "";
 180.403 +var o3_capcolor = "";
 180.404 +var o3_closecolor = "";
 180.405 +var o3_width = 100;
 180.406 +var o3_border = 1;
 180.407 +var o3_status = "";
 180.408 +var o3_autostatus = 0;
 180.409 +var o3_height = -1;
 180.410 +var o3_snapx = 0;
 180.411 +var o3_snapy = 0;
 180.412 +var o3_fixx = -1;
 180.413 +var o3_fixy = -1;
 180.414 +var o3_fgbackground = "";
 180.415 +var o3_bgbackground = "";
 180.416 +var o3_padxl = 0;
 180.417 +var o3_padxr = 0;
 180.418 +var o3_padyt = 0;
 180.419 +var o3_padyb = 0;
 180.420 +var o3_fullhtml = 0;
 180.421 +var o3_vpos = BELOW;
 180.422 +var o3_aboveheight = 0;
 180.423 +var o3_capicon = "";
 180.424 +var o3_textfont = "Verdana,Arial,Helvetica";
 180.425 +var o3_captionfont = "Verdana,Arial,Helvetica";
 180.426 +var o3_closefont = "Verdana,Arial,Helvetica";
 180.427 +var o3_textsize = "1";
 180.428 +var o3_captionsize = "1";
 180.429 +var o3_closesize = "1";
 180.430 +var o3_frame = self;
 180.431 +var o3_timeout = 0;
 180.432 +var o3_timerid = 0;
 180.433 +var o3_allowmove = 0;
 180.434 +var o3_function = Function();
 180.435 +var o3_delay = 0;
 180.436 +var o3_delayid = 0;
 180.437 +var o3_hauto = 0;
 180.438 +var o3_vauto = 0;
 180.439 +var o3_closeclick = 0;
 180.440 +
 180.441 +var o3_css = CSSOFF;
 180.442 +var o3_fgclass = "";
 180.443 +var o3_bgclass = "";
 180.444 +var o3_textfontclass = "";
 180.445 +var o3_captionfontclass = "";
 180.446 +var o3_closefontclass = "";
 180.447 +var o3_padunit = "px";
 180.448 +var o3_heightunit = "px";
 180.449 +var o3_widthunit = "px";
 180.450 +var o3_textsizeunit = "px";
 180.451 +var o3_textdecoration = "";
 180.452 +var o3_textstyle = "";
 180.453 +var o3_textweight = "";
 180.454 +var o3_captionsizeunit = "px";
 180.455 +var o3_captiondecoration = "";
 180.456 +var o3_captionstyle = "";
 180.457 +var o3_captionweight = "";
 180.458 +var o3_closesizeunit = "px";
 180.459 +var o3_closedecoration = "";
 180.460 +var o3_closestyle = "";
 180.461 +var o3_closeweight = "";
 180.462 +
 180.463 +
 180.464 +
 180.465 +// Display state variables
 180.466 +var o3_x = 0;
 180.467 +var o3_y = 0;
 180.468 +var o3_allow = 0;
 180.469 +var o3_showingsticky = 0;
 180.470 +var o3_removecounter = 0;
 180.471 +
 180.472 +// Our layer
 180.473 +var over = null;
 180.474 +
 180.475 +
 180.476 +// Decide browser version
 180.477 +var ns4 = (document.layers)? true:false;
 180.478 +var ns6 = (document.getElementById)? true:false;
 180.479 +var ie4 = (document.all)? true:false;
 180.480 +var ie5 = false;
 180.481 +
 180.482 +// Microsoft Stupidity Check(tm).
 180.483 +if (ie4) {
 180.484 +	if ((navigator.userAgent.indexOf('MSIE 5') > 0) || (navigator.userAgent.indexOf('MSIE 6') > 0)) {
 180.485 +		ie5 = true;
 180.486 +	}
 180.487 +	if (ns6) {
 180.488 +		ns6 = false;
 180.489 +	}
 180.490 +}
 180.491 +
 180.492 +
 180.493 +// Capture events, alt. diffuses the overlib function.
 180.494 +if ( (ns4) || (ie4) || (ns6)) {
 180.495 +	document.onmousemove = mouseMove
 180.496 +	if (ns4) document.captureEvents(Event.MOUSEMOVE)
 180.497 +} else {
 180.498 +	overlib = no_overlib;
 180.499 +	nd = no_overlib;
 180.500 +	ver3fix = true;
 180.501 +}
 180.502 +
 180.503 +
 180.504 +// Fake function for 3.0 users.
 180.505 +function no_overlib() {
 180.506 +	return ver3fix;
 180.507 +}
 180.508 +
 180.509 +
 180.510 +
 180.511 +////////////////////////////////////////////////////////////////////////////////////
 180.512 +// PUBLIC FUNCTIONS
 180.513 +////////////////////////////////////////////////////////////////////////////////////
 180.514 +
 180.515 +
 180.516 +// overlib(arg0, ..., argN)
 180.517 +// Loads parameters into global runtime variables.
 180.518 +function overlib() {
 180.519 +	
 180.520 +	// Load defaults to runtime.
 180.521 +	o3_text = ol_text;
 180.522 +	o3_cap = ol_cap;
 180.523 +	o3_sticky = ol_sticky;
 180.524 +	o3_background = ol_background;
 180.525 +	o3_close = ol_close;
 180.526 +	o3_hpos = ol_hpos;
 180.527 +	o3_offsetx = ol_offsetx;
 180.528 +	o3_offsety = ol_offsety;
 180.529 +	o3_fgcolor = ol_fgcolor;
 180.530 +	o3_bgcolor = ol_bgcolor;
 180.531 +	o3_textcolor = ol_textcolor;
 180.532 +	o3_capcolor = ol_capcolor;
 180.533 +	o3_closecolor = ol_closecolor;
 180.534 +	o3_width = ol_width;
 180.535 +	o3_border = ol_border;
 180.536 +	o3_status = ol_status;
 180.537 +	o3_autostatus = ol_autostatus;
 180.538 +	o3_height = ol_height;
 180.539 +	o3_snapx = ol_snapx;
 180.540 +	o3_snapy = ol_snapy;
 180.541 +	o3_fixx = ol_fixx;
 180.542 +	o3_fixy = ol_fixy;
 180.543 +	o3_fgbackground = ol_fgbackground;
 180.544 +	o3_bgbackground = ol_bgbackground;
 180.545 +	o3_padxl = ol_padxl;
 180.546 +	o3_padxr = ol_padxr;
 180.547 +	o3_padyt = ol_padyt;
 180.548 +	o3_padyb = ol_padyb;
 180.549 +	o3_fullhtml = ol_fullhtml;
 180.550 +	o3_vpos = ol_vpos;
 180.551 +	o3_aboveheight = ol_aboveheight;
 180.552 +	o3_capicon = ol_capicon;
 180.553 +	o3_textfont = ol_textfont;
 180.554 +	o3_captionfont = ol_captionfont;
 180.555 +	o3_closefont = ol_closefont;
 180.556 +	o3_textsize = ol_textsize;
 180.557 +	o3_captionsize = ol_captionsize;
 180.558 +	o3_closesize = ol_closesize;
 180.559 +	o3_timeout = ol_timeout;
 180.560 +	o3_function = ol_function;
 180.561 +	o3_delay = ol_delay;
 180.562 +	o3_hauto = ol_hauto;
 180.563 +	o3_vauto = ol_vauto;
 180.564 +	o3_closeclick = ol_closeclick;
 180.565 +	
 180.566 +	o3_css = ol_css;
 180.567 +	o3_fgclass = ol_fgclass;
 180.568 +	o3_bgclass = ol_bgclass;
 180.569 +	o3_textfontclass = ol_textfontclass;
 180.570 +	o3_captionfontclass = ol_captionfontclass;
 180.571 +	o3_closefontclass = ol_closefontclass;
 180.572 +	o3_padunit = ol_padunit;
 180.573 +	o3_heightunit = ol_heightunit;
 180.574 +	o3_widthunit = ol_widthunit;
 180.575 +	o3_textsizeunit = ol_textsizeunit;
 180.576 +	o3_textdecoration = ol_textdecoration;
 180.577 +	o3_textstyle = ol_textstyle;
 180.578 +	o3_textweight = ol_textweight;
 180.579 +	o3_captionsizeunit = ol_captionsizeunit;
 180.580 +	o3_captiondecoration = ol_captiondecoration;
 180.581 +	o3_captionstyle = ol_captionstyle;
 180.582 +	o3_captionweight = ol_captionweight;
 180.583 +	o3_closesizeunit = ol_closesizeunit;
 180.584 +	o3_closedecoration = ol_closedecoration;
 180.585 +	o3_closestyle = ol_closestyle;
 180.586 +	o3_closeweight = ol_closeweight;
 180.587 +	
 180.588 +
 180.589 +	// Special for frame support, over must be reset...
 180.590 +	if ( (ns4) || (ie4) || (ns6) ) {
 180.591 +		o3_frame = ol_frame;
 180.592 +		if (ns4) over = o3_frame.document.overDiv
 180.593 +		if (ie4) over = o3_frame.overDiv.style
 180.594 +		if (ns6) over = o3_frame.document.getElementById("overDiv");
 180.595 +	}
 180.596 +	
 180.597 +	
 180.598 +	// What the next argument is expected to be.
 180.599 +	var parsemode = -1;
 180.600 +	
 180.601 +	var ar = arguments;
 180.602 +
 180.603 +	for (i = 0; i < ar.length; i++) {
 180.604 +
 180.605 +		if (parsemode < 0) {
 180.606 +			// Arg is maintext, unless INARRAY
 180.607 +			if (ar[i] == INARRAY) {
 180.608 +				o3_text = ol_texts[ar[++i]];
 180.609 +			} else {
 180.610 +				o3_text = ar[i];
 180.611 +			}
 180.612 +
 180.613 +			parsemode = 0;
 180.614 +		} else {
 180.615 +			// Note: NS4 doesn't like switch cases with vars.
 180.616 +			if (ar[i] == INARRAY) { o3_text = ol_texts[ar[++i]]; continue; }
 180.617 +			if (ar[i] == CAPARRAY) { o3_cap = ol_caps[ar[++i]]; continue; }
 180.618 +			if (ar[i] == STICKY) { o3_sticky = 1; continue; }
 180.619 +			if (ar[i] == BACKGROUND) { o3_background = ar[++i]; continue; }
 180.620 +			if (ar[i] == NOCLOSE) { o3_close = ""; continue; }
 180.621 +			if (ar[i] == CAPTION) { o3_cap = ar[++i]; continue; }
 180.622 +			if (ar[i] == CENTER || ar[i] == LEFT || ar[i] == RIGHT) { o3_hpos = ar[i]; continue; }
 180.623 +			if (ar[i] == OFFSETX) { o3_offsetx = ar[++i]; continue; }
 180.624 +			if (ar[i] == OFFSETY) { o3_offsety = ar[++i]; continue; }
 180.625 +			if (ar[i] == FGCOLOR) { o3_fgcolor = ar[++i]; continue; }
 180.626 +			if (ar[i] == BGCOLOR) { o3_bgcolor = ar[++i]; continue; }
 180.627 +			if (ar[i] == TEXTCOLOR) { o3_textcolor = ar[++i]; continue; }
 180.628 +			if (ar[i] == CAPCOLOR) { o3_capcolor = ar[++i]; continue; }
 180.629 +			if (ar[i] == CLOSECOLOR) { o3_closecolor = ar[++i]; continue; }
 180.630 +			if (ar[i] == WIDTH) { o3_width = ar[++i]; continue; }
 180.631 +			if (ar[i] == BORDER) { o3_border = ar[++i]; continue; }
 180.632 +			if (ar[i] == STATUS) { o3_status = ar[++i]; continue; }
 180.633 +			if (ar[i] == AUTOSTATUS) { o3_autostatus = 1; continue; }
 180.634 +			if (ar[i] == AUTOSTATUSCAP) { o3_autostatus = 2; continue; }
 180.635 +			if (ar[i] == HEIGHT) { o3_height = ar[++i]; o3_aboveheight = ar[i]; continue; } // Same param again.
 180.636 +			if (ar[i] == CLOSETEXT) { o3_close = ar[++i]; continue; }
 180.637 +			if (ar[i] == SNAPX) { o3_snapx = ar[++i]; continue; }
 180.638 +			if (ar[i] == SNAPY) { o3_snapy = ar[++i]; continue; }
 180.639 +			if (ar[i] == FIXX) { o3_fixx = ar[++i]; continue; }
 180.640 +			if (ar[i] == FIXY) { o3_fixy = ar[++i]; continue; }
 180.641 +			if (ar[i] == FGBACKGROUND) { o3_fgbackground = ar[++i]; continue; }
 180.642 +			if (ar[i] == BGBACKGROUND) { o3_bgbackground = ar[++i]; continue; }
 180.643 +			if (ar[i] == PADX) { o3_padxl = ar[++i]; o3_padxr = ar[++i]; continue; }
 180.644 +			if (ar[i] == PADY) { o3_padyt = ar[++i]; o3_padyb = ar[++i]; continue; }
 180.645 +			if (ar[i] == FULLHTML) { o3_fullhtml = 1; continue; }
 180.646 +			if (ar[i] == BELOW || ar[i] == ABOVE) { o3_vpos = ar[i]; continue; }
 180.647 +			if (ar[i] == CAPICON) { o3_capicon = ar[++i]; continue; }
 180.648 +			if (ar[i] == TEXTFONT) { o3_textfont = ar[++i]; continue; }
 180.649 +			if (ar[i] == CAPTIONFONT) { o3_captionfont = ar[++i]; continue; }
 180.650 +			if (ar[i] == CLOSEFONT) { o3_closefont = ar[++i]; continue; }
 180.651 +			if (ar[i] == TEXTSIZE) { o3_textsize = ar[++i]; continue; }
 180.652 +			if (ar[i] == CAPTIONSIZE) { o3_captionsize = ar[++i]; continue; }
 180.653 +			if (ar[i] == CLOSESIZE) { o3_closesize = ar[++i]; continue; }
 180.654 +			if (ar[i] == FRAME) { opt_FRAME(ar[++i]); continue; }
 180.655 +			if (ar[i] == TIMEOUT) { o3_timeout = ar[++i]; continue; }
 180.656 +			if (ar[i] == FUNCTION) { opt_FUNCTION(ar[++i]); continue; }
 180.657 +			if (ar[i] == DELAY) { o3_delay = ar[++i]; continue; }
 180.658 +			if (ar[i] == HAUTO) { o3_hauto = (o3_hauto == 0) ? 1 : 0; continue; }
 180.659 +			if (ar[i] == VAUTO) { o3_vauto = (o3_vauto == 0) ? 1 : 0; continue; }
 180.660 +			if (ar[i] == CLOSECLICK) { o3_closeclick = (o3_closeclick == 0) ? 1 : 0; continue; }
 180.661 +			if (ar[i] == CSSOFF) { o3_css = ar[i]; continue; }
 180.662 +			if (ar[i] == CSSSTYLE) { o3_css = ar[i]; continue; }
 180.663 +			if (ar[i] == CSSCLASS) { o3_css = ar[i]; continue; }
 180.664 +			if (ar[i] == FGCLASS) { o3_fgclass = ar[++i]; continue; }
 180.665 +			if (ar[i] == BGCLASS) { o3_bgclass = ar[++i]; continue; }
 180.666 +			if (ar[i] == TEXTFONTCLASS) { o3_textfontclass = ar[++i]; continue; }
 180.667 +			if (ar[i] == CAPTIONFONTCLASS) { o3_captionfontclass = ar[++i]; continue; }
 180.668 +			if (ar[i] == CLOSEFONTCLASS) { o3_closefontclass = ar[++i]; continue; }
 180.669 +			if (ar[i] == PADUNIT) { o3_padunit = ar[++i]; continue; }
 180.670 +			if (ar[i] == HEIGHTUNIT) { o3_heightunit = ar[++i]; continue; }
 180.671 +			if (ar[i] == WIDTHUNIT) { o3_widthunit = ar[++i]; continue; }
 180.672 +			if (ar[i] == TEXTSIZEUNIT) { o3_textsizeunit = ar[++i]; continue; }
 180.673 +			if (ar[i] == TEXTDECORATION) { o3_textdecoration = ar[++i]; continue; }
 180.674 +			if (ar[i] == TEXTSTYLE) { o3_textstyle = ar[++i]; continue; }
 180.675 +			if (ar[i] == TEXTWEIGHT) { o3_textweight = ar[++i]; continue; }
 180.676 +			if (ar[i] == CAPTIONSIZEUNIT) { o3_captionsizeunit = ar[++i]; continue; }
 180.677 +			if (ar[i] == CAPTIONDECORATION) { o3_captiondecoration = ar[++i]; continue; }
 180.678 +			if (ar[i] == CAPTIONSTYLE) { o3_captionstyle = ar[++i]; continue; }
 180.679 +			if (ar[i] == CAPTIONWEIGHT) { o3_captionweight = ar[++i]; continue; }
 180.680 +			if (ar[i] == CLOSESIZEUNIT) { o3_closesizeunit = ar[++i]; continue; }
 180.681 +			if (ar[i] == CLOSEDECORATION) { o3_closedecoration = ar[++i]; continue; }
 180.682 +			if (ar[i] == CLOSESTYLE) { o3_closestyle = ar[++i]; continue; }
 180.683 +			if (ar[i] == CLOSEWEIGHT) { o3_closeweight = ar[++i]; continue; }
 180.684 +		}
 180.685 +	}
 180.686 +
 180.687 +	if (o3_delay == 0) {
 180.688 +		return overlib350();
 180.689 +	} else {
 180.690 +		o3_delayid = setTimeout("overlib350()", o3_delay);
 180.691 +
 180.692 +		if (o3_sticky) {
 180.693 +			return false;
 180.694 +		} else {
 180.695 +			return true;
 180.696 +		}
 180.697 +	}
 180.698 +}
 180.699 +
 180.700 +
 180.701 +
 180.702 +// Clears popups if appropriate
 180.703 +function nd() {
 180.704 +	if ( o3_removecounter >= 1 ) { o3_showingsticky = 0 };
 180.705 +	if ( (ns4) || (ie4) || (ns6) ) {
 180.706 +		if ( o3_showingsticky == 0 ) {
 180.707 +			o3_allowmove = 0;
 180.708 +			if (over != null) hideObject(over);
 180.709 +		} else {
 180.710 +			o3_removecounter++;
 180.711 +		}
 180.712 +	}
 180.713 +	
 180.714 +	return true;
 180.715 +}
 180.716 +
 180.717 +
 180.718 +
 180.719 +
 180.720 +
 180.721 +
 180.722 +
 180.723 +////////////////////////////////////////////////////////////////////////////////////
 180.724 +// OVERLIB 3.50 FUNCTION
 180.725 +////////////////////////////////////////////////////////////////////////////////////
 180.726 +
 180.727 +
 180.728 +// This function decides what it is we want to display and how we want it done.
 180.729 +function overlib350() {
 180.730 +
 180.731 +	// Make layer content
 180.732 +	var layerhtml;
 180.733 +
 180.734 +	if (o3_background != "" || o3_fullhtml) {
 180.735 +		// Use background instead of box.
 180.736 +		layerhtml = ol_content_background(o3_text, o3_background, o3_fullhtml);
 180.737 +	} else {
 180.738 +		// They want a popup box.
 180.739 +
 180.740 +		// Prepare popup background
 180.741 +		if (o3_fgbackground != "" && o3_css == CSSOFF) {
 180.742 +			o3_fgbackground = "BACKGROUND=\""+o3_fgbackground+"\"";
 180.743 +		}
 180.744 +		if (o3_bgbackground != "" && o3_css == CSSOFF) {
 180.745 +			o3_bgbackground = "BACKGROUND=\""+o3_bgbackground+"\"";
 180.746 +		}
 180.747 +
 180.748 +		// Prepare popup colors
 180.749 +		if (o3_fgcolor != "" && o3_css == CSSOFF) {
 180.750 +			o3_fgcolor = "BGCOLOR=\""+o3_fgcolor+"\"";
 180.751 +		}
 180.752 +		if (o3_bgcolor != "" && o3_css == CSSOFF) {
 180.753 +			o3_bgcolor = "BGCOLOR=\""+o3_bgcolor+"\"";
 180.754 +		}
 180.755 +
 180.756 +		// Prepare popup height
 180.757 +		if (o3_height > 0 && o3_css == CSSOFF) {
 180.758 +			o3_height = "HEIGHT=" + o3_height;
 180.759 +		} else {
 180.760 +			o3_height = "";
 180.761 +		}
 180.762 +
 180.763 +		// Decide which kinda box.
 180.764 +		if (o3_cap == "") {
 180.765 +			// Plain
 180.766 +			layerhtml = ol_content_simple(o3_text);
 180.767 +		} else {
 180.768 +			// With caption
 180.769 +			if (o3_sticky) {
 180.770 +				// Show close text
 180.771 +				layerhtml = ol_content_caption(o3_text, o3_cap, o3_close);
 180.772 +			} else {
 180.773 +				// No close text
 180.774 +				layerhtml = ol_content_caption(o3_text, o3_cap, "");
 180.775 +			}
 180.776 +		}
 180.777 +	}
 180.778 +	
 180.779 +	// We want it to stick!
 180.780 +	if (o3_sticky) {
 180.781 +		o3_showingsticky = 1;
 180.782 +		o3_removecounter = 0;
 180.783 +	}
 180.784 +	
 180.785 +	// Write layer
 180.786 +	layerWrite(layerhtml);
 180.787 +	
 180.788 +	// Prepare status bar
 180.789 +	if (o3_autostatus > 0) {
 180.790 +		o3_status = o3_text;
 180.791 +		if (o3_autostatus > 1) {
 180.792 +			o3_status = o3_cap;
 180.793 +		}
 180.794 +	}
 180.795 +
 180.796 +	// When placing the layer the first time, even stickies may be moved.
 180.797 +	o3_allowmove = 0;
 180.798 +
 180.799 +	// Initiate a timer for timeout
 180.800 +	if (o3_timeout > 0) {          
 180.801 +		if (o3_timerid > 0) clearTimeout(o3_timerid);
 180.802 +		o3_timerid = setTimeout("cClick()", o3_timeout);
 180.803 +	}
 180.804 +
 180.805 +	// Show layer
 180.806 +	disp(o3_status);
 180.807 +
 180.808 +	// Stickies should stay where they are.	
 180.809 +	if (o3_sticky) {
 180.810 +		o3_allowmove = 0;
 180.811 +		return false;
 180.812 +	} else {
 180.813 +		return true;
 180.814 +	}
 180.815 +}
 180.816 +
 180.817 +
 180.818 +
 180.819 +////////////////////////////////////////////////////////////////////////////////////
 180.820 +// LAYER GENERATION FUNCTIONS
 180.821 +////////////////////////////////////////////////////////////////////////////////////
 180.822 +
 180.823 +// Makes simple table without caption
 180.824 +function ol_content_simple(text) {
 180.825 +	if (o3_css == CSSCLASS) txt = "<TABLE WIDTH="+o3_width+" BORDER=0 CELLPADDING="+o3_border+" CELLSPACING=0 class=\""+o3_bgclass+"\"><TR><TD><TABLE WIDTH=100% BORDER=0 CELLPADDING=2 CELLSPACING=0 class=\""+o3_fgclass+"\"><TR><TD VALIGN=TOP><FONT class=\""+o3_textfontclass+"\">"+text+"</FONT></TD></TR></TABLE></TD></TR></TABLE>";
 180.826 +	if (o3_css == CSSSTYLE) txt = "<TABLE WIDTH="+o3_width+" BORDER=0 CELLPADDING="+o3_border+" CELLSPACING=0 style=\"background-color: "+o3_bgcolor+"; height: "+o3_height+o3_heightunit+";\"><TR><TD><TABLE WIDTH=100% BORDER=0 CELLPADDING=2 CELLSPACING=0 style=\"color: "+o3_fgcolor+"; background-color: "+o3_fgcolor+"; height: "+o3_height+o3_heightunit+";\"><TR><TD VALIGN=TOP><FONT style=\"font-family: "+o3_textfont+"; color: "+o3_textcolor+"; font-size: "+o3_textsize+o3_textsizeunit+"; text-decoration: "+o3_textdecoration+"; font-weight: "+o3_textweight+"; font-style:"+o3_textstyle+"\">"+text+"</FONT></TD></TR></TABLE></TD></TR></TABLE>";
 180.827 +	if (o3_css == CSSOFF) txt = "<TABLE WIDTH="+o3_width+" BORDER=0 CELLPADDING="+o3_border+" CELLSPACING=0 "+o3_bgcolor+" "+o3_height+"><TR><TD><TABLE WIDTH=100% BORDER=0 CELLPADDING=2 CELLSPACING=0 "+o3_fgcolor+" "+o3_fgbackground+" "+o3_height+"><TR><TD VALIGN=TOP><FONT FACE=\""+o3_textfont+"\" COLOR=\""+o3_textcolor+"\" SIZE=\""+o3_textsize+"\">"+text+"</FONT></TD></TR></TABLE></TD></TR></TABLE>";
 180.828 +
 180.829 +	set_background("");
 180.830 +	return txt;
 180.831 +}
 180.832 +
 180.833 +
 180.834 +
 180.835 +
 180.836 +// Makes table with caption and optional close link
 180.837 +function ol_content_caption(text, title, close) {
 180.838 +	closing = "";
 180.839 +	closeevent = "onMouseOver";
 180.840 +
 180.841 +	if (o3_closeclick == 1) closeevent = "onClick";
 180.842 +	if (o3_capicon != "") o3_capicon = "<IMG SRC=\""+o3_capicon+"\"> ";
 180.843 +
 180.844 +	if (close != "") {
 180.845 +		if (o3_css == CSSCLASS) closing = "<TD ALIGN=RIGHT><A HREF=\"/\" "+closeevent+"=\"return cClick();\" class=\""+o3_closefontclass+"\">"+close+"</A></TD>";
 180.846 +		if (o3_css == CSSSTYLE) closing = "<TD ALIGN=RIGHT><A HREF=\"/\" "+closeevent+"=\"return cClick();\" style=\"color: "+o3_closecolor+"; font-family: "+o3_closefont+"; font-size: "+o3_closesize+o3_closesizeunit+"; text-decoration: "+o3_closedecoration+"; font-weight: "+o3_closeweight+"; font-style:"+o3_closestyle+";\">"+close+"</A></TD>";
 180.847 +		if (o3_css == CSSOFF) closing = "<TD ALIGN=RIGHT><A HREF=\"/\" "+closeevent+"=\"return cClick();\"><FONT COLOR=\""+o3_closecolor+"\" FACE=\""+o3_closefont+"\" SIZE=\""+o3_closesize+"\">"+close+"</FONT></A></TD>";
 180.848 +	}
 180.849 +
 180.850 +	if (o3_css == CSSCLASS) txt = "<TABLE WIDTH="+o3_width+" BORDER=0 CELLPADDING="+o3_border+" CELLSPACING=0 class=\""+o3_bgclass+"\"><TR><TD><TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0><TR><TD><FONT class=\""+o3_captionfontclass+"\">"+o3_capicon+title+"</FONT></TD>"+closing+"</TR></TABLE><TABLE WIDTH=100% BORDER=0 CELLPADDING=2 CELLSPACING=0 class=\""+o3_fgclass+"\"><TR><TD VALIGN=TOP><FONT class=\""+o3_textfontclass+"\">"+text+"</FONT></TD></TR></TABLE></TD></TR></TABLE>";
 180.851 +	if (o3_css == CSSSTYLE) txt = "<TABLE WIDTH="+o3_width+" BORDER=0 CELLPADDING="+o3_border+" CELLSPACING=0 style=\"background-color: "+o3_bgcolor+"; background-image: url("+o3_bgbackground+"); height: "+o3_height+o3_heightunit+";\"><TR><TD><TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0><TR><TD><FONT style=\"font-family: "+o3_captionfont+"; color: "+o3_capcolor+"; font-size: "+o3_captionsize+o3_captionsizeunit+"; font-weight: "+o3_captionweight+"; font-style: "+o3_captionstyle+";\">"+o3_capicon+title+"</FONT></TD>"+closing+"</TR></TABLE><TABLE WIDTH=100% BORDER=0 CELLPADDING=2 CELLSPACING=0 style=\"color: "+o3_fgcolor+"; background-color: "+o3_fgcolor+"; height: "+o3_height+o3_heightunit+";\"><TR><TD VALIGN=TOP><FONT style=\"font-family: "+o3_textfont+"; color: "+o3_textcolor+"; font-size: "+o3_textsize+o3_textsizeunit+"; text-decoration: "+o3_textdecoration+"; font-weight: "+o3_textweight+"; font-style:"+o3_textstyle+"\">"+text+"</FONT></TD></TR></TABLE></TD></TR></TABLE>";
 180.852 +	if (o3_css == CSSOFF) txt = "<TABLE WIDTH="+o3_width+" BORDER=0 CELLPADDING="+o3_border+" CELLSPACING=0 "+o3_bgcolor+" "+o3_bgbackground+" "+o3_height+"><TR><TD><TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0><TR><TD><B><FONT COLOR=\""+o3_capcolor+"\" FACE=\""+o3_captionfont+"\" SIZE=\""+o3_captionsize+"\">"+o3_capicon+title+"</FONT></B></TD>"+closing+"</TR></TABLE><TABLE WIDTH=100% BORDER=0 CELLPADDING=2 CELLSPACING=0 "+o3_fgcolor+" "+o3_fgbackground+" "+o3_height+"><TR><TD VALIGN=TOP><FONT COLOR=\""+o3_textcolor+"\" FACE=\""+o3_textfont+"\" SIZE=\""+o3_textsize+"\">"+text+"</FONT></TD></TR></TABLE></TD></TR></TABLE>";
 180.853 +
 180.854 +	set_background("");
 180.855 +	return txt;
 180.856 +}
 180.857 +
 180.858 +// Sets the background picture, padding and lots more. :)
 180.859 +function ol_content_background(text, picture, hasfullhtml) {
 180.860 +	if (hasfullhtml) {
 180.861 +		txt = text;
 180.862 +	} else {
 180.863 +		if (o3_css == CSSCLASS) txt = "<TABLE WIDTH="+o3_width+o3_widthunit+" BORDER=0 CELLPADDING=0 CELLSPACING=0 HEIGHT="+o3_height+o3_heightunit+"><TR><TD COLSPAN=3 HEIGHT="+o3_padyt+o3_padunit+"></TD></TR><TR><TD WIDTH="+o3_padxl+o3_padunit+"></TD><TD VALIGN=TOP WIDTH="+(o3_width-o3_padxl-o3_padxr)+o3_padunit+"><FONT class=\""+o3_textfontclass+"\">"+text+"</FONT></TD><TD WIDTH="+o3_padxr+o3_padunit+"></TD></TR><TR><TD COLSPAN=3 HEIGHT="+o3_padyb+o3_padunit+"></TD></TR></TABLE>";
 180.864 +		if (o3_css == CSSSTYLE) txt = "<TABLE WIDTH="+o3_width+o3_widthunit+" BORDER=0 CELLPADDING=0 CELLSPACING=0 HEIGHT="+o3_height+o3_heightunit+"><TR><TD COLSPAN=3 HEIGHT="+o3_padyt+o3_padunit+"></TD></TR><TR><TD WIDTH="+o3_padxl+o3_padunit+"></TD><TD VALIGN=TOP WIDTH="+(o3_width-o3_padxl-o3_padxr)+o3_padunit+"><FONT style=\"font-family: "+o3_textfont+"; color: "+o3_textcolor+"; font-size: "+o3_textsize+o3_textsizeunit+";\">"+text+"</FONT></TD><TD WIDTH="+o3_padxr+o3_padunit+"></TD></TR><TR><TD COLSPAN=3 HEIGHT="+o3_padyb+o3_padunit+"></TD></TR></TABLE>";
 180.865 +		if (o3_css == CSSOFF) txt = "<TABLE WIDTH="+o3_width+" BORDER=0 CELLPADDING=0 CELLSPACING=0 HEIGHT="+o3_height+"><TR><TD COLSPAN=3 HEIGHT="+o3_padyt+"></TD></TR><TR><TD WIDTH="+o3_padxl+"></TD><TD VALIGN=TOP WIDTH="+(o3_width-o3_padxl-o3_padxr)+"><FONT FACE=\""+o3_textfont+"\" COLOR=\""+o3_textcolor+"\" SIZE=\""+o3_textsize+"\">"+text+"</FONT></TD><TD WIDTH="+o3_padxr+"></TD></TR><TR><TD COLSPAN=3 HEIGHT="+o3_padyb+"></TD></TR></TABLE>";
 180.866 +	}
 180.867 +	set_background(picture);
 180.868 +	return txt;
 180.869 +}
 180.870 +
 180.871 +// Loads a picture into the div.
 180.872 +function set_background(pic) {
 180.873 +	if (pic == "") {
 180.874 +		if (ie4) over.backgroundImage = "none";
 180.875 +		if (ns6) over.style.backgroundImage = "none";
 180.876 +	} else {
 180.877 +		if (ns4) {
 180.878 +			over.background.src = pic;
 180.879 +		} else if (ie4) {
 180.880 +			over.backgroundImage = "url("+pic+")";
 180.881 +		} else if (ns6) {
 180.882 +			over.style.backgroundImage = "url("+pic+")";
 180.883 +		}
 180.884 +	}
 180.885 +}
 180.886 +
 180.887 +
 180.888 +
 180.889 +////////////////////////////////////////////////////////////////////////////////////
 180.890 +// HANDLING FUNCTIONS
 180.891 +////////////////////////////////////////////////////////////////////////////////////
 180.892 +
 180.893 +
 180.894 +// Displays the popup
 180.895 +function disp(statustext) {
 180.896 +	if ( (ns4) || (ie4) || (ns6) ) {
 180.897 +		if (o3_allowmove == 0) 	{
 180.898 +			placeLayer();
 180.899 +			showObject(over);
 180.900 +			o3_allowmove = 1;
 180.901 +		}
 180.902 +	}
 180.903 +
 180.904 +	if (statustext != "") {
 180.905 +		self.status = statustext;
 180.906 +	}
 180.907 +}
 180.908 +
 180.909 +// Decides where we want the popup.
 180.910 +function placeLayer() {
 180.911 +	var placeX, placeY;
 180.912 +	
 180.913 +	// HORIZONTAL PLACEMENT
 180.914 +	if (o3_fixx > -1) {
 180.915 +		// Fixed position
 180.916 +		placeX = o3_fixx;
 180.917 +	} else {
 180.918 +		winoffset = (ie4) ? o3_frame.document.body.scrollLeft : o3_frame.pageXOffset;
 180.919 +		if (ie4) iwidth = o3_frame.document.body.clientWidth;
 180.920 +		if (ns4) iwidth = o3_frame.innerWidth; // was screwed in mozilla, fixed now?
 180.921 +		if (ns6) iwidth = o3_frame.outerWidth;
 180.922 +		
 180.923 +		// If HAUTO, decide what to use.
 180.924 +		if (o3_hauto == 1) {
 180.925 +			if ( (o3_x - winoffset) > ((eval(iwidth)) / 2)) {
 180.926 +				o3_hpos = LEFT;
 180.927 +			} else {
 180.928 +				o3_hpos = RIGHT;
 180.929 +			}
 180.930 +		}
 180.931 +		
 180.932 +		// From mouse
 180.933 +		if (o3_hpos == CENTER) { // Center
 180.934 +			placeX = o3_x+o3_offsetx-(o3_width/2);
 180.935 +		}
 180.936 +		if (o3_hpos == RIGHT) { // Right
 180.937 +			placeX = o3_x+o3_offsetx;
 180.938 +			if ( (eval(placeX) + eval(o3_width)) > (winoffset + iwidth) ) {
 180.939 +				placeX = iwidth + winoffset - o3_width;
 180.940 +				if (placeX < 0) placeX = 0;
 180.941 +			}
 180.942 +		}
 180.943 +		if (o3_hpos == LEFT) { // Left
 180.944 +			placeX = o3_x-o3_offsetx-o3_width;
 180.945 +			if (placeX < winoffset) placeX = winoffset;
 180.946 +		}
 180.947 +	
 180.948 +		// Snapping!
 180.949 +		if (o3_snapx > 1) {
 180.950 +			var snapping = placeX % o3_snapx;
 180.951 +			if (o3_hpos == LEFT) {
 180.952 +				placeX = placeX - (o3_snapx + snapping);
 180.953 +			} else {
 180.954 +				// CENTER and RIGHT
 180.955 +				placeX = placeX + (o3_snapx - snapping);
 180.956 +			}
 180.957 +			if (placeX < winoffset) placeX = winoffset;
 180.958 +		}
 180.959 +	}
 180.960 +
 180.961 +	
 180.962 +	
 180.963 +	// VERTICAL PLACEMENT
 180.964 +	if (o3_fixy > -1) {
 180.965 +		// Fixed position
 180.966 +		placeY = o3_fixy;
 180.967 +	} else {
 180.968 +		scrolloffset = (ie4) ? o3_frame.document.body.scrollTop : o3_frame.pageYOffset;
 180.969 +
 180.970 +		// If VAUTO, decide what to use.
 180.971 +		if (o3_vauto == 1) {
 180.972 +			if (ie4) iheight = o3_frame.document.body.clientHeight;
 180.973 +			if (ns4) iheight = o3_frame.innerHeight;
 180.974 +			if (ns6) iheight = o3_frame.outerHeight;
 180.975 +
 180.976 +			iheight = (eval(iheight)) / 2;
 180.977 +			if ( (o3_y - scrolloffset) > iheight) {
 180.978 +				o3_vpos = ABOVE;
 180.979 +			} else {
 180.980 +				o3_vpos = BELOW;
 180.981 +			}
 180.982 +		}
 180.983 +
 180.984 +
 180.985 +		// From mouse
 180.986 +		if (o3_vpos == ABOVE) {
 180.987 +			if (o3_aboveheight == 0) {
 180.988 +				var divref = (ie4) ? o3_frame.document.all['overDiv'] : over;
 180.989 +				o3_aboveheight = (ns4) ? divref.clip.height : divref.offsetHeight;
 180.990 +			}
 180.991 +
 180.992 +			placeY = o3_y - (o3_aboveheight + o3_offsety);
 180.993 +			if (placeY < scrolloffset) placeY = scrolloffset;
 180.994 +		} else {
 180.995 +			// BELOW
 180.996 +			placeY = o3_y + o3_offsety;
 180.997 +		}
 180.998 +
 180.999 +		// Snapping!
180.1000 +		if (o3_snapy > 1) {
180.1001 +			var snapping = placeY % o3_snapy;
180.1002 +			
180.1003 +			if (o3_aboveheight > 0 && o3_vpos == ABOVE) {
180.1004 +				placeY = placeY - (o3_snapy + snapping);
180.1005 +			} else {
180.1006 +				placeY = placeY + (o3_snapy - snapping);
180.1007 +			}
180.1008 +			
180.1009 +			if (placeY < scrolloffset) placeY = scrolloffset;
180.1010 +		}
180.1011 +	}
180.1012 +
180.1013 +
180.1014 +	// Actually move the object.	
180.1015 +	repositionTo(over, placeX, placeY);
180.1016 +}
180.1017 +
180.1018 +
180.1019 +// Moves the layer
180.1020 +function mouseMove(e) {
180.1021 +	if ( (ns4) || (ns6) ) {o3_x=e.pageX; o3_y=e.pageY;}
180.1022 +	if (ie4) {o3_x=event.x; o3_y=event.y;}
180.1023 +	if (ie5) {o3_x=event.x+o3_frame.document.body.scrollLeft; o3_y=event.y+o3_frame.document.body.scrollTop;}
180.1024 +	
180.1025 +	if (o3_allowmove == 1) {
180.1026 +		placeLayer();
180.1027 +	}
180.1028 +}
180.1029 +
180.1030 +// The Close onMouseOver function for stickies
180.1031 +function cClick() {
180.1032 +	hideObject(over);
180.1033 +	o3_showingsticky = 0;
180.1034 +	
180.1035 +	return false;
180.1036 +}
180.1037 +
180.1038 +
180.1039 +// Makes sure target frame has overLIB
180.1040 +function compatibleframe(frameid) {        
180.1041 +	if (ns4) {
180.1042 +		if (typeof frameid.document.overDiv =='undefined') return false;
180.1043 +	} else if (ie4) {
180.1044 +		if (typeof frameid.document.all["overDiv"] =='undefined') return false;
180.1045 +	} else if (ns6) {
180.1046 +		if (frameid.document.getElementById('overDiv') == null) return false;
180.1047 +	}
180.1048 +
180.1049 +	return true;
180.1050 +}
180.1051 +
180.1052 +
180.1053 +
180.1054 +////////////////////////////////////////////////////////////////////////////////////
180.1055 +// LAYER FUNCTIONS
180.1056 +////////////////////////////////////////////////////////////////////////////////////
180.1057 +
180.1058 +
180.1059 +// Writes to a layer
180.1060 +function layerWrite(txt) {
180.1061 +	txt += "\n";
180.1062 +	
180.1063 +        if (ns4) {
180.1064 +                var lyr = o3_frame.document.overDiv.document
180.1065 +
180.1066 +                lyr.write(txt)
180.1067 +                lyr.close()
180.1068 +        } else if (ie4) {
180.1069 +		o3_frame.document.all["overDiv"].innerHTML = txt
180.1070 +	} else if (ns6) {
180.1071 +		range = o3_frame.document.createRange();
180.1072 +		range.setStartBefore(over);
180.1073 +		domfrag = range.createContextualFragment(txt);
180.1074 +		while (over.hasChildNodes()) {
180.1075 +			over.removeChild(over.lastChild);
180.1076 +		}
180.1077 +		over.appendChild(domfrag);
180.1078 +	}
180.1079 +}
180.1080 +
180.1081 +// Make an object visible
180.1082 +function showObject(obj) {
180.1083 +        if (ns4) obj.visibility = "show";
180.1084 +        else if (ie4) obj.visibility = "visible";
180.1085 +	else if (ns6) obj.style.visibility = "visible";
180.1086 +}
180.1087 +
180.1088 +// Hides an object
180.1089 +function hideObject(obj) {
180.1090 +        if (ns4) obj.visibility = "hide";
180.1091 +        else if (ie4) obj.visibility = "hidden";
180.1092 +	else if (ns6) obj.style.visibility = "hidden";
180.1093 +        
180.1094 +	if (o3_timerid > 0) clearTimeout(o3_timerid);
180.1095 +	if (o3_delayid > 0) clearTimeout(o3_delayid);
180.1096 +	o3_timerid = 0;
180.1097 +	o3_delayid = 0;
180.1098 +        self.status = "";
180.1099 +}
180.1100 +
180.1101 +// Move a layer
180.1102 +function repositionTo(obj,xL,yL) {
180.1103 +	if ( (ns4) || (ie4) ) {
180.1104 +	        obj.left = xL;
180.1105 +	        obj.top = yL;
180.1106 +	} else if (ns6) {
180.1107 +		obj.style.left = xL + "px";
180.1108 +		obj.style.top = yL+ "px";
180.1109 +	}
180.1110 +}
180.1111 +
180.1112 +
180.1113 +
180.1114 +
180.1115 +
180.1116 +////////////////////////////////////////////////////////////////////////////////////
180.1117 +// PARSER FUNCTIONS
180.1118 +////////////////////////////////////////////////////////////////////////////////////
180.1119 +
180.1120 +
180.1121 +// Defines which frame we should point to.
180.1122 +function opt_FRAME(frm) {
180.1123 +        o3_frame = compatibleframe(frm) ? frm : ol_frame;
180.1124 +
180.1125 +	if ( (ns4) || (ie4 || (ns6)) ) {
180.1126 +		if (ns4) over = o3_frame.document.overDiv;
180.1127 +		if (ie4) over = o3_frame.overDiv.style;
180.1128 +		if (ns6) over = o3_frame.document.getElementById("overDiv");
180.1129 +	}
180.1130 +
180.1131 +	return 0;
180.1132 +}
180.1133 +
180.1134 +// Calls an external function
180.1135 +function opt_FUNCTION(callme) {
180.1136 +	o3_text = callme()
180.1137 +	return 0;
180.1138 +}
180.1139 +
180.1140 +
180.1141 +
180.1142 +
180.1143 +//end (For internal purposes.)
180.1144 +////////////////////////////////////////////////////////////////////////////////////
180.1145 +// OVERLIB 2 COMPATABILITY FUNCTIONS
180.1146 +// If you aren't upgrading you can remove the below section.
180.1147 +////////////////////////////////////////////////////////////////////////////////////
180.1148 +
180.1149 +// Converts old 0=left, 1=right and 2=center into constants.
180.1150 +function vpos_convert(d) {
180.1151 +	if (d == 0) {
180.1152 +		d = LEFT;
180.1153 +	} else {
180.1154 +		if (d == 1) {
180.1155 +			d = RIGHT;
180.1156 +		} else {
180.1157 +			d = CENTER;
180.1158 +		}
180.1159 +	}
180.1160 +	
180.1161 +	return d;
180.1162 +}
180.1163 +
180.1164 +// Simple popup
180.1165 +function dts(d,text) {
180.1166 +	o3_hpos = vpos_convert(d);
180.1167 +	overlib(text, o3_hpos, CAPTION, "");
180.1168 +}
180.1169 +
180.1170 +// Caption popup
180.1171 +function dtc(d,text, title) {
180.1172 +	o3_hpos = vpos_convert(d);
180.1173 +	overlib(text, CAPTION, title, o3_hpos);
180.1174 +}
180.1175 +
180.1176 +// Sticky
180.1177 +function stc(d,text, title) {
180.1178 +	o3_hpos = vpos_convert(d);
180.1179 +	overlib(text, CAPTION, title, o3_hpos, STICKY);
180.1180 +}
180.1181 +
180.1182 +// Simple popup right
180.1183 +function drs(text) {
180.1184 +	dts(1,text);
180.1185 +}
180.1186 +
180.1187 +// Caption popup right
180.1188 +function drc(text, title) {
180.1189 +	dtc(1,text,title);
180.1190 +}
180.1191 +
180.1192 +// Sticky caption right
180.1193 +function src(text,title) {
180.1194 +	stc(1,text,title);
180.1195 +}
180.1196 +
180.1197 +// Simple popup left
180.1198 +function dls(text) {
180.1199 +	dts(0,text);
180.1200 +}
180.1201 +
180.1202 +// Caption popup left
180.1203 +function dlc(text, title) {
180.1204 +	dtc(0,text,title);
180.1205 +}
180.1206 +
180.1207 +// Sticky caption left
180.1208 +function slc(text,title) {
180.1209 +	stc(0,text,title);
180.1210 +}
180.1211 +
180.1212 +// Simple popup center
180.1213 +function dcs(text) {
180.1214 +	dts(2,text);
180.1215 +}
180.1216 +
180.1217 +// Caption popup center
180.1218 +function dcc(text, title) {
180.1219 +	dtc(2,text,title);
180.1220 +}
180.1221 +
180.1222 +// Sticky caption center
180.1223 +function scc(text,title) {
180.1224 +	stc(2,text,title);
180.1225 +}
   181.1 Binary file java/cewolf-1.0/src/site/plotdatasetcombinations.sxc has changed
   182.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   182.2 +++ b/java/cewolf-1.0/src/site/site.xml	Sat Feb 28 21:31:02 2009 +0100
   182.3 @@ -0,0 +1,32 @@
   182.4 +<?xml version="1.0" encoding="ISO-8859-1"?>
   182.5 +
   182.6 +<project name="Cewolf Tag Library">
   182.7 +  <bannerLeft>
   182.8 +      <name>Mojo</name>
   182.9 +      <src>http://mojo.codehaus.org/images/mojo_logo.png</src>
  182.10 +      <href>http://mojo.codehaus.org</href>
  182.11 +   </bannerLeft>
  182.12 +   <bannerRight>
  182.13 +      <name>Codehaus</name>
  182.14 +      <src>http://mojo.codehaus.org/images/codehaus-small.png</src>
  182.15 +      <href>http://www.codehaus.org</href>
  182.16 +   </bannerRight>
  182.17 +   <body>
  182.18 +      <links>
  182.19 +         <item name="Mojo" href="http://mojo.codehaus.org"/>
  182.20 +         <item name="Maven" href="http://maven.apache.org/maven2"/>
  182.21 +      </links>
  182.22 +       <menu name="Overview">
  182.23 +      <item name="Introduction" href="brief.html"/>
  182.24 +      <item name="Tutuorial" href="tutorial.html"/>
  182.25 +      <item name="Tag Library" href="taglib.html"/>
  182.26 +      <item name="Screens" href="demo.html"/>
  182.27 +   <item name="Tag Library" href="taglib.html"/>
  182.28 +<item name="Javadoc" href="/javadoc/index.html"/>
  182.29 +<item name="Project" href="http://sourceforge.net/projects/cewolf"/>
  182.30 +<item name="Downloads" href="http://sourceforge.net/project/showfiles.php?group_id=57282"/>
  182.31 +<item name="Faq" href="/faq/faq.html"/>
  182.32 +    </menu>
  182.33 +    ${reports}
  182.34 +  </body>
  182.35 +</project>
   183.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   183.2 +++ b/java/cewolf-1.0/src/site/taglib.html	Sat Feb 28 21:31:02 2009 +0100
   183.3 @@ -0,0 +1,461 @@
   183.4 +<html><head><META http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Cewolf Tag Library</title><link rel="stylesheet" type="text/css" href="cewolf.css" title="Style"></head><body><h1>Cewolf Tag Library (0.13.0)</h1><p></p>This tag library is designed to describe charts of all kinds.<p></p><h2><a name="plot"></a>
   183.5 +		&lt;plot&gt;
   183.6 +	</h2>
   183.7 +The plot tag is nested inside a complex chart to define a nested or layerd plot instance.
   183.8 +data
   183.9 +<p></p><table cellpadding="3" cellspacing="0" border="1" width="85%"><tbody><tr><th colspan="2">Attributes</th></tr><tr><td valign="top" width="15%"><a name="plot.type"><b>type</b><br></a></td><td><table border="0"><tbody><tr><td width="100%">
  183.10 +The type  of the plot. One of xyarea, xyline, xyshapesandlines ,
  183.11 +scatter, xyverticalbar, step, candlestick, highlow, signal,
  183.12 +verticlebar, area, line, shapesandlines
  183.13 +<br></td></tr><tr><td>required=true<br>rtexprvalue=true<br></td></tr></tbody></table></td></tr><tr><td valign="top" width="15%"><a name="plot.xaxislabel"><b>xaxislabel</b><br></a></td><td><table border="0"><tbody><tr><td width="100%">
  183.14 +Title of the plot's x-axis. This attributes is
  183.15 +only used for horizontally combined charts.
  183.16 +<br></td></tr><tr><td>required=false<br>rtexprvalue=true<br></td></tr></tbody></table></td></tr><tr><td valign="top" width="15%"><a name="plot.yaxislabel"><b>yaxislabel</b><br></a></td><td><table border="0"><tbody><tr><td width="100%">
  183.17 +Title of the plot's y-axis. This attributes is
  183.18 +only used for vertically combined charts.
  183.19 +<br></td></tr><tr><td>required=false<br>rtexprvalue=true<br></td></tr></tbody></table></td></tr></tbody></table><h2><a name="img"></a>
  183.20 +		&lt;img&gt;
  183.21 +	</h2>
  183.22 +		optional childs: 
  183.23 +		<a href="#map">
  183.24 +			&lt;map&gt;<br></a>
  183.25 +This tag is a specialized HTML img tag. It renders the chart
  183.26 +which has been specified by a &lt;chart&gt; tag in the same page.
  183.27 +map
  183.28 +<p></p><table cellpadding="3" cellspacing="0" border="1" width="85%"><tbody><tr><th colspan="2">Attributes</th></tr><tr><td valign="top" width="15%"><a name="img.renderer"><b>renderer</b><br></a></td><td><table border="0"><tbody><tr><td width="100%">
  183.29 +Path to rendering servlet. Any path that starts with a '/' is assumed to refer to a resource relative to web application root. Otherwise, the path is assumed to refer to resource relative to the current page directory.
  183.30 +<br></td></tr><tr><td>required=true<br>rtexprvalue=true<br></td></tr></tbody></table></td></tr><tr><td valign="top" width="15%"><a name="img.chartid"><b>chartid</b><br></a></td><td><table border="0"><tbody><tr><td width="100%">
  183.31 +The id of the chart to render.
  183.32 +<br></td></tr><tr><td>required=true<br>rtexprvalue=true<br></td></tr></tbody></table></td></tr><tr><td valign="top" width="15%"><a name="img.width"><b>width</b><br></a></td><td><table border="0"><tbody><tr><td width="100%">
  183.33 +Width of the rendered chart image in pixel.
  183.34 +<br></td></tr><tr><td>required=true<br>rtexprvalue=true<br></td></tr></tbody></table></td></tr><tr><td valign="top" width="15%"><a name="img.height"><b>height</b><br></a></td><td><table border="0"><tbody><tr><td width="100%">
  183.35 +Height of the rendered chart image in pixel.
  183.36 +<br></td></tr><tr><td>required=true<br>rtexprvalue=true<br></td></tr></tbody></table></td></tr><tr><td valign="top" width="15%"><a name="img.mime"><b>mime</b><br></a></td><td><table border="0"><tbody><tr><td width="100%">
  183.37 +The MIME type of the image. Currently image/png (default),image/svg and image/jpeg are supported.
  183.38 +<br></td></tr><tr><td>default=image/png<br>required=false<br>rtexprvalue=true<br></td></tr></tbody></table></td></tr><tr><td valign="top" width="15%"><a name="img.alt"><b>alt</b><br></a></td><td><table border="0"><tbody><tr><td width="100%">
  183.39 +Corresponds to appropriate HMTL &lt;img&gt; attribute.
  183.40 +<br></td></tr><tr><td>required=false<br>rtexprvalue=true<br></td></tr></tbody></table></td></tr><tr><td valign="top" width="15%"><a name="img.hspace"><b>hspace</b><br></a></td><td><table border="0"><tbody><tr><td width="100%">
  183.41 +Corresponds to appropriate HMTL &lt;img&gt; attribute.
  183.42 +<br></td></tr><tr><td>required=false<br>rtexprvalue=true<br></td></tr></tbody></table></td></tr><tr><td valign="top" width="15%"><a name="img.vspace"><b>vspace</b><br></a></td><td><table border="0"><tbody><tr><td width="100%">
  183.43 +Corresponds to appropriate HMTL &lt;img&gt; attribute.
  183.44 +<br></td></tr><tr><td>required=false<br>rtexprvalue=true<br></td></tr></tbody></table></td></tr><tr><td valign="top" width="15%"><a name="img.align"><b>align</b><br></a></td><td><table border="0"><tbody><tr><td width="100%">
  183.45 +Corresponds to appropriate HMTL &lt;img&gt; attribute.
  183.46 +<br></td></tr><tr><td>required=false<br>rtexprvalue=true<br></td></tr></tbody></table></td></tr><tr><td valign="top" width="15%"><a name="img.border"><b>border</b><br></a></td><td><table border="0"><tbody><tr><td width="100%">
  183.47 +Corresponds to appropriate HMTL &lt;img&gt; attribute.
  183.48 +<br></td></tr><tr><td>required=false<br>rtexprvalue=true<br></td></tr></tbody></table></td></tr><tr><td valign="top" width="15%"><a name="img.ismap"><b>ismap</b><br></a></td><td><table border="0"><tbody><tr><td width="100%">
  183.49 +Corresponds to appropriate HMTL &lt;img&gt; attribute.
  183.50 +<br></td></tr><tr><td>required=false<br>rtexprvalue=true<br></td></tr></tbody></table></td></tr><tr><td valign="top" width="15%"><a name="img.longdesc"><b>longdesc</b><br></a></td><td><table border="0"><tbody><tr><td width="100%">
  183.51 +Corresponds to appropriate HMTL &lt;img&gt; attribute.
  183.52 +<br></td></tr><tr><td>required=false<br>rtexprvalue=true<br></td></tr></tbody></table></td></tr><tr><td valign="top" width="15%"><a name="img.usemap"><b>usemap</b><br></a></td><td><table border="0"><tbody><tr><td width="100%">
  183.53 +Corresponds to appropriate HMTL &lt;img&gt; attribute.
  183.54 +<br></td></tr><tr><td>required=false<br>rtexprvalue=true<br></td></tr></tbody></table></td></tr><tr><td valign="top" width="15%"><a name="img.class"><b>class</b><br></a></td><td><table border="0"><tbody><tr><td width="100%">
  183.55 +Corresponds to appropriate HMTL &lt;img&gt; attribute.
  183.56 +<br></td></tr><tr><td>required=false<br>rtexprvalue=true<br></td></tr></tbody></table></td></tr><tr><td valign="top" width="15%"><a name="img.dir"><b>dir</b><br></a></td><td><table border="0"><tbody><tr><td width="100%">
  183.57 +Corresponds to appropriate HMTL &lt;img&gt; attribute.
  183.58 +<br></td></tr><tr><td>required=false<br>rtexprvalue=true<br></td></tr></tbody></table></td></tr><tr><td valign="top" width="15%"><a name="img.lang"><b>lang</b><br></a></td><td><table border="0"><tbody><tr><td width="100%">
  183.59 +Corresponds to appropriate HMTL &lt;img&gt; attribute.
  183.60 +<br></td></tr><tr><td>required=false<br>rtexprvalue=true<br></td></tr></tbody></table></td></tr><tr><td valign="top" width="15%"><a name="img.onclick"><b>onclick</b><br></a></td><td><table border="0"><tbody><tr><td width="100%">
  183.61 +Corresponds to appropriate HMTL &lt;img&gt; attribute.
  183.62 +<br></td></tr><tr><td>required=false<br>rtexprvalue=true<br></td></tr></tbody></table></td></tr><tr><td valign="top" width="15%"><a name="img.ondbclick"><b>ondbclick</b><br></a></td><td><table border="0"><tbody><tr><td width="100%">
  183.63 +Corresponds to appropriate HMTL &lt;img&gt; attribute.
  183.64 +<br></td></tr><tr><td>required=false<br>rtexprvalue=true<br></td></tr></tbody></table></td></tr><tr><td valign="top" width="15%"><a name="img.onkeydown"><b>onkeydown</b><br></a></td><td><table border="0"><tbody><tr><td width="100%">
  183.65 +Corresponds to appropriate HMTL &lt;img&gt; attribute.
  183.66 +<br></td></tr><tr><td>required=false<br>rtexprvalue=true<br></td></tr></tbody></table></td></tr><tr><td valign="top" width="15%"><a name="img.onkeypress"><b>onkeypress</b><br></a></td><td><table border="0"><tbody><tr><td width="100%">
  183.67 +Corresponds to appropriate HMTL &lt;img&gt; attribute.
  183.68 +<br></td></tr><tr><td>required=false<br>rtexprvalue=true<br></td></tr></tbody></table></td></tr><tr><td valign="top" width="15%"><a name="img.onkeyup"><b>onkeyup</b><br></a></td><td><table border="0"><tbody><tr><td width="100%">
  183.69 +Corresponds to appropriate HMTL &lt;img&gt; attribute.
  183.70 +<br></td></tr><tr><td>required=false<br>rtexprvalue=true<br></td></tr></tbody></table></td></tr><tr><td valign="top" width="15%"><a name="img.onmousedown"><b>onmousedown</b><br></a></td><td><table border="0"><tbody><tr><td width="100%">
  183.71 +Corresponds to appropriate HMTL &lt;img&gt; attribute.
  183.72 +<br></td></tr><tr><td>required=false<br>rtexprvalue=true<br></td></tr></tbody></table></td></tr><tr><td valign="top" width="15%"><a name="img.onmousemove"><b>onmousemove</b><br></a></td><td><table border="0"><tbody><tr><td width="100%">
  183.73 +Corresponds to appropriate HMTL &lt;img&gt; attribute.
  183.74 +<br></td></tr><tr><td>required=false<br>rtexprvalue=true<br></td></tr></tbody></table></td></tr><tr><td valign="top" width="15%"><a name="img.onmouseout"><b>onmouseout</b><br></a></td><td><table border="0"><tbody><tr><td width="100%">
  183.75 +Corresponds to appropriate HMTL &lt;img&gt; attribute.
  183.76 +<br></td></tr><tr><td>required=false<br>rtexprvalue=true<br></td></tr></tbody></table></td></tr><tr><td valign="top" width="15%"><a name="img.onmouseover"><b>onmouseover</b><br></a></td><td><table border="0"><tbody><tr><td width="100%">
  183.77 +Corresponds to appropriate HMTL &lt;img&gt; attribute.
  183.78 +<br></td></tr><tr><td>required=false<br>rtexprvalue=true<br></td></tr></tbody></table></td></tr><tr><td valign="top" width="15%"><a name="img.onmouseup"><b>onmouseup</b><br></a></td><td><table border="0"><tbody><tr><td width="100%">
  183.79 +Corresponds to appropriate HMTL &lt;img&gt; attribute.
  183.80 +<br></td></tr><tr><td>required=false<br>rtexprvalue=true<br></td></tr></tbody></table></td></tr><tr><td valign="top" width="15%"><a name="img.style"><b>style</b><br></a></td><td><table border="0"><tbody><tr><td width="100%">
  183.81 +Corresponds to appropriate HMTL &lt;img&gt; attribute.
  183.82 +<br></td></tr><tr><td>required=false<br>rtexprvalue=true<br></td></tr></tbody></table></td></tr><tr><td valign="top" width="15%"><a name="img.htmltitle"><b>htmltitle</b><br></a></td><td><table border="0"><tbody><tr><td width="100%">
  183.83 +Corresponds to appropriate HMTL &lt;img&gt; title attribute.
  183.84 +<br></td></tr><tr><td>required=false<br>rtexprvalue=true<br></td></tr></tbody></table></td></tr><tr><td valign="top" width="15%"><a name="img.removeAfterRender"><b>removeAfterRender</b><br></a></td><td><table border="0"><tbody><tr><td width="100%">
  183.85 +Remove image after rendering (defaults to false). WARNING. This may cause problems if your users expect to save the images or paste them into other applications such as WORD. 
  183.86 +<br></td></tr><tr><td>required=false<br>rtexprvalue=true<br></td></tr></tbody></table></td></tr><tr><td valign="top" width="15%"><a name="img.forceSessionId"><b>forceSessionId</b><br></a></td><td><table border="0"><tbody><tr><td width="100%">
  183.87 +Forces jsessionid to be added to image url. (Defaults to True)
  183.88 +<br></td></tr><tr><td>required=false<br>rtexprvalue=true<br></td></tr></tbody></table></td></tr><tr><td valign="top" width="15%"><a name="img.timeout"><b>timeout</b><br></a></td><td><table border="0"><tbody><tr><td width="100%">
  183.89 +Sets the timeout value used in the LongTermSessionStorage obj. Value is in seconds. Default is 5 Minutes.
  183.90 +<br></td></tr><tr><td>required=false<br>rtexprvalue=true<br></td></tr></tbody></table></td></tr></tbody></table><h2><a name="imgurl"></a>
  183.91 +		&lt;imgurl&gt;
  183.92 +	</h2>
  183.93 +This tag can be used as the src attribute of a HTML img tag. E.g.:
  183.94 +&lt;img src='&lt;imgurl chartid="foobar" renderer="cewolf" width="100" height="100"/&gt;'&gt;
  183.95 +If the var attribute is used the URL is exposed as a page attribute of type String.
  183.96 +img
  183.97 +<p></p><table cellpadding="3" cellspacing="0" border="1" width="85%"><tbody><tr><th colspan="2">Attributes</th></tr><tr><td valign="top" width="15%"><a name="imgurl.var"><b>var</b><br></a></td><td><table border="0"><tbody><tr><td width="100%">
  183.98 +Name of the page scope attribute to hold the URL. If not specified the URL is printed to the page outstream.
  183.99 +<br></td></tr><tr><td>required=false<br>rtexprvalue=true<br></td></tr></tbody></table></td></tr><tr><td valign="top" width="15%"><a name="imgurl.renderer"><b>renderer</b><br></a></td><td><table border="0"><tbody><tr><td width="100%">
 183.100 +Path to rendering servlet. Any path that starts with a '/' is assumed to refer to a resource relative to web application root. Otherwise, the path is assumed to refer to resource relative to the current page directory.
 183.101 +<br></td></tr><tr><td>required=true<br>rtexprvalue=true<br></td></tr></tbody></table></td></tr><tr><td valign="top" width="15%"><a name="imgurl.chartid"><b>chartid</b><br></a></td><td><table border="0"><tbody><tr><td width="100%">
 183.102 +The id of the chart to render.
 183.103 +<br></td></tr><tr><td>required=true<br>rtexprvalue=true<br></td></tr></tbody></table></td></tr><tr><td valign="top" width="15%"><a name="imgurl.width"><b>width</b><br></a></td><td><table border="0"><tbody><tr><td width="100%">
 183.104 +Width of the rendered chart image in pixel.
 183.105 +<br></td></tr><tr><td>required=true<br>rtexprvalue=true<br></td></tr></tbody></table></td></tr><tr><td valign="top" width="15%"><a name="imgurl.height"><b>height</b><br></a></td><td><table border="0"><tbody><tr><td width="100%">
 183.106 +Height of the rendered chart image in pixel.
 183.107 +<br></td></tr><tr><td>required=true<br>rtexprvalue=true<br></td></tr></tbody></table></td></tr><tr><td valign="top" width="15%"><a name="imgurl.mime"><b>mime</b><br></a></td><td><table border="0"><tbody><tr><td width="100%">
 183.108 +The MIME type of the image. Currently image/png (default),image/svg and image/jpeg are supported.
 183.109 +<br></td></tr><tr><td>default=image/png<br>required=false<br>rtexprvalue=true<br></td></tr></tbody></table></td></tr></tbody></table><h2><a name="chart"></a>
 183.110 +		&lt;chart&gt;
 183.111 +	</h2>
 183.112 +		optional childs: 
 183.113 +		<a href="#chartpostprocessor">
 183.114 +			&lt;chartpostprocessor&gt;<br></a>
 183.115 +Root tag of a chart description.
 183.116 +
 183.117 +data
 183.118 +chartpostprocessor
 183.119 +<p></p><table cellpadding="3" cellspacing="0" border="1" width="85%"><tbody><tr><th colspan="2">Attributes</th></tr><tr><td valign="top" width="15%"><a name="chart.id"><b>id</b><br></a></td><td><table border="0"><tbody><tr><td width="100%">
 183.120 +ID under which the chart description bean will be stored in the
 183.121 +page to be found by the img tag. Beware of using an
 183.122 +ID which is not yet used for other beans in the page to avoid
 183.123 +compile errors.
 183.124 +<br></td></tr><tr><td>required=true<br>rtexprvalue=true<br></td></tr></tbody></table></td></tr><tr><td valign="top" width="15%"><a name="chart.type"><b>type</b><br></a></td><td><table border="0"><tbody><tr><td width="100%">
 183.125 +Type of the chart. One of area, areaxy, horizontalbar, horizontalbar3d,
 183.126 +line, pie, scatter, stackedhorizontalbar, stackedverticalbar,
 183.127 +stackedverticalbar3d, timeseries, verticalbar, verticalbar3d, xy,
 183.128 +candlestick, highlow, gantt, wind, signal, verticalxybar, pie3d
 183.129 +<br></td></tr><tr><td>required=true<br>rtexprvalue=true<br></td></tr></tbody></table></td></tr><tr><td valign="top" width="15%"><a name="chart.title"><b>title</b><br></a></td><td><table border="0"><tbody><tr><td width="100%">
 183.130 +Title of the chart which is displayed on the chart panel
 183.131 +above the plot pane.
 183.132 +<br></td></tr><tr><td>required=false<br>rtexprvalue=true<br></td></tr></tbody></table></td></tr><tr><td valign="top" width="15%"><a name="chart.xaxislabel"><b>xaxislabel</b><br></a></td><td><table border="0"><tbody><tr><td width="100%">
 183.133 +Title of the chart's x-axis. This attributes is
 183.134 +ignored if the type attribute of the parent chart tag is one
 183.135 +of pie3d or pie.
 183.136 +<br></td></tr><tr><td>required=false<br>rtexprvalue=true<br></td></tr></tbody></table></td></tr><tr><td valign="top" width="15%"><a name="chart.yaxislabel"><b>yaxislabel</b><br></a></td><td><table border="0"><tbody><tr><td width="100%">
 183.137 +Title of the chart's y-axis. This attributes is
 183.138 +ignored if the type attribute of the parent chart tag is one
 183.139 +of pie3d or pie.
 183.140 +<br></td></tr><tr><td>required=false<br>rtexprvalue=true<br></td></tr></tbody></table></td></tr><tr><td valign="top" width="15%"><a name="chart.background"><b>background</b><br></a></td><td><table border="0"><tbody><tr><td width="100%">
 183.141 +Background image of the chart panel. The value of this
 183.142 +attribute is the filename of a graphics file relative to the web
 183.143 +application's root directory (e.g. /WEB-INF/img/bg.jpg).
 183.144 +The image must be loadable by the default java.awt.Toolkit of the
 183.145 +servlet container's JVM.
 183.146 +<br></td></tr><tr><td>required=false<br>rtexprvalue=true<br></td></tr></tbody></table></td></tr><tr><td valign="top" width="15%"><a name="chart.backgroundimagealpha"><b>backgroundimagealpha</b><br></a></td><td><table border="0"><tbody><tr><td width="100%">
 183.147 +Chart's backgound alpha blending value as a float. Value ranges
 183.148 +from 0.0 to 1.0.
 183.149 +0.0
 183.150 +/chart[backgroundimagealpha]
 183.151 +<br></td></tr><tr><td>type=java.lang.Float<br>default=0.0<br>required=false<br>rtexprvalue=true<br></td></tr></tbody></table></td></tr><tr><td valign="top" width="15%"><a name="chart.antialias"><b>antialias</b><br></a></td><td><table border="0"><tbody><tr><td width="100%">
 183.152 +Antialiased rendering of the chart.
 183.153 +true
 183.154 +/chart[backgroundimagealpha]
 183.155 +<br></td></tr><tr><td>default=true<br>required=false<br>rtexprvalue=true<br></td></tr></tbody></table></td></tr><tr><td valign="top" width="15%"><a name="chart.showlegend"><b>showlegend</b><br></a></td><td><table border="0"><tbody><tr><td width="100%">
 183.156 +Boolean value to switch on or off the legend display inside of this panel.
 183.157 +true
 183.158 +<br></td></tr><tr><td>default=true<br>required=false<br>rtexprvalue=true<br></td></tr></tbody></table></td></tr><tr><td valign="top" width="15%"><a name="chart.legendanchor"><b>legendanchor</b><br></a></td><td><table border="0"><tbody><tr><td width="100%">
 183.159 +Sets the anchor of the legend inside of the panel. Possible values
 183.160 +are 'north', 'south', 'west', 'east'.
 183.161 +Ignored if showlegned is 'false'.
 183.162 +'south'
 183.163 +<br></td></tr><tr><td>default='south'<br>required=false<br>rtexprvalue=true<br></td></tr></tbody></table></td></tr></tbody></table><h2><a name="overlaidchart"></a>
 183.164 +		&lt;overlaidchart&gt;
 183.165 +	</h2>
 183.166 +		optional childs: 
 183.167 +		<a href="#chartpostprocessor">
 183.168 +			&lt;chartpostprocessor&gt;<br></a>
 183.169 +Root tag of a overlaid-chart description.
 183.170 +
 183.171 +data
 183.172 +chartpostprocessor
 183.173 +<p></p><table cellpadding="3" cellspacing="0" border="1" width="85%"><tbody><tr><th colspan="2">Attributes</th></tr><tr><td valign="top" width="15%"><a name="overlaidchart.id"><b>id</b><br></a></td><td><table border="0"><tbody><tr><td width="100%">
 183.174 +ID under which the chart description bean will be stored in the
 183.175 +page to be found by the img tag. Beware of using an
 183.176 +ID which is not yet used for other beans in the page to avoid
 183.177 +compile errors.
 183.178 +<br></td></tr><tr><td>required=true<br>rtexprvalue=true<br></td></tr></tbody></table></td></tr><tr><td valign="top" width="15%"><a name="overlaidchart.type"><b>type</b><br></a></td><td><table border="0"><tbody><tr><td width="100%">
 183.179 +Type of the chart. In this version only overlaidxy is supported.
 183.180 +<br></td></tr><tr><td>required=true<br>rtexprvalue=true<br></td></tr></tbody></table></td></tr><tr><td valign="top" width="15%"><a name="overlaidchart.title"><b>title</b><br></a></td><td><table border="0"><tbody><tr><td width="100%">
 183.181 +Title of the chart which is displayed on the chart panel
 183.182 +above the plot pane.
 183.183 +<br></td></tr><tr><td>required=false<br>rtexprvalue=true<br></td></tr></tbody></table></td></tr><tr><td valign="top" width="15%"><a name="overlaidchart.xaxistype"><b>xaxistype</b><br></a></td><td><table border="0"><tbody><tr><td width="100%">
 183.184 +Type of the domain axis. Possible values: date, number
 183.185 +<br></td></tr><tr><td>required=true<br>rtexprvalue=true<br></td></tr></tbody></table></td></tr><tr><td valign="top" width="15%"><a name="overlaidchart.xaxislabel"><b>xaxislabel</b><br></a></td><td><table border="0"><tbody><tr><td width="100%">
 183.186 +Title of the chart's x-axis. This attributes is
 183.187 +ignored if the type attribute of the parent chart tag is one
 183.188 +of pie3d or pie.
 183.189 +<br></td></tr><tr><td>required=false<br>rtexprvalue=true<br></td></tr></tbody></table></td></tr><tr><td valign="top" width="15%"><a name="overlaidchart.yaxistype"><b>yaxistype</b><br></a></td><td><table border="0"><tbody><tr><td width="100%">
 183.190 +Type of the range axis. Possible values: date, number
 183.191 +<br></td></tr><tr><td>required=false<br>rtexprvalue=true<br></td></tr></tbody></table></td></tr><tr><td valign="top" width="15%"><a name="overlaidchart.yaxislabel"><b>yaxislabel</b><br></a></td><td><table border="0"><tbody><tr><td width="100%">
 183.192 +Title of the chart's y-axis. This attributes is
 183.193 +ignored if the type attribute of the parent chart tag is one
 183.194 +of pie3d or pie.
 183.195 +<br></td></tr><tr><td>required=false<br>rtexprvalue=true<br></td></tr></tbody></table></td></tr><tr><td valign="top" width="15%"><a name="overlaidchart.background"><b>background</b><br></a></td><td><table border="0"><tbody><tr><td width="100%">
 183.196 +Background image of the chart panel. The value of this
 183.197 +attribute is the filename of a graphics file relative to the web
 183.198 +application's root directory (e.g. /WEB-INF/img/bg.jpg).
 183.199 +The image must be loadable by the default java.awt.Toolkit of the
 183.200 +servlet container's JVM.
 183.201 +<br></td></tr><tr><td>required=false<br>rtexprvalue=true<br></td></tr></tbody></table></td></tr><tr><td valign="top" width="15%"><a name="overlaidchart.backgroundimagealpha"><b>backgroundimagealpha</b><br></a></td><td><table border="0"><tbody><tr><td width="100%">
 183.202 +Chart's backgound alpha blending value as a float. Value ranges
 183.203 +from 0.0 to 1.0.
 183.204 +0.0
 183.205 +/chart[backgroundimagealpha]
 183.206 +<br></td></tr><tr><td>type=java.lang.Float<br>default=0.0<br>required=false<br>rtexprvalue=true<br></td></tr></tbody></table></td></tr><tr><td valign="top" width="15%"><a name="overlaidchart.antialias"><b>antialias</b><br></a></td><td><table border="0"><tbody><tr><td width="100%">
 183.207 +Antialiased rendering of the chart.
 183.208 +true
 183.209 +/chart[backgroundimagealpha]
 183.210 +<br></td></tr><tr><td>default=true<br>required=false<br>rtexprvalue=true<br></td></tr></tbody></table></td></tr><tr><td valign="top" width="15%"><a name="overlaidchart.showlegend"><b>showlegend</b><br></a></td><td><table border="0"><tbody><tr><td width="100%">
 183.211 +Boolean value to switch on or off the legend display inside of this panel.
 183.212 +true
 183.213 +<br></td></tr><tr><td>default=true<br>required=false<br>rtexprvalue=true<br></td></tr></tbody></table></td></tr><tr><td valign="top" width="15%"><a name="overlaidchart.legendanchor"><b>legendanchor</b><br></a></td><td><table border="0"><tbody><tr><td width="100%">
 183.214 +Sets the anchor of the legend inside of the panel. Possible values
 183.215 +are 'north', 'south', 'west', 'east'.
 183.216 +Ignored if showlegned is 'false'.
 183.217 +'south'
 183.218 +<br></td></tr><tr><td>default='south'<br>required=false<br>rtexprvalue=true<br></td></tr></tbody></table></td></tr></tbody></table><h2><a name="combinedchart"></a>
 183.219 +		&lt;combinedchart&gt;
 183.220 +	</h2>
 183.221 +		optional childs: 
 183.222 +		<a href="#chartpostprocessor">
 183.223 +			&lt;chartpostprocessor&gt;<br></a>
 183.224 +Root tag of a combined-chart description.
 183.225 +
 183.226 +plot
 183.227 +chartpostprocessor
 183.228 +<p></p><table cellpadding="3" cellspacing="0" border="1" width="85%"><tbody><tr><th colspan="2">Attributes</th></tr><tr><td valign="top" width="15%"><a name="combinedchart.id"><b>id</b><br></a></td><td><table border="0"><tbody><tr><td width="100%">
 183.229 +ID under which the chart description bean will be stored in the
 183.230 +page to be found by the img tag. Beware of using an
 183.231 +ID which is not yet used for other beans in the page to avoid
 183.232 +compile errors.
 183.233 +<br></td></tr><tr><td>required=true<br>rtexprvalue=true<br></td></tr></tbody></table></td></tr><tr><td valign="top" width="15%"><a name="combinedchart.type"><b>type</b><br></a></td><td><table border="0"><tbody><tr><td width="100%">
 183.234 +Type of the chart. One of combinedxy
 183.235 +<br></td></tr><tr><td>required=true<br>rtexprvalue=true<br></td></tr></tbody></table></td></tr><tr><td valign="top" width="15%"><a name="combinedchart.layout"><b>layout</b><br></a></td><td><table border="0"><tbody><tr><td width="100%">
 183.236 +Layout of the chart. Either vertical or horizontal
 183.237 +<br></td></tr><tr><td>required=true<br>rtexprvalue=true<br></td></tr></tbody></table></td></tr><tr><td valign="top" width="15%"><a name="combinedchart.title"><b>title</b><br></a></td><td><table border="0"><tbody><tr><td width="100%">
 183.238 +Title of the chart which is displayed on the chart panel
 183.239 +above the plot pane.
 183.240 +<br></td></tr><tr><td>required=false<br>rtexprvalue=true<br></td></tr></tbody></table></td></tr><tr><td valign="top" width="15%"><a name="combinedchart.xaxislabel"><b>xaxislabel</b><br></a></td><td><table border="0"><tbody><tr><td width="100%">
 183.241 +Title of the chart's x-axis. This attributes is
 183.242 +ignored if the type attribute of the parent chart tag is one
 183.243 +of pie3d or pie.
 183.244 +<br></td></tr><tr><td>required=false<br>rtexprvalue=true<br></td></tr></tbody></table></td></tr><tr><td valign="top" width="15%"><a name="combinedchart.yaxislabel"><b>yaxislabel</b><br></a></td><td><table border="0"><tbody><tr><td width="100%">
 183.245 +Title of the chart's y-axis. This attributes is
 183.246 +ignored if the type attribute of the parent chart tag is one
 183.247 +of pie3d or pie.
 183.248 +<br></td></tr><tr><td>required=false<br>rtexprvalue=true<br></td></tr></tbody></table></td></tr><tr><td valign="top" width="15%"><a name="combinedchart.background"><b>background</b><br></a></td><td><table border="0"><tbody><tr><td width="100%">
 183.249 +Background image of the chart panel. The value of this
 183.250 +attribute is the filename of a graphics file relative to the web
 183.251 +application's root directory (e.g. /WEB-INF/img/bg.jpg).
 183.252 +The image must be loadable by the default java.awt.Toolkit of the
 183.253 +servlet container's JVM.
 183.254 +<br></td></tr><tr><td>required=false<br>rtexprvalue=true<br></td></tr></tbody></table></td></tr><tr><td valign="top" width="15%"><a name="combinedchart.backgroundimagealpha"><b>backgroundimagealpha</b><br></a></td><td><table border="0"><tbody><tr><td width="100%">
 183.255 +Chart's backgound alpha blending value as a float. Value ranges
 183.256 +from 0.0 to 1.0.
 183.257 +0.0
 183.258 +/chart[backgroundimagealpha]
 183.259 +<br></td></tr><tr><td>type=java.lang.Float<br>default=0.0<br>required=false<br>rtexprvalue=true<br></td></tr></tbody></table></td></tr><tr><td valign="top" width="15%"><a name="combinedchart.antialias"><b>antialias</b><br></a></td><td><table border="0"><tbody><tr><td width="100%">
 183.260 +Antialiased rendering of the chart.
 183.261 +true
 183.262 +/chart[backgroundimagealpha]
 183.263 +<br></td></tr><tr><td>default=true<br>required=false<br>rtexprvalue=true<br></td></tr></tbody></table></td></tr><tr><td valign="top" width="15%"><a name="combinedchart.showlegend"><b>showlegend</b><br></a></td><td><table border="0"><tbody><tr><td width="100%">
 183.264 +Boolean value to switch on or off the legend display inside of this panel.
 183.265 +true
 183.266 +<br></td></tr><tr><td>default=true<br>required=false<br>rtexprvalue=true<br></td></tr></tbody></table></td></tr><tr><td valign="top" width="15%"><a name="combinedchart.legendanchor"><b>legendanchor</b><br></a></td><td><table border="0"><tbody><tr><td width="100%">
 183.267 +Sets the anchor of the legend inside of the panel. Possible values
 183.268 +are 'north', 'south', 'west', 'east'.
 183.269 +Ignored if showlegned is 'false'.
 183.270 +'south'
 183.271 +<br></td></tr><tr><td>default='south'<br>required=false<br>rtexprvalue=true<br></td></tr></tbody></table></td></tr></tbody></table><h2><a name="legend"></a>
 183.272 +		&lt;legend&gt;
 183.273 +	</h2>
 183.274 +This tag is used to render the legend of a chart in a separate image.
 183.275 +It assumes that somewhere else in the JSP a chart tag defines a chart
 183.276 +with the same ID as this legend tag.
 183.277 +<p></p><table cellpadding="3" cellspacing="0" border="1" width="85%"><tbody><tr><th colspan="2">Attributes</th></tr><tr><td valign="top" width="15%"><a name="legend.renderer"><b>renderer</b><br></a></td><td><table border="0"><tbody><tr><td width="100%">
 183.278 +Path to rendering servlet relative to web apps root URL
 183.279 +(e.g. servlet/cewolf).
 183.280 +<br></td></tr><tr><td>required=true<br>rtexprvalue=true<br></td></tr></tbody></table></td></tr><tr><td valign="top" width="15%"><a name="legend.id"><b>id</b><br></a></td><td><table border="0"><tbody><tr><td width="100%">
 183.281 +ID under which the chart description bean will be stored in the
 183.282 +session to be found by the rendering servlet. Beware of using an
 183.283 +ID which is not yet used for other beans in the session to avoid
 183.284 +overriding.
 183.285 +<br></td></tr><tr><td>required=true<br>rtexprvalue=true<br></td></tr></tbody></table></td></tr><tr><td valign="top" width="15%"><a name="legend.width"><b>width</b><br></a></td><td><table border="0"><tbody><tr><td width="100%">
 183.286 +Corresponds to appropriate HMTL &lt;img&gt; attribute.
 183.287 +<br></td></tr><tr><td>required=false<br>rtexprvalue=true<br></td></tr></tbody></table></td></tr><tr><td valign="top" width="15%"><a name="legend.height"><b>height</b><br></a></td><td><table border="0"><tbody><tr><td width="100%">
 183.288 +Corresponds to appropriate HMTL &lt;img&gt; attribute.
 183.289 +<br></td></tr><tr><td>required=false<br>rtexprvalue=true<br></td></tr></tbody></table></td></tr><tr><td valign="top" width="15%"><a name="legend.mime"><b>mime</b><br></a></td><td><table border="0"><tbody><tr><td width="100%">
 183.290 +The MIME type of the image. Currently image/png (default) and image/svg are supported.
 183.291 +image/png
 183.292 +<br></td></tr><tr><td>default=image/png<br>required=false<br>rtexprvalue=true<br></td></tr></tbody></table></td></tr><tr><td valign="top" width="15%"><a name="legend.alt"><b>alt</b><br></a></td><td><table border="0"><tbody><tr><td width="100%">
 183.293 +Corresponds to appropriate HMTL &lt;img&gt; attribute.
 183.294 +<br></td></tr><tr><td>required=false<br>rtexprvalue=true<br></td></tr></tbody></table></td></tr><tr><td valign="top" width="15%"><a name="legend.hspace"><b>hspace</b><br></a></td><td><table border="0"><tbody><tr><td width="100%">
 183.295 +Corresponds to appropriate HMTL &lt;img&gt; attribute.
 183.296 +<br></td></tr><tr><td>required=false<br>rtexprvalue=true<br></td></tr></tbody></table></td></tr><tr><td valign="top" width="15%"><a name="legend.vspace"><b>vspace</b><br></a></td><td><table border="0"><tbody><tr><td width="100%">
 183.297 +Corresponds to appropriate HMTL &lt;img&gt; attribute.
 183.298 +<br></td></tr><tr><td>required=false<br>rtexprvalue=true<br></td></tr></tbody></table></td></tr><tr><td valign="top" width="15%"><a name="legend.align"><b>align</b><br></a></td><td><table border="0"><tbody><tr><td width="100%">
 183.299 +Corresponds to appropriate HMTL &lt;img&gt; attribute.
 183.300 +<br></td></tr><tr><td>required=false<br>rtexprvalue=true<br></td></tr></tbody></table></td></tr><tr><td valign="top" width="15%"><a name="legend.border"><b>border</b><br></a></td><td><table border="0"><tbody><tr><td width="100%">
 183.301 +Corresponds to appropriate HMTL &lt;img&gt; attribute.
 183.302 +<br></td></tr><tr><td>required=false<br>rtexprvalue=true<br></td></tr></tbody></table></td></tr><tr><td valign="top" width="15%"><a name="legend.ismap"><b>ismap</b><br></a></td><td><table border="0"><tbody><tr><td width="100%">
 183.303 +Corresponds to appropriate HMTL &lt;img&gt; attribute.
 183.304 +<br></td></tr><tr><td>required=false<br>rtexprvalue=true<br></td></tr></tbody></table></td></tr><tr><td valign="top" width="15%"><a name="legend.longdesc"><b>longdesc</b><br></a></td><td><table border="0"><tbody><tr><td width="100%">
 183.305 +Corresponds to appropriate HMTL &lt;img&gt; attribute.
 183.306 +<br></td></tr><tr><td>required=false<br>rtexprvalue=true<br></td></tr></tbody></table></td></tr><tr><td valign="top" width="15%"><a name="legend.usemap"><b>usemap</b><br></a></td><td><table border="0"><tbody><tr><td width="100%">
 183.307 +Corresponds to appropriate HMTL &lt;img&gt; attribute.
 183.308 +<br></td></tr><tr><td>required=false<br>rtexprvalue=true<br></td></tr></tbody></table></td></tr><tr><td valign="top" width="15%"><a name="legend.class"><b>class</b><br></a></td><td><table border="0"><tbody><tr><td width="100%">
 183.309 +Corresponds to appropriate HMTL &lt;img&gt; attribute.
 183.310 +<br></td></tr><tr><td>required=false<br>rtexprvalue=true<br></td></tr></tbody></table></td></tr><tr><td valign="top" width="15%"><a name="legend.dir"><b>dir</b><br></a></td><td><table border="0"><tbody><tr><td width="100%">
 183.311 +Corresponds to appropriate HMTL &lt;img&gt; attribute.
 183.312 +<br></td></tr><tr><td>required=false<br>rtexprvalue=true<br></td></tr></tbody></table></td></tr><tr><td valign="top" width="15%"><a name="legend.lang"><b>lang</b><br></a></td><td><table border="0"><tbody><tr><td width="100%">
 183.313 +Corresponds to appropriate HMTL &lt;img&gt; attribute.
 183.314 +<br></td></tr><tr><td>required=false<br>rtexprvalue=true<br></td></tr></tbody></table></td></tr><tr><td valign="top" width="15%"><a name="legend.onclick"><b>onclick</b><br></a></td><td><table border="0"><tbody><tr><td width="100%">
 183.315 +Corresponds to appropriate HMTL &lt;img&gt; attribute.
 183.316 +<br></td></tr><tr><td>required=false<br>rtexprvalue=true<br></td></tr></tbody></table></td></tr><tr><td valign="top" width="15%"><a name="legend.ondbclick"><b>ondbclick</b><br></a></td><td><table border="0"><tbody><tr><td width="100%">
 183.317 +Corresponds to appropriate HMTL &lt;img&gt; attribute.
 183.318 +<br></td></tr><tr><td>required=false<br>rtexprvalue=true<br></td></tr></tbody></table></td></tr><tr><td valign="top" width="15%"><a name="legend.onkeydown"><b>onkeydown</b><br></a></td><td><table border="0"><tbody><tr><td width="100%">
 183.319 +Corresponds to appropriate HMTL &lt;img&gt; attribute.
 183.320 +<br></td></tr><tr><td>required=false<br>rtexprvalue=true<br></td></tr></tbody></table></td></tr><tr><td valign="top" width="15%"><a name="legend.onkeypress"><b>onkeypress</b><br></a></td><td><table border="0"><tbody><tr><td width="100%">
 183.321 +Corresponds to appropriate HMTL &lt;img&gt; attribute.
 183.322 +<br></td></tr><tr><td>required=false<br>rtexprvalue=true<br></td></tr></tbody></table></td></tr><tr><td valign="top" width="15%"><a name="legend.onkeyup"><b>onkeyup</b><br></a></td><td><table border="0"><tbody><tr><td width="100%">
 183.323 +Corresponds to appropriate HMTL &lt;img&gt; attribute.
 183.324 +<br></td></tr><tr><td>required=false<br>rtexprvalue=true<br></td></tr></tbody></table></td></tr><tr><td valign="top" width="15%"><a name="legend.onmousedown"><b>onmousedown</b><br></a></td><td><table border="0"><tbody><tr><td width="100%">
 183.325 +Corresponds to appropriate HMTL &lt;img&gt; attribute.
 183.326 +<br></td></tr><tr><td>required=false<br>rtexprvalue=true<br></td></tr></tbody></table></td></tr><tr><td valign="top" width="15%"><a name="legend.onmousemove"><b>onmousemove</b><br></a></td><td><table border="0"><tbody><tr><td width="100%">
 183.327 +Corresponds to appropriate HMTL &lt;img&gt; attribute.
 183.328 +<br></td></tr><tr><td>required=false<br>rtexprvalue=true<br></td></tr></tbody></table></td></tr><tr><td valign="top" width="15%"><a name="legend.onmouseout"><b>onmouseout</b><br></a></td><td><table border="0"><tbody><tr><td width="100%">
 183.329 +Corresponds to appropriate HMTL &lt;img&gt; attribute.
 183.330 +<br></td></tr><tr><td>required=false<br>rtexprvalue=true<br></td></tr></tbody></table></td></tr><tr><td valign="top" width="15%"><a name="legend.onmouseover"><b>onmouseover</b><br></a></td><td><table border="0"><tbody><tr><td width="100%">
 183.331 +Corresponds to appropriate HMTL &lt;img&gt; attribute.
 183.332 +<br></td></tr><tr><td>required=false<br>rtexprvalue=true<br></td></tr></tbody></table></td></tr><tr><td valign="top" width="15%"><a name="legend.onmouseup"><b>onmouseup</b><br></a></td><td><table border="0"><tbody><tr><td width="100%">
 183.333 +Corresponds to appropriate HMTL &lt;img&gt; attribute.
 183.334 +<br></td></tr><tr><td>required=false<br>rtexprvalue=true<br></td></tr></tbody></table></td></tr><tr><td valign="top" width="15%"><a name="legend.style"><b>style</b><br></a></td><td><table border="0"><tbody><tr><td width="100%">
 183.335 +Corresponds to appropriate HMTL &lt;img&gt; attribute.
 183.336 +<br></td></tr><tr><td>required=false<br>rtexprvalue=true<br></td></tr></tbody></table></td></tr><tr><td valign="top" width="15%"><a name="legend.htmltitle"><b>htmltitle</b><br></a></td><td><table border="0"><tbody><tr><td width="100%">
 183.337 +Corresponds to appropriate HMTL &lt;img&gt; title attribute.
 183.338 +<br></td></tr><tr><td>required=false<br>rtexprvalue=true<br></td></tr></tbody></table></td></tr><tr><td valign="top" width="15%"><a name="img.removeAfterRender"><b>removeAfterRender</b><br></a></td><td><table border="0"><tbody><tr><td width="100%">
 183.339 +Remove image after rendering (defaults to false). WARNING. This may cause problems if your users expect to save the images or paste them into other applications such as WORD. 
 183.340 +<br></td></tr><tr><td>required=false<br>rtexprvalue=true<br></td></tr></tbody></table></td></tr><tr><td valign="top" width="15%"><a name="img.forceSessionId"><b>forceSessionId</b><br></a></td><td><table border="0"><tbody><tr><td width="100%">
 183.341 +Forces jsessionid to be added to image url. (Defaults to True)
 183.342 +<br></td></tr><tr><td>required=false<br>rtexprvalue=true<br></td></tr></tbody></table></td></tr><tr><td valign="top" width="15%"><a name="img.timeout"><b>timeout</b><br></a></td><td><table border="0"><tbody><tr><td width="100%">
 183.343 +Sets the timeout value used in the LongTermSessionStorage obj. Value is in seconds. Default is 5 Minutes.
 183.344 +<br></td></tr><tr><td>required=false<br>rtexprvalue=true<br></td></tr></tbody></table></td></tr></tbody></table><h2><a name="data"></a>
 183.345 +		&lt;data&gt;
 183.346 +	</h2>
 183.347 +		optional childs: 
 183.348 +		<a href="#producer">
 183.349 +			&lt;producer&gt;<br></a>
 183.350 +A data tag provides all information needed to retrieve the data which are
 183.351 +needed by the chart. Current version only supports data provided by a
 183.352 +DatasetProducer. In future versions there will be tags to provide data
 183.353 +from a datasource (e.g. via SQL).
 183.354 +producer
 183.355 +<p></p><table cellpadding="3" cellspacing="0" border="1" width="85%"><tbody><tr><th colspan="2">Attributes</th></tr></tbody></table><h2><a name="producer"></a>
 183.356 +		&lt;producer&gt;
 183.357 +	</h2>
 183.358 +		optional childs: 
 183.359 +		<a href="#param">
 183.360 +			&lt;param&gt;<br></a>
 183.361 +A data tag provides all information needed to retrieve the data which are
 183.362 +needed by the chart. Current version only supports data provided by a
 183.363 +DatasetProducer. In future versions there will be tags to provide data
 183.364 +from a datasource (e.g. via SQL).
 183.365 +param
 183.366 +<p></p><table cellpadding="3" cellspacing="0" border="1" width="85%"><tbody><tr><th colspan="2">Attributes</th></tr><tr><td valign="top" width="15%"><a name="producer.id"><b>id</b><br></a></td><td><table border="0"><tbody><tr><td width="100%">
 183.367 +ID under which an object of type DatasetProducer can be found in
 183.368 +pageContext. This object is used to retrieve the dataset of the chart.
 183.369 +<br></td></tr><tr><td>required=true<br>rtexprvalue=true<br></td></tr></tbody></table></td></tr><tr><td valign="top" width="15%"><a name="producer.usecache"><b>usecache</b><br></a></td><td><table border="0"><tbody><tr><td width="100%">
 183.370 +Determines if formally produced data should be reused if possible.
 183.371 +true
 183.372 +<br></td></tr><tr><td>default=true<br>required=false<br>rtexprvalue=true<br></td></tr></tbody></table></td></tr></tbody></table><h2><a name="chartpostprocessor"></a>
 183.373 +		&lt;chartpostprocessor&gt;
 183.374 +	</h2>
 183.375 +		optional childs: 
 183.376 +		<a href="#param">
 183.377 +			&lt;param&gt;<br></a>
 183.378 +A chart postprocessor tag references an object of type ChartProstProcessor
 183.379 +which must be defined in pageContext under the provided ID. This object
 183.380 +is called back after chart generation to post process the chart in any
 183.381 +manner.
 183.382 +param
 183.383 +<p></p><table cellpadding="3" cellspacing="0" border="1" width="85%"><tbody><tr><th colspan="2">Attributes</th></tr><tr><td valign="top" width="15%"><a name="chartpostprocessor.id"><b>id</b><br></a></td><td><table border="0"><tbody><tr><td width="100%">
 183.384 +ID under which an object of type ChartPostProcessor can be found in
 183.385 +pageContext. This object is used to postprocess the rendered chart.
 183.386 +<br></td></tr><tr><td>required=true<br>rtexprvalue=true<br></td></tr></tbody></table></td></tr></tbody></table><h2><a name="param"></a>
 183.387 +		&lt;param&gt;
 183.388 +	</h2>
 183.389 +Name/value-pair to paramterize a surrounding tag whose handler must
 183.390 +implement the Parameterized interface.
 183.391 +<p></p><table cellpadding="3" cellspacing="0" border="1" width="85%"><tbody><tr><th colspan="2">Attributes</th></tr><tr><td valign="top" width="15%"><a name="param.name"><b>name</b><br></a></td><td><table border="0"><tbody><tr><td width="100%">
 183.392 +Name of the param
 183.393 +<br></td></tr><tr><td>required=true<br>rtexprvalue=true<br></td></tr></tbody></table></td></tr><tr><td valign="top" width="15%"><a name="param.value"><b>value</b><br></a></td><td><table border="0"><tbody><tr><td width="100%">
 183.394 +Value of the param. Must be serializable.
 183.395 +<br></td></tr><tr><td>type=java.io.Serializable<br>required=true<br>rtexprvalue=true<br></td></tr></tbody></table></td></tr></tbody></table><h2><a name="gradientpaint"></a>
 183.396 +		&lt;gradientpaint&gt;
 183.397 +	</h2>
 183.398 +The gradientpaint tag provides a way to fill a shape with a linear
 183.399 +color gradient pattern. If Point P1 with Color C1 and Point P2 with
 183.400 +Color C2 are specified in user space, the Color on the P1, P2
 183.401 +connecting line is proportionally changed from C1 to C2. Any point
 183.402 +P not on the extended P1, P2 connecting line has the color of the
 183.403 +point P' that is the perpendicular projection of P on the extended P1,
 183.404 +P2 connecting line. Points on the extended line outside of the P1,
 183.405 +P2 segment can be colored in one of two ways.
 183.406 +&lt;ul&gt;
 183.407 +&lt;li&gt;If the gradient is cyclic then the points on the extended
 183.408 +P1, P2 connecting line cycle back and forth between the colors C1
 183.409 +and C2.
 183.410 +&lt;li&gt;If the gradient is acyclic then points on the P1 side of
 183.411 +the segment have the constant Color C1 while points on the P2 side
 183.412 +have the constant Color C2.
 183.413 +The two colors are defined in a nested point tag of this tag.
 183.414 +point
 183.415 +<p></p><table cellpadding="3" cellspacing="0" border="1" width="85%"><tbody><tr><th colspan="2">Attributes</th></tr><tr><td valign="top" width="15%"><a name="gradientpaint.cyclic"><b>cyclic</b><br></a></td><td><table border="0"><tbody><tr><td width="100%">
 183.416 +Does the gradient cycle repeatedly between the two colors C1 and C2.
 183.417 +false
 183.418 +<br></td></tr><tr><td>default=false<br>required=false<br>rtexprvalue=true<br></td></tr></tbody></table></td></tr></tbody></table><h2><a name="point"></a>
 183.419 +		&lt;point&gt;
 183.420 +	</h2>
 183.421 +Defines a point with x and y coordinates and a color.
 183.422 +colorpaint
 183.423 +<p></p><table cellpadding="3" cellspacing="0" border="1" width="85%"><tbody><tr><th colspan="2">Attributes</th></tr><tr><td valign="top" width="15%"><a name="point.x"><b>x</b><br></a></td><td><table border="0"><tbody><tr><td width="100%">
 183.424 +The x coordinate of the point.
 183.425 +<br></td></tr><tr><td>required=true<br>rtexprvalue=true<br></td></tr></tbody></table></td></tr><tr><td valign="top" width="15%"><a name="point.y"><b>y</b><br></a></td><td><table border="0"><tbody><tr><td width="100%">
 183.426 +The y coordinate of the point.
 183.427 +<br></td></tr><tr><td>required=true<br>rtexprvalue=true<br></td></tr></tbody></table></td></tr><tr><td valign="top" width="15%"><a name="point.color"><b>color</b><br></a></td><td><table border="0"><tbody><tr><td width="100%">
 183.428 +
 183.429 +<br></td></tr><tr><td>required=false<br>rtexprvalue=true<br></td></tr></tbody></table></td></tr></tbody></table><h2><a name="colorpaint"></a>
 183.430 +		&lt;colorpaint&gt;
 183.431 +	</h2>
 183.432 +Fills the area defined by the parent tag with a color.
 183.433 +<p></p><table cellpadding="3" cellspacing="0" border="1" width="85%"><tbody><tr><th colspan="2">Attributes</th></tr><tr><td valign="top" width="15%"><a name="colorpaint.color"><b>color</b><br></a></td><td><table border="0"><tbody><tr><td width="100%">
 183.434 +The color to be used to fill the parent tag's area.
 183.435 +The color definition is compatible with the
 183.436 +HTML one. E.g. black is '#000000' and red is '#FF0000'. However it
 183.437 +is possible to append two hex numbers for the alpha channel. Thus
 183.438 +'#FF000080' is red with alpha blending of 50%.
 183.439 +<br></td></tr><tr><td>required=true<br>rtexprvalue=true<br></td></tr></tbody></table></td></tr></tbody></table><h2><a name="texturepaint"></a>
 183.440 +		&lt;texturepaint&gt;
 183.441 +	</h2>
 183.442 +The texturepaint tag provides a way to fill the area of the parent tag
 183.443 +with a texture that is specified as an image. The texture is anchored to
 183.444 +the upper left corner of the parent tags area.
 183.445 +<p></p><table cellpadding="3" cellspacing="0" border="1" width="85%"><tbody><tr><th colspan="2">Attributes</th></tr><tr><td valign="top" width="15%"><a name="texturepaint.image"><b>image</b><br></a></td><td><table border="0"><tbody><tr><td width="100%">
 183.446 +Image fo the texture. The value of this
 183.447 +attribute is the filename of a graphics file relative to the web
 183.448 +application's root directory (e.g. /WEB-INF/img/bg.jpg).
 183.449 +The image must be loadable by the default java.awt.Toolkit of the
 183.450 +servlet container's JVM.
 183.451 +<br></td></tr><tr><td>required=true<br>rtexprvalue=true<br></td></tr></tbody></table></td></tr><tr><td valign="top" width="15%"><a name="texturepaint.width"><b>width</b><br></a></td><td><table border="0"><tbody><tr><td width="100%">
 183.452 +The width of the texture.
 183.453 +<br></td></tr><tr><td>required=true<br>rtexprvalue=true<br></td></tr></tbody></table></td></tr><tr><td valign="top" width="15%"><a name="texturepaint.height"><b>height</b><br></a></td><td><table border="0"><tbody><tr><td width="100%">
 183.454 +The height of the texture.
 183.455 +<br></td></tr><tr><td>required=true<br>rtexprvalue=true<br></td></tr></tbody></table></td></tr></tbody></table><h2><a name="map"></a>
 183.456 +		&lt;map&gt;
 183.457 +	</h2>
 183.458 +This tag defines an image and tooltip map for the parent img tag.
 183.459 +img
 183.460 +<p></p><table cellpadding="3" cellspacing="0" border="1" width="85%"><tbody><tr><th colspan="2">Attributes</th></tr><tr><td valign="top" width="15%"><a name="map.linkgeneratorid"><b>linkgeneratorid</b><br></a></td><td><table border="0"><tbody><tr><td width="100%">
 183.461 +The ID of the class which implements the appropriate de.laures.cewolf.LinkGenerator.
 183.462 +<br></td></tr><tr><td>required=false<br>rtexprvalue=true<br></td></tr></tbody></table></td></tr><tr><td valign="top" width="15%"><a name="map.tooltipgeneratorid"><b>tooltipgeneratorid</b><br></a></td><td><table border="0"><tbody><tr><td width="100%">
 183.463 +The ID of the class which implements the appropriate com.jrefinery.chart.tooltips.ToolTipGenerator.
 183.464 +<br></td></tr><tr><td>required=false<br>rtexprvalue=true<br></td></tr></tbody></table></td></tr></tbody></table><p></p><a height="30" target="new" href="http://sourceforge.net"><img alt="SourceForge Logo" border="0" height="30" src="http://sourceforge.net/sflogo.php?group_id=57282&type=5"></a></body></html>
 183.465 \ No newline at end of file
   184.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   184.2 +++ b/java/cewolf-1.0/src/site/tutorial.html	Sat Feb 28 21:31:02 2009 +0100
   184.3 @@ -0,0 +1,54 @@
   184.4 +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
   184.5 +<html>
   184.6 +<head>
   184.7 +<title></title>
   184.8 +<meta name="author" content="Guido Laures">
   184.9 +<link href="cewolf.css" rel="stylesheet" type="text/css">
  184.10 +</head>
  184.11 +<body>
  184.12 +<h1><a name="Tutorial">Tutorial</a></h1>
  184.13 +<p>
  184.14 +Let us assume the following scenario in which Cewolf might be a solution.<br>
  184.15 +You have a running web application and you want a web page which shows statistics
  184.16 +about your page visits. You want to have a line chart which looks like the
  184.17 +one below (drag mouse to see image maps and tooltips).
  184.18 +<p>
  184.19 +    <script language="JavaScript" src="overlib.js"><!-- overLIB (c) Erik Bosrup --></script>
  184.20 +<div id="overDiv" style="position:absolute; visibility:hidden; z-index:1000;"></div>
  184.21 +<map name="line">
  184.22 +
  184.23 +<area shape="RECT" COORDS="80,106,86,112" ONMOUSEOVER="return overlib('dummy.html', WIDTH, '20');" ONMOUSEOUT="return nd();" HREF="dummy.html">
  184.24 +<area shape="POLY" COORDS="86,44,85,47,83,47,80,47,80,44,80,42,83,41,85,42,86,44,86,44" ONMOUSEOVER="return overlib('dummy.html', WIDTH, '20');" ONMOUSEOUT="return nd();" HREF="dummy.html">
  184.25 +<area shape="POLY" COORDS="83,86,86,92,80,92,80,92" ONMOUSEOVER="return overlib('dummy.html', WIDTH, '20');" ONMOUSEOUT="return nd();" HREF="dummy.html">
  184.26 +<area shape="POLY" COORDS="83,91,86,94,83,97,80,94,80,94" ONMOUSEOVER="return overlib('dummy.html', WIDTH, '20');" ONMOUSEOUT="return nd();" HREF="dummy.html">
  184.27 +<area shape="RECT" COORDS="125,106,131,112" ONMOUSEOVER="return overlib('dummy.html', WIDTH, '20');" ONMOUSEOUT="return nd();" HREF="dummy.html">
  184.28 +<area shape="POLY" COORDS="131,48,130,50,128,51,126,50,125,48,126,45,128,45,130,45,131,48,131,48" ONMOUSEOVER="return overlib('dummy.html', WIDTH, '20');" ONMOUSEOUT="return nd();" HREF="dummy.html">
  184.29 +<area shape="POLY" COORDS="128,91,131,97,125,97,125,97" ONMOUSEOVER="return overlib('dummy.html', WIDTH, '20');" ONMOUSEOUT="return nd();" HREF="dummy.html">
  184.30 +
  184.31 +<area shape="POLY" COORDS="128,92,131,95,128,98,125,95,125,95" ONMOUSEOVER="return overlib('dummy.html', WIDTH, '20');" ONMOUSEOUT="return nd();" HREF="dummy.html">
  184.32 +<area shape="RECT" COORDS="171,102,177,108" ONMOUSEOVER="return overlib('dummy.html', WIDTH, '20');" ONMOUSEOUT="return nd();" HREF="dummy.html">
  184.33 +<area shape="POLY" COORDS="177,58,176,60,174,61,171,60,171,58,171,56,174,55,176,56,177,58,177,58" ONMOUSEOVER="return overlib('dummy.html', WIDTH, '20');" ONMOUSEOUT="return nd();" HREF="dummy.html">
  184.34 +<area shape="POLY" COORDS="174,83,177,89,171,89,171,89" ONMOUSEOVER="return overlib('dummy.html', WIDTH, '20');" ONMOUSEOUT="return nd();" HREF="dummy.html">
  184.35 +<area shape="POLY" COORDS="174,101,177,104,174,107,171,104,171,104" ONMOUSEOVER="return overlib('dummy.html', WIDTH, '20');" ONMOUSEOUT="return nd();" HREF="dummy.html">
  184.36 +<area shape="RECT" COORDS="216,104,222,110" ONMOUSEOVER="return overlib('dummy.html', WIDTH, '20');" ONMOUSEOUT="return nd();" HREF="dummy.html">
  184.37 +<area shape="POLY" COORDS="222,56,221,58,219,59,217,58,216,56,217,54,219,53,221,54,222,56,222,56" ONMOUSEOVER="return overlib('dummy.html', WIDTH, '20');" ONMOUSEOUT="return nd();" HREF="dummy.html">
  184.38 +<area shape="POLY" COORDS="219,75,222,81,216,81,216,81" ONMOUSEOVER="return overlib('dummy.html', WIDTH, '20');" ONMOUSEOUT="return nd();" HREF="dummy.html">
  184.39 +<area shape="POLY" COORDS="219,92,222,95,219,98,216,95,216,95" ONMOUSEOVER="return overlib('dummy.html', WIDTH, '20');" ONMOUSEOUT="return nd();" HREF="dummy.html">
  184.40 +<area shape="RECT" COORDS="261,103,267,109" ONMOUSEOVER="return overlib('dummy.html', WIDTH, '20');" ONMOUSEOUT="return nd();" HREF="dummy.html">
  184.41 +<area shape="POLY" COORDS="267,60,267,62,264,63,262,62,261,60,262,58,264,57,267,58,267,60,267,60" ONMOUSEOVER="return overlib('dummy.html', WIDTH, '20');" ONMOUSEOUT="return nd();" HREF="dummy.html">
  184.42 +<area shape="POLY" COORDS="264,82,267,88,261,88,261,88" ONMOUSEOVER="return overlib('dummy.html', WIDTH, '20');" ONMOUSEOUT="return nd();" HREF="dummy.html">
  184.43 +<area shape="POLY" COORDS="264,86,267,89,264,92,261,89,261,89" ONMOUSEOVER="return overlib('dummy.html', WIDTH, '20');" ONMOUSEOUT="return nd();" HREF="dummy.html">
  184.44 +<area shape="RECT" COORDS="307,98,313,104" ONMOUSEOVER="return overlib('dummy.html', WIDTH, '20');" ONMOUSEOUT="return nd();" HREF="dummy.html">
  184.45 +<area shape="POLY" COORDS="313,69,312,71,310,72,308,71,307,69,308,67,310,66,312,67,313,69,313,69" ONMOUSEOVER="return overlib('dummy.html', WIDTH, '20');" ONMOUSEOUT="return nd();" HREF="dummy.html">
  184.46 +<area shape="POLY" COORDS="310,91,313,97,307,97,307,97" ONMOUSEOVER="return overlib('dummy.html', WIDTH, '20');" ONMOUSEOUT="return nd();" HREF="dummy.html">
  184.47 +<area shape="POLY" COORDS="310,77,313,80,310,83,307,80,307,80" ONMOUSEOVER="return overlib('dummy.html', WIDTH, '20');" ONMOUSEOUT="return nd();" HREF="dummy.html">
  184.48 +
  184.49 +<area shape="RECT" COORDS="352,90,358,96" ONMOUSEOVER="return overlib('dummy.html', WIDTH, '20');" ONMOUSEOUT="return nd();" HREF="dummy.html">
  184.50 +<area shape="POLY" COORDS="358,76,358,79,355,79,353,79,352,76,353,74,355,73,358,74,358,76,358,76" ONMOUSEOVER="return overlib('dummy.html', WIDTH, '20');" ONMOUSEOUT="return nd();" HREF="dummy.html">
  184.51 +<area shape="POLY" COORDS="355,89,358,95,352,95,352,95" ONMOUSEOVER="return overlib('dummy.html', WIDTH, '20');" ONMOUSEOUT="return nd();" HREF="dummy.html">
  184.52 +<area shape="POLY" COORDS="355,70,358,73,355,76,352,73,352,73" ONMOUSEOVER="return overlib('dummy.html', WIDTH, '20');" ONMOUSEOUT="return nd();" HREF="dummy.html"></map>
  184.53 +<img BORDER="0" HEIGHT="300" WIDTH="400" ALT="" USEMAP="#line" src="img/tutorial.png">
  184.54 +<p>
  184.55 +<a href="tutorial/step1.html">Step 1: Prepare your application &gt;&gt;</a>
  184.56 +</body>
  184.57 +</html>
  184.58 \ No newline at end of file
   185.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   185.2 +++ b/java/cewolf-1.0/src/site/tutorial/step1.html	Sat Feb 28 21:31:02 2009 +0100
   185.3 @@ -0,0 +1,44 @@
   185.4 +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
   185.5 +<html>
   185.6 +<head>
   185.7 +  <title>Cewolf Tutorial(1): Prepare Your Application</title>
   185.8 +  <meta name="author" content="Guido Laures">
   185.9 +  <link href="../cewolf.css" rel="stylesheet" type="text/css">
  185.10 +</head>
  185.11 +<body>
  185.12 +<p> </p>
  185.13 +<h1>Tutorial: Step 1</h1>
  185.14 +<h2>Prepare Your Application</h2>
  185.15 +<p> If you have not downloaded the Cewolf distribution yet, this is the
  185.16 +point to do it (look at <a
  185.17 + href="http://sourceforge.net/project/showfiles.php?group_id=57282"
  185.18 + target="new">Download</a>). Put the following JAR files of the <tt>/lib</tt>
  185.19 +directory into your web application's <tt>/WEB-INF/lib</tt> directory: </p>
  185.20 +<ul>
  185.21 +  <li>jfreechart-*-demo.jar</li>
  185.22 +  <li>jfreechart-*.jar</li>
  185.23 +  <li>jcommon-*.jar</li>
  185.24 +  <li>commons-logging.jar</li>
  185.25 +  <li>cewolf.jar</li>
  185.26 +  <li>batik-xml.jar</li>
  185.27 +  <li>batik-util.jar</li>
  185.28 +  <li>batik-svggen.jar</li>
  185.29 +  <li>batik-dom.jar</li>
  185.30 +  <li>batik-awt-util.jar</li>
  185.31 +</ul>
  185.32 +<p> Put the file overlib.js from the <tt>/example</tt> directory into
  185.33 +your webapps root directory. This file is needed to provide tooltips for
  185.34 +image maps for Mozilla based browsers. </p>
  185.35 +<p> That should be all you have to do to prepare your application for
  185.36 +Cewolf usage. If you encounter any problems in using the Cewolf tags
  185.37 +(e.g. "No Tags" is displayed in your containers console) you can
  185.38 +additionally put the <tt>cewolf.tld</tt> (or <tt>cewolf-1.1.tld</tt> for
  185.39 +JSP 1.1 containers) file from the distribution's <tt>etc</tt> directory
  185.40 +into a directory of your choice under your web application's root and
  185.41 +reference this file as the cewolf tag library from your JSPs. </p>
  185.42 +<p> <a href="step2.html">Step 2: Provide a DatasetProducer&gt;&gt;</a> </p>
  185.43 +<a height="30" target="new" href="http://sourceforge.net"><img
  185.44 + alt="SourceForge Logo" border="0" height="30"
  185.45 + src="http://sourceforge.net/sflogo.php?group_id=57282&amp;type=5"></a>
  185.46 +</body>
  185.47 +</html>
   186.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   186.2 +++ b/java/cewolf-1.0/src/site/tutorial/step2.html	Sat Feb 28 21:31:02 2009 +0100
   186.3 @@ -0,0 +1,138 @@
   186.4 +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
   186.5 +<html>
   186.6 +<head>
   186.7 +  <title>Cewolf Tutorial(2): Provide a DatasetProducer</title>
   186.8 +  <meta name="author" content="Guido Laures">
   186.9 +  <link href="../cewolf.css" rel="stylesheet" type="text/css">
  186.10 +</head>
  186.11 +<body>
  186.12 +<h1>Tutorial: Step 2</h1>
  186.13 +<h2>Provide a DatasetProducer</h2>
  186.14 +<p> As Cewolf uses a MVC (Model-View-Control) approach the data which
  186.15 +are shown in your chart are separated from the view defined in the JSP
  186.16 +page. So you can change them separately. To provide the chart with the
  186.17 +correct data you must provide an object which implements the interface<tt>de.laures.cewolf.DatasetProducer</tt>.
  186.18 +This object is asked to produce data every time a new chart must be
  186.19 +rendered. Below you can see an example implementation of a
  186.20 +DatasetProducer which could be used to provide data needed for our
  186.21 +example scenario. </p>
  186.22 +<p> </p>
  186.23 +<pre>package de.laures.cewolf.example;
  186.24 +
  186.25 +import java.io.Serializable;
  186.26 +import java.util.Date;
  186.27 +import java.util.Map;
  186.28 +
  186.29 +import org.apache.commons.logging.Log;
  186.30 +import org.apache.commons.logging.LogFactory;
  186.31 +import org.jfree.data.category.CategoryDataset;
  186.32 +import org.jfree.data.category.DefaultCategoryDataset;
  186.33 +
  186.34 +import de.laures.cewolf.DatasetProduceException;
  186.35 +import de.laures.cewolf.DatasetProducer;
  186.36 +import de.laures.cewolf.links.CategoryItemLinkGenerator;
  186.37 +import de.laures.cewolf.tooltips.CategoryToolTipGenerator;
  186.38 +
  186.39 +/** 
  186.40 + * An example data producer.
  186.41 + * @author  Guido Laures 
  186.42 + */
  186.43 +public class PageViewCountData implements DatasetProducer, CategoryToolTipGenerator, CategoryItemLinkGenerator, Serializable {
  186.44 +
  186.45 +    private static final Log log = LogFactory.getLog(PageViewCountData.class);
  186.46 +
  186.47 +    // These values would normally not be hard coded but produced by
  186.48 +    // some kind of data source like a database or a file
  186.49 +    private final String[] categories =    {"mon", "tue", "wen", "thu", "fri", "sat", "sun"};
  186.50 +    private final String[] seriesNames =    {"cewolfset.jsp", "tutorial.jsp", "testpage.jsp", "performancetest.jsp"};
  186.51 +
  186.52 +	/**
  186.53 +	 *  Produces some random data.
  186.54 +	 */
  186.55 +    public Object produceDataset(Map params) throws DatasetProduceException {
  186.56 +    	log.debug("producing data.");
  186.57 +        DefaultCategoryDataset dataset = new DefaultCategoryDataset(){
  186.58 +			/**
  186.59 +			 * @see java.lang.Object#finalize()
  186.60 +			 */
  186.61 +			protected void finalize() throws Throwable {
  186.62 +				super.finalize();
  186.63 +				log.debug(this +" finalized.");
  186.64 +			}
  186.65 +        };
  186.66 +        for (int series = 0; series < seriesNames.length; series ++) {
  186.67 +            int lastY = (int)(Math.random() * 1000 + 1000);
  186.68 +            for (int i = 0; i < categories.length; i++) {
  186.69 +                final int y = lastY + (int)(Math.random() * 200 - 100);
  186.70 +                lastY = y;
  186.71 +                dataset.addValue(y, seriesNames[series], categories[i]);
  186.72 +            }
  186.73 +        }
  186.74 +        return dataset;
  186.75 +    }
  186.76 +
  186.77 +    /**
  186.78 +     * This producer's data is invalidated after 5 seconds. By this method the
  186.79 +     * producer can influence Cewolf's caching behaviour the way it wants to.
  186.80 +     */
  186.81 +	public boolean hasExpired(Map params, Date since) {		
  186.82 +        log.debug(getClass().getName() + "hasExpired()");
  186.83 +		return (System.currentTimeMillis() - since.getTime())  > 5000;
  186.84 +	}
  186.85 +
  186.86 +	/**
  186.87 +	 * Returns a unique ID for this DatasetProducer
  186.88 +	 */
  186.89 +	public String getProducerId() {
  186.90 +		return "PageViewCountData DatasetProducer";
  186.91 +	}
  186.92 +
  186.93 +    /**
  186.94 +     * Returns a link target for a special data item.
  186.95 +     */
  186.96 +    public String generateLink(Object data, int series, Object category) {
  186.97 +        return seriesNames[series];
  186.98 +    }
  186.99 +    
 186.100 +	/**
 186.101 +	 * @see java.lang.Object#finalize()
 186.102 +	 */
 186.103 +	protected void finalize() throws Throwable {
 186.104 +		super.finalize();
 186.105 +		log.debug(this + " finalized.");
 186.106 +	}
 186.107 +
 186.108 +	/**
 186.109 +	 * @see org.jfree.chart.tooltips.CategoryToolTipGenerator#generateToolTip(CategoryDataset, int, int)
 186.110 +	 */
 186.111 +	public String generateToolTip(CategoryDataset arg0, int series, int arg2) {
 186.112 +		return seriesNames[series];
 186.113 +	}
 186.114 +
 186.115 +}
 186.116 +</pre>
 186.117 +<p> As you can see this datasetproducer is not very useful. Normally
 186.118 +this class would try to access a datasource (e.g. a database) to access
 186.119 +the needed information. But to serve as an example it should do. </p>
 186.120 +<p> A DatasetProducer needs to implement three methods. The most
 186.121 +important one is the <tt>produceDataset()</tt> method which actually
 186.122 +produces the data which should be used to render a chart. This method
 186.123 +takes a parameter map which is filled by some special tags of the JSP
 186.124 +which will be explained later on. </p>
 186.125 +<p> The <tt>hasExpired()</tt> method is called by the Cewolf framework
 186.126 +if there already exits a data object produced by this producer in
 186.127 +Cewolf's data cache. When returning <tt>true</tt> the producer
 186.128 +signalizes that the data formerly used has expired. </p>
 186.129 +<p> By providing an unique ID via the <tt>getProducerId()</tt> method
 186.130 +the Cewolf framework identifies a producer type. Two producer instances
 186.131 +with the same ID are supposed to produce the same data. </p>
 186.132 +<p> Compile the class and put it in the correct folder structure under
 186.133 +your web application's <tt>/WEB-INF/classes</tt> directory to make it
 186.134 +available for your application. </p>
 186.135 +<p> <a href="step3.html">Step 3: Install the Cewolf Servlet in your Web
 186.136 +Application&gt;&gt;</a> </p>
 186.137 +<a height="30" target="new" href="http://sourceforge.net"><img
 186.138 + alt="SourceForge Logo" border="0" height="30"
 186.139 + src="http://sourceforge.net/sflogo.php?group_id=57282&amp;type=5"></a>
 186.140 +</body>
 186.141 +</html>
   187.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   187.2 +++ b/java/cewolf-1.0/src/site/tutorial/step3.html	Sat Feb 28 21:31:02 2009 +0100
   187.3 @@ -0,0 +1,103 @@
   187.4 +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
   187.5 +<html>
   187.6 +<head>
   187.7 +  <title>Cewolf Tutorial(3): Install the Cewolf Servlet in your Web
   187.8 +Application</title>
   187.9 +  <meta name="author" content="Guido Laures">
  187.10 +  <link href="../cewolf.css" rel="stylesheet" type="text/css">
  187.11 +</head>
  187.12 +<body>
  187.13 +<h1>Tutorial: Step 3</h1>
  187.14 +<h2>Install the Cewolf Servlet in your Web App</h2>
  187.15 +<p> The rendering of the entire chart is finally provided via a servlet.
  187.16 +This has to be installed in your web application. Cewolf provides a
  187.17 +servlet class <tt>de.laures.cewolf.CewolfRenderer</tt> which does the
  187.18 +job.<br>
  187.19 +To configure your web application you have to edit the <tt>/WEB-INF/web.xml</tt>
  187.20 +file. Add the following lines to it:<br>
  187.21 +</p>
  187.22 +<pre>&lt;servlet&gt;<br>    &lt;servlet-name&gt;CewolfServlet&lt;/servlet-name&gt;<br>    &lt;servlet-class&gt;de.laures.cewolf.CewolfRenderer&lt;/servlet-class&gt;<br>&lt;/servlet&gt;<br></pre>
  187.23 +Additionally you should provide a servlet-mapping to tell the container
  187.24 +which URL maps to your Cewolf rendering servlet.<br>
  187.25 +<pre>&lt;servlet-mapping&gt;<br>    &lt;servlet-name&gt;CewolfServlet&lt;/servlet-name&gt;<br>  
  187.26 +  &lt;url-pattern&gt;/cewolf/*&lt;/url-pattern&gt;<br>&lt;/servlet-mapping&gt;<br></pre>
  187.27 +  
  187.28 +  You also need to tell CeWolf to load on startup:
  187.29 +  <pre> &lt;load-on-startup&gt;1&lt;/load-on-startup&gt;</pre>
  187.30 +To test the correct installation you should start your web app and try
  187.31 +to call the rendering servlet with a browser (e.g.
  187.32 +http://localhost:8080/myapp/cewolf?state). Cewolf should answer: "Cewolf
  187.33 +servlet up and running."
  187.34 +
  187.35 +Here is a copy of the example web.xml:
  187.36 +<pre>&lt;web-app&gt;
  187.37 +  &lt;servlet&gt;
  187.38 +    &lt;servlet-name&gt;CewolfServlet&lt;/servlet-name&gt;
  187.39 +    &lt;servlet-class&gt;de.laures.cewolf.CewolfRenderer&lt;/servlet-class&gt;
  187.40 +	&lt;!-- sets storage implementation --&gt;
  187.41 +    &lt;init-param&gt;
  187.42 +        &lt;param-name&gt;storage&lt;/param-name&gt;
  187.43 +        &lt;param-value&gt;de.laures.cewolf.storage.TransientSessionStorage&lt;/param-value&gt;
  187.44 +    &lt;/init-param&gt;
  187.45 +	&lt;!-- sets overlib.js location relative to webapp --&gt;
  187.46 +    &lt;init-param&gt;
  187.47 +        &lt;param-name&gt;overliburl&lt;/param-name&gt;
  187.48 +        &lt;param-value&gt;etc/overlib.js&lt;/param-value&gt;
  187.49 +    &lt;/init-param&gt;
  187.50 +	&lt;!-- turn on or off debugging logging --&gt;
  187.51 +    &lt;init-param&gt;
  187.52 +        &lt;param-name&gt;debug&lt;/param-name&gt;
  187.53 +        &lt;param-value&gt;true&lt;/param-value&gt;
  187.54 +    &lt;/init-param&gt;
  187.55 +    &lt;load-on-startup&gt;1&lt;/load-on-startup&gt;
  187.56 +  &lt;/servlet&gt;
  187.57 +
  187.58 +  &lt;servlet-mapping&gt;
  187.59 +    &lt;servlet-name&gt;CewolfServlet&lt;/servlet-name&gt;
  187.60 +    &lt;url-pattern&gt;/cewolf/*&lt;/url-pattern&gt;
  187.61 +  &lt;/servlet-mapping&gt;
  187.62 +
  187.63 +  &lt;session-config&gt;
  187.64 +    &lt;session-timeout&gt;1&lt;/session-timeout&gt;
  187.65 +  &lt;/session-config&gt;
  187.66 +
  187.67 +  &lt;mime-mapping&gt;
  187.68 +      &lt;extension&gt;css&lt;/extension&gt;
  187.69 +      &lt;mime-type&gt;text/css&lt;/mime-type&gt;
  187.70 +  &lt;/mime-mapping&gt;
  187.71 +
  187.72 +  &lt;welcome-file-list&gt;
  187.73 +  	&lt;welcome-file&gt;
  187.74 +      index.html
  187.75 +    &lt;/welcome-file&gt;
  187.76 +  	&lt;welcome-file&gt;
  187.77 +      index.htm
  187.78 +    &lt;/welcome-file&gt;
  187.79 +  &lt;/welcome-file-list&gt;
  187.80 +  
  187.81 +	&lt;!-- resource-ref&gt;
  187.82 +	  &lt;description&gt;
  187.83 +	    Resource reference to a factory for java.sql.Connection
  187.84 +	    instances that may be used for talking to a particular
  187.85 +	    database that is configured in the server.xml file.
  187.86 +	  &lt;/description&gt;
  187.87 +	  &lt;resource-ref-name&gt;
  187.88 +	    jdbc/testdb
  187.89 +	  &lt;/resource-ref-name&gt;
  187.90 +	  &lt;res-type&gt;
  187.91 +	    javax.sql.DataSource
  187.92 +	  &lt;/res-type&gt;
  187.93 +	  &lt;res-auth&gt;
  187.94 +	    Container
  187.95 +	  &lt;/res-auth&gt;
  187.96 +	&lt;/resource-ref --&gt;
  187.97 +
  187.98 +&lt;/web-app&gt;
  187.99 +</pre>
 187.100 +
 187.101 +<p> <a href="step4.html">Step 4: Define the Chart in your JSP&gt;&gt;</a> </p>
 187.102 +<a height="30" target="new" href="http://sourceforge.net"><img
 187.103 + alt="SourceForge Logo" border="0" height="30"
 187.104 + src="http://sourceforge.net/sflogo.php?group_id=57282&amp;type=5"></a>
 187.105 +</body>
 187.106 +</html>
   188.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   188.2 +++ b/java/cewolf-1.0/src/site/tutorial/step4.html	Sat Feb 28 21:31:02 2009 +0100
   188.3 @@ -0,0 +1,27 @@
   188.4 +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
   188.5 +<html>
   188.6 +<head>
   188.7 +  <title>Cewolf Tutorial(4): Define the chart in your JSP</title>
   188.8 +  <meta name="author" content="Guido Laures">
   188.9 +  <link href="../cewolf.css" rel="stylesheet" type="text/css">
  188.10 +</head>
  188.11 +<body>
  188.12 +<h1>Tutorial: Step 4</h1>
  188.13 +<h2>Define the chart in your JSP</h2>
  188.14 +<pre>&lt;%@page contentType="text/html"%&gt;<br>&lt;%@taglib uri='/WEB-INF/cewolf.tld' prefix='cewolf' %&gt;<br>&lt;HTML&gt;<br>&lt;BODY&gt;<br>&lt;H1&gt;Page View Statistics&lt;/H1&gt;<br>&lt;HR&gt;<br>&lt;jsp:useBean id="pageViews" class="de.laures.cewolf.example.PageViewCountData"/&gt;<br>&lt;cewolf:chart <br>    id="line" <br>    title="Page View Statistics" <br>    type="line" <br>    xaxislabel="Page" <br>    yaxislabel="Views"&gt;<br>    &lt;cewolf:data&gt;<br>        &lt;cewolf:producer id="pageViews"/&gt;<br>    &lt;/cewolf:data&gt;<br>&lt;/cewolf:chart&gt;<br>&lt;p&gt;<br>&lt;cewolf:img chartid="line" renderer="cewolf" width="400" height="300"/&gt;<br>&lt;P&gt;<br>&lt;/BODY&gt;<br>&lt;/HTML&gt;<br></pre>
  188.15 +<p> As you can see there are different tags of the cewolf taglib
  188.16 +involved. The first &lt;cewolf:chart&gt; tag defines a chart with all
  188.17 +its parameters. The concrete rendering is handled by the
  188.18 +&lt;cewolf:img&gt; tag which adds the correct &lt;img&gt; tag in the
  188.19 +rendered HTML page. The connection between both cewolf tags inside the
  188.20 +JSP is specified by using the same <tt>id</tt> attributes. </p>
  188.21 +<p> When calling this JSP from a client browser you should see the page
  188.22 +view statistic chart. If you got a broken image have a look at your
  188.23 +container's log files. </p>
  188.24 +<p> <a href="step5.html">Step 5: Create ImageMap and Tooltip
  188.25 +Information&gt;&gt;</a> </p>
  188.26 +<a height="30" target="new" href="http://sourceforge.net"><img
  188.27 + alt="SourceForge Logo" border="0" height="30"
  188.28 + src="http://sourceforge.net/sflogo.php?group_id=57282&amp;type=5"></a>
  188.29 +</body>
  188.30 +</html>
   189.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   189.2 +++ b/java/cewolf-1.0/src/site/tutorial/step5.html	Sat Feb 28 21:31:02 2009 +0100
   189.3 @@ -0,0 +1,44 @@
   189.4 +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
   189.5 +<html>
   189.6 +<head>
   189.7 +  <title>Cewolf Tutorial(5): Create ImageMap and Tooltip Information</title>
   189.8 +  <meta name="author" content="Guido Laures">
   189.9 +  <link href="../cewolf.css" rel="stylesheet" type="text/css">
  189.10 +</head>
  189.11 +<body>
  189.12 +<h1>Tutorial: Step 5</h1>
  189.13 +<h2>Create ImageMap and Tooltip Information</h2>
  189.14 +<p> To provide your chart with additionnal tooltips and image map
  189.15 +information you have to provide an additional Java class or enhance an
  189.16 +existing one like the one below. In this tutorial we will add some
  189.17 +methods to the datasetproducer class which had been introduced at the
  189.18 +beginning of this tutorial. </p>
  189.19 +<p> </p>
  189.20 +<pre>...<br>  public String generateLink(Object data, int series, Object category) {<br>    return seriesNames[series];<br>  }<br><br>  public String generateToolTip(CategoryDataset arg0, int series, int arg2) {<br>    return seriesNames[series];<br>  }<br>...<br></pre>
  189.21 +<p> As you can see it is very easy to implement a class that produces
  189.22 +image map and tooltips information. First of all it has to implement the
  189.23 +interfaces <tt>CategoryItemLinkGenerator</tt> and <tt>CategoryToolTipGenerator</tt>
  189.24 +(as it produces a CategoryDataset). For other data types refer to the <a
  189.25 + href="../apidoc/index.html">cewolf java api</a>. </p>
  189.26 +<p> To let your class produce links and tooltips for the chart image you
  189.27 +have to change the &lt;cewolf:img&gt; tag as follows: </p>
  189.28 +<p> </p>
  189.29 +<pre>&lt;cewolf:img chartid="line" renderer="cewolf" width="400" height="300"&gt;<br>    &lt;cewolf:map id="pageViews"/&gt;<br>&lt;/cewolf:img&gt;<br></pre>
  189.30 +<p> Reload your page and you will see tooltips and links on data points.
  189.31 +Internet Explorer browsers are handled slightly different as others as
  189.32 +they are able to render a tooltip based on the <tt>alt</tt> attribute
  189.33 +inside an image map. All other browser need the overlib.js for this.
  189.34 +Cewolf tries to determine the used browser and renders a correct page
  189.35 +transparently. </p>
  189.36 +<p> For further information on using Cewolf refer to the <a
  189.37 + href="../taglib.html">Tag Library Reference</a> and the <a
  189.38 + href="../apidoc/index.html">Cewolf JavaDoc</a>. </p>
  189.39 +<p> <b>If you want to see more examples of how to implement catchy charts
  189.40 +in your webapp, you should deploy the example webapp (downloadable from
  189.41 +the <a href="http://cewolf.sf.net" alt="Cewolf Homepage">Cewolf home
  189.42 +page</a> and have a look at its sourcecode.</b> </p>
  189.43 +<a height="30" target="new" href="http://sourceforge.net"><img
  189.44 + alt="SourceForge Logo" border="0" height="30"
  189.45 + src="http://sourceforge.net/sflogo.php?group_id=57282&amp;type=5"></a>
  189.46 +</body>
  189.47 +</html>