ingo@1115: /* ingo@1115: * Copyright (c) 2010 by Intevation GmbH ingo@1115: * ingo@1115: * This program is free software under the LGPL (>=v2.1) ingo@1115: * Read the file LGPL.txt coming with the software for details ingo@1115: * or visit http://www.gnu.org/licenses/ if it does not exist. ingo@1115: */ ingo@1115: tim@335: package de.intevation.gnv.state; tim@335: ingo@860: import de.intevation.artifacts.CallContext; ingo@860: ingo@860: import de.intevation.gnv.artifacts.ressource.RessourceFactory; sascha@779: import de.intevation.gnv.geobackend.base.Result; sascha@779: import de.intevation.gnv.state.describedata.DefaultSingleValueDescribeData; ingo@860: import de.intevation.gnv.state.exception.StateException; ingo@860: import de.intevation.gnv.utils.InputValidator; sascha@779: tim@335: import java.util.ArrayList; tim@335: import java.util.Collection; ingo@860: import java.util.Iterator; ingo@470: import java.util.List; ingo@860: import java.util.Locale; tim@335: tim@335: import org.apache.log4j.Logger; tim@335: ingo@860: import org.w3c.dom.Document; ingo@860: tim@335: /** ingo@796: * This state handles single user input. The user is allowed to select just one ingo@796: * value. ingo@796: * sascha@780: * @author Tim Englich sascha@778: * tim@335: */ tim@335: public class SingleInputState extends StateBase { tim@335: tim@335: /** tim@335: * the logger, used to log exceptions and additonaly information tim@335: */ tim@335: private static Logger log = Logger.getLogger(SingleInputState.class); tim@335: tim@335: private static final long serialVersionUID = -6169497306324917318L; tim@335: tim@335: /** tim@335: * Constructor tim@335: */ tim@335: public SingleInputState() { tim@335: } tim@335: ingo@815: tim@335: @Override ingo@607: protected List purifyResult(Collection result, String uuid) { tim@335: log.debug("SingleInputState.purifyResult"); ingo@607: List describeData = new ArrayList(); ingo@607: tim@335: String value = null; tim@335: if (result != null && result.size() == 1) { tim@335: Result tmpItem = result.iterator().next(); tim@335: value = tmpItem.getObject("MAX").toString(); tim@335: } else { tim@335: value = ""; tim@335: } tim@335: ingo@473: describeData.add(new DefaultSingleValueDescribeData( ingo@473: this.dataName, value, getID())); ingo@607: ingo@607: return describeData; tim@335: } ingo@860: ingo@860: /** ingo@860: * This feed method needs a collection of two InputData objects. These ingo@860: * objects' values need to be a datetime string which is turned into a Date ingo@860: * object. Afterwards, the given dates are validated. Min and max date need ingo@860: * to be in range of the min and max date retrieved by ingo@860: * {@link #getDescibeData(java.lang.String)}. ingo@860: */ ingo@860: @Override ingo@860: public Document feed( ingo@860: CallContext context, ingo@860: Collection inputData, ingo@860: String uuid) ingo@860: throws StateException { ingo@860: RessourceFactory resFactory = RessourceFactory.getInstance(); ingo@860: Locale[] serverLocales = resFactory.getLocales(); ingo@860: Locale locale = context.getMeta().getPreferredLocale( ingo@860: serverLocales); ingo@860: ingo@860: if (inputData == null) { ingo@860: String msg = "No input data given."; ingo@860: log.warn(msg); ingo@860: return feedFailure(msg); ingo@860: } ingo@860: ingo@860: Iterator it = inputData.iterator(); ingo@860: InputData tmpItem = it.next(); ingo@860: InputValue inputValue = inputValues.get(tmpItem.getName()); ingo@860: ingo@860: if (inputValue == null) { ingo@860: String msg = resFactory.getRessource( ingo@860: locale, ingo@860: EXCEPTION_INVALID_INPUT, ingo@860: EXCEPTION_INVALID_INPUT); ingo@860: log.warn(msg); ingo@860: return feedFailure(msg); ingo@860: } ingo@860: ingo@860: boolean valid = InputValidator.isInputValid( ingo@860: tmpItem.getValue(), inputValue.getType()); ingo@860: ingo@860: if (valid) { ingo@1038: String[] desc = getDescriptionForInputData(tmpItem, context, uuid); ingo@860: tmpItem.setDescription(desc); ingo@860: ingo@860: this.inputData.put(tmpItem.getName(), tmpItem); ingo@860: return feedSuccess(); ingo@860: } ingo@860: ingo@860: else { ingo@860: String msg = resFactory.getRessource( ingo@860: locale, ingo@860: EXCEPTION_INVALID_INPUT, ingo@860: EXCEPTION_INVALID_INPUT); ingo@860: log.warn(msg); ingo@860: return feedFailure(msg); ingo@860: } ingo@860: } tim@335: } sascha@836: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :