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