[portal-commits] JBoss Portal SVN: r13019 - in modules/deployer/trunk/deployer/src/main/java/org/jboss/portal/deployer: portlet and 1 other directory.

portal-commits at lists.jboss.org portal-commits at lists.jboss.org
Wed Mar 11 15:12:19 EDT 2009


Author: mwringe
Date: 2009-03-11 15:12:19 -0400 (Wed, 11 Mar 2009)
New Revision: 13019

Modified:
   modules/deployer/trunk/deployer/src/main/java/org/jboss/portal/deployer/parsing/MergedPortletParsingDeployer.java
   modules/deployer/trunk/deployer/src/main/java/org/jboss/portal/deployer/portlet/InstanceDeployer.java
   modules/deployer/trunk/deployer/src/main/java/org/jboss/portal/deployer/portlet/PortletDeployer.java
Log:
Fix the merged parsing deployer to handle the situation where a jboss-portlet.xml file is missing and no appId has been set.

Modified: modules/deployer/trunk/deployer/src/main/java/org/jboss/portal/deployer/parsing/MergedPortletParsingDeployer.java
===================================================================
--- modules/deployer/trunk/deployer/src/main/java/org/jboss/portal/deployer/parsing/MergedPortletParsingDeployer.java	2009-03-11 10:57:12 UTC (rev 13018)
+++ modules/deployer/trunk/deployer/src/main/java/org/jboss/portal/deployer/parsing/MergedPortletParsingDeployer.java	2009-03-11 19:12:19 UTC (rev 13019)
@@ -23,6 +23,7 @@
 package org.jboss.portal.deployer.parsing;
 
 import java.io.InputStream;
+import java.util.HashMap;
 
 import org.jboss.deployers.spi.DeploymentException;
 import org.jboss.deployers.spi.deployer.DeploymentStages;
@@ -32,6 +33,7 @@
 import org.jboss.portal.deployer.PortalEntityResolver;
 import org.jboss.portal.deployer.PortalResolverFactory;
 import org.jboss.portal.deployer.PortalUnmarshallerFactory;
+import org.jboss.portal.deployer.webapp.WebAppContextDeployer;
 import org.jboss.portal.metadata.jboss.app.PortalAppMetaData;
 import org.jboss.portal.metadata.jboss.portlet.JBossPortletAppMetaData;
 import org.jboss.portal.metadata.jboss.portlet.JBossPortletMetaData;
@@ -57,11 +59,17 @@
    public MergedPortletParsingDeployer()
    {
       setAllInputs(false);
-      setInput(JBossPortletAppMetaData.class);
-      addInput(PortletApplication10MetaData.class);
+      setInput(PortletApplication10MetaData.class);
+      addInput(JBossPortletAppMetaData.class);
+      addInput(WebAppContextDeployer.PORTLET_APP_CONTEXT_PATH_ATTACHMENT);
+      
       setOutput(JBossPortletAppMetaData.class);
       addOutput(PORTLET_MERGED_ATTACHMENT_NAME);
-      this.setStage(DeploymentStages.POST_PARSE);
+      
+      // normaly a merged parsing deployer should have a stage
+      // of post_parse but we need to merge information from
+      // the deployed webapplication if applicable for the id.
+      this.setStage(DeploymentStages.INSTALLED);
    }
    
    public String getStandardPortletFileLocation()
@@ -75,26 +83,54 @@
    }
 
    public void deploy(DeploymentUnit unit) throws DeploymentException
-   {  
+   {
+      PortletApplication10MetaData portletAppMetaData = unit.getAttachment(PortletApplication10MetaData.class);
       JBossPortletAppMetaData jbossAppMetaData = unit.getAttachment(JBossPortletAppMetaData.class);
-      PortletApplication10MetaData portletAppMetaData = unit.getAttachment(PortletApplication10MetaData.class);
+      String contextPath = unit.getAttachment(WebAppContextDeployer.PORTLET_APP_CONTEXT_PATH_ATTACHMENT, String.class);
+      PortalAppMetaData appMetaData = unit.getAttachment(PortalAppMetaData.class);
       
-      // use the app-name from the jboss-portal-app.xml file if it exists
-      PortalAppMetaData appMetaData = unit.getAttachment(PortalAppMetaData.class);
-      if (jbossAppMetaData.getAppId() == null && appMetaData != null && appMetaData.getAppName() != null)
+      if (jbossAppMetaData == null)
       {
-         jbossAppMetaData.setAppId(appMetaData.getAppName());
+         jbossAppMetaData = createJBossPortletMetaData();
       }
-            
-      try{
       
+      if (jbossAppMetaData.getAppId() == null)
+      {
+         if (appMetaData != null && appMetaData.getAppName() != null)
+         {
+            jbossAppMetaData.setAppId(appMetaData.getAppName());
+         }
+         else if (contextPath != null)
+         {
+            jbossAppMetaData.setAppId(contextPath);
+         }
+         else
+         {
+            throw new DeploymentException(
+                  "Could not determine the app id for the portlet. It could not " +
+                  "be determined from jboss-portlet.xml or jboss-portal-app.xml " +
+                  "and the context path for the deployment could not be determined");
+         }
+      }
+      
+      merge(jbossAppMetaData, portletAppMetaData);
+      
+      unit.addAttachment(PORTLET_MERGED_ATTACHMENT_NAME, jbossAppMetaData, JBossPortletAppMetaData.class);
+   }
+   
+   protected void merge(JBossPortletAppMetaData jbossAppMetaData, PortletApplication10MetaData portletAppMetaData) throws DeploymentException
+   {
+      try
+      {
+
          InputStream stream = this.getClass().getClassLoader().getResourceAsStream(standardPortletFileLocation);
          InputSource source = new InputSource(stream);
-         
+
          SchemaBindingResolver resolver = PortalResolverFactory.getInstance().getSchemaBindingResolver();
          Unmarshaller unmarshaller = PortalUnmarshallerFactory.getInstance().getUnmarshaller();
-         JBossPortletAppMetaData defaultAppMetaData = (JBossPortletAppMetaData)unmarshaller.unmarshal(source, resolver);
-         
+         JBossPortletAppMetaData defaultAppMetaData = (JBossPortletAppMetaData) unmarshaller
+               .unmarshal(source, resolver);
+
          if (defaultAppMetaData != null)
          {
             log.debug("Found standard jboss app meta data");
@@ -105,18 +141,23 @@
                for (PortletMetaData portlets : portletAppMetaData.getPortlets().values())
                {
                   String name = portlets.getPortletName();
+                  if (jbossAppMetaData.getPortlets() == null)
+                  {
+                     HashMap jbossPortlets = new HashMap<String, JBossPortletMetaData>();
+                     jbossAppMetaData.setPortlets(jbossPortlets);
+                  }
                   JBossPortletMetaData jbossPortletMD = jbossAppMetaData.getPortlets().get(name);
                   if (jbossPortletMD != null)
                   {
                      log.debug("Merging default jboss portlet meta data for " + name);
                      jbossPortletMD.merge(defaultPortletMetaData);
                   }
-                  else 
+                  else
                   {
                      log.debug("Using default jboss portlet meta data for " + name);
-                     jbossAppMetaData.getPortlets().put(name, (JBossPortletMetaData)defaultPortletMetaData.clone());
+                     jbossAppMetaData.getPortlets().put(name, (JBossPortletMetaData) defaultPortletMetaData.clone());
                   }
-               }  
+               }
             }
          }
       }
@@ -124,10 +165,16 @@
       {
          throw new DeploymentException("Cannot deploy portlet application", e);
       }
-
-      unit.addAttachment(PORTLET_MERGED_ATTACHMENT_NAME, jbossAppMetaData, JBossPortletAppMetaData.class);
-      
    }
+    
+   protected JBossPortletAppMetaData createJBossPortletMetaData()
+   {
+      JBossPortletAppMetaData jbossPortletAppMetaData = new JBossPortletAppMetaData();
+      HashMap portletMap = new HashMap<String, JBossPortletMetaData>();
+      jbossPortletAppMetaData.setPortlets(portletMap);
+      return jbossPortletAppMetaData;
+   }
    
+   
 }
 

Modified: modules/deployer/trunk/deployer/src/main/java/org/jboss/portal/deployer/portlet/InstanceDeployer.java
===================================================================
--- modules/deployer/trunk/deployer/src/main/java/org/jboss/portal/deployer/portlet/InstanceDeployer.java	2009-03-11 10:57:12 UTC (rev 13018)
+++ modules/deployer/trunk/deployer/src/main/java/org/jboss/portal/deployer/portlet/InstanceDeployer.java	2009-03-11 19:12:19 UTC (rev 13019)
@@ -29,6 +29,7 @@
 import org.jboss.deployers.structure.spi.DeploymentUnit;
 import org.jboss.portal.deployer.container.InstanceDeployment;
 import org.jboss.portal.deployer.parsing.MergedPortletParsingDeployer;
+import org.jboss.portal.deployer.webapp.WebAppContextDeployer;
 import org.jboss.portal.metadata.jboss.portlet.JBossPortletAppMetaData;
 import org.jboss.portal.metadata.portlet.instances.PortletDeploymentInstancesMetaData;
 
@@ -56,6 +57,8 @@
       // have reference to the portlet before an instance of it can be deployed.
       this.addInput(PortletDeployer.PORLET_DEPLOYED);
       
+      this.addInput(WebAppContextDeployer.PORTLET_APP_CONTEXT_PATH_ATTACHMENT);
+      
       this.setStage(DeploymentStages.INSTALLED);
    }
 
@@ -70,7 +73,7 @@
    {
       PortletDeploymentInstancesMetaData deploymentInstancesMetaData = unit.getAttachment(PortletDeploymentInstancesMetaData.class);
       JBossPortletAppMetaData appMetaData = unit.getAttachment(MergedPortletParsingDeployer.PORTLET_MERGED_ATTACHMENT_NAME,JBossPortletAppMetaData.class);
-      
+            
       deployment.deployInstances(deploymentInstancesMetaData, appMetaData.getAppId());
    }
             

Modified: modules/deployer/trunk/deployer/src/main/java/org/jboss/portal/deployer/portlet/PortletDeployer.java
===================================================================
--- modules/deployer/trunk/deployer/src/main/java/org/jboss/portal/deployer/portlet/PortletDeployer.java	2009-03-11 10:57:12 UTC (rev 13018)
+++ modules/deployer/trunk/deployer/src/main/java/org/jboss/portal/deployer/portlet/PortletDeployer.java	2009-03-11 19:12:19 UTC (rev 13019)
@@ -23,6 +23,7 @@
 package org.jboss.portal.deployer.portlet;
 
 import java.util.ArrayList;
+import java.util.HashMap;
 
 import javax.servlet.ServletContext;
 
@@ -36,7 +37,14 @@
 import org.jboss.portal.deployer.parsing.MergedPortletParsingDeployer;
 import org.jboss.portal.deployer.webapp.WebAppContextDeployer;
 import org.jboss.portal.metadata.jboss.portlet.JBossPortletAppMetaData;
+import org.jboss.portal.metadata.jboss.portlet.JBossPortletMetaData;
 import org.jboss.portal.metadata.portlet.PortletApplication10MetaData;
+import org.jboss.portal.metadata.portlet.PortletApplication20MetaData;
+import org.jboss.portal.metadata.portlet.event.EventDefinitionMetaData;
+import org.jboss.portal.metadata.portlet.event.EventDefinitionReferenceMetaData;
+import org.jboss.portal.metadata.portlet.portlet.PortletMetaData;
+import org.jboss.portal.metadata.portlet.portlet.PortletModeMetaData;
+import org.jboss.portal.metadata.portlet.portlet.SupportsMetaData;
 import org.jboss.web.WebApplication;
 import org.jboss.web.deployers.AbstractWarDeployer;
 
@@ -78,12 +86,7 @@
       String contextPath = unit.getAttachment(WebAppContextDeployer.PORTLET_APP_CONTEXT_PATH_ATTACHMENT, String.class);
       ServletContext servletContext = unit.getAttachment(WebAppContextDeployer.PORTLET_APP_SERVLET_CONTEXT_ATTACHMENT, ServletContext.class);
       WebApplication webapp = unit.getAttachment(WebApplication.class);
-        
-      if (jbossPortletMetaData.getAppId() == null)
-      {
-         jbossPortletMetaData.setAppId(contextPath);
-      }
-         
+            
       this.deployment.deployPortlets(servletContext, webapp.getURL(), webapp.getClassLoader(), contextPath, jbossPortletMetaData, portletMetaData);
 
       unit.addAttachment(PORLET_DEPLOYED, "deployed");




More information about the portal-commits mailing list