Author: rwatler
Date: Tue Dec  6 14:45:09 2005
New Revision: 354596

URL: http://svn.apache.org/viewcvs?rev=354596&view=rev
Log:
add Page.removeFragmentById() API

Modified:
    
portals/jetspeed-2/trunk/components/page-manager/src/java/org/apache/jetspeed/om/page/ContentPageImpl.java
    
portals/jetspeed-2/trunk/components/page-manager/src/java/org/apache/jetspeed/om/page/impl/FragmentImpl.java
    
portals/jetspeed-2/trunk/components/page-manager/src/java/org/apache/jetspeed/om/page/impl/PageImpl.java
    
portals/jetspeed-2/trunk/components/page-manager/src/java/org/apache/jetspeed/om/page/psml/PageImpl.java
    
portals/jetspeed-2/trunk/components/page-manager/src/test/org/apache/jetspeed/page/TestCastorXmlPageManager.java
    
portals/jetspeed-2/trunk/components/page-manager/src/test/org/apache/jetspeed/page/TestDatabasePageManager.java
    
portals/jetspeed-2/trunk/jetspeed-api/src/java/org/apache/jetspeed/om/page/Page.java

Modified: 
portals/jetspeed-2/trunk/components/page-manager/src/java/org/apache/jetspeed/om/page/ContentPageImpl.java
URL: 
http://svn.apache.org/viewcvs/portals/jetspeed-2/trunk/components/page-manager/src/java/org/apache/jetspeed/om/page/ContentPageImpl.java?rev=354596&r1=354595&r2=354596&view=diff
==============================================================================
--- 
portals/jetspeed-2/trunk/components/page-manager/src/java/org/apache/jetspeed/om/page/ContentPageImpl.java
 (original)
+++ 
portals/jetspeed-2/trunk/components/page-manager/src/java/org/apache/jetspeed/om/page/ContentPageImpl.java
 Tue Dec  6 14:45:09 2005
@@ -64,6 +64,25 @@
     }
 
     /* (non-Javadoc)
+     * @see 
org.apache.jetspeed.om.page.ContentPage#removeFragmentById(java.lang.String)
+     */
+    public Fragment removeFragmentById(String id)
+    {
+        // remove from underlying page
+        Fragment removed = page.removeFragmentById(id);
+        if (removed != null)
+        {
+            // reset content fragments if successfully removed
+            if ((rootContentFragment != null) && 
rootContentFragment.getId().equals(id))
+            {
+                rootContentFragment = null;
+            }
+            cachedFragments.clear();
+        }
+        return removed;
+    }
+
+    /* (non-Javadoc)
      * @see 
org.apache.jetspeed.om.page.ContentPage#getContentFragmentsByName(java.lang.String)
      */
     public List getContentFragmentsByName(String name)

Modified: 
portals/jetspeed-2/trunk/components/page-manager/src/java/org/apache/jetspeed/om/page/impl/FragmentImpl.java
URL: 
http://svn.apache.org/viewcvs/portals/jetspeed-2/trunk/components/page-manager/src/java/org/apache/jetspeed/om/page/impl/FragmentImpl.java?rev=354596&r1=354595&r2=354596&view=diff
==============================================================================
--- 
portals/jetspeed-2/trunk/components/page-manager/src/java/org/apache/jetspeed/om/page/impl/FragmentImpl.java
 (original)
+++ 
portals/jetspeed-2/trunk/components/page-manager/src/java/org/apache/jetspeed/om/page/impl/FragmentImpl.java
 Tue Dec  6 14:45:09 2005
@@ -165,6 +165,42 @@
     }
 
     /**
+     * removeFragmentById
+     *
+     * Remove fragment with matching id from
+     * child fragments.
+     *
+     * @param id fragment id to remove.
+     * @return removed fragment
+     */
+    Fragment removeFragmentById(String id)
+    {
+        // remove from deep children
+        if (fragments != null)
+        {
+            Iterator fragmentsIter = fragments.iterator();
+            while (fragmentsIter.hasNext())
+            {
+                FragmentImpl fragment = (FragmentImpl)fragmentsIter.next();
+                if (!fragment.getId().equals(id))
+                {
+                    Fragment removed = fragment.removeFragmentById(id);
+                    if (removed != null)
+                    {
+                        return removed;
+                    }
+                }
+                else
+                {
+                    fragmentsIter.remove();
+                    return fragment;
+                }
+            }
+        }
+        return null;
+    }
+
+    /**
      * getFragmentsByName
      *
      * Retrieve fragments with matching name including

Modified: 
portals/jetspeed-2/trunk/components/page-manager/src/java/org/apache/jetspeed/om/page/impl/PageImpl.java
URL: 
http://svn.apache.org/viewcvs/portals/jetspeed-2/trunk/components/page-manager/src/java/org/apache/jetspeed/om/page/impl/PageImpl.java?rev=354596&r1=354595&r2=354596&view=diff
==============================================================================
--- 
portals/jetspeed-2/trunk/components/page-manager/src/java/org/apache/jetspeed/om/page/impl/PageImpl.java
 (original)
+++ 
portals/jetspeed-2/trunk/components/page-manager/src/java/org/apache/jetspeed/om/page/impl/PageImpl.java
 Tue Dec  6 14:45:09 2005
@@ -214,6 +214,31 @@
     }
 
     /* (non-Javadoc)
+     * @see 
org.apache.jetspeed.om.page.Page#removeFragmentById(java.lang.String)
+     */
+    public Fragment removeFragmentById(String id)
+    {
+        // check for page edit access
+        checkAccess(SecuredResource.EDIT_ACTION);
+
+        // remove fragment by id
+        FragmentImpl rootFragment = (FragmentImpl)getRootFragment();
+        if (rootFragment != null)
+        {
+            if (rootFragment.getId().equals(id))
+            {
+                setRootFragment(null);
+                return rootFragment;
+            }
+            else
+            {
+                return rootFragment.removeFragmentById(id);
+            }
+        }
+        return null;
+    }
+
+    /* (non-Javadoc)
      * @see 
org.apache.jetspeed.om.page.Page#getFragmentsByName(java.lang.String)
      */
     public List getFragmentsByName(String name)

Modified: 
portals/jetspeed-2/trunk/components/page-manager/src/java/org/apache/jetspeed/om/page/psml/PageImpl.java
URL: 
http://svn.apache.org/viewcvs/portals/jetspeed-2/trunk/components/page-manager/src/java/org/apache/jetspeed/om/page/psml/PageImpl.java?rev=354596&r1=354595&r2=354596&view=diff
==============================================================================
--- 
portals/jetspeed-2/trunk/components/page-manager/src/java/org/apache/jetspeed/om/page/psml/PageImpl.java
 (original)
+++ 
portals/jetspeed-2/trunk/components/page-manager/src/java/org/apache/jetspeed/om/page/psml/PageImpl.java
 Tue Dec  6 14:45:09 2005
@@ -17,8 +17,10 @@
 package org.apache.jetspeed.om.page.psml;
 
 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.om.folder.psml.MenuDefinitionImpl;
@@ -169,6 +171,62 @@
         }
 
         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 )

Modified: 
portals/jetspeed-2/trunk/components/page-manager/src/test/org/apache/jetspeed/page/TestCastorXmlPageManager.java
URL: 
http://svn.apache.org/viewcvs/portals/jetspeed-2/trunk/components/page-manager/src/test/org/apache/jetspeed/page/TestCastorXmlPageManager.java?rev=354596&r1=354595&r2=354596&view=diff
==============================================================================
--- 
portals/jetspeed-2/trunk/components/page-manager/src/test/org/apache/jetspeed/page/TestCastorXmlPageManager.java
 (original)
+++ 
portals/jetspeed-2/trunk/components/page-manager/src/test/org/apache/jetspeed/page/TestCastorXmlPageManager.java
 Tue Dec  6 14:45:09 2005
@@ -400,6 +400,12 @@
     {
         Page page = pageManager.getPage(this.testPage002);
         page.setTitle("Updated Title");
+        Fragment root = page.getRootFragment();
+        assertNotNull(root);
+        assertNotNull(root.getFragments());
+        assertEquals(1, root.getFragments().size());
+        String testId = ((Fragment)root.getFragments().get(0)).getId();
+        assertNotNull(page.removeFragmentById(testId));
 
         try
         {
@@ -415,6 +421,10 @@
 
         page = pageManager.getPage(this.testPage002);
         assertTrue(page.getTitle().equals("Updated Title"));
+        root = page.getRootFragment();
+        assertNotNull(root);
+        assertNotNull(root.getFragments());
+        assertTrue(root.getFragments().isEmpty());
     }
 
     public void testUpdateFolder() throws Exception

Modified: 
portals/jetspeed-2/trunk/components/page-manager/src/test/org/apache/jetspeed/page/TestDatabasePageManager.java
URL: 
http://svn.apache.org/viewcvs/portals/jetspeed-2/trunk/components/page-manager/src/test/org/apache/jetspeed/page/TestDatabasePageManager.java?rev=354596&r1=354595&r2=354596&view=diff
==============================================================================
--- 
portals/jetspeed-2/trunk/components/page-manager/src/test/org/apache/jetspeed/page/TestDatabasePageManager.java
 (original)
+++ 
portals/jetspeed-2/trunk/components/page-manager/src/test/org/apache/jetspeed/page/TestDatabasePageManager.java
 Tue Dec  6 14:45:09 2005
@@ -788,6 +788,10 @@
         page.setTitle("UPDATED");
         page.getRootFragment().getProperties().remove("custom-prop1");
         page.getRootFragment().getProperties().put("UPDATED", "UPDATED");
+        assertNotNull(page.getRootFragment().getFragments());
+        assertEquals(2, page.getRootFragment().getFragments().size());
+        String removeId = 
((Fragment)page.getRootFragment().getFragments().get(1)).getId();
+        assertNotNull(page.removeFragmentById(removeId));
         SecurityConstraint pageConstraint = page.newSecurityConstraint();
         pageConstraint.setUsers(Shared.makeListFromCSV("UPDATED"));
         page.getSecurityConstraints().getSecurityConstraints().add(0, 
pageConstraint);

Modified: 
portals/jetspeed-2/trunk/jetspeed-api/src/java/org/apache/jetspeed/om/page/Page.java
URL: 
http://svn.apache.org/viewcvs/portals/jetspeed-2/trunk/jetspeed-api/src/java/org/apache/jetspeed/om/page/Page.java?rev=354596&r1=354595&r2=354596&view=diff
==============================================================================
--- 
portals/jetspeed-2/trunk/jetspeed-api/src/java/org/apache/jetspeed/om/page/Page.java
 (original)
+++ 
portals/jetspeed-2/trunk/jetspeed-api/src/java/org/apache/jetspeed/om/page/Page.java
 Tue Dec  6 14:45:09 2005
@@ -96,6 +96,15 @@
     Fragment getFragmentById(String id);
 
     /**
+     * Removes the fragment contained within this page, with the
+     * specified Id.
+     *
+     * @param id the fragment id to remove
+     * @return the removed Fragment object or null if not found
+     */
+    Fragment removeFragmentById(String id);
+
+    /**
      * Retrieves the fragments contained within this page, with the
      * specified name.
      *



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to