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 rw...@apache.org on 2009/11/18 19:24:53 UTC

svn commit: r881862 [8/16] - in /portals/jetspeed-2/portal/trunk: ./ applications/jetspeed/src/main/webapp/WEB-INF/jetui/yui/ applications/jetspeed/src/main/webapp/WEB-INF/templates/ applications/jetspeed/src/main/webapp/decorations/layout/greenearth/ ...

Modified: portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/main/java/org/apache/jetspeed/om/page/psml/FragmentImpl.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/main/java/org/apache/jetspeed/om/page/psml/FragmentImpl.java?rev=881862&r1=881861&r2=881862&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/main/java/org/apache/jetspeed/om/page/psml/FragmentImpl.java (original)
+++ portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/main/java/org/apache/jetspeed/om/page/psml/FragmentImpl.java Wed Nov 18 18:24:48 2009
@@ -17,59 +17,35 @@
 
 package org.apache.jetspeed.om.page.psml;
 
-import java.security.AccessController;
-import java.security.Permission;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
+import java.util.Stack;
 
 import org.apache.jetspeed.JetspeedActions;
 import org.apache.jetspeed.idgenerator.IdGenerator;
 import org.apache.jetspeed.om.folder.Folder;
+import org.apache.jetspeed.om.page.BaseFragmentElement;
+import org.apache.jetspeed.om.page.BaseFragmentValidationListener;
 import org.apache.jetspeed.om.page.Fragment;
-import org.apache.jetspeed.om.page.PageSecurity;
-import org.apache.jetspeed.security.PermissionFactory;
 
 /**
  * @version $Id$
  */
-public class FragmentImpl extends AbstractBaseElement implements Fragment, java.io.Serializable
+public class FragmentImpl extends AbstractBaseFragmentElement implements Fragment, java.io.Serializable
 {
     private String type = null;
 
-    private String state = null;
-
-    private String mode = null;
-
-    private String decorator = null;
-
-    private String skin = null;
-
     private List fragments = new ArrayList();
 
-    private List propertiesList = new ArrayList();
-    
-    private List preferences = new ArrayList();
-    
-    private Map propertiesMap = new HashMap();
+    private List fragmentElementImpls = new ArrayList();
 
     private String name;
 
     private FragmentList fragmentsList;
 
-    private PageImpl page;
-
-    private boolean dirty = false;
-    
-    private static PermissionFactory pf;
-    
-    public static void setPermissionsFactory(PermissionFactory pf)
-    {
-        FragmentImpl.pf = pf;
-    }
-        
     /**
      * <p>
      * Default Constructor.
@@ -89,51 +65,6 @@
         this.type = type;
     }
 
-    public String getState()
-    {
-        return this.state;
-    }
-
-    public void setState( String state )
-    {
-        this.state = state;
-    }
-
-    public String getMode()
-    {
-        return this.mode;
-    }
-
-    public void setMode( String mode )
-    {
-        this.mode = mode;
-    }
-
-    public String getDecorator()
-    {
-        return this.decorator;
-    }
-
-    public void setDecorator( String decoratorName )
-    {
-        this.decorator = decoratorName;
-    }
-
-    public String getSkin()
-    {
-        return this.skin;
-    }
-
-    public void setSkin( String skin )
-    {
-        this.skin = skin;
-    }
-
-    public boolean isReference()
-    {
-        return false;
-    }
-
     List accessFragments()
     {
         return fragments;
@@ -150,358 +81,170 @@
         return filterFragmentsByAccess(fragmentsList);
     }
 
-    public List getPropertiesList()
-    {
-        return (List) this.propertiesList;
-    }
-    
-    /**
-     * @see org.apache.jetspeed.om.page.Fragment#getProperty(java.lang.String)
-     */
-    public String getProperty(String propName)
-    {
-        return (String)propertiesMap.get(propName);
-    }
-    
     /**
-     * @see org.apache.jetspeed.om.page.Fragment#getIntProperty(java.lang.String)
-     */
-    public int getIntProperty(String propName)
-    {
-        String prop = (String)propertiesMap.get(propName);
-        if (prop != null)
-        {
-            return Integer.parseInt(prop);
-        }
-        return -1;
-    }
-    
-    /**
-     * @see org.apache.jetspeed.om.page.Fragment#getFloatProperty(java.lang.String)
-     */
-    public float getFloatProperty(String propName)
-    {
-        String prop = (String)propertiesMap.get(propName);
-        if (prop != null)
-        {
-            return Float.parseFloat(prop);
-        }
-        return -1.0F;
-    }
-    
-    /**
-     * @see org.apache.jetspeed.om.page.Fragment#getProperties()
-     */
-    public Map getProperties()
-    {
-        return propertiesMap;
-    }
-
-    /**
-     * @see org.apache.jetspeed.om.page.Fragment#getLayoutRow()
+     * getFragmentElementImpls - get list of wrapped fragment elements
+     *
+     * @return wrapped element list
      */
-    public int getLayoutRow()
+    public List getFragmentElementImpls()
     {
-        return getIntProperty(ROW_PROPERTY_NAME);
+        return fragmentElementImpls;
     }
 
     /**
-     * @see org.apache.jetspeed.om.page.Fragment#setLayoutRow(int)
+     * setFragmentElementImpls - set list of wrapped fragment elements
+     *
+     * @param elements wrapped element list
      */
-    public void setLayoutRow(int row)
+    public void setFragmentElementImpls(List elements)
     {
-        if (row >= 0)
-        {
-            propertiesMap.put(ROW_PROPERTY_NAME, String.valueOf(row));
-        }
-        else
-        {
-            propertiesMap.remove(ROW_PROPERTY_NAME);
-        }
+        fragmentElementImpls = elements;
     }
     
     /**
-     * @see org.apache.jetspeed.om.page.Fragment#getLayoutColumn()
+     * <p>
+     * getName
+     * </p>
+     * 
+     * @see org.apache.jetspeed.om.page.Fragment#getName()
+     * @return
      */
-    public int getLayoutColumn()
+    public String getName()
     {
-        return getIntProperty(COLUMN_PROPERTY_NAME);
+        return name;
     }
 
     /**
-     * @see org.apache.jetspeed.om.page.Fragment#setLayoutColumn(int)
-     */
-    public void setLayoutColumn(int column)
-    {
-        if (column >= 0)
-        {
-            propertiesMap.put(COLUMN_PROPERTY_NAME, String.valueOf(column));
-        }
-        else
-        {
-            propertiesMap.remove(COLUMN_PROPERTY_NAME);
-        }
-    }
-    
-    /**
-     * @see org.apache.jetspeed.om.page.Fragment#getLayoutSizes()
-     */
-    public String getLayoutSizes()
-    {
-        return (String)propertiesMap.get(SIZES_PROPERTY_NAME);
-    }
-    
-    /**
-     * @see org.apache.jetspeed.om.page.Fragment#setLayoutSizes(java.lang.String)
+     * <p>
+     * setName
+     * </p>
+     * 
+     * @see org.apache.jetspeed.om.page.Fragment#setName(java.lang.String)
+     * @param name
      */
-    public void setLayoutSizes(String sizes)
+    public void setName( String name )
     {
-        if (sizes != null)
-        {
-            propertiesMap.put(SIZES_PROPERTY_NAME, sizes);
-        }
-        else
-        {
-            propertiesMap.remove(SIZES_PROPERTY_NAME);
-        }
-    }
+        this.name = name;
 
-    /**
-     * @see org.apache.jetspeed.om.page.Fragment#getLayoutX()
-     */
-    public float getLayoutX()
-    {
-        return getFloatProperty(X_PROPERTY_NAME);
     }
 
-    /**
-     * @see org.apache.jetspeed.om.page.Fragment#setLayoutX(float)
-     */
-    public void setLayoutX(float x)
+    void setBaseFragmentsElement(AbstractBaseFragmentsElement baseFragmentsElement)
     {
-        if (x >= 0.0F)
-        {
-            propertiesMap.put(X_PROPERTY_NAME, String.valueOf(x));
-        }
-        else
+        // set base fragments implementation
+        super.setBaseFragmentsElement(baseFragmentsElement);
+        // propagate to children
+        if (fragments != null)
         {
-            propertiesMap.remove(X_PROPERTY_NAME);
+            Iterator fragmentsIter = fragments.iterator();
+            while (fragmentsIter.hasNext())
+            {
+                ((AbstractBaseFragmentElement)fragmentsIter.next()).setBaseFragmentsElement(baseFragmentsElement);
+            }
         }
     }
     
-    /**
-     * @see org.apache.jetspeed.om.page.Fragment#getLayoutY()
-     */
-    public float getLayoutY()
-    {
-        return getFloatProperty(Y_PROPERTY_NAME);
-    }
-
-    /**
-     * @see org.apache.jetspeed.om.page.Fragment#setLayoutY(float)
+    /* (non-Javadoc)
+     * @see org.apache.jetspeed.om.page.Fragment#getFragmentById(java.lang.String)
      */
-    public void setLayoutY(float y)
+    public BaseFragmentElement getFragmentById( String id )
     {
-        if (y >= 0.0F)
-        {
-            propertiesMap.put(Y_PROPERTY_NAME, String.valueOf(y));
-        }
-        else
+        Stack stack = new Stack();
+        Iterator i = getFragments().iterator();
+        while (i.hasNext())
         {
-            propertiesMap.remove(Y_PROPERTY_NAME);
+            stack.push(i.next());
         }
-    }
 
-    /**
-     * @see org.apache.jetspeed.om.page.Fragment#getLayoutZ()
-     */
-    public float getLayoutZ()
-    {
-        return getFloatProperty(Z_PROPERTY_NAME);
-    }
+        BaseFragmentElement f = (BaseFragmentElement) stack.pop();
 
-    /**
-     * @see org.apache.jetspeed.om.page.Fragment#setLayoutZ(float)
-     */
-    public void setLayoutZ(float z)
-    {
-        if (z >= 0.0F)
-        {
-            propertiesMap.put(Z_PROPERTY_NAME, String.valueOf(z));
-        }
-        else
+        while ((f != null) && (!(f.getId().equals(id))))
         {
-            propertiesMap.remove(Z_PROPERTY_NAME);
-        }
-    }
+            if (f instanceof Fragment)
+            {
+                i = ((Fragment)f).getFragments().iterator();
 
-    /**
-     * @see org.apache.jetspeed.om.page.Fragment#getLayoutWidth()
-     */
-    public float getLayoutWidth()
-    {
-        return getFloatProperty(WIDTH_PROPERTY_NAME);
-    }
+                while (i.hasNext())
+                {
+                    stack.push(i.next());
+                }
+            }
 
-    /**
-     * @see org.apache.jetspeed.om.page.Fragment#setLayoutWidth(float)
-     */
-    public void setLayoutWidth(float width)
-    {
-        if (width >= 0.0F)
-        {
-            propertiesMap.put(WIDTH_PROPERTY_NAME, String.valueOf(width));
-        }
-        else
-        {
-            propertiesMap.remove(WIDTH_PROPERTY_NAME);
+            if (stack.size() > 0)
+            {
+                f = (BaseFragmentElement) stack.pop();
+            }
+            else
+            {
+                f = null;
+            }
         }
-    }
 
-    /**
-     * @see org.apache.jetspeed.om.page.Fragment#getLayoutHeight()
-     */
-    public float getLayoutHeight()
-    {
-        return getFloatProperty(HEIGHT_PROPERTY_NAME);
+        return f;
     }
 
-    /**
-     * @see org.apache.jetspeed.om.page.Fragment#setLayoutHeight(float)
+    /* (non-Javadoc)
+     * @see org.apache.jetspeed.om.page.Fragment#removeFragmentById(java.lang.String)
      */
-    public void setLayoutHeight(float height)
+    public BaseFragmentElement removeFragmentById( String id )
     {
-        if (height >= 0.0F)
+        // find fragment by id, tracking fragment parent
+        Map parents = new HashMap();
+        Stack stack = new Stack();
+        Iterator i = getFragments().iterator();
+        while (i.hasNext())
         {
-            propertiesMap.put(HEIGHT_PROPERTY_NAME, String.valueOf(height));
+            stack.push(i.next());
         }
-        else
-        {
-            propertiesMap.remove(HEIGHT_PROPERTY_NAME);
-        }
-    }
 
-    /**
-     * <p>
-     * equals
-     * </p>
-     * 
-     * @see java.lang.Object#equals(java.lang.Object)
-     * @param obj
-     * @return
-     */
-    public boolean equals( Object obj )
-    {
-        boolean isEqual = false;
-        if (obj != null && obj instanceof Fragment)
+        BaseFragmentElement f = (BaseFragmentElement) stack.pop();
+        while ((f != null) && (!(f.getId().equals(id))))
         {
-            Fragment aFragment = (Fragment) obj;
-            if ((null != aFragment.getId()) && (null != getId()) && (getId().equals(aFragment.getId())))
+            if (f instanceof Fragment)
             {
-                isEqual = true;
+                i = ((Fragment)f).getFragments().iterator();
+
+                while (i.hasNext())
+                {
+                    BaseFragmentElement child = (BaseFragmentElement)i.next();
+                    stack.push(child);
+                    parents.put(child, f);
+                }
             }
-        }
-        return isEqual;
-    }
 
-    /**
-     * <p>
-     * hashCode
-     * </p>
-     * 
-     * @see java.lang.Object#hashCode()
-     * @return
-     */
-    public int hashCode()
-    {
-        if (getId() != null)
-        {
-            return (Fragment.class.getName() + ":" + getId()).hashCode();
-        }
-        else
-        {
-            return super.hashCode();
+            if (stack.size() > 0)
+            {
+                f = (BaseFragmentElement) stack.pop();
+            }
+            else
+            {
+                f = null;
+            }
         }
-    }
-
-    /**
-     * <p>
-     * getName
-     * </p>
-     * 
-     * @see org.apache.jetspeed.om.page.Fragment#getName()
-     * @return
-     */
-    public String getName()
-    {
-        return name;
-    }
-
-    /**
-     * <p>
-     * setName
-     * </p>
-     * 
-     * @see org.apache.jetspeed.om.page.Fragment#setName(java.lang.String)
-     * @param name
-     */
-    public void setName( String name )
-    {
-        this.name = name;
 
-    }
-
-    /**
-     * <p>
-     * getPreferences
-     * </p>
-     * 
-     * @see org.apache.jetspeed.om.page.Fragment#getPreferences()
-     * @param name
-     */
-    public List getPreferences()
-    {
-        return preferences;
-    }
-
-    public void setPreferences(List preferences)
-    {
-        this.preferences = preferences;  
-    } 
-    
-    PageImpl getPage()
-    {
-        return page;
-    }
-
-    void setPage(PageImpl page)
-    {
-        // set page implementation
-        this.page = page;
-        if (dirty){
-        	page.setDirty(dirty);	
-        }        
-        // propagate to children
-        if (fragments != null)
+        // remove fragment from parent/fragments
+        if (f != null)
         {
-            Iterator fragmentsIter = fragments.iterator();
-            while (fragmentsIter.hasNext())
+            BaseFragmentElement parent = (BaseFragmentElement)parents.get(f);
+            if (parent != null)
             {
-                ((FragmentImpl)fragmentsIter.next()).setPage(page);
+                if (parent instanceof Fragment)
+                {
+                    if (((Fragment)parent).getFragments().remove(f))
+                    {
+                        return f;
+                    }
+                }
+            }
+            else
+            {
+                if (getFragments().remove(f))
+                {
+                    return f;
+                }
             }
         }
-    }
 
-    /* (non-Javadoc)
-     * @see org.apache.jetspeed.om.page.psml.AbstractElementImpl#getEffectivePageSecurity()
-     */
-    public PageSecurity getEffectivePageSecurity()
-    {
-        // delegate to page implementation
-        if (page != null)
-        {
-            return page.getEffectivePageSecurity();
-        }
+        // not found or removed
         return null;
     }
 
@@ -510,10 +253,10 @@
      */
     public String getLogicalPermissionPath()
     {
-        // use page implementation path as base and append name
-        if ((page != null) && (getName() != null))
+        // use base fragments implementation path as base and append name
+        if ((getBaseFragmentsElement() != null) && (getName() != null))
         {
-            return page.getLogicalPermissionPath() + Folder.PATH_SEPARATOR + getName();
+            return getBaseFragmentsElement().getLogicalPermissionPath() + Folder.PATH_SEPARATOR + getName();
         }
         return null;
     }
@@ -523,47 +266,39 @@
      */
     public String getPhysicalPermissionPath()
     {
-        // use page implementation path as base and append name
-        if ((page != null) && (getName() != null))
+        // use base fragments implementation path as base and append name
+        if ((getBaseFragmentsElement() != null) && (getName() != null))
         {
-            return page.getPhysicalPermissionPath() + Folder.PATH_SEPARATOR + getName();
+            return getBaseFragmentsElement().getPhysicalPermissionPath() + Folder.PATH_SEPARATOR + getName();
         }
         return null;
     }
 
     /* (non-Javadoc)
-     * @see org.apache.jetspeed.om.page.psml.AbstractElementImpl#checkPermissions(java.lang.String, int, boolean, boolean)
+     * @see org.apache.jetspeed.om.page.psml.AbstractBaseFragmentElement#validateFragments(org.apache.jetspeed.om.page.BaseFragmentValidationListener)
      */
-    public void checkPermissions(String path, int mask, boolean checkNodeOnly, boolean checkParentsOnly) throws SecurityException
+    protected boolean validateFragments(BaseFragmentValidationListener validationListener)
     {
-        // always check for granted fragment permissions
-        AccessController.checkPermission((Permission)pf.newPermission(pf.FRAGMENT_PERMISSION, path, mask));
-    }
-
-    /* (non-Javadoc)
-     * @see org.apache.jetspeed.om.common.SecuredResource#getConstraintsEnabled()
-     */
-    public boolean getConstraintsEnabled()
-    {
-        if (page != null)
+        // validate fragment using validation listener
+        if (!validationListener.validate(this))
         {
-            return page.getConstraintsEnabled();
+            return false;
         }
-        return false;
-    }
-    
-    /* (non-Javadoc)
-     * @see org.apache.jetspeed.om.common.SecuredResource#getPermissionsEnabled()
-     */
-    public boolean getPermissionsEnabled()
-    {
-        if (page != null)
+        // validate fragments using validation listener
+        if (fragments != null)
         {
-            return page.getPermissionsEnabled();
+            Iterator fragmentsIter = fragments.iterator();
+            while (fragmentsIter.hasNext())
+            {
+                if (!((AbstractBaseFragmentElement)fragmentsIter.next()).validateFragments(validationListener))
+                {
+                    return false;
+                }
+            }
         }
-        return false;
+        return true;
     }
-
+    
     /**
      * unmarshalled - notification that this instance has been
      *                loaded from the persistent store
@@ -575,30 +310,21 @@
         // notify super class implementation
         boolean dirty = super.unmarshalled(generator);
         
-        // propagate unmarshalled notification
-        // to all fragments
-        Iterator fragmentIter = fragments.iterator();
-        while (fragmentIter.hasNext())
-        {
-            dirty = ((FragmentImpl)fragmentIter.next()).unmarshalled(generator) || dirty;
-        }
-
-        // generate id if required
-        if (getId() == null)
-        {
-            setId(generator.getNextPeid());
-            dirty = true;
+        // unwrap fragment elements and propagate
+        // unmarshalled notification
+        fragments.clear();
+        Iterator fragmentElementIter = fragmentElementImpls.iterator();
+        while (fragmentElementIter.hasNext())
+        {
+            // unwrap fragment element
+            FragmentElementImpl fragmentElement = (FragmentElementImpl)fragmentElementIter.next();
+            AbstractBaseFragmentElement fragment = (AbstractBaseFragmentElement)fragmentElement.getElement();
+            fragments.add(fragment);
+            
+            // propagate unmarshalled notification
+            dirty = fragment.unmarshalled(generator) || dirty;
         }
 
-        // load the properties map from list
-        propertiesMap.clear();
-        Iterator propsIter = propertiesList.iterator();
-        while (propsIter.hasNext())
-        {
-            PropertyImpl prop = (PropertyImpl) propsIter.next();
-            propertiesMap.put(prop.getName(), prop.getValue());
-        }
-        
         return dirty;
     }
 
@@ -608,38 +334,18 @@
      */
     public void marshalling()
     {
-        // update the properties list from the map
-        // if change/edit detected
-        boolean changed = (propertiesMap.size() != propertiesList.size());
-        if (!changed)
-        {
-            Iterator propsIter = propertiesList.iterator();
-            while (!changed && propsIter.hasNext())
-            {
-                PropertyImpl prop = (PropertyImpl) propsIter.next();
-                changed = (prop.getValue() != propertiesMap.get(prop.getName()));
-            }
-        }
-        if (changed)
-        {
-            propertiesList.clear();
-            Iterator propsIter = propertiesMap.entrySet().iterator();
-            while (propsIter.hasNext())
-            {
-                Map.Entry prop = (Map.Entry) propsIter.next();
-                PropertyImpl listProp = new PropertyImpl();
-                listProp.setName((String)prop.getKey());
-                listProp.setValue((String)prop.getValue());
-                propertiesList.add(listProp);
-            }
-        }
-
-        // propagate marshalling notification
-        // to all fragments
+        // wrap menu elements and propagate
+        // marshalling notification
+        fragmentElementImpls.clear();
         Iterator fragmentIter = fragments.iterator();
         while (fragmentIter.hasNext())
         {
-            ((FragmentImpl)fragmentIter.next()).marshalling();
+            // wrap fragment element
+            AbstractBaseFragmentElement fragment = (AbstractBaseFragmentElement)fragmentIter.next();
+            fragmentElementImpls.add(new FragmentElementImpl(fragment));
+
+            // propagate marshalling notification
+            fragment.marshalling();
         }
 
         // notify super class implementation
@@ -664,7 +370,7 @@
             Iterator checkAccessIter = fragments.iterator();
             while (checkAccessIter.hasNext())
             {
-                Fragment fragment = (Fragment) checkAccessIter.next();
+                BaseFragmentElement fragment = (BaseFragmentElement) checkAccessIter.next();
                 try
                 {
                     // check access
@@ -688,7 +394,7 @@
                         Iterator copyIter = fragments.iterator();
                         while (copyIter.hasNext())
                         {
-                            Fragment copyFragment = (Fragment)copyIter.next();
+                            BaseFragmentElement copyFragment = (BaseFragmentElement)copyIter.next();
                             if (copyFragment != fragment)
                             {
                                 filteredFragments.add(copyFragment);

Modified: portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/main/java/org/apache/jetspeed/om/page/psml/FragmentList.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/main/java/org/apache/jetspeed/om/page/psml/FragmentList.java?rev=881862&r1=881861&r2=881862&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/main/java/org/apache/jetspeed/om/page/psml/FragmentList.java (original)
+++ portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/main/java/org/apache/jetspeed/om/page/psml/FragmentList.java Wed Nov 18 18:24:48 2009
@@ -40,11 +40,11 @@
     public void add(int index, Object element)
     {
         // implement for modifiable AbstractList:
-        // add and maintain page implementation reference
+        // add and maintain base fragments implementation reference
         fragment.accessFragments().add(index, element);
-        if ((fragment.getPage() != null) && (element instanceof FragmentImpl))
+        if ((fragment.getBaseFragmentsElement() != null) && (element instanceof FragmentImpl))
         {
-            ((FragmentImpl)element).setPage(fragment.getPage());
+            ((FragmentImpl)element).setBaseFragmentsElement(fragment.getBaseFragmentsElement());
         }
     }
 
@@ -72,11 +72,11 @@
     public Object set(int index, Object element)
     {
         // implement for modifiable AbstractList:
-        // set and maintain page implementation reference
+        // set and maintain base fragments implementation reference
         Object o = fragment.accessFragments().set(index, element);
-        if ((fragment.getPage() != null) && (element instanceof FragmentImpl))
+        if ((fragment.getBaseFragmentsElement() != null) && (element instanceof FragmentImpl))
         {
-            ((FragmentImpl)element).setPage(fragment.getPage());
+            ((FragmentImpl)element).setBaseFragmentsElement(fragment.getBaseFragmentsElement());
         }
         return o;
     }

Added: portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/main/java/org/apache/jetspeed/om/page/psml/FragmentReferenceImpl.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/main/java/org/apache/jetspeed/om/page/psml/FragmentReferenceImpl.java?rev=881862&view=auto
==============================================================================
--- portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/main/java/org/apache/jetspeed/om/page/psml/FragmentReferenceImpl.java (added)
+++ portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/main/java/org/apache/jetspeed/om/page/psml/FragmentReferenceImpl.java Wed Nov 18 18:24:48 2009
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.om.page.psml;
+
+import org.apache.jetspeed.om.page.FragmentReference;
+
+public class FragmentReferenceImpl extends AbstractBaseFragmentElement implements FragmentReference, java.io.Serializable
+{
+    private String refId;
+
+    /* (non-Javadoc)
+     * @see org.apache.jetspeed.om.page.FragmentReference#getRefId()
+     */
+    public String getRefId()
+    {
+        return refId;
+    }
+
+    /* (non-Javadoc)
+     * @see org.apache.jetspeed.om.page.FragmentReference#setRefId(java.lang.String)
+     */
+    public void setRefId(String refId)
+    {
+        this.refId = refId;
+    }
+}

Added: portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/main/java/org/apache/jetspeed/om/page/psml/PageFragmentImpl.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/main/java/org/apache/jetspeed/om/page/psml/PageFragmentImpl.java?rev=881862&view=auto
==============================================================================
--- portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/main/java/org/apache/jetspeed/om/page/psml/PageFragmentImpl.java (added)
+++ portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/main/java/org/apache/jetspeed/om/page/psml/PageFragmentImpl.java Wed Nov 18 18:24:48 2009
@@ -0,0 +1,24 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.om.page.psml;
+
+import org.apache.jetspeed.om.page.PageFragment;
+
+public class PageFragmentImpl extends AbstractBaseFragmentElement implements PageFragment, java.io.Serializable
+{
+}

Modified: portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/main/java/org/apache/jetspeed/om/page/psml/PageImpl.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/main/java/org/apache/jetspeed/om/page/psml/PageImpl.java?rev=881862&r1=881861&r2=881862&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/main/java/org/apache/jetspeed/om/page/psml/PageImpl.java (original)
+++ portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/main/java/org/apache/jetspeed/om/page/psml/PageImpl.java Wed Nov 18 18:24:48 2009
@@ -17,439 +17,30 @@
 
 package org.apache.jetspeed.om.page.psml;
 
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Stack;
-
-import org.apache.jetspeed.idgenerator.IdGenerator;
-import org.apache.jetspeed.om.folder.Folder;
-import org.apache.jetspeed.om.folder.MenuDefinition;
-import org.apache.jetspeed.om.folder.MenuExcludeDefinition;
-import org.apache.jetspeed.om.folder.MenuIncludeDefinition;
-import org.apache.jetspeed.om.folder.MenuOptionsDefinition;
-import org.apache.jetspeed.om.folder.MenuSeparatorDefinition;
-import org.apache.jetspeed.om.folder.psml.MenuDefinitionImpl;
-import org.apache.jetspeed.om.folder.psml.MenuExcludeDefinitionImpl;
-import org.apache.jetspeed.om.folder.psml.MenuIncludeDefinitionImpl;
-import org.apache.jetspeed.om.folder.psml.MenuOptionsDefinitionImpl;
-import org.apache.jetspeed.om.folder.psml.MenuSeparatorDefinitionImpl;
-import org.apache.jetspeed.om.page.Fragment;
 import org.apache.jetspeed.om.page.Page;
-import org.apache.jetspeed.page.impl.DatabasePageManagerUtils;
 
 /**
+ * Portal page definition implementation.
+ * 
  * @version $Id$
  */
-public class PageImpl extends DocumentImpl implements Page
+public class PageImpl extends AbstractBaseConcretePageElement implements Page
 {
-    private DefaultsImpl defaults = new DefaultsImpl();
-
-    private Fragment root = null;
-
-    private int hashCode;
-
-    /**
-     * menuDefinitions - menu definitions for page
-     */
-    private List menuDefinitions;
-    
-    public PageImpl()
-    {
-        // empty constructor
-        super();
-    }
+    private static final long serialVersionUID = 1L;
 
-    /**
-     * <p>
-     * setId
-     * </p>
-     *
-     * @see org.apache.jetspeed.om.page.psml.AbstractBaseElement#setId(java.lang.String)
-     * @param id
-     */
-    public void setId( String id )
-    {
-        // Cheaper to generate the hash code now then every call to hashCode()
-        hashCode = (Page.class.getName()+":"+id).hashCode();
-        super.setId(id);        
-    }
-    
-    /**
-     * <p>
-     * equals
-     * </p>
-     * 
-     * @see java.lang.Object#equals(java.lang.Object)
-     * @param obj
-     * @return
+    /* (non-Javadoc)
+     * @see org.apache.jetspeed.om.page.psml.AbstractBasePageElement#equals(java.lang.Object)
      */
     public boolean equals( Object obj )
     {
-        if (obj instanceof Page)
-        {
-            Page page = (Page) obj;
-            return page != null && page.getId() != null && 
-                   this.getId() != null && this.getId().equals(page.getId());
-        }
-        else
-        {
-            return false;
-        }
-
-    }
-
-    /**
-     * <p>
-     * hashCode
-     * </p>
-     * 
-     * @see java.lang.Object#hashCode()
-     * @return
-     */
-    public int hashCode()
-    {       
-        return hashCode;
-    }
-
-    public String getSkin()
-    {
-        return defaults.getSkin();
-    }
-
-    public void setSkin( String skinName )
-    {
-        defaults.setSkin(skinName);
+        return (obj instanceof Page) ? super.equals(obj) : false;
     }
 
     /* (non-Javadoc)
-     * @see org.apache.jetspeed.om.page.Page#getEffectiveDefaultDecorator(java.lang.String)
-     */
-    public String getEffectiveDefaultDecorator(String fragmentType)
-    {
-        // get locally defined decorator
-        String decorator = getDefaultDecorator(fragmentType);
-        if (decorator == null)
-        {
-            // delegate to parent folder
-            Folder parentFolder = (Folder)getParent();
-            if (parentFolder != null)
-            {
-                return parentFolder.getEffectiveDefaultDecorator(fragmentType);
-            }
-        }
-        return decorator;
-    }
-
-    public String getDefaultDecorator( String fragmentType )
-    {
-        return defaults.getDecorator(fragmentType);
-    }
-
-    public void setDefaultDecorator( String decoratorName, String fragmentType )
-    {
-        defaults.setDecorator(fragmentType, decoratorName);
-    }
-
-    public Fragment getRootFragment()
-    {
-        return this.root;
-    }
-
-    public void setRootFragment( Fragment root )
-    {
-        this.root = root;
-        if (root instanceof FragmentImpl)
-        {
-            ((FragmentImpl)root).setPage(this);
-        }        
-    }
-
-    public Fragment getFragmentById( String id )
-    {
-        Stack stack = new Stack();
-        if (getRootFragment() != null)
-        {
-            stack.push(getRootFragment());
-        }
-
-        Fragment f = (Fragment) stack.pop();
-
-        while ((f != null) && (!(f.getId().equals(id))))
-        {
-            Iterator i = f.getFragments().iterator();
-
-            while (i.hasNext())
-            {
-                stack.push(i.next());
-            }
-
-            if (stack.size() > 0)
-            {
-                f = (Fragment) stack.pop();
-            }
-            else
-            {
-                f = null;
-            }
-        }
-
-        return f;
-    }
-
-    public Fragment removeFragmentById( String id )
-    {
-        // find fragment by id, tracking fragment parent
-        Map parents = new HashMap();
-        Stack stack = new Stack();
-        if (getRootFragment() != null)
-        {
-            stack.push(getRootFragment());
-        }
-        Fragment f = (Fragment) stack.pop();
-        while ((f != null) && (!(f.getId().equals(id))))
-        {
-            Iterator i = f.getFragments().iterator();
-
-            while (i.hasNext())
-            {
-                Fragment child = (Fragment)i.next();
-                stack.push(child);
-                parents.put(child, f);
-            }
-
-            if (stack.size() > 0)
-            {
-                f = (Fragment) stack.pop();
-            }
-            else
-            {
-                f = null;
-            }
-        }
-
-        // remove fragment from parent/page root
-        if (f != null)
-        {
-            Fragment parent = (Fragment)parents.get(f);
-            if (parent != null)
-            {
-                if (parent.getFragments().remove(f))
-                {
-                    return f;
-                }
-            }
-            else
-            {
-                if (f == root)
-                {
-                    root = null;
-                    return f;
-                }
-            }
-        }
-
-        // not found or removed
-        return null;
-    }
-
-    public List getFragmentsByName( String name )
-    {
-        List fragments = DatabasePageManagerUtils.createList();
-
-        Stack stack = new Stack();
-        if (getRootFragment() != null)
-        {
-            stack.push(getRootFragment());
-        }
-
-        Fragment f = (Fragment) stack.pop();
-
-        while (f != null)
-        {
-            if ((f.getName() != null) && f.getName().equals(name))
-            {
-                fragments.add(f);
-            }
-
-            Iterator i = f.getFragments().iterator();
-
-            while (i.hasNext())
-            {
-                stack.push(i.next());
-            }
-
-            if (stack.size() > 0)
-            {
-                f = (Fragment) stack.pop();
-            }
-            else
-            {
-                f = null;
-            }
-        }
-
-        return fragments;
-    }
-
-    public DefaultsImpl getDefaults()
-    {
-        return this.defaults;
-    }
-
-    public void setDefaults( DefaultsImpl defaults )
-    {
-        this.defaults = defaults;
-    }
-
-    /**
-     * <p>
-     * getType
-     * </p>
-     *
-     * @see org.apache.jetspeed.om.page.Document#getType()
-     * @return
+     * @see org.apache.jetspeed.page.document.Node#getType()
      */
     public String getType()
     {       
         return DOCUMENT_TYPE;
     }
-
-    /**
-     * getMenuDefinitions - get list of menu definitions
-     *
-     * @return definition list
-     */
-    public List getMenuDefinitions()
-    {
-        return menuDefinitions;
-    }
-
-    /**
-     * newMenuDefinition - creates a new empty menu definition
-     *
-     * @return a newly created MenuDefinition object for use in Page
-     */
-    public MenuDefinition newMenuDefinition()
-    {
-        return new MenuDefinitionImpl();
-    }
-
-    /**
-     * newMenuExcludeDefinition - creates a new empty menu exclude definition
-     *
-     * @return a newly created MenuExcludeDefinition object for use in Page
-     */
-    public MenuExcludeDefinition newMenuExcludeDefinition()
-    {
-        return new MenuExcludeDefinitionImpl();
-    }
-
-    /**
-     * newMenuIncludeDefinition - creates a new empty menu include definition
-     *
-     * @return a newly created MenuIncludeDefinition object for use in Page
-     */
-    public MenuIncludeDefinition newMenuIncludeDefinition()
-    {
-        return new MenuIncludeDefinitionImpl();
-    }
-
-    /**
-     * newMenuOptionsDefinition - creates a new empty menu options definition
-     *
-     * @return a newly created MenuOptionsDefinition object for use in Page
-     */
-    public MenuOptionsDefinition newMenuOptionsDefinition()
-    {
-        return new MenuOptionsDefinitionImpl();
-    }
-
-    /**
-     * newMenuSeparatorDefinition - creates a new empty menu separator definition
-     *
-     * @return a newly created MenuSeparatorDefinition object for use in Page
-     */
-    public MenuSeparatorDefinition newMenuSeparatorDefinition()
-    {
-        return new MenuSeparatorDefinitionImpl();
-    }
-
-    /**
-     * setMenuDefinitions - set list of menu definitions
-     *
-     * @param definitions definition list
-     */
-    public void setMenuDefinitions(List definitions)
-    {
-        menuDefinitions = definitions;
-    }
-
-    /**
-     * unmarshalled - notification that this instance has been
-     *                loaded from the persistent store
-     * @param generator id generator
-     * @return dirty flag
-     */
-    public boolean unmarshalled(IdGenerator generator)
-    {
-        // notify super class implementation
-        boolean dirty = super.unmarshalled(generator);
-
-        // propagate unmarshalled notification
-        // to all menu definitions
-        if (menuDefinitions != null)
-        {
-            Iterator menuIter = menuDefinitions.iterator();
-            while (menuIter.hasNext())
-            {
-                ((MenuDefinitionImpl)menuIter.next()).unmarshalled();
-            }
-        }
-
-        // propagate unmarshalled notification
-        // to root fragment
-        if (root != null)
-        {
-            dirty = (((FragmentImpl)root).unmarshalled(generator) || dirty);
-        }
-
-        // default title of pages to name
-        if (getTitle() == null)
-        {
-            setTitle(getTitleName());
-        }
-        
-        return dirty;
-    }
-
-    /**
-     * marshalling - notification that this instance is to
-     *               be saved to the persistent store
-     */
-    public void marshalling()
-    {
-        // propagate marshalling notification
-        // to root fragment
-        if (root != null)
-        {
-            ((FragmentImpl)root).marshalling();
-        }
-
-        // propagate marshalling notification
-        // to all menu definitions
-        if (menuDefinitions != null)
-        {
-            Iterator menuIter = menuDefinitions.iterator();
-            while (menuIter.hasNext())
-            {
-                ((MenuDefinitionImpl)menuIter.next()).marshalling();
-            }
-        }
-
-        // notify super class implementation
-        super.marshalling();
-    }
 }
-

Added: portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/main/java/org/apache/jetspeed/om/page/psml/PageTemplateImpl.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/main/java/org/apache/jetspeed/om/page/psml/PageTemplateImpl.java?rev=881862&view=auto
==============================================================================
--- portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/main/java/org/apache/jetspeed/om/page/psml/PageTemplateImpl.java (added)
+++ portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/main/java/org/apache/jetspeed/om/page/psml/PageTemplateImpl.java Wed Nov 18 18:24:48 2009
@@ -0,0 +1,94 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.om.page.psml;
+
+import org.apache.jetspeed.om.page.PageTemplate;
+import org.apache.jetspeed.om.page.BaseFragmentElement;
+import org.apache.jetspeed.om.page.BaseFragmentValidationListener;
+import org.apache.jetspeed.om.page.PageFragment;
+
+/**
+ * Portal page template implementation.
+ * 
+ * @version $Id:$
+ */
+public class PageTemplateImpl extends AbstractBasePageElement implements PageTemplate
+{
+    private static final long serialVersionUID = 1L;
+
+    /* (non-Javadoc)
+     * @see org.apache.jetspeed.page.document.Node#getType()
+     */
+    public String getType()
+    {
+        return DOCUMENT_TYPE;
+    }
+
+    /* (non-Javadoc)
+     * @see org.apache.jetspeed.page.document.psml.AbstractNode#isHidden()
+     */
+    public boolean isHidden()
+    {
+        return false;
+    }
+    
+    /* (non-Javadoc)
+     * @see org.apache.jetspeed.page.document.psml.AbstractNode#setHidden(boolean)
+     */
+    public void setHidden(boolean hidden)
+    {
+        throw new UnsupportedOperationException("PageTemplate.setHidden()");
+    }
+    
+    /* (non-Javadoc)
+     * @see org.apache.jetspeed.om.page.psml.AbstractBaseFragmentsElement#newBaseFragmentValidationListener()
+     */
+    protected BaseFragmentValidationListener newBaseFragmentValidationListener()
+    {
+        return new BaseFragmentValidationListener()
+        {
+            private boolean valid;
+            
+            /* (non-Javadoc)
+             * @see org.apache.jetspeed.om.page.BaseFragmentValidationListener#validate(org.apache.jetspeed.om.page.BaseFragmentElement)
+             */
+            public boolean validate(BaseFragmentElement fragmentElement)
+            {
+                // one PageFragment required
+                if (!valid)
+                {
+                    valid = (fragmentElement instanceof PageFragment);
+                    return true;
+                }
+                else
+                {
+                    return !(fragmentElement instanceof PageFragment);
+                }
+            }
+
+            /* (non-Javadoc)
+             * @see org.apache.jetspeed.om.page.BaseFragmentValidationListener#validate()
+             */
+            public boolean validate()
+            {
+                // one PageFragment required
+                return valid;
+            }
+        };
+    }
+}

Modified: portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/main/java/org/apache/jetspeed/page/AbstractPageManager.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/main/java/org/apache/jetspeed/page/AbstractPageManager.java?rev=881862&r1=881861&r2=881862&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/main/java/org/apache/jetspeed/page/AbstractPageManager.java (original)
+++ portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/main/java/org/apache/jetspeed/page/AbstractPageManager.java Wed Nov 18 18:24:48 2009
@@ -37,10 +37,18 @@
 import org.apache.jetspeed.om.folder.MenuIncludeDefinition;
 import org.apache.jetspeed.om.folder.MenuOptionsDefinition;
 import org.apache.jetspeed.om.folder.MenuSeparatorDefinition;
+import org.apache.jetspeed.om.page.BaseFragmentElement;
+import org.apache.jetspeed.om.page.BaseFragmentsElement;
+import org.apache.jetspeed.om.page.BasePageElement;
+import org.apache.jetspeed.om.page.DynamicPage;
 import org.apache.jetspeed.om.page.Fragment;
+import org.apache.jetspeed.om.page.FragmentDefinition;
+import org.apache.jetspeed.om.page.FragmentReference;
 import org.apache.jetspeed.om.page.Link;
 import org.apache.jetspeed.om.page.Page;
+import org.apache.jetspeed.om.page.PageFragment;
 import org.apache.jetspeed.om.page.PageSecurity;
+import org.apache.jetspeed.om.page.PageTemplate;
 import org.apache.jetspeed.om.page.SecurityConstraintsDef;
 import org.apache.jetspeed.om.preference.FragmentPreference;
 import org.apache.jetspeed.page.document.Node;
@@ -89,6 +97,11 @@
     protected Class pageSecuritySecurityConstraintClass;
     protected Class securityConstraintsDefClass;
     protected Class fragmentPreferenceClass;
+    protected Class fragmentReferenceClass;
+    protected Class pageFragmentClass;
+    protected Class pageTemplateClass;
+    protected Class dynamicPageClass;
+    protected Class fragmentDefinitionClass;
 
     private IdGenerator generator;
 
@@ -159,6 +172,11 @@
         this.pageSecuritySecurityConstraintClass = (Class)modelClasses.get("PageSecuritySecurityConstraintImpl");
         this.securityConstraintsDefClass = (Class)modelClasses.get("SecurityConstraintsDefImpl");
         this.fragmentPreferenceClass = (Class)modelClasses.get("FragmentPreferenceImpl");
+        this.fragmentReferenceClass = (Class)modelClasses.get("FragmentReferenceImpl");
+        this.pageFragmentClass = (Class)modelClasses.get("PageFragmentImpl");
+        this.pageTemplateClass = (Class)modelClasses.get("PageTemplateImpl");
+        this.dynamicPageClass = (Class)modelClasses.get("DynamicPageImpl");
+        this.fragmentDefinitionClass = (Class)modelClasses.get("FragmentDefinitionImpl");
     }
     
     /* (non-Javadoc)
@@ -217,6 +235,99 @@
     }
     
     /* (non-Javadoc)
+     * @see org.apache.jetspeed.page.PageManager#newPageTemplate(java.lang.String)
+     */
+    public PageTemplate newPageTemplate(String path)
+    {
+        PageTemplate pageTemplate = null;
+        try
+        {
+            // factory create the page template and set id/path
+            pageTemplate = (PageTemplate)createObject(this.pageTemplateClass);            
+            if (!path.startsWith(Folder.PATH_SEPARATOR))
+            {
+                path = Folder.PATH_SEPARATOR + path;
+            }
+            if (!path.endsWith(PageTemplate.DOCUMENT_TYPE))
+            {
+                path += Page.DOCUMENT_TYPE;
+            }
+            pageTemplate.setPath(path);
+            
+            // create the default fragment
+            pageTemplate.setRootFragment(newFragment());            
+        }
+        catch (ClassCastException e)
+        {
+            String message = "Failed to create page template object for " + this.pageTemplateClass;
+            log.error(message, e);
+        }
+        return pageTemplate;
+    }
+    
+    /* (non-Javadoc)
+     * @see org.apache.jetspeed.page.PageManager#newDynamicPage(java.lang.String)
+     */
+    public DynamicPage newDynamicPage(String path)
+    {
+        DynamicPage dynamicPage = null;
+        try
+        {
+            // factory create the dynamic page and set id/path
+            dynamicPage = (DynamicPage)createObject(this.dynamicPageClass);            
+            if (!path.startsWith(Folder.PATH_SEPARATOR))
+            {
+                path = Folder.PATH_SEPARATOR + path;
+            }
+            if (!path.endsWith(DynamicPage.DOCUMENT_TYPE))
+            {
+                path += DynamicPage.DOCUMENT_TYPE;
+            }
+            dynamicPage.setPath(path);
+            
+            // create the default fragment
+            dynamicPage.setRootFragment(newFragment());            
+        }
+        catch (ClassCastException e)
+        {
+            String message = "Failed to create dynamic page object for " + this.dynamicPageClass;
+            log.error(message, e);
+        }
+        return dynamicPage;        
+    }
+
+    /* (non-Javadoc)
+     * @see org.apache.jetspeed.page.PageManager#newFragmentDefinition(java.lang.String)
+     */
+    public FragmentDefinition newFragmentDefinition(String path)
+    {
+        FragmentDefinition fragmentDefinition = null;
+        try
+        {
+            // factory create the fragment definition and set id/path
+            fragmentDefinition = (FragmentDefinition)createObject(this.fragmentDefinitionClass);            
+            if (!path.startsWith(Folder.PATH_SEPARATOR))
+            {
+                path = Folder.PATH_SEPARATOR + path;
+            }
+            if (!path.endsWith(FragmentDefinition.DOCUMENT_TYPE))
+            {
+                path += FragmentDefinition.DOCUMENT_TYPE;
+            }
+            fragmentDefinition.setPath(path);
+            
+            // create the default portlet fragment
+            fragmentDefinition.setRootFragment(newPortletFragment());            
+        }
+        catch (ClassCastException e)
+        {
+            String message = "Failed to create fragment definition object for " + this.dynamicPageClass;
+            log.error(message, e);
+        }
+        return fragmentDefinition;        
+    }
+
+    /* (non-Javadoc)
      * @see org.apache.jetspeed.page.PageManager#newFolder(java.lang.String)
      */
     public Folder newFolder(String path)
@@ -302,7 +413,7 @@
         }
         catch (ClassCastException e)
         {
-            String message = "Failed to create page object for " + this.pageClass;
+            String message = "Failed to create fragment object for " + this.fragmentClass;
             log.error(message, e);
             // throw new NodeException(message, e);
         }
@@ -323,7 +434,47 @@
         }
         catch (ClassCastException e)
         {
-            String message = "Failed to create page object for " + this.pageClass;
+            String message = "Failed to create fragment object for " + this.fragmentClass;
+            log.error(message, e);
+            // throw new NodeException(message, e);
+        }
+        return fragment;        
+    }
+    
+    /* (non-Javadoc)
+     * @see org.apache.jetspeed.page.PageManager#newFragmentReference()
+     */
+    public FragmentReference newFragmentReference()
+    {
+        FragmentReference fragment = null;
+        try
+        {
+            fragment = (FragmentReference)createObject(this.fragmentReferenceClass);
+            fragment.setId(generator.getNextPeid());
+        }
+        catch (ClassCastException e)
+        {
+            String message = "Failed to create page object for " + this.fragmentReferenceClass;
+            log.error(message, e);
+            // throw new NodeException(message, e);
+        }
+        return fragment;        
+    }
+    
+    /* (non-Javadoc)
+     * @see org.apache.jetspeed.page.PageManager#newPageFragment()
+     */
+    public PageFragment newPageFragment()
+    {
+        PageFragment fragment = null;
+        try
+        {
+            fragment = (PageFragment)createObject(this.pageFragmentClass);
+            fragment.setId(generator.getNextPeid());
+        }
+        catch (ClassCastException e)
+        {
+            String message = "Failed to create fragment object for " + this.pageFragmentClass;
             log.error(message, e);
             // throw new NodeException(message, e);
         }
@@ -862,6 +1013,9 @@
         }
     }
         
+    /* (non-Javadoc)
+     * @see org.apache.jetspeed.page.PageManager#copyFolder(org.apache.jetspeed.om.folder.Folder, java.lang.String)
+     */
     public Folder copyFolder(Folder source, String path)
     throws NodeException
     {
@@ -923,44 +1077,135 @@
     {
         // create the new page and copy attributes
         Page page = newPage(path);
-        page.setTitle(source.getTitle());
-        page.setShortTitle(source.getShortTitle());
-        page.setVersion(source.getVersion());
-        page.setDefaultDecorator(source.getDefaultDecorator(Fragment.LAYOUT), Fragment.LAYOUT);
-        page.setDefaultDecorator(source.getDefaultDecorator(Fragment.PORTLET), Fragment.PORTLET);
-        page.setSkin(source.getSkin());
+        copyPageAttributes(source, copyIds, page);
         page.setHidden(source.isHidden());
+        return page;
+    }
+
+    /* (non-Javadoc)
+     * @see org.apache.jetspeed.page.PageManager#copyPageTemplate(org.apache.jetspeed.om.page.PageTemplate, java.lang.String)
+     */
+    public PageTemplate copyPageTemplate(PageTemplate source, String path)
+        throws NodeException
+    {
+        return copyPageTemplate(source, path, false);
+    }
+    
+    /* (non-Javadoc)
+     * @see org.apache.jetspeed.page.PageManager#copyPageTemplate(org.apache.jetspeed.om.page.PageTemplate, java.lang.String, boolean)
+     */
+    public PageTemplate copyPageTemplate(PageTemplate source, String path, boolean copyIds)
+        throws NodeException
+    {
+        // create the new page template and copy attributes
+        PageTemplate pageTemplate = newPageTemplate(path);
+        copyPageAttributes(source, copyIds, pageTemplate);
+        return pageTemplate;
+    }
+    
+    /* (non-Javadoc)
+     * @see org.apache.jetspeed.page.PageManager#copyDynamicPage(org.apache.jetspeed.om.page.DynamicPage, java.lang.String)
+     */
+    public DynamicPage copyDynamicPage(DynamicPage source, String path)
+        throws NodeException
+    {
+        return copyDynamicPage(source, path, false);
+    }
+    
+    /* (non-Javadoc)
+     * @see org.apache.jetspeed.page.PageManager#copyDynamicPage(org.apache.jetspeed.om.page.DynamicPage, java.lang.String, boolean)
+     */
+    public DynamicPage copyDynamicPage(DynamicPage source, String path, boolean copyIds)
+        throws NodeException
+    {
+        // create the new dynamic page and copy attributes
+        DynamicPage dynamicPage = newDynamicPage(path);
+        copyPageAttributes(source, copyIds, dynamicPage);
+        dynamicPage.setHidden(source.isHidden());
+        dynamicPage.setPageType(source.getPageType());
+        return dynamicPage;
+    }
+
+    public FragmentDefinition copyFragmentDefinition(FragmentDefinition source, String path)
+        throws NodeException
+    {
+        return copyFragmentDefinition(source, path, false);
+    }
+    
+    public FragmentDefinition copyFragmentDefinition(FragmentDefinition source, String path, boolean copyIds)
+        throws NodeException
+    {
+        // create the new fragment definition and copy attributes
         
+        FragmentDefinition fragmentDefinition = newFragmentDefinition(path);
+        copyFragmentsAttributes(source, copyIds, fragmentDefinition);
+        return fragmentDefinition;
+    }
+
+    /**
+     * Copy shared fragments attributes.
+     * 
+     * @param source source fragments
+     * @param copyIds flag indicating whether to copy or preserve fragment ids
+     * @param dest destination fragments
+     * @throws NodeException on error creating fragments
+     */
+    protected void copyFragmentsAttributes(BaseFragmentsElement source, boolean copyIds, BaseFragmentsElement dest)
+        throws NodeException
+    {
+        // create the new page and copy attributes
+        dest.setTitle(source.getTitle());
+        dest.setShortTitle(source.getShortTitle());
+        dest.setVersion(source.getVersion());
+    
         // copy locale specific metadata
-        page.getMetadata().copyFields(source.getMetadata().getFields());
-        
+        dest.getMetadata().copyFields(source.getMetadata().getFields());
+    
         // copy security constraints
         SecurityConstraints srcSecurity = source.getSecurityConstraints();        
         if ((srcSecurity != null) && !srcSecurity.isEmpty())
         {
             SecurityConstraints copiedSecurity = copySecurityConstraints(PAGE_NODE_TYPE, srcSecurity);
-            page.setSecurityConstraints(copiedSecurity);
+            dest.setSecurityConstraints(copiedSecurity);
         }    
 
+        // copy fragments
+        BaseFragmentElement root = copyFragment(source.getRootFragment(), null, copyIds);
+        dest.setRootFragment(root);
+    }
+
+    /**
+     * Copy shared page attributes.
+     * 
+     * @param source source page
+     * @param copyIds flag indicating whether to copy or preserve fragment ids
+     * @param dest destination page
+     * @throws NodeException on error creating fragments
+     */
+    protected void copyPageAttributes(BasePageElement source, boolean copyIds, BasePageElement dest)
+        throws NodeException
+    {
+        // copy fragments attributes
+        copyFragmentsAttributes(source, copyIds, dest);
+        
+        // copy page attributes
+        dest.setDefaultDecorator(source.getDefaultDecorator(Fragment.LAYOUT), Fragment.LAYOUT);
+        dest.setDefaultDecorator(source.getDefaultDecorator(Fragment.PORTLET), Fragment.PORTLET);
+        dest.setSkin(source.getSkin());
+    
         // copy menu definitions
         List menus = source.getMenuDefinitions();
         if (menus != null)
         {
             List copiedMenus = copyMenuDefinitions(PAGE_NODE_TYPE, menus);
-            page.setMenuDefinitions(copiedMenus);
-        }        
-        
-        // copy fragments
-        Fragment root = copyFragment(source.getRootFragment(), source.getRootFragment().getName(), copyIds);
-        page.setRootFragment(root);
-        
-        return page;
+            dest.setMenuDefinitions(copiedMenus);
+        }
     }
 
     /* (non-Javadoc)
      * @see org.apache.jetspeed.page.PageManager#copyFragment(org.apache.jetspeed.om.page.Fragment, java.lang.String)
      */
-    public Fragment copyFragment(Fragment source, String name)
+    public BaseFragmentElement copyFragment(BaseFragmentElement source, String name)
         throws NodeException
     {
         return copyFragment(source, name, false);
@@ -969,21 +1214,36 @@
     /* (non-Javadoc)
      * @see org.apache.jetspeed.page.PageManager#copyFragment(org.apache.jetspeed.om.page.Fragment, java.lang.String, boolean)
      */
-    public Fragment copyFragment(Fragment source, String name, boolean copyIds)
+    public BaseFragmentElement copyFragment(BaseFragmentElement source, String name, boolean copyIds)
         throws NodeException
     {
         // create the new fragment and copy attributes
-        Fragment copy = newFragment();
+        BaseFragmentElement copy;
+        if (source instanceof Fragment)
+        {
+            copy = newFragment();
+        }
+        else if (source instanceof FragmentReference)
+        {
+            copy = newFragmentReference();
+        }
+        else if (source instanceof PageFragment)
+        {
+            copy = newPageFragment();
+        }
+        else
+        {
+            throw new IllegalArgumentException("Unsupported fragment type: "+((source != null) ? source.getClass().getName() : "null"));
+        }
+
         if (copyIds)
         {
             copy.setId(source.getId());
         }
         copy.setDecorator(source.getDecorator());
-        copy.setName(name);
         copy.setShortTitle(source.getShortTitle());
         copy.setSkin(source.getSkin());
         copy.setTitle(source.getTitle());
-        copy.setType(source.getType());
         copy.setState(source.getState());
 
         // copy security constraints
@@ -992,7 +1252,7 @@
         {
             SecurityConstraints copiedSecurity = copySecurityConstraints(FRAGMENT_NODE_TYPE, srcSecurity);
             copy.setSecurityConstraints(copiedSecurity);
-        }    
+        }
         
         // copy properties
         Iterator props = source.getProperties().entrySet().iterator();
@@ -1021,17 +1281,39 @@
             copy.getPreferences().add(newPref);
         }
 
-        // recursively copy fragments
-        Iterator fragments = source.getFragments().iterator();
-        while (fragments.hasNext())
-        {
-            Fragment fragment = (Fragment)fragments.next();
-            Fragment copiedFragment = copyFragment(fragment, fragment.getName(), copyIds);
-            copy.getFragments().add(copiedFragment);
+        if (source instanceof Fragment)
+        {
+            Fragment copyFragment = (Fragment)copy; 
+            Fragment sourceFragment = (Fragment)source; 
+            if (name == null)
+            {
+                name = sourceFragment.getName();
+            }
+            copyFragment.setName(name);
+            copyFragment.setType(sourceFragment.getType());
+
+            // recursively copy fragments
+            Iterator fragments = sourceFragment.getFragments().iterator();
+            while (fragments.hasNext())
+            {
+                BaseFragmentElement fragment = (BaseFragmentElement)fragments.next();
+                BaseFragmentElement copiedFragment = copyFragment(fragment, null, copyIds);
+                copyFragment.getFragments().add(copiedFragment);
+            }
         }
+        else if (source instanceof FragmentReference)
+        {
+            FragmentReference copyFragment = (FragmentReference)copy; 
+            FragmentReference sourceFragment = (FragmentReference)source;
+            copyFragment.setRefId(sourceFragment.getRefId());            
+        }
+
         return copy;
     }
     
+    /* (non-Javadoc)
+     * @see org.apache.jetspeed.page.PageManager#copyLink(org.apache.jetspeed.om.page.Link, java.lang.String)
+     */
     public Link copyLink(Link source, String path)
     throws NodeException
     {
@@ -1059,6 +1341,9 @@
         return link;
     }
 
+    /* (non-Javadoc)
+     * @see org.apache.jetspeed.page.PageManager#copyPageSecurity(org.apache.jetspeed.om.page.PageSecurity)
+     */
     public PageSecurity copyPageSecurity(PageSecurity source) 
     throws NodeException
     {
@@ -1339,18 +1624,27 @@
         PageManagerUtils.deepMergeFolder(this, srcFolder, destinationPath, owner, copyIds);
     }
     
+    /* (non-Javadoc)
+     * @see org.apache.jetspeed.page.PageManager#getUserPage(java.lang.String, java.lang.String)
+     */
     public Page getUserPage(String userName, String pageName)
     throws PageNotFoundException, NodeException
     {
         return this.getPage(Folder.USER_FOLDER + userName + Folder.PATH_SEPARATOR + pageName);
     }
     
+    /* (non-Javadoc)
+     * @see org.apache.jetspeed.page.PageManager#getUserFolder(java.lang.String)
+     */
     public Folder getUserFolder(String userName) 
         throws FolderNotFoundException, InvalidFolderException, NodeException
     {
         return this.getFolder(Folder.USER_FOLDER + userName);        
     }
 
+    /* (non-Javadoc)
+     * @see org.apache.jetspeed.page.PageManager#folderExists(java.lang.String)
+     */
     public boolean folderExists(String folderName)
     {
         try
@@ -1363,6 +1657,10 @@
         }
         return true;
     }
+    
+    /* (non-Javadoc)
+     * @see org.apache.jetspeed.page.PageManager#pageExists(java.lang.String)
+     */
     public boolean pageExists(String pageName)
     {
         try
@@ -1376,6 +1674,57 @@
         return true;
     }
     
+    /* (non-Javadoc)
+     * @see org.apache.jetspeed.page.PageManager#pageTemplateExists(java.lang.String)
+     */
+    public boolean pageTemplateExists(String pageName)
+    {
+        try
+        {
+            getPageTemplate(pageName);
+        }
+        catch (Exception e)
+        {
+            return false;
+        }
+        return true;
+    }
+    
+    /* (non-Javadoc)
+     * @see org.apache.jetspeed.page.PageManager#dynamicPageExists(java.lang.String)
+     */
+    public boolean dynamicPageExists(String pageName)
+    {
+        try
+        {
+            getDynamicPage(pageName);
+        }
+        catch (Exception e)
+        {
+            return false;
+        }
+        return true;
+    }
+    
+    /* (non-Javadoc)
+     * @see org.apache.jetspeed.page.PageManager#fragmentDefinitionExists(java.lang.String)
+     */
+    public boolean fragmentDefinitionExists(String name)
+    {
+        try
+        {
+            getFragmentDefinition(name);
+        }
+        catch (Exception e)
+        {
+            return false;
+        }
+        return true;
+    }
+    
+    /* (non-Javadoc)
+     * @see org.apache.jetspeed.page.PageManager#linkExists(java.lang.String)
+     */
     public boolean linkExists(String linkName)
     {
         try
@@ -1389,6 +1738,9 @@
         return true;
     }
 
+    /* (non-Javadoc)
+     * @see org.apache.jetspeed.page.PageManager#userFolderExists(java.lang.String)
+     */
     public boolean userFolderExists(String userName)
     {
         try
@@ -1402,6 +1754,9 @@
         return true;
     }
     
+    /* (non-Javadoc)
+     * @see org.apache.jetspeed.page.PageManager#userPageExists(java.lang.String, java.lang.String)
+     */
     public boolean userPageExists(String userName, String pageName)
     {
         try

Modified: portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/main/java/org/apache/jetspeed/page/DelegatingPageManager.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/main/java/org/apache/jetspeed/page/DelegatingPageManager.java?rev=881862&r1=881861&r2=881862&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/main/java/org/apache/jetspeed/page/DelegatingPageManager.java (original)
+++ portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/main/java/org/apache/jetspeed/page/DelegatingPageManager.java Wed Nov 18 18:24:48 2009
@@ -22,10 +22,12 @@
 import org.apache.jetspeed.om.folder.Folder;
 import org.apache.jetspeed.om.folder.FolderNotFoundException;
 import org.apache.jetspeed.om.folder.InvalidFolderException;
-import org.apache.jetspeed.om.page.ContentPage;
+import org.apache.jetspeed.om.page.FragmentDefinition;
+import org.apache.jetspeed.om.page.DynamicPage;
 import org.apache.jetspeed.om.page.Link;
 import org.apache.jetspeed.om.page.Page;
 import org.apache.jetspeed.om.page.PageSecurity;
+import org.apache.jetspeed.om.page.PageTemplate;
 import org.apache.jetspeed.page.document.DocumentException;
 import org.apache.jetspeed.page.document.DocumentNotFoundException;
 import org.apache.jetspeed.page.document.FailedToDeleteDocumentException;
@@ -63,10 +65,27 @@
     }
 
     /* (non-Javadoc)
-     * @see org.apache.jetspeed.page.PageManager#getContentPage(java.lang.String)
+     * @see org.apache.jetspeed.page.PageManager#getPageTemplate(java.lang.String)
      */
-    public ContentPage getContentPage(String path)
-            throws PageNotFoundException, NodeException
+    public PageTemplate getPageTemplate(String id) throws PageNotFoundException, NodeException
+    {
+        // TODO Auto-generated method stub
+        return null;
+    }
+    
+    /* (non-Javadoc)
+     * @see org.apache.jetspeed.page.PageManager#getDynamicPage(java.lang.String)
+     */
+    public DynamicPage getDynamicPage(String id) throws PageNotFoundException, NodeException
+    {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    /* (non-Javadoc)
+     * @see org.apache.jetspeed.page.PageManager#getFragmentDefinition(java.lang.String)
+     */
+    public FragmentDefinition getFragmentDefinition(String id) throws PageNotFoundException, NodeException
     {
         // TODO Auto-generated method stub
         return null;
@@ -144,6 +163,60 @@
     }
     
     /* (non-Javadoc)
+     * @see org.apache.jetspeed.page.PageManager#getPageTemplates(org.apache.jetspeed.om.folder.Folder)
+     */
+    public NodeSet getPageTemplates(Folder folder) throws NodeException
+    {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    /* (non-Javadoc)
+     * @see org.apache.jetspeed.page.PageManager#getPageTemplate(org.apache.jetspeed.om.folder.Folder, java.lang.String)
+     */
+    public PageTemplate getPageTemplate(Folder folder, String name) throws PageNotFoundException, NodeException
+    {
+        // TODO Auto-generated method stub
+        return null;
+    }
+    
+    /* (non-Javadoc)
+     * @see org.apache.jetspeed.page.PageManager#getDynamicPages(org.apache.jetspeed.om.folder.Folder)
+     */
+    public NodeSet getDynamicPages(Folder folder) throws NodeException
+    {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    /* (non-Javadoc)
+     * @see org.apache.jetspeed.page.PageManager#getDynamicPage(org.apache.jetspeed.om.folder.Folder, java.lang.String)
+     */
+    public DynamicPage getDynamicPage(Folder folder, String name) throws PageNotFoundException, NodeException
+    {
+        // TODO Auto-generated method stub
+        return null;
+    }
+    
+    /* (non-Javadoc)
+     * @see org.apache.jetspeed.page.PageManager#getFragmentDefinitions(org.apache.jetspeed.om.folder.Folder)
+     */
+    public NodeSet getFragmentDefinitions(Folder folder) throws NodeException
+    {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    /* (non-Javadoc)
+     * @see org.apache.jetspeed.page.PageManager#getFragmentDefinition(org.apache.jetspeed.om.folder.Folder, java.lang.String)
+     */
+    public FragmentDefinition getFragmentDefinition(Folder folder, String name) throws PageNotFoundException, NodeException
+    {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    /* (non-Javadoc)
      * @see org.apache.jetspeed.page.PageManager#getLinks(org.apache.jetspeed.om.folder.Folder)
      */    
     public NodeSet getLinks(Folder folder) throws NodeException
@@ -186,7 +259,6 @@
             PageNotUpdatedException
     {
         // TODO Auto-generated method stub
-
     }
 
     /* (non-Javadoc)
@@ -196,7 +268,60 @@
             PageNotRemovedException
     {
         // TODO Auto-generated method stub
+    }
+
+    /* (non-Javadoc)
+     * @see org.apache.jetspeed.page.PageManager#updatePageTemplate(org.apache.jetspeed.om.page.PageTemplate)
+     */
+    public void updatePageTemplate(PageTemplate pageTemplate) throws NodeException,
+            PageNotUpdatedException
+    {
+        // TODO Auto-generated method stub
+    }
+
+    /* (non-Javadoc)
+     * @see org.apache.jetspeed.page.PageManager#removePageTemplate(org.apache.jetspeed.om.page.PageTemplate)
+     */
+    public void removePageTemplate(PageTemplate pageTemplate) throws NodeException,
+            PageNotRemovedException
+    {
+        // TODO Auto-generated method stub
+    }
+
+    /* (non-Javadoc)
+     * @see org.apache.jetspeed.page.PageManager#updateDynamicPage(org.apache.jetspeed.om.page.DynamicPage)
+     */
+    public void updateDynamicPage(DynamicPage dynamicPage) throws NodeException,
+            PageNotUpdatedException
+    {
+        // TODO Auto-generated method stub
+    }
+
+    /* (non-Javadoc)
+     * @see org.apache.jetspeed.page.PageManager#removeDynamicPage(org.apache.jetspeed.om.page.DynamicPage)
+     */
+    public void removeDynamicPage(DynamicPage dynamicPage) throws NodeException,
+            PageNotRemovedException
+    {
+        // TODO Auto-generated method stub
+    }
+
+    /* (non-Javadoc)
+     * @see org.apache.jetspeed.page.PageManager#updateFragmentDefinition(org.apache.jetspeed.om.page.FragmentDefinition)
+     */
+    public void updateFragmentDefinition(FragmentDefinition fragmentDefinition) throws NodeException,
+            PageNotUpdatedException
+    {
+        // TODO Auto-generated method stub
+    }
 
+    /* (non-Javadoc)
+     * @see org.apache.jetspeed.page.PageManager#removeFragmentDefinition(org.apache.jetspeed.om.page.FragmentDefinition)
+     */
+    public void removeFragmentDefinition(FragmentDefinition fragmentDefinition) throws NodeException,
+            PageNotRemovedException
+    {
+        // TODO Auto-generated method stub
     }
 
     /* (non-Javadoc)
@@ -206,7 +331,6 @@
             FolderNotUpdatedException
     {
         // TODO Auto-generated method stub
-
     }
 
     /* (non-Javadoc)
@@ -216,7 +340,6 @@
             FolderNotUpdatedException
     {
         // TODO Auto-generated method stub
-
     }
 
     /* (non-Javadoc)
@@ -226,7 +349,6 @@
             FolderNotRemovedException
     {
         // TODO Auto-generated method stub
-
     }
 
     /* (non-Javadoc)
@@ -236,7 +358,6 @@
             LinkNotUpdatedException
     {
         // TODO Auto-generated method stub
-
     }
 
     /* (non-Javadoc)
@@ -246,7 +367,6 @@
             LinkNotRemovedException
     {
         // TODO Auto-generated method stub
-
     }
 
     /* (non-Javadoc)
@@ -256,7 +376,6 @@
             NodeException, FailedToUpdateDocumentException
     {
         // TODO Auto-generated method stub
-
     }
 
     /* (non-Javadoc)
@@ -266,7 +385,6 @@
             NodeException, FailedToDeleteDocumentException
     {
         // TODO Auto-generated method stub
-
     }
     
     public int addPages(Page[] pages)

Modified: portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/main/java/org/apache/jetspeed/page/PageManagerUtils.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/main/java/org/apache/jetspeed/page/PageManagerUtils.java?rev=881862&r1=881861&r2=881862&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/main/java/org/apache/jetspeed/page/PageManagerUtils.java (original)
+++ portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/main/java/org/apache/jetspeed/page/PageManagerUtils.java Wed Nov 18 18:24:48 2009
@@ -21,18 +21,21 @@
 
 import javax.security.auth.Subject;
 
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 import org.apache.jetspeed.om.common.SecurityConstraints;
 import org.apache.jetspeed.om.folder.Folder;
 import org.apache.jetspeed.om.folder.FolderNotFoundException;
+import org.apache.jetspeed.om.page.DynamicPage;
+import org.apache.jetspeed.om.page.FragmentDefinition;
 import org.apache.jetspeed.om.page.Link;
 import org.apache.jetspeed.om.page.Page;
+import org.apache.jetspeed.om.page.PageTemplate;
 import org.apache.jetspeed.page.document.NodeException;
 import org.apache.jetspeed.security.Role;
 import org.apache.jetspeed.security.SubjectHelper;
 import org.apache.jetspeed.security.User;
 
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * PageManagerUtils
@@ -128,17 +131,41 @@
                 Page dstPage = pageManager.copyPage(srcPage, path);
                 pageManager.updatePage(dstPage);
             }
-            //Commented, as these were creating the duplicate objects 
-            /*            
-            else
+        }     
+        Iterator pageTemplates = srcFolder.getPageTemplates().iterator();
+        while (pageTemplates.hasNext())
+        {
+            PageTemplate srcPageTemplate = (PageTemplate)pageTemplates.next();
+            String path = concatenatePaths(destinationPath, srcPageTemplate.getName());
+            if (!pageManager.pageTemplateExists(path))
+            {
+                PageTemplate dstPageTemplate = pageManager.copyPageTemplate(srcPageTemplate, path);
+                pageManager.updatePageTemplate(dstPageTemplate);
+            }
+        }     
+        Iterator dynamicPages = srcFolder.getDynamicPages().iterator();
+        while (dynamicPages.hasNext())
+        {
+            DynamicPage srcDynamicPage = (DynamicPage)dynamicPages.next();
+            String path = concatenatePaths(destinationPath, srcDynamicPage.getName());
+            if (!pageManager.dynamicPageExists(path))
             {
-                path = concatenatePaths(destinationPath, uniqueName + "-" +srcPage.getName());               
-                Page dstPage = pageManager.copyPage(srcPage, path);                
-                pageManager.updatePage(dstPage);                
+                DynamicPage dstDynamicPage = pageManager.copyDynamicPage(srcDynamicPage, path);
+                pageManager.updateDynamicPage(dstDynamicPage);
+            }
+        }     
+        Iterator fragmentDefinitions = srcFolder.getFragmentDefinitions().iterator();
+        while (fragmentDefinitions.hasNext())
+        {
+            FragmentDefinition srcFragmentDefinition = (FragmentDefinition)fragmentDefinitions.next();
+            String path = concatenatePaths(destinationPath, srcFragmentDefinition.getName());
+            if (!pageManager.fragmentDefinitionExists(path))
+            {
+                FragmentDefinition dstFragmentDefinition = pageManager.copyFragmentDefinition(srcFragmentDefinition, path);
+                pageManager.updateFragmentDefinition(dstFragmentDefinition);
             }
-            */
         }
-     
+        
         Iterator links = srcFolder.getLinks().iterator();
         while (links.hasNext())
         {
@@ -149,16 +176,8 @@
                 Link dstLink = pageManager.copyLink(srcLink, path);
                 pageManager.updateLink(dstLink);
             }
-            //Commented, as these were creating the duplicate objects            
-            /*
-            else
-            {
-                path = concatenatePaths(destinationPath, uniqueName + "-" +srcLink.getName());               
-                Link dstLink = pageManager.copyLink(srcLink, path);                
-                pageManager.updateLink(dstLink);                                
-            }
-            */
-        }     
+        }
+        
         Iterator folders = srcFolder.getFolders().iterator();
         while (folders.hasNext())
         {
@@ -257,6 +276,30 @@
             Page dstPage = pageManager.copyPage(srcPage, path, copyIds);
             pageManager.updatePage(dstPage);
         }
+        Iterator pageTemplates = srcFolder.getPageTemplates().iterator();
+        while (pageTemplates.hasNext())
+        {
+            PageTemplate srcPageTemplate = (PageTemplate)pageTemplates.next();
+            String path = PageManagerUtils.concatenatePaths(destinationPath, srcPageTemplate.getName());
+            PageTemplate dstPageTemplate = pageManager.copyPageTemplate(srcPageTemplate, path, copyIds);
+            pageManager.updatePageTemplate(dstPageTemplate);
+        }     
+        Iterator dynamicPages = srcFolder.getDynamicPages().iterator();
+        while (dynamicPages.hasNext())
+        {
+            DynamicPage srcDynamicPage = (DynamicPage)dynamicPages.next();
+            String path = PageManagerUtils.concatenatePaths(destinationPath, srcDynamicPage.getName());
+            DynamicPage dstDynamicPage = pageManager.copyDynamicPage(srcDynamicPage, path, copyIds);
+            pageManager.updateDynamicPage(dstDynamicPage);
+        }     
+        Iterator fragmentDefinitions = srcFolder.getFragmentDefinitions().iterator();
+        while (fragmentDefinitions.hasNext())
+        {
+            FragmentDefinition srcFragmentDefinition = (FragmentDefinition)fragmentDefinitions.next();
+            String path = PageManagerUtils.concatenatePaths(destinationPath, srcFragmentDefinition.getName());
+            FragmentDefinition dstFragmentDefinition = pageManager.copyFragmentDefinition(srcFragmentDefinition, path, copyIds);
+            pageManager.updateFragmentDefinition(dstFragmentDefinition);
+        }     
      
         Iterator links = srcFolder.getLinks().iterator();
         while (links.hasNext())
@@ -324,6 +367,39 @@
                 pageManager.updatePage(dstPage);
             }
         }
+        Iterator pageTemplates = srcFolder.getPageTemplates().iterator();
+        while (pageTemplates.hasNext())
+        {
+            PageTemplate srcPageTemplate = (PageTemplate)pageTemplates.next();
+            String path = PageManagerUtils.concatenatePaths(destinationPath, srcPageTemplate.getName());
+            if (!pageManager.pageTemplateExists(path))
+            {
+                PageTemplate dstPageTemplate = pageManager.copyPageTemplate(srcPageTemplate, path, copyIds);
+                pageManager.updatePageTemplate(dstPageTemplate);
+            }
+        }     
+        Iterator dynamicPages = srcFolder.getDynamicPages().iterator();
+        while (dynamicPages.hasNext())
+        {
+            DynamicPage srcDynamicPage = (DynamicPage)dynamicPages.next();
+            String path = PageManagerUtils.concatenatePaths(destinationPath, srcDynamicPage.getName());
+            if (!pageManager.dynamicPageExists(path))
+            {
+                DynamicPage dstDynamicPage = pageManager.copyDynamicPage(srcDynamicPage, path, copyIds);
+                pageManager.updateDynamicPage(dstDynamicPage);
+            }
+        }     
+        Iterator fragmentDefinitions = srcFolder.getFragmentDefinitions().iterator();
+        while (fragmentDefinitions.hasNext())
+        {
+            FragmentDefinition srcFragmentDefinition = (FragmentDefinition)fragmentDefinitions.next();
+            String path = PageManagerUtils.concatenatePaths(destinationPath, srcFragmentDefinition.getName());
+            if (!pageManager.fragmentDefinitionExists(path))
+            {
+                FragmentDefinition dstFragmentDefinition = pageManager.copyFragmentDefinition(srcFragmentDefinition, path, copyIds);
+                pageManager.updateFragmentDefinition(dstFragmentDefinition);
+            }
+        }
      
         Iterator links = srcFolder.getLinks().iterator();
         while (links.hasNext())



---------------------------------------------------------------------
To unsubscribe, e-mail: jetspeed-dev-unsubscribe@portals.apache.org
For additional commands, e-mail: jetspeed-dev-help@portals.apache.org