# HG changeset patch # User mschaefer # Date 1530546039 -7200 # Node ID 4f411c6ee3aec4c9fa9be05b1823d71e39782889 # Parent 9831f6c60473e86cf6346b6e8c440e98c8880aae Individual facets/themes for single years i the S-Info collisions output diff -r 9831f6c60473 -r 4f411c6ee3ae artifacts/doc/conf/artifacts/sinfo.xml --- a/artifacts/doc/conf/artifacts/sinfo.xml Mon Jul 02 13:00:59 2018 +0200 +++ b/artifacts/doc/conf/artifacts/sinfo.xml Mon Jul 02 17:40:39 2018 +0200 @@ -281,6 +281,8 @@ + + diff -r 9831f6c60473 -r 4f411c6ee3ae artifacts/doc/conf/themes.xml --- a/artifacts/doc/conf/themes.xml Mon Jul 02 13:00:59 2018 +0200 +++ b/artifacts/doc/conf/themes.xml Mon Jul 02 17:40:39 2018 +0200 @@ -442,6 +442,9 @@ + + + diff -r 9831f6c60473 -r 4f411c6ee3ae artifacts/doc/conf/themes/default.xml --- a/artifacts/doc/conf/themes/default.xml Mon Jul 02 13:00:59 2018 +0200 +++ b/artifacts/doc/conf/themes/default.xml Mon Jul 02 17:40:39 2018 +0200 @@ -3070,6 +3070,24 @@ + + + + + + + + + + + + + + + + + + diff -r 9831f6c60473 -r 4f411c6ee3ae artifacts/doc/conf/themes/second.xml --- a/artifacts/doc/conf/themes/second.xml Mon Jul 02 13:00:59 2018 +0200 +++ b/artifacts/doc/conf/themes/second.xml Mon Jul 02 17:40:39 2018 +0200 @@ -3058,6 +3058,24 @@ + + + + + + + + + + + + + + + + + + @@ -3070,7 +3088,7 @@ - + @@ -3078,7 +3096,7 @@ - + @@ -3086,7 +3104,7 @@ - + diff -r 9831f6c60473 -r 4f411c6ee3ae artifacts/src/main/java/org/dive4elements/river/artifacts/common/AbstractCalculationResult.java --- a/artifacts/src/main/java/org/dive4elements/river/artifacts/common/AbstractCalculationResult.java Mon Jul 02 13:00:59 2018 +0200 +++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/common/AbstractCalculationResult.java Mon Jul 02 17:40:39 2018 +0200 @@ -66,6 +66,10 @@ return new double[][] { xPoints.toNativeArray(), yPoints.toNativeArray() }; } + public double[][] getStationPoints(final IResultType type, final int index) { + return getStationPoints(type); + } + protected final List getValues(final IResultType type) { final List values = new ArrayList<>(); diff -r 9831f6c60473 -r 4f411c6ee3ae artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/collision/CollisionCalcFacet.java --- a/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/collision/CollisionCalcFacet.java Mon Jul 02 13:00:59 2018 +0200 +++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/collision/CollisionCalcFacet.java Mon Jul 02 17:40:39 2018 +0200 @@ -47,7 +47,7 @@ final CollisionCalculationResults data = (CollisionCalculationResults) res.getData(); - return data.getResults().get(this.index); + return data.getResults().get(0); // first result is always the one and only CollisionCalcOverviewResult } /** Copy deeply. */ diff -r 9831f6c60473 -r 4f411c6ee3ae artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/collision/CollisionCalcOverviewResult.java --- a/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/collision/CollisionCalcOverviewResult.java Mon Jul 02 13:00:59 2018 +0200 +++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/collision/CollisionCalcOverviewResult.java Mon Jul 02 17:40:39 2018 +0200 @@ -16,11 +16,14 @@ import org.dive4elements.river.artifacts.common.ExportContextCSV; import org.dive4elements.river.artifacts.common.ExportContextPDF; import org.dive4elements.river.artifacts.common.GeneralResultType; +import org.dive4elements.river.artifacts.common.IResultType; import org.dive4elements.river.artifacts.common.MetaAndTableJRDataSource; import org.dive4elements.river.artifacts.common.ResultRow; import org.dive4elements.river.artifacts.sinfo.common.SInfoResultType; import org.dive4elements.river.artifacts.sinfo.util.RiverInfo; +import gnu.trove.TDoubleArrayList; + /** * Contains the results of a {@link CollisionCalculation}. * @@ -32,8 +35,36 @@ private static final String JASPER_FILE = "/jasper/templates/sinfo.collision.overview.jrxml"; - public CollisionCalcOverviewResult(final String label, final Collection rows) { + private final int[] singleYears; + + public CollisionCalcOverviewResult(final String label, final int[] singleYears, final Collection rows) { super(label, rows); + this.singleYears = singleYears; + } + + public int[] getSingleYears() { + return this.singleYears; + } + + @Override + public double[][] getStationPoints(final IResultType type, final int index) { + + final TDoubleArrayList xPoints = new TDoubleArrayList(this.rows.size()); + final TDoubleArrayList yPoints = new TDoubleArrayList(this.rows.size()); + + for (final ResultRow row : this.rows) { + + if ((this.singleYears == null) || (Integer.valueOf(row.getValue(SInfoResultType.years).toString()) == this.singleYears[index])) { + + final double station = row.getDoubleValue(GeneralResultType.station); + final double value = row.getDoubleValue(type); + + xPoints.add(station); + yPoints.add(value); + } + } + + return new double[][] { xPoints.toNativeArray(), yPoints.toNativeArray() }; } @Override @@ -45,7 +76,7 @@ public void writeCSVHeader(final ExportContextCSV exportContextCSV, final RiverInfo river) { final int colSize = 3; exportContextCSV.writeTitleForTabs("sinfo.export.csv.title.collison.overview", 3); // Voraussetzung für Tabs ist, dass der Titel vor den Headern - // geschrieben wird. + // geschrieben wird. // Das ist etwas doof. final Collection header = new ArrayList<>(colSize); diff -r 9831f6c60473 -r 4f411c6ee3ae artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/collision/CollisionCalculation.java --- a/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/collision/CollisionCalculation.java Mon Jul 02 13:00:59 2018 +0200 +++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/collision/CollisionCalculation.java Mon Jul 02 17:40:39 2018 +0200 @@ -74,7 +74,7 @@ for (final DateRange dr : access.getEpochs()) calculateOverview(overViewRows, river, access.getLowerKm(), access.getUpperKm(), dr.getFromYear(), dr.getToYear(), true); } - final CollisionCalcOverviewResult overviewResult = new CollisionCalcOverviewResult(access.getYearsHeader(), overViewRows); + final CollisionCalcOverviewResult overviewResult = new CollisionCalcOverviewResult(access.getYearsHeader(), access.getYears(), overViewRows); results.addResult(overviewResult, problems); // create q-for-w-finders for all gauges of the calculation km range diff -r 9831f6c60473 -r 4f411c6ee3ae artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/collision/CollisionState.java --- a/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/collision/CollisionState.java Mon Jul 02 13:00:59 2018 +0200 +++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/collision/CollisionState.java Mon Jul 02 17:40:39 2018 +0200 @@ -78,10 +78,18 @@ /* add themes for chart, for each result */ final List resultList = results.getResults(); + int j = -1; for (int index = 0; index < resultList.size(); index++) { if (resultList.get(index) instanceof CollisionCalcOverviewResult) { final CollisionCalcOverviewResult result = (CollisionCalcOverviewResult) resultList.get(index); - facets.add(CollisionCalcProcessor.createFacet(context, hash, this.id, result, index)); + if (result.getSingleYears() == null) + facets.add(CollisionCalcProcessor.createFacet(context, hash, this.id, result, index)); + else { + for (int i = 0; i <= result.getSingleYears().length - 1; i++) { + j++; + facets.add(CollisionCalcProcessor.createFacet(context, hash, this.id, result, j)); + } + } } } diff -r 9831f6c60473 -r 4f411c6ee3ae artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/common/AbstractSInfoProcessor.java --- a/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/common/AbstractSInfoProcessor.java Mon Jul 02 13:00:59 2018 +0200 +++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/common/AbstractSInfoProcessor.java Mon Jul 02 17:40:39 2018 +0200 @@ -104,6 +104,38 @@ return metaData.get("Y"); } + protected final String buildSeriesForType1(final DiagramGenerator generator, final ArtifactAndFacet bundle, final ThemeDocument theme, + final boolean visible, + final IResultType resultType, final Double gapDistance) { + final CallContext context = generator.getContext(); + final Map metaData = bundle.getFacet().getMetaData(); + + final Artifact artifact = bundle.getArtifact(); + + final StyledXYSeries series = new StyledXYSeries(bundle.getFacetDescription(), theme); + series.putMetaData(metaData, artifact, context); + + final String facetName = bundle.getFacetName(); + + final AbstractCalculationResult data = (AbstractCalculationResult) bundle.getData(context); + if (data == null) { + // Check has been here before so we keep it for security reasons + // this should never happen though. + throw new IllegalStateException("Data is null for facet: " + facetName); + } + + final double[][] points = generatePoints(context, artifact, data, facetName, resultType, bundle.getFacet().getIndex()); + + if (gapDistance == null) + StyledSeriesBuilder.addPoints(series, points, true); + else + StyledSeriesBuilder.addPoints(series, points, true, gapDistance); + + generator.addAxisSeries(series, getAxisName(), visible); + + return metaData.get("Y"); + } + protected final String buildSeriesForTkh(final DiagramGenerator generator, final ArtifactAndFacet bundle, final ThemeDocument theme, final boolean visible) { final CallContext context = generator.getContext(); @@ -162,6 +194,18 @@ return points; } + private double[][] generatePoints(final CallContext context, final Artifact artifact, final AbstractCalculationResult data, final String facetName, + final IResultType resultType, final int index) { + + final double[][] points = data.getStationPoints(resultType, index); + if (facetName.endsWith(".filtered")) { + final Double radius = findRadius(context, artifact); + return movingAverage(radius, points); + } + + return points; + } + private double[][] movingAverage(final Double radius, final double[][] points) { if (radius == null) diff -r 9831f6c60473 -r 4f411c6ee3ae artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/common/CollisionCalcProcessor.java --- a/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/common/CollisionCalcProcessor.java Mon Jul 02 13:00:59 2018 +0200 +++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/common/CollisionCalcProcessor.java Mon Jul 02 17:40:39 2018 +0200 @@ -19,6 +19,7 @@ import org.dive4elements.river.artifacts.common.AbstractCalculationResult; import org.dive4elements.river.artifacts.resources.Resources; import org.dive4elements.river.artifacts.sinfo.collision.CollisionCalcFacet; +import org.dive4elements.river.artifacts.sinfo.collision.CollisionCalcOverviewResult; import org.dive4elements.river.artifacts.states.DefaultState.ComputeType; import org.dive4elements.river.exports.DiagramGenerator; import org.dive4elements.river.themes.ThemeDocument; @@ -33,6 +34,10 @@ public static final String FACET_COLLISION_CALC_COUNT = "sinfo_facet_collision_calc_count"; + public static final String FACET_COLLISION_CALC_COUNT_2 = "sinfo_facet_collision_calc_count.2"; + + public static final String FACET_COLLISION_CALC_COUNT_3 = "sinfo_facet_collision_calc_count.3"; + private static final String I18N_AXIS_LABEL = "chart.collision_count.section.yaxis.label"; private static final String I18N_SERIES_NAME_PATTERN = "collision.count.title"; @@ -41,6 +46,8 @@ static { HANDLED_FACET_TYPES.add(FACET_COLLISION_CALC_COUNT); + HANDLED_FACET_TYPES.add(FACET_COLLISION_CALC_COUNT_2); + HANDLED_FACET_TYPES.add(FACET_COLLISION_CALC_COUNT_3); } public CollisionCalcProcessor() { @@ -50,12 +57,24 @@ @Override protected String generateSeries(final DiagramGenerator generator, final ArtifactAndFacet bundle, final ThemeDocument theme, final boolean visible) { - return buildSeriesForType(generator, bundle, theme, visible, SInfoResultType.collisionCount, null); + return buildSeriesForType1(generator, bundle, theme, visible, SInfoResultType.collisionCount, null); } public static final Facet createFacet(final CallContext context, final String hash, final String id, final AbstractCalculationResult result, final int index) { - final String facetDescription = Resources.getMsg(context.getMeta(), I18N_SERIES_NAME_PATTERN, I18N_SERIES_NAME_PATTERN, result.getLabel()); - return new CollisionCalcFacet(index, FACET_COLLISION_CALC_COUNT, facetDescription, I18N_AXIS_LABEL, ComputeType.ADVANCE, id, hash); + + final CollisionCalcOverviewResult ccoResult = (CollisionCalcOverviewResult) result; + String facetDescription; + String facetName; + if (ccoResult.getSingleYears() == null) { + facetDescription = Resources.getMsg(context.getMeta(), I18N_SERIES_NAME_PATTERN, I18N_SERIES_NAME_PATTERN, result.getLabel()); + facetName = FACET_COLLISION_CALC_COUNT; + } + else { + facetDescription = Resources.getMsg(context.getMeta(), I18N_SERIES_NAME_PATTERN, I18N_SERIES_NAME_PATTERN, + Integer.toString(ccoResult.getSingleYears()[index])); + facetName = new String[] { FACET_COLLISION_CALC_COUNT, FACET_COLLISION_CALC_COUNT_2, FACET_COLLISION_CALC_COUNT_3 }[index % 3].toString(); + } + return new CollisionCalcFacet(index, facetName, facetDescription, I18N_AXIS_LABEL, ComputeType.ADVANCE, id, hash); } } \ No newline at end of file