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> 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: