teichmann@5863: /* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde teichmann@5863: * Software engineering by Intevation GmbH teichmann@5863: * teichmann@5994: * This file is Free Software under the GNU AGPL (>=v3) teichmann@5863: * and comes with ABSOLUTELY NO WARRANTY! Check out the teichmann@5994: * documentation coming with Dive4Elements River for details. teichmann@5863: */ teichmann@5863: teichmann@5831: package org.dive4elements.river.artifacts; raimund@3614: raimund@3614: import java.util.ArrayList; raimund@3614: import java.util.List; raimund@3614: raimund@3614: import org.apache.log4j.Logger; raimund@3614: import org.w3c.dom.Document; raimund@3614: teichmann@5831: import org.dive4elements.artifactdatabase.state.DefaultOutput; teichmann@5831: import org.dive4elements.artifactdatabase.state.Facet; teichmann@5831: import org.dive4elements.artifactdatabase.state.FacetActivity; teichmann@5831: import org.dive4elements.artifacts.ArtifactFactory; teichmann@5831: import org.dive4elements.artifacts.Artifact; teichmann@5831: import org.dive4elements.artifacts.CallMeta; teichmann@5831: import org.dive4elements.artifacts.common.utils.XMLUtils; felix@7337: import org.dive4elements.river.artifacts.model.FacetTypes; teichmann@5831: import org.dive4elements.river.artifacts.model.minfo.BedHeightFacet; teichmann@5831: import org.dive4elements.river.artifacts.model.minfo.BedHeightFactory; rrenkert@7984: import org.dive4elements.river.artifacts.model.minfo.BedHeightSoundingWidthFacet; teichmann@5831: import org.dive4elements.river.artifacts.states.StaticState; raimund@3614: felix@7477: import org.dive4elements.river.artifacts.resources.Resources; felix@7477: raimund@3614: public class BedHeightsArtifact bjoern@4535: extends AbstractStaticStateArtifact felix@7337: implements FacetTypes raimund@3614: { teichmann@8202: /** The log for this class. */ teichmann@8202: private static Logger log = raimund@3614: Logger.getLogger(BedHeightsArtifact.class); raimund@3614: felix@7337: /** Artifact name. */ raimund@3614: private static final String NAME = "bedheights"; raimund@3614: raimund@3614: static { raimund@3614: // TODO: Move to configuration. raimund@3614: FacetActivity.Registry.getInstance() raimund@3614: .register(NAME, FacetActivity.INACTIVE); raimund@3614: } raimund@3614: raimund@3614: public static final String STATIC_STATE_NAME = raimund@3614: "state.additional_bedheights.static"; raimund@3614: felix@7338: /** Data Item name to know whether we are Heighmarks and receive raimund@3614: * some data slightly different. */ raimund@3614: public static final String DATA_HEIGHT_TYPE = raimund@3614: "height_marks"; raimund@3614: raimund@3614: /** raimund@3614: * Trivial Constructor. raimund@3614: */ raimund@3614: public BedHeightsArtifact() { teichmann@8202: log.debug("BedHeightsArtifact.BedHeightsArtifact"); raimund@3614: } raimund@3614: raimund@3614: @Override raimund@3614: public String getName() { raimund@3614: return NAME; raimund@3614: } raimund@3614: raimund@3614: /** raimund@3614: * Gets called from factory, to set things up. raimund@3614: */ raimund@3614: @Override raimund@3614: public void setup( raimund@3614: String identifier, raimund@3614: ArtifactFactory factory, raimund@3614: Object context, raimund@3614: CallMeta callMeta, rrenkert@7842: Document data, rrenkert@7842: List loadFacets) raimund@3614: { teichmann@8202: log.debug("BedHeightsArtifact.setup"); raimund@3614: teichmann@8202: if (log.isDebugEnabled()) { teichmann@8202: log.debug(XMLUtils.toString(data)); raimund@3614: } raimund@3614: raimund@3614: String code = getDatacageIDValue(data); raimund@3614: raimund@3614: if (code != null) { raimund@3614: String [] parts = code.split("-"); raimund@3614: tom@8169: if (parts.length >= 3) { felix@7477: // The setting is a bit complicated: felix@7477: // This artifact can spawn epoch type bedheight facets, felix@7477: // 'singlevalue'/singleyear bedheight facets or felix@7477: // sounding-width facets. The type is indicated by felix@7477: // the ids-param which comes from datacage. felix@7477: bjoern@4535: String name = parts[0]; bjoern@4535: String type = parts[1]; felix@7477: String facetType = BEDHEIGHT; felix@7477: if (type.equals("soundings")) { felix@7477: type = "singlevalues"; felix@7477: facetType = BEDHEIGHT_SOUNDING_WIDTH; felix@7477: } rrenkert@7984: addStringData("height_id", parts[2]); rrenkert@7984: addStringData("type", type); bjoern@4535: String btype = type; bjoern@4535: int hId = Integer.parseInt(parts[2]); rrenkert@7984: bjoern@4535: if (type.equals("singlevalues")) { bjoern@4535: btype = "single"; bjoern@4535: } raimund@3614: bjoern@4535: String bedHName = BedHeightFactory.getHeightName(btype, hId); raimund@3614: rrenkert@7984: Facet facet = null; felix@7477: if (facetType.equals(BEDHEIGHT_SOUNDING_WIDTH)) { felix@7477: bedHName = Resources.getMsg( felix@7477: callMeta, felix@7477: "facet.bedheight.sounding_width", felix@7477: new Object[] { bedHName }); rrenkert@7984: facet = new BedHeightSoundingWidthFacet(facetType, bedHName); rrenkert@7984: } rrenkert@7984: else { rrenkert@7984: facet = new BedHeightFacet( rrenkert@7984: facetType, bedHName, type); felix@7477: } felix@7477: bjoern@4535: bjoern@4535: ArrayList facets = new ArrayList(1); bjoern@4535: facets.add(facet); bjoern@4535: bjoern@4535: addFacets(STATIC_STATE_NAME, facets); raimund@3614: } tom@8169: else { teichmann@8202: log.error("Invalid datacage ID '" + code + "'"); tom@8169: } raimund@3614: } rrenkert@7842: super.setup(identifier, factory, context, callMeta, data, loadFacets); raimund@3614: } raimund@3614: bjoern@4535: @Override bjoern@4535: protected void initStaticState() { bjoern@4535: teichmann@8202: log.debug("initStaticState " + getName() + " " + identifier()); bjoern@4535: bjoern@4535: StaticState state = new StaticState(STATIC_STATE_NAME); bjoern@4535: DefaultOutput output = new DefaultOutput( bjoern@4535: "general", bjoern@4535: "general", bjoern@4535: "image/png", bjoern@4535: "chart"); bjoern@4535: bjoern@4535: List facets = getFacets(STATIC_STATE_NAME); bjoern@4535: output.addFacets(facets); bjoern@4535: state.addOutput(output); bjoern@4535: bjoern@4535: setStaticState(state); bjoern@4535: } bjoern@4535: bjoern@4535: @Override bjoern@4535: protected void initialize(Artifact artifact, Object context, CallMeta meta) { bjoern@4535: // do not clone facets, etc. from master artifact bjoern@4535: teichmann@8202: log.debug("initialize"); felix@7263: importData((D4EArtifact)artifact, "river"); teichmann@5867: importData((D4EArtifact)artifact, "ld_from"); teichmann@5867: importData((D4EArtifact)artifact, "ld_to"); bjoern@4535: teichmann@8202: log.debug("ld_from " + getDataAsString("ld_from")); teichmann@8202: log.debug("ld_to " + getDataAsString("ld_to")); bjoern@4535: } raimund@3614: } felix@4459: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :