# HG changeset patch # User Raimund Renkert # Date 1370935049 -7200 # Node ID 947434874937d247e5f7c57083fe7a52a367f41d # Parent 06ee8e2f8b0b0fd7c7d49d8463211963a4719424 New facet for bedload diameter measurements. diff -r 06ee8e2f8b0b -r 947434874937 artifacts/src/main/java/org/dive4elements/river/artifacts/model/minfo/BedloadDiameterDataFacet.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/model/minfo/BedloadDiameterDataFacet.java Tue Jun 11 09:17:29 2013 +0200 @@ -0,0 +1,87 @@ +package org.dive4elements.river.artifacts.model.minfo; + +import gnu.trove.TDoubleArrayList; + +import org.apache.log4j.Logger; +import org.dive4elements.artifactdatabase.state.Facet; +import org.dive4elements.artifacts.Artifact; +import org.dive4elements.artifacts.CallContext; +import org.dive4elements.river.artifacts.D4EArtifact; +import org.dive4elements.river.artifacts.access.BedQualityAccess; +import org.dive4elements.river.artifacts.model.DataFacet; +import org.dive4elements.river.artifacts.states.DefaultState.ComputeType; + + +public class BedloadDiameterDataFacet +extends DataFacet +{ + private static final Logger logger = Logger.getLogger(BedDiameterDataFacet.class); + + public BedloadDiameterDataFacet() { + } + + public BedloadDiameterDataFacet( + int ndx, + String name, + String description, + ComputeType type, + String stateId, + String hash + ) { + super(ndx, name, description, type, hash, stateId); + } + + public Object getData(Artifact artifact, CallContext context) { + D4EArtifact d4e = (D4EArtifact) artifact; + BedQualityAccess access = new BedQualityAccess(d4e, context); + int ndx = getIndex() & 7; + int diam = (getIndex() >> 3); + String diameter = ""; + switch (diam) { + case 1: diameter = "d10"; break; + case 2: diameter = "d16"; break; + case 3: diameter = "d20"; break; + case 4: diameter = "d25"; break; + case 5: diameter = "d30"; break; + case 6: diameter = "d40"; break; + case 7: diameter = "d50"; break; + case 8: diameter = "d60"; break; + case 9: diameter = "d70"; break; + case 10: diameter = "d75"; break; + case 11: diameter = "d80"; break; + case 12: diameter = "d84"; break; + case 13: diameter = "d90"; break; + case 14: diameter = "dmin"; break; + case 15: diameter = "dmax"; break; + case 16: diameter = "dm"; break; + default: return null; + } + + QualityMeasurements measurements = + QualityMeasurementFactory.getBedloadMeasurements( + access.getRiver(), + access.getFrom(), + access.getTo(), + access.getDateRanges().get(ndx).getFrom(), + access.getDateRanges().get(ndx).getTo()); + TDoubleArrayList kms = new TDoubleArrayList(); + TDoubleArrayList data = new TDoubleArrayList(); + for (QualityMeasurement m : measurements.getMeasurements()) { + kms.add(m.getKm()); + data.add(m.getDiameter(diameter)*1000); + } + BedDiameterData bdd = new BedDiameterData(diameter, kms, data); + return bdd; + } + + /** Copy deeply. */ + @Override + public Facet deepCopy() { + BedloadDiameterDataFacet copy = new BedloadDiameterDataFacet(); + copy.set(this); + copy.type = type; + copy.hash = hash; + copy.stateId = stateId; + return copy; + } +}