teichmann@5863: /* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde teichmann@5863: * Software engineering by Intevation GmbH teichmann@5863: * teichmann@5994: * This file is Free Software under the GNU AGPL (>=v3) teichmann@5863: * and comes with ABSOLUTELY NO WARRANTY! Check out the teichmann@5994: * documentation coming with Dive4Elements River for details. teichmann@5863: */ teichmann@5863: teichmann@5831: package org.dive4elements.river.artifacts.states; ingo@921: ingo@921: import org.apache.log4j.Logger; gernotbelger@9164: import org.dive4elements.artifactdatabase.ProtocolUtils; gernotbelger@9164: import org.dive4elements.artifactdatabase.data.StateData; teichmann@5831: import org.dive4elements.artifacts.Artifact; teichmann@5831: import org.dive4elements.artifacts.CallContext; teichmann@5831: import org.dive4elements.artifacts.common.utils.XMLUtils; teichmann@5867: import org.dive4elements.river.artifacts.D4EArtifact; gernotbelger@9164: import org.dive4elements.river.artifacts.access.RiverAccess; teichmann@5831: import org.dive4elements.river.artifacts.model.FacetTypes; teichmann@5831: import org.dive4elements.river.artifacts.resources.Resources; gernotbelger@9164: import org.w3c.dom.Element; felix@2235: ingo@921: /** ingo@921: * @author Ingo Weinzierl ingo@921: */ gernotbelger@9164: public class ComputationRangeState extends RangeState implements FacetTypes { gernotbelger@9164: private static Logger log = Logger.getLogger(ComputationRangeState.class); ingo@921: felix@1685: /** The default step width. */ ingo@921: public static final int DEFAULT_STEP = 100; ingo@921: ingo@921: public ComputationRangeState() { ingo@921: } ingo@921: ingo@921: @Override gernotbelger@9164: protected Element createData(final XMLUtils.ElementCreator cr, final Artifact artifact, final StateData data, final CallContext context) { gernotbelger@9164: final Element select = ProtocolUtils.createArtNode(cr, "select", null, null); ingo@921: ingo@921: cr.addAttr(select, "name", data.getName(), true); ingo@921: gernotbelger@9164: final Element label = ProtocolUtils.createArtNode(cr, "label", null, null); ingo@921: gernotbelger@9175: final String msg = getTitle(context); gernotbelger@9175: gernotbelger@9175: label.setTextContent(msg); gernotbelger@9164: // VORHER: data.getName(), data.getName())) (entsprach "ld_from", "ld_to" - unterschied zu jetzt: description wird gernotbelger@9164: // anders gesetzt ("Wahl der Berechnungsstrecke") gernotbelger@9164: // label bleibt "ld_from", "ld_to"; unklar, wo das gesetzt wird. unklar, warum das Element "label" die Description gernotbelger@9164: // beeinflusst (und scheinbar nicht das Label) ingo@921: gernotbelger@9164: final Element description = ProtocolUtils.createArtNode(cr, "description", null, null); gernotbelger@9164: description.setTextContent("TEST"); gernotbelger@9164: select.appendChild(description); ingo@921: select.appendChild(label); ingo@921: ingo@921: return select; ingo@921: } ingo@921: gernotbelger@9175: // REMARK: allows to overwrite the titel which is shown on the client side. gernotbelger@9175: // TODO: instead of a fixed string, we should translate the 'id', but in that case we need to change all old workflows gernotbelger@9175: // (reason is, that we have different texts for the title and the 'old' title, which in turn is the translation of gernotbelger@9175: // 'description'). gernotbelger@9175: gernotbelger@9175: protected String getTitle(final CallContext context) { gernotbelger@9175: // REMARK: that is how it should be: return Resources.getMsg(context.getMeta(), getID()); gernotbelger@9175: return Resources.getMsg(context.getMeta(), "state.title.distance_state"); gernotbelger@9175: } gernotbelger@9175: ingo@921: @Override gernotbelger@9164: protected Element[] createItems(final XMLUtils.ElementCreator cr, final Artifact artifact, final String name, final CallContext context) { gernotbelger@9164: final double[] minmax = getMinMax(artifact); ingo@921: ingo@921: double minVal = Double.MIN_VALUE; ingo@921: double maxVal = Double.MAX_VALUE; ingo@921: ingo@921: if (minmax != null) { ingo@921: minVal = minmax[0]; ingo@921: maxVal = minmax[1]; gernotbelger@9164: } else { teichmann@8202: log.warn("Could not read min/max distance values!"); ingo@921: } ingo@921: ingo@921: if (name.equals("ld_from")) { gernotbelger@9164: final Element min = createItem(cr, new String[] { "min", new Double(minVal).toString() }); ingo@921: ingo@921: return new Element[] { min }; gernotbelger@9164: } else if (name.equals("ld_to")) { gernotbelger@9164: final Element max = createItem(cr, new String[] { "max", new Double(maxVal).toString() }); ingo@921: ingo@921: return new Element[] { max }; gernotbelger@9264: } else if (name.contentEquals("ld_step")) { gernotbelger@9164: final Element step = createItem(cr, new String[] { "step", String.valueOf(getDefaultStep()) }); ingo@921: return new Element[] { step }; gernotbelger@9264: } else { gernotbelger@9264: return new Element[] {}; ingo@921: } ingo@921: } ingo@921: ingo@921: @Override gernotbelger@9164: protected double[] getMinMax(final Artifact artifact) { gernotbelger@9164: return new RiverAccess((D4EArtifact) artifact).getRiver().determineMinMaxDistance(); ingo@921: } ingo@921: ingo@921: protected double getDefaultStep() { ingo@921: return DEFAULT_STEP; ingo@921: } ingo@921: } ingo@921: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :