Mercurial > dive4elements > gnv-client
diff gnv-artifacts/src/main/java/de/intevation/gnv/transition/OutputTransitionBase.java @ 127:f6f0e4ce4a35
merged gnv-artifacts/0.1
author | Thomas Arendsen Hein <thomas@intevation.de> |
---|---|
date | Fri, 28 Sep 2012 12:13:41 +0200 |
parents | ef157bd2fa92 |
children | 7fb9441dd8af |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/transition/OutputTransitionBase.java Fri Sep 28 12:13:41 2012 +0200 @@ -0,0 +1,155 @@ +/** + * + */ +package de.intevation.gnv.transition; + +import java.io.OutputStream; +import java.util.ArrayList; +import java.util.Collection; + +import net.sf.ehcache.Element; + +import org.apache.log4j.Logger; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; + +import de.intevation.artifactdatabase.Config; +import de.intevation.artifacts.CallMeta; +import de.intevation.gnv.artifacts.cache.CacheFactory; +import de.intevation.gnv.geobackend.base.Result; +import de.intevation.gnv.transition.exception.TransitionException; + +/** + * @author Tim Englich <tim.englich@intevation.de> + * + */ +public abstract class OutputTransitionBase extends TransitionBase implements + OutputTransition { + + + /** + * The UID of this Class + */ + private static final long serialVersionUID = -1718732895737303823L; + + /** + * the logger, used to log exceptions and additonaly information + */ + private static Logger log = Logger.getLogger(OutputTransitionBase.class); + + + /** + * The different Outputmodes which are provided by an OutputTransition + */ + protected Collection<OutputMode> outputModes = null; + + /** + * Constructor + */ + public OutputTransitionBase() { + super(); + } + + /** + * @see de.intevation.gnv.transition.OutputTransition#getOutputModes() + */ + public Collection<OutputMode> getOutputModes() { + log.debug("OutputTransitionBase.getOutputModes"); + return this.outputModes; + } + /** + * @see de.intevation.gnv.transition.Transition#validate() + */ + public boolean validate() { + log.debug("OutputTransitionBase.validate"); + return true; + } + + /** + * @see de.intevation.gnv.transition.TransitionBase#setup(org.w3c.dom.Node) + */ + @Override + public void setup(Node configuration) { + log.debug("OutputTransitionBase.setup"); + super.setup(configuration); + NodeList outputModeList = Config.getNodeSetXPath(configuration, "outputsModes/outputsMode"); + if (outputModeList != null){ + log.debug(outputModeList.getLength()+ " were found."); + this.outputModes = new ArrayList<OutputMode>(outputModeList.getLength()); + for (int i = 0; i < outputModeList.getLength(); i++){ + Node currentNode = outputModeList.item(i); + String name = Config.getStringXPath(currentNode, "@name"); + String description = Config.getStringXPath(currentNode, "@description"); + String mimeType = Config.getStringXPath(currentNode, "@mime-type"); + + NodeList inputValuesList = Config.getNodeSetXPath(currentNode, "parameters/inputvalue"); + Collection<InputValue> inputParameters = null; + if (inputValuesList != null){ + inputParameters = new ArrayList<InputValue>(inputValuesList.getLength()); + for (int j = 0 ; j < inputValuesList.getLength(); j++){ + Node currentInputValuesNode = inputValuesList.item(j); + String inputValueName = Config.getStringXPath(currentInputValuesNode, "@name"); + String inputValueType = Config.getStringXPath(currentInputValuesNode, "@type"); + String defaultValue = Config.getStringXPath(currentInputValuesNode, "@value"); + boolean isMultiselect = false; + InputValue inputValue = new DefaultInputValue(inputValueName, inputValueType, defaultValue, isMultiselect); + inputParameters.add(inputValue); + } + } + + OutputMode outputMode = new DefaultOutputMode(name, description, mimeType,inputParameters); + log.debug(outputMode.toString()); + this.outputModes.add(outputMode); + + } + } + } + + /** + * @see de.intevation.gnv.transition.TransitionBase#advance() + */ + @Override + public void advance(String uuid, CallMeta callMeta) throws TransitionException { + log.debug("OutputTransitionBase.advance"); + if (this.getChartResult(uuid) == null){ + super.advance(uuid, callMeta); + } + } + + /** + * @see de.intevation.gnv.transition.OutputTransition#out(java.lang.String, java.util.Collection, java.io.OutputStream) + */ + public void out(String outputMode, Collection<InputData> inputData, + OutputStream outputStream) throws TransitionException { + } + + /** + * @return + */ + protected Collection<Result> getChartResult(String uuid) { + log.debug("OutputTransitionBase.getChartResult"); + if (CacheFactory.getInstance().isInitialized()){ + String key = uuid+super.getID(); + log.debug("Hash for Queryelements: "+key); + Element value = CacheFactory.getInstance().getCache().get(key); + if (value != null){ + return (Collection<Result>)(value.getObjectValue()); + } + } + return null; + } + + /** + * @see de.intevation.gnv.transition.TransitionBase#purifyResult(java.util.Collection, java.lang.String) + */ + @Override + protected void purifyResult(Collection<Result> result, String uuid) { + log.debug("OutputTransitionBase.purifyResult"); + if (CacheFactory.getInstance().isInitialized()){ + String key = uuid+super.getID(); + log.debug("Hash for Queryelements: "+key); + CacheFactory.getInstance().getCache().put(new Element(key, result)); + } + } + +}