You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by am...@apache.org on 2006/04/23 05:46:12 UTC

svn commit: r396212 - in /geronimo/branches/1.1: applications/console-standard/src/java/org/apache/geronimo/console/ajax/ applications/console-standard/src/java/org/apache/geronimo/console/car/ applications/console-standard/src/webapp/WEB-INF/view/ajax...

Author: ammulder
Date: Sat Apr 22 20:46:10 2006
New Revision: 396212

URL: http://svn.apache.org/viewcvs?rev=396212&view=rev
Log:
Fix progress bar for plugin installer
 - works on Safari
 - directs to a new page and shows progress from there (doesn't hang
   while submitting)
 - Portlet-friendly (or friendlier)
This probably means that the download database driver page needs some
  attention

Added:
    geronimo/branches/1.1/applications/console-standard/src/java/org/apache/geronimo/console/car/DownloadStatusHandler.java
    geronimo/branches/1.1/applications/console-standard/src/webapp/WEB-INF/view/car/downloadStatus.jsp
Modified:
    geronimo/branches/1.1/applications/console-standard/src/java/org/apache/geronimo/console/ajax/ProgressInfo.java
    geronimo/branches/1.1/applications/console-standard/src/java/org/apache/geronimo/console/car/BaseImportExportHandler.java
    geronimo/branches/1.1/applications/console-standard/src/java/org/apache/geronimo/console/car/DownloadCARHandler.java
    geronimo/branches/1.1/applications/console-standard/src/java/org/apache/geronimo/console/car/ImportExportPortlet.java
    geronimo/branches/1.1/applications/console-standard/src/webapp/WEB-INF/view/ajax/progressbar.jsp
    geronimo/branches/1.1/applications/console-standard/src/webapp/WEB-INF/view/car/download.jsp
    geronimo/branches/1.1/etc/project.properties

Modified: geronimo/branches/1.1/applications/console-standard/src/java/org/apache/geronimo/console/ajax/ProgressInfo.java
URL: http://svn.apache.org/viewcvs/geronimo/branches/1.1/applications/console-standard/src/java/org/apache/geronimo/console/ajax/ProgressInfo.java?rev=396212&r1=396211&r2=396212&view=diff
==============================================================================
--- geronimo/branches/1.1/applications/console-standard/src/java/org/apache/geronimo/console/ajax/ProgressInfo.java (original)
+++ geronimo/branches/1.1/applications/console-standard/src/java/org/apache/geronimo/console/ajax/ProgressInfo.java Sat Apr 22 20:46:10 2006
@@ -23,8 +23,9 @@
     private int progressPercent = -1;
     private String mainMessage;
     private String subMessage;
+    private boolean finished;
 
-	public int getProgressPercent() {
+    public int getProgressPercent() {
 		return progressPercent;
 	}
 
@@ -47,5 +48,12 @@
 	public void setSubMessage(String subMessage) {
 		this.subMessage = subMessage;
 	}
-    
+
+    public boolean isFinished() {
+        return finished;
+    }
+
+    public void setFinished(boolean finished) {
+        this.finished = finished;
+    }
 }

Modified: geronimo/branches/1.1/applications/console-standard/src/java/org/apache/geronimo/console/car/BaseImportExportHandler.java
URL: http://svn.apache.org/viewcvs/geronimo/branches/1.1/applications/console-standard/src/java/org/apache/geronimo/console/car/BaseImportExportHandler.java?rev=396212&r1=396211&r2=396212&view=diff
==============================================================================
--- geronimo/branches/1.1/applications/console-standard/src/java/org/apache/geronimo/console/car/BaseImportExportHandler.java (original)
+++ geronimo/branches/1.1/applications/console-standard/src/java/org/apache/geronimo/console/car/BaseImportExportHandler.java Sat Apr 22 20:46:10 2006
@@ -25,9 +25,11 @@
  */
 public abstract class BaseImportExportHandler extends MultiPageAbstractHandler {
     protected static final String CONFIG_LIST_SESSION_KEY = "console.plugins.ConfigurationList";
+    protected static final String DOWNLOAD_RESULTS_SESSION_KEY = "console.plugins.DownloadResults";
     protected static final String INDEX_MODE = "index";
     protected static final String LIST_MODE = "list";
     protected static final String DOWNLOAD_MODE = "download";
+    protected static final String DOWNLOAD_STATUS_MODE = "downloadStatus";
     protected static final String RESULTS_MODE = "results";
     protected static final String CONFIGURE_EXPORT_MODE = "configure";
     protected static final String CONFIRM_EXPORT_MODE = "confirm";

Modified: geronimo/branches/1.1/applications/console-standard/src/java/org/apache/geronimo/console/car/DownloadCARHandler.java
URL: http://svn.apache.org/viewcvs/geronimo/branches/1.1/applications/console-standard/src/java/org/apache/geronimo/console/car/DownloadCARHandler.java?rev=396212&r1=396211&r2=396212&view=diff
==============================================================================
--- geronimo/branches/1.1/applications/console-standard/src/java/org/apache/geronimo/console/car/DownloadCARHandler.java (original)
+++ geronimo/branches/1.1/applications/console-standard/src/java/org/apache/geronimo/console/car/DownloadCARHandler.java Sat Apr 22 20:46:10 2006
@@ -124,56 +124,50 @@
             ConfigurationInstaller configInstaller = PortletManager.getCurrentServer(request).getConfigurationInstaller(); 
             Object downloadKey = configInstaller.startInstall(installList, user, pass);
             ProgressInfo progressInfo = new ProgressInfo();
-            request.getPortletSession().setAttribute(ProgressInfo.PROGRESS_INFO_KEY, progressInfo, PortletSession.APPLICATION_SCOPE);
-            DownloadResults results;
-            while (true) {
-            	results = configInstaller.checkOnInstall(downloadKey);
-            	progressInfo.setMainMessage(results.getCurrentMessage());
-            	progressInfo.setProgressPercent(results.getCurrentFilePercent());
-            	if (results.isFinished() || results.isFailed()) {
-                	break;
-            	} else {
-            		try { Thread.sleep(1000); } catch (InterruptedException e) {
-                        log.error("Download monitor thread interrupted", e);
-					}
-            	}
-            }
-            if(results.isFailed()) {
-                throw new PortletException("Unable to install configuration", results.getFailure());
-            }
-            List dependencies = new ArrayList();
-            for (int i = 0; i < results.getDependenciesInstalled().length; i++) {
-                Artifact uri = results.getDependenciesInstalled()[i];
-                dependencies.add(new InstallResults(uri.toString(), "installed"));
-            }
-            for (int i = 0; i < results.getDependenciesPresent().length; i++) {
-                Artifact uri = results.getDependenciesPresent()[i];
-                dependencies.add(new InstallResults(uri.toString(), "already present"));
-            }
-            request.getPortletSession(true).setAttribute("car.install.results", dependencies);
+            request.getPortletSession(true).setAttribute(ProgressInfo.PROGRESS_INFO_KEY, progressInfo, PortletSession.APPLICATION_SCOPE);
+            // Kick off the download monitoring
+            new Thread(new Installer(configInstaller, downloadKey, progressInfo, request.getPortletSession(true))).start();
+
             response.setRenderParameter("configId", configId);
             response.setRenderParameter("repository", repo);
             if(!isEmpty(user)) response.setRenderParameter("repo-user", user);
             if(!isEmpty(pass)) response.setRenderParameter("repo-pass", pass);
         }
-        return RESULTS_MODE+BEFORE_ACTION;
+        return DOWNLOAD_STATUS_MODE+BEFORE_ACTION;
     }
 
-    public static class InstallResults implements Serializable {
-        private String name;
-        private String action;
+    public static class Installer implements Runnable {
+        private ConfigurationInstaller configInstaller;
+        private Object downloadKey;
+        private ProgressInfo progressInfo;
+        private PortletSession session;
 
-        public InstallResults(String name, String action) {
-            this.name = name;
-            this.action = action;
+        public Installer(ConfigurationInstaller configInstaller, Object downloadKey, ProgressInfo progressInfo, PortletSession session) {
+            this.configInstaller = configInstaller;
+            this.downloadKey = downloadKey;
+            this.progressInfo = progressInfo;
+            this.session = session;
         }
 
-        public String getName() {
-            return name;
-        }
+        public void run() {
+            DownloadResults results;
 
-        public String getAction() {
-            return action;
+            while (true) {
+            	results = configInstaller.checkOnInstall(downloadKey);
+            	progressInfo.setMainMessage(results.getCurrentMessage());
+            	progressInfo.setProgressPercent(results.getCurrentFilePercent());
+                progressInfo.setFinished(results.isFinished());
+                log.info(progressInfo.getMainMessage());
+                if (results.isFinished()) {
+                    log.info("Installation finished");
+                    session.setAttribute(DOWNLOAD_RESULTS_SESSION_KEY, results);
+                    break;
+            	} else {
+            		try { Thread.sleep(1000); } catch (InterruptedException e) {
+                        log.error("Download monitor thread interrupted", e);
+					}
+            	}
+            }
         }
     }
 }

Added: geronimo/branches/1.1/applications/console-standard/src/java/org/apache/geronimo/console/car/DownloadStatusHandler.java
URL: http://svn.apache.org/viewcvs/geronimo/branches/1.1/applications/console-standard/src/java/org/apache/geronimo/console/car/DownloadStatusHandler.java?rev=396212&view=auto
==============================================================================
--- geronimo/branches/1.1/applications/console-standard/src/java/org/apache/geronimo/console/car/DownloadStatusHandler.java (added)
+++ geronimo/branches/1.1/applications/console-standard/src/java/org/apache/geronimo/console/car/DownloadStatusHandler.java Sat Apr 22 20:46:10 2006
@@ -0,0 +1,113 @@
+/**
+ * Copyright 2006 The Apache Software Foundation
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+package org.apache.geronimo.console.car;
+
+import java.io.IOException;
+import java.io.Serializable;
+import java.net.URL;
+import java.util.List;
+import java.util.ArrayList;
+import javax.portlet.ActionRequest;
+import javax.portlet.ActionResponse;
+import javax.portlet.PortletException;
+import javax.portlet.RenderRequest;
+import javax.portlet.RenderResponse;
+import javax.portlet.PortletSession;
+import javax.security.auth.login.FailedLoginException;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.geronimo.console.MultiPageModel;
+import org.apache.geronimo.console.ajax.ProgressInfo;
+import org.apache.geronimo.console.util.PortletManager;
+import org.apache.geronimo.system.configuration.ConfigurationMetadata;
+import org.apache.geronimo.system.configuration.ConfigurationList;
+import org.apache.geronimo.system.configuration.ConfigurationInstaller;
+import org.apache.geronimo.system.configuration.DownloadResults;
+import org.apache.geronimo.kernel.repository.Artifact;
+
+/**
+ * Handler for the initial download screen.
+ *
+ * @version $Rev: 46019 $ $Date: 2004-09-14 05:56:06 -0400 (Tue, 14 Sep 2004) $
+ */
+public class DownloadStatusHandler extends BaseImportExportHandler {
+    private final static Log log = LogFactory.getLog(DownloadStatusHandler.class);
+
+    public DownloadStatusHandler() {
+        super(DOWNLOAD_STATUS_MODE, "/WEB-INF/view/car/downloadStatus.jsp");
+    }
+
+    public String actionBeforeView(ActionRequest request, ActionResponse response, MultiPageModel model) throws PortletException, IOException {
+        return getMode();
+    }
+
+    public void renderView(RenderRequest request, RenderResponse response, MultiPageModel model) throws PortletException, IOException {
+        String configId = request.getParameter("configId");
+        String repo = request.getParameter("repository");
+        String user = request.getParameter("repo-user");
+        String pass = request.getParameter("repo-pass");
+        request.setAttribute("configId", configId);
+        request.setAttribute("repository", repo);
+        request.setAttribute("repouser", user);
+        request.setAttribute("repopass", pass);
+    }
+
+    public String actionAfterView(ActionRequest request, ActionResponse response, MultiPageModel model) throws PortletException, IOException {
+        String repo = request.getParameter("repository");
+        String user = request.getParameter("repo-user");
+        String pass = request.getParameter("repo-pass");
+        String configId = request.getParameter("configId");
+
+        DownloadResults results = (DownloadResults) request.getPortletSession(true).getAttribute(DOWNLOAD_RESULTS_SESSION_KEY);
+        if(results.isFailed()) {
+            throw new PortletException("Unable to install configuration", results.getFailure());
+        }
+        List dependencies = new ArrayList();
+        for (int i = 0; i < results.getDependenciesInstalled().length; i++) {
+            Artifact uri = results.getDependenciesInstalled()[i];
+            dependencies.add(new InstallResults(uri.toString(), "installed"));
+        }
+        for (int i = 0; i < results.getDependenciesPresent().length; i++) {
+            Artifact uri = results.getDependenciesPresent()[i];
+            dependencies.add(new InstallResults(uri.toString(), "already present"));
+        }
+        request.getPortletSession(true).setAttribute("car.install.results", dependencies);
+
+        response.setRenderParameter("configId", configId);
+        response.setRenderParameter("repository", repo);
+        if(!isEmpty(user)) response.setRenderParameter("repo-user", user);
+        if(!isEmpty(pass)) response.setRenderParameter("repo-pass", pass);
+        return RESULTS_MODE+BEFORE_ACTION;
+    }
+
+    public static class InstallResults implements Serializable {
+        private String name;
+        private String action;
+
+        public InstallResults(String name, String action) {
+            this.name = name;
+            this.action = action;
+        }
+
+        public String getName() {
+            return name;
+        }
+
+        public String getAction() {
+            return action;
+        }
+    }
+}

Modified: geronimo/branches/1.1/applications/console-standard/src/java/org/apache/geronimo/console/car/ImportExportPortlet.java
URL: http://svn.apache.org/viewcvs/geronimo/branches/1.1/applications/console-standard/src/java/org/apache/geronimo/console/car/ImportExportPortlet.java?rev=396212&r1=396211&r2=396212&view=diff
==============================================================================
--- geronimo/branches/1.1/applications/console-standard/src/java/org/apache/geronimo/console/car/ImportExportPortlet.java (original)
+++ geronimo/branches/1.1/applications/console-standard/src/java/org/apache/geronimo/console/car/ImportExportPortlet.java Sat Apr 22 20:46:10 2006
@@ -37,6 +37,7 @@
         addHelper(new ResultsHandler(), config);
         addHelper(new ExportConfigHandler(), config);
         addHelper(new ExportHandler(), config);
+        addHelper(new DownloadStatusHandler(), config);
     }
 
     protected String getModelJSPVariableName() {

Modified: geronimo/branches/1.1/applications/console-standard/src/webapp/WEB-INF/view/ajax/progressbar.jsp
URL: http://svn.apache.org/viewcvs/geronimo/branches/1.1/applications/console-standard/src/webapp/WEB-INF/view/ajax/progressbar.jsp?rev=396212&r1=396211&r2=396212&view=diff
==============================================================================
--- geronimo/branches/1.1/applications/console-standard/src/webapp/WEB-INF/view/ajax/progressbar.jsp (original)
+++ geronimo/branches/1.1/applications/console-standard/src/webapp/WEB-INF/view/ajax/progressbar.jsp Sat Apr 22 20:46:10 2006
@@ -1,52 +1,69 @@
+<%@ taglib uri="http://java.sun.com/portlet" prefix="portlet"%>
+<portlet:defineObjects/>
 <% String dwrForwarderServlet = org.apache.geronimo.console.util.PortletManager.getConsoleFrameworkServletPath(request) + "/../dwr"; %>
 <script type='text/javascript' src='<%= dwrForwarderServlet %>/interface/ProgressMonitor.js'></script>
 <script type='text/javascript' src='<%= dwrForwarderServlet %>/engine.js'></script>
 <script type='text/javascript' src='<%= dwrForwarderServlet %>/util.js'></script>
 
-<script>
-function refreshProgress()
+<script type="text/javascript">
+DWREngine.setErrorHandler(<portlet:namespace/>onError);
+function <portlet:namespace/>refreshProgress()
 {
-    ProgressMonitor.getProgressInfo(updateProgress);
+    metadata = {};
+    metadata.callback=<portlet:namespace/>updateProgress;
+    metadata.errorHandler=<portlet:namespace/>onError;
+    ProgressMonitor.getProgressInfo(metadata);
 }
 
-function updateProgress(progressInfo)
+function <portlet:namespace/>onError() {
+    DWRUtil.setValue("<portlet:namespace/>ErrorArea", 'I had a problem!');
+}
+
+function <portlet:namespace/>updateProgress(progressInfo)
 {
     // get the bean values from DWR
     var progressPercent = progressInfo.progressPercent;
     var mainMessage = progressInfo.mainMessage;
     var subMessage = progressInfo.subMessage;
+    var finished = progressInfo.finished;
 
     // set the bean values in the HTML document
     if (mainMessage != null) {
-	    document.getElementById('progressMeterMainMessage').innerHTML = mainMessage;
+	    document.getElementById('<portlet:namespace/>progressMeterMainMessage').innerHTML = mainMessage;
     }
     if (subMessage != null) {
-	    document.getElementById('progressMeterSubMessage').innerHTML = subMessage;
+	    document.getElementById('<portlet:namespace/>progressMeterSubMessage').innerHTML = subMessage;
     }
     if (progressPercent > -1) {
-       document.getElementById('progressMeterShell').style.display = 'block';
-       document.getElementById('progressMeterBar').style.width = parseInt(progressPercent * 3.5) + 'px';
+       document.getElementById('<portlet:namespace/>progressMeterShell').style.display = 'block';
+       document.getElementById('<portlet:namespace/>progressMeterBar').style.width = parseInt(progressPercent * 3.5) + 'px';
+    }
+    if(finished) {
+        document.forms['<portlet:namespace/>ContinueForm'].submit();
+    } else {
+        window.setTimeout('<portlet:namespace/>refreshProgress()', 1000);
     }
-    window.setTimeout('refreshProgress()', 1000);
     return true;
 }
 
-function startProgress()
+function <portlet:namespace/>startProgress()
 {
-    document.getElementById('progressMeter').style.display = 'block';
-    document.getElementById('progressMeterMainMessage').innerHTML = 'Processing...';
-    window.setTimeout("refreshProgress()", 1000);
+    document.getElementById('<portlet:namespace/>progressMeterMainMessage').innerHTML = 'Processing...';
+    document.getElementById('<portlet:namespace/>progressMeter').style.display = 'block';
+    window.setTimeout("<portlet:namespace/>refreshProgress()", 1000);
     return true;
 }
 </script>
 
-<div id="progressMeter" style="display: none; padding-top: 5px;">
+<div id="<portlet:namespace/>progressMeter" style="display: none; padding-top: 5px;">
     <br/>
     <div>
-        <div id="progressMeterMainMessage"></div>
-        <div id="progressMeterSubMessage"></div>
-        <div id="progressMeterShell" style="display: none; width: 350px; height: 20px; border: 1px inset; background: #eee;">
-            <div id="progressMeterBar" style="width: 0; height: 20px; border-right: 1px solid #444; background: #9ACB34;"></div>
+        <div id="<portlet:namespace/>progressMeterMainMessage"></div>
+        <div id="<portlet:namespace/>progressMeterSubMessage"></div>
+        <div id="<portlet:namespace/>progressMeterShell" style="display: none; width: 350px; height: 20px; border: 1px inset; background: #eee;">
+            <div id="<portlet:namespace/>progressMeterBar" style="width: 0; height: 20px; border-right: 1px solid #444; background: #9ACB34;"></div>
         </div>
     </div>
 </div>
+
+<div id="<portlet:namespace/>ErrorArea"></div>

Modified: geronimo/branches/1.1/applications/console-standard/src/webapp/WEB-INF/view/car/download.jsp
URL: http://svn.apache.org/viewcvs/geronimo/branches/1.1/applications/console-standard/src/webapp/WEB-INF/view/car/download.jsp?rev=396212&r1=396211&r2=396212&view=diff
==============================================================================
--- geronimo/branches/1.1/applications/console-standard/src/webapp/WEB-INF/view/car/download.jsp (original)
+++ geronimo/branches/1.1/applications/console-standard/src/webapp/WEB-INF/view/car/download.jsp Sat Apr 22 20:46:10 2006
@@ -14,7 +14,7 @@
 </c:forEach>
 </ul>
 
-<form name="<portlet:namespace/>PluginForm" action="<portlet:actionURL/>" onsubmit="startProgress()">
+<form name="<portlet:namespace/>PluginForm" action="<portlet:actionURL/>">
     <input type="hidden" name="file" value="${file}" />
     <input type="hidden" name="configId" value="${configId}" />
     <input type="hidden" name="mode" value="download-after" />
@@ -24,7 +24,5 @@
     <input type="hidden" name="proceed" value="true" />
     <input type="submit" value="Install Plugin" />
 </form>
-
-<jsp:include flush="true" page="../ajax/progressbar.jsp"/>
 
 <p><a href="<portlet:actionURL portletMode="view"><portlet:param name="mode" value="index-before" /></portlet:actionURL>">Cancel</a></p>

Added: geronimo/branches/1.1/applications/console-standard/src/webapp/WEB-INF/view/car/downloadStatus.jsp
URL: http://svn.apache.org/viewcvs/geronimo/branches/1.1/applications/console-standard/src/webapp/WEB-INF/view/car/downloadStatus.jsp?rev=396212&view=auto
==============================================================================
--- geronimo/branches/1.1/applications/console-standard/src/webapp/WEB-INF/view/car/downloadStatus.jsp (added)
+++ geronimo/branches/1.1/applications/console-standard/src/webapp/WEB-INF/view/car/downloadStatus.jsp Sat Apr 22 20:46:10 2006
@@ -0,0 +1,24 @@
+<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
+<%@ taglib uri="http://java.sun.com/portlet" prefix="portlet"%>
+<portlet:defineObjects/>
+
+<p>Processing ${configId}...</p>
+
+
+<form name="<portlet:namespace/>ContinueForm" action="<portlet:actionURL/>">
+    <input type="hidden" name="mode" value="downloadStatus-after" />
+    <input type="hidden" name="configId" value="${configId}" />
+    <input type="hidden" name="repository" value="${repository}" />
+    <input type="hidden" name="repo-user" value="${repouser}" />
+    <input type="hidden" name="repo-pass" value="${repopass}" />
+</form>
+
+<jsp:include flush="true" page="../ajax/progressbar.jsp"/>
+
+<script type="text/javascript">
+    <portlet:namespace/>startProgress();
+</script>
+<%--
+<p><a href="<portlet:actionURL portletMode="view"><portlet:param name="mode" value="index-before" /></portlet:actionURL>">Cancel</a></p>
+--%>
\ No newline at end of file

Modified: geronimo/branches/1.1/etc/project.properties
URL: http://svn.apache.org/viewcvs/geronimo/branches/1.1/etc/project.properties?rev=396212&r1=396211&r2=396212&view=diff
==============================================================================
--- geronimo/branches/1.1/etc/project.properties (original)
+++ geronimo/branches/1.1/etc/project.properties Sat Apr 22 20:46:10 2006
@@ -150,7 +150,7 @@
 daytrader_version=1.1-SNAPSHOT
 derby_version=10.1.1.0
 dom4j_version=1.4
-dwr_version=1.0
+dwr_version=1.1.1
 eclipse_compiler_version=3.0.1
 howl_version=0.1.11
 #security: