rrenkert@6260: package org.dive4elements.river.artifacts.model.minfo; rrenkert@6260: rrenkert@6260: import gnu.trove.TDoubleArrayList; rrenkert@6260: rrenkert@6260: import org.apache.log4j.Logger; rrenkert@6260: import org.dive4elements.artifactdatabase.state.Facet; rrenkert@6260: import org.dive4elements.artifacts.Artifact; rrenkert@6260: import org.dive4elements.artifacts.CallContext; rrenkert@6260: import org.dive4elements.river.artifacts.D4EArtifact; rrenkert@6260: import org.dive4elements.river.artifacts.access.BedQualityAccess; rrenkert@6260: import org.dive4elements.river.artifacts.model.DataFacet; rrenkert@6260: import org.dive4elements.river.artifacts.states.DefaultState.ComputeType; rrenkert@6260: rrenkert@6260: rrenkert@6260: public class BedloadDiameterDataFacet rrenkert@6260: extends DataFacet rrenkert@6260: { teichmann@8202: private static final Logger log = Logger.getLogger(BedloadDiameterDataFacet.class); rrenkert@6260: rrenkert@6260: public BedloadDiameterDataFacet() { rrenkert@6260: } rrenkert@6260: rrenkert@6260: public BedloadDiameterDataFacet( rrenkert@6260: int ndx, rrenkert@6260: String name, rrenkert@6260: String description, rrenkert@6260: ComputeType type, rrenkert@6260: String stateId, rrenkert@6260: String hash rrenkert@6260: ) { rrenkert@6260: super(ndx, name, description, type, hash, stateId); rrenkert@7894: this.metaData.put("X", "chart.longitudinal.section.xaxis.label"); tom@8260: this.metaData.put("Y", "chart.bedquality.yaxis.label.diameter"); rrenkert@6260: } rrenkert@6260: rrenkert@6260: public Object getData(Artifact artifact, CallContext context) { rrenkert@6260: D4EArtifact d4e = (D4EArtifact) artifact; rrenkert@6260: BedQualityAccess access = new BedQualityAccess(d4e, context); rrenkert@6260: int ndx = getIndex() & 7; rrenkert@6357: int diam = (getIndex() >> 4); rrenkert@6260: String diameter = ""; rrenkert@6260: switch (diam) { rrenkert@6260: case 1: diameter = "d10"; break; rrenkert@6260: case 2: diameter = "d16"; break; rrenkert@6260: case 3: diameter = "d20"; break; rrenkert@6260: case 4: diameter = "d25"; break; rrenkert@6260: case 5: diameter = "d30"; break; rrenkert@6260: case 6: diameter = "d40"; break; rrenkert@6260: case 7: diameter = "d50"; break; rrenkert@6260: case 8: diameter = "d60"; break; rrenkert@6260: case 9: diameter = "d70"; break; rrenkert@6260: case 10: diameter = "d75"; break; rrenkert@6260: case 11: diameter = "d80"; break; rrenkert@6260: case 12: diameter = "d84"; break; rrenkert@6260: case 13: diameter = "d90"; break; rrenkert@6260: case 14: diameter = "dmin"; break; rrenkert@6260: case 15: diameter = "dmax"; break; rrenkert@6260: case 16: diameter = "dm"; break; rrenkert@6260: default: return null; rrenkert@6260: } rrenkert@6260: rrenkert@6260: QualityMeasurements measurements = rrenkert@6260: QualityMeasurementFactory.getBedloadMeasurements( felix@7261: access.getRiverName(), rrenkert@6260: access.getFrom(), rrenkert@6260: access.getTo(), rrenkert@6260: access.getDateRanges().get(ndx).getFrom(), rrenkert@6260: access.getDateRanges().get(ndx).getTo()); rrenkert@6260: TDoubleArrayList kms = new TDoubleArrayList(); rrenkert@6260: TDoubleArrayList data = new TDoubleArrayList(); rrenkert@6260: for (QualityMeasurement m : measurements.getMeasurements()) { rrenkert@6260: kms.add(m.getKm()); rrenkert@6260: data.add(m.getDiameter(diameter)*1000); rrenkert@6260: } rrenkert@6260: BedDiameterData bdd = new BedDiameterData(diameter, kms, data); rrenkert@7987: return bdd.getDiameterData(); rrenkert@6260: } rrenkert@6260: rrenkert@6260: /** Copy deeply. */ rrenkert@6260: @Override rrenkert@6260: public Facet deepCopy() { rrenkert@6260: BedloadDiameterDataFacet copy = new BedloadDiameterDataFacet(); rrenkert@6260: copy.set(this); rrenkert@6260: copy.type = type; rrenkert@6260: copy.hash = hash; rrenkert@6260: copy.stateId = stateId; rrenkert@6260: return copy; rrenkert@6260: } rrenkert@6260: }