ingo@725: package de.intevation.gnv.state; ingo@725: ingo@725: import de.intevation.artifactdatabase.XMLUtils; ingo@725: ingo@725: import de.intevation.artifacts.CallContext; ingo@725: import de.intevation.artifacts.CallMeta; ingo@725: ingo@725: import de.intevation.gnv.artifacts.ressource.RessourceFactory; ingo@725: ingo@725: import de.intevation.gnv.geobackend.base.Result; ingo@725: ingo@725: import de.intevation.gnv.geobackend.util.DateUtils; ingo@725: ingo@725: import de.intevation.gnv.state.describedata.DefaultMinMaxDescribeData; ingo@725: import de.intevation.gnv.state.describedata.DescribeData; ingo@725: import de.intevation.gnv.state.describedata.MinMaxDescribeData; ingo@725: ingo@725: import de.intevation.gnv.state.exception.StateException; ingo@725: ingo@725: import de.intevation.gnv.utils.InputValidator; ingo@725: ingo@725: import java.util.ArrayList; ingo@725: import java.util.Collection; ingo@725: import java.util.Date; ingo@725: import java.util.GregorianCalendar; ingo@725: import java.util.Iterator; ingo@725: import java.util.List; ingo@725: import java.util.Locale; ingo@725: ingo@725: import org.apache.log4j.Logger; ingo@725: ingo@725: import org.w3c.dom.Document; ingo@725: import org.w3c.dom.Element; ingo@725: import org.w3c.dom.Node; ingo@725: ingo@725: /** ingo@725: * @author Ingo Weinzierl (ingo.weinzierl@intevation.de) ingo@725: */ ingo@725: public class MinMaxDateState extends MinMaxState { ingo@725: ingo@725: ingo@725: public static final String EXCEPTION_DATE_REQUIRED = ingo@725: "input.is.not.valid.date.required"; ingo@725: ingo@725: public static final String EXCEPTION_START_AFTER_END = ingo@725: "start.date.after.end.date"; ingo@725: ingo@725: private static Logger logger = Logger.getLogger(MinMaxDateState.class); ingo@725: ingo@725: ingo@725: public MinMaxDateState() { ingo@725: super(); ingo@725: } ingo@725: ingo@725: ingo@725: /** ingo@725: * @see de.intevation.gnv.state.StateBase#feed(java.util.Collection, ingo@725: * java.lang.String) ingo@725: */ ingo@725: @Override ingo@725: public Document feed( ingo@725: CallContext context, ingo@725: Collection inputData, ingo@725: String uuid) ingo@725: throws StateException { ingo@725: RessourceFactory resFactory = RessourceFactory.getInstance(); ingo@725: Locale[] serverLocales = resFactory.getLocales(); ingo@725: Locale locale = context.getMeta().getPreferredLocale( ingo@725: serverLocales); ingo@725: ingo@725: if (inputData == null) { ingo@725: String msg = "No input data given."; ingo@725: logger.warn(msg); ingo@725: return feedFailure(msg); ingo@725: } ingo@725: ingo@725: InputValidator iv = new InputValidator(); ingo@725: Iterator iter = inputData.iterator(); ingo@725: ingo@725: Object min = null; ingo@725: Object max = null; ingo@725: ingo@725: while (iter.hasNext()) { ingo@725: InputData tmp = (InputData) iter.next(); ingo@725: InputValue meta = inputValues.get(tmp.getName()); ingo@725: String type = meta.getType(); ingo@725: String value = tmp.getValue(); ingo@725: String name = tmp.getName(); ingo@725: ingo@725: if (meta == null) { ingo@725: String msg = "Input data not expected here. Data will be ignored."; ingo@725: logger.warn(msg); ingo@725: return feedFailure(msg); ingo@725: } ingo@725: ingo@725: boolean valid = iv.isInputValid(value, type); ingo@725: if (!valid) { ingo@725: String msg = resFactory.getRessource( ingo@725: locale, EXCEPTION_DATE_REQUIRED, EXCEPTION_DATE_REQUIRED); ingo@725: logger.error(msg); ingo@725: return feedFailure(msg); ingo@725: } ingo@725: ingo@725: if (name.equals(MINVALUEFIELDNAME)) { ingo@725: min = value; ingo@725: } ingo@725: ingo@725: if (name.equals(MAXVALUEFIELDNAME)) { ingo@725: max = value; ingo@725: } ingo@725: ingo@725: if (min != null && max != null) { ingo@725: if (!iv.isInputValid((String) min, (String) max, type)) { ingo@725: String msg = resFactory.getRessource( ingo@725: locale, ingo@725: EXCEPTION_START_AFTER_END, ingo@725: EXCEPTION_START_AFTER_END); ingo@725: logger.error(msg); ingo@725: return feedFailure(msg); ingo@725: } ingo@725: } ingo@725: } ingo@725: ingo@725: DescribeData values = new DefaultMinMaxDescribeData( ingo@725: dataName, min, max, getID()); ingo@725: ingo@725: this.inputData.put(dataName, new DefaultInputData(dataName, values)); ingo@725: ingo@725: return feedSuccess(); ingo@725: } ingo@725: } ingo@725: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8: