[jboss-svn-commits] JBoss Portal SVN: r5692 - in trunk/core/src: main/org/jboss/portal/core/deployment/jboss main/org/jboss/portal/core/metadata resources/portal-core-sar resources/portal-samples-war/WEB-INF

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Mon Nov 20 16:47:16 EST 2006


Author: julien at jboss.com
Date: 2006-11-20 16:47:08 -0500 (Mon, 20 Nov 2006)
New Revision: 5692

Modified:
   trunk/core/src/main/org/jboss/portal/core/deployment/jboss/ObjectDeployment.java
   trunk/core/src/main/org/jboss/portal/core/deployment/jboss/PortletAppDeployment.java
   trunk/core/src/main/org/jboss/portal/core/metadata/InstanceMetaData.java
   trunk/core/src/resources/portal-core-sar/portal-aop.xml
   trunk/core/src/resources/portal-samples-war/WEB-INF/portlet-instances.xml
Log:
JBPORTAL-1015 : Allow reconfiguration of a portlet instance from the deployment descriptor portlet-instances.xml

Modified: trunk/core/src/main/org/jboss/portal/core/deployment/jboss/ObjectDeployment.java
===================================================================
--- trunk/core/src/main/org/jboss/portal/core/deployment/jboss/ObjectDeployment.java	2006-11-20 21:08:42 UTC (rev 5691)
+++ trunk/core/src/main/org/jboss/portal/core/deployment/jboss/ObjectDeployment.java	2006-11-20 21:47:08 UTC (rev 5692)
@@ -50,7 +50,6 @@
 public class ObjectDeployment extends Deployment
 {
 
-   //
    /** . */
    public static final int OVERWRITE_IF_EXISTS = 0;
 

Modified: trunk/core/src/main/org/jboss/portal/core/deployment/jboss/PortletAppDeployment.java
===================================================================
--- trunk/core/src/main/org/jboss/portal/core/deployment/jboss/PortletAppDeployment.java	2006-11-20 21:08:42 UTC (rev 5691)
+++ trunk/core/src/main/org/jboss/portal/core/deployment/jboss/PortletAppDeployment.java	2006-11-20 21:47:08 UTC (rev 5692)
@@ -28,16 +28,25 @@
 import org.jboss.portal.common.net.URLVisitor;
 import org.jboss.portal.common.util.Tools;
 import org.jboss.portal.common.util.XML;
+import org.jboss.portal.common.value.Value;
+import org.jboss.portal.common.value.StringValue;
 import org.jboss.portal.core.metadata.InstanceMetaData;
-import org.jboss.portal.core.metadata.InstancesMetaData;
 import org.jboss.portal.core.metadata.ServiceMetaData;
+import org.jboss.portal.core.metadata.PreferencesMetaData;
 import org.jboss.portal.core.metadata.portlet.JBossApplicationMetaData;
 import org.jboss.portal.core.model.instance.DuplicateInstanceException;
-import org.jboss.portal.core.model.instance.InstanceContainer;
+import org.jboss.portal.core.model.instance.Instance;
 import org.jboss.portal.portlet.InvalidPortletIdException;
 import org.jboss.portal.portlet.NoSuchPortletException;
 import org.jboss.portal.portlet.PortletInvokerException;
+import org.jboss.portal.portlet.impl.jsr168.metadata.PreferenceMetaData;
+import org.jboss.portal.portlet.state.PropertyChange;
 import org.jboss.portal.security.spi.provider.SecurityConfigurationException;
+import org.jboss.portal.security.spi.provider.AuthorizationDomain;
+import org.jboss.portal.security.spi.provider.DomainConfigurator;
+import org.jboss.portal.security.metadata.SecurityConstraintsMetaData;
+import org.jboss.portal.security.RoleSecurityBinding;
+import org.jboss.portal.security.SecurityConstants;
 import org.jboss.portal.server.deployment.PortalWebApp;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
@@ -60,6 +69,12 @@
 {
 
    /** . */
+   public static final int OVERWRITE_IF_EXISTS = 0;
+
+   /** . */
+   public static final int KEEP_IF_EXISTS = 1;
+
+   /** . */
    private PortletAppDeploymentFactory factory;
 
    public PortletAppDeployment(URL url, PortalWebApp pwa, MBeanServer mbeanServer, PortletAppDeploymentFactory factory)
@@ -134,7 +149,7 @@
          final DocumentBuilder builder = XML.getDocumentBuilderFactory().newDocumentBuilder();
 
          // All the meta data gathered
-         final ArrayList instanceMDs = new ArrayList();
+         final ArrayList metaDataCtxs = new ArrayList();
 
          // Parse instances from legacy -object.xml
          log.debug("Looking for the WEB-INF path of " + pwa.getId());
@@ -167,6 +182,8 @@
                         for (Iterator i = XML.getChildrenIterator(deploymentsElt, "deployment"); i.hasNext();)
                         {
                            Element deploymentElt = (Element)i.next();
+
+                           //
                            Element instanceElt = XML.getUniqueChild(deploymentElt, "instance", false);
 
                            //
@@ -179,12 +196,13 @@
                               }
 
                               //
-                              InstanceMetaData instanceMD = InstanceMetaData.buildLegacyMetaData(instanceElt, pwa.getId());
+                              InstanceMetaData metaData = InstanceMetaData.buildLegacyMetaData(instanceElt, pwa.getId());
 
                               //
-                              if (instanceMD != null)
+                              if (metaData != null)
                               {
-                                 instanceMDs.add(instanceMD);
+                                 InstanceMetaDataContext metaDataCtx = new InstanceMetaDataContext(metaData, KEEP_IF_EXISTS);
+                                 metaDataCtxs.add(metaDataCtx);
                               }
                            }
                         }
@@ -207,13 +225,13 @@
          }
 
          // Output legacy file on the console
-         if (instanceMDs.size() > 0)
+         if (metaDataCtxs.size() > 0)
          {
             Document doc = builder.newDocument();
             Element deployments = (Element)doc.appendChild(doc.createElement("deployments"));
-            for (int i = 0; i < instanceMDs.size(); i++)
+            for (int i = 0; i < metaDataCtxs.size(); i++)
             {
-               InstanceMetaData instanceMD = (InstanceMetaData)instanceMDs.get(i);
+               InstanceMetaData instanceMD = (InstanceMetaData)metaDataCtxs.get(i);
                Element deploymentElt = (Element)deployments.appendChild(doc.createElement("deployment"));
                Element instanceElt = (Element)deploymentElt.appendChild(doc.createElement("instance"));
                Element instanceIdElt = (Element)instanceElt.appendChild(doc.createElement("instance-id"));
@@ -244,10 +262,29 @@
                   Element instanceElt = XML.getUniqueChild(deploymentElt, "instance", true);
 
                   //
-                  InstanceMetaData instanceMD = InstanceMetaData.buildMetaData(instanceElt);
+                  InstanceMetaData metaData = InstanceMetaData.buildMetaData(instanceElt);
 
                   //
-                  instanceMDs.add(instanceMD);
+                  Element ifExistsElt = XML.getUniqueChild(deploymentElt, "if-exists", false);
+                  int ifExists = KEEP_IF_EXISTS;
+                  if (ifExistsElt != null)
+                  {
+                     String tmp = XML.asString(ifExistsElt);
+                     if ("overwrite".equals(tmp))
+                     {
+                        ifExists = OVERWRITE_IF_EXISTS;
+                     }
+                     else if ("keep".equals(tmp))
+                     {
+                        ifExists = KEEP_IF_EXISTS;
+                     }
+                  }
+
+                  //
+                  InstanceMetaDataContext metaDataCtx = new InstanceMetaDataContext(metaData, ifExists);
+
+                  //
+                  metaDataCtxs.add(metaDataCtx);
                }
             }
          }
@@ -257,9 +294,9 @@
          }
 
          // Create instances when we have
-         if (instanceMDs.size() > 0)
+         if (metaDataCtxs.size() > 0)
          {
-            createInstances(instanceMDs);
+            createInstances(metaDataCtxs);
          }
       }
       catch (Exception e)
@@ -268,79 +305,135 @@
       }
    }
 
-   private void createInstances(List instanceMDs) throws Exception
+   private void createInstances(List metaDataCtxs) throws Exception
    {
       // Create all the instances when possible
-      for (int i = 0; i < instanceMDs.size(); i++)
+      for (int i = 0; i < metaDataCtxs.size(); i++)
       {
-         InstanceMetaData instanceMD = (InstanceMetaData)instanceMDs.get(i);
-
+         InstanceMetaDataContext metaDataCtx = (InstanceMetaDataContext)metaDataCtxs.get(i);
          //
-         if (factory.getInstanceContainer().getInstance(instanceMD.getId()) == null)
+         try
          {
-            createInstance(instanceMD);
+            handleInstance(metaDataCtx);
          }
-         else
+         catch (NoSuchPortletException e)
          {
-            log.debug("Instance " + instanceMD.getId() + " exist");
+            String msg = "Failed to create instance " + metaDataCtx.metaData.getId() + " of portlet " + e.getPortletId() +
+               " because portlet " + e.getPortletId() + " is not available";
+            log.warn(msg);
+            log.debug(msg, e);
          }
+         catch (InvalidPortletIdException e)
+         {
+            String msg = "Failed to create instance " + metaDataCtx.metaData.getId() + " of portlet " + e.getPortletId() +
+               " because portlet id " + e.getPortletId() + " is invalid";
+            log.warn(msg);
+            log.debug(msg, e);
+         }
+         catch (PortletInvokerException e)
+         {
+            String msg = "Failed to create instance " + metaDataCtx.metaData.getId() + " of portlet";
+            log.warn(msg);
+            log.debug(msg, e);
+         }
+         catch (DuplicateInstanceException e)
+         {
+            String msg = "Instance " + metaDataCtx.metaData.getId() + " already exists";
+            log.warn(msg);
+            log.debug(msg, e);
+         }
+         catch (SecurityConfigurationException e)
+         {
+            String msg = "Cannot configure security of instance " + metaDataCtx.metaData.getId();
+            log.warn(msg);
+            log.debug(msg, e);
+         }
       }
    }
 
    /**
     * Requires a transaction to execute, setup in aop configuration.
-    *
-    * @param instanceMD the instance meta data 
     */
-   private void createInstance(InstanceMetaData instanceMD)
+   private void handleInstance(InstanceMetaDataContext metaDataCtx) throws PortletInvokerException, SecurityConfigurationException, DuplicateInstanceException
    {
-      try
+      InstanceMetaData metaData = metaDataCtx.metaData;
+      Instance instance = factory.getInstanceContainer().getInstance(metaData.getId());
+      if (instance == null)
       {
-         log.debug("Creating portlet instance " + instanceMD.getId());
-         instanceMD.create(new InstancesMetaData.BuildContext()
-         {
-            public InstanceContainer getContainer()
-            {
-               return factory.getInstanceContainer();
-            }
-
-            public String resolvePortletRef(String ref)
-            {
-               return "local." + pwa.getId() + "." + ref;
-            }
-         });
+         createInstance(metaData);
       }
-      catch (NoSuchPortletException e)
+      else if (metaDataCtx.ifExists == OVERWRITE_IF_EXISTS)
       {
-         String msg = "Failed to create instance " + instanceMD.getId() + " of portlet " + e.getPortletId() +
-            " because portlet " + e.getPortletId() + " is not available";
-         log.warn(msg);
-         log.debug(msg, e);
+         log.debug("Reconfiguring instance " + metaData.getId() + " that already exists");
+         configureInstance(instance, metaData);
       }
-      catch (InvalidPortletIdException e)
+      else
       {
-         String msg = "Failed to create instance " + instanceMD.getId() + " of portlet " + e.getPortletId() +
-            " because portlet id " + e.getPortletId() + " is invalid";
-         log.warn(msg);
-         log.debug(msg, e);
+         log.debug("Instance " + metaData.getId() + " exists");
       }
-      catch (PortletInvokerException e)
+   }
+
+   private void configureInstance(Instance instance, InstanceMetaData metaData) throws PortletInvokerException, SecurityConfigurationException
+   {
+      PreferencesMetaData preferencesMetaData = metaData.getPreferences();
+
+      // Configure preferences only if needed
+      if (preferencesMetaData != null && preferencesMetaData.size() > 0)
       {
-         String msg = "Failed to create instance " + instanceMD.getId() + " of portlet";
-         log.warn(msg);
-         log.debug(msg, e);
+         PropertyChange[] changes = new PropertyChange[preferencesMetaData.size()];
+         int idx = 0;
+         for (Iterator i = preferencesMetaData.iterator(); i.hasNext();)
+         {
+            PreferenceMetaData preference = (PreferenceMetaData)i.next();
+            Value value = new StringValue(preference.getValues());
+            changes[idx++] = PropertyChange.newUpdate(preference.getName(), value);
+         }
+         instance.setProperties(changes);
       }
-      catch (DuplicateInstanceException e)
+
+      // Configure security
+      SecurityConstraintsMetaData securityConstraints = metaData.getSecurityConstraints();
+      if (securityConstraints == null)
       {
-         String msg = "Instance " + instanceMD.getId() + " already exists";
-         log.warn(msg);
-         log.debug(msg, e);
+         securityConstraints = new SecurityConstraintsMetaData();
+         securityConstraints.getConstraints().add(new RoleSecurityBinding("view", SecurityConstants.UNCHECKED_ROLE_NAME));
       }
-      catch (SecurityConfigurationException e)
+      AuthorizationDomain authDomain = instance.getContainer().getAuthorizationDomain();
+      DomainConfigurator domainConfigurator = authDomain.getConfigurator();
+      domainConfigurator.setSecurityBindings(instance.getId(), securityConstraints.getConstraints());
+   }
+
+   private void createInstance(InstanceMetaData metaData) throws PortletInvokerException, DuplicateInstanceException, SecurityConfigurationException
+   {
+      log.debug("Creating portlet instance " + metaData.getId());
+
+      // Resolve the portlet ref
+      String resolvedRef = resolvePortletRef(metaData.getPortletRef());
+
+      // Create the instance
+      Instance instance = factory.getInstanceContainer().createInstance(metaData.getId(), resolvedRef);
+
+      // Configure
+      configureInstance(instance, metaData);
+   }
+
+   private String resolvePortletRef(String ref)
+   {
+      return "local." + pwa.getId() + "." + ref;
+   }
+
+   private class InstanceMetaDataContext
+   {
+      /** . */
+      private InstanceMetaData metaData;
+
+      /** . */
+      private int ifExists;
+
+      public InstanceMetaDataContext(InstanceMetaData metaData, int ifExists)
       {
-         String msg = "Cannot configure security of instance " + instanceMD.getId();
-         log.warn(msg);
-         log.debug(msg, e);
+         this.metaData = metaData;
+         this.ifExists = ifExists;
       }
    }
 }

Modified: trunk/core/src/main/org/jboss/portal/core/metadata/InstanceMetaData.java
===================================================================
--- trunk/core/src/main/org/jboss/portal/core/metadata/InstanceMetaData.java	2006-11-20 21:08:42 UTC (rev 5691)
+++ trunk/core/src/main/org/jboss/portal/core/metadata/InstanceMetaData.java	2006-11-20 21:47:08 UTC (rev 5692)
@@ -104,7 +104,7 @@
       this.portletRef = portletRef;
    }
 
-   protected SecurityConstraintsMetaData getSecurityConstraints()
+   public SecurityConstraintsMetaData getSecurityConstraints()
    {
       return securityConstraints;
    }
@@ -273,44 +273,4 @@
       preferenceMD.setValues(values);
       return preferenceMD;
    }
-
-   public Instance create(InstancesMetaData.BuildContext buildContext) throws PortletInvokerException, DuplicateInstanceException, SecurityConfigurationException
-   {
-      // Resolve the portlet ref
-      String resolvedRef = buildContext.resolvePortletRef(portletRef);
-
-      // Get the instance container
-      InstanceContainer instanceContainer = buildContext.getContainer();
-
-      // Create the instance
-      Instance instance = instanceContainer.createInstance(id, resolvedRef);
-
-      // Configure preferences only if needed
-      if (preferences != null && preferences.size() > 0)
-      {
-         PropertyChange[] changes = new PropertyChange[preferences.size()];
-         int idx = 0;
-         for (Iterator i = preferences.iterator(); i.hasNext();)
-         {
-            PreferenceMetaData preference = (PreferenceMetaData)i.next();
-            Value value = new StringValue(preference.getValues());
-            changes[idx++] = PropertyChange.newUpdate(preference.getName(), value);
-         }
-         instance.setProperties(changes);
-      }
-
-      // Configure security
-      SecurityConstraintsMetaData securityConstraints = getSecurityConstraints();
-      if (securityConstraints == null)
-      {
-         securityConstraints = new SecurityConstraintsMetaData();
-         securityConstraints.getConstraints().add(new RoleSecurityBinding("view", SecurityConstants.UNCHECKED_ROLE_NAME));
-      }
-      AuthorizationDomain authDomain = instanceContainer.getAuthorizationDomain();
-      DomainConfigurator domainConfigurator = authDomain.getConfigurator();
-      domainConfigurator.setSecurityBindings(id, securityConstraints.getConstraints());
-
-      //
-      return instance;
-   }
 }

Modified: trunk/core/src/resources/portal-core-sar/portal-aop.xml
===================================================================
--- trunk/core/src/resources/portal-core-sar/portal-aop.xml	2006-11-20 21:08:42 UTC (rev 5691)
+++ trunk/core/src/resources/portal-core-sar/portal-aop.xml	2006-11-20 21:47:08 UTC (rev 5692)
@@ -89,8 +89,8 @@
    <metadata
       tag="transaction"
       class="org.jboss.portal.core.deployment.jboss.PortletAppDeployment">
-      <method name="createInstance">
-         <trans-attribute>Required</trans-attribute>
+      <method name="handleInstance">
+         <trans-attribute>RequiresNew</trans-attribute>
       </method>
    </metadata>
    <metadata

Modified: trunk/core/src/resources/portal-samples-war/WEB-INF/portlet-instances.xml
===================================================================
--- trunk/core/src/resources/portal-samples-war/WEB-INF/portlet-instances.xml	2006-11-20 21:08:42 UTC (rev 5691)
+++ trunk/core/src/resources/portal-samples-war/WEB-INF/portlet-instances.xml	2006-11-20 21:47:08 UTC (rev 5692)
@@ -54,6 +54,7 @@
       </instance>
    </deployment>
    <deployment>
+      <if-exists>overwrite</if-exists>
       <instance>
          <instance-id>NewsPortletInstance2</instance-id>
          <portlet-ref>NewsPortlet</portlet-ref>




More information about the jboss-svn-commits mailing list