gernotbelger@8854: /* Copyright (C) 2017 by Bundesanstalt für Gewässerkunde gernotbelger@8946: * Software engineering by gernotbelger@8946: * Björnsen Beratende Ingenieure GmbH gernotbelger@8854: * Dr. Schumacher Ingenieurbüro für Wasser und Umwelt gernotbelger@8854: * gernotbelger@8854: * This file is Free Software under the GNU AGPL (>=v3) gernotbelger@8854: * and comes with ABSOLUTELY NO WARRANTY! Check out the gernotbelger@8854: * documentation coming with Dive4Elements River for details. gernotbelger@8854: */ gernotbelger@8854: package org.dive4elements.river.artifacts.sinfo; gernotbelger@8854: gernotbelger@8854: import org.apache.commons.lang.StringUtils; gernotbelger@8956: import org.dive4elements.artifactdatabase.state.Facet; gernotbelger@8956: import org.dive4elements.artifactdatabase.state.FacetActivity; gernotbelger@8956: import org.dive4elements.artifacts.Artifact; gernotbelger@8854: import org.dive4elements.river.artifacts.D4EArtifact; gernotbelger@8956: import org.dive4elements.river.artifacts.sinfo.common.D50Processor; gernotbelger@8980: import org.dive4elements.river.artifacts.sinfo.common.FlowDepthDevelopmentPerYearProcessor; gernotbelger@8956: import org.dive4elements.river.artifacts.sinfo.common.FlowDepthDevelopmentProcessor; gernotbelger@8956: import org.dive4elements.river.artifacts.sinfo.common.FlowDepthProcessor; gernotbelger@8956: import org.dive4elements.river.artifacts.sinfo.common.TauProcessor; gernotbelger@8956: import org.dive4elements.river.artifacts.sinfo.common.VelocityProcessor; gernotbelger@8854: gernotbelger@8854: /** gernotbelger@8869: * The default SINFO artifact. gernotbelger@8854: * gernotbelger@8854: * @author Gernot Belger gernotbelger@8854: */ gernotbelger@8946: public class SINFOArtifact extends D4EArtifact { gernotbelger@8946: gernotbelger@8946: private static final long serialVersionUID = 1L; gernotbelger@8946: gernotbelger@8854: /** Error message that is thrown if no mode has been chosen. */ gernotbelger@8946: private static final String ERROR_NO_CALCULATION_MODE = "error_feed_no_calculation_mode"; gernotbelger@8854: gernotbelger@8946: /** gernotbelger@8946: * Error message that is thrown if an invalid calculation mode has been gernotbelger@8946: * chosen. gernotbelger@8946: */ gernotbelger@8946: private static final String ERROR_INVALID_CALCULATION_MODE = "error_feed_invalid_calculation_mode"; gernotbelger@8854: gernotbelger@8854: /** The name of the artifact. */ gernotbelger@8854: private static final String ARTIFACT_NAME = "sinfo"; gernotbelger@8854: gernotbelger@8869: private static final String FIELD_RIVER = "river"; gernotbelger@8854: gernotbelger@8854: private static final String FIELD_MODE = "calculation_mode"; gernotbelger@8946: gernotbelger@8956: static { gernotbelger@8956: // Active/deactivate facets. gernotbelger@8956: // BEWARE: we can only define one activity for "sinfo", so we use the artifact as place for this gernotbelger@8956: FacetActivity.Registry.getInstance().register("sinfo", new FacetActivity() { gernotbelger@8956: @Override gernotbelger@8956: public Boolean isInitialActive(final Artifact artifact, final Facet facet, final String output) { gernotbelger@8956: gernotbelger@8980: final String name = facet.getName(); gernotbelger@8980: gernotbelger@8956: if ("sinfo_tkk".equals(output)) { gernotbelger@8956: if (FlowDepthProcessor.FACET_FLOW_DEPTH_FILTERED.equals(name)) gernotbelger@8956: return Boolean.FALSE; gernotbelger@8956: if (VelocityProcessor.FACET_TKH_VELOCITY_FILTERED.equals(name)) gernotbelger@8956: return Boolean.FALSE; gernotbelger@8956: if (TauProcessor.FACET_TKH_TAU_FILTERED.equals(name)) gernotbelger@8956: return Boolean.FALSE; gernotbelger@8956: if (D50Processor.FACET_TKH_D50_FILTERED.equals(name)) gernotbelger@8956: return Boolean.FALSE; gernotbelger@8956: } gernotbelger@8956: gernotbelger@8956: if ("sinfo_flow_depth_development".equals(output)) { gernotbelger@8956: if (FlowDepthProcessor.FACET_FLOW_DEPTH_CURRENT_FILTERED.equals(name)) gernotbelger@8956: return Boolean.FALSE; gernotbelger@8956: if (FlowDepthProcessor.FACET_FLOW_DEPTH_HISTORICAL_FILTERED.equals(name)) gernotbelger@8956: return Boolean.FALSE; gernotbelger@8956: if (FlowDepthDevelopmentProcessor.FACET_WATERLEVEL_DIFFERENCE_FILTERED.equals(name)) gernotbelger@8956: return Boolean.FALSE; gernotbelger@8956: if (FlowDepthDevelopmentProcessor.FACET_BEDHEIGHT_DIFFERENCE_FILTERED.equals(name)) gernotbelger@8956: return Boolean.FALSE; gernotbelger@8956: } gernotbelger@8956: gernotbelger@8980: if (FlowDepthProcessor.FACET_FLOW_DEPTH_RAW.equals(name)) gernotbelger@8980: return Boolean.FALSE; gernotbelger@8980: if (FlowDepthProcessor.FACET_FLOW_DEPTH_TKH_RAW.equals(name)) gernotbelger@8980: return Boolean.FALSE; gernotbelger@8980: if (FlowDepthProcessor.FACET_FLOW_DEPTH_CURRENT_RAW.equals(name)) gernotbelger@8980: return Boolean.FALSE; gernotbelger@8980: if (FlowDepthProcessor.FACET_FLOW_DEPTH_HISTORICAL_RAW.equals(name)) gernotbelger@8980: return Boolean.FALSE; gernotbelger@8980: if (FlowDepthProcessor.FACET_FLOW_DEPTH_MIN_RAW.equals(name)) gernotbelger@8980: return Boolean.FALSE; gernotbelger@8980: if (FlowDepthProcessor.FACET_FLOW_DEPTH_MAX_RAW.equals(name)) gernotbelger@8980: return Boolean.FALSE; gernotbelger@8980: gernotbelger@8980: if (FlowDepthDevelopmentProcessor.FACET_FLOW_DEPTH_DEVELOPMENT_RAW.equals(name)) gernotbelger@8980: return Boolean.FALSE; gernotbelger@8980: if (FlowDepthDevelopmentPerYearProcessor.FACET_FLOW_DEPTH_DEVELOPMENT_PER_YEAR_RAW.equals(name)) gernotbelger@8980: return Boolean.FALSE; gernotbelger@8980: mschaefer@9596: // if (FloodDurationCurveProcessor.FACET_FLOOD_DURATION_MAINVALUES_W.equals(name)) mschaefer@9596: // return Boolean.FALSE; mschaefer@9596: // if (FloodDurationCurveProcessor.FACET_FLOOD_DURATION_MAINVALUES_Q.equals(name)) mschaefer@9596: // return Boolean.FALSE; mschaefer@9307: gernotbelger@8956: return null; gernotbelger@8956: } gernotbelger@8956: }); gernotbelger@8956: } gernotbelger@8956: gernotbelger@8854: /** gernotbelger@8854: * Default constructor, because it's serializable. gernotbelger@8854: */ gernotbelger@8854: public SINFOArtifact() { gernotbelger@8854: } gernotbelger@8854: gernotbelger@8854: /** gernotbelger@8854: * Returns the name of the concrete artifact. gernotbelger@8854: * gernotbelger@8854: * @return the name of the concrete artifact. gernotbelger@8854: */ gernotbelger@8854: @Override gernotbelger@8854: public String getName() { gernotbelger@8854: return ARTIFACT_NAME; gernotbelger@8854: } gernotbelger@8946: gernotbelger@8854: public SinfoCalcMode getCalculationMode() { gernotbelger@8854: gernotbelger@8946: final String calc = getDataAsString(FIELD_MODE); gernotbelger@8854: if (calc == null) { gernotbelger@8946: throw new IllegalArgumentException(ERROR_NO_CALCULATION_MODE); gernotbelger@8854: } gernotbelger@8854: gernotbelger@8854: try { gernotbelger@8946: return SinfoCalcMode.valueOf(StringUtils.trimToEmpty(calc).toLowerCase()); gernotbelger@8946: } gernotbelger@8946: catch (final Exception e) { gernotbelger@8946: throw new IllegalArgumentException(ERROR_INVALID_CALCULATION_MODE, e); gernotbelger@8946: } gernotbelger@8946: } gernotbelger@8946: gernotbelger@8854: public String getRiver() { gernotbelger@8946: return getDataAsString(FIELD_RIVER); gernotbelger@8946: } gernotbelger@8854: }