Mercurial > dive4elements > river
view artifacts/src/main/java/org/dive4elements/river/artifacts/BedHeightsArtifact.java @ 9425:3f49835a00c3
Extended CrossSectionFacet so it may fetch different data from within the artifact result.
Also allows to have acces to the potentially already computed artifact result via its normal computation cache.
author | gernotbelger |
---|---|
date | Fri, 17 Aug 2018 15:31:02 +0200 |
parents | 45f1ad66560e |
children |
line wrap: on
line source
/* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde * Software engineering by Intevation GmbH * * This file is Free Software under the GNU AGPL (>=v3) * and comes with ABSOLUTELY NO WARRANTY! Check out the * documentation coming with Dive4Elements River for details. */ package org.dive4elements.river.artifacts; import java.util.ArrayList; import java.util.List; import org.apache.log4j.Logger; import org.dive4elements.artifactdatabase.state.DefaultOutput; import org.dive4elements.artifactdatabase.state.Facet; import org.dive4elements.artifactdatabase.state.FacetActivity; import org.dive4elements.artifacts.Artifact; import org.dive4elements.artifacts.ArtifactFactory; import org.dive4elements.artifacts.CallMeta; import org.dive4elements.artifacts.common.utils.XMLUtils; import org.dive4elements.river.artifacts.model.FacetTypes; import org.dive4elements.river.artifacts.model.minfo.BedHeightFacet; import org.dive4elements.river.artifacts.model.minfo.BedHeightMinMaxFacet; import org.dive4elements.river.artifacts.model.minfo.BedHeightSoundingWidthFacet; import org.dive4elements.river.artifacts.resources.Resources; import org.dive4elements.river.artifacts.states.StaticState; import org.dive4elements.river.exports.process.BedHeightProcessor; import org.dive4elements.river.model.BedHeightValueType; import org.w3c.dom.Document; public class BedHeightsArtifact extends AbstractStaticStateArtifact implements FacetTypes { /** The log for this class. */ private static Logger log = Logger.getLogger(BedHeightsArtifact.class); /** Artifact name. */ private static final String NAME = "bedheights"; static { // TODO: Move to configuration. FacetActivity.Registry.getInstance().register(NAME, FacetActivity.INACTIVE); } public static final String STATIC_STATE_NAME = "state.additional_bedheights.static"; /** * Data Item name to know whether we are Heighmarks and receive * some data slightly different. */ public static final String DATA_HEIGHT_TYPE = "height_marks"; /** * Trivial Constructor. */ public BedHeightsArtifact() { log.debug("BedHeightsArtifact.BedHeightsArtifact"); } @Override public String getName() { return NAME; } /** * Gets called from factory, to set things up. */ @Override public void setup(final String identifier, final ArtifactFactory factory, final Object context, final CallMeta callMeta, final Document data, final List<Class> loadFacets) { log.debug("BedHeightsArtifact.setup"); if (log.isDebugEnabled()) { log.debug(XMLUtils.toString(data)); } final String code = getDatacageIDValue(data); createFacets(callMeta, code); super.setup(identifier, factory, context, callMeta, data, loadFacets); } private void createFacets(final CallMeta callMeta, final String code) { if (code == null) return; final String[] parts = code.split("-", 5); if (parts.length < 5) { log.error("Invalid datacage ID '" + code + "'"); return; } // String name = parts[0]; // type may only be 'single' or 'soundings' final String type = parts[1]; final String heightId = parts[2]; // final int hId = Integer.parseInt(heightId); // final String year = parts[3]; final String bedHName = parts[4]; addStringData("height_id", heightId); if (type.equals("soundings")) addStringData("type", "singlevalues"); else addStringData("type", type); final ArrayList<Facet> facets = new ArrayList<>(1); if ("soundings".equals(type)) { final String description = Resources.getMsg(callMeta, "facet.bedheight.sounding_width", new Object[] { bedHName }); facets.add(new BedHeightSoundingWidthFacet(BEDHEIGHT_SOUNDING_WIDTH, description)); } else if ("single".equals(type)) facets.add(new BedHeightFacet(BEDHEIGHT, bedHName)); else if ("singleMin".equals(type)) facets.add(new BedHeightMinMaxFacet(BedHeightProcessor.FACET_BED_HEIGHTS_MIN, bedHName, BedHeightValueType.min)); else if ("singleMax".equals(type)) facets.add(new BedHeightMinMaxFacet(BedHeightProcessor.FACET_BED_HEIGHTS_MAX, bedHName, BedHeightValueType.max)); addFacets(STATIC_STATE_NAME, facets); } @Override protected void initStaticState() { log.debug("initStaticState " + getName() + " " + identifier()); final StaticState state = new StaticState(STATIC_STATE_NAME); final DefaultOutput output = new DefaultOutput("general", "general", "image/png", "chart"); final List<Facet> facets = getFacets(STATIC_STATE_NAME); output.addFacets(facets); state.addOutput(output); setStaticState(state); } @Override protected void initialize(final Artifact artifact, final Object context, final CallMeta meta) { // do not clone facets, etc. from master artifact log.debug("initialize"); importData((D4EArtifact) artifact, "river"); importData((D4EArtifact) artifact, "ld_from"); importData((D4EArtifact) artifact, "ld_to"); log.debug("ld_from " + getDataAsString("ld_from")); log.debug("ld_to " + getDataAsString("ld_to")); } }