Mercurial > dive4elements > river
view artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/UINFOArtifact.java @ 9543:3264c2df4f18
WMS-Config
author | gernotbelger |
---|---|
date | Wed, 17 Oct 2018 17:10:52 +0200 |
parents | ee6508687e3f |
children |
line wrap: on
line source
/* Copyright (C) 2017 by Bundesanstalt für Gewässerkunde * Software engineering by * Björnsen Beratende Ingenieure GmbH * Dr. Schumacher Ingenieurbüro für Wasser und Umwelt * * 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.uinfo; import java.io.Serializable; import org.apache.commons.lang.StringUtils; import org.dive4elements.artifactdatabase.state.Facet; import org.dive4elements.artifactdatabase.state.FacetActivity; import org.dive4elements.artifacts.Artifact; import org.dive4elements.artifacts.CallContext; import org.dive4elements.river.artifacts.D4EArtifact; import org.dive4elements.river.artifacts.WaterLineArtifact; import org.dive4elements.river.artifacts.model.CalculationResult; import org.dive4elements.river.artifacts.states.DefaultState.ComputeType; import org.dive4elements.river.artifacts.uinfo.salix.SalixLineCalculationResults; import org.dive4elements.river.artifacts.uinfo.salix.SalixLineProcessor; /** * The default UINFO artifact. * * @author Gernot Belger */ public class UINFOArtifact extends D4EArtifact implements WaterLineArtifact { private static final long serialVersionUID = 1L; /** Error message that is thrown if no mode has been chosen. */ private static final String ERROR_NO_CALCULATION_MODE = "error_feed_no_calculation_mode"; /** * Error message that is thrown if an invalid calculation mode has been chosen. */ private static final String ERROR_INVALID_CALCULATION_MODE = "error_feed_invalid_calculation_mode"; /** The name of the artifact. */ private static final String ARTIFACT_NAME = "uinfo"; private static final String FIELD_RIVER = "river"; private static final String FIELD_MODE = "calculation_mode"; public static final String FIELD_VEGZONES = "vegzones"; static { // Active/deactivate facets. // BEWARE: we can only define one activity for "uinfo", so we use the artifact // as place for this FacetActivity.Registry.getInstance().register(ARTIFACT_NAME, new FacetActivity() { @Override public Boolean isInitialActive(final Artifact artifact, final Facet facet, final String output) { final String name = facet.getName(); if (SalixLineProcessor.FACET_SALIX_LINE_RAW.equals(name)) return Boolean.FALSE; if (SalixLineProcessor.FACET_SALIX_MNWMW_RAW.equals(name)) return Boolean.FALSE; if (SalixLineProcessor.FACET_SALIX_RANK.equals(name)) return Boolean.FALSE; if (SalixLineProcessor.FACET_SALIX_SCENARIO_FILTERED.equals(name)) return Boolean.FALSE; if (SalixLineProcessor.FACET_SALIX_SCENARIO_RAW.equals(name)) return Boolean.FALSE; return null; } }); } /** * Default constructor, because it's serializable. */ public UINFOArtifact() { } /** * Returns the name of the concrete artifact. * * @return the name of the concrete artifact. */ @Override public String getName() { return ARTIFACT_NAME; } public UinfoCalcMode getCalculationMode() { final String calc = getDataAsString(FIELD_MODE); if (calc == null) { throw new IllegalArgumentException(ERROR_NO_CALCULATION_MODE); } try { return UinfoCalcMode.valueOf(StringUtils.trimToEmpty(calc).toLowerCase()); } catch (final Exception e) { throw new IllegalArgumentException(ERROR_INVALID_CALCULATION_MODE, e); } } public String getRiver() { return getDataAsString(FIELD_RIVER); } @Override public double getWaterLevel(final ComputeType type, final String hash, final String stateId, final double currentKm, final Serializable waterLineIndex, final double nextKm, final double prevKm, final CallContext context) { final CalculationResult res = (CalculationResult) this.compute(context, hash, stateId, type, false); final Object data = res.getData(); if (data instanceof SalixLineCalculationResults) return ((SalixLineCalculationResults) data).getCrossSectionLine(currentKm, waterLineIndex, nextKm, prevKm); throw new IllegalStateException("Cross section stuff should only happen for salix line"); } }