[jboss-svn-commits] JBoss Portal SVN: r5291 - in trunk: common/src/main/org/jboss/portal/common/junit/ant core core/src/main/org/jboss/portal/core/impl/model/instance core/src/main/org/jboss/portal/test/core/model/instance core/src/resources/portal-samples-war/WEB-INF tools/lib

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Fri Sep 29 10:47:43 EDT 2006


Author: julien at jboss.com
Date: 2006-09-29 10:47:21 -0400 (Fri, 29 Sep 2006)
New Revision: 5291

Modified:
   trunk/common/src/main/org/jboss/portal/common/junit/ant/ConfigurableJUnitTest.java
   trunk/common/src/main/org/jboss/portal/common/junit/ant/TestParameter.java
   trunk/core/build.xml
   trunk/core/src/main/org/jboss/portal/core/impl/model/instance/AbstractInstance.java
   trunk/core/src/main/org/jboss/portal/core/impl/model/instance/InstanceImpl.java
   trunk/core/src/main/org/jboss/portal/core/impl/model/instance/PersistentInstanceContainer.java
   trunk/core/src/main/org/jboss/portal/core/impl/model/instance/UserInstance.java
   trunk/core/src/main/org/jboss/portal/test/core/model/instance/InstanceContainerTestCase.java
   trunk/core/src/resources/portal-samples-war/WEB-INF/portlet-instances.xml
   trunk/core/src/resources/portal-samples-war/WEB-INF/portlet.xml
   trunk/tools/lib/explode.jar
Log:
better implementation of Instance properties

Modified: trunk/common/src/main/org/jboss/portal/common/junit/ant/ConfigurableJUnitTest.java
===================================================================
--- trunk/common/src/main/org/jboss/portal/common/junit/ant/ConfigurableJUnitTest.java	2006-09-29 03:49:00 UTC (rev 5290)
+++ trunk/common/src/main/org/jboss/portal/common/junit/ant/ConfigurableJUnitTest.java	2006-09-29 14:47:21 UTC (rev 5291)
@@ -31,6 +31,8 @@
 import java.io.ObjectOutputStream;
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
+import java.io.File;
+import java.io.FileOutputStream;
 
 /**
  * @author <a href="mailto:julien at jboss.org">Julien Viet</a>
@@ -68,21 +70,12 @@
             TestParameter parameter = (TestParameter)nestedParameters.get(i);
             parameters.put(parameter.getName(), parameter.getValue());
          }
-         ByteArrayOutputStream baos = new ByteArrayOutputStream();
-         ObjectOutputStream oos = new ObjectOutputStream(baos);
+         File tmp = new File(System.getProperty("java.io.tmpdir"), "junit.parameters");
+         tmp.deleteOnExit();
+         FileOutputStream fos = new FileOutputStream(tmp);
+         ObjectOutputStream oos = new ObjectOutputStream(fos);
          oos.writeObject(parameters);
          oos.close();
-         byte[] bytes = baos.toByteArray();
-         StringBuffer hex = new StringBuffer(bytes.length * 2);
-         for (int i = 0; i < bytes.length; i++)
-         {
-            hex.append(Character.forDigit((bytes[i] & 0XF0) >> 4, 16));
-            hex.append(Character.forDigit((bytes[i] & 0X0F), 16));
-         }
-         Environment.Variable v = new Environment.Variable();
-         v.setKey(PARAMETER_PROPERTY_NAME);
-         v.setValue(hex.toString());
-         task.addSysproperty(v);
          return super.getName();
       }
       catch (IOException e)

Modified: trunk/common/src/main/org/jboss/portal/common/junit/ant/TestParameter.java
===================================================================
--- trunk/common/src/main/org/jboss/portal/common/junit/ant/TestParameter.java	2006-09-29 03:49:00 UTC (rev 5290)
+++ trunk/common/src/main/org/jboss/portal/common/junit/ant/TestParameter.java	2006-09-29 14:47:21 UTC (rev 5291)
@@ -22,8 +22,11 @@
 package org.jboss.portal.common.junit.ant;
 
 import java.util.Map;
+import java.util.Iterator;
 import java.io.ObjectInputStream;
 import java.io.ByteArrayInputStream;
+import java.io.File;
+import java.io.FileInputStream;
 
 /**
  * @author <a href="mailto:julien at jboss.org">Julien Viet</a>
@@ -60,30 +63,13 @@
 
    public static Map readExternalParameters() throws Exception
    {
-      String hex = System.getProperty(ConfigurableJUnitTest.PARAMETER_PROPERTY_NAME);
-      if (hex != null)
+      File tmp = new File(System.getProperty("java.io.tmpdir"), "junit.parameters");
+      if (tmp.exists() && tmp.isFile())
       {
-         int index = 0;
-         byte[] bytes = new byte[hex.length() / 2];
-         for (int i = 0; i < bytes.length; i++)
-         {
-            char chigh = hex.charAt(index++);
-            int high = Character.digit(chigh, 16);
-            if (high == -1)
-            {
-               throw new IllegalArgumentException("Hex string contains a bad char : " + chigh);
-            }
-            char clow = hex.charAt(index++);
-            int low = Character.digit(clow, 16);
-            if (low == -1)
-            {
-               throw new IllegalArgumentException("Hex string contains a bad char : " + clow);
-            }
-            byte value = (byte)((high << 4) + low);
-            bytes[i] = value;
-         }
-         ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(bytes));
+         FileInputStream fis = new FileInputStream(tmp);
+         ObjectInputStream ois = new ObjectInputStream(fis);
          Map parameters = (Map)ois.readObject();
+         ois.close();
          return parameters;
       }
       else

Modified: trunk/core/build.xml
===================================================================
--- trunk/core/build.xml	2006-09-29 03:49:00 UTC (rev 5290)
+++ trunk/core/build.xml	2006-09-29 14:47:21 UTC (rev 5291)
@@ -532,10 +532,12 @@
    <target name="test-blah" depends="init">
       <execute-tests>
          <x-sysproperty>
+
 <!--
             <jvmarg value="-Xdebug"/>
             <jvmarg value="-Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=y"/>
 -->
+
             <sysproperty key="jboss.aop.path"
                          value="${build.resources}/jboss-portal.sar/portal-aop.xml${path.separator}${source.etc}/jboss-aop/base-aop.xml"/>
             <sysproperty key="jboss.aop.class.path" value="${jbossas/core.libs.lib}/jboss-aspect-library.jar"/>
@@ -550,7 +552,7 @@
                <parameter name="PersistLocally" value="false"/>
             </zest>
             <!--<test todir="${test.reports}" name="org.jboss.portal.test.core.state.ProducerTestCase"/>-->
-            <test todir="${test.reports}" name="org.jboss.portal.test.core.deployment.JBossApplicationMetaDataFactoryTestCase"/>
+            <!--<test todir="${test.reports}" name="org.jboss.portal.test.core.deployment.JBossApplicationMetaDataFactoryTestCase"/>-->
          </x-test>
          <x-classpath>
             <pathelement location="${build.lib}/portal-core-lib.jar"/>

Modified: trunk/core/src/main/org/jboss/portal/core/impl/model/instance/AbstractInstance.java
===================================================================
--- trunk/core/src/main/org/jboss/portal/core/impl/model/instance/AbstractInstance.java	2006-09-29 03:49:00 UTC (rev 5290)
+++ trunk/core/src/main/org/jboss/portal/core/impl/model/instance/AbstractInstance.java	2006-09-29 14:47:21 UTC (rev 5291)
@@ -22,13 +22,12 @@
 package org.jboss.portal.core.impl.model.instance;
 
 import org.jboss.portal.portlet.PortletContext;
-import org.jboss.portal.portlet.StatefulPortletContext;
 
 /**
  * @author <a href="mailto:julien at jboss.org">Julien Viet</a>
  * @version $Revision: 1.1 $
  */
-public class AbstractInstance
+public abstract class AbstractInstance
 {
 
    /** . */
@@ -70,28 +69,8 @@
       this.state = state;
    }
 
-   public PortletContext getPortletContext()
-   {
-      if (state != null)
-      {
-         return new StatefulPortletContext(portletRef, state);
-      }
-      else
-      {
-         return new PortletContext(portletRef);
-      }
-   }
+   public abstract PortletContext getPortletContext();
 
-   void setPortletContext(PortletContext portletContext)
-   {
-      portletRef = portletContext.getId();
+   public abstract void setPortletContext(PortletContext portletContext);
 
-      //
-      if (portletContext instanceof StatefulPortletContext)
-      {
-         StatefulPortletContext statefulPortletContext = (StatefulPortletContext)portletContext;
-         state = statefulPortletContext.getMarshalledState();
-      }
-   }
-
 }

Modified: trunk/core/src/main/org/jboss/portal/core/impl/model/instance/InstanceImpl.java
===================================================================
--- trunk/core/src/main/org/jboss/portal/core/impl/model/instance/InstanceImpl.java	2006-09-29 03:49:00 UTC (rev 5290)
+++ trunk/core/src/main/org/jboss/portal/core/impl/model/instance/InstanceImpl.java	2006-09-29 14:47:21 UTC (rev 5291)
@@ -30,6 +30,7 @@
 import org.jboss.portal.portlet.PortletInvoker;
 import org.jboss.portal.portlet.PortletInvokerException;
 import org.jboss.portal.portlet.PortletContext;
+import org.jboss.portal.portlet.StatefulPortletContext;
 import org.jboss.portal.portlet.invocation.PortletInvocation;
 import org.jboss.portal.portlet.spi.UserContext;
 import org.jboss.portal.portlet.state.AccessMode;
@@ -42,6 +43,7 @@
 import java.util.HashSet;
 import java.util.Map;
 import java.util.Set;
+import java.util.Arrays;
 
 /**
  * @author <a href="mailto:julien at jboss.org">Julien Viet</a>
@@ -75,17 +77,15 @@
       this.state = null;
    }
 
-   public InstanceImpl(ContainerContext ctx, String id, PortletContext portletContext)
+   public InstanceImpl(ContainerContext ctx, String id, String portletRef)
    {
       this.context = ctx;
       this.modifiable = false;
+      this.portletRef = portletRef;
       this.instanceId = id;
       this.securityBindings = new HashMap();
       this.userInstances = new HashSet();
       this.state = null;
-
-      //
-      setPortletContext(portletContext);
    }
 
    // Hibernate ********************************************************************************************************
@@ -125,7 +125,6 @@
       this.modifiable = modifiable;
    }
 
-
    // ContextObject implementation *************************************************************************************
 
    public void setContext(Object context)
@@ -133,8 +132,32 @@
       this.context = (ContainerContext)context;
    }
 
-   // Misc *************************************************************************************************************
+   // AbstractInstance implementation **********************************************************************************
 
+   public PortletContext getPortletContext()
+   {
+      if (state != null)
+      {
+         return new StatefulPortletContext(portletRef, state);
+      }
+      else
+      {
+         return new PortletContext(portletRef);
+      }
+   }
+
+   public void setPortletContext(PortletContext portletContext)
+   {
+      portletRef = portletContext.getId();
+
+      //
+      if (portletContext instanceof StatefulPortletContext)
+      {
+         StatefulPortletContext statefulPortletContext = (StatefulPortletContext)portletContext;
+         state = statefulPortletContext.getMarshalledState();
+      }
+   }
+
    // Instance implementation ******************************************************************************************
 
    public String getId()
@@ -161,39 +184,74 @@
 
    public void setProperties(PropertyChange[] changes) throws PortletInvokerException
    {
+      if (changes == null)
+      {
+         throw new IllegalArgumentException("No null changes accepted");
+      }
+      boolean debug = log.isDebugEnabled();
+      
+
       // Get the invoker
       PersistentInstanceContainer container = (PersistentInstanceContainer)context.getContainer();
       PortletInvoker portletInvoker = container.getPortletInvoker();
 
       //
-      if (!modifiable)
+      PortletContext portletContext = getPortletContext();
+
+      //
+      if (modifiable == false)
       {
          // Clone the portlet
-         PortletContext clonedPortletContext = portletInvoker.createClone(getPortletContext());
+         if (debug)
+         {
+            log.debug("Need to clone non modifiable instance before setting properties " + instanceId + "/" + portletContext);
+         }
+         portletContext = portletInvoker.createClone(portletContext);
+         if (debug)
+         {
+            log.debug("Received updated portlet context " + portletContext + " for instance " + instanceId + " after explicit clone");
+         }
 
          // Update the state
-         setPortletContext(clonedPortletContext);
-         modifiable = true;
+         setPortletContext(portletContext);
+         setModifiable(true);
+
+         //
          Session session = container.getCurrentSession();
          session.update(this);
       }
 
       //
-      portletInvoker.setProperties(getPortletContext(), changes);
+      if (debug)
+      {
+         log.debug("Setting properties on " + instanceId + "/" + portletContext + " : " + Arrays.asList(changes));
+      }
+      portletContext = portletInvoker.setProperties(portletContext, changes);
+      if (debug)
+      {
+         log.debug("Received updated portlet context " + portletContext + " for instance " + instanceId + " after setting properties");
+      }
+      setPortletContext(portletContext);
+
+      //
+      Session session = container.getCurrentSession();
+      session.update(this);
    }
 
    public PropertyMap getProperties() throws PortletInvokerException
    {
       PersistentInstanceContainer container = (PersistentInstanceContainer)context.getContainer();
       PortletInvoker invoker = container.getPortletInvoker();
-      return invoker.getProperties(getPortletContext());
+      PortletContext portletContext = getPortletContext();
+      return invoker.getProperties(portletContext);
    }
 
    public PropertyMap getProperties(Set keys) throws PortletInvokerException
    {
       PersistentInstanceContainer container = (PersistentInstanceContainer)context.getContainer();
       PortletInvoker invoker = container.getPortletInvoker();
-      return invoker.getProperties(getPortletContext(), keys);
+      PortletContext portletContext = getPortletContext();
+      return invoker.getProperties(portletContext, keys);
    }
 
    public void invoke(PortletInvocation invocation) throws PortletInvokerException

Modified: trunk/core/src/main/org/jboss/portal/core/impl/model/instance/PersistentInstanceContainer.java
===================================================================
--- trunk/core/src/main/org/jboss/portal/core/impl/model/instance/PersistentInstanceContainer.java	2006-09-29 03:49:00 UTC (rev 5290)
+++ trunk/core/src/main/org/jboss/portal/core/impl/model/instance/PersistentInstanceContainer.java	2006-09-29 14:47:21 UTC (rev 5291)
@@ -231,9 +231,13 @@
       {
          throw new IllegalArgumentException("id cannot be null");
       }
+      boolean debug = log.isDebugEnabled();
 
       //
-      log.debug("Creating instance " + id + " of portlet " + portletId);
+      if (debug)
+      {
+         log.debug("Creating instance " + id + " of portlet " + portletId);
+      }
 
       //
       PortletContext portletContext = new PortletContext(portletId);
@@ -246,7 +250,7 @@
       try
       {
          // Create the persistent instance which may raise a constraint violation exception if it already exist
-         instance = new InstanceImpl(ctx, id, portletContext);
+         instance = new InstanceImpl(ctx, id, portletId);
          Session session = getCurrentSession();
          session.persist(instance);
       }
@@ -259,9 +263,23 @@
       if (clone)
       {
          // Clone the portlet state now and update the instance
-         PortletContext clonedPortletContext = portletInvoker.createClone(portletContext);
-         instance.setPortletContext(clonedPortletContext);
+         if (debug)
+         {
+            log.debug("Cloning instance " + instance.instanceId + "/" + portletContext);
+         }
+         portletContext = portletInvoker.createClone(portletContext);
+         if (debug)
+         {
+            log.debug("Instance " + instance.instanceId + " succesfully cloned " + portletContext);
+         }
+
+         //
+         instance.setPortletContext(portletContext);
          instance.setModifiable(true);
+
+         //
+         Session session = getCurrentSession();
+         session.update(instance);
       }
 
       //
@@ -312,7 +330,7 @@
       }
 
       //
-      if (instance.modifiable)
+      if (instance.isModifiable())
       {
          // Destroy the state only if it is not a producer offered portlet
          PortletContext sharedPortletContext = instance.getPortletContext();

Modified: trunk/core/src/main/org/jboss/portal/core/impl/model/instance/UserInstance.java
===================================================================
--- trunk/core/src/main/org/jboss/portal/core/impl/model/instance/UserInstance.java	2006-09-29 03:49:00 UTC (rev 5290)
+++ trunk/core/src/main/org/jboss/portal/core/impl/model/instance/UserInstance.java	2006-09-29 14:47:21 UTC (rev 5291)
@@ -83,4 +83,30 @@
    {
       this.userId = userId;
    }
+
+   // AbstractInstance implementation **********************************************************************************
+
+   public PortletContext getPortletContext()
+   {
+      if (state != null)
+      {
+         return new StatefulPortletContext(portletRef, state);
+      }
+      else
+      {
+         return new PortletContext(portletRef);
+      }
+   }
+
+   public void setPortletContext(PortletContext portletContext)
+   {
+      portletRef = portletContext.getId();
+
+      //
+      if (portletContext instanceof StatefulPortletContext)
+      {
+         StatefulPortletContext statefulPortletContext = (StatefulPortletContext)portletContext;
+         state = statefulPortletContext.getMarshalledState();
+      }
+   }
 }

Modified: trunk/core/src/main/org/jboss/portal/test/core/model/instance/InstanceContainerTestCase.java
===================================================================
--- trunk/core/src/main/org/jboss/portal/test/core/model/instance/InstanceContainerTestCase.java	2006-09-29 03:49:00 UTC (rev 5290)
+++ trunk/core/src/main/org/jboss/portal/test/core/model/instance/InstanceContainerTestCase.java	2006-09-29 14:47:21 UTC (rev 5291)
@@ -42,6 +42,7 @@
 import org.jboss.portal.common.junit.metadata.TestCaseParameterMetaData;
 import org.jboss.portal.test.framework.TestRuntimeContext;
 import org.jboss.portal.common.value.StringValue;
+import org.jboss.portal.common.util.CollectionBuilder;
 import org.apache.log4j.Appender;
 import org.apache.log4j.ConsoleAppender;
 import org.apache.log4j.SimpleLayout;
@@ -86,7 +87,6 @@
       TestCaseMetaData testCaseMD = new TestCaseMetaData();
       testCaseMD.bindParameter(new TestCaseParameterMetaData("DataSourceConfig"), DataSourceSupport.Config.fromXML2(configsURL));
       testCaseMD.bindExternalParameters();
-//      testCaseMD.bindParameter(new TestCaseParameterMetaData("PersistLocally"), new TestCaseParameterIterableValue(Arrays.asList(new Object[]{Boolean.TRUE,Boolean.FALSE})));
       TestSuite suite = TestCaseFactory.create(testCaseMD, InstanceContainerTestCase.class);
       return suite;
    }
@@ -130,6 +130,10 @@
    public InstanceContainerTestCase(Map parametrization)
    {
       dataSourceConfig = (DataSourceSupport.Config)parametrization.get("DataSourceConfig");
+      System.out.println("parametrization = " + parametrization);
+      System.out.println("(String)parametrization.get(\"PersistLocally\") = " + (String)parametrization.get("PersistLocally"));
+      System.out.println("(String)parametrization.get(\"PersistLocally\") = " + (String)parametrization.get("PersistLocally"));
+      System.out.println("(String)parametrization.get(\"PersistLocally\") = " + (String)parametrization.get("PersistLocally"));
       persistLocally = Boolean.valueOf((String)parametrization.get("PersistLocally")).booleanValue();
    }
 
@@ -270,7 +274,7 @@
       {
          {
             PreferencesInfoSupport prefs = info.getPreferencesSupport();
-            prefs.addPreference("_abc", new StringValue("_def"));
+            prefs.addPreference("abc", new StringValue("def"));
          }
       });
 
@@ -289,11 +293,20 @@
 
       //
       TransactionAssert.beginTransaction();
-      instance.setProperties(new PropertyChange[0]);
+      instance.setProperties(new PropertyChange[]{PropertyChange.newUpdate("abc", new StringValue("_def")), PropertyChange.newUpdate("ghi", new StringValue("_jkl"))});
       TransactionAssert.commitTransaction();
 
       //
       TransactionAssert.beginTransaction();
+      PropertyMap props = instance.getProperties(new CollectionBuilder().add("abc").add("ghi").toHashSet());
+      PropertyMap expectedProps = new SimplePropertyMap();
+      expectedProps.setProperty("abc", new StringValue("_def"));
+      expectedProps.setProperty("ghi", new StringValue("_jkl"));
+      ValueMapAssert.assertEquals(expectedProps, props);
+      TransactionAssert.commitTransaction();
+
+      //
+      TransactionAssert.beginTransaction();
       session = instanceHibernateSupport.getCurrentSession();
       instances = session.createQuery("from InstanceImpl").list();
       assertEquals(1, instances.size());
@@ -705,7 +718,7 @@
    }
 //
 ////   /**Tests the authorization of portal objects */
-////   public void _testInstanceAuthorization() throws Exception
+////   public void testInstanceAuthorization() throws Exception
 ////   {
 ////      container.start();
 ////
@@ -728,7 +741,7 @@
 ////   }
 ////
 ////   /**Tests the authorization of portal objects */
-////   public void _testInstanceAuthorizationForAdmin() throws Exception
+////   public void testInstanceAuthorizationForAdmin() throws Exception
 ////   {
 ////      container.start();
 ////

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-09-29 03:49:00 UTC (rev 5290)
+++ trunk/core/src/resources/portal-samples-war/WEB-INF/portlet-instances.xml	2006-09-29 14:47:21 UTC (rev 5291)
@@ -50,6 +50,25 @@
       <instance>
          <instance-id>TestPortletInstance</instance-id>
          <portlet-ref>TestPortlet</portlet-ref>
+         <portlet-preferences>
+            <preference>
+               <name>read-write foo</name>
+               <value>bar</value>
+            </preference>
+            <preference>
+               <name>read-only foo</name>
+               <value>bar</value>
+            </preference>
+            <preference>
+               <name>read-write foo[]</name>
+               <value>bar0</value>
+               <value>bar1</value>
+            </preference>
+            <preference>
+               <name>html chars</name>
+               <value><![CDATA[<&>"]]></value>
+            </preference>
+         </portlet-preferences>
       </instance>
    </deployment>
    <deployment>

Modified: trunk/core/src/resources/portal-samples-war/WEB-INF/portlet.xml
===================================================================
--- trunk/core/src/resources/portal-samples-war/WEB-INF/portlet.xml	2006-09-29 03:49:00 UTC (rev 5290)
+++ trunk/core/src/resources/portal-samples-war/WEB-INF/portlet.xml	2006-09-29 14:47:21 UTC (rev 5291)
@@ -32,6 +32,7 @@
       <portlet-info>
          <title>Test portlet</title>
       </portlet-info>
+<!--
       <portlet-preferences>
          <preference>
             <name>read-write foo</name>
@@ -52,6 +53,7 @@
             <value><![CDATA[<&>"]]></value>
          </preference>
       </portlet-preferences>
+-->
       <security-role-ref>
          <role-name>Admin</role-name>
       </security-role-ref>

Modified: trunk/tools/lib/explode.jar
===================================================================
(Binary files differ)




More information about the jboss-svn-commits mailing list