gernotbelger@8996: /* Copyright (C) 2017 by Bundesanstalt für Gewässerkunde gernotbelger@8996: * Software engineering by gernotbelger@8996: * Björnsen Beratende Ingenieure GmbH gernotbelger@8996: * Dr. Schumacher Ingenieurbüro für Wasser und Umwelt gernotbelger@8996: * gernotbelger@8996: * This file is Free Software under the GNU AGPL (>=v3) gernotbelger@8996: * and comes with ABSOLUTELY NO WARRANTY! Check out the gernotbelger@8996: * documentation coming with Dive4Elements River for details. gernotbelger@8996: */ gernotbelger@8996: package org.dive4elements.river.artifacts.uinfo; gernotbelger@8996: gernotbelger@8996: import java.util.ArrayList; gernotbelger@8996: import java.util.Collection; gernotbelger@8996: gernotbelger@8996: import org.apache.log4j.Logger; gernotbelger@8996: import org.dive4elements.artifacts.Artifact; gernotbelger@8996: import org.dive4elements.artifacts.CallContext; gernotbelger@8996: import org.dive4elements.artifacts.CallMeta; gernotbelger@8996: import org.dive4elements.artifacts.common.utils.XMLUtils; gernotbelger@8996: import org.dive4elements.river.artifacts.resources.Resources; gernotbelger@8996: import org.dive4elements.river.artifacts.states.DefaultState; gernotbelger@9178: import org.dive4elements.river.artifacts.uinfo.inundationduration.UedauernPropertiesHelper; gernotbelger@8996: import org.w3c.dom.Element; gernotbelger@8996: gernotbelger@8996: /** gernotbelger@8996: * @author Gernot Belger gernotbelger@8996: */ gernotbelger@8996: public class CalculationSelectUinfo extends DefaultState { gernotbelger@8996: gernotbelger@8996: private static final long serialVersionUID = 1L; gernotbelger@8996: gernotbelger@8996: /** The log that is used in this class. */ gernotbelger@8996: private static Logger log = Logger.getLogger(CalculationSelectUinfo.class); gernotbelger@8996: gernotbelger@8996: @Override gernotbelger@8996: protected Element[] createItems(final XMLUtils.ElementCreator cr, final Artifact artifact, final String name, final CallContext context) { gernotbelger@8996: final CallMeta meta = context.getMeta(); gernotbelger@8996: gernotbelger@8996: final Collection calcs = new ArrayList<>(UinfoCalcMode.values().length); gernotbelger@8996: gernotbelger@8996: for (final UinfoCalcMode calcMode : UinfoCalcMode.values()) { gernotbelger@8996: final String calc = calcMode.name(); gernotbelger@8996: gernotbelger@8996: final String label = Resources.getMsg(meta, calc, calc); gernotbelger@8996: gernotbelger@8996: final Element element = createItem(cr, new String[] { label, calc }); gernotbelger@8996: calcs.add(element); gernotbelger@8996: } gernotbelger@8996: gernotbelger@8996: return calcs.toArray(new Element[calcs.size()]); gernotbelger@8996: } gernotbelger@8996: gernotbelger@8996: @Override gernotbelger@8996: public boolean validate(final Artifact artifact) throws IllegalArgumentException { gernotbelger@8996: log.debug("CalculationSelect.validate"); gernotbelger@8996: gernotbelger@9036: final UINFOArtifact uinfo = (UINFOArtifact) artifact; gernotbelger@9178: final String calcDebug = uinfo.getCalculationMode().toString(); gernotbelger@9178: if (calcDebug.equals("uinfo_inundation_duration")) { gernotbelger@9178: gernotbelger@9178: final String river = uinfo.getRiver(); gernotbelger@9178: if (!UedauernPropertiesHelper.fileExistsForRiver(river)) { gernotbelger@9178: throw new IllegalArgumentException("error_river_inundationdur_file_not_found"); gernotbelger@9178: } gernotbelger@9178: } gernotbelger@9178: gernotbelger@8996: /* throws an exception if calculation mode is invalid */ gernotbelger@9178: gernotbelger@8996: return true; gernotbelger@8996: } gernotbelger@8996: }