001 /* 002 * Licensed to the Apache Software Foundation (ASF) under one 003 * or more contributor license agreements. See the NOTICE file 004 * distributed with this work for additional information 005 * regarding copyright ownership. The ASF licenses this file 006 * to you under the Apache License, Version 2.0 (the 007 * "License"); you may not use this file except in compliance 008 * with the License. You may obtain a copy of the License at 009 * 010 * http://www.apache.org/licenses/LICENSE-2.0 011 * 012 * Unless required by applicable law or agreed to in writing, 013 * software distributed under the License is distributed on an 014 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 015 * KIND, either express or implied. See the License for the 016 * specific language governing permissions and limitations 017 * under the License. 018 */ 019 020 021 package org.apache.geronimo.console.car; 022 023 import java.util.ArrayList; 024 import java.util.List; 025 import java.util.Set; 026 027 import javax.enterprise.deploy.spi.DeploymentManager; 028 import javax.enterprise.deploy.spi.exceptions.DeploymentManagerCreationException; 029 import javax.enterprise.deploy.spi.factories.DeploymentFactory; 030 import javax.portlet.PortletRequest; 031 import javax.portlet.PortletSession; 032 033 import org.apache.geronimo.console.util.PortletManager; 034 import org.apache.geronimo.deployment.plugin.factories.DeploymentFactoryWithKernel; 035 import org.apache.geronimo.gbean.AbstractName; 036 import org.apache.geronimo.gbean.AbstractNameQuery; 037 import org.apache.geronimo.kernel.GBeanNotFoundException; 038 import org.apache.geronimo.kernel.Kernel; 039 import org.apache.geronimo.system.plugin.PluginInstaller; 040 import org.apache.geronimo.system.plugin.PluginRepositoryList; 041 import org.apache.geronimo.system.plugin.ServerArchiver; 042 043 /** 044 * @version $Rev: 706640 $ $Date: 2008-10-21 14:44:05 +0000 (Tue, 21 Oct 2008) $ 045 */ 046 public class ManagementHelper { 047 048 private final static String PLUGIN_HELPER_KEY = "org.apache.geronimo.console.PluginManagementHelper"; 049 private final Kernel kernel; 050 private PluginInstaller pluginInstaller; 051 private ServerArchiver archiver; 052 private List<PluginRepositoryList> pluginRepositoryLists; 053 054 public static ManagementHelper getManagementHelper(PortletRequest request) { 055 ManagementHelper helper = (ManagementHelper) request.getPortletSession(true).getAttribute(PLUGIN_HELPER_KEY, PortletSession.APPLICATION_SCOPE); 056 if (helper == null) { 057 Kernel kernel = PortletManager.getKernel(); 058 helper = new ManagementHelper(kernel); 059 request.getPortletSession().setAttribute(PLUGIN_HELPER_KEY, helper, PortletSession.APPLICATION_SCOPE); 060 } 061 return helper; 062 } 063 064 public ManagementHelper(Kernel kernel) { 065 this.kernel = kernel; 066 } 067 068 public PluginInstaller getPluginInstaller() { 069 if (pluginInstaller == null) { 070 Set<AbstractName> pluginInstallers = kernel.listGBeans(new AbstractNameQuery(PluginInstaller.class.getName())); 071 if (pluginInstallers.size() == 0) { 072 throw new IllegalStateException("No plugin installer registered"); 073 } 074 try { 075 pluginInstaller = (PluginInstaller) kernel.getGBean(pluginInstallers.iterator().next()); 076 } catch (GBeanNotFoundException e) { 077 throw new IllegalStateException("Plugin installer cannot be retrieved from kernel"); 078 } 079 } 080 return pluginInstaller; 081 } 082 083 public ServerArchiver getArchiver() { 084 if (archiver == null) { 085 Set<AbstractName> archivers = kernel.listGBeans(new AbstractNameQuery(ServerArchiver.class.getName())); 086 if (archivers.size() == 0) { 087 throw new IllegalStateException("No plugin installer registered"); 088 } 089 try { 090 archiver = (ServerArchiver) kernel.getGBean(archivers.iterator().next()); 091 } catch (GBeanNotFoundException e) { 092 throw new IllegalStateException("Plugin installer cannot be retrieved from kernel"); 093 } 094 } 095 return archiver; 096 } 097 098 public List<PluginRepositoryList> getPluginRepositoryLists() { 099 if (this.pluginRepositoryLists == null) { 100 Set<AbstractName> names = kernel.listGBeans(new AbstractNameQuery(PluginRepositoryList.class.getName())); 101 List<PluginRepositoryList> pluginRepositoryLists = new ArrayList<PluginRepositoryList>(names.size()); 102 for (AbstractName name : names) { 103 try { 104 pluginRepositoryLists.add((PluginRepositoryList) kernel.getGBean(name)); 105 } catch (GBeanNotFoundException e) { 106 //ignore? 107 } 108 } 109 this.pluginRepositoryLists = pluginRepositoryLists; 110 } 111 return this.pluginRepositoryLists; 112 } 113 114 public DeploymentManager getDeploymentManager() { 115 DeploymentFactory factory = new DeploymentFactoryWithKernel(kernel); 116 try { 117 return factory.getDeploymentManager("deployer:geronimo:inVM", null, null); 118 } catch (DeploymentManagerCreationException e) { 119 // log.error(e.getMessage(), e); 120 return null; 121 } 122 } 123 124 }