From 5f1ace792e0b7fbca3302eb9edba59fa05458a07 Mon Sep 17 00:00:00 2001 From: Rena Tsantouli Date: Mon, 25 Jan 2010 10:10:41 +0000 Subject: [PATCH] git-svn-id: http://svn.research-infrastructures.eu/public/d4science/gcube/trunk/application-support-layer/applicationSupportLayerCore@18006 82a268e6-3cf1-43bd-a215-b396298e98cf --- .../framework/core/util/LayoutPortlets.java | 161 ++++++++++++++++++ 1 file changed, 161 insertions(+) create mode 100644 src/org/gcube/application/framework/core/util/LayoutPortlets.java diff --git a/src/org/gcube/application/framework/core/util/LayoutPortlets.java b/src/org/gcube/application/framework/core/util/LayoutPortlets.java new file mode 100644 index 0000000..0ad88e6 --- /dev/null +++ b/src/org/gcube/application/framework/core/util/LayoutPortlets.java @@ -0,0 +1,161 @@ +package org.gcube.application.framework.core.util; + +import java.io.BufferedReader; +import java.io.ByteArrayInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.StringReader; +import java.io.StringWriter; +import java.util.ArrayList; + +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.ParserConfigurationException; +import javax.xml.transform.OutputKeys; +import javax.xml.transform.Templates; +import javax.xml.transform.Transformer; +import javax.xml.transform.TransformerException; +import javax.xml.transform.TransformerFactory; +import javax.xml.transform.dom.DOMSource; +import javax.xml.transform.stream.StreamResult; +import javax.xml.transform.stream.StreamSource; + +import org.gcube.application.framework.core.session.ASLSession; +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.w3c.dom.NodeList; +import org.xml.sax.InputSource; +import org.xml.sax.SAXException; + +import com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl; + +public class LayoutPortlets { + + protected static final String PORTLETS_XSL = "/etc/layoutPortlets.xsl"; + + + public static void addPortletsToSession(ASLSession session, Document layout) throws IOException, TransformerException, ParserConfigurationException, SAXException { + String layoutString = getStringFromDocument(layout); + String layoutXSL = getPortletsXSLT(); + String portlets = transform(layoutString, layoutXSL); + + Document portletsDoc = getDocumentFromString(portlets); + + ArrayList availablePortlets = new ArrayList(); + + Element root = portletsDoc.getDocumentElement(); + NodeList portletNodes = root.getChildNodes(); + + for (int i = 0; i < portletNodes.getLength(); i++) { + String portletString = portletNodes.item(i).getTextContent(); + String[] split = portletString.split("#"); + String portletName = split[1]; + availablePortlets.add(portletName); + System.out.println("Adding Portlet name to session: " + split[1]); + } + + session.setAttribute("availablePortlets", availablePortlets); + } + + private static String convertStreamToString(InputStream is) throws IOException { + if (is != null) { + StringBuilder sb = new StringBuilder(); + String line; + + try { + BufferedReader reader = new BufferedReader(new InputStreamReader(is, "UTF-8")); + while ((line = reader.readLine()) != null) { + sb.append(line).append("\n"); + } + } finally { + is.close(); + } + return sb.toString(); + } else + return ""; + } + + public static String getPortletsXSLT() throws IOException { + InputStream is = LayoutPortlets.class.getResourceAsStream(PORTLETS_XSL); //?? + + if (is == null){ + + System.out.println("Default XSLT resource not found on "+PORTLETS_XSL); + return null; + } + + InputStreamReader isr = new InputStreamReader(is); + + BufferedReader filebuf = null; + String nextStr = null; + String toReturn = new String(); + try { + filebuf = new BufferedReader(isr); + nextStr = filebuf.readLine(); + while (nextStr != null) { + toReturn += nextStr ; + nextStr = filebuf.readLine(); + } + filebuf.close(); // chiude il file + } catch (FileNotFoundException e) { + e.printStackTrace(); + } catch (IOException e1) { + e1.printStackTrace(); + } + + return toReturn; + } + + /** + * @param xml the XML to convert. + * @param xslt the XML used for the conversion. + * @return the HTML. + * @throws TransformerException if an error occurs. + */ + public static String transform(String xml, String xslt) throws TransformerException + { + + TransformerFactoryImpl factory = new TransformerFactoryImpl(); + StreamSource sourceInput = new StreamSource(new ByteArrayInputStream(xslt.getBytes())); + Templates sheet = factory.newTemplates(sourceInput); + + Transformer instance = sheet.newTransformer(); + instance.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "true"); + StringWriter w = new StringWriter(); + instance.transform(new StreamSource(new StringReader(xml)), new StreamResult(w)); + + return w.toString(); + } + + //method to convert Document to String + private static String getStringFromDocument(Document doc) + { + try + { + DOMSource domSource = new DOMSource(doc); + StringWriter writer = new StringWriter(); + StreamResult result = new StreamResult(writer); + TransformerFactory tf = TransformerFactory.newInstance(); + Transformer transformer = tf.newTransformer(); + transformer.transform(domSource, result); + return writer.toString(); + } + catch(TransformerException ex) + { + ex.printStackTrace(); + return null; + } + } + + + private static Document getDocumentFromString(String str) throws ParserConfigurationException, SAXException, IOException { + DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); + DocumentBuilder builder = factory.newDocumentBuilder(); + Document document = builder.parse(new InputSource(new StringReader(str))); + + return document; + } + +}