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");