Mercurial > dive4elements > river
view flys-artifacts/src/main/java/de/intevation/flys/artifacts/states/minfo/BedQualityState.java @ 3786:4adc35aa655c
merged flys-artifacts/2.9.1
author | Thomas Arendsen Hein <thomas@intevation.de> |
---|---|
date | Fri, 28 Sep 2012 12:14:47 +0200 |
parents | a5f65e8983be |
children | f8217f1fef2e |
line wrap: on
line source
package de.intevation.flys.artifacts.states.minfo; import java.util.ArrayList; import java.util.Date; import java.util.List; import org.apache.log4j.Logger; import de.intevation.artifactdatabase.state.Facet; import de.intevation.artifacts.CallContext; import de.intevation.artifacts.CallMeta; import de.intevation.flys.artifacts.FLYSArtifact; import de.intevation.flys.artifacts.access.BedQualityAccess; import de.intevation.flys.artifacts.model.CalculationResult; import de.intevation.flys.artifacts.model.DataFacet; import de.intevation.flys.artifacts.model.DateRange; import de.intevation.flys.artifacts.model.FacetTypes; import de.intevation.flys.artifacts.model.minfo.BedDensityFacet; import de.intevation.flys.artifacts.model.minfo.BedDiameterFacet; import de.intevation.flys.artifacts.model.minfo.BedDiameterResult; import de.intevation.flys.artifacts.model.minfo.BedParametersResult; import de.intevation.flys.artifacts.model.minfo.BedPorosityFacet; import de.intevation.flys.artifacts.model.minfo.BedQualityCalculation; import de.intevation.flys.artifacts.model.minfo.BedQualityDiameterResult; import de.intevation.flys.artifacts.model.minfo.BedQualityResult; import de.intevation.flys.artifacts.model.minfo.BedloadDiameterFacet; import de.intevation.flys.artifacts.model.minfo.BedloadDiameterResult; import de.intevation.flys.artifacts.resources.Resources; import de.intevation.flys.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); 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 :