Mercurial > dive4elements > river
diff flys-artifacts/src/main/java/org/dive4elements/river/artifacts/states/minfo/BedQualityState.java @ 5831:bd047b71ab37
Repaired internal references
author | Sascha L. Teichmann <teichmann@intevation.de> |
---|---|
date | Thu, 25 Apr 2013 12:06:39 +0200 |
parents | flys-artifacts/src/main/java/de/intevation/flys/artifacts/states/minfo/BedQualityState.java@f8217f1fef2e |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/flys-artifacts/src/main/java/org/dive4elements/river/artifacts/states/minfo/BedQualityState.java Thu Apr 25 12:06:39 2013 +0200 @@ -0,0 +1,227 @@ +package org.dive4elements.river.artifacts.states.minfo; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +import org.apache.log4j.Logger; + +import org.dive4elements.artifactdatabase.state.Facet; +import org.dive4elements.artifacts.CallContext; +import org.dive4elements.artifacts.CallMeta; +import org.dive4elements.river.artifacts.FLYSArtifact; +import org.dive4elements.river.artifacts.access.BedQualityAccess; +import org.dive4elements.river.artifacts.model.CalculationResult; +import org.dive4elements.river.artifacts.model.DataFacet; +import org.dive4elements.river.artifacts.model.DateRange; +import org.dive4elements.river.artifacts.model.FacetTypes; +import org.dive4elements.river.artifacts.model.minfo.BedDensityFacet; +import org.dive4elements.river.artifacts.model.minfo.BedDiameterFacet; +import org.dive4elements.river.artifacts.model.minfo.BedDiameterResult; +import org.dive4elements.river.artifacts.model.minfo.BedParametersResult; +import org.dive4elements.river.artifacts.model.minfo.BedPorosityFacet; +import org.dive4elements.river.artifacts.model.minfo.BedQualityCalculation; +import org.dive4elements.river.artifacts.model.minfo.BedQualityDiameterResult; +import org.dive4elements.river.artifacts.model.minfo.BedQualityResult; +import org.dive4elements.river.artifacts.model.minfo.BedloadDiameterFacet; +import org.dive4elements.river.artifacts.model.minfo.BedloadDiameterResult; +import org.dive4elements.river.artifacts.resources.Resources; +import org.dive4elements.river.artifacts.states.DefaultState; + + +public class BedQualityState extends DefaultState implements FacetTypes { + + private static final long serialVersionUID = 1L; + + private static final Logger logger = Logger + .getLogger(BedQualityState.class); + + public static final String I18N_TOPLAYER = "bedquality.toplayer"; + public static final String I18N_SUBLAYER = "bedquality.sublayer"; + + public static final String I18N_FACET_BED_POROSITY_TOPLAYER = "facet.bedquality.bed.porosity.toplayer"; + public static final String I18N_FACET_BED_POROSITY_SUBLAYER = "facet.bedquality.bed.porosity.sublayer"; + public static final String I18N_FACET_BED_DENSITY_TOPLAYER = "facet.bedquality.bed.density.toplayer"; + public static final String I18N_FACET_BED_DENSITY_SUBLAYER = "facet.bedquality.bed.density.sublayer"; + public static final String I18N_FACET_BED_DIAMETER_TOPLAYER = "facet.bedquality.bed.diameter.toplayer"; + public static final String I18N_FACET_BED_DIAMETER_SUBLAYER = "facet.bedquality.bed.diameter.sublayer"; + public static final String I18N_FACET_BEDLOAD_DIAMETER = "facet.bedquality.bedload.diameter"; + + @Override + public Object computeAdvance(FLYSArtifact artifact, String hash, + CallContext context, List<Facet> facets, Object old) { + logger.debug("BedQualityState.computeAdvance"); + + List<Facet> newFacets = new ArrayList<Facet>(); + + BedQualityAccess access = new BedQualityAccess(artifact, context); + + CalculationResult res = old instanceof CalculationResult ? (CalculationResult) old + : new BedQualityCalculation().calculate(access); + + if (facets == null || res == null) { + return res; + } + + BedQualityResult[] results = (BedQualityResult[]) res.getData(); + + if (results == null || results.length == 0) { + logger.warn("Calculation computed no results!"); + return res; + } + + generateFacets(context, newFacets, results, getID(), hash); + logger.debug("Created " + newFacets.size() + " new Facets."); + + facets.addAll(newFacets); + + return res; + } + + protected void generateFacets(CallContext context, List<Facet> newFacets, + BedQualityResult[] results, String stateId, String hash) { + logger.debug("BedQualityState.generateFacets"); + + CallMeta meta = context.getMeta(); + + newFacets.add(new DataFacet(CSV, "CSV data", ComputeType.ADVANCE, hash, id)); + for (int idx = 0; idx < results.length; idx++) { + BedQualityResult result = results[idx]; + DateRange range = result.getDateRange(); + BedDiameterResult[] bedDiameter = result.getBedResults(); + for (int j = 0; j < bedDiameter.length; j++) { + newFacets.add(new BedDiameterFacet((idx << 8) + j, + BED_QUALITY_BED_DIAMETER_TOPLAYER, + createDiameterTopLayerDescription( + meta, + bedDiameter[j], + range), + ComputeType.ADVANCE, stateId, hash)); + + newFacets.add(new BedDiameterFacet((idx << 8) +j, + BED_QUALITY_BED_DIAMETER_SUBLAYER, + createDiameterSubLayerDescription( + meta, + bedDiameter[j], + range), + ComputeType.ADVANCE, stateId, hash)); + } + BedloadDiameterResult[] bedloadDiameter = result.getBedloadResults(); + for (int j = 0; j < bedloadDiameter.length; j++) { + newFacets.add(new BedloadDiameterFacet( + (idx << 8) + j, + BED_QUALITY_BEDLOAD_DIAMETER, + createDiameterDescription( + meta, bedloadDiameter[j]), + ComputeType.ADVANCE, + stateId, + hash)); + + } + BedParametersResult[] bedParameters = result.getParameters(); + for (int j = 0; j < bedParameters.length; j++) { + newFacets.add(new BedPorosityFacet((idx << 8) + j, + BED_QUALITY_POROSITY_TOPLAYER, + createPorosityTopLayerDescription( + meta, + bedParameters[j], + range), + ComputeType.ADVANCE, stateId, hash)); + + newFacets.add(new BedPorosityFacet((idx << 8) + j, + BED_QUALITY_POROSITY_SUBLAYER, + createPorositySubLayerDescription( + meta, + bedParameters[j], + range), + ComputeType.ADVANCE, stateId, hash)); + + newFacets.add(new BedDensityFacet((idx << 8) + j, + BED_QUALITY_SEDIMENT_DENSITY_TOPLAYER, + createDensityTopLayerDescription( + meta, + bedParameters[j], + range), + ComputeType.ADVANCE, stateId, hash)); + + newFacets.add(new BedDensityFacet((idx << 8) + j, + BED_QUALITY_SEDIMENT_DENSITY_SUBLAYER, + createDensitySubLayerDescription( + meta, + bedParameters[j], + range), + ComputeType.ADVANCE, stateId, hash)); + } + } + } + + protected String createPorosityTopLayerDescription(CallMeta meta, + BedParametersResult result, DateRange range) { + Date from = range != null ? range.getFrom() : new Date(); + Date to = range != null ? range.getTo() : new Date(); + + String toplayer = Resources.getMsg(meta, I18N_TOPLAYER, I18N_TOPLAYER); + return Resources.getMsg(meta, I18N_FACET_BED_POROSITY_TOPLAYER, + I18N_FACET_BED_POROSITY_TOPLAYER, new Object[] { from, to, toplayer }); + } + + protected String createPorositySubLayerDescription(CallMeta meta, + BedParametersResult result, DateRange range) { + Date from = range != null ? range.getFrom() : new Date(); + Date to = range != null ? range.getTo() : new Date(); + + String sublayer = Resources.getMsg(meta, I18N_SUBLAYER, I18N_SUBLAYER); + return Resources.getMsg(meta, I18N_FACET_BED_POROSITY_SUBLAYER, + I18N_FACET_BED_POROSITY_SUBLAYER, new Object[] { from, to, sublayer }); + } + + protected String createDensityTopLayerDescription(CallMeta meta, + BedParametersResult result, DateRange range) { + Date from = range != null ? range.getFrom() : new Date(); + Date to = range != null ? range.getTo() : new Date(); + + String toplayer = Resources.getMsg(meta, I18N_TOPLAYER, I18N_TOPLAYER); + return Resources.getMsg(meta, I18N_FACET_BED_DENSITY_TOPLAYER, + I18N_FACET_BED_DENSITY_TOPLAYER, new Object[] { from, to, toplayer }); + } + + protected String createDensitySubLayerDescription(CallMeta meta, + BedParametersResult result, DateRange range) { + Date from = range != null ? range.getFrom() : new Date(); + Date to = range != null ? range.getTo() : new Date(); + + String sublayer = Resources.getMsg(meta, I18N_SUBLAYER, I18N_SUBLAYER); + return Resources.getMsg(meta, I18N_FACET_BED_DENSITY_SUBLAYER, + I18N_FACET_BED_DENSITY_SUBLAYER, new Object[] { from, to, sublayer }); + } + + protected String createDiameterTopLayerDescription(CallMeta meta, + BedDiameterResult result, DateRange range) { + Date from = range != null ? range.getFrom() : new Date(); + Date to = range != null ? range.getTo() : new Date(); + + String toplayer = Resources.getMsg(meta, I18N_TOPLAYER, I18N_TOPLAYER); + + return Resources.getMsg(meta, I18N_FACET_BED_DIAMETER_TOPLAYER, + I18N_FACET_BED_DIAMETER_TOPLAYER, new Object[] { result.getType(), + from, to, toplayer }); + } + + protected String createDiameterSubLayerDescription(CallMeta meta, + BedDiameterResult result, DateRange range) { + Date from = range != null ? range.getFrom() : new Date(); + Date to = range != null ? range.getTo() : new Date(); + + String sublayer = Resources.getMsg(meta, I18N_SUBLAYER, I18N_SUBLAYER); + return Resources.getMsg(meta, I18N_FACET_BED_DIAMETER_SUBLAYER, + I18N_FACET_BED_DIAMETER_SUBLAYER, new Object[] { result.getType(), + from, to, sublayer }); + } + + protected String createDiameterDescription(CallMeta meta, + BedQualityDiameterResult result) { + return Resources.getMsg(meta, I18N_FACET_BEDLOAD_DIAMETER, + I18N_FACET_BEDLOAD_DIAMETER, new Object[] { result.getType() }); + } +} +// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :