Author: ard
Date: Wed Sep 12 07:36:40 2012
New Revision: 1383818

URL: http://svn.apache.org/viewvc?rev=1383818&view=rev
Log:
RAVE-697 introduce an ExtendablePageFragment interface because getExtends does 
not need to be available *outside* the implementation that builds the 
PageFragments. It is only needed internally for enhancing

Added:
    
rave/sandbox/content-services/rave-web-hmvc/src/test/resources/config/testenhancingmappings/simplePageExtensionPageDefinitions.xml
      - copied, changed from r1383436, 
rave/sandbox/content-services/rave-web-hmvc/src/test/resources/config/testenhancingmappings/singlePageExtensionPageDefinitions.xml
Removed:
    
rave/sandbox/content-services/rave-web-hmvc/src/test/resources/config/testenhancingmappings/singlePageExtensionPageDefinitions.xml
Modified:
    
rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/mvc/config/EnhancedPagesConfigManager.java
    
rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/mvc/config/PageFragment.java
    
rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/mvc/config/enhancers/AbstractFragmentsRemoverEnhancer.java
    
rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/mvc/config/enhancers/ExtendsEnhancer.java
    
rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/mvc/config/enhancers/SnsFragmentsRemoverEnhancer.java
    
rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/mvc/config/xml/XmlPageFragment.java
    
rave/sandbox/content-services/rave-web-hmvc/src/test/java/org/apache/rave/portal/web/mvc/config/EnhancedPagesConfigManagerTest.java
    
rave/sandbox/content-services/rave-web-hmvc/src/test/java/org/apache/rave/portal/web/mvc/config/xml/JaxbMappingsTest.java
    
rave/sandbox/content-services/rave-web-hmvc/src/test/resources/config/enhanced-pages-config-manager-test.xml
    
rave/sandbox/content-services/rave-web-hmvc/src/test/resources/config/testenhancingmappings/noExtensionsPageDefinitions.xml
    
rave/sandbox/content-services/rave-web-jcr/src/main/java/org/apache/rave/portal/web/mvc/config/jcr/JcrPageFragment.java

Modified: 
rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/mvc/config/EnhancedPagesConfigManager.java
URL: 
http://svn.apache.org/viewvc/rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/mvc/config/EnhancedPagesConfigManager.java?rev=1383818&r1=1383817&r2=1383818&view=diff
==============================================================================
--- 
rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/mvc/config/EnhancedPagesConfigManager.java
 (original)
+++ 
rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/mvc/config/EnhancedPagesConfigManager.java
 Wed Sep 12 07:36:40 2012
@@ -88,43 +88,4 @@ public class EnhancedPagesConfigManager 
         return delegatee.lastModified();
     }
 
-
-
-    public class PageFragmentImpl implements PageFragment {
-
-        @Override
-        public String getViewName() {
-            return null;  //To change body of implemented methods use File | 
Settings | File Templates.
-        }
-
-        @Override
-        public String getName() {
-            return null;  //To change body of implemented methods use File | 
Settings | File Templates.
-        }
-
-        @Override
-        public String getDescription() {
-            return null;  //To change body of implemented methods use File | 
Settings | File Templates.
-        }
-
-        @Override
-        public String getController() {
-            return null;  //To change body of implemented methods use File | 
Settings | File Templates.
-        }
-
-        @Override
-        public String getExtends() {
-            return null;  //To change body of implemented methods use File | 
Settings | File Templates.
-        }
-
-        @Override
-        public boolean isAbstract() {
-            return false;  //To change body of implemented methods use File | 
Settings | File Templates.
-        }
-
-        @Override
-        public List<PageFragment> getChildren() {
-            return null;  //To change body of implemented methods use File | 
Settings | File Templates.
-        }
-    }
 }
\ No newline at end of file

Modified: 
rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/mvc/config/PageFragment.java
URL: 
http://svn.apache.org/viewvc/rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/mvc/config/PageFragment.java?rev=1383818&r1=1383817&r2=1383818&view=diff
==============================================================================
--- 
rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/mvc/config/PageFragment.java
 (original)
+++ 
rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/mvc/config/PageFragment.java
 Wed Sep 12 07:36:40 2012
@@ -54,20 +54,6 @@ public interface PageFragment {
     String getController();
 
     /**
-     * <p>
-     *  Returns the absolute or relative path to the {@link PageFragment} that 
is extended or <code>null</code> when no 
-     *  extension is done. The absolute path must start with a <code>/</code>, 
the relative path <strong>MUST</strong> start with at least
-     *  one time <code>../</code>.
-     * </p>
-     * <p>
-     *  A {@link PageFragment} is not allowed to extend itself or one of its 
descendant {@link PageFragment}s
-     * </p>
-     * @return the absolute or relative path to the {@link PageFragment} that 
is extended or <code>null</code> when no 
-     * extension is done
-     */
-    String getExtends();
-
-    /**
      * @return <code>true</code> when this {@PageFragment} is abstract
      */
     boolean isAbstract();

Modified: 
rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/mvc/config/enhancers/AbstractFragmentsRemoverEnhancer.java
URL: 
http://svn.apache.org/viewvc/rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/mvc/config/enhancers/AbstractFragmentsRemoverEnhancer.java?rev=1383818&r1=1383817&r2=1383818&view=diff
==============================================================================
--- 
rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/mvc/config/enhancers/AbstractFragmentsRemoverEnhancer.java
 (original)
+++ 
rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/mvc/config/enhancers/AbstractFragmentsRemoverEnhancer.java
 Wed Sep 12 07:36:40 2012
@@ -27,6 +27,12 @@ import org.apache.rave.portal.web.mvc.co
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+/**
+ * This {@link AbstractFragmentsRemoverEnhancer} removes from the {@link 
PagesConfig#getPages()}
+ * any ROOT {@link PageFragment} that has {@link PageFragment#isAbstract()} 
equal to
+ * <code>true</code> or has a descendant {@link PageFragment} that has {@link 
PageFragment#isAbstract()} equal to
+ * <code>true</code>
+ */
 public class AbstractFragmentsRemoverEnhancer implements PagesConfigEnhancer {
 
     private final static Logger log = 
LoggerFactory.getLogger(AbstractFragmentsRemoverEnhancer.class);
@@ -37,11 +43,11 @@ public class AbstractFragmentsRemoverEnh
         // are defined to be abstract or contain some descendant that are 
abstract
         final Set<PageFragment> abstractPages= new HashSet<PageFragment>();
         final Map<String,PageFragment> pages = pagesConfig.getPages();
-        for (PageFragment pageFragment : pages.values()) {
-            if (pageFragment.isAbstract()) {
-                abstractPages.add(pageFragment);
+        for (PageFragment page : pages.values()) {
+            if (page.isAbstract()) {
+                abstractPages.add(page);
             } else {
-                traverseAndFindAbstractRootFragments(pageFragment, 
pageFragment, abstractPages);
+                traverseAndFindAbstractRootFragments(page, page, 
abstractPages);
             }
         }
         for (PageFragment abstractPage : abstractPages) {

Modified: 
rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/mvc/config/enhancers/ExtendsEnhancer.java
URL: 
http://svn.apache.org/viewvc/rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/mvc/config/enhancers/ExtendsEnhancer.java?rev=1383818&r1=1383817&r2=1383818&view=diff
==============================================================================
--- 
rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/mvc/config/enhancers/ExtendsEnhancer.java
 (original)
+++ 
rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/mvc/config/enhancers/ExtendsEnhancer.java
 Wed Sep 12 07:36:40 2012
@@ -18,6 +18,14 @@
  */
 package org.apache.rave.portal.web.mvc.config.enhancers;
 
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.rave.portal.web.mvc.config.ExtendablePageFragment;
 import org.apache.rave.portal.web.mvc.config.PageFragment;
 import org.apache.rave.portal.web.mvc.config.PagesConfig;
 import org.slf4j.Logger;
@@ -29,11 +37,118 @@ public class ExtendsEnhancer implements 
 
     @Override
     public PagesConfig enhance(final PagesConfig pagesConfig) {
-        for (PageFragment pageFragment : pagesConfig.getPages().values()) {
+        final Map<String,PageFragment> pages = pagesConfig.getPages();
 
+        final Map<String, MutablePageFragment> allPageFragmentsByPath = new 
HashMap<String, MutablePageFragment>();
+        final Map<String, MutablePageFragment> mutablePages = new 
HashMap<String, MutablePageFragment>();
+        
+        for (PageFragment page : pages.values()) {
+            MutablePageFragment mutablePageFragment = new 
MutablePageFragment((ExtendablePageFragment)page, null);
+            mutablePages.put(mutablePageFragment.getName(), 
mutablePageFragment);
+            allPageFragmentsByPath.put(mutablePageFragment.getPath(), 
mutablePageFragment);
+        }
+        
+        // start the enhancement by traversing the allPageFragmentsByPath and 
find all the 'extends' and resolve them
+        for (MutablePageFragment page : mutablePages.values()) {
+            resolveExtensions(page, null, allPageFragmentsByPath);
         }
+
         return pagesConfig;
     }
 
+    private void resolveExtensions(final MutablePageFragment fragment, final 
MutablePageFragment parent, final Map<String, MutablePageFragment> 
allPageFragmentByPath) {
+        if (fragment.getExtends() != null) {
+            String extendz = fragment.getExtends();
+            MutablePageFragment extendsFrom = 
allPageFragmentByPath.get(extendz);
+           // if (extendsFrom )
+        }
+    }
+
+
+    
+    private class MutablePageFragment implements ExtendablePageFragment {
+
+        // the path contains the hierarchical information
+        private String path;
+        private String viewName;
+        private String name;
+        private String description;
+        private String controller;
+        private String extendz;
+        private boolean abstrakt;
+        private Map<String, MutablePageFragment> children;
+
+        /**
+         * constructor that creates a deep copy of PageFragments to 
MutablePageFragment's
+         * @param fragment the fragment to deep copy
+         * @param parent the parent fragment or <code>null</code> for root
+         */
+        private MutablePageFragment(ExtendablePageFragment fragment, 
MutablePageFragment parent) {
+            this.viewName = fragment.getViewName();
+            this.name = fragment.getName();
+            if (parent != null) {
+                path = parent.getPath() + "/" + fragment.getName();
+            } else {
+                path = fragment.getName();
+            }
+            this.description = fragment.getDescription();
+            this.controller = fragment.getController();
+            this.extendz = fragment.getExtends();
+            this.abstrakt = fragment.isAbstract();
+            if (fragment.getChildren() != null) {
+                // use LinkedHashMap to maintain order
+                children = new LinkedHashMap<String, 
MutablePageFragment>(fragment.getChildren().size());
+                for (PageFragment child : fragment.getChildren()) {
+                    MutablePageFragment mutableChild = new 
MutablePageFragment((ExtendablePageFragment)child, this);
+                    children.put(mutableChild.getName(), mutableChild);
+                }
+            }
+        }
+
+        /**
+         * Extra needed utility method for enhancing fragments:
+         * @return the hierarchical location relative to the root (thus not 
starting with /) made up of all ancestor names including the fragments own name 
devided by /
+         */
+        public String getPath() {
+            return path;
+        }
+        
+        @Override
+        public String getViewName() {
+            return viewName;
+        }
+
+        @Override
+        public String getName() {
+            return name; 
+        }
+
+        @Override
+        public String getDescription() {
+            return description;
+        }
+
+        @Override
+        public String getController() {
+            return controller;
+        }
+
+        @Override
+        public String getExtends() {
+            return extendz;
+        }
+
+        @Override
+        public boolean isAbstract() {
+            return abstrakt;
+        }
 
+        @Override
+        public List<PageFragment> getChildren() {
+            if (children == null) {
+                return Collections.EMPTY_LIST;
+            }
+            return new ArrayList<PageFragment>(children.values());
+        }
+    }
 }

Modified: 
rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/mvc/config/enhancers/SnsFragmentsRemoverEnhancer.java
URL: 
http://svn.apache.org/viewvc/rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/mvc/config/enhancers/SnsFragmentsRemoverEnhancer.java?rev=1383818&r1=1383817&r2=1383818&view=diff
==============================================================================
--- 
rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/mvc/config/enhancers/SnsFragmentsRemoverEnhancer.java
 (original)
+++ 
rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/mvc/config/enhancers/SnsFragmentsRemoverEnhancer.java
 Wed Sep 12 07:36:40 2012
@@ -34,8 +34,8 @@ public class SnsFragmentsRemoverEnhancer
 
     @Override
     public PagesConfig enhance(final PagesConfig pagesConfig) {
-        for (PageFragment pageFragment : pagesConfig.getPages().values()) {
-            traverseAndRemoveSNSIfEncountered(pageFragment);
+        for (PageFragment page : pagesConfig.getPages().values()) {
+            traverseAndRemoveSNSIfEncountered(page);
         }
         return pagesConfig;
     }

Modified: 
rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/mvc/config/xml/XmlPageFragment.java
URL: 
http://svn.apache.org/viewvc/rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/mvc/config/xml/XmlPageFragment.java?rev=1383818&r1=1383817&r2=1383818&view=diff
==============================================================================
--- 
rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/mvc/config/xml/XmlPageFragment.java
 (original)
+++ 
rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/mvc/config/xml/XmlPageFragment.java
 Wed Sep 12 07:36:40 2012
@@ -25,13 +25,14 @@ import javax.xml.bind.annotation.XmlAttr
 import javax.xml.bind.annotation.XmlElementRef;
 import javax.xml.bind.annotation.XmlRootElement;
 
+import org.apache.rave.portal.web.mvc.config.ExtendablePageFragment;
 import org.apache.rave.portal.web.mvc.config.PageFragment;
 
 /**
  * @version "$Id$"
  */
 @XmlRootElement(name = "pageFragment")
-public class XmlPageFragment implements PageFragment {
+public class XmlPageFragment implements ExtendablePageFragment {
 
     private String name;
     private String description;

Modified: 
rave/sandbox/content-services/rave-web-hmvc/src/test/java/org/apache/rave/portal/web/mvc/config/EnhancedPagesConfigManagerTest.java
URL: 
http://svn.apache.org/viewvc/rave/sandbox/content-services/rave-web-hmvc/src/test/java/org/apache/rave/portal/web/mvc/config/EnhancedPagesConfigManagerTest.java?rev=1383818&r1=1383817&r2=1383818&view=diff
==============================================================================
--- 
rave/sandbox/content-services/rave-web-hmvc/src/test/java/org/apache/rave/portal/web/mvc/config/EnhancedPagesConfigManagerTest.java
 (original)
+++ 
rave/sandbox/content-services/rave-web-hmvc/src/test/java/org/apache/rave/portal/web/mvc/config/EnhancedPagesConfigManagerTest.java
 Wed Sep 12 07:36:40 2012
@@ -29,7 +29,10 @@ import org.springframework.test.context.
 import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
 
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
 
 
 @RunWith(SpringJUnit4ClassRunner.class)
@@ -46,12 +49,12 @@ public class EnhancedPagesConfigManagerT
 
         assertEquals(1, pages.size());
 
-        final PageFragment pageDefinition = pages.get("top");
-        assertEquals("top", pageDefinition.getName());
-        assertNull(pageDefinition.getExtends());
-        assertNull(pageDefinition.getViewName());
-        assertEquals("org.apache.rave.unittest.NonExistingController", 
pageDefinition.getController());
-        assertEquals(3, pageDefinition.getChildren().size());
+        final PageFragment pageFragment= pages.get("top");
+        assertEquals("top", pageFragment.getName());
+        assertNull(((ExtendablePageFragment) pageFragment).getExtends());
+        assertNull(pageFragment.getViewName());
+        assertEquals("org.apache.rave.unittest.NonExistingController", 
pageFragment.getController());
+        assertEquals(3, pageFragment.getChildren().size());
     }
 
     @Test
@@ -72,15 +75,60 @@ public class EnhancedPagesConfigManagerT
         assertEquals(1, pageDefinition.getChildren().size());
         assertEquals("sub", pageDefinition.getChildren().get(0).getName());
 
+    }
+
+
+    @Test
+    public void abstractRemovingEnhancedPageRoutesManager() throws Exception {
+
+        EnhancedPagesConfigManager abstractRemovingEnhancedPagesConfigManager 
= 
(EnhancedPagesConfigManager)applicationContext.getBean("abstractPagesConfigManager");
+
+        final Map<String,PageFragment> pages = 
abstractRemovingEnhancedPagesConfigManager.getConfig().getPages();
+        /* although four root page fragments are present in 
abstractPageDefinitions.xml, only 2 of them should be
+         * part of the enhanced config pages because:
+         * 1) standard page is abstract
+         * 2) agenda page contains a descendant fragment that is abstract
+         */
+
+        assertEquals(2, pages.size());
+        assertNull(pages.get("standard"));
+        assertNull(pages.get("agenda"));
+        assertNotNull(pages.get("home"));
+        assertNotNull(pages.get("news"));
 
     }
 
 
+
     @Test
-    public void singlePageExtensionPageRoutesManager() throws Exception {
-        EnhancedPagesConfigManager enhancedPagesConfigManager = 
(EnhancedPagesConfigManager)applicationContext.getBean("singlePageExtensionEnhancedPagesConfigManager");
+    public void simplePageExtensionPageRoutesManager() throws Exception {
+        EnhancedPagesConfigManager enhancedPagesConfigManager = 
(EnhancedPagesConfigManager)applicationContext.getBean("simplePageExtensionEnhancedPagesConfigManager");
         final Map<String,PageFragment> pageDefinitions = 
enhancedPagesConfigManager.getConfig().getPages();
-        assertEquals(4, pageDefinitions.size());
+        assertEquals(2, pageDefinitions.size());
+
+
+        final Map<String,PageFragment> pages = 
enhancedPagesConfigManager.getConfig().getPages();
+        // home extends from standard and thus should inherit from standard 
and merge from standard
+        final PageFragment standard = pages.get("standard");
+        assertEquals(3, standard.getChildren().size());
+
+        assertEquals("sub1",standard.getChildren().get(0).getName());
+        assertEquals("sub2",standard.getChildren().get(1).getName());
+        assertEquals("sub3",standard.getChildren().get(2).getName());
+
+        final PageFragment home = pages.get("home");
+        // home has three children inherited from 'standard'
+        assertEquals(3, home.getChildren().size());
+
+        assertEquals("sub1",home.getChildren().get(0).getName());
+        assertEquals("sub2",home.getChildren().get(1).getName());
+        assertEquals("sub3",home.getChildren().get(2).getName());
+
+        // the inheritance is a DEEP COPY, not a shallow, hence, instances 
should be different
+
+        assertFalse(home.getChildren().get(0) == 
standard.getChildren().get(0));
+        assertFalse(home.getChildren().get(1) == 
standard.getChildren().get(1));
+        assertFalse(home.getChildren().get(2) == 
standard.getChildren().get(2));
     }
 
 

Modified: 
rave/sandbox/content-services/rave-web-hmvc/src/test/java/org/apache/rave/portal/web/mvc/config/xml/JaxbMappingsTest.java
URL: 
http://svn.apache.org/viewvc/rave/sandbox/content-services/rave-web-hmvc/src/test/java/org/apache/rave/portal/web/mvc/config/xml/JaxbMappingsTest.java?rev=1383818&r1=1383817&r2=1383818&view=diff
==============================================================================
--- 
rave/sandbox/content-services/rave-web-hmvc/src/test/java/org/apache/rave/portal/web/mvc/config/xml/JaxbMappingsTest.java
 (original)
+++ 
rave/sandbox/content-services/rave-web-hmvc/src/test/java/org/apache/rave/portal/web/mvc/config/xml/JaxbMappingsTest.java
 Wed Sep 12 07:36:40 2012
@@ -25,6 +25,7 @@ import javax.xml.bind.JAXBException;
 import javax.xml.bind.Unmarshaller;
 
 import org.apache.commons.io.IOUtils;
+import org.apache.rave.portal.web.mvc.config.ExtendablePageFragment;
 import org.apache.rave.portal.web.mvc.config.InvalidConfigurationException;
 import org.apache.rave.portal.web.mvc.config.PageFragment;
 import org.junit.Test;
@@ -51,7 +52,7 @@ public class JaxbMappingsTest {
 
             final PageFragment pageFragment = 
xmlPageDefinitions.getPageFragments().get(0);
             assertEquals("top", pageFragment.getName());
-            assertNull(pageFragment.getExtends());
+            assertNull(((ExtendablePageFragment)pageFragment).getExtends());
             assertNull(pageFragment.getViewName());
             assertEquals("org.apache.rave.unittest.NonExistingController", 
pageFragment.getController());
             assertEquals(3, pageFragment.getChildren().size());
@@ -64,7 +65,7 @@ public class JaxbMappingsTest {
                 final PageFragment sub1 = pageFragment.getChildren().get(0);
                 assertEquals("sub1-nocontroller", sub1.getName());
                 assertNull(sub1.getController());
-                assertNull(sub1.getExtends());
+                assertNull(((ExtendablePageFragment)sub1).getExtends());
                 assertNull(sub1.getViewName());
                 assertNull(sub1.getChildren());
             }
@@ -79,14 +80,14 @@ public class JaxbMappingsTest {
                 final PageFragment sub2 = pageFragment.getChildren().get(1);
                 assertEquals("sub2-emptycontrollor", sub2.getName());
                 assertEquals("",sub2.getController());
-                assertNull(sub2.getExtends());
+                assertNull(((ExtendablePageFragment)sub2).getExtends());
                 assertNull(sub2.getViewName());
                 assertEquals( 1, sub2.getChildren().size());
 
                 final PageFragment sub2sub1 = sub2.getChildren().get(0);
                 assertEquals("sub2sub1-withcontroller", sub2sub1.getName());
                 
assertEquals("org.apache.rave.unittest.NonExistingController",sub2sub1.getController());
-                assertNull(sub2sub1.getExtends());
+                assertNull(((ExtendablePageFragment)sub2sub1).getExtends());
                 assertNull(sub2sub1.getViewName());
                 assertNull(sub2sub1.getChildren());assertEquals("default", 
xmlPageDefinitions.getName());
             }
@@ -101,14 +102,14 @@ public class JaxbMappingsTest {
                 final PageFragment sub3 = pageFragment.getChildren().get(2);
                 assertEquals("sub3-withcontroller-withview", sub3.getName());
                 
assertEquals("org.apache.rave.unittest.NonExistingController",sub3.getController());
-                assertNull(sub3.getExtends());
+                assertNull(((ExtendablePageFragment)sub3).getExtends());
                 assertEquals("pages/test", sub3.getViewName());
                 assertEquals( 1, sub3.getChildren().size());
 
                 final PageFragment sub3sub1 = sub3.getChildren().get(0);
                 assertEquals("sub3sub1-withextend", sub3sub1.getName());
                 
assertEquals("org.apache.rave.unittest.NonExistingController",sub3sub1.getController());
-                assertEquals("some/fragment", sub3sub1.getExtends());
+                assertEquals("some/fragment", 
((ExtendablePageFragment)sub3sub1).getExtends());
                 assertNull(sub3sub1.getViewName());
                 assertNull(sub3sub1.getChildren());
             }
@@ -127,7 +128,7 @@ public class JaxbMappingsTest {
         {
             final PageFragment pageFragment = 
xmlPageDefinitions.getPageFragments().get(0);
             assertEquals("root-one", pageFragment.getName());
-            assertNull(pageFragment.getExtends());
+            assertNull(((ExtendablePageFragment)pageFragment).getExtends());
             assertNull(pageFragment.getViewName());
             assertEquals("org.apache.rave.unittest.NonExistingController", 
pageFragment.getController());
             assertEquals(1, pageFragment.getChildren().size());
@@ -136,7 +137,7 @@ public class JaxbMappingsTest {
         {
             final PageFragment pageFragment = 
xmlPageDefinitions.getPageFragments().get(1);
             assertEquals("root-two", pageFragment.getName());
-            assertNull(pageFragment.getExtends());
+            assertNull(((ExtendablePageFragment)pageFragment).getExtends());
             assertNull(pageFragment.getViewName());
             assertEquals("org.apache.rave.unittest.NonExistingController", 
pageFragment.getController());
             assertEquals(1, pageFragment.getChildren().size());

Modified: 
rave/sandbox/content-services/rave-web-hmvc/src/test/resources/config/enhanced-pages-config-manager-test.xml
URL: 
http://svn.apache.org/viewvc/rave/sandbox/content-services/rave-web-hmvc/src/test/resources/config/enhanced-pages-config-manager-test.xml?rev=1383818&r1=1383817&r2=1383818&view=diff
==============================================================================
--- 
rave/sandbox/content-services/rave-web-hmvc/src/test/resources/config/enhanced-pages-config-manager-test.xml
 (original)
+++ 
rave/sandbox/content-services/rave-web-hmvc/src/test/resources/config/enhanced-pages-config-manager-test.xml
 Wed Sep 12 07:36:40 2012
@@ -49,52 +49,22 @@
     <property name="enhancers" ref="pageEnhancers"/>
   </bean>
 
-
-  <bean id="singlePageExtensionEnhancedPagesConfigManager" 
class="org.apache.rave.portal.web.mvc.config.EnhancedPagesConfigManager">
-    <constructor-arg>
-      <bean 
class="org.apache.rave.portal.web.mvc.config.xml.XmlPagesConfigManager">
-        <property name="routesPath" value="classpath:routes.xml"/>
-        <property name="pageDefinitionsPath" 
value="classpath:config/testenhancingmappings/singlePageExtensionPageDefinitions.xml"/>
-      </bean>
-    </constructor-arg>
-    <property name="enhancers" ref="pageEnhancers"/>
-  </bean>
-
-  <bean id="hierarchicalMultiplePageExtensionEnhancedPagesConfigManager" 
class="org.apache.rave.portal.web.mvc.config.EnhancedPagesConfigManager">
-    <constructor-arg>
-      <bean 
class="org.apache.rave.portal.web.mvc.config.xml.XmlPagesConfigManager">
-        <property name="routesPath" value="classpath:routes.xml"/>
-        <property name="pageDefinitionsPath" 
value="classpath:config/hierarchicalMultiplePageExtension.xml"/>
-      </bean>
-    </constructor-arg>
-    <property name="enhancers" ref="pageEnhancers"/>
-  </bean>
-
-  <bean id="complexExtensionsEnhancedPagesConfigManager" 
class="org.apache.rave.portal.web.mvc.config.EnhancedPagesConfigManager">
+  <bean id="abstractPagesConfigManager" 
class="org.apache.rave.portal.web.mvc.config.EnhancedPagesConfigManager">
     <constructor-arg>
       <bean 
class="org.apache.rave.portal.web.mvc.config.xml.XmlPagesConfigManager">
         <property name="routesPath" value="classpath:routes.xml"/>
-        <property name="pageDefinitionsPath" 
value="classpath:config/complexExtensionsPageRoutesManager.xml"/>
+        <property name="pageDefinitionsPath" 
value="classpath:config/testenhancingmappings/abstractPageDefinitions.xml"/>
       </bean>
     </constructor-arg>
     <property name="enhancers" ref="pageEnhancers"/>
   </bean>
 
-  <bean id="recursiveExtensionsEnhancedPagesConfigManager" 
class="org.apache.rave.portal.web.mvc.config.EnhancedPagesConfigManager">
-    <constructor-arg>
-      <bean 
class="org.apache.rave.portal.web.mvc.config.xml.XmlPagesConfigManager">
-        <property name="routesPath" value="classpath:routes.xml"/>
-        <property name="pageDefinitionsPath" 
value="classpath:config/recursiveExtensionsPageRoutesManager.xml"/>
-      </bean>
-    </constructor-arg>
-    <property name="enhancers" ref="pageEnhancers"/>
-  </bean>
 
-  <bean id="pageFragmentExtensionsEnhancedPagesConfigManager" 
class="org.apache.rave.portal.web.mvc.config.EnhancedPagesConfigManager">
+  <bean id="simplePageExtensionEnhancedPagesConfigManager" 
class="org.apache.rave.portal.web.mvc.config.EnhancedPagesConfigManager">
     <constructor-arg>
       <bean 
class="org.apache.rave.portal.web.mvc.config.xml.XmlPagesConfigManager">
         <property name="routesPath" value="classpath:routes.xml"/>
-        <property name="pageDefinitionsPath" 
value="classpath:config/pageFragmentExtensionsPageRoutesManager.xml"/>
+        <property name="pageDefinitionsPath" 
value="classpath:config/testenhancingmappings/simplePageExtensionPageDefinitions.xml"/>
       </bean>
     </constructor-arg>
     <property name="enhancers" ref="pageEnhancers"/>

Modified: 
rave/sandbox/content-services/rave-web-hmvc/src/test/resources/config/testenhancingmappings/noExtensionsPageDefinitions.xml
URL: 
http://svn.apache.org/viewvc/rave/sandbox/content-services/rave-web-hmvc/src/test/resources/config/testenhancingmappings/noExtensionsPageDefinitions.xml?rev=1383818&r1=1383817&r2=1383818&view=diff
==============================================================================
--- 
rave/sandbox/content-services/rave-web-hmvc/src/test/resources/config/testenhancingmappings/noExtensionsPageDefinitions.xml
 (original)
+++ 
rave/sandbox/content-services/rave-web-hmvc/src/test/resources/config/testenhancingmappings/noExtensionsPageDefinitions.xml
 Wed Sep 12 07:36:40 2012
@@ -20,12 +20,12 @@
 <pageDefinitions name="default">
   <pageFragment name="top" description="Page that is being extended by other 
pages"
                    controller="org.apache.rave.unittest.NonExistingController">
-    <pageFragment name="sub1-nocontroller"/>
-    <pageFragment name="sub2-emptycontrollor" controller="">
-      <pageFragment name="sub2sub1-withcontroller" 
controller="org.apache.rave.unittest.NonExistingController"/>
+    <pageFragment name="sub1"/>
+    <pageFragment name="sub2" controller="">
+      <pageFragment name="sub2sub1" 
controller="org.apache.rave.unittest.NonExistingController"/>
     </pageFragment>
-    <pageFragment name="sub3-withcontroller-withview" viewName="pages/test" 
controller="org.apache.rave.unittest.NonExistingController">
-      <pageFragment name="sub3sub1-withextend" extends="some/fragment" 
controller="org.apache.rave.unittest.NonExistingController"/>
+    <pageFragment name="sub3" viewName="pages/test" 
controller="org.apache.rave.unittest.NonExistingController">
+      <pageFragment name="sub3sub1" 
controller="org.apache.rave.unittest.NonExistingController"/>
     </pageFragment>
   </pageFragment>
 

Copied: 
rave/sandbox/content-services/rave-web-hmvc/src/test/resources/config/testenhancingmappings/simplePageExtensionPageDefinitions.xml
 (from r1383436, 
rave/sandbox/content-services/rave-web-hmvc/src/test/resources/config/testenhancingmappings/singlePageExtensionPageDefinitions.xml)
URL: 
http://svn.apache.org/viewvc/rave/sandbox/content-services/rave-web-hmvc/src/test/resources/config/testenhancingmappings/simplePageExtensionPageDefinitions.xml?p2=rave/sandbox/content-services/rave-web-hmvc/src/test/resources/config/testenhancingmappings/simplePageExtensionPageDefinitions.xml&p1=rave/sandbox/content-services/rave-web-hmvc/src/test/resources/config/testenhancingmappings/singlePageExtensionPageDefinitions.xml&r1=1383436&r2=1383818&rev=1383818&view=diff
==============================================================================
--- 
rave/sandbox/content-services/rave-web-hmvc/src/test/resources/config/testenhancingmappings/singlePageExtensionPageDefinitions.xml
 (original)
+++ 
rave/sandbox/content-services/rave-web-hmvc/src/test/resources/config/testenhancingmappings/simplePageExtensionPageDefinitions.xml
 Wed Sep 12 07:36:40 2012
@@ -20,32 +20,19 @@
 <pageDefinitions name="default">
   <pageFragment name="standard" description="Page that is being extended by 
other pages"
                   controller="org.apache.rave.unittest.NonExistingController">
-    <pageFragment name="sub1-nocontroller"/>
-    <pageFragment name="sub2-emptycontrollor" controller="">
-      <pageFragment name="sub2sub1-withcontroller" 
controller="org.apache.rave.unittest.NonExistingController"/>
+    <pageFragment name="sub1"/>
+    <pageFragment name="sub2" controller="">
+      <pageFragment name="sub2sub1" 
controller="org.apache.rave.unittest.NonExistingController"/>
     </pageFragment>
-    <pageFragment name="sub3-withcontroller-withview" viewName="pages/test" 
controller="org.apache.rave.unittest.NonExistingController">
-      <pageFragment name="sub3sub1-withextend" extends="some/fragment" 
controller="org.apache.rave.unittest.NonExistingController"/>
+    <pageFragment name="sub3" viewName="pages/test" 
controller="org.apache.rave.unittest.NonExistingController">
+      <pageFragment name="sub3sub1" extends="some/fragment" 
controller="org.apache.rave.unittest.NonExistingController"/>
     </pageFragment>
   </pageFragment>
 
 
-  <pageFragment name="home" extends="top" description="Page that is being 
extended by other pages"
+  <pageFragment name="home" extends="standard" description="Page that is being 
extended by other pages"
                   controller="org.apache.rave.unittest.NonExistingController">
   </pageFragment>
 
 
-  <pageFragment name="agenda" extends="top" description="Page that is being 
extended by other pages"
-                  controller="org.apache.rave.unittest.NonExistingController">
-    <pageFragment name="sub4-nocontroller"/>
-  </pageFragment>
-
-
-  <pageFragment name="news" extends="top" description="Page that is being 
extended by other pages"
-                  controller="org.apache.rave.unittest.NonExistingController">
-    <pageFragment name="sub2-emptycontrollor" 
controller="org.apache.rave.unittest.NonExistingNewsController">
-      <pageFragment name="news" />
-    </pageFragment>
-  </pageFragment>
-
 </pageDefinitions>
\ No newline at end of file

Modified: 
rave/sandbox/content-services/rave-web-jcr/src/main/java/org/apache/rave/portal/web/mvc/config/jcr/JcrPageFragment.java
URL: 
http://svn.apache.org/viewvc/rave/sandbox/content-services/rave-web-jcr/src/main/java/org/apache/rave/portal/web/mvc/config/jcr/JcrPageFragment.java?rev=1383818&r1=1383817&r2=1383818&view=diff
==============================================================================
--- 
rave/sandbox/content-services/rave-web-jcr/src/main/java/org/apache/rave/portal/web/mvc/config/jcr/JcrPageFragment.java
 (original)
+++ 
rave/sandbox/content-services/rave-web-jcr/src/main/java/org/apache/rave/portal/web/mvc/config/jcr/JcrPageFragment.java
 Wed Sep 12 07:36:40 2012
@@ -26,6 +26,7 @@ import org.apache.jackrabbit.ocm.manager
 import org.apache.jackrabbit.ocm.mapper.impl.annotation.Collection;
 import org.apache.jackrabbit.ocm.mapper.impl.annotation.Field;
 import org.apache.jackrabbit.ocm.mapper.impl.annotation.Node;
+import org.apache.rave.portal.web.mvc.config.ExtendablePageFragment;
 import org.apache.rave.portal.web.mvc.config.PageFragment;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -34,7 +35,7 @@ import org.slf4j.LoggerFactory;
  * @version "$Id$"
  */
 @Node(discriminator = false, jcrType = "raveconfig:pagefragment", 
jcrMixinTypes = "mix:referenceable")
-public class JcrPageFragment implements PageFragment {
+public class JcrPageFragment implements ExtendablePageFragment {
 
     private static Logger log = LoggerFactory.getLogger(JcrPageFragment.class);
 


Reply via email to