1 16 17 package org.apache.pluto.driver.deploy; 18 19 import java.io.File ; 20 import java.io.IOException ; 21 import java.util.Collection ; 22 import java.util.HashMap ; 23 import java.util.Iterator ; 24 import java.util.List ; 25 import java.util.ArrayList ; 26 27 import org.apache.pluto.descriptors.common.InitParamDD; 28 import org.apache.pluto.descriptors.common.SecurityRoleRefDD; 29 import org.apache.pluto.descriptors.portlet.PortletAppDD; 30 import org.apache.pluto.descriptors.portlet.PortletDD; 31 import org.apache.pluto.descriptors.services.PortletAppDescriptorService; 32 import org.apache.pluto.descriptors.services.WebAppDescriptorService; 33 import org.apache.pluto.descriptors.servlet.SecurityRoleDD; 34 import org.apache.pluto.descriptors.servlet.ServletDD; 35 import org.apache.pluto.descriptors.servlet.ServletMappingDD; 36 import org.apache.pluto.descriptors.servlet.WebAppDD; 37 38 public class Deploy { 39 40 private static final String INVOKER_SERVLET = 41 "org.apache.pluto.core.PortletServlet"; 42 43 private WebAppDescriptorService webAppDescriptorService; 45 private PortletAppDescriptorService portletAppDescriptorService; 46 47 private PortletApplicationExploder exploder; 50 private List registrars = new ArrayList (); 51 52 private boolean debug = false; 53 54 public Deploy(WebAppDescriptorService webAppDescriptorService, 55 PortletAppDescriptorService portletAppDescriptorService) { 56 this.webAppDescriptorService = webAppDescriptorService; 57 this.portletAppDescriptorService = portletAppDescriptorService; 58 } 59 60 64 public WebAppDescriptorService getWebAppDDService() { 65 return webAppDescriptorService; 66 } 67 68 71 public void setWebAppDDService(WebAppDescriptorService webAppDescriptorService) { 72 this.webAppDescriptorService = webAppDescriptorService; 73 } 74 75 79 public PortletAppDescriptorService getPortletAppDDService() { 80 return portletAppDescriptorService; 81 } 82 83 87 public void setPortletAppDDService(PortletAppDescriptorService portletAppDescriptorService) { 88 this.portletAppDescriptorService = portletAppDescriptorService; 89 } 90 91 PortletApplicationExploder getExploder() { 92 return exploder; 93 } 94 95 void setExploder(PortletApplicationExploder exploder) { 96 this.exploder = exploder; 97 } 98 99 List getRegistrars() { 100 return registrars; 101 } 102 103 void setRegistrars(List registrars) { 104 this.registrars = registrars; 105 } 106 107 void addRegistrar(PortalRegistrarService registrar) { 108 this.registrars.add(registrar); 109 } 110 111 public boolean isDebug() { 112 return debug; 113 } 114 115 public void setDebug(boolean debug) { 116 this.debug = debug; 117 } 118 119 126 public void deploy(File warFile) throws IOException { 127 if(exploder != null) { 128 exploder.explode(warFile); 129 } 130 updateDescriptors(); 131 Iterator it = registrars.iterator(); 132 PortalRegistrarService registrar = null; 133 while(it.hasNext()) { 134 registrar = (PortalRegistrarService)it.next(); 135 registrar.register(portletAppDescriptorService); 136 } 137 } 138 139 public void updateDescriptors() 140 throws IOException { 141 PortletAppDD portletApp = portletAppDescriptorService.read(); 142 WebAppDD webApp = webAppDescriptorService.read(); 143 144 Iterator portlets = portletApp.getPortlets().iterator(); 145 PortletDD portlet; 146 while (portlets.hasNext()) { 147 portlet = (PortletDD) portlets.next(); 148 createServlet(webApp, portlet); 149 createServletMapping(webApp, portlet); 150 } 151 152 this.webAppDescriptorService.write(webApp); 153 } 154 155 156 157 158 private void createServlet(WebAppDD webApp, PortletDD portlet) { 159 if(debug) { 160 System.out.println("<VERBOSE> Creating Servlet Wrapper for Portlet: '"+portlet.getPortletName()+"'"); 161 } 162 String pnm = portlet.getPortletName(); 163 ServletDD servlet = webApp.getServlet(pnm); 165 if (servlet != null) { 166 String cl = servlet.getServletClass(); 167 if (!INVOKER_SERVLET.equals(cl)) { 168 System.out.println( 169 "Note: Replaced already existing the servlet with the name '" 170 + pnm 171 + "' with the wrapper servlet." 172 ); 173 servlet.setServletClass(INVOKER_SERVLET); 174 } 175 } else { 176 servlet = new ServletDD(); 177 servlet.setServletName(pnm); 178 servlet.setServletClass(INVOKER_SERVLET); 179 webApp.getServlets().add(servlet); 180 } 181 182 servlet.setDisplayName(pnm + "Wrapper (Pluto Invoker)"); 183 servlet.setDescription("Auto Generated Portlet Invoker Servlet"); 184 185 InitParamDD param = new InitParamDD(); 186 param.setParamName("portlet-class"); 187 param.setParamValue(portlet.getPortletClass()); 188 servlet.getInitParams().add(param); 189 190 param = new InitParamDD(); 191 param.setParamName("portlet-guid"); 192 param.setParamValue(portletAppDescriptorService.getContextPath()+"."+portlet.getPortletName()); 193 servlet.getInitParams().add(param); 194 195 createSecurityRoleRefs(webApp, servlet, portlet); 196 } 197 198 private void createSecurityRoleRefs(WebAppDD webApp, 199 ServletDD servlet, 200 PortletDD portlet) { 201 202 HashMap sRefs = new HashMap (); 203 List sSecRoleRefs = servlet.getSecurityRoleRefs(); 204 Iterator i = sSecRoleRefs.iterator(); 205 SecurityRoleRefDD srr; 206 while(i.hasNext()) { 207 srr = (SecurityRoleRefDD)i.next(); 208 sRefs.put(srr.getRoleName(), srr); 209 } 210 211 HashMap wRoles = new HashMap (); 212 i = webApp.getSecurityRoles().iterator(); 213 SecurityRoleDD sr; 214 while(i.hasNext()) { 215 sr = (SecurityRoleDD)i.next(); 216 wRoles.put(sr.getRoleName(), sr); 217 } 218 219 Collection pRoles = portlet.getSecurityRoleRefs(); 220 Iterator p = pRoles.iterator(); 221 SecurityRoleRefDD pRole; 222 while(p.hasNext()) { 223 pRole = (SecurityRoleRefDD) p.next(); 224 if (pRole.getRoleLink()==null 225 && wRoles.get(pRole.getRoleName())==null) { 226 System.out.println( 227 "Note: The web application has no security role defined which matches the role name \"" 228 + pRole.getRoleName() 229 + "\" of the security-role-ref element defined for the wrapper-servlet with the name '" 230 + portlet.getPortletName() 231 + "'."); 232 break; 233 } 234 SecurityRoleRefDD sRR = (SecurityRoleRefDD) 235 sRefs.get(pRole.getRoleName()); 236 237 if (null != sRR) { 238 System.out.println("Note: Replaced already existing element of type <security-role-ref> with value \"" 239 + pRole.getRoleName() 240 + "\" for subelement of type <role-name> for the wrapper-servlet with the name '" 241 + portlet.getPortletName() 242 + "'."); 243 sSecRoleRefs.remove(sRR); 244 } 245 SecurityRoleRefDD dd = new SecurityRoleRefDD(); 246 dd.setDescription(pRole.getDescription()); 247 dd.setRoleLink(pRole.getRoleLink()); 248 dd.setRoleName(pRole.getRoleName()); 249 sSecRoleRefs.add(dd); 250 } 251 } 252 253 private void createServletMapping(WebAppDD webApp, 254 PortletDD portlet) { 255 if(debug) { 256 System.out.println("<VERBOSE> Creating Servlet Mapping for Portlet: '"+portlet.getPortletName()+"'"); 257 } 258 String url= "/"+portlet.getPortletName().replace(' ', '_') + "/*"; 259 ServletMappingDD servletMapping = webApp.getServletMapping(url); 260 if (servletMapping != null) { 261 String nm = servletMapping.getServletName(); 262 if (!nm.equals(portlet.getPortletName())) { 263 System.out.println( 264 "Note: Replaced Servlet Mapping with pattern: "+url 265 ); 266 servletMapping.setServletName(portlet.getPortletName()); 267 } 268 } 269 else { 270 servletMapping = new ServletMappingDD(); 271 servletMapping.setUrlPattern(url); 272 servletMapping.setServletName(portlet.getPortletName()); 273 webApp.getServletMappings().add(servletMapping); 274 } 275 } 276 } 277 | Popular Tags |