andre@8587: /* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde andre@8587: * Software engineering by Intevation GmbH andre@8587: * andre@8587: * This file is Free Software under the GNU AGPL (>=v3) andre@8587: * and comes with ABSOLUTELY NO WARRANTY! Check out the andre@8587: * documentation coming with Dive4Elements River for details. andre@8587: */ andre@8587: andre@8587: package org.dive4elements.river.artifacts.model.minfo; andre@8587: andre@8587: import org.apache.log4j.Logger; andre@8587: andre@8587: import org.dive4elements.artifactdatabase.state.Facet; andre@8587: import org.dive4elements.artifacts.Artifact; andre@8587: import org.dive4elements.artifacts.CallContext; andre@8587: import org.dive4elements.river.artifacts.D4EArtifact; andre@8587: import org.dive4elements.river.artifacts.model.CalculationResult; andre@8587: import org.dive4elements.river.artifacts.model.DataFacet; andre@8587: import org.dive4elements.river.artifacts.states.DefaultState.ComputeType; andre@8587: andre@8587: andre@8587: /** andre@8587: * Facet for serving BedQualityResults andre@8587: */ andre@8587: public class BedQualityDataFacet extends DataFacet { andre@8587: andre@8587: private static final long serialVersionUID = 1L; andre@8587: andre@8587: private static Logger log = Logger.getLogger(BedQualityDataFacet.class); andre@8587: andre@8587: private String valueName; /* Name of the ResultValue underlying this facet */ andre@8587: private String valueType; /* Type of the ResultValue underlying this facet */ andre@8587: andre@8587: public BedQualityDataFacet() { andre@8587: // required for clone operation deepCopy() andre@8587: } andre@8587: andre@8587: public BedQualityDataFacet(int idx, String name, String description, andre@8587: ComputeType type, String stateId, String hash, String valueName, String valueType) { andre@8587: super(idx, name, description, type, hash, stateId); andre@8587: this.valueName = valueName; andre@8587: this.valueType = valueType; andre@8587: this.metaData.put("X", "chart.longitudinal.section.xaxis.label"); andre@8655: if (!valueName.equals("porosity") && !valueName.equals("density")) { andre@8655: this.metaData.put("Y", "chart.bedquality.yaxis.label.diameter"); andre@8655: } else { andre@8655: this.metaData.put("Y", "chart.bedquality.yaxis.label." + valueName); andre@8655: } andre@8587: } andre@8587: andre@8587: @Override andre@8587: public Object getData(Artifact artifact, CallContext context) { andre@8587: log.debug("Get bedquality data: " + valueName + " - " + valueType); andre@8587: andre@8587: D4EArtifact flys = (D4EArtifact) artifact; andre@8587: andre@8587: CalculationResult res = (CalculationResult) flys.compute(context, hash, andre@8587: stateId, type, false); andre@8587: andre@8587: int ndx = index >> 8; andre@8587: BedQualityResultValue value = andre@8587: ((BedQualityResult[]) res.getData())[ndx].getValue(valueName, valueType); andre@8587: andre@8587: if (value == null) { andre@8587: /* Other facets check this so we do too */ andre@8587: return null; andre@8587: } andre@8587: return value.getData(); andre@8587: } andre@8587: andre@8587: /** Copy deeply. */ andre@8587: @Override andre@8587: public Facet deepCopy() { andre@8587: BedQualityDataFacet copy = new BedQualityDataFacet(); andre@8587: copy.set(this); andre@8587: copy.type = type; andre@8587: copy.hash = hash; andre@8587: copy.stateId = stateId; andre@8587: copy.valueName = valueName; andre@8587: copy.valueType = valueType; andre@8587: return copy; andre@8587: } andre@8587: }