tim@64: /** tim@64: * tim@64: */ tim@64: package de.intevation.gnv.transition; tim@64: tim@99: import java.io.OutputStream; tim@64: import java.util.ArrayList; tim@64: import java.util.Collection; tim@64: tim@99: import net.sf.ehcache.Element; tim@99: tim@64: import org.apache.log4j.Logger; tim@64: import org.w3c.dom.Node; tim@64: import org.w3c.dom.NodeList; tim@64: tim@64: import de.intevation.artifactdatabase.Config; tim@117: import de.intevation.artifacts.CallMeta; tim@99: import de.intevation.gnv.artifacts.cache.CacheFactory; tim@86: import de.intevation.gnv.geobackend.base.Result; tim@86: import de.intevation.gnv.transition.exception.TransitionException; tim@64: tim@64: /** tim@64: * @author Tim Englich tim@171: * tim@64: */ tim@64: public abstract class OutputTransitionBase extends TransitionBase implements tim@171: OutputTransition { tim@171: tim@86: /** tim@91: * The UID of this Class tim@86: */ tim@86: private static final long serialVersionUID = -1718732895737303823L; tim@171: tim@64: /** tim@64: * the logger, used to log exceptions and additonaly information tim@64: */ tim@64: private static Logger log = Logger.getLogger(OutputTransitionBase.class); tim@171: tim@86: /** tim@86: * The different Outputmodes which are provided by an OutputTransition tim@86: */ tim@64: protected Collection outputModes = null; tim@171: tim@64: /** tim@64: * Constructor tim@64: */ tim@64: public OutputTransitionBase() { tim@64: super(); tim@64: } tim@64: tim@64: /** tim@64: * @see de.intevation.gnv.transition.OutputTransition#getOutputModes() tim@64: */ tim@64: public Collection getOutputModes() { tim@64: log.debug("OutputTransitionBase.getOutputModes"); tim@64: return this.outputModes; tim@64: } tim@171: tim@86: /** tim@86: * @see de.intevation.gnv.transition.Transition#validate() tim@86: */ tim@86: public boolean validate() { tim@86: log.debug("OutputTransitionBase.validate"); tim@86: return true; tim@86: } tim@64: tim@64: /** tim@64: * @see de.intevation.gnv.transition.TransitionBase#setup(org.w3c.dom.Node) tim@64: */ tim@64: @Override tim@64: public void setup(Node configuration) { tim@64: log.debug("OutputTransitionBase.setup"); tim@64: super.setup(configuration); tim@171: NodeList outputModeList = Config.getNodeSetXPath(configuration, tim@171: "outputsModes/outputsMode"); tim@171: if (outputModeList != null) { tim@171: log.debug(outputModeList.getLength() + " were found."); tim@171: this.outputModes = new ArrayList(outputModeList tim@171: .getLength()); tim@171: for (int i = 0; i < outputModeList.getLength(); i++) { tim@64: Node currentNode = outputModeList.item(i); tim@171: String name = Config.getStringXPath(currentNode, "@name"); tim@171: String description = Config.getStringXPath(currentNode, tim@171: "@description"); tim@171: String mimeType = Config.getStringXPath(currentNode, tim@171: "@mime-type"); tim@171: tim@171: NodeList inputValuesList = Config.getNodeSetXPath(currentNode, tim@171: "parameters/inputvalue"); tim@91: Collection inputParameters = null; tim@171: if (inputValuesList != null) { tim@171: inputParameters = new ArrayList(inputValuesList tim@171: .getLength()); tim@171: for (int j = 0; j < inputValuesList.getLength(); j++) { tim@91: Node currentInputValuesNode = inputValuesList.item(j); tim@171: String inputValueName = Config.getStringXPath( tim@171: currentInputValuesNode, "@name"); tim@171: String inputValueType = Config.getStringXPath( tim@171: currentInputValuesNode, "@type"); tim@171: String defaultValue = Config.getStringXPath( tim@171: currentInputValuesNode, "@value"); tim@91: boolean isMultiselect = false; tim@171: InputValue inputValue = new DefaultInputValue( tim@171: inputValueName, inputValueType, defaultValue, tim@171: isMultiselect); tim@91: inputParameters.add(inputValue); tim@91: } tim@91: } tim@171: tim@171: OutputMode outputMode = new DefaultOutputMode(name, tim@171: description, mimeType, inputParameters); tim@64: log.debug(outputMode.toString()); tim@64: this.outputModes.add(outputMode); tim@171: tim@64: } tim@64: } tim@64: } tim@171: tim@86: /** tim@86: * @see de.intevation.gnv.transition.TransitionBase#advance() tim@86: */ tim@86: @Override tim@171: public void advance(String uuid, CallMeta callMeta) tim@171: throws TransitionException { tim@86: log.debug("OutputTransitionBase.advance"); tim@171: if (this.getChartResult(uuid) == null) { tim@117: super.advance(uuid, callMeta); tim@86: } tim@86: } tim@86: tim@86: /** tim@171: * @see de.intevation.gnv.transition.OutputTransition#out(java.lang.String, tim@171: * java.util.Collection, java.io.OutputStream) tim@99: */ tim@99: public void out(String outputMode, Collection inputData, tim@171: OutputStream outputStream) throws TransitionException { tim@99: } tim@99: tim@99: /** tim@99: * @return tim@99: */ tim@99: protected Collection getChartResult(String uuid) { tim@99: log.debug("OutputTransitionBase.getChartResult"); tim@171: if (CacheFactory.getInstance().isInitialized()) { tim@171: String key = uuid + super.getID(); tim@171: log.debug("Hash for Queryelements: " + key); tim@99: Element value = CacheFactory.getInstance().getCache().get(key); tim@171: if (value != null) { tim@171: return (Collection) (value.getObjectValue()); tim@99: } tim@99: } tim@99: return null; tim@99: } tim@171: tim@99: /** tim@171: * @see de.intevation.gnv.transition.TransitionBase#purifyResult(java.util.Collection, tim@171: * java.lang.String) tim@86: */ tim@86: @Override tim@99: protected void purifyResult(Collection result, String uuid) { tim@99: log.debug("OutputTransitionBase.purifyResult"); tim@171: if (CacheFactory.getInstance().isInitialized()) { tim@171: String key = uuid + super.getID(); tim@171: log.debug("Hash for Queryelements: " + key); tim@99: CacheFactory.getInstance().getCache().put(new Element(key, result)); tim@99: } tim@86: } tim@64: tim@64: }