ingo@725: package de.intevation.gnv.state;
ingo@725:
ingo@725: import de.intevation.artifacts.CallContext;
ingo@725:
ingo@725: import de.intevation.gnv.artifacts.ressource.RessourceFactory;
ingo@725:
ingo@725: import de.intevation.gnv.state.describedata.DefaultMinMaxDescribeData;
ingo@725: import de.intevation.gnv.state.describedata.DescribeData;
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.Collection;
ingo@725: import java.util.Iterator;
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:
ingo@725: /**
sascha@780: * @author Ingo Weinzierl
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:
sascha@778: 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: