[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