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

simon at wyona.com simon at wyona.com
Fri Jul 6 21:15:02 CEST 2007


Author: simon
Date: 2007-07-06 21:15:01 +0200 (Fri, 06 Jul 2007)
New Revision: 25832

Modified:
   public/yanel/trunk/src/realms/welcome-admin/yanel/resources/update-webapp/src/java/org/wyona/yanel/impl/resources/updatefinder/UpdateFinder.java
Log:
some refactoring.

Modified: public/yanel/trunk/src/realms/welcome-admin/yanel/resources/update-webapp/src/java/org/wyona/yanel/impl/resources/updatefinder/UpdateFinder.java
===================================================================
--- public/yanel/trunk/src/realms/welcome-admin/yanel/resources/update-webapp/src/java/org/wyona/yanel/impl/resources/updatefinder/UpdateFinder.java	2007-07-06 19:12:28 UTC (rev 25831)
+++ public/yanel/trunk/src/realms/welcome-admin/yanel/resources/update-webapp/src/java/org/wyona/yanel/impl/resources/updatefinder/UpdateFinder.java	2007-07-06 19:15:01 UTC (rev 25832)
@@ -37,6 +37,7 @@
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Iterator;
+import java.util.Collections;
 
 import javax.xml.parsers.DocumentBuilder;
 import javax.xml.parsers.DocumentBuilderFactory;
@@ -70,6 +71,8 @@
     private static Category log = Category.getInstance(UpdateFinder.class);
     private String defaultLanguage;
     private String language = null;
+    private StringBuffer htmlHeadContent = new StringBuffer();
+    private StringBuffer htmlBodyContent = new StringBuffer();
 
     /**
      * 
@@ -204,28 +207,25 @@
      * 
      */
     private String getScreen() {
-        StringBuffer sbContent = new StringBuffer();
-        StringBuffer sbHeader = new StringBuffer();
         Enumeration parameters = request.getParameterNames();
         if (!parameters.hasMoreElements()) {
-            plainRequest(sbContent);
+            plainRequest();
         } else {
             if (request.getParameter("save-as") != null) {
-                plainRequest(sbContent);
+                plainRequest();
             } else if (request.getParameter("update") != null && request.getParameter("update").equals("update")) {
-                getUpdateConfirmScreen(sbContent);
+                getUpdateConfirmScreen();
             } else if (request.getParameter("updateconfirmed") != null && request.getParameter("updateconfirmed").equals("updateconfirmed")) {    
-                getUpdateScreen(sbContent);
-                sbHeader.append("<meta http-equiv=\"refresh\" content=\"10; URL=" + "http://" + request.getServerName() + ":" + request.getServerPort() + "/updater/" + "?updatelink=" + request.getParameter("updatelink") + "\"/>");
+                getUpdateScreen();
             } else {
                 log.info("Fallback ...");
-                plainRequest(sbContent);
+                plainRequest();
             }
         }
 
         StringBuffer sb = new StringBuffer("<?xml version=\"1.0\"?>");
         sb.append("<html xmlns=\"http://www.w3.org/1999/xhtml\">");
-        sb.append("<head><title>create resource</title>");
+        sb.append("<head><title>Yanel Updater</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=\""
@@ -238,54 +238,66 @@
                 + "yanel-js/sorttable.js\" type=\"text/javascript\"></script>");
         sb.append("<script src=\"" + PathUtil.getResourcesHtdocsPath(this)
                 + "js/ajaxlookup.js\" type=\"text/javascript\"></script>");
-        sb.append(sbHeader);
+        sb.append(htmlHeadContent);
         sb.append("</head>");
         sb.append("<body>");
-        sb.append(sbContent);
+        sb.append(htmlBodyContent);
         sb.append("</body>");
         sb.append("</html>");
         return sb.toString();
     }
 
-    private void plainRequest(StringBuffer sb) {
+    private void plainRequest() {
         UpdateInfo updateInfo = null;
-        InstallInfo installInfo = getInstallInfo(sb);
+        InstallInfo installInfo = null;
+        try {
+            installInfo = getInstallInfo();
+        } catch (Exception e) {
+            log.error(e.getMessage(), e);
+            htmlBodyContent.append("<p>Failed to get install information. Exception: " + e.getMessage() + "</p>");
+        }
+        
         if (!installInfo.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>");
+            htmlBodyContent.append("<p>");
+            htmlBodyContent.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");
+            htmlBodyContent.append("</p>");
         } else {
-            updateInfo = getUpdateInfo(sb);
+            try {
+                updateInfo = getUpdateInfo();
+            } catch (Exception e) {
+                log.error(e.getMessage(), e);
+                htmlBodyContent.append("<p>Failed to get update information. Exception: " + e.getMessage() + "</p>");                // TODO: handle exception
+            }
             String idVersionRevisionCurent = installInfo.getId() + "-v-" + installInfo.getVersion() + "-r-" + installInfo.getRevision();
             
-            sb.append("<p>");
-            sb.append("Your installed yanel is: " + installInfo.getId() + "-v-" + installInfo.getVersion() + "-r-" + installInfo.getRevision());
-            sb.append("</p>");
+            htmlBodyContent.append("<p>");
+            htmlBodyContent.append("Your installed yanel is: " + installInfo.getId() + "-v-" + installInfo.getVersion() + "-r-" + installInfo.getRevision());
+            htmlBodyContent.append("</p>");
             HashMap newestYanel = updateInfo.getNewestUpdateVersionsOf("id", "wyona-yanel-webapp");
             String idVersionRevisionNewest = (String) newestYanel.get("id") + "-v-" + (String) newestYanel.get("version") + "-r-" + (String) newestYanel.get("revision");
             if (idVersionRevisionNewest.equals(idVersionRevisionCurent)) {
-                sb.append("<p>");
-                sb.append("Your yanel is already the newest version.");
-                sb.append("</p>");
+                htmlBodyContent.append("<p>");
+                htmlBodyContent.append("Your yanel is already the newest version.");
+                htmlBodyContent.append("</p>");
             }else {
-                sb.append("<p>");
-                sb.append("Newest yanel is: " + idVersionRevisionNewest);
-                sb.append("<form method=\"post\"><input type=\"submit\" name=\"button\" value=\"update\"></input><input type=\"hidden\" name=\"update\" value=\"update\"></input><input type=\"hidden\" name=\"updatelink\" value=\""
+                htmlBodyContent.append("<p>");
+                htmlBodyContent.append("Newest yanel is: " + idVersionRevisionNewest);
+                htmlBodyContent.append("<form method=\"post\"><input type=\"submit\" name=\"button\" value=\"update\"></input><input type=\"hidden\" name=\"update\" value=\"update\"></input><input type=\"hidden\" name=\"updatelink\" value=\""
                         + newestYanel.get("updateLink") + "\"/></form>");
-                sb.append("</p>");
+                htmlBodyContent.append("</p>");
             }
 
-            sb.append("<p>");
-            sb.append("Other versions you can get:");
-            sb.append("</p>");
-            sb.append("<ul>");
+            htmlBodyContent.append("<p>");
+            htmlBodyContent.append("Other versions you can get:");
+            htmlBodyContent.append("</p>");
+            htmlBodyContent.append("<ul>");
             for (int i = 0; i < updateInfo.getUpdateVersions().size(); i++) {
                 HashMap versionDetails = (HashMap) updateInfo.getUpdateVersionsOf("id", "wyona-yanel-webapp").get(i);
                 String idVersionRevisionItem = (String) versionDetails.get("id") + "-v-" + (String) versionDetails.get("version") + "-r-" + (String) versionDetails.get("revision");
                 
                 if ( !idVersionRevisionItem.equals(idVersionRevisionCurent) && !idVersionRevisionItem.equals(idVersionRevisionNewest)) {
-                    sb.append("<li>"
+                    htmlBodyContent.append("<li>"
                             + versionDetails.get("title")
                             + "<ul>"
                             + "<li>Version: "
@@ -301,11 +313,11 @@
                             + versionDetails.get("updateLink") + "\"/></form></li>" + "</ul></li>");
                 }
             }
-            sb.append("</ul>");
+            htmlBodyContent.append("</ul>");
             
-            sb.append("<p>");
-            sb.append("Installed versions:");
-            sb.append("</p>");
+            htmlBodyContent.append("<p>");
+            htmlBodyContent.append("Installed versions:");
+            htmlBodyContent.append("</p>");
             TomcatContextHandler tomcatContextHandler = null;
             Map contextAndWebapp = null;
             try {
@@ -313,125 +325,133 @@
                 contextAndWebapp = tomcatContextHandler.getContextAndWebapp();
             } catch (Exception e) {
                 log.error(e.getMessage(), e);
-                sb.append("<p>Lookup for context and webabs failed. Exception: " + e.getMessage() + "</p>");
+                htmlBodyContent.append("<p>Lookup for context and webabs failed. Exception: " + e.getMessage() + "</p>");
             }
 
-            sb.append("<table class=\"sortable\">");
-            sb.append("<thead>");
-            sb.append("<tr><th>Context</th><th>Webapp</th></tr>");
-            sb.append("</thead>");
-            sb.append("<tbody>");
+            htmlBodyContent.append("<table class=\"sortable\">");
+            htmlBodyContent.append("<thead>");
+            htmlBodyContent.append("<tr><th>Context</th><th>Webapp</th></tr>");
+            htmlBodyContent.append("</thead>");
+            htmlBodyContent.append("<tbody>");
             Iterator iterator = contextAndWebapp.keySet().iterator();
             
             while (iterator.hasNext()) {
                 String context = (String) iterator.next();
                 String webapp = (String) contextAndWebapp.get(context);
-                sb.append("<tr><td><a href=\"" + "http://" + request.getServerName() + ":"
+                htmlBodyContent.append("<tr><td><a href=\"" + "http://" + request.getServerName() + ":"
                     + request.getServerPort() + "/" + context.replaceAll("/", "") + "\">" + context + "</a></td><td>" + webapp + "</td></tr>");
             }
-            sb.append("</tbody>");
-            sb.append("</table>");
+            htmlBodyContent.append("</tbody>");
+            htmlBodyContent.append("</table>");
         }
     }
 
-    private void getUpdateConfirmScreen(StringBuffer sb) {
-        UpdateInfo updateInfo = getUpdateInfo(sb);
-        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");
-        
-        sb.append("<p>Yanel will download the update-manager which will download and install " + id + "-v-" + version + "-r-" + revision  + "</p>");
-        sb.append("<p>Do you want to continue?</p>");
-        sb.append("<p>");
-        sb.append("<form method=\"post\">");
-        sb.append("<input type=\"submit\" name=\"button\" value=\"YES\"></input><input type=\"hidden\" name=\"updateconfirmed\" value=\"updateconfirmed\"/><input type=\"hidden\" name=\"updatelink\" value=\""
-        + request.getParameter("updatelink") + "\"/>");
-        sb.append("</form>");
-        sb.append("<form method=\"post\">");
-        sb.append("<input type=\"submit\" name=\"button\" value=\"NO\"></input>");
-        sb.append("</form>");
-        sb.append("</p>");
+    private void getUpdateConfirmScreen() {
+        try {
+            UpdateInfo updateInfo = getUpdateInfo();
+            Map bestUpdater = getBestUpdater();
+            TomcatContextHandler tomcatContextHandler = new TomcatContextHandler(request);
+            
+            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");
+            
+            if (tomcatContextHandler.getWebappOfContext(bestUpdater.get("id") + "-v-" + bestUpdater.get("version") + "-r-" + bestUpdater.get("revision")) != null) {
+                htmlBodyContent.append("<p>Yanel will redirect you to the update-manager which will download and install " + id + "-v-" + version + "-r-" + revision  + "</p>");
+                htmlBodyContent.append("<p>Do you want to continue?</p>");
+                htmlBodyContent.append("<p>");
+                htmlBodyContent.append("<form method=\"post\" action=\"" + "http://" + request.getServerName() + ":" + request.getServerPort() + "/" + bestUpdater.get("id") + "-v-" + bestUpdater.get("version") + "-r-" + bestUpdater.get("revision") + "/\">");
+                htmlBodyContent.append("<input type=\"submit\" name=\"button\" value=\"YES\"/>");
+                htmlBodyContent.append("<input type=\"hidden\" name=\"updateconfirmed\" value=\"updateconfirmed\"/>");
+                htmlBodyContent.append("<input type=\"hidden\" name=\"updatelink\" value=\"" + request.getParameter("updatelink") + "\"/>");
+                htmlBodyContent.append("</form>");
+                htmlBodyContent.append("<form method=\"post\">");
+                htmlBodyContent.append("<input type=\"submit\" name=\"button\" value=\"Cancel\"></input>");
+                htmlBodyContent.append("</form>");
+                htmlBodyContent.append("</p>");
+            } else {
+                htmlBodyContent.append("<p>Yanel will download the update-manager (" + tomcatContextHandler.getWebappOfContext(bestUpdater.get("id") + "-v-" + bestUpdater.get("version") + "-r-" + bestUpdater.get("revision")) + ") which will download and install " + id + "-v-" + version + "-r-" + revision  + "</p>");
+                htmlBodyContent.append("<p>Do you want to continue?</p>");
+                htmlBodyContent.append("<p>");
+                htmlBodyContent.append("<form method=\"post\">");
+                htmlBodyContent.append("<input type=\"submit\" name=\"button\" value=\"YES\"/>");
+                htmlBodyContent.append("<input type=\"hidden\" name=\"updateconfirmed\" value=\"updateconfirmed\"/>");
+                htmlBodyContent.append("<input type=\"hidden\" name=\"updatelink\" value=\"" + request.getParameter("updatelink") + "\"/>");
+                htmlBodyContent.append("</form>");
+                htmlBodyContent.append("<form method=\"post\">");
+                htmlBodyContent.append("<input type=\"submit\" name=\"button\" value=\"Cancel\"></input>");
+                htmlBodyContent.append("</form>");
+                htmlBodyContent.append("</p>");
+            }
+        }  catch (Exception e) {
+            log.error(e.getMessage(), e);
+            htmlBodyContent.append("<p>An error occoured. Exception: " + e.getMessage() + "</p>");
+        }
+
     }
     
-    private void getUpdateScreen(StringBuffer sb) {
-        
-        WarFetcher warFetcher = null;
+    private void getUpdateScreen() {
         try {
             String destDir = request.getSession().getServletContext().getRealPath(".") + File.separator + "..";
-            Map bestUpdater = getBestUpdater(sb);
+            Map bestUpdater = getBestUpdater();
             
-            warFetcher = new WarFetcher(request, (String) bestUpdater.get("updateLink"), destDir);
+            WarFetcher warFetcher = new WarFetcher(request, (String) bestUpdater.get("updateLink"), destDir);
             warFetcher.fetch();
-
+            
             TomcatContextHandler tomcatContextHandler = new TomcatContextHandler(request);
-            tomcatContextHandler.setContext("updater", bestUpdater.get("id") + "-v-" + bestUpdater.get("version") + "-r-" + bestUpdater.get("revision"));
-
-            sb.append("<p>");
-            sb.append("Update done.<br/>");
-            sb.append("You will be redirected to the updater which will automaticaly download and install the requested yanel.");
-            sb.append("</p>");
+            tomcatContextHandler.setContext(bestUpdater.get("id") + "-v-" + bestUpdater.get("version") + "-r-" + bestUpdater.get("revision"), bestUpdater.get("id") + "-v-" + bestUpdater.get("version") + "-r-" + bestUpdater.get("revision"));
+            
+            htmlBodyContent.append("<p>");
+            htmlBodyContent.append("Update done.<br/>");
+            htmlBodyContent.append("You will be redirected to the updater which will automaticaly download and install the requested yanel.");
+            htmlBodyContent.append("</p>");
+            
+            htmlHeadContent.append("<meta http-equiv=\"refresh\" content=\"10; URL=" + "http://" + request.getServerName() + ":" + request.getServerPort() + "/" + bestUpdater.get("id") + "-v-" + bestUpdater.get("version") + "-r-" + bestUpdater.get("revision") + "/" + "?updatelink=" + request.getParameter("updatelink") + "\"/>");
         } catch (Exception e) {
             log.error(e.getMessage(), e);
-            sb.append("<p>Update failed. Exception: " + e.getMessage() + "</p>");
+            htmlBodyContent.append("<p>Update failed. Exception: " + e.getMessage() + "</p>");
         }
     }
 
-    private InstallInfo getInstallInfo(StringBuffer sb) {
+    private InstallInfo getInstallInfo() throws Exception {
         InstallInfo installInfo = null;
-        try {
-            return installInfo = new InstallInfo(request);
-        } catch (Exception e) {
-            log.error(e.getMessage(), e);
-            sb.append("<p>Exception: " + e.getMessage() + "</p>");
-            return null;
-        }
+        return installInfo = new InstallInfo(request);
+
     }
 
-    private UpdateInfo getUpdateInfo(StringBuffer sb) {
+    private UpdateInfo getUpdateInfo() throws Exception {
         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;
-        }
+        URL UpdateRdfUrl = new URL(getInstallInfo().getUpdateURL());
+        InputStream updateRdfIn = UpdateRdfUrl.openStream();
+        return updateInfo = new UpdateInfo(updateRdfIn, getInstallInfo());
     }
     
-    private HashMap getBestUpdater(StringBuffer sb) {
-        UpdateInfo updateInfo = getUpdateInfo(sb);
-        InstallInfo installInfo = getInstallInfo(sb);
+    private HashMap getBestUpdater() throws Exception {
+        InstallInfo installInfo = getInstallInfo();
+        UpdateInfo updateInfo = getUpdateInfo();
         
         HashMap updateVersionDetails = updateInfo.getUpdateVersionDetail("updateLink",
                 request.getParameter("updatelink"));
+        VersionComparator versionComparator = new VersionComparator();
         String updateId = (String) updateVersionDetails.get("id");
         String updateVersion = (String) updateVersionDetails.get("version");
         String updateRevision = (String) updateVersionDetails.get("revision");
-        
-        ArrayList updaters = updateInfo.getUpdateVersionsOf("type", "updater", installInfo.getVersion(), installInfo.getRevision());
-        VersionComparator versionComparator = new VersionComparator();  
-        for (int i = 0; i < updaters.size(); i++) {
-            HashMap versionDetail = (HashMap) updaters.get(i);
-            if (versionComparator.compare((String) versionDetail.get("targetApllicationMinVersion"), updateVersion) > 0 ) {
-                updaters.remove(i);
-            }
-            if (versionComparator.compare((String) versionDetail.get("targetApllicationMaxVersion"), updateVersion) < 0 ) {
-                updaters.remove(i);
-            }
+        ArrayList bestUpdater = updateInfo.getUpdateVersionsOf("type", "updater", installInfo.getRevision());
+        for (int i = 0; i < bestUpdater.size(); i++) {
+            HashMap versionDetail = (HashMap) bestUpdater.get(i);
             if (versionComparator.compare((String) versionDetail.get("targetApllicationMinRevision"), updateRevision) > 0 ) {
-                updaters.remove(i);
+                bestUpdater.remove(i);
             }
             if (versionComparator.compare((String) versionDetail.get("targetApllicationMaxRevision"), updateRevision) < 0 ) {
-                updaters.remove(i);
+                bestUpdater.remove(i);
             }
         }
-        HashMap bestUpdater = (HashMap) updaters.get(updaters.size() - 1);
-        return bestUpdater;
+        Collections.sort(bestUpdater, new UpdateInfoVersionComparator());
+        if (bestUpdater.size() < 1) {
+            throw new Exception("No updater found for updating your current version(" + installInfo.getId() + "-v-" + installInfo.getVersion() + "-r-" + installInfo.getRevision() + ") to your requested version (" + updateId + "-v-" + updateVersion + "-r-" + updateRevision + ")");
+        }
+        return (HashMap) bestUpdater.get(bestUpdater.size() - 1);
     }
 
     /**




More information about the Yanel-commits mailing list