comparison artifacts/src/main/java/org/dive4elements/river/exports/DiagramGenerator.java @ 7076:7f600001c807 generator-refactoring

Add LTR inversion code to diagram generator. This code is used in serveral diagrams and as it modifies a whole diagram it should be central. (This should also make maintenance easier). This function can be called by processors to make sure that their data is plotted with an LTR waterflow.
author Andre Heinecke <aheinecke@intevation.de>
date Fri, 20 Sep 2013 16:33:22 +0200
parents 726d998dce29
children 3c4efd4b2c19
comparison
equal deleted inserted replaced
7075:253d80af5b7f 7076:7f600001c807
40 import org.json.JSONException; 40 import org.json.JSONException;
41 41
42 import org.dive4elements.artifactdatabase.state.ArtifactAndFacet; 42 import org.dive4elements.artifactdatabase.state.ArtifactAndFacet;
43 import org.dive4elements.artifactdatabase.state.Facet; 43 import org.dive4elements.artifactdatabase.state.Facet;
44 import org.dive4elements.river.artifacts.D4EArtifact; 44 import org.dive4elements.river.artifacts.D4EArtifact;
45 import org.dive4elements.river.artifacts.model.WKms;
45 import org.dive4elements.river.exports.process.Processor; 46 import org.dive4elements.river.exports.process.Processor;
46 import org.dive4elements.river.jfree.AxisDataset; 47 import org.dive4elements.river.jfree.AxisDataset;
47 import org.dive4elements.river.jfree.AnnotationHelper; 48 import org.dive4elements.river.jfree.AnnotationHelper;
48 import org.dive4elements.river.jfree.Bounds; 49 import org.dive4elements.river.jfree.Bounds;
49 import org.dive4elements.river.jfree.CollisionFreeXYTextAnnotation; 50 import org.dive4elements.river.jfree.CollisionFreeXYTextAnnotation;
50 import org.dive4elements.river.jfree.DoubleBounds; 51 import org.dive4elements.river.jfree.DoubleBounds;
51 import org.dive4elements.river.jfree.RiverAnnotation; 52 import org.dive4elements.river.jfree.RiverAnnotation;
52 import org.dive4elements.river.jfree.StyledAreaSeriesCollection; 53 import org.dive4elements.river.jfree.StyledAreaSeriesCollection;
53 import org.dive4elements.river.jfree.StyledXYSeries; 54 import org.dive4elements.river.jfree.StyledXYSeries;
54 import org.dive4elements.river.themes.ThemeDocument; 55 import org.dive4elements.river.themes.ThemeDocument;
56 import org.dive4elements.river.utils.DataUtil;
55 57
56 import org.w3c.dom.Element; 58 import org.w3c.dom.Element;
57 59
58 /** 60 /**
59 * The main diagram creation class. 61 * The main diagram creation class.
1079 1081
1080 protected String axisIndexToName(int index) { 1082 protected String axisIndexToName(int index) {
1081 return diagramAttributes.getAxisName(index); 1083 return diagramAttributes.getAxisName(index);
1082 } 1084 }
1083 1085
1086 /** Guess if the axis should be inverted to ensure ltr diagram water flow.
1087 *
1088 * A processor should decide if it is appropiate to activate this
1089 * handling in a diagram by calling this function.
1090 *
1091 * Merke: In Deutschland fliesst Wasser in Diagrammen immer von
1092 * links nach rechts!!!
1093 */
1094 public void handleLTRWaterFlowInversion(WKms wkms)
1095 {
1096 boolean wsUp = wkms.guessWaterIncreasing();
1097 boolean kmUp = DataUtil.guessWaterIncreasing(wkms.allKms());
1098 int size = wkms.size();
1099 boolean inv = ((wsUp && kmUp) || (!wsUp && !kmUp)) && size > 1;
1100
1101 if (logger.isDebugEnabled()) {
1102 logger.debug("handleLTRWaterFlowInversion: (Wkms)Values : " + size);
1103 if (size > 0) {
1104 logger.debug("Start km: " + wkms.getKm(0));
1105 logger.debug("End km: " + wkms.getKm(size-1));
1106 }
1107 logger.debug("wsUp: " + wsUp);
1108 logger.debug("kmUp: " + kmUp);
1109 if (size == 1) {
1110 logger.debug("Not inverting because we have just one km");
1111 }
1112 logger.debug("inv: " + inv);
1113 }
1114 setInverted(inv);
1115 }
1116
1084 /** Add the acutal data to the diagram according to the processors. 1117 /** Add the acutal data to the diagram according to the processors.
1085 * For every outable facets, this function is 1118 * For every outable facets, this function is
1086 * called and handles the data accordingly. */ 1119 * called and handles the data accordingly. */
1087 @Override 1120 @Override
1088 public void doOut( 1121 public void doOut(

http://dive4elements.wald.intevation.org