[Yanel-commits] rev 25687 - public/yanel/trunk/src/realms/welcome-admin/yanel/resources/update-webapp/src/java/org/wyona/yanel/impl/resources

simon at wyona.com simon at wyona.com
Mon Jul 2 12:09:35 CEST 2007


Author: simon
Date: 2007-07-02 12:09:35 +0200 (Mon, 02 Jul 2007)
New Revision: 25687

Modified:
   public/yanel/trunk/src/realms/welcome-admin/yanel/resources/update-webapp/src/java/org/wyona/yanel/impl/resources/UpdateResource.java
Log:
transformation added and everything improved

Modified: public/yanel/trunk/src/realms/welcome-admin/yanel/resources/update-webapp/src/java/org/wyona/yanel/impl/resources/UpdateResource.java
===================================================================
--- public/yanel/trunk/src/realms/welcome-admin/yanel/resources/update-webapp/src/java/org/wyona/yanel/impl/resources/UpdateResource.java	2007-07-02 10:08:20 UTC (rev 25686)
+++ public/yanel/trunk/src/realms/welcome-admin/yanel/resources/update-webapp/src/java/org/wyona/yanel/impl/resources/UpdateResource.java	2007-07-02 10:09:35 UTC (rev 25687)
@@ -5,6 +5,8 @@
 package org.wyona.yanel.impl.resources;
 
 import org.apache.log4j.Category;
+import org.apache.xml.resolver.tools.CatalogResolver;
+import org.apache.xml.serializer.Serializer;
 import org.wyona.yanel.core.Path;
 import org.wyona.yanel.core.Resource;
 import org.wyona.yanel.core.ResourceConfiguration;
@@ -13,7 +15,13 @@
 import org.wyona.yanel.core.attributes.viewable.ViewDescriptor;
 import javax.servlet.http.HttpServletRequest;
 
+import org.wyona.yanel.core.serialization.SerializerFactory;
+import org.wyona.yanel.core.source.ResourceResolver;
 import org.wyona.yanel.core.transformation.I18nTransformer;
+import org.wyona.yanel.core.transformation.I18nTransformer2;
+import org.wyona.yanel.core.transformation.XIncludeTransformer;
+import org.wyona.yanel.core.util.PathUtil;
+import org.wyona.yanel.impl.resources.UpdateInfo;
 
 import javax.xml.transform.Transformer;
 import javax.xml.transform.TransformerConfigurationException;
@@ -25,6 +33,7 @@
 import java.io.ByteArrayInputStream;
 import java.io.FileInputStream;
 import java.util.ArrayList;
+import java.util.Enumeration;
 import java.util.HashMap;
 
 import javax.xml.parsers.DocumentBuilder;
@@ -33,6 +42,9 @@
 import javax.xml.parsers.SAXParserFactory;
 import java.io.File;
 
+import javax.xml.transform.sax.SAXResult;
+import javax.xml.transform.sax.SAXTransformerFactory;
+import javax.xml.transform.sax.TransformerHandler;
 import javax.xml.transform.stream.StreamResult;
 import javax.xml.transform.stream.StreamSource;
 import java.net.URL;
@@ -41,6 +53,9 @@
 import org.w3c.dom.Element;
 import org.w3c.dom.NodeList;
 import org.w3c.dom.Node;
+import org.xml.sax.InputSource;
+import org.xml.sax.XMLReader;
+import org.xml.sax.helpers.XMLReaderFactory;
 
 import com.hp.hpl.jena.rdf.model.*;
 
@@ -62,184 +77,317 @@
     /**
      * 
      */
-    public ViewDescriptor[] getViewDescriptors() {
-        return null;
+    public boolean exists() {
+        return true;
     }
 
     /**
      * 
      */
-    public View getView(String viewId) throws Exception {
+    public long getSize() {
+        return -1;
+    }
 
-        String path = getPath();
-        defaultLanguage = getRealm().getDefaultLanguage();
+    /**
+     * 
+     */
+    public String getMimeType(String viewId) {
+        if (viewId != null && viewId.equals("source"))
+            return "application/xml";
+        return "application/xhtml+xml";
+    }
 
-        // Get language
+    /**
+     * 
+     */
+    public View getView(String viewId) {
+        View view = new View();
+        String mimeType = getMimeType(viewId);
+        view.setMimeType(mimeType);
+
         try {
-            language = request.getParameter("yanel.meta.language");
-        } catch (Exception e) {
-            log.debug("language param is not found will use default : " + language);
-            language = defaultLanguage;
-        }
-        if (language == null || ("").equals(language)) {
-            log.debug("language param is empty or null : " + language);
-            language = defaultLanguage;
-        }
+            org.wyona.yarep.core.Repository repo = getRealm().getRepository();
 
-        Transformer transformer = null;
-        I18nTransformer i18nTransformer = new I18nTransformer("update", language, defaultLanguage);
-        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
-        View defaultView = new View();
-        DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
+            if (viewId != null && viewId.equals("source")) {
+                view.setInputStream(new java.io.StringBufferInputStream(getScreen()));
+                view.setMimeType("application/xml");
+                return view;
+            }
 
-        try {
+            String[] xsltPath = getXSLTPath(getPath());
+            if (xsltPath != null) {
 
-            // install.rdf
+                // create reader:
+                XMLReader xmlReader = XMLReaderFactory.createXMLReader();
+                CatalogResolver catalogResolver = new CatalogResolver();
+                xmlReader.setEntityResolver(catalogResolver);
 
-            InstallInfo installInfo = new InstallInfo(request);
+                // create xslt transformer:
+                SAXTransformerFactory tf = (SAXTransformerFactory) TransformerFactory.newInstance();
 
-            // just testing
-            System.out.println(installInfo.getId());
-            System.out.println(installInfo.getInstalltype());
-            System.out.println(installInfo.getContextPrefix());
-            System.out.println(installInfo.getOsName());
-            System.out.println(installInfo.getTargetApplicationId());
-            System.out.println(installInfo.getTargetApplicationVersion());
-            System.out.println(installInfo.getUpdateURL());
-            System.out.println(installInfo.getVersion());
-            System.out.println(installInfo.getJavaVersion());
-            for (int i = 0; i < installInfo.getProtectedFiles().size(); i++) {
-                System.out.println("getProtectedFiles --------"
-                        + installInfo.getProtectedFiles().get(i));
-            }
+                TransformerHandler[] xsltHandlers = new TransformerHandler[xsltPath.length];
+                for (int i = 0; i < xsltPath.length; i++) {
+                    xsltHandlers[i] = tf.newTransformerHandler(new StreamSource(repo.getNode(xsltPath[i])
+                            .getInputStream()));
+                    xsltHandlers[i].getTransformer().setParameter("yanel.path.name",
+                            PathUtil.getName(getPath()));
+                    xsltHandlers[i].getTransformer().setParameter("yanel.path", getPath());
+                    xsltHandlers[i].getTransformer().setParameter("yanel.back2context",
+                            PathUtil.backToContext(realm, getPath()));
+                    xsltHandlers[i].getTransformer().setParameter("yarep.back2realm",
+                            PathUtil.backToRealm(getPath()));
 
-            URL UpdateRdfUrl = new URL(installInfo.getUpdateURL());
-            InputStream updateRdfIn = UpdateRdfUrl.openStream();
-            UpdateInfo updateInfo = new UpdateInfo(updateRdfIn, installInfo);
+                    xsltHandlers[i].getTransformer().setParameter("language",
+                            getRequestedLanguage());
+                }
 
-            if (installInfo.getInstalltype().equals("source")) {
-                StringBuffer message = new StringBuffer();
-                message.append("<p>");
-                message.append("This Yanel was installed from source. You can only use the updater if you installed yanel from binary. Please use svn up, build.sh");
-                message.append("</p>");
+                // create i18n transformer:
+                I18nTransformer2 i18nTransformer = new I18nTransformer2("global",
+                        getRequestedLanguage(),
+                        getRealm().getDefaultLanguage());
+                i18nTransformer.setEntityResolver(catalogResolver);
 
-                byteArrayOutputStream = getOutput(message);
-                // transformer = TransformerFactory.newInstance().newTransformer();
+                // create xinclude transformer:
+                XIncludeTransformer xIncludeTransformer = new XIncludeTransformer();
+                ResourceResolver resolver = new ResourceResolver(this);
+                xIncludeTransformer.setResolver(resolver);
 
-            } else if (installInfo.getInstalltype().equals("bin-snapshot")) {
-                if (request.getParameter("update") != null
-                        && request.getParameter("update").equals("true")) {
-                    WebAppUpdater webAppUpdater = new WebAppUpdater(request, "");
+                // create serializer:
+                Serializer serializer = SerializerFactory.getSerializer(SerializerFactory.XHTML_STRICT);
+                ByteArrayOutputStream baos = new ByteArrayOutputStream();
 
-                    StringBuffer message = new StringBuffer();
-                    message.append("<p>");
-                    if (webAppUpdater.update()) {
-                        message.append("Update done.");
-                    } else {
-                        message.append("Update failed.");
-                    }
-                    message.append("</p>");
-                    byteArrayOutputStream = getOutput(message);
-                } else {
-                    StringBuffer message = new StringBuffer();
-                    message.append("<p>");
-                    message.append("This are the updates which you can get:");
-                    message.append("</p>");
-                    message.append("<ul>");
-                    for (int i = 0; i < updateInfo.getUpdateVersions().size(); i++) {
-                        HashMap versionDetails = (HashMap) updateInfo.getUpdateVersions().get(i);
-                        if (versionDetails.get("version") != installInfo.getVersion()) {
-                            message.append("<li>Version: "
-                                    + versionDetails.get("version")
-                                    + " ChangeLog: "
-                                    + versionDetails.get("changeLog")
-                                    + " Update Link: "
-                                    + versionDetails.get("updateLink")
-                                    + "<form><input type=\"submit\" name=\"update\" value=\"true\"></input></form></li>");
-                        }
-                    }
-                    message.append("</ul>");
-                    byteArrayOutputStream = getOutput(message);
+                // chain everything together (create a pipeline):
+                xmlReader.setContentHandler(xsltHandlers[0]);
+                for (int i = 0; i < xsltHandlers.length - 1; i++) {
+                    xsltHandlers[i].setResult(new SAXResult(xsltHandlers[i + 1]));
                 }
-            }
-            // this.installRdf.put("updateURL",
-            // installRdf.getChild("Description").getChild("um:updateURL").getValue());
-            // this.installRdf.put("version",
-            // installRdf.getChild("Description").getChild("um:version").getValue());
-            // transformer.transform(new StreamSource(InstallRdf), new
-            // StreamResult(byteArrayOutputStream));
+                xsltHandlers[xsltHandlers.length - 1].setResult(new SAXResult(xIncludeTransformer));
+                xIncludeTransformer.setResult(new SAXResult(i18nTransformer));
+                i18nTransformer.setResult(new SAXResult(serializer.asContentHandler()));
+                serializer.setOutputStream(baos);
 
-            // update.rdf
-            // URL UpdateRdfUrl = new URL(installRdf.getUpdateURL());
-            // InputStream UpdateRdf = UpdateRdfUrl.openStream();
+                // execute pipeline:
+                xmlReader.parse(new InputSource(new java.io.StringBufferInputStream(getScreen())));
 
-            // Configuration updateRdf = configBuilder.build(UpdateRdf);
-            // Document UpdateRdfDoc = builder.parse(UpdateRdf);
-            // transformer = TransformerFactory.newInstance().newTransformer();
-            // transformer.transform(new DOMSource(UpdateRdfDoc), new
-            // StreamResult(byteArrayOutputStream));
-
-            // SAXParser saxParser = SAXParserFactory.newInstance().newSAXParser();
-            // saxParser.parse(new
-            // ByteArrayInputStream(byteArrayOutputStream.toByteArray()),i18nTransformer);
+                // write result into view:
+                view.setInputStream(new ByteArrayInputStream(baos.toByteArray()));
+                return view;
+            } else {
+                log.debug("Mime-Type: " + mimeType);
+                view.setInputStream(new java.io.StringBufferInputStream(getScreen()));
+                return view;
+            }
         } catch (Exception e) {
-            log.error(e.getMessage(), e);
+            log.error(e + " (" + getPath() + ", " + getRealm() + ")", e);
         }
 
-        defaultView.setMimeType("application/xhtml+xml");
-        defaultView.setInputStream(new ByteArrayInputStream(byteArrayOutputStream.toByteArray()));
-        return defaultView;
+        view.setInputStream(new java.io.StringBufferInputStream(getScreen()));
+        return view;
     }
 
-    private ByteArrayOutputStream getOutput(StringBuffer insert)
-            throws TransformerConfigurationException {
-        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
-        StringBuffer sb = new StringBuffer();
-        sb.append("<?xml version=\"1.0\"?>");
+    /**
+     * 
+     */
+    public ViewDescriptor[] getViewDescriptors() {
+        ViewDescriptor[] vd = new ViewDescriptor[2];
+        vd[0] = new ViewDescriptor("default");
+        vd[0].setMimeType(getMimeType(null));
+        vd[1] = new ViewDescriptor("source");
+        vd[1].setMimeType(getMimeType("source"));
+        return vd;
+    }
+
+    /**
+     * 
+     */
+    private String getScreen() {
+        StringBuffer sb = new StringBuffer("<?xml version=\"1.0\"?>");
         sb.append("<html xmlns=\"http://www.w3.org/1999/xhtml\">");
-        sb.append("<head>");
-        sb.append("<title>Update Yanel</title>");
+        sb.append("<head><title>create resource</title>");
+        sb.append("<link rel=\"stylesheet\" type=\"text/css\" href=\""
+                + PathUtil.getResourcesHtdocsPath(this) + "css/resource-creator.css\"/>");
+        sb.append("<link rel=\"stylesheet\" type=\"text/css\" href=\""
+                + PathUtil.getGlobalHtdocsPath(this) + "yanel-css/progressBar.css\"/>");
+        sb.append("<script src=\"" + PathUtil.getGlobalHtdocsPath(this)
+                + "yanel-js/prototype.js\" type=\"text/javascript\"></script>");
+        sb.append("<script src=\"" + PathUtil.getGlobalHtdocsPath(this)
+                + "yanel-js/progressBar.js\" type=\"text/javascript\"></script>");
+        sb.append("<script src=\"" + PathUtil.getResourcesHtdocsPath(this)
+                + "js/ajaxlookup.js\" type=\"text/javascript\"></script>");
         sb.append("</head>");
         sb.append("<body>");
-        sb.append(insert);
+
+        HttpServletRequest request = getRequest();
+        Enumeration parameters = request.getParameterNames();
+        if (!parameters.hasMoreElements()) {
+            plainRequest(sb);
+        } else {
+            if (request.getParameter("save-as") != null) {
+                plainRequest(sb);
+            } else if (request.getParameter("save") != null) {
+                plainRequest(sb);
+            } else {
+                log.info("Fallback ...");
+                plainRequest(sb);
+            }
+        }
+
         sb.append("</body>");
         sb.append("</html>");
+        return sb.toString();
+    }
 
+    private void plainRequest(StringBuffer sb) {
+        
+        UpdateInfo updateInfo = null;
+        InstallInfo installInfo = getInstallInfo(sb);
+        // install.rdf
+//        InstallInfo installInfo = null;
+//        try {
+//            installInfo = new InstallInfo(request);
+//        } catch (Exception e) {
+//            log.error(e.getMessage(), e);
+//            sb.append("<p>Exception: " + e.getMessage() + "</p>");
+//            return;
+//        }
+
+
+        if (!getInstallInfo(sb).getInstalltype().equals("bin-snapshot")) {
+
+            sb.append("<p>");
+            sb.append("This Yanel was not installed from binary. You can only use the updater if you installed yanel from binary. Please use svn up, build.sh");
+            sb.append("</p>");
+
+            // transformer = TransformerFactory.newInstance().newTransformer();
+
+        } else {
+            updateInfo = getUpdateInfo(sb);
+//            try {
+//                URL UpdateRdfUrl = new URL(installInfo.getUpdateURL());
+//                InputStream updateRdfIn = UpdateRdfUrl.openStream();
+//                updateInfo = new UpdateInfo(updateRdfIn, installInfo);
+//            } catch (Exception e) {
+//                log.error(e.getMessage(), e);
+//                sb.append("<p>");
+//                sb.append("Yanel could not get the Update information! " + e);
+//                sb.append("</p>");
+//            }
+        }
+
+        if (updateInfo != null) {
+            
+            if (request.getParameter("update") != null
+                    && request.getParameter("update").equals("update")) {
+                WarFetcher warFetcher = null;
+                try {
+                    String destDir = request.getSession().getServletContext().getRealPath(".") + File.separator + "..";
+                    warFetcher = new WarFetcher(request, request.getParameter("updatelink"), destDir);
+                } catch (Exception e) {
+                    log.error(e.getMessage(), e);
+                    sb.append("<p>Exception: " + e.getMessage() + "</p>");
+                    return;
+                }
+
+                
+                try {
+                    HashMap versionDetails = updateInfo.getUpdateVersionDetail("updateLink", request.getParameter("updatelink"));
+                    String version = (String) versionDetails.get("version");
+                    String revision = (String) versionDetails.get("revision");
+                    String id = (String) versionDetails.get("id");
+                    
+                    warFetcher.fetch();
+                    
+                    TomcatContextHandler tomcatContextHandler = new TomcatContextHandler(request);
+                    tomcatContextHandler.setContext("updater", id + "-v-" + version + "-r-" + revision);
+                    String pathToUpdater = "http://" + request.getServerName() + ":" + request.getServerPort() +"/updater/";
+                    
+                    sb.append("<p>");
+                    sb.append("Update done.");
+                    sb.append("<a href=\"" +pathToUpdater + "\">");
+                    sb.append("go to the Updater!");
+                    sb.append("</a>");
+                    sb.append("</p>");
+                } catch (Exception e) {
+                    log.error(e.getMessage(), e);
+                    sb.append("<p>Update failed. Exception: " + e.getMessage() + "</p>");
+                }
+                
+
+                
+            } else {
+                sb.append("<p>");
+                sb.append("This are the updates which you can get:");
+                sb.append("</p>");
+                sb.append("<ul>");
+                for (int i = 0; i < updateInfo.getUpdateVersions().size(); i++) {
+                    HashMap versionDetails = (HashMap) updateInfo.getUpdateVersions().get(i);
+                    if (versionDetails.get("version") != installInfo.getVersion()) {
+                        sb.append("<li>"
+                                + versionDetails.get("title")
+                                + "<ul>"
+                                + "<li>Version: "
+                                + versionDetails.get("version")
+                                + "</li>"
+                                + "<li>Type: "
+                                + versionDetails.get("type")
+                                + "</li>"
+                                + "<li> ChangeLog: "
+                                + versionDetails.get("changeLog")
+                                + "</li>"
+                                + "<li> <form method=\"post\"><input type=\"submit\" name=\"update\" value=\"update\"></input><input type=\"hidden\" name=\"updatelink\" value=\""
+                                + versionDetails.get("updateLink") + "\"/></form></li>"
+                                + "</ul></li>");
+                    }
+                }
+                sb.append("</ul>");
+            }
+        }
+    }
+
+    private InstallInfo getInstallInfo (StringBuffer sb) {
+        InstallInfo installInfo = null;
         try {
-            Transformer transformer = TransformerFactory.newInstance().newTransformer();
-            transformer.transform(new StreamSource(new java.io.StringBufferInputStream(sb.toString())),
-                    new StreamResult(byteArrayOutputStream));
+            return installInfo = new InstallInfo(request);
         } catch (Exception e) {
             log.error(e.getMessage(), e);
+            sb.append("<p>Exception: " + e.getMessage() + "</p>");
+            return null;
         }
-        return byteArrayOutputStream;
     }
-
-    public boolean exists() throws Exception {
-        // NOTE does exists() make sense for this resource?
-        log.warn("Not implemented yet!");
-        return true;
+    
+    private UpdateInfo getUpdateInfo (StringBuffer sb) {
+        UpdateInfo updateInfo = null;
+        try {
+            URL UpdateRdfUrl = new URL(getInstallInfo(sb).getUpdateURL());
+            InputStream updateRdfIn = UpdateRdfUrl.openStream();
+            return updateInfo = new UpdateInfo(updateRdfIn, getInstallInfo(sb));
+        } catch (Exception e) {
+            log.error(e.getMessage(), e);
+            sb.append("<p>");
+            sb.append("Yanel could not get the Update information! " + e);
+            sb.append("</p>");
+            return null;
+        }
     }
+    
+//    /**
+//     * Get property value from resource configuration
+//     */
+//    private String getResourceProperty(String name) throws Exception {
+//        ResourceConfiguration rc = getConfiguration();
+//        if (rc != null)
+//            return rc.getProperty(name);
+//        return getRTI().getProperty(name);
+//    }
 
     /**
-     * 
+     * Get XSLT path
      */
-    public long getSize() throws Exception {
-        // NOTE does getSize make sense for this resource?
-        return getRealm().getRepository().getSize(new Path(getPath()));
+    private String[] getXSLTPath(String path) throws Exception {
+        String[] xsltPath = getResourceConfigProperties("xslt");
+        if (xsltPath != null)
+            return xsltPath;
+        log.info("No XSLT Path within: " + path);
+        return null;
     }
-
-    /**
-     * Get property value from resource configuration
-     */
-    private String getResourceProperty(String name) throws Exception {
-        ResourceConfiguration rc = getConfiguration();
-        if (rc != null)
-            return rc.getProperty(name);
-        return getRTI().getProperty(name);
-    }
-
-    public String getMimeType(String viewId) {
-        return "application/xml";
-    }
 }




More information about the Yanel-commits mailing list