[Schmitzm-commits] r982 - in trunk: src/schmitzm/jfree src/schmitzm/jfree/chart/style src/schmitzm/jfree/feature/style src_junit/schmitzm/jfree/feature/style
scm-commit@wald.intevation.org
scm-commit at wald.intevation.org
Fri Aug 20 20:28:49 CEST 2010
Author: mojays
Date: 2010-08-20 20:28:47 +0200 (Fri, 20 Aug 2010)
New Revision: 982
Modified:
trunk/src/schmitzm/jfree/JFreeChartUtil.java
trunk/src/schmitzm/jfree/chart/style/BasicChartStyle.java
trunk/src/schmitzm/jfree/feature/style/FeatureChartUtil.java
trunk/src_junit/schmitzm/jfree/feature/style/FeatureChartStyleTest.java
Log:
Fix for Bar-Charts with 2 Axis, so that the bars are shown next to each other and the 2 renderers do not overlap
Modified: trunk/src/schmitzm/jfree/JFreeChartUtil.java
===================================================================
--- trunk/src/schmitzm/jfree/JFreeChartUtil.java 2010-08-19 15:55:11 UTC (rev 981)
+++ trunk/src/schmitzm/jfree/JFreeChartUtil.java 2010-08-20 18:28:47 UTC (rev 982)
@@ -96,6 +96,7 @@
import schmitzm.jfree.chart.style.ChartStyle;
import schmitzm.jfree.chart.style.ChartStyleXMLFactory;
import schmitzm.jfree.chart.style.ChartType;
+import schmitzm.jfree.feature.style.FeatureChartUtil;
import schmitzm.lang.LangUtil;
import schmitzm.lang.ResourceProvider;
@@ -136,6 +137,13 @@
/** Instance of {@link ChartStyleXMLFactory}. */
public static final ChartStyleXMLFactory<ChartStyle> CHART_STYLE_FACTORY = new ChartStyleXMLFactory<ChartStyle>();
+ /** Prefix for dataset series key which should be filtered out in
+ * legend.
+ * @see FeatureChartUtil#createCategoryDataset(org.geotools.feature.FeatureCollection, schmitzm.jfree.feature.style.FeatureChartStyle)
+ * @see BasicChartStyle#applyToDataset(Dataset...)
+ * */
+ public static final String DUMMY_SERIES_PREFIX = "DUMMY_";
+
/**
* Sets all chart legends (in)visible.
*
Modified: trunk/src/schmitzm/jfree/chart/style/BasicChartStyle.java
===================================================================
--- trunk/src/schmitzm/jfree/chart/style/BasicChartStyle.java 2010-08-19 15:55:11 UTC (rev 981)
+++ trunk/src/schmitzm/jfree/chart/style/BasicChartStyle.java 2010-08-20 18:28:47 UTC (rev 982)
@@ -41,6 +41,8 @@
import org.jfree.chart.ChartFactory;
import org.jfree.chart.JFreeChart;
+import org.jfree.chart.LegendItem;
+import org.jfree.chart.LegendItemCollection;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.Plot;
import org.jfree.chart.plot.PlotOrientation;
@@ -252,10 +254,10 @@
Plot plot = chart.getPlot();
if ( plot instanceof XYPlot )
for (int i=1; i<dataset.length; i++)
- ((XYPlot)plot).setDataset(1, (XYDataset)dataset[1]);
+ ((XYPlot)plot).setDataset(i, (XYDataset)dataset[i]);
else if ( plot instanceof CategoryPlot )
for (int i=1; i<dataset.length; i++)
- ((CategoryPlot)plot).setDataset(1, (CategoryDataset)dataset[1]);
+ ((CategoryPlot)plot).setDataset(i, (CategoryDataset)dataset[i]);
else
LOGGER.warn("Plot does not support multiple datasets. Secondary dataset ignored: "+LangUtil.getSimpleClassName(plot));
}
@@ -293,6 +295,30 @@
// the upper stuff, so that changes on the renderer
// effect the new (special stacked/stepped) renderer!!
super.applyToChart(chart);
+
+
+ // Workaround (aehnlich zu JFreeChart-Demo "DualAxisDemo5"):
+ // Bei Bar-Charts mit mehreren Achsen wurden Dummy-Series
+ // in die Datasets eingefuegt. Diese sollen nicht in der Legende
+ // erscheinen.
+ // -> Legende in diesem Fall manuell setzen
+ int datasetCount = JFreeChartUtil.getDatasetCountFromPlot(chart.getPlot());
+ if ( chart.getPlot() instanceof CategoryPlot &&
+ datasetCount > 1 &&
+ ChartType.BAR.equals(getType()) ) {
+ LegendItemCollection newLegendItems = new LegendItemCollection();
+ CategoryPlot cPlot = chart.getCategoryPlot();
+ int rendererCount = cPlot.getRendererCount();
+ LegendItemCollection legendItems = cPlot.getLegendItems();
+
+ for (int j=0; j<legendItems.getItemCount(); j++) {
+ LegendItem lItem = legendItems.get(j);
+ if (!lItem.getLabel().startsWith(JFreeChartUtil.DUMMY_SERIES_PREFIX))
+ newLegendItems.add(lItem);
+ }
+ cPlot.setFixedLegendItems(newLegendItems);
+ }
+
}
Modified: trunk/src/schmitzm/jfree/feature/style/FeatureChartUtil.java
===================================================================
--- trunk/src/schmitzm/jfree/feature/style/FeatureChartUtil.java 2010-08-19 15:55:11 UTC (rev 981)
+++ trunk/src/schmitzm/jfree/feature/style/FeatureChartUtil.java 2010-08-20 18:28:47 UTC (rev 982)
@@ -70,6 +70,7 @@
import schmitzm.jfree.chart.style.ChartRendererStyle;
import schmitzm.jfree.chart.style.ChartStyle;
import schmitzm.jfree.chart.style.ChartStyleXMLFactory;
+import schmitzm.jfree.chart.style.ChartType;
import schmitzm.jfree.feature.Feature2CategoryDatasetMapping;
import schmitzm.jfree.feature.Feature2PieDatasetMapping;
import schmitzm.jfree.feature.Feature2SeriesDatasetMapping;
@@ -758,6 +759,27 @@
if ( seriesID != null )
yAttrName = yAttrName + "_" + seriesID.toString();
dataset.addValue(yValue, yAttrName, catValue);
+
+ //#########################
+ // Bei Bar-Charts mit mehreren Achsen ueberlagern sich
+ // die Balken der beiden Datasets, da die Balken unterschiedlicher
+ // Renderer nicht versetzt dargestellt werden, sondern einfach
+ // uebereinander!!
+ //
+ // Workaround (wie in JFreeChart-Demo "DualAxisDemo5"):
+ // Das Versetzen der Balken wird "simuliert", indem in allen
+ // Datasets Werte fuer ALLE Series hinterlegt werden.
+ // -> Im Haupt-Dataset wird der normale Wert hinterlegt
+ // -> In allen anderen Dataset wird NULL hintelegt, damit
+ // kein Balken erscheint
+ if ( datasets.length > 1 && ChartType.BAR.equals(chartStyle.getType()) ) {
+ for (DefaultCategoryDataset d : datasets)
+ if ( d != dataset ) {
+ d.addValue(null, JFreeChartUtil.DUMMY_SERIES_PREFIX+yAttrName, catValue);
+ }
+ }
+ //#########################
+
// If grouping series attribute is used, and a "legend title" attribute
// is set, overwrite the legend label in the chart style
if ( seriesID != null && chartStyle.getSeriesLegendTitleAttributeName() != null ) {
Modified: trunk/src_junit/schmitzm/jfree/feature/style/FeatureChartStyleTest.java
===================================================================
--- trunk/src_junit/schmitzm/jfree/feature/style/FeatureChartStyleTest.java 2010-08-19 15:55:11 UTC (rev 981)
+++ trunk/src_junit/schmitzm/jfree/feature/style/FeatureChartStyleTest.java 2010-08-20 18:28:47 UTC (rev 982)
@@ -27,598 +27,792 @@
import org.jfree.chart.axis.NumberTickUnit;
import org.jfree.chart.axis.TickUnits;
import org.jfree.chart.axis.ValueTick;
+import org.jfree.chart.plot.CategoryPlot;
+import org.jfree.data.category.CategoryDataset;
+import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.ui.RectangleEdge;
import org.jfree.ui.TextAnchor;
+import org.junit.Ignore;
import org.junit.Test;
import org.opengis.feature.simple.SimpleFeature;
import org.opengis.feature.simple.SimpleFeatureType;
import schmitzm.geotools.styling.TestingUtil2;
import schmitzm.io.IOUtil;
+import schmitzm.jfree.chart.style.BasicChartStyle;
import schmitzm.jfree.chart.style.ChartAxisStyle;
import schmitzm.jfree.chart.style.ChartLabelStyle;
import schmitzm.jfree.chart.style.ChartRendererStyle;
import schmitzm.jfree.chart.style.ChartStyle;
+import schmitzm.jfree.chart.style.ChartStyleXMLFactory;
import schmitzm.jfree.chart.style.ChartType;
import schmitzm.jfree.table.AggregationFunction;
public class FeatureChartStyleTest {
- private static Logger log = Logger.getLogger(FeatureChartStyleTest.class);
+ private static Logger log = Logger.getLogger(FeatureChartStyleTest.class);
- FeatureChartStyleXMLFactory xmlFactory = new FeatureChartStyleXMLFactory();
-
-
-
-
-
-
-
-
-
-
- @Test
- public void testLineChartDualAxis() throws IOException, CQLException,
- InterruptedException {
+ FeatureChartStyleXMLFactory xmlFactoryFeature = new FeatureChartStyleXMLFactory();
+ ChartStyleXMLFactory xmlFactoryBasic = new ChartStyleXMLFactory();
+
+ @Ignore
+ @Test
+ public void testLineChartDualAxis() throws IOException, CQLException,
+ InterruptedException {
- FeatureCollection<SimpleFeatureType, SimpleFeature> testFeatures = TestingUtil2
- .getTestFeatures();
+ FeatureCollection<SimpleFeatureType, SimpleFeature> testFeatures = TestingUtil2.getTestFeatures();
- // Daten auf korrektheit überprüfen
- String groupAttribName = "code"; // KreisZahl
- SimpleFeatureType testDatenSchema = testFeatures.getSchema();
- assertNotNull(testDatenSchema.getDescriptor(groupAttribName));
- String variablenAttribName = "dm_u3"; // Deutsche "Männer" unter 3 Jahren
- assertNotNull(testDatenSchema.getDescriptor(variablenAttribName));
- String labelAttribName = "title"; // Attribute mit Label für Series
- assertNotNull(testDatenSchema.getDescriptor(labelAttribName));
- String domainAttribName = "jahr"; // Diese Variable soll auf der X-Achse
- assertNotNull(testDatenSchema.getDescriptor(domainAttribName));
- String variablenAttribName2 = "w_bev"; // Frauen Bevölkerung
- assertNotNull(testDatenSchema.getDescriptor(variablenAttribName2));
+ // Daten auf korrektheit überprüfen
+ String groupAttribName = "code"; // KreisZahl
+ SimpleFeatureType testDatenSchema = testFeatures.getSchema();
+ assertNotNull(testDatenSchema.getDescriptor(groupAttribName));
+ String variablenAttribName = "dm_u3"; // Deutsche "Männer" unter 3 Jahren
+ assertNotNull(testDatenSchema.getDescriptor(variablenAttribName));
+ String labelAttribName = "title"; // Attribute mit Label für Series
+ assertNotNull(testDatenSchema.getDescriptor(labelAttribName));
+ String domainAttribName = "jahr"; // Diese Variable soll auf der X-Achse
+ assertNotNull(testDatenSchema.getDescriptor(domainAttribName));
+ String variablenAttribName2 = "w_bev"; // Frauen Bevölkerung
+ assertNotNull(testDatenSchema.getDescriptor(variablenAttribName2));
- ChartAxisStyle domainAxisStyle = new ChartAxisStyle("jahreszahlen",
- Color.red, 0., 0.);
+ ChartAxisStyle domainAxisStyle = new ChartAxisStyle("jahreszahlen",
+ Color.red, 0., 0.);
- ChartAxisStyle rangeAxisStyle = new ChartAxisStyle("deut. maenner",
- Color.green, 0., 0.);
-
- ChartAxisStyle rangeAxisStyle2 = new ChartAxisStyle("Weibl. Bevölkerung",
- Color.blue, 0., 0.);
+ ChartAxisStyle rangeAxisStyle = new ChartAxisStyle("deut. maenner",
+ Color.green, 0., 0.);
- FeatureBasicChartStyle lineChartStyle = new FeatureBasicChartStyle(
- "testDoubleLineChart", ChartType.LINE);
- lineChartStyle.setAxisStyle(0, domainAxisStyle);
- lineChartStyle.setAxisStyle(1, rangeAxisStyle);
- lineChartStyle.setAxisStyle(2, rangeAxisStyle2);
+ ChartAxisStyle rangeAxisStyle2 = new ChartAxisStyle("Weibl. Bevölkerung",
+ Color.blue, 0., 0.);
- lineChartStyle.setAttributeName(0, domainAttribName);
- lineChartStyle.setAttributeName(1, variablenAttribName);
- lineChartStyle.setAttributeName(2, variablenAttribName2);
- lineChartStyle.setAttributeAxis(2, ChartStyle.RANGE_AXIS2);
+ FeatureBasicChartStyle lineChartStyle = new FeatureBasicChartStyle(
+ "testDoubleLineChart", ChartType.LINE);
+ lineChartStyle.setAxisStyle(0, domainAxisStyle);
+ lineChartStyle.setAxisStyle(1, rangeAxisStyle);
+ lineChartStyle.setAxisStyle(2, rangeAxisStyle2);
- lineChartStyle.setSeriesAttributeName(groupAttribName);
-
- //lineChartStyle.setSeriesLegendTitleAttributeName(labelAttribName);
+ lineChartStyle.setAttributeName(0, domainAttribName);
+ lineChartStyle.setAttributeName(1, variablenAttribName);
+ lineChartStyle.setAttributeName(2, variablenAttribName2);
+ lineChartStyle.setAttributeAxis(2, ChartStyle.RANGE_AXIS2);
- assertNull("Wenn nicht explizit gesetzt wird null geliefert",
- lineChartStyle.getRendererStyle(0));
+ lineChartStyle.setSeriesAttributeName(groupAttribName);
- ChartRendererStyle chartRendererStyle = new ChartRendererStyle();
+ // lineChartStyle.setSeriesLegendTitleAttributeName(labelAttribName);
- chartRendererStyle.setDefaultPaint(Color.blue);
+ assertNull("Wenn nicht explizit gesetzt wird null geliefert",
+ lineChartStyle.getRendererStyle(0));
- chartRendererStyle.setSeriesPaint(0, Color.green);
- chartRendererStyle.setSeriesPaint(1, Color.red);
- chartRendererStyle.setSeriesPaint(2, Color.GRAY);
- lineChartStyle.setRendererStyle(0, chartRendererStyle);
+ ChartRendererStyle chartRendererStyle = new ChartRendererStyle();
- assertEquals(3, chartRendererStyle.getSeriesCount());
+ chartRendererStyle.setDefaultPaint(Color.blue);
- // Renderer style for the series dealing with the
- // secondary axis.
- ChartRendererStyle chartRendererStyle2 = new ChartRendererStyle();
- chartRendererStyle2.setDefaultLineDashAttributes(5.0f,5.0f);
- chartRendererStyle2.setSeriesLineWidth(1, 10);
- chartRendererStyle2.setSeriesLineDashAttributes(1, 10f,10f);
- lineChartStyle.setRendererStyle(1, chartRendererStyle2);
+ chartRendererStyle.setSeriesPaint(0, Color.green);
+ chartRendererStyle.setSeriesPaint(1, Color.red);
+ chartRendererStyle.setSeriesPaint(2, Color.GRAY);
+ lineChartStyle.setRendererStyle(0, chartRendererStyle);
-
- JFreeChart lineChart = lineChartStyle
- .applyToFeatureCollection(testFeatures);
- assertNotNull("applyToFeatureCollection lieferte null!", lineChart);
+ assertEquals(3, chartRendererStyle.getSeriesCount());
- if (INTERACTIVE) {
- ChartFrame chartFrame = new ChartFrame(
- "Sechs Linien (3x2), Zwei Achsen",
- lineChart);
- chartFrame.pack();
- chartFrame.setVisible(true);
- while (chartFrame.isVisible()) {
- Thread.sleep(100);
- }
- }
+ // Renderer style for the series dealing with the
+ // secondary axis.
+ ChartRendererStyle chartRendererStyle2 = new ChartRendererStyle();
+ chartRendererStyle2.setDefaultLineDashAttributes(5.0f, 5.0f);
+ chartRendererStyle2.setSeriesLineWidth(1, 10);
+ chartRendererStyle2.setSeriesLineDashAttributes(1, 10f, 10f);
+ lineChartStyle.setRendererStyle(1, chartRendererStyle2);
- File testFile = File.createTempFile("testDoubleLineChart", ".xml");
- xmlFactory.writeStyleToFile(lineChartStyle, "testDoubleLineChart", testFile);
+ JFreeChart lineChart = lineChartStyle.applyToFeatureCollection(testFeatures);
+ assertNotNull("applyToFeatureCollection lieferte null!", lineChart);
- assertTrue(testFile.getAbsolutePath() + " wurde nicht geschrieben!",
- testFile.exists());
+ if (INTERACTIVE) {
+ ChartFrame chartFrame = new ChartFrame("Sechs Linien (3x2), Zwei Achsen",
+ lineChart);
+ chartFrame.pack();
+ chartFrame.setVisible(true);
+ while (chartFrame.isVisible()) {
+ Thread.sleep(100);
+ }
+ }
- String writtenXML = IOUtil.readFileAsString(testFile);
+ File testFile = File.createTempFile("testDoubleLineChart", ".xml");
+ xmlFactoryFeature.writeStyleToFile(lineChartStyle, "testDoubleLineChart", testFile);
- // XML wieder einlesen
- FeatureChartStyle lineChartAUsXMLgelesen = xmlFactory
- .readStyleFromFile(testFile);
+ assertTrue(testFile.getAbsolutePath() + " wurde nicht geschrieben!",
+ testFile.exists());
- // Nochmal in XML schreiben
- File testFile2 = File.createTempFile("testDoubleLineChart", ".xml");
- xmlFactory.writeStyleToFile(lineChartAUsXMLgelesen, "testDoubleLineChart",
- testFile2);
- String readXML = IOUtil.readFileAsString(testFile2);
- System.out.println(writtenXML);
- System.out.println(readXML);
- assertEquals(
- "Nachdem das Style geschrieben, gelesen und wieder geschrieben wurde ist das XML nicht gleich!",
- writtenXML, readXML);
- }
+ String writtenXML = IOUtil.readFileAsString(testFile);
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+ // XML wieder einlesen
+ FeatureChartStyle lineChartAUsXMLgelesen = xmlFactoryFeature.readStyleFromFile(testFile);
- /**
- * If tests are run on a system with head, we may theoretically open dialgs,
- * frames etc.
- **/
+ // Nochmal in XML schreiben
+ File testFile2 = File.createTempFile("testDoubleLineChart", ".xml");
+ xmlFactoryFeature.writeStyleToFile(lineChartAUsXMLgelesen, "testDoubleLineChart",
+ testFile2);
+ String readXML = IOUtil.readFileAsString(testFile2);
+ System.out.println(writtenXML);
+ System.out.println(readXML);
+ assertEquals(
+ "Nachdem das Style geschrieben, gelesen und wieder geschrieben wurde ist das XML nicht gleich!",
+ writtenXML, readXML);
+ }
- boolean INTERACTIVE = !GraphicsEnvironment.isHeadless();
+ /**
+ * If tests are run on a system with head, we may theoretically open dialgs,
+ * frames etc.
+ **/
- @Test
- public void testBarChartSortedSeries() throws IOException,
- InterruptedException {
+ boolean INTERACTIVE = !GraphicsEnvironment.isHeadless();
- FeatureCollection<SimpleFeatureType, SimpleFeature> testFeatures = TestingUtil2
- .getTestFeatures();
+ public CategoryDataset createSampleCategoryDataset1(boolean nullSecondary) {
+ // row keys...
+ String series1 = "Series 1";
+ String series2 = "Dummy 1";
- // Daten auf korrektheit überprüfen
- String groupAttribName = "jahr"; // KreisZahl
- SimpleFeatureType testDatenSchema = testFeatures.getSchema();
- assertNotNull(testDatenSchema.getDescriptor(groupAttribName));
- String variablenAttribName = "dm_u3"; // Deutsche "Männer" unter 3
- // Jahren
- assertNotNull(testDatenSchema.getDescriptor(variablenAttribName));
- String labelAttribName = "title"; // Attribute mit Label für Series
- assertNotNull(testDatenSchema.getDescriptor(labelAttribName));
- String domainAttribName = "code"; // Diese Variable soll auf der X-Achse
- // angezeigt werden
- assertNotNull(testDatenSchema.getDescriptor(domainAttribName));
+ // column keys...
+ String category1 = "Category 1";
+ String category2 = "Category 2";
+ String category3 = "Category 3";
+ String category4 = "Category 4";
- ChartAxisStyle domainAxisStyle = new ChartAxisStyle("jahreszahlen",
- Color.red, 0., 0.);
- ChartAxisStyle rangeAxisStyle = new ChartAxisStyle("deut. maenner",
- Color.green, 0., 0.);
+ // create the dataset...
+ DefaultCategoryDataset dataset = new DefaultCategoryDataset();
- FeatureBasicChartStyle barChartStyle = new FeatureBasicChartStyle(
- "testLineChart", ChartType.BAR);
+ dataset.addValue(1.0, series1, category1);
+ dataset.addValue(4.0, series1, category2);
+ dataset.addValue(3.0, series1, category3);
+ dataset.addValue(5.0, series1, category4);
- barChartStyle.setAxisStyle(0, domainAxisStyle);
- barChartStyle.setAxisStyle(1, rangeAxisStyle);
+ if (nullSecondary) {
+ dataset.addValue(null, series2, category1);
+ dataset.addValue(null, series2, category2);
+ dataset.addValue(null, series2, category3);
+ dataset.addValue(null, series2, category4);
+ }
+ return dataset;
+ }
+
+ public CategoryDataset createSampleCategoryDataset2(boolean nullPrimary) {
+ // row keys...
+ String series1 = "Dummy 2";
+ String series2 = "Series 2";
- // Jahreszahlen sollen nicht als zahlen interpretiert werden
- barChartStyle.setForceCategories(true);
+ // column keys...
+ String category1 = "Category 1";
+ String category2 = "Category 2";
+ String category3 = "Category 3";
+ String category4 = "Category 4";
- barChartStyle.setAttributeName(0, domainAttribName);
- barChartStyle.setAttributeName(1, variablenAttribName);
+ // create the dataset...
+ DefaultCategoryDataset dataset = new DefaultCategoryDataset();
- barChartStyle.setTooltips(true);
+ if ( nullPrimary ) {
+ dataset.addValue(null, series1, category1);
+ dataset.addValue(null, series1, category2);
+ dataset.addValue(null, series1, category3);
+ dataset.addValue(null, series1, category4);
+ }
+
+ dataset.addValue(75.0, series2, category1);
+ dataset.addValue(87.0, series2, category2);
+ dataset.addValue(96.0, series2, category3);
+ dataset.addValue(68.0, series2, category4);
- barChartStyle.setSeriesAttributeName(groupAttribName);
+ return dataset;
- barChartStyle.setSortDomainAxis(true);
+ }
+ @Test
+ public void testBarChartDualAxisWithSampleData() throws IOException, InterruptedException {
+ ChartAxisStyle domainAxisStyle = new ChartAxisStyle("jahreszahlen",
+ Color.red, 0., 0.);
+ ChartAxisStyle rangeAxisStyle = new ChartAxisStyle("deut. maenner",
+ Color.green, 0., 0.);
+ ChartAxisStyle rangeAxisStyle2 = new ChartAxisStyle("Weibl. Bevölkerung",
+ Color.blue, 0., 0.);
- assertNull("Wenn nicht explizit gesetzt wird null geliefert",
- barChartStyle.getRendererStyle(0));
+ BasicChartStyle barChartStyle = new BasicChartStyle(
+ "testBarChartWith2Axis", ChartType.BAR);
+
+ barChartStyle.setAxisStyle(0, domainAxisStyle);
+ barChartStyle.setAxisStyle(1, rangeAxisStyle);
+ barChartStyle.setAxisStyle(2, rangeAxisStyle2);
- JFreeChart chart = barChartStyle.applyToFeatureCollection(testFeatures);
- assertNotNull("applyToFeatureCollection liefte null!", chart);
+
+ assertNull("Wenn nicht explizit gesetzt wird null geliefert",
+ barChartStyle.getRendererStyle(0));
- BufferedImage chartpng = chart.createBufferedImage(600, 400);
- assertNotNull("Es konnte kein PNG aus dem Chart erstellt werden!",
- chartpng);
+ ChartRendererStyle chartRendererStyle = new ChartRendererStyle();
+ chartRendererStyle.setDefaultPaint(Color.blue);
+ chartRendererStyle.setSeriesPaint(0, Color.green);
+ chartRendererStyle.setSeriesPaint(1, Color.red);
+ chartRendererStyle.setSeriesPaint(2, Color.GRAY);
+ barChartStyle.setRendererStyle(0, chartRendererStyle);
+ assertEquals(3, chartRendererStyle.getSeriesCount());
- if (INTERACTIVE) {
- ChartFrame chartFrame = new ChartFrame(
- "Die Balken sollten ihren Jahreszahlen entsprechend sortiert sein",
- chart);
- chartFrame.pack();
- chartFrame.setVisible(true);
- while (chartFrame.isVisible()) {
- Thread.sleep(100);
- }
- }
- }
+ // Renderer style for the series dealing with the
+ // secondary axis.
+ ChartRendererStyle chartRendererStyle2 = new ChartRendererStyle();
+ chartRendererStyle2.setDefaultLineDashAttributes(5.0f, 5.0f);
+ chartRendererStyle2.setSeriesLineWidth(1, 10);
+ chartRendererStyle2.setSeriesLineDashAttributes(1, 10f, 10f);
+ barChartStyle.setRendererStyle(1, chartRendererStyle2);
- @Test
- public void saveAndLoadWeightedChart() throws IOException {
- FeatureBasicChartStyle weightChartStyle = new FeatureBasicChartStyle(
- "testLineChart", ChartType.BAR);
- weightChartStyle.setAttributeName(0, "attX");
- weightChartStyle.setAttributeName(1, "attY");
- weightChartStyle.setAttributeAggregation(1,
- AggregationFunction.AVG_WEIGHTED);
- weightChartStyle
- .setAttributeAggregationWeightAttributeName(1, "weight");
+ CategoryDataset data1 = createSampleCategoryDataset1(true);
+ CategoryDataset data2 = createSampleCategoryDataset2(true);
+
+
+
+ JFreeChart barChart = barChartStyle.applyToDataset(data1,data2);
+ assertNotNull("applyToDataset lieferte null!", barChart);
- // In XML schreiben
- File testFile = File.createTempFile("testWeightChart", ".xml");
- xmlFactory.writeStyleToFile(weightChartStyle, "testWeightedhart",
- testFile);
+ if (INTERACTIVE) {
+ ChartFrame chartFrame = new ChartFrame("Sechs Linien (3x2), Zwei Achsen",
+ barChart);
+ chartFrame.pack();
+ chartFrame.setVisible(true);
+ while (chartFrame.isVisible()) {
+ Thread.sleep(100);
+ }
+ }
- System.out.println(IOUtil.readFileAsString(testFile));
+ File testFile = File.createTempFile("testDoubleLineChart", ".xml");
+ xmlFactoryBasic.writeStyleToFile(barChartStyle, "testDoubleLineChart", testFile);
- // XML wieder einlesen
- FeatureChartStyle weightChartAusXMLgelesen = xmlFactory
- .readStyleFromFile(testFile);
- assertEquals(AggregationFunction.AVG_WEIGHTED, weightChartAusXMLgelesen
- .getAttributeAggregation(1));
- assertEquals("weight", weightChartAusXMLgelesen
- .getAttributeAggregationWeightAttributeName(1));
+ assertTrue(testFile.getAbsolutePath() + " wurde nicht geschrieben!",
+ testFile.exists());
- // Nochmal in XML schreiben
- File testFile2 = File.createTempFile("testWeightChart", ".xml");
- xmlFactory.writeStyleToFile(weightChartStyle, "testWeightedhart",
- testFile2);
+ String writtenXML = IOUtil.readFileAsString(testFile);
- // XML wieder einlesen
- FeatureChartStyle weightChartAusXMLgelesen2 = xmlFactory
- .readStyleFromFile(testFile2);
- assertEquals("weight", weightChartAusXMLgelesen2
- .getAttributeAggregationWeightAttributeName(1));
+ // XML wieder einlesen
+ ChartStyle lineChartAUsXMLgelesen = xmlFactoryBasic.readStyleFromFile(testFile);
- assertEquals(
- "Nachdem das Style geschrieben, gelesen und wieder geschrieben wurde ist das XML nicht gleich!",
- IOUtil.readFileAsString(testFile), IOUtil
- .readFileAsString(testFile2));
- }
+ // Nochmal in XML schreiben
+ File testFile2 = File.createTempFile("testDoubleLineChart", ".xml");
+ xmlFactoryBasic.writeStyleToFile(lineChartAUsXMLgelesen, "testDoubleLineChart",
+ testFile2);
+ String readXML = IOUtil.readFileAsString(testFile2);
+ System.out.println(writtenXML);
+ System.out.println(readXML);
+ assertEquals(
+ "Nachdem das Style geschrieben, gelesen und wieder geschrieben wurde ist das XML nicht gleich!",
+ writtenXML, readXML);
+ }
- @Test
- public void testBarChartForcedCategories() throws IOException,
- InterruptedException {
+ @Test
+ public void testBarChartDualAxis() throws IOException, CQLException,
+ InterruptedException {
- // Testdatenshape einlesen
- FeatureCollection<SimpleFeatureType, SimpleFeature> testFeatures = TestingUtil2
- .getTestFeatures();
+ FeatureCollection<SimpleFeatureType, SimpleFeature> testFeatures = TestingUtil2.getTestFeatures();
- // Daten auf korrektheit überprüfen
- assertEquals("Testfeatures muss 3x3 Features enthalten", 3 * 3,
- testFeatures.size());
- String groupAttribName = "code"; // KreisZahl
- SimpleFeatureType testDatenSchema = testFeatures.getSchema();
- assertNotNull(testDatenSchema.getDescriptor(groupAttribName));
- String variablenAttribName = "dm_u3"; // Deutsche "Männer" unter 3
- // Jahren
- assertNotNull(testDatenSchema.getDescriptor(variablenAttribName));
- String labelAttribName = "title"; // Attribute mit Label für Series
- assertNotNull(testDatenSchema.getDescriptor(labelAttribName));
- String domainAttribName = "jahr"; // Diese Variable soll auf der X-Achse
- // angezeigt werden
- assertNotNull(testDatenSchema.getDescriptor(domainAttribName));
+ // Daten auf korrektheit überprüfen
+ String groupAttribName = "code"; // KreisZahl
+ SimpleFeatureType testDatenSchema = testFeatures.getSchema();
+ assertNotNull(testDatenSchema.getDescriptor(groupAttribName));
+ String variablenAttribName = "dm_u3"; // Deutsche "Männer" unter 3 Jahren
+ assertNotNull(testDatenSchema.getDescriptor(variablenAttribName));
+ String labelAttribName = "title"; // Attribute mit Label für Series
+ assertNotNull(testDatenSchema.getDescriptor(labelAttribName));
+ String domainAttribName = "jahr"; // Diese Variable soll auf der X-Achse
+ assertNotNull(testDatenSchema.getDescriptor(domainAttribName));
+ String variablenAttribName2 = "w_bev"; // Frauen Bevölkerung
+ assertNotNull(testDatenSchema.getDescriptor(variablenAttribName2));
- ChartAxisStyle domainAxisStyle = new ChartAxisStyle("jahreszahlen",
- Color.red, 0., 0.);
- ChartAxisStyle rangeAxisStyle = new ChartAxisStyle("deut. maenner",
- Color.green, 0., 0.);
+ ChartAxisStyle domainAxisStyle = new ChartAxisStyle("jahreszahlen",
+ Color.red, 0., 0.);
- FeatureBasicChartStyle barChartStyle = new FeatureBasicChartStyle(
- "testLineChart", ChartType.BAR);
+ ChartAxisStyle rangeAxisStyle = new ChartAxisStyle("deut. maenner",
+ Color.green, 0., 0.);
- barChartStyle.setAxisStyle(0, domainAxisStyle);
- barChartStyle.setAxisStyle(1, rangeAxisStyle);
+ ChartAxisStyle rangeAxisStyle2 = new ChartAxisStyle("Weibl. Bevölkerung",
+ Color.blue, 0., 0.);
- // Jahreszahlen sollen nicht als zahlen interpretiert werden
- barChartStyle.setForceCategories(true);
+ FeatureBasicChartStyle barChartStyle = new FeatureBasicChartStyle(
+ "testDoubleBarChart", ChartType.BAR);
+ barChartStyle.setForceCategories(true);
+ barChartStyle.setSortDomainAxis(true);
+ barChartStyle.setAxisStyle(0, domainAxisStyle);
+ barChartStyle.setAxisStyle(1, rangeAxisStyle);
+ barChartStyle.setAxisStyle(2, rangeAxisStyle2);
- barChartStyle.setAttributeName(0, domainAttribName);
- barChartStyle.setAttributeName(1, variablenAttribName);
+ barChartStyle.setAttributeName(0, domainAttribName);
+ barChartStyle.setAttributeName(1, variablenAttribName);
+ barChartStyle.setAttributeName(2, variablenAttribName2);
+ barChartStyle.setAttributeAxis(2, ChartStyle.RANGE_AXIS2);
- barChartStyle.setTooltips(true);
+ barChartStyle.setSeriesAttributeName(groupAttribName);
- barChartStyle.setSeriesAttributeName(groupAttribName);
+ // barChartStyle.setSeriesLegendTitleAttributeName(labelAttribName);
- assertNull("Wenn nicht explizit gesetzt wird null geliefert",
- barChartStyle.getRendererStyle(0));
+ assertNull("Wenn nicht explizit gesetzt wird null geliefert",
+ barChartStyle.getRendererStyle(0));
- ChartRendererStyle chartRendererStyle = new ChartRendererStyle();
+ ChartRendererStyle chartRendererStyle = new ChartRendererStyle();
- chartRendererStyle.setSeriesLegendLabel(0, new ChartLabelStyle(
- "test 1. label"));
+ chartRendererStyle.setDefaultPaint(Color.blue);
- chartRendererStyle.setSeriesPaint(0, Color.green);
- chartRendererStyle.setSeriesPaint(1, Color.red);
- chartRendererStyle.setSeriesPaint(2, Color.GRAY);
- barChartStyle.setRendererStyle(0, chartRendererStyle);
+ chartRendererStyle.setSeriesPaint(0, Color.green);
+ chartRendererStyle.setSeriesPaint(1, Color.red);
+ chartRendererStyle.setSeriesPaint(2, Color.GRAY);
+ barChartStyle.setRendererStyle(0, chartRendererStyle);
- assertEquals(3, chartRendererStyle.getSeriesCount());
+ assertEquals(3, chartRendererStyle.getSeriesCount());
- JFreeChart lineChart = barChartStyle
- .applyToFeatureCollection(testFeatures);
- assertNotNull("applyToFeatureCollection liefte null!", lineChart);
+ // Renderer style for the series dealing with the
+ // secondary axis.
+ ChartRendererStyle chartRendererStyle2 = new ChartRendererStyle();
+ chartRendererStyle2.setDefaultLineDashAttributes(5.0f, 5.0f);
+ chartRendererStyle2.setSeriesLineWidth(1, 10);
+ chartRendererStyle2.setSeriesLineDashAttributes(1, 10f, 10f);
+ barChartStyle.setRendererStyle(1, chartRendererStyle2);
- BufferedImage chartpng = lineChart.createBufferedImage(600, 400);
- assertNotNull("Es konnte kein PNG aus dem Chart erstellt werden!",
- chartpng);
+ JFreeChart barChart = barChartStyle.applyToFeatureCollection(testFeatures);
+ assertNotNull("applyToFeatureCollection lieferte null!", barChart);
- if (INTERACTIVE) {
- ChartFrame chartFrame = new ChartFrame(
- "Drei Balken sein, forcedCategory", lineChart);
- chartFrame.pack();
- chartFrame.setVisible(true);
- while (chartFrame.isVisible()) {
- Thread.sleep(100);
- }
- }
- }
+ if (INTERACTIVE) {
+ ChartFrame chartFrame = new ChartFrame("Sechs Linien (3x2), Zwei Achsen",
+ barChart);
+ chartFrame.pack();
+ chartFrame.setVisible(true);
+ while (chartFrame.isVisible()) {
+ Thread.sleep(100);
+ }
+ }
- @Test
- public void testLineChartAsCategories() throws IOException, CQLException,
- InterruptedException {
+ File testFile = File.createTempFile("testDoubleLineChart", ".xml");
+ xmlFactoryFeature.writeStyleToFile(barChartStyle, "testDoubleLineChart", testFile);
- FeatureCollection<SimpleFeatureType, SimpleFeature> testFeatures = TestingUtil2
- .getTestFeatures();
+ assertTrue(testFile.getAbsolutePath() + " wurde nicht geschrieben!",
+ testFile.exists());
- // Daten auf korrektheit überprüfen
- String groupAttribName = "code"; // KreisZahl
- SimpleFeatureType testDatenSchema = testFeatures.getSchema();
- assertNotNull(testDatenSchema.getDescriptor(groupAttribName));
- String variablenAttribName = "dm_u3"; // Deutsche "Männer" unter 3
- // Jahren
- assertNotNull(testDatenSchema.getDescriptor(variablenAttribName));
- String labelAttribName = "title"; // Attribute mit Label für Series
- assertNotNull(testDatenSchema.getDescriptor(labelAttribName));
- String domainAttribName = "jahr"; // Diese Variable soll auf der X-Achse
- // angezeigt werden
- assertNotNull(testDatenSchema.getDescriptor(domainAttribName));
+ String writtenXML = IOUtil.readFileAsString(testFile);
- ChartAxisStyle domainAxisStyle = new ChartAxisStyle("jahreszahlen",
- Color.red, 0., 0.);
- ChartAxisStyle rangeAxisStyle = new ChartAxisStyle("deut. maenner",
- Color.green, 0., 0.);
+ // XML wieder einlesen
+ FeatureChartStyle lineChartAUsXMLgelesen = xmlFactoryFeature.readStyleFromFile(testFile);
- FeatureBasicChartStyle lineChartStyle = new FeatureBasicChartStyle(
- "testLineChart", ChartType.LINE);
- lineChartStyle.setAxisStyle(0, domainAxisStyle);
- lineChartStyle.setAxisStyle(1, rangeAxisStyle);
+ // Nochmal in XML schreiben
+ File testFile2 = File.createTempFile("testDoubleLineChart", ".xml");
+ xmlFactoryFeature.writeStyleToFile(lineChartAUsXMLgelesen, "testDoubleLineChart",
+ testFile2);
+ String readXML = IOUtil.readFileAsString(testFile2);
+ System.out.println(writtenXML);
+ System.out.println(readXML);
+ assertEquals(
+ "Nachdem das Style geschrieben, gelesen und wieder geschrieben wurde ist das XML nicht gleich!",
+ writtenXML, readXML);
+ }
- // Jahreszahlen sollen nicht als zahlen interpretiert werden
- lineChartStyle.setForceCategories(true);
+ @Ignore
+ @Test
+ public void testBarChartSortedSeries() throws IOException,
+ InterruptedException {
- lineChartStyle.setAttributeName(0, domainAttribName);
- lineChartStyle.setAttributeName(1, variablenAttribName);
+ FeatureCollection<SimpleFeatureType, SimpleFeature> testFeatures = TestingUtil2.getTestFeatures();
- lineChartStyle.setTooltips(true);
+ // Daten auf korrektheit überprüfen
+ String groupAttribName = "jahr"; // KreisZahl
+ SimpleFeatureType testDatenSchema = testFeatures.getSchema();
+ assertNotNull(testDatenSchema.getDescriptor(groupAttribName));
+ String variablenAttribName = "dm_u3"; // Deutsche "Männer" unter 3
+ // Jahren
+ assertNotNull(testDatenSchema.getDescriptor(variablenAttribName));
+ String labelAttribName = "title"; // Attribute mit Label für Series
+ assertNotNull(testDatenSchema.getDescriptor(labelAttribName));
+ String domainAttribName = "code"; // Diese Variable soll auf der X-Achse
+ // angezeigt werden
+ assertNotNull(testDatenSchema.getDescriptor(domainAttribName));
- lineChartStyle.setSeriesAttributeName(groupAttribName);
+ ChartAxisStyle domainAxisStyle = new ChartAxisStyle("jahreszahlen",
+ Color.red, 0., 0.);
+ ChartAxisStyle rangeAxisStyle = new ChartAxisStyle("deut. maenner",
+ Color.green, 0., 0.);
- lineChartStyle.setSeriesLegendTitleAttributeName(labelAttribName);
+ FeatureBasicChartStyle barChartStyle = new FeatureBasicChartStyle(
+ "testLineChart", ChartType.BAR);
- assertNull("Wenn nicht explizit gesetzt wird null geliefert",
- lineChartStyle.getRendererStyle(0));
+ barChartStyle.setAxisStyle(0, domainAxisStyle);
+ barChartStyle.setAxisStyle(1, rangeAxisStyle);
- ChartRendererStyle chartRendererStyle = new ChartRendererStyle();
+ // Jahreszahlen sollen nicht als zahlen interpretiert werden
+ barChartStyle.setForceCategories(true);
- // chartRendererStyle.setSeriesLegendLabel(0, new ChartLabelStyle(
- // "test 1. label"));
+ barChartStyle.setAttributeName(0, domainAttribName);
+ barChartStyle.setAttributeName(1, variablenAttribName);
- chartRendererStyle.setDefaultPaint(Color.blue);
+ barChartStyle.setTooltips(true);
- chartRendererStyle.setSeriesPaint(0, Color.green);
- chartRendererStyle.setSeriesPaint(1, Color.red);
- chartRendererStyle.setSeriesPaint(2, Color.GRAY);
- lineChartStyle.setRendererStyle(0, chartRendererStyle);
+ barChartStyle.setSeriesAttributeName(groupAttribName);
- assertEquals(3, chartRendererStyle.getSeriesCount());
+ barChartStyle.setSortDomainAxis(true);
- JFreeChart lineChart = lineChartStyle
- .applyToFeatureCollection(testFeatures);
- assertNotNull("applyToFeatureCollection liefte null!", lineChart);
+ assertNull("Wenn nicht explizit gesetzt wird null geliefert",
+ barChartStyle.getRendererStyle(0));
- BufferedImage chartpng = lineChart.createBufferedImage(600, 400);
- assertNotNull("Es konnte kein PNG aus dem Chart erstellt werden!",
- chartpng);
+ JFreeChart chart = barChartStyle.applyToFeatureCollection(testFeatures);
+ assertNotNull("applyToFeatureCollection liefte null!", chart);
- if (INTERACTIVE) {
- ChartFrame chartFrame = new ChartFrame(
- "drei linien, forcedCategories, mit series title kreisname",
- lineChart);
- chartFrame.pack();
- chartFrame.setVisible(true);
- while (chartFrame.isVisible()) {
- Thread.sleep(100);
- }
- }
+ BufferedImage chartpng = chart.createBufferedImage(600, 400);
+ assertNotNull("Es konnte kein PNG aus dem Chart erstellt werden!", chartpng);
- // Jetzt nur soll noch eine Line kommen:
- chartRendererStyle.setSeriesLegendLabel(0, null);
- lineChartStyle.addSeriesAttributeNoDataValue("06532");
- lineChartStyle.addSeriesAttributeNoDataValue("06531");
- lineChart = lineChartStyle.applyToFeatureCollection(testFeatures);
- assertNotNull("applyToFeatureCollection liefte null!", lineChart);
- if (INTERACTIVE) {
- ChartFrame chartFrame = new ChartFrame(
- "test line chart: soll nur line 06533 existieren!",
- lineChart);
- chartFrame.pack();
- chartFrame.setVisible(true);
- while (chartFrame.isVisible()) {
- Thread.sleep(100);
- }
- }
+ if (INTERACTIVE) {
+ ChartFrame chartFrame = new ChartFrame(
+ "Die Balken sollten ihren Jahreszahlen entsprechend sortiert sein",
+ chart);
+ chartFrame.pack();
+ chartFrame.setVisible(true);
+ while (chartFrame.isVisible()) {
+ Thread.sleep(100);
+ }
+ }
+ }
- File testFile = File.createTempFile("testLineChart", ".xml");
- xmlFactory.writeStyleToFile(lineChartStyle, "testLineChart", testFile);
+ @Ignore
+ @Test
+ public void saveAndLoadWeightedChart() throws IOException {
+ FeatureBasicChartStyle weightChartStyle = new FeatureBasicChartStyle(
+ "testLineChart", ChartType.BAR);
+ weightChartStyle.setAttributeName(0, "attX");
+ weightChartStyle.setAttributeName(1, "attY");
+ weightChartStyle.setAttributeAggregation(1,
+ AggregationFunction.AVG_WEIGHTED);
+ weightChartStyle.setAttributeAggregationWeightAttributeName(1, "weight");
- assertTrue(testFile.getAbsolutePath() + " wurde nicht geschrieben!",
- testFile.exists());
+ // In XML schreiben
+ File testFile = File.createTempFile("testWeightChart", ".xml");
+ xmlFactoryFeature.writeStyleToFile(weightChartStyle, "testWeightedhart", testFile);
- String writtenXML = IOUtil.readFileAsString(testFile);
- System.out.println(writtenXML);
- assertTrue(
- "<seriesAttr name=\"code\" nullAliases=\"06531;06532\" fehlt!",
- writtenXML
- .contains("<seriesAttr name=\"code\" nullAliases=\"06531;06532\""));
+ System.out.println(IOUtil.readFileAsString(testFile));
- assertTrue("Nodatawerte wurden mehr als einmal in das XML geschrieben",
- writtenXML.indexOf("06531;06532") == writtenXML
- .lastIndexOf("06531;06532"));
+ // XML wieder einlesen
+ FeatureChartStyle weightChartAusXMLgelesen = xmlFactoryFeature.readStyleFromFile(testFile);
+ assertEquals(AggregationFunction.AVG_WEIGHTED,
+ weightChartAusXMLgelesen.getAttributeAggregation(1));
+ assertEquals("weight",
+ weightChartAusXMLgelesen.getAttributeAggregationWeightAttributeName(1));
- // XML wieder einlesen
- FeatureChartStyle lineChartAUsXMLgelesen = xmlFactory
- .readStyleFromFile(testFile);
+ // Nochmal in XML schreiben
+ File testFile2 = File.createTempFile("testWeightChart", ".xml");
+ xmlFactoryFeature.writeStyleToFile(weightChartStyle, "testWeightedhart", testFile2);
- // Nochmal in XML schreiben
- File testFile2 = File.createTempFile("testLineChart", ".xml");
- xmlFactory.writeStyleToFile(lineChartAUsXMLgelesen, "testLineChart",
- testFile2);
- assertEquals(
- "Nachdem das Style geschrieben, gelesen und wieder geschrieben wurde ist das XML nicht gleich!",
- writtenXML, IOUtil.readFileAsString(testFile2));
- }
+ // XML wieder einlesen
+ FeatureChartStyle weightChartAusXMLgelesen2 = xmlFactoryFeature.readStyleFromFile(testFile2);
+ assertEquals("weight",
+ weightChartAusXMLgelesen2.getAttributeAggregationWeightAttributeName(1));
- @Test
- public void testLineChartNOTCategories() throws IOException, CQLException,
- InterruptedException {
+ assertEquals(
+ "Nachdem das Style geschrieben, gelesen und wieder geschrieben wurde ist das XML nicht gleich!",
+ IOUtil.readFileAsString(testFile), IOUtil.readFileAsString(testFile2));
+ }
- FeatureCollection<SimpleFeatureType, SimpleFeature> testFeatures = TestingUtil2
- .getTestFeatures();
+ @Ignore
+ @Test
+ public void testBarChartForcedCategories() throws IOException,
+ InterruptedException {
- // Daten auf korrektheit überprüfen
- String groupAttribName = "code"; // KreisZahl
- SimpleFeatureType testDatenSchema = testFeatures.getSchema();
- assertNotNull(testDatenSchema.getDescriptor(groupAttribName));
- String variablenAttribName = "dm_u3"; // Deutsche "Männer" unter 3
- // Jahren
- assertNotNull(testDatenSchema.getDescriptor(variablenAttribName));
- String labelAttribName = "title"; // Attribute mit Label für Series
- assertNotNull(testDatenSchema.getDescriptor(labelAttribName));
- String domainAttribName = "jahr"; // Diese Variable soll auf der X-Achse
- // angezeigt werden
- assertNotNull(testDatenSchema.getDescriptor(domainAttribName));
+ // Testdatenshape einlesen
+ FeatureCollection<SimpleFeatureType, SimpleFeature> testFeatures = TestingUtil2.getTestFeatures();
- ChartAxisStyle domainAxisStyle = new ChartAxisStyle("jahreszahlen",
- Color.red, 0., 0.);
+ // Daten auf korrektheit überprüfen
+ assertEquals("Testfeatures muss 3x3 Features enthalten", 3 * 3,
+ testFeatures.size());
+ String groupAttribName = "code"; // KreisZahl
+ SimpleFeatureType testDatenSchema = testFeatures.getSchema();
+ assertNotNull(testDatenSchema.getDescriptor(groupAttribName));
+ String variablenAttribName = "dm_u3"; // Deutsche "Männer" unter 3
+ // Jahren
+ assertNotNull(testDatenSchema.getDescriptor(variablenAttribName));
+ String labelAttribName = "title"; // Attribute mit Label für Series
+ assertNotNull(testDatenSchema.getDescriptor(labelAttribName));
+ String domainAttribName = "jahr"; // Diese Variable soll auf der X-Achse
+ // angezeigt werden
+ assertNotNull(testDatenSchema.getDescriptor(domainAttribName));
- ChartAxisStyle rangeAxisStyle = new ChartAxisStyle("deut. maenner",
- Color.green, 0., 0.);
+ ChartAxisStyle domainAxisStyle = new ChartAxisStyle("jahreszahlen",
+ Color.red, 0., 0.);
+ ChartAxisStyle rangeAxisStyle = new ChartAxisStyle("deut. maenner",
+ Color.green, 0., 0.);
- FeatureBasicChartStyle lineChartStyle = new FeatureBasicChartStyle(
- "testLineChart", ChartType.LINE);
- lineChartStyle.setAxisStyle(0, domainAxisStyle);
- lineChartStyle.setAxisStyle(1, rangeAxisStyle);
+ FeatureBasicChartStyle barChartStyle = new FeatureBasicChartStyle(
+ "testLineChart", ChartType.BAR);
- lineChartStyle.setAttributeName(0, domainAttribName);
- lineChartStyle.setAttributeName(1, variablenAttribName);
+ barChartStyle.setAxisStyle(0, domainAxisStyle);
+ barChartStyle.setAxisStyle(1, rangeAxisStyle);
- lineChartStyle.setSeriesLegendTitleAttributeName(labelAttribName);
+ // Jahreszahlen sollen nicht als zahlen interpretiert werden
+ barChartStyle.setForceCategories(true);
- lineChartStyle.setTooltips(true);
+ barChartStyle.setAttributeName(0, domainAttribName);
+ barChartStyle.setAttributeName(1, variablenAttribName);
- lineChartStyle.setSeriesAttributeName(groupAttribName);
+ barChartStyle.setTooltips(true);
- assertNull("Wenn nicht explizit gesetzt wird null geliefert",
- lineChartStyle.getRendererStyle(0));
+ barChartStyle.setSeriesAttributeName(groupAttribName);
- ChartRendererStyle chartRendererStyle = new ChartRendererStyle();
+ assertNull("Wenn nicht explizit gesetzt wird null geliefert",
+ barChartStyle.getRendererStyle(0));
- chartRendererStyle.setDefaultPaint(Color.blue);
+ ChartRendererStyle chartRendererStyle = new ChartRendererStyle();
- chartRendererStyle.setSeriesPaint(0, Color.green);
- chartRendererStyle.setSeriesPaint(1, Color.red);
- chartRendererStyle.setSeriesPaint(2, Color.GRAY);
- lineChartStyle.setRendererStyle(0, chartRendererStyle);
+ chartRendererStyle.setSeriesLegendLabel(0, new ChartLabelStyle(
+ "test 1. label"));
- assertEquals(3, chartRendererStyle.getSeriesCount());
+ chartRendererStyle.setSeriesPaint(0, Color.green);
+ chartRendererStyle.setSeriesPaint(1, Color.red);
+ chartRendererStyle.setSeriesPaint(2, Color.GRAY);
+ barChartStyle.setRendererStyle(0, chartRendererStyle);
- JFreeChart lineChart = lineChartStyle
- .applyToFeatureCollection(testFeatures);
- assertNotNull("applyToFeatureCollection liefte null!", lineChart);
+ assertEquals(3, chartRendererStyle.getSeriesCount());
- BufferedImage chartpng = lineChart.createBufferedImage(600, 400);
- assertNotNull("Es konnte kein PNG aus dem Chart erstellt werden!",
- chartpng);
+ JFreeChart lineChart = barChartStyle.applyToFeatureCollection(testFeatures);
+ assertNotNull("applyToFeatureCollection liefte null!", lineChart);
- lineChart.getXYPlot().getDomainAxis().setAutoTickUnitSelection(false);
- TickUnits units = new TickUnits();
- NumberFormat myNumberFormat = NumberFormat.getNumberInstance();
- units.add(new NumberTickUnit(2005, myNumberFormat));
- units.add(new NumberTickUnit(2007, myNumberFormat));
- units.add(new NumberTickUnit(2008, myNumberFormat));
- // da = lineChart.getXYPlot().getDomainAxis();
- NumberAxis numberAxis = new NumberAxis() {
- @Override
- public List refreshTicks(Graphics2D g2, AxisState state,
- Rectangle2D dataArea, RectangleEdge edge) {
+ BufferedImage chartpng = lineChart.createBufferedImage(600, 400);
+ assertNotNull("Es konnte kein PNG aus dem Chart erstellt werden!", chartpng);
- List<ValueTick> ticks = new ArrayList<ValueTick>();
- TextAnchor ra = TextAnchor.CENTER;
- TextAnchor ta = TextAnchor.CENTER;
- ticks.add(new NumberTick(2005, "2005", ta, ra, 0.));
- ticks.add(new NumberTick(2006, "2006", ta, ra, 0.));
- ticks.add(new NumberTick(2007, "2007", ta, ra, 0.));
- ticks.add(new NumberTick(2008, "2008", ta, ra, 0.));
+ if (INTERACTIVE) {
+ ChartFrame chartFrame = new ChartFrame(
+ "Drei Balken sein, forcedCategory", lineChart);
+ chartFrame.pack();
+ chartFrame.setVisible(true);
+ while (chartFrame.isVisible()) {
+ Thread.sleep(100);
+ }
+ }
+ }
- return ticks;
+ @Ignore
+ @Test
+ public void testLineChartAsCategories() throws IOException, CQLException,
+ InterruptedException {
- }
- };
- lineChart.getXYPlot().setDomainAxis(numberAxis);
- lineChartStyle.applyToChart(lineChart);
+ FeatureCollection<SimpleFeatureType, SimpleFeature> testFeatures = TestingUtil2.getTestFeatures();
- if (INTERACTIVE) {
- ChartFrame chartFrame = new ChartFrame(
- "drei linien, NOT categories, KreisNamen series titles",
- lineChart);
- chartFrame.pack();
- chartFrame.setVisible(true);
- while (chartFrame.isVisible()) {
- Thread.sleep(100);
- }
- }
+ // Daten auf korrektheit überprüfen
+ String groupAttribName = "code"; // KreisZahl
+ SimpleFeatureType testDatenSchema = testFeatures.getSchema();
+ assertNotNull(testDatenSchema.getDescriptor(groupAttribName));
+ String variablenAttribName = "dm_u3"; // Deutsche "Männer" unter 3
+ // Jahren
+ assertNotNull(testDatenSchema.getDescriptor(variablenAttribName));
+ String labelAttribName = "title"; // Attribute mit Label für Series
+ assertNotNull(testDatenSchema.getDescriptor(labelAttribName));
+ String domainAttribName = "jahr"; // Diese Variable soll auf der X-Achse
+ // angezeigt werden
+ assertNotNull(testDatenSchema.getDescriptor(domainAttribName));
- File testFile = File.createTempFile("testLineChart", ".xml");
- xmlFactory.writeStyleToFile(lineChartStyle, "testLineChart", testFile);
+ ChartAxisStyle domainAxisStyle = new ChartAxisStyle("jahreszahlen",
+ Color.red, 0., 0.);
+ ChartAxisStyle rangeAxisStyle = new ChartAxisStyle("deut. maenner",
+ Color.green, 0., 0.);
- assertTrue(testFile.getAbsolutePath() + " wurde nicht geschrieben!",
- testFile.exists());
+ FeatureBasicChartStyle lineChartStyle = new FeatureBasicChartStyle(
+ "testLineChart", ChartType.LINE);
+ lineChartStyle.setAxisStyle(0, domainAxisStyle);
+ lineChartStyle.setAxisStyle(1, rangeAxisStyle);
- String writtenXML = IOUtil.readFileAsString(testFile);
+ // Jahreszahlen sollen nicht als zahlen interpretiert werden
+ lineChartStyle.setForceCategories(true);
- // XML wieder einlesen
- FeatureChartStyle lineChartAUsXMLgelesen = xmlFactory
- .readStyleFromFile(testFile);
+ lineChartStyle.setAttributeName(0, domainAttribName);
+ lineChartStyle.setAttributeName(1, variablenAttribName);
- // Nochmal in XML schreiben
- File testFile2 = File.createTempFile("testLineChart", ".xml");
- xmlFactory.writeStyleToFile(lineChartAUsXMLgelesen, "testLineChart",
- testFile2);
- assertEquals(
- "Nachdem das Style geschrieben, gelesen und wieder geschrieben wurde ist das XML nicht gleich!",
- writtenXML, IOUtil.readFileAsString(testFile2));
- }
-
-
-
-
+ lineChartStyle.setTooltips(true);
+ lineChartStyle.setSeriesAttributeName(groupAttribName);
+ lineChartStyle.setSeriesLegendTitleAttributeName(labelAttribName);
+
+ assertNull("Wenn nicht explizit gesetzt wird null geliefert",
+ lineChartStyle.getRendererStyle(0));
+
+ ChartRendererStyle chartRendererStyle = new ChartRendererStyle();
+
+ // chartRendererStyle.setSeriesLegendLabel(0, new ChartLabelStyle(
+ // "test 1. label"));
+
+ chartRendererStyle.setDefaultPaint(Color.blue);
+
+ chartRendererStyle.setSeriesPaint(0, Color.green);
+ chartRendererStyle.setSeriesPaint(1, Color.red);
+ chartRendererStyle.setSeriesPaint(2, Color.GRAY);
+ lineChartStyle.setRendererStyle(0, chartRendererStyle);
+
+ assertEquals(3, chartRendererStyle.getSeriesCount());
+
+ JFreeChart lineChart = lineChartStyle.applyToFeatureCollection(testFeatures);
+ assertNotNull("applyToFeatureCollection liefte null!", lineChart);
+
+ BufferedImage chartpng = lineChart.createBufferedImage(600, 400);
+ assertNotNull("Es konnte kein PNG aus dem Chart erstellt werden!", chartpng);
+
+ if (INTERACTIVE) {
+ ChartFrame chartFrame = new ChartFrame(
+ "drei linien, forcedCategories, mit series title kreisname",
+ lineChart);
+ chartFrame.pack();
+ chartFrame.setVisible(true);
+ while (chartFrame.isVisible()) {
+ Thread.sleep(100);
+ }
+ }
+
+ // Jetzt nur soll noch eine Line kommen:
+ chartRendererStyle.setSeriesLegendLabel(0, null);
+ lineChartStyle.addSeriesAttributeNoDataValue("06532");
+ lineChartStyle.addSeriesAttributeNoDataValue("06531");
+ lineChart = lineChartStyle.applyToFeatureCollection(testFeatures);
+ assertNotNull("applyToFeatureCollection liefte null!", lineChart);
+ if (INTERACTIVE) {
+ ChartFrame chartFrame = new ChartFrame(
+ "test line chart: soll nur line 06533 existieren!", lineChart);
+ chartFrame.pack();
+ chartFrame.setVisible(true);
+ while (chartFrame.isVisible()) {
+ Thread.sleep(100);
+ }
+ }
+
+ File testFile = File.createTempFile("testLineChart", ".xml");
+ xmlFactoryFeature.writeStyleToFile(lineChartStyle, "testLineChart", testFile);
+
+ assertTrue(testFile.getAbsolutePath() + " wurde nicht geschrieben!",
+ testFile.exists());
+
+ String writtenXML = IOUtil.readFileAsString(testFile);
+ System.out.println(writtenXML);
+ assertTrue(
+ "<seriesAttr name=\"code\" nullAliases=\"06531;06532\" fehlt!",
+ writtenXML.contains("<seriesAttr name=\"code\" nullAliases=\"06531;06532\""));
+
+ assertTrue(
+ "Nodatawerte wurden mehr als einmal in das XML geschrieben",
+ writtenXML.indexOf("06531;06532") == writtenXML.lastIndexOf("06531;06532"));
+
+ // XML wieder einlesen
+ FeatureChartStyle lineChartAUsXMLgelesen = xmlFactoryFeature.readStyleFromFile(testFile);
+
+ // Nochmal in XML schreiben
+ File testFile2 = File.createTempFile("testLineChart", ".xml");
+ xmlFactoryFeature.writeStyleToFile(lineChartAUsXMLgelesen, "testLineChart",
+ testFile2);
+ assertEquals(
+ "Nachdem das Style geschrieben, gelesen und wieder geschrieben wurde ist das XML nicht gleich!",
+ writtenXML, IOUtil.readFileAsString(testFile2));
+ }
+
+ @Ignore
+ @Test
+ public void testLineChartNOTCategories() throws IOException, CQLException,
+ InterruptedException {
+
+ FeatureCollection<SimpleFeatureType, SimpleFeature> testFeatures = TestingUtil2.getTestFeatures();
+
+ // Daten auf korrektheit überprüfen
+ String groupAttribName = "code"; // KreisZahl
+ SimpleFeatureType testDatenSchema = testFeatures.getSchema();
+ assertNotNull(testDatenSchema.getDescriptor(groupAttribName));
+ String variablenAttribName = "dm_u3"; // Deutsche "Männer" unter 3
+ // Jahren
+ assertNotNull(testDatenSchema.getDescriptor(variablenAttribName));
+ String labelAttribName = "title"; // Attribute mit Label für Series
+ assertNotNull(testDatenSchema.getDescriptor(labelAttribName));
+ String domainAttribName = "jahr"; // Diese Variable soll auf der X-Achse
+ // angezeigt werden
+ assertNotNull(testDatenSchema.getDescriptor(domainAttribName));
+
+ ChartAxisStyle domainAxisStyle = new ChartAxisStyle("jahreszahlen",
+ Color.red, 0., 0.);
+
+ ChartAxisStyle rangeAxisStyle = new ChartAxisStyle("deut. maenner",
+ Color.green, 0., 0.);
+
+ FeatureBasicChartStyle lineChartStyle = new FeatureBasicChartStyle(
+ "testLineChart", ChartType.LINE);
+ lineChartStyle.setAxisStyle(0, domainAxisStyle);
+ lineChartStyle.setAxisStyle(1, rangeAxisStyle);
+
+ lineChartStyle.setAttributeName(0, domainAttribName);
+ lineChartStyle.setAttributeName(1, variablenAttribName);
+
+ lineChartStyle.setSeriesLegendTitleAttributeName(labelAttribName);
+
+ lineChartStyle.setTooltips(true);
+
+ lineChartStyle.setSeriesAttributeName(groupAttribName);
+
+ assertNull("Wenn nicht explizit gesetzt wird null geliefert",
+ lineChartStyle.getRendererStyle(0));
+
+ ChartRendererStyle chartRendererStyle = new ChartRendererStyle();
+
+ chartRendererStyle.setDefaultPaint(Color.blue);
+
+ chartRendererStyle.setSeriesPaint(0, Color.green);
+ chartRendererStyle.setSeriesPaint(1, Color.red);
+ chartRendererStyle.setSeriesPaint(2, Color.GRAY);
+ lineChartStyle.setRendererStyle(0, chartRendererStyle);
+
+ assertEquals(3, chartRendererStyle.getSeriesCount());
+
+ JFreeChart lineChart = lineChartStyle.applyToFeatureCollection(testFeatures);
+ assertNotNull("applyToFeatureCollection liefte null!", lineChart);
+
+ BufferedImage chartpng = lineChart.createBufferedImage(600, 400);
+ assertNotNull("Es konnte kein PNG aus dem Chart erstellt werden!", chartpng);
+
+ lineChart.getXYPlot().getDomainAxis().setAutoTickUnitSelection(false);
+ TickUnits units = new TickUnits();
+ NumberFormat myNumberFormat = NumberFormat.getNumberInstance();
+ units.add(new NumberTickUnit(2005, myNumberFormat));
+ units.add(new NumberTickUnit(2007, myNumberFormat));
+ units.add(new NumberTickUnit(2008, myNumberFormat));
+ // da = lineChart.getXYPlot().getDomainAxis();
+ NumberAxis numberAxis = new NumberAxis() {
+ @Override
+ public List refreshTicks(Graphics2D g2, AxisState state,
+ Rectangle2D dataArea, RectangleEdge edge) {
+
+ List<ValueTick> ticks = new ArrayList<ValueTick>();
+ TextAnchor ra = TextAnchor.CENTER;
+ TextAnchor ta = TextAnchor.CENTER;
+ ticks.add(new NumberTick(2005, "2005", ta, ra, 0.));
+ ticks.add(new NumberTick(2006, "2006", ta, ra, 0.));
+ ticks.add(new NumberTick(2007, "2007", ta, ra, 0.));
+ ticks.add(new NumberTick(2008, "2008", ta, ra, 0.));
+
+ return ticks;
+
+ }
+ };
+ lineChart.getXYPlot().setDomainAxis(numberAxis);
+ lineChartStyle.applyToChart(lineChart);
+
+ if (INTERACTIVE) {
+ ChartFrame chartFrame = new ChartFrame(
+ "drei linien, NOT categories, KreisNamen series titles", lineChart);
+ chartFrame.pack();
+ chartFrame.setVisible(true);
+ while (chartFrame.isVisible()) {
+ Thread.sleep(100);
+ }
+ }
+
+ File testFile = File.createTempFile("testLineChart", ".xml");
+ xmlFactoryFeature.writeStyleToFile(lineChartStyle, "testLineChart", testFile);
+
+ assertTrue(testFile.getAbsolutePath() + " wurde nicht geschrieben!",
+ testFile.exists());
+
+ String writtenXML = IOUtil.readFileAsString(testFile);
+
+ // XML wieder einlesen
+ FeatureChartStyle lineChartAUsXMLgelesen = xmlFactoryFeature.readStyleFromFile(testFile);
+
+ // Nochmal in XML schreiben
+ File testFile2 = File.createTempFile("testLineChart", ".xml");
+ xmlFactoryFeature.writeStyleToFile(lineChartAUsXMLgelesen, "testLineChart",
+ testFile2);
+ assertEquals(
+ "Nachdem das Style geschrieben, gelesen und wieder geschrieben wurde ist das XML nicht gleich!",
+ writtenXML, IOUtil.readFileAsString(testFile2));
+ }
+
}
More information about the Schmitzm-commits
mailing list