Mercurial > dive4elements > river
diff artifacts/src/main/java/org/dive4elements/river/artifacts/BedHeightsArtifact.java @ 8961:8a1c6e2ad48b
Implemented datacage for min/max bedheights.
Allow to add min/max bed heights as themes to charts.
author | gernotbelger |
---|---|
date | Wed, 28 Mar 2018 14:35:01 +0200 |
parents | 5e38e2924c07 |
children | 45f1ad66560e |
line wrap: on
line diff
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/BedHeightsArtifact.java Wed Mar 28 14:34:55 2018 +0200 +++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/BedHeightsArtifact.java Wed Mar 28 14:35:01 2018 +0200 @@ -12,47 +12,42 @@ import java.util.List; import org.apache.log4j.Logger; -import org.w3c.dom.Document; - 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.Artifact; 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.BedHeightFactory; +import org.dive4elements.river.artifacts.model.minfo.BedHeightMinMaxFacet; +import org.dive4elements.river.artifacts.model.minfo.BedHeightMinMaxFacet.BedHeightValueType; 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.artifacts.resources.Resources; +import org.dive4elements.river.exports.process.BedHeightProcessor; +import org.w3c.dom.Document; -public class BedHeightsArtifact -extends AbstractStaticStateArtifact -implements FacetTypes -{ +public class BedHeightsArtifact extends AbstractStaticStateArtifact implements FacetTypes { /** The log for this class. */ - private static Logger log = - Logger.getLogger(BedHeightsArtifact.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); + FacetActivity.Registry.getInstance().register(NAME, FacetActivity.INACTIVE); } - public static final String STATIC_STATE_NAME = - "state.additional_bedheights.static"; + 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"; + /** + * 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. @@ -70,74 +65,61 @@ * Gets called from factory, to set things up. */ @Override - public void setup( - String identifier, - ArtifactFactory factory, - Object context, - CallMeta callMeta, - Document data, - List<Class> loadFacets) - { + 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)); } - String code = getDatacageIDValue(data); - - if (code != null) { - String [] parts = code.split("-"); - - if (parts.length >= 3) { - // The setting is a bit complicated: - // This artifact can spawn epoch type bedheight facets, - // 'singlevalue'/singleyear bedheight facets or - // sounding-width facets. The type is indicated by - // the ids-param which comes from datacage. - - String name = parts[0]; - String type = parts[1]; - String facetType = BEDHEIGHT; - if (type.equals("soundings")) { - type = "singlevalues"; - facetType = BEDHEIGHT_SOUNDING_WIDTH; - } - addStringData("height_id", parts[2]); - addStringData("type", type); - String btype = type; - int hId = Integer.parseInt(parts[2]); + final String code = getDatacageIDValue(data); - if (type.equals("singlevalues")) { - btype = "single"; - } - - String bedHName = BedHeightFactory.getHeightName(btype, hId); + createFacets(callMeta, code); - Facet facet = null; - if (facetType.equals(BEDHEIGHT_SOUNDING_WIDTH)) { - bedHName = Resources.getMsg( - callMeta, - "facet.bedheight.sounding_width", - new Object[] { bedHName }); - facet = new BedHeightSoundingWidthFacet( - facetType, bedHName); - } - else { - facet = new BedHeightFacet(facetType, bedHName); - } + super.setup(identifier, factory, context, callMeta, data, loadFacets); + } - - ArrayList<Facet> facets = new ArrayList<Facet>(1); - facets.add(facet); + private void createFacets(final CallMeta callMeta, final String code) { + if (code == null) + return; - addFacets(STATIC_STATE_NAME, facets); - } - else { - log.error("Invalid datacage ID '" + code + "'"); - } + final String[] parts = code.split("-", 5); + if (parts.length < 5) { + log.error("Invalid datacage ID '" + code + "'"); + return; } - super.setup(identifier, factory, context, callMeta, data, loadFacets); + + // 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 @@ -145,14 +127,10 @@ log.debug("initStaticState " + getName() + " " + identifier()); - StaticState state = new StaticState(STATIC_STATE_NAME); - DefaultOutput output = new DefaultOutput( - "general", - "general", - "image/png", - "chart"); + final StaticState state = new StaticState(STATIC_STATE_NAME); + final DefaultOutput output = new DefaultOutput("general", "general", "image/png", "chart"); - List<Facet> facets = getFacets(STATIC_STATE_NAME); + final List<Facet> facets = getFacets(STATIC_STATE_NAME); output.addFacets(facets); state.addOutput(output); @@ -160,20 +138,15 @@ } @Override - protected void initialize( - Artifact artifact, - Object context, - CallMeta meta - ) { + 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"); + 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")); } -} -// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 : +} \ No newline at end of file