You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jetspeed-dev@portals.apache.org by we...@apache.org on 2005/06/13 20:05:47 UTC
svn commit: r190458 -
/portals/jetspeed-2/trunk/components/registry/src/test/org/apache/jetspeed/components/portletentity/TestPortletEntityDAO.java
Author: weaver
Date: Mon Jun 13 11:05:46 2005
New Revision: 190458
URL: http://svn.apache.org/viewcvs?rev=190458&view=rev
Log: (empty)
Added:
portals/jetspeed-2/trunk/components/registry/src/test/org/apache/jetspeed/components/portletentity/TestPortletEntityDAO.java
Added: portals/jetspeed-2/trunk/components/registry/src/test/org/apache/jetspeed/components/portletentity/TestPortletEntityDAO.java
URL: http://svn.apache.org/viewcvs/portals/jetspeed-2/trunk/components/registry/src/test/org/apache/jetspeed/components/portletentity/TestPortletEntityDAO.java?rev=190458&view=auto
==============================================================================
--- portals/jetspeed-2/trunk/components/registry/src/test/org/apache/jetspeed/components/portletentity/TestPortletEntityDAO.java (added)
+++ portals/jetspeed-2/trunk/components/registry/src/test/org/apache/jetspeed/components/portletentity/TestPortletEntityDAO.java Mon Jun 13 11:05:46 2005
@@ -0,0 +1,612 @@
+/*
+ * Copyright 2000-2001,2004 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.jetspeed.components.portletentity;
+
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Locale;
+import java.util.prefs.Preferences;
+
+import org.apache.jetspeed.aggregator.PortletContent;
+import org.apache.jetspeed.components.portletregistry.PortletRegistry;
+import org.apache.jetspeed.components.util.DatasourceEnabledSpringTestCase;
+import org.apache.jetspeed.om.common.SecurityConstraints;
+import org.apache.jetspeed.om.common.portlet.MutablePortletApplication;
+import org.apache.jetspeed.om.common.portlet.MutablePortletEntity;
+import org.apache.jetspeed.om.common.portlet.PortletDefinitionComposite;
+import org.apache.jetspeed.om.common.preference.PreferenceComposite;
+import org.apache.jetspeed.om.common.preference.PreferenceSetComposite;
+import org.apache.jetspeed.om.page.ContentFragment;
+import org.apache.jetspeed.om.page.Fragment;
+import org.apache.jetspeed.om.page.Property;
+//import org.apache.jetspeed.om.page.psml.ContentFragmentImpl;
+import org.apache.jetspeed.om.portlet.impl.PortletApplicationDefinitionImpl;
+import org.apache.jetspeed.om.portlet.impl.PortletDefinitionImpl;
+import org.apache.jetspeed.om.servlet.impl.WebApplicationDefinitionImpl;
+import org.apache.jetspeed.util.JetspeedObjectID;
+import org.apache.pluto.om.portlet.PortletApplicationDefinition;
+import org.apache.pluto.om.portlet.PortletDefinitionList;
+import org.jmock.Mock;
+import org.jmock.core.matcher.InvokeAtLeastOnceMatcher;
+import org.jmock.core.stub.ReturnStub;
+
+/**
+ * <p>
+ * TestPortletEntityDAO
+ * </p>
+ * <p>
+ *
+ * </p>
+ * @author <a href="mailto:weaver@apache.org">Scott T. Weaver</a>
+ * @version $Id: TestPortletEntityDAO.java,v 1.3 2005/05/24 14:43:19 ate Exp $
+ *
+ */
+public class TestPortletEntityDAO extends DatasourceEnabledSpringTestCase
+{
+
+ // Dummy ContentFragment wrapper around Fragment as using the real ContentFragmentImpl
+ // would introduce a circular dependency between the registry and page-manager components.
+ // Probably should be replaced by a Mock but I don't know how to setup that quickly
+ // and the whole ContentFragment construction is bound to be replaced soon anyway...
+
+ private static class ContentFragmentImpl implements Fragment, ContentFragment
+ {
+ private Fragment f;
+
+ /**
+ * @param f
+ * @param list
+ */
+ public ContentFragmentImpl(Fragment f, HashMap list)
+ {
+ super();
+ this.f = f;
+ }
+ /**
+ * @param p
+ */
+ public void addProperty(Property p)
+ {
+ f.addProperty(p);
+ }
+ /**
+ * @param actions
+ * @throws SecurityException
+ */
+ public void checkAccess(String actions) throws SecurityException
+ {
+ f.checkAccess(actions);
+ }
+ /**
+ * @param actions
+ * @throws SecurityException
+ */
+ public void checkConstraints(String actions) throws SecurityException
+ {
+ f.checkConstraints(actions);
+ }
+ /**
+ * @param actions
+ * @throws SecurityException
+ */
+ public void checkPermissions(String actions) throws SecurityException
+ {
+ f.checkPermissions(actions);
+ }
+ /**
+ * @param layoutName
+ */
+ public void clearProperties(String layoutName)
+ {
+ f.clearProperties(layoutName);
+ }
+ /* (non-Javadoc)
+ * @see java.lang.Object#equals(java.lang.Object)
+ */
+ public boolean equals(Object obj)
+ {
+ return f.equals(obj);
+ }
+ /**
+ * @return
+ */
+ public boolean getConstraintsEnabled()
+ {
+ return f.getConstraintsEnabled();
+ }
+ /**
+ * @return
+ */
+ public String getDecorator()
+ {
+ return f.getDecorator();
+ }
+ /**
+ * @return
+ */
+ public List getFragments()
+ {
+ return f.getFragments();
+ }
+ /**
+ * @return
+ */
+ public String getId()
+ {
+ return f.getId();
+ }
+ /**
+ * @return
+ */
+ public List getLayoutProperties()
+ {
+ return f.getLayoutProperties();
+ }
+ /**
+ * @return
+ */
+ public String getName()
+ {
+ return f.getName();
+ }
+ /**
+ * @return
+ */
+ public boolean getPermissionsEnabled()
+ {
+ return f.getPermissionsEnabled();
+ }
+ /**
+ * @param layoutName
+ * @return
+ */
+ public List getProperties(String layoutName)
+ {
+ return f.getProperties(layoutName);
+ }
+ /**
+ * @param layout
+ * @param propName
+ * @return
+ */
+ public String getPropertyValue(String layout, String propName)
+ {
+ return f.getPropertyValue(layout, propName);
+ }
+ /**
+ * @return
+ */
+ public SecurityConstraints getSecurityConstraints()
+ {
+ return f.getSecurityConstraints();
+ }
+ /**
+ * @return
+ */
+ public String getShortTitle()
+ {
+ return f.getShortTitle();
+ }
+ /**
+ * @return
+ */
+ public String getSkin()
+ {
+ return f.getSkin();
+ }
+ /**
+ * @return
+ */
+ public String getState()
+ {
+ return f.getState();
+ }
+ /**
+ * @return
+ */
+ public String getTitle()
+ {
+ return f.getTitle();
+ }
+ /**
+ * @return
+ */
+ public String getType()
+ {
+ return f.getType();
+ }
+ /* (non-Javadoc)
+ * @see java.lang.Object#hashCode()
+ */
+ public int hashCode()
+ {
+ return f.hashCode();
+ }
+ /**
+ * @return
+ */
+ public boolean isReference()
+ {
+ return f.isReference();
+ }
+ /**
+ * @param p
+ */
+ public void removeProperty(Property p)
+ {
+ f.removeProperty(p);
+ }
+ /**
+ * @param decoratorName
+ */
+ public void setDecorator(String decoratorName)
+ {
+ f.setDecorator(decoratorName);
+ }
+ /**
+ * @param id
+ */
+ public void setId(String id)
+ {
+ f.setId(id);
+ }
+ /**
+ * @param name
+ */
+ public void setName(String name)
+ {
+ f.setName(name);
+ }
+ /**
+ * @param layout
+ * @param propName
+ * @param value
+ */
+ public void setPropertyValue(String layout, String propName, String value)
+ {
+ f.setPropertyValue(layout, propName, value);
+ }
+ /**
+ * @param constraints
+ */
+ public void setSecurityConstraints(SecurityConstraints constraints)
+ {
+ f.setSecurityConstraints(constraints);
+ }
+ /**
+ * @param title
+ */
+ public void setShortTitle(String title)
+ {
+ f.setShortTitle(title);
+ }
+ /**
+ * @param skinName
+ */
+ public void setSkin(String skinName)
+ {
+ f.setSkin(skinName);
+ }
+ /**
+ * @param state
+ */
+ public void setState(String state)
+ {
+ f.setState(state);
+ }
+ /**
+ * @param title
+ */
+ public void setTitle(String title)
+ {
+ f.setTitle(title);
+ }
+ /**
+ * @param type
+ */
+ public void setType(String type)
+ {
+ f.setType(type);
+ }
+ /* (non-Javadoc)
+ * @see java.lang.Object#toString()
+ */
+ public String toString()
+ {
+ return f.toString();
+ }
+
+ public Object clone() throws CloneNotSupportedException
+ {
+ return f.clone();
+ }
+ /* (non-Javadoc)
+ * @see org.apache.jetspeed.om.page.ContentFragment#getContentFragments()
+ */
+ public List getContentFragments()
+ {
+ // TODO Auto-generated method stub
+ return null;
+ }
+ /* (non-Javadoc)
+ * @see org.apache.jetspeed.om.page.ContentFragment#getRenderedContent()
+ */
+ public String getRenderedContent() throws IllegalStateException
+ {
+ // TODO Auto-generated method stub
+ return null;
+ }
+ /* (non-Javadoc)
+ * @see org.apache.jetspeed.om.page.ContentFragment#overrideRenderedContent(java.lang.String)
+ */
+ public void overrideRenderedContent(String contnent)
+ {
+ // TODO Auto-generated method stub
+
+ }
+ /* (non-Javadoc)
+ * @see org.apache.jetspeed.om.page.ContentFragment#setPortletContent(org.apache.jetspeed.aggregator.PortletContent)
+ */
+ public void setPortletContent(PortletContent portletContent)
+ {
+ // TODO Auto-generated method stub
+
+ }
+ }
+
+ private static final String TEST_APP = "EntityTestApp";
+ private static final String TEST_PORTLET = "EntityTestPortlet";
+ private static final String TEST_ENTITY = "user5/entity-9";
+ private PortletEntityAccessComponent entityAccess = null;
+ private PortletRegistry registry;
+
+ protected void setUp() throws Exception
+ {
+ super.setUp();
+ this.entityAccess = (PortletEntityAccessComponent) ctx.getBean("portletEntityAccess");
+ this.registry = (PortletRegistry) ctx.getBean("portletRegistry");
+ teardownTestData();
+ setupTestData();
+ }
+
+ protected void tearDown() throws Exception
+ {
+ teardownTestData();
+ }
+
+ public void test1() throws Exception
+ {
+ assertNotNull(this.entityAccess);
+ assertNotNull(this.registry);
+ }
+
+ public void testEntities() throws Exception
+ {
+
+
+
+ PortletApplicationDefinition pa = registry.getPortletApplication(TEST_APP);
+ assertNotNull("Portlet Application", pa);
+ System.out.println("pa = " + pa.getId());
+ PortletDefinitionList portlets = pa.getPortletDefinitionList(); //.get(JetspeedObjectID.createFromString(TEST_PORTLET));
+ Iterator pi = portlets.iterator();
+ PortletDefinitionComposite pd = null;
+ while (pi.hasNext())
+ {
+ pd = (PortletDefinitionComposite)pi.next();
+ assertTrue("Portlet Def not found", pd.getName().equals("EntityTestPortlet"));
+ }
+ assertNotNull("Portlet Def is null", pd);
+
+
+
+ Mock mockf1 = new Mock(Fragment.class);
+ mockf1.expects(new InvokeAtLeastOnceMatcher()).method("getName").will(new ReturnStub(pd.getUniqueName()));
+ mockf1.expects(new InvokeAtLeastOnceMatcher()).method("getId").will(new ReturnStub(TEST_ENTITY));
+ ContentFragment f1 = new ContentFragmentImpl((Fragment) mockf1.proxy(), new HashMap());
+
+ MutablePortletEntity entity = entityAccess.generateEntityFromFragment(new ContentFragmentImpl(f1, new HashMap()));
+ PreferenceSetComposite prefs = (PreferenceSetComposite) entity.getPreferenceSet();
+ prefs.remove("pref1");
+ assertNotNull(prefs);
+ assertNull(prefs.get("pref1"));
+
+ // test adding a pref
+ prefs.add("pref1", Arrays.asList(new String[]{"1"}));
+ assertNotNull(prefs.get("pref1"));
+
+ // Remove should return the deleted pref
+ assertNotNull(prefs.remove("pref1"));
+
+ // Should be gone
+ assertNull(prefs.get("pref1"));
+
+ // Add it back so we can test tole back
+ prefs.add("pref1", Arrays.asList(new String[]{"1"}));
+
+ entityAccess.storePortletEntity(entity);
+
+ prefs = (PreferenceSetComposite) entity.getPreferenceSet();
+
+ assertNotNull(prefs.get("pref1"));
+
+ PreferenceComposite pref = (PreferenceComposite) prefs.get("pref1");
+
+ assertEquals("1", pref.getValueAt(0));
+
+ pref.setValueAt(0, "2");
+
+ assertEquals("2", pref.getValueAt(0));
+
+ entity.reset();
+
+ pref = (PreferenceComposite) prefs.get("pref1");
+
+ assertEquals("1", pref.getValueAt(0));
+
+ prefs.remove(pref);
+
+ assertNull(prefs.get("pref1"));
+
+ entity.reset();
+
+ assertNotNull(prefs.get("pref1"));
+
+ prefs.add("pref2", Arrays.asList(new String[]{"2", "3"}));
+
+ entity.store();
+
+ PreferenceComposite pref2 = (PreferenceComposite) prefs.get("pref2");
+
+ assertNotNull(pref2);
+
+ Iterator prefsValues = pref2.getValues();
+ int count = 0;
+ while(prefsValues.hasNext())
+ {
+ prefsValues.next();
+ count++;
+ }
+
+ assertEquals(2, count);
+
+ pref2.addValue("4");
+ prefsValues = pref2.getValues();
+ count = 0;
+ while(prefsValues.hasNext())
+ {
+ assertEquals(String.valueOf(count+2), prefsValues.next());
+ count++;
+ }
+ assertEquals(3, count);
+
+ entity.reset();
+
+ prefsValues = pref2.getValues();
+ count = 0;
+ while(prefsValues.hasNext())
+ {
+ assertEquals(String.valueOf(count+2), prefsValues.next());
+ count++;
+ }
+ assertEquals(2, count);
+
+ MutablePortletEntity entity2 = entityAccess.getPortletEntityForFragment(f1);
+ assertTrue("entity id ", entity2.getId().toString().equals(TEST_ENTITY));
+ assertNotNull("entity's portlet ", entity2.getPortletDefinition());
+ mockf1.verify();
+
+
+ Mock mockf2 = new Mock(Fragment.class);
+ mockf2.expects(new InvokeAtLeastOnceMatcher()).method("getName").will(new ReturnStub(pd.getUniqueName()));
+ ContentFragment f2 = new ContentFragmentImpl((Fragment) mockf2.proxy(), new HashMap());
+
+ MutablePortletEntity entity5 = entityAccess.newPortletEntityInstance(pd);
+
+ System.out.println("before storing entity: " + entity5.getId());
+
+ entityAccess.storePortletEntity(entity5);
+ System.out.println("store done: " + entity5.getId());
+ mockf2.expects(new InvokeAtLeastOnceMatcher()).method("getId").will(new ReturnStub( entity5.getId().toString()));
+
+ MutablePortletEntity entity6 = entityAccess.getPortletEntityForFragment(f2);
+ assertNotNull(entity6);
+ System.out.println("reget : " + entity6.getId());
+
+ entityAccess.removePortletEntity(entity6);
+
+
+ }
+
+ private void teardownTestData()
+ throws Exception
+ {
+
+
+ JetspeedObjectID objId = JetspeedObjectID.createFromString(TEST_ENTITY);
+ MutablePortletEntity entity = entityAccess.getPortletEntity(objId);
+ System.out.println("entity == " + entity);
+
+ if (entity != null)
+ {
+ entityAccess.removePortletEntity(entity);
+ }
+
+ PortletApplicationDefinition pa = registry.getPortletApplication(TEST_APP);
+ System.out.println("pa == " + pa);
+ if (pa != null)
+ {
+ registry.removeApplication(pa);
+ }
+
+
+
+ if(Preferences.systemRoot().nodeExists(MutablePortletApplication.PREFS_ROOT))
+ {
+ Preferences.systemRoot().node(MutablePortletApplication.PREFS_ROOT).removeNode();
+ }
+
+ if(Preferences.userRoot().nodeExists(PortletDefinitionComposite.PORTLETS_PREFS_ROOT))
+ {
+ Preferences.userRoot().node(PortletDefinitionComposite.PORTLETS_PREFS_ROOT).removeNode();
+ }
+
+
+ if(Preferences.userRoot().nodeExists(MutablePortletEntity.PORTLET_ENTITY_ROOT))
+ {
+ Preferences.userRoot().node(MutablePortletEntity.PORTLET_ENTITY_ROOT).removeNode();
+ }
+
+ }
+
+ private void setupTestData()
+ throws Exception
+ {
+
+ PortletApplicationDefinitionImpl app = new PortletApplicationDefinitionImpl();
+ app.setName(TEST_APP);
+ app.setApplicationIdentifier(TEST_APP);
+
+ WebApplicationDefinitionImpl webApp = new WebApplicationDefinitionImpl();
+ webApp.setContextRoot("/app1");
+ webApp.addDescription(Locale.FRENCH, "Description: Le fromage est dans mon pantalon!");
+ webApp.addDisplayName(Locale.FRENCH, "Display Name: Le fromage est dans mon pantalon!");
+
+ PortletDefinitionComposite portlet = new PortletDefinitionImpl();
+ portlet.setClassName("org.apache.Portlet");
+ portlet.setName(TEST_PORTLET);
+ portlet.addDescription(Locale.getDefault(),"Portlet description.");
+ portlet.addDisplayName(Locale.getDefault(),"Portlet display Name.");
+
+ portlet.addInitParameter("testparam", "test value", "This is a test portlet parameter", Locale.getDefault());
+
+ app.addPortletDefinition(portlet);
+
+ app.setWebApplicationDefinition(webApp);
+
+ PreferenceSetComposite prefSet = (PreferenceSetComposite) portlet.getPreferenceSet();
+ prefSet.add("pref1", Arrays.asList(new String[]{"1"}));
+
+ registry.registerPortletApplication(app);
+ }
+
+ protected String[] getConfigurations()
+ {
+ return new String[] {"/META-INF/transaction.xml", "/META-INF/registry-dao.xml", "/META-INF/entity-dao.xml"};
+ }
+}
---------------------------------------------------------------------
To unsubscribe, e-mail: jetspeed-dev-unsubscribe@portals.apache.org
For additional commands, e-mail: jetspeed-dev-help@portals.apache.org