raimund@3629: package de.intevation.flys.artifacts.states.minfo; raimund@3629: ingo@3749: import java.util.ArrayList; ingo@3749: import java.util.List; ingo@3749: ingo@3749: import org.apache.log4j.Logger; ingo@3749: ingo@3749: import de.intevation.artifactdatabase.state.Facet; ingo@3749: import de.intevation.artifacts.CallContext; ingo@3749: import de.intevation.flys.artifacts.FLYSArtifact; ingo@3749: import de.intevation.flys.artifacts.access.BedQualityAccess; ingo@3749: import de.intevation.flys.artifacts.model.CalculationResult; ingo@3757: import de.intevation.flys.artifacts.model.FacetTypes; ingo@3762: import de.intevation.flys.artifacts.model.minfo.BedBedQualityResult; ingo@3757: import de.intevation.flys.artifacts.model.minfo.BedDensityFacet; ingo@3757: import de.intevation.flys.artifacts.model.minfo.BedDiameterFacet; ingo@3762: import de.intevation.flys.artifacts.model.minfo.BedLoadBedQualityResult; ingo@3757: import de.intevation.flys.artifacts.model.minfo.BedPorosityFacet; christian@3761: import de.intevation.flys.artifacts.model.minfo.BedQualityCalculation; ingo@3762: import de.intevation.flys.artifacts.model.minfo.BedQualityResult; ingo@3757: import de.intevation.flys.artifacts.model.minfo.BedloadDiameterFacet; raimund@3629: import de.intevation.flys.artifacts.states.DefaultState; raimund@3629: sascha@3750: ingo@3757: public class BedQualityState extends DefaultState implements FacetTypes { ingo@3757: ingo@3757: private static final long serialVersionUID = 1L; ingo@3757: ingo@3757: private static final Logger logger = Logger ingo@3757: .getLogger(BedQualityState.class); sascha@3750: ingo@3749: @Override ingo@3757: public Object computeAdvance(FLYSArtifact artifact, String hash, ingo@3757: CallContext context, List facets, Object old) { ingo@3749: logger.debug("BedQualityState.computeAdvance"); raimund@3629: ingo@3749: List newFacets = new ArrayList(); ingo@3749: ingo@3749: BedQualityAccess access = new BedQualityAccess(artifact); ingo@3749: ingo@3757: CalculationResult res = old instanceof CalculationResult ? (CalculationResult) old ingo@3749: : new BedQualityCalculation().calculate(access); ingo@3749: ingo@3749: if (facets == null || res == null) { ingo@3749: return res; ingo@3749: } ingo@3749: ingo@3762: BedQualityResult[] results = (BedQualityResult[]) res.getData(); ingo@3757: ingo@3762: if (results == null || results.length == 0) { ingo@3762: logger.warn("Calculation computed no results!"); ingo@3762: return res; ingo@3762: } ingo@3757: ingo@3762: generateFacets(newFacets, results, getID(), hash); ingo@3762: logger.debug("Created " + newFacets.size() + " new Facets."); ingo@3757: ingo@3749: facets.addAll(newFacets); ingo@3749: ingo@3749: return res; ingo@3749: } ingo@3762: ingo@3762: protected void generateFacets(List newFacets, ingo@3762: BedQualityResult[] results, String stateId, String hash) { ingo@3762: logger.debug("BedQualityState.generateFacets"); ingo@3762: ingo@3762: for (int idx = 0; idx < results.length; idx++) { ingo@3762: BedQualityResult result = results[idx]; ingo@3762: ingo@3762: if (result instanceof BedBedQualityResult) { ingo@3762: // TODO I18N for Facet description ingo@3762: newFacets.add(new BedPorosityFacet(idx, ingo@3762: BED_QUALITY_POROSITY_TOPLAYER, "porosity_toplayer", ingo@3762: ComputeType.ADVANCE, stateId, hash)); ingo@3762: ingo@3762: // TODO I18N for Facet description ingo@3762: newFacets.add(new BedPorosityFacet(idx, ingo@3762: BED_QUALITY_POROSITY_SUBLAYER, "porosity_sublayer", ingo@3762: ComputeType.ADVANCE, stateId, hash)); ingo@3762: ingo@3762: // TODO I18N for Facet description ingo@3762: newFacets.add(new BedDensityFacet(idx, ingo@3762: BED_QUALITY_SEDIMENT_DENSITY_TOPLAYER, "density_toplayer", ingo@3762: ComputeType.ADVANCE, stateId, hash)); ingo@3762: ingo@3762: // TODO I18N for Facet description ingo@3762: newFacets.add(new BedDensityFacet(idx, ingo@3762: BED_QUALITY_SEDIMENT_DENSITY_SUBLAYER, "density_sublayer", ingo@3762: ComputeType.ADVANCE, stateId, hash)); ingo@3762: ingo@3762: // TODO I18N for Facet description ingo@3762: newFacets.add(new BedloadDiameterFacet(idx, ingo@3766: BED_QUALITY_BED_DIAMETER_TOPLAYER, "bed diameter_toplayer", ingo@3766: ComputeType.ADVANCE, stateId, hash)); ingo@3766: ingo@3766: // TODO I18N for Facet description ingo@3766: newFacets.add(new BedloadDiameterFacet(idx, ingo@3766: BED_QUALITY_BED_DIAMETER_SUBLAYER, "bed diameter_sublayer", ingo@3762: ComputeType.ADVANCE, stateId, hash)); ingo@3762: } ingo@3762: else if (result instanceof BedLoadBedQualityResult) { ingo@3766: // TODO I18N for Facet description ingo@3766: newFacets.add(new BedDiameterFacet(idx, BED_QUALITY_BEDLOAD_DIAMETER, ingo@3762: "bedload diameter", ComputeType.ADVANCE, stateId, hash)); ingo@3762: } ingo@3762: else { ingo@3762: logger.warn("unknown result object: " + result.getClass()); ingo@3762: } ingo@3762: } ingo@3762: } raimund@3629: } christian@3761: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :