# HG changeset patch # User Tim Englich # Date 1253024395 0 # Node ID 3cb753564552c927ef15ea47b8528263271d28b7 # Parent e6c47838eee6cbcc15ba6e9754686ad115285c7a Integration of the required XSL-Transformation of the Describe-Response of the Artifactdatabase gnv/trunk@90 c6561f87-3c4e-4783-a992-168aeb5c3f6f diff -r e6c47838eee6 -r 3cb753564552 gnv/Changelog --- a/gnv/Changelog Tue Sep 15 10:12:56 2009 +0000 +++ b/gnv/Changelog Tue Sep 15 14:19:55 2009 +0000 @@ -1,3 +1,23 @@ +2009-09-15 Tim Englich + + * src/test/java/de/intevation/gnv/util/XSLTransformerTestCase.java: + New Testcase for testing the usability of XSL-Transformations + * src/test/ressources/describe-ui-test.xml Added: + An Sample-Document for testing XSL-Transformations + * src/main/webapp/WEB-INF/jsp/index.jsp Edited: + Added the html-Fragment of the transformated Describe-Methode-response to the document. + * src/main/webapp/WEB-INF/config/templates/describe-ui.xsl Added: + XSL-Template for transforming an Xform-Element to a HTML-Select-Element + * src/main/java/de/intevation/gnv/util/XSLTransformer.java Added: + XSl-Transformer for doing XSL-Transformations of the ResultDocuments of + the ArtifactDatabase + * src/main/java/de/intevation/gnv/util/XMLUtils.java Edited: + Integrate a Method for writing an XML-Node to a String for debugging. + * src/main/java/de/intevation/gnv/artifactdatabase/client/DefaultArtifactDatabaseClient.java: + Some Unused imports removed an select the first Child of the ui Node. + * src/main/java/de/intevation/gnv/action/SelectArtifactFactoryAction.java (execute) Edited: + Integration of the Describe-Stuff for rendering an GUi + 2009-09-15 Tim Englich * src/test/java/de/intevation/gnv/artifactdatabase/client/ArtifactDatabaseClientTestCase.java (testArtifactDatabaseClient) Edited: diff -r e6c47838eee6 -r 3cb753564552 gnv/src/main/java/de/intevation/gnv/action/SelectArtifactFactoryAction.java --- a/gnv/src/main/java/de/intevation/gnv/action/SelectArtifactFactoryAction.java Tue Sep 15 10:12:56 2009 +0000 +++ b/gnv/src/main/java/de/intevation/gnv/action/SelectArtifactFactoryAction.java Tue Sep 15 14:19:55 2009 +0000 @@ -17,6 +17,7 @@ import de.intevation.gnv.artifactdatabase.client.ArtifactDatabaseClientFactory; import de.intevation.gnv.artifactdatabase.objects.ArtifactDescription; import de.intevation.gnv.artifactdatabase.objects.ArtifactObject; +import de.intevation.gnv.util.XSLTransformer; /** * @author Tim Englich @@ -48,8 +49,10 @@ ArtifactDescription artifactdescription = adc.getCurrentStepDescription(sm.getSelectedArtifactFactory(), artifact); - // TODO Initiales Describe Abrufen + XSLTransformer transformer = new XSLTransformer(); + String ui = transformer.transform(artifactdescription.getCurrentUI(), "UTF-8", request.getRealPath("WEB-INF/config/templates/describe-ui.xsl")); + request.setAttribute("ui", ui); // return succsess return super.execute(mapping, form, request, response); diff -r e6c47838eee6 -r 3cb753564552 gnv/src/main/java/de/intevation/gnv/artifactdatabase/client/DefaultArtifactDatabaseClient.java --- a/gnv/src/main/java/de/intevation/gnv/artifactdatabase/client/DefaultArtifactDatabaseClient.java Tue Sep 15 10:12:56 2009 +0000 +++ b/gnv/src/main/java/de/intevation/gnv/artifactdatabase/client/DefaultArtifactDatabaseClient.java Tue Sep 15 14:19:55 2009 +0000 @@ -5,24 +5,12 @@ import java.io.IOException; import java.io.InputStream; -import java.io.StringWriter; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.Iterator; import java.util.Map; -import javax.xml.parsers.DocumentBuilder; -import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.parsers.ParserConfigurationException; -import javax.xml.transform.Transformer; -import javax.xml.transform.TransformerConfigurationException; -import javax.xml.transform.TransformerException; -import javax.xml.transform.TransformerFactory; -import javax.xml.transform.TransformerFactoryConfigurationError; -import javax.xml.transform.dom.DOMSource; -import javax.xml.transform.stream.StreamResult; - import org.apache.log4j.Logger; import org.restlet.Client; import org.restlet.data.Method; @@ -271,6 +259,7 @@ if (artifact instanceof ArtifactDescription){ ArtifactDescription ad = (ArtifactDescription)artifact; Node uiNode = xmlUtils.getNodeXPath(document, "/result/ui"); + uiNode = uiNode.getFirstChild(); Node outputNode = xmlUtils.getNodeXPath(document, "/result/outputs"); String currentState = xmlUtils.getStringXPath(document, "/result/state/@name"); NodeList statesList = xmlUtils.getNodeSetXPath(document, "/result/reachable-states/state/@name"); diff -r e6c47838eee6 -r 3cb753564552 gnv/src/main/java/de/intevation/gnv/util/XMLUtils.java --- a/gnv/src/main/java/de/intevation/gnv/util/XMLUtils.java Tue Sep 15 10:12:56 2009 +0000 +++ b/gnv/src/main/java/de/intevation/gnv/util/XMLUtils.java Tue Sep 15 14:19:55 2009 +0000 @@ -2,6 +2,7 @@ import java.io.IOException; import java.io.InputStream; +import java.io.StringBufferInputStream; import java.io.StringWriter; import org.w3c.dom.Document; @@ -175,15 +176,10 @@ return returnValue; } - public String writeDocument2String(Document document){ + public String writeNode2String(Node node){ try { - TransformerFactory transformerFactory = TransformerFactory.newInstance(); - Transformer transformer = transformerFactory.newTransformer(); - DOMSource source = new DOMSource(document); - StringWriter sw = new StringWriter(); - StreamResult result = new StreamResult(sw); - transformer.transform(source, result); - return sw.getBuffer().toString(); + DOMSource source = new DOMSource(node); + return writeDOMSource2String(source); } catch (TransformerConfigurationException e) { logger.error(e,e); } catch (TransformerFactoryConfigurationError e) { @@ -193,5 +189,44 @@ } return null; } + + public Document reInitDocument(Document document){ + + StringBufferInputStream inputStream = new StringBufferInputStream(this.writeDocument2String(document)); + return this.readDocument(inputStream); + } + + + public String writeDocument2String(Document document){ + try { + DOMSource source = new DOMSource(document); + return writeDOMSource2String(source); + } catch (TransformerConfigurationException e) { + logger.error(e,e); + } catch (TransformerFactoryConfigurationError e) { + logger.error(e,e); + } catch (TransformerException e) { + logger.error(e,e); + } + return null; + } + + /** + * @param source + * @return + * @throws TransformerFactoryConfigurationError + * @throws TransformerConfigurationException + * @throws TransformerException + */ + private String writeDOMSource2String(DOMSource source) + throws TransformerFactoryConfigurationError, + TransformerConfigurationException, TransformerException { + TransformerFactory transformerFactory = TransformerFactory.newInstance(); + Transformer transformer = transformerFactory.newTransformer(); + StringWriter sw = new StringWriter(); + StreamResult result = new StreamResult(sw); + transformer.transform(source, result); + return sw.getBuffer().toString(); + } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8: diff -r e6c47838eee6 -r 3cb753564552 gnv/src/main/java/de/intevation/gnv/util/XSLTransformer.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gnv/src/main/java/de/intevation/gnv/util/XSLTransformer.java Tue Sep 15 14:19:55 2009 +0000 @@ -0,0 +1,66 @@ +/** + * + */ +package de.intevation.gnv.util; + +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.StringBufferInputStream; +import java.io.UnsupportedEncodingException; + +import javax.xml.transform.Source; +import javax.xml.transform.Transformer; +import javax.xml.transform.TransformerConfigurationException; +import javax.xml.transform.TransformerException; +import javax.xml.transform.TransformerFactory; +import javax.xml.transform.TransformerFactoryConfigurationError; +import javax.xml.transform.dom.DOMSource; +import javax.xml.transform.stream.StreamResult; +import javax.xml.transform.stream.StreamSource; + +import org.apache.log4j.Logger; +import org.w3c.dom.Node; + +/** + * @author Tim Englich + * + */ +public class XSLTransformer { + /** + * the logger, used to log exceptions and additonaly information + */ + private static Logger log = Logger.getLogger(XSLTransformer.class); + /** + * Constructor + */ + public XSLTransformer() { + super(); + } + + public String transform(Node toTransform, String encoding, String templateFileName){ + String resultValue = null; + try { + XMLUtils xmlUtils = new XMLUtils(); + Source templateSource = new StreamSource(new File(templateFileName)); + TransformerFactory xformFactory = TransformerFactory.newInstance(); + Transformer transformer = xformFactory.newTransformer(templateSource); + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + StreamResult scrResult = new StreamResult(baos); + log.debug(xmlUtils.writeNode2String(toTransform)); + DOMSource source = new DOMSource(toTransform); + transformer.transform(source, scrResult); + resultValue = new String(baos.toByteArray(),encoding); + } catch (TransformerConfigurationException e) { + log.error(e,e); + } catch (UnsupportedEncodingException e) { + log.error(e,e); + } catch (TransformerFactoryConfigurationError e) { + log.error(e,e); + } catch (TransformerException e) { + log.error(e,e); + } + + return resultValue; + } + +} diff -r e6c47838eee6 -r 3cb753564552 gnv/src/main/webapp/WEB-INF/config/templates/describe-ui.xsl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gnv/src/main/webapp/WEB-INF/config/templates/describe-ui.xsl Tue Sep 15 14:19:55 2009 +0000 @@ -0,0 +1,18 @@ + + + + + + +     + + + + + + + \ No newline at end of file diff -r e6c47838eee6 -r 3cb753564552 gnv/src/main/webapp/WEB-INF/jsp/index.jsp --- a/gnv/src/main/webapp/WEB-INF/jsp/index.jsp Tue Sep 15 10:12:56 2009 +0000 +++ b/gnv/src/main/webapp/WEB-INF/jsp/index.jsp Tue Sep 15 14:19:55 2009 +0000 @@ -6,11 +6,15 @@ <%@page import="java.util.Iterator"%>
+ +<% + Object ui = request.getAttribute("ui"); + SessionModel sm = SessionModelFactory.getInstance().getSessionModel(request); + Collection artifactFactories = sm.getArtifactFactories(); + if (artifactFactories != null && ui == null){ +%> +<% +} +%> + + + <%=ui != null ? ui.toString() : "" %> + diff -r e6c47838eee6 -r 3cb753564552 gnv/src/test/java/de/intevation/gnv/artifactdatabase/client/ArtifactDatabaseClientTestCase.java --- a/gnv/src/test/java/de/intevation/gnv/artifactdatabase/client/ArtifactDatabaseClientTestCase.java Tue Sep 15 10:12:56 2009 +0000 +++ b/gnv/src/test/java/de/intevation/gnv/artifactdatabase/client/ArtifactDatabaseClientTestCase.java Tue Sep 15 14:19:55 2009 +0000 @@ -10,7 +10,9 @@ import org.apache.log4j.Logger; import de.intevation.gnv.artifactdatabase.client.exception.ArtifactDatabaseClientException; +import de.intevation.gnv.artifactdatabase.objects.ArtifactDescription; import de.intevation.gnv.artifactdatabase.objects.ArtifactObject; +import de.intevation.gnv.util.XSLTransformer; import junit.framework.TestCase; @@ -54,8 +56,11 @@ while(it.hasNext()){ ArtifactObject aof = it.next(); ArtifactObject artifact = artifactDatabaseClient.createNewArtifact(aof); - artifactDatabaseClient.getCurrentStepDescription(aof, artifact); + ArtifactDescription ad = artifactDatabaseClient.getCurrentStepDescription(aof, artifact); log.debug("Artifact aktualisert."); + XSLTransformer transformer = new XSLTransformer(); + String transformedUI = transformer.transform(ad.getCurrentUI(), "UTF-8",("src/main/webapp/WEB-INF/config/templates/describe-ui.xsl")); + log.debug(transformedUI); } } diff -r e6c47838eee6 -r 3cb753564552 gnv/src/test/java/de/intevation/gnv/util/XSLTransformerTestCase.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gnv/src/test/java/de/intevation/gnv/util/XSLTransformerTestCase.java Tue Sep 15 14:19:55 2009 +0000 @@ -0,0 +1,55 @@ +/** + * + */ +package de.intevation.gnv.util; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; + +import org.apache.log4j.BasicConfigurator; +import org.apache.log4j.Logger; +import org.w3c.dom.Document; + +import de.intevation.gnv.artifactdatabase.client.DefaultArtifactDatabaseClient; + +import junit.framework.TestCase; + +/** + * @author Tim Englich + * + */ +public class XSLTransformerTestCase extends TestCase { + + /** + * the logger, used to log exceptions and additonaly information + */ + private static Logger log = null; + + static{ + BasicConfigurator.configure(); + log = Logger.getLogger(DefaultArtifactDatabaseClient.class); + } + + public XSLTransformerTestCase() { + super(); + } + + public XSLTransformerTestCase(String name) { + super(name); + } + + + public void testDescribeUI(){ + + try { + //System.setProperty("javax.xml.transform.TransformerFactory","com.icl.saxon.TransformerFactoryImpl"); + Document document = new XMLUtils().readDocument(new FileInputStream(new File("src/test/ressources/describe-ui-test.xml"))); + XSLTransformer transformer = new XSLTransformer(); + String value = transformer.transform(document, "UTF-8", "src/main/webapp/WEB-INF/config/templates/describe-ui.xsl"); + log.debug(value); + } catch (FileNotFoundException e) { + log.error(e,e); + } + } +} diff -r e6c47838eee6 -r 3cb753564552 gnv/src/test/ressources/describe-ui-test.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gnv/src/test/ressources/describe-ui-test.xml Tue Sep 15 14:19:55 2009 +0000 @@ -0,0 +1,10 @@ + + + product + + + timeSeries + timeSeries + + +