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 package org.apache.geronimo.console.dependencyview; 018 019 import java.io.IOException; 020 import java.util.ArrayList; 021 import java.util.Collections; 022 import java.util.HashMap; 023 import java.util.Iterator; 024 import java.util.Map; 025 import java.util.Set; 026 import java.util.SortedSet; 027 028 import org.apache.geronimo.console.BasePortlet; 029 import org.apache.geronimo.console.util.PortletManager; 030 import org.apache.geronimo.console.util.StringTree; 031 import org.apache.geronimo.gbean.AbstractName; 032 import org.apache.geronimo.kernel.repository.Artifact; 033 034 import java.util.List; 035 036 import javax.portlet.ActionRequest; 037 import javax.portlet.ActionResponse; 038 import javax.portlet.PortletConfig; 039 import javax.portlet.PortletException; 040 import javax.portlet.PortletRequestDispatcher; 041 import javax.portlet.RenderRequest; 042 import javax.portlet.RenderResponse; 043 import javax.portlet.WindowState; 044 045 import org.apache.geronimo.kernel.DependencyManager; 046 import org.apache.geronimo.kernel.config.ConfigurationInfo; 047 import org.apache.geronimo.kernel.config.ConfigurationManager; 048 import org.apache.geronimo.kernel.config.ConfigurationModuleType; 049 import org.apache.geronimo.kernel.config.ConfigurationUtil; 050 import org.apache.geronimo.kernel.config.Configuration; 051 import org.apache.geronimo.kernel.repository.ListableRepository; 052 import org.apache.geronimo.kernel.util.ClassLoaderRegistry; 053 import org.apache.geronimo.kernel.repository.ListableRepository; 054 055 public class DependencyViewPortlet extends BasePortlet { 056 057 private static final String NORMALVIEW_JSP = "/WEB-INF/view/dependencyview/view.jsp"; 058 059 private static final String MAXIMIZEDVIEW_JSP = "/WEB-INF/view/dependencyview/view.jsp"; 060 061 private static final String HELPVIEW_JSP = "/WEB-INF/view/dependencyview/help.jsp"; 062 063 private PortletRequestDispatcher normalView; 064 065 private PortletRequestDispatcher maximizedView; 066 067 private PortletRequestDispatcher helpView; 068 069 public void processAction(ActionRequest actionRequest, 070 ActionResponse actionResponse) throws PortletException, IOException { 071 } 072 073 protected void doView(RenderRequest renderRequest, 074 RenderResponse renderResponse) throws IOException, PortletException { 075 if (WindowState.MINIMIZED.equals(renderRequest.getWindowState())) { 076 return; 077 } 078 079 renderRequest.getPortletSession().setAttribute("dependencyTree", 080 getJSONTrees(renderRequest)); 081 082 if (WindowState.NORMAL.equals(renderRequest.getWindowState())) { 083 normalView.include(renderRequest, renderResponse); 084 } else { 085 maximizedView.include(renderRequest, renderResponse); 086 } 087 } 088 089 protected void doHelp(RenderRequest renderRequest, 090 RenderResponse renderResponse) throws PortletException, IOException { 091 helpView.include(renderRequest, renderResponse); 092 } 093 094 public void init(PortletConfig portletConfig) throws PortletException { 095 super.init(portletConfig); 096 normalView = portletConfig.getPortletContext().getRequestDispatcher( 097 NORMALVIEW_JSP); 098 maximizedView = portletConfig.getPortletContext().getRequestDispatcher( 099 MAXIMIZEDVIEW_JSP); 100 helpView = portletConfig.getPortletContext().getRequestDispatcher( 101 HELPVIEW_JSP); 102 103 } 104 105 public void destroy() { 106 normalView = null; 107 maximizedView = null; 108 helpView = null; 109 super.destroy(); 110 } 111 112 private static ArrayList parentNodes = new ArrayList(); 113 114 public static String getJSONTrees(RenderRequest renderRequest) { 115 List list = getTrees(renderRequest); 116 if (list == null) 117 return "[]"; 118 119 StringBuffer stb = new StringBuffer(); 120 stb.append("["); 121 for (int i = 0; i < list.size(); i++) { 122 StringTree node = (StringTree) list.get(i); 123 if (i != 0) 124 stb.append(","); 125 stb.append(node.toJSONObject("" + i)); 126 } 127 stb.append("]"); 128 return stb.toString(); 129 } 130 131 public static void addDependencies(StringTree curr, Configuration conf) { 132 if (curr == null || conf == null) 133 return; 134 StringTree dep = new StringTree("dependencies"); 135 curr.addChild(dep); 136 for (Iterator iterator = conf.getDependencies().iterator(); iterator 137 .hasNext();) { 138 dep.addChild(iterator.next().toString()); 139 } 140 for (Iterator iterator = conf.getServiceParents().iterator(); iterator 141 .hasNext();) { 142 Configuration config = (Configuration) iterator.next(); 143 dep.addChild(config.getId().toString()); 144 } 145 } 146 147 public static ArrayList getTrees(RenderRequest request) { 148 149 ArrayList arryList = new ArrayList(); 150 StringTree treeEAR = new StringTree("Enterprise Applications"); 151 arryList.add(treeEAR); 152 153 StringTree treeEJB = new StringTree("EJBModule"); 154 arryList.add(treeEJB); 155 156 StringTree treeWeb = new StringTree("WebModule"); 157 arryList.add(treeWeb); 158 159 StringTree treeRAR = new StringTree("ResourceAdapterModule"); 160 arryList.add(treeRAR); 161 162 StringTree treeCLI = new StringTree("AppClientModule"); 163 arryList.add(treeCLI); 164 165 StringTree treeSys = new StringTree("System Module"); 166 arryList.add(treeSys); 167 168 org.apache.geronimo.kernel.Kernel kernel = org.apache.geronimo.kernel.KernelRegistry 169 .getSingleKernel(); 170 171 ConfigurationManager configManager = ConfigurationUtil 172 .getConfigurationManager(kernel); 173 174 List infos = configManager.listConfigurations(); 175 for (Iterator infoIterator = infos.iterator(); infoIterator.hasNext();) { 176 ConfigurationInfo info = (ConfigurationInfo) infoIterator.next(); 177 Configuration conf = configManager.getConfiguration(info 178 .getConfigID()); 179 if (conf != null) { 180 StringTree curr = new StringTree(info.getConfigID().toString()); 181 ; 182 switch (info.getType().getValue()) { 183 case 0:// EAR 184 { 185 treeEAR.addChild(curr); 186 break; 187 } 188 case 1:// EJB 189 { 190 treeEJB.addChild(curr); 191 break; 192 } 193 case 2:// CAR 194 { 195 treeCLI.addChild(curr); 196 break; 197 } 198 199 case 3:// RAR 200 { 201 treeRAR.addChild(curr); 202 break; 203 } 204 case 4:// WAR 205 { 206 treeWeb.addChild(curr); 207 break; 208 } 209 case 5:// SERVICE 210 { 211 treeSys.addChild(curr); 212 break; 213 } 214 } 215 216 addDependencies(curr, conf); 217 218 if (info.getType().getValue() == ConfigurationModuleType.EAR 219 .getValue()) { 220 StringTree nodeEJB = new StringTree("EJBModule"); 221 curr.addChild(nodeEJB); 222 223 StringTree nodeWeb = new StringTree("WebModule"); 224 curr.addChild(nodeWeb); 225 226 StringTree nodeRAR = new StringTree("ResourceAdapterModule"); 227 curr.addChild(nodeRAR); 228 229 StringTree nodeCLI = new StringTree("AppClientModule"); 230 curr.addChild(nodeCLI); 231 232 Map query = new HashMap(); 233 query.put("j2eeType", "EJBModule"); 234 query.put("J2EEApplication", info.getConfigID().toString()); 235 Set setEnt = kernel 236 .listGBeans(new org.apache.geronimo.gbean.AbstractNameQuery( 237 null, query)); 238 Iterator iterator = setEnt.iterator(); 239 while (iterator.hasNext()) { 240 AbstractName gb = (AbstractName) iterator.next(); 241 StringTree subCurr = new StringTree(info.getConfigID() 242 .getGroupId() 243 + "/" 244 + info.getConfigID().getArtifactId() 245 + "_" 246 + gb.getNameProperty("name") 247 + "/" 248 + info.getConfigID().getVersion() 249 + "/" 250 + info.getConfigID().getType()); 251 nodeEJB.addChild(subCurr); 252 addDependencies(subCurr, configManager 253 .getConfiguration(gb.getArtifact())); 254 } 255 256 Map query1 = new HashMap(); 257 query1.put("j2eeType", "ResourceAdapterModule"); 258 query1 259 .put("J2EEApplication", info.getConfigID() 260 .toString()); 261 Set setEnt1 = kernel 262 .listGBeans(new org.apache.geronimo.gbean.AbstractNameQuery( 263 null, query1)); 264 265 Iterator iterator1 = setEnt1.iterator(); 266 while (iterator1.hasNext()) { 267 AbstractName gb = (AbstractName) iterator1.next(); 268 StringTree subCurr = new StringTree(info.getConfigID() 269 .getGroupId() 270 + "/" 271 + info.getConfigID().getArtifactId() 272 + "_" 273 + gb.getNameProperty("name") 274 + "/" 275 + info.getConfigID().getVersion() 276 + "/" 277 + info.getConfigID().getType()); 278 nodeRAR.addChild(subCurr); 279 addDependencies(subCurr, configManager 280 .getConfiguration(gb.getArtifact())); 281 } 282 283 for (int i = 0; i < conf.getChildren().size(); i++) { 284 Configuration config = ((Configuration) conf 285 .getChildren().get(i)); 286 StringTree subCurr = new StringTree(config 287 .getAbstractName().toString()); 288 nodeWeb.addChild(subCurr); 289 addDependencies(subCurr, config); 290 } 291 292 for (Iterator iter = conf.getOwnedConfigurations() 293 .iterator(); iter.hasNext();) { 294 Artifact name = (Artifact) iter.next(); 295 StringTree subCurr = new StringTree(name.toString()); 296 nodeCLI.addChild(subCurr); 297 addDependencies(subCurr, configManager 298 .getConfiguration(name)); 299 } 300 301 } 302 303 } 304 305 } 306 307 StringTree treeRepo = new StringTree("Repository"); 308 arryList.add(treeRepo); 309 310 ListableRepository[] repos = PortletManager.getCurrentServer(request) 311 .getRepositories(); 312 for (int i = 0; i < repos.length; i++) { 313 ListableRepository repo = repos[i]; 314 final SortedSet artifacts = repo.list(); 315 for (Iterator iterator = artifacts.iterator(); iterator.hasNext();) { 316 String fileName = iterator.next().toString(); 317 treeRepo.addChild(fileName); 318 } 319 320 } 321 322 return arryList; 323 324 } 325 326 }