001 /** 002 * Licensed to the Apache Software Foundation (ASF) under one or more 003 * contributor license agreements. See the NOTICE file distributed with 004 * this work for additional information regarding copyright ownership. 005 * The ASF licenses this file to You under the Apache License, Version 2.0 006 * (the "License"); you may not use this file except in compliance with 007 * the License. You may obtain a copy of the License at 008 * 009 * http://www.apache.org/licenses/LICENSE-2.0 010 * 011 * Unless required by applicable law or agreed to in writing, software 012 * distributed under the License is distributed on an "AS IS" BASIS, 013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 014 * See the License for the specific language governing permissions and 015 * limitations under the License. 016 */ 017 018 package org.apache.geronimo.console.ajax; 019 020 import java.util.Set; 021 022 import javax.servlet.http.HttpSession; 023 import javax.servlet.http.HttpServletRequest; 024 025 import org.apache.geronimo.console.car.ManagementHelper; 026 import org.apache.geronimo.gbean.AbstractName; 027 import org.apache.geronimo.gbean.AbstractNameQuery; 028 import org.apache.geronimo.kernel.Kernel; 029 import org.apache.geronimo.kernel.KernelRegistry; 030 import org.apache.geronimo.system.plugin.DownloadResults; 031 import org.apache.geronimo.system.plugin.PluginInstaller; 032 import org.apache.geronimo.system.plugin.PluginInstallerGBean; 033 import org.directwebremoting.ScriptSession; 034 import org.directwebremoting.WebContext; 035 import org.directwebremoting.WebContextFactory; 036 import org.directwebremoting.annotations.RemoteMethod; 037 import org.directwebremoting.annotations.RemoteProxy; 038 import org.directwebremoting.proxy.ScriptProxy; 039 040 /** 041 * Provides information to an AJAX client during server side activities. 042 */ 043 @RemoteProxy 044 public class ProgressMonitor { 045 046 private PluginInstaller pluginInstaller = null; 047 048 @RemoteMethod 049 public void getProgressInfo(Integer downloadKey) throws Exception { 050 // DWR objects 051 WebContext wctx = WebContextFactory.get(); 052 ScriptSession scriptSession = wctx.getScriptSession(); 053 //DownloadResults results = getPluginInstaller().checkOnInstall(downloadKey); 054 ScriptProxy scriptProxy = new ScriptProxy(); 055 scriptProxy.addScriptSession(scriptSession); 056 057 PluginInstallerGBean pluginInstallerInternal = (PluginInstallerGBean) getPluginInstaller(); 058 DownloadResults results = pluginInstallerInternal.checkOnInstall(downloadKey, false); 059 060 //In the event results.isFinished is passed in true during polling 061 scriptProxy.addFunctionCall("setMainMessage", results.getCurrentMessage()); 062 scriptProxy.addFunctionCall("setProgressCurrentFile", results.getCurrentFile()); 063 064 while (!results.isFinished()) { 065 // update the progress bar 066 scriptProxy.addFunctionCall("setProgressCurrentFile", results.getCurrentFile()); 067 scriptProxy.addFunctionCall("setProgressPercent", results.getCurrentFilePercent()); 068 scriptProxy.addFunctionCall("setMainMessage", results.getCurrentMessage()); 069 070 // get an update on the download progress, sleep time reduce to poll faster for smaller files 071 Thread.sleep(100); 072 //results = getPluginInstaller().checkOnInstall(downloadKey); 073 results = pluginInstallerInternal.checkOnInstall(downloadKey, false); 074 } 075 076 if(results.isFailed()) { 077 scriptProxy.addFunctionCall("setErrorMessage", results.getFailure().toString()); 078 throw new Exception("Unable to install configuration", results.getFailure()); 079 } 080 081 //Fills bar at the end in the event the poller didn't catch the 100 082 scriptProxy.addFunctionCall("setProgressFull"); 083 scriptProxy.addFunctionCall("setFinished"); 084 085 } 086 087 private synchronized PluginInstaller getPluginInstaller() throws Exception { 088 if (pluginInstaller == null) { 089 Kernel kernel = KernelRegistry.getSingleKernel(); 090 Set<AbstractName> pluginInstallers = kernel.listGBeans(new AbstractNameQuery(PluginInstaller.class.getName())); 091 if (pluginInstallers.size() == 0) { 092 throw new IllegalStateException("No plugin installer registered"); 093 } 094 pluginInstaller = (PluginInstaller) kernel.getGBean(pluginInstallers.iterator().next()); 095 } 096 return pluginInstaller; 097 } 098 }