Author: ard
Date: Wed Sep 12 10:52:25 2012
New Revision: 1383878
URL: http://svn.apache.org/viewvc?rev=1383878&view=rev
Log:
RAVE-697 Merging features for extends of pageFragments
Added:
rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/mvc/config/PagesConfigEnhancer.java
- copied, changed from r1383864,
rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/mvc/config/enhancers/PagesConfigEnhancer.java
rave/sandbox/content-services/rave-web-hmvc/src/test/resources/config/testenhancingmappings/deeperFragmentExtensionPageDefinitions.xml
rave/sandbox/content-services/rave-web-hmvc/src/test/resources/config/testenhancingmappings/mergingPageExtensionPageDefinitions.xml
rave/sandbox/content-services/rave-web-hmvc/src/test/resources/config/testenhancingmappings/nonExistingExtensionPageDefinitions.xml
Removed:
rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/mvc/config/enhancers/PagesConfigEnhancer.java
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/enhancers/ExtendsEnhancer.java
rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/mvc/config/enhancers/FragmentsThatAreAbstractRemoverEnhancer.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/test/java/org/apache/rave/portal/web/mvc/config/EnhancedPagesConfigManagerTest.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/simplePageExtensionPageDefinitions.xml
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=1383878&r1=1383877&r2=1383878&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 10:52:25 2012
@@ -18,13 +18,8 @@
*/
package org.apache.rave.portal.web.mvc.config;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.HashSet;
import java.util.List;
-import java.util.Set;
-import org.apache.rave.portal.web.mvc.config.enhancers.PagesConfigEnhancer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
Copied:
rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/mvc/config/PagesConfigEnhancer.java
(from r1383864,
rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/mvc/config/enhancers/PagesConfigEnhancer.java)
URL:
http://svn.apache.org/viewvc/rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/mvc/config/PagesConfigEnhancer.java?p2=rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/mvc/config/PagesConfigEnhancer.java&p1=rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/mvc/config/enhancers/PagesConfigEnhancer.java&r1=1383864&r2=1383878&rev=1383878&view=diff
==============================================================================
---
rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/mvc/config/enhancers/PagesConfigEnhancer.java
(original)
+++
rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/mvc/config/PagesConfigEnhancer.java
Wed Sep 12 10:52:25 2012
@@ -1,4 +1,4 @@
-package org.apache.rave.portal.web.mvc.config.enhancers;
+package org.apache.rave.portal.web.mvc.config;
import org.apache.rave.portal.web.mvc.config.PagesConfig;
@@ -6,7 +6,8 @@ public interface PagesConfigEnhancer {
/**
* @param pagesConfig the <code>pagesConfig</code> to enhance
- * @return the enhanced {@link
org.apache.rave.portal.web.mvc.config.PagesConfig} of the
<code>pagesConfig</code> argument
+ * @return the enhanced {@link PagesConfig} of the
<code>pagesConfig</code> argument. Note that the returned
+ * {@link PagesConfig} can be a different instance than the {@link
PagesConfig} from the argument <code>pagesConfig</code>
*/
PagesConfig enhance(PagesConfig pagesConfig);
}
\ No newline at end of file
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=1383878&r1=1383877&r2=1383878&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 10:52:25 2012
@@ -21,13 +21,17 @@ package org.apache.rave.portal.web.mvc.c
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
+import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
+import java.util.Set;
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.apache.rave.portal.web.mvc.config.PagesConfigEnhancer;
+import org.apache.rave.portal.web.mvc.config.PagesConfigImpl;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -35,37 +39,128 @@ public class ExtendsEnhancer implements
private final static Logger log =
LoggerFactory.getLogger(ExtendsEnhancer.class);
+ private final Map<String, MutablePageFragment>
allCanonicalPageFragmentsByPath = new HashMap<String, MutablePageFragment>();
+ private final Set<String> alreadyResolved = new HashSet<String>();
+
@Override
public PagesConfig enhance(final PagesConfig pagesConfig) {
+ alreadyResolved.clear();
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>();
+ // allCanonicalPageFragmentsByPath contains only page fragments that
are canonical : In other words, only
+ // fragments that are there BEFORE resolving extensions
+ final Map<String, PageFragment> mutablePages = new HashMap<String,
PageFragment>();
for (PageFragment page : pages.values()) {
MutablePageFragment mutablePageFragment = new
MutablePageFragment((ExtendablePageFragment)page, null);
mutablePages.put(mutablePageFragment.getName(),
mutablePageFragment);
- allPageFragmentsByPath.put(mutablePageFragment.getPath(),
mutablePageFragment);
+ allCanonicalPageFragmentsByPath.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);
+ for (PageFragment page : mutablePages.values()) {
+ resolveExtensions((MutablePageFragment)page);
}
- return pagesConfig;
+ return new PagesConfigImpl(pagesConfig.getRoutes(), mutablePages);
}
- private void resolveExtensions(final MutablePageFragment fragment, final
MutablePageFragment parent, final Map<String, MutablePageFragment>
allPageFragmentByPath) {
+ private void resolveExtensions(final MutablePageFragment fragment) {
+ if (alreadyResolved.contains(fragment.getPath())) {
+ return;
+ }
+ alreadyResolved.add(fragment.getPath());
if (fragment.getExtends() != null) {
String extendz = fragment.getExtends();
- MutablePageFragment extendsFrom =
allPageFragmentByPath.get(extendz);
- // if (extendsFrom )
+ fragment.setExtendsProcessed();
+ MutablePageFragment extendsFrom =
allCanonicalPageFragmentsByPath.get(extendz);
+ if (extendsFrom == null) {
+ log.warn("PageFragment '{}' tries to extend non existing
PageFragment at '{}'. Skipping this extend", fragment.getPath(), extendz);
+ } else if (!isValidExtendsFrom(fragment, extendsFrom)) {
+ log.warn("PageFragment '{}' tries to extend itself or one of
its descendants by '{}'. This is not allowed. Skipping this extend",
fragment.getPath(), extendz);
+ } else {
+ merge(fragment, extendsFrom);
+ }
+ }
+ for (MutablePageFragment child : fragment.getChildrenMap().values()) {
+ resolveExtensions(child);
+ }
+ }
+
+ private void merge(final MutablePageFragment fragment, final
MutablePageFragment extendsFrom) {
+ // first now resolve possible extensions that extendsFrom has
+ resolveExtensions(extendsFrom);
+ mergeFields(fragment, extendsFrom);
+ mergeChilds(fragment, extendsFrom);
+ }
+
+ private void mergeChilds(final MutablePageFragment fragment, final
MutablePageFragment extendsFrom) {
+ // first resolve possible extension that extendsFrom children have
+ for (MutablePageFragment child :
extendsFrom.getChildrenMap().values()) {
+ resolveExtensions(child);
+ }
+ // now we resolve possible extension that fragment children already
have
+ for (MutablePageFragment child : fragment.getChildrenMap().values()) {
+ resolveExtensions(child);
+ }
+
+ // now, we still need to do the following:
+ // 1) Merge the fields from extendsFrom children with fragment
children that both have in common (by NAME)
+ // 2) DEEP COPY the children from extendsFrom that fragment does not
have
+
+ // merge the fields of children that are in common
+ for (MutablePageFragment child : fragment.getChildrenMap().values()) {
+ MutablePageFragment extendsFromChild =
extendsFrom.getChild(child.getName());
+ if (extendsFromChild != null) {
+ mergeFields(child, extendsFromChild);
+ }
+ }
+
+ // DEEP COPY the children that extendsFrom has but that fragment does
not have
+ for (MutablePageFragment extendsFromChild :
extendsFrom.getChildrenMap().values()) {
+ MutablePageFragment child =
fragment.getChild(extendsFromChild.getName());
+ if (child == null) {
+ // now add to fragment a DEEP COPY from extendsFromChild
+ MutablePageFragment deepCopyChild = new
MutablePageFragment(extendsFromChild, fragment);
+ alreadyResolved.add(deepCopyChild.getPath());
+ fragment.addChild(deepCopyChild);
+ }
}
}
+ private void mergeFields(final MutablePageFragment fragment, final
MutablePageFragment extendsFrom) {
+ if (fragment.getController() == null) {
+ fragment.setController(extendsFrom.getController());
+ }
+ if (fragment.getDescription() == null) {
+ fragment.setDescription(extendsFrom.getDescription());
+ }
+ if (fragment.getViewName() == null) {
+ fragment.setViewName(extendsFrom.getViewName());
+ }
+ }
+
+ /**
+ * Check whether the <code>extendsFrom</code> is not the same instance or
a descendant of <code>fragment</code>
+ * @param fragment the fragment to extend
+ * @param extendsFrom the fragment to extends from
+ * @return <code>false</code> when the <code>extendsFrom</code> is the
same or a descendant of <code>fragment</code>
+ */
+ private boolean isValidExtendsFrom(final MutablePageFragment fragment,
final MutablePageFragment extendsFrom) {
+ if (extendsFrom == fragment) {
+ return false;
+ }
+ MutablePageFragment parent = extendsFrom.getParent();
+ while (parent != null) {
+ if (parent == fragment) {
+ return false;
+ }
+ parent = parent.getParent();
+ }
+ return true;
+ }
+
-
private class MutablePageFragment implements ExtendablePageFragment {
// the path contains the hierarchical information
@@ -77,6 +172,7 @@ public class ExtendsEnhancer implements
private String extendz;
private boolean abstrakt;
private Map<String, MutablePageFragment> children;
+ private MutablePageFragment parent;
/**
* constructor that creates a deep copy of PageFragments to
MutablePageFragment's
@@ -89,8 +185,9 @@ public class ExtendsEnhancer implements
if (parent != null) {
path = parent.getPath() + "/" + fragment.getName();
} else {
- path = fragment.getName();
+ path = "/"+fragment.getName();
}
+ this.parent = parent;
this.description = fragment.getDescription();
this.controller = fragment.getController();
this.extendz = fragment.getExtends();
@@ -105,14 +202,6 @@ public class ExtendsEnhancer implements
}
}
- /**
- * 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;
@@ -138,6 +227,11 @@ public class ExtendsEnhancer implements
return extendz;
}
+ // when populated or non existing extends, it can be set to null
+ public void setExtendsProcessed() {
+ extendz = null;
+ }
+
@Override
public boolean isAbstract() {
return abstrakt;
@@ -146,9 +240,59 @@ public class ExtendsEnhancer implements
@Override
public List<PageFragment> getChildren() {
if (children == null) {
- return Collections.EMPTY_LIST;
+ return Collections.emptyList();
}
return new ArrayList<PageFragment>(children.values());
}
+
+ /**
+ * 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;
+ }
+
+ public void setViewName(final String viewName) {
+ this.viewName = viewName;
+ }
+
+ public void setDescription(final String description) {
+ this.description = description;
+ }
+
+ public void setController(final String controller) {
+ this.controller = controller;
+ }
+
+ public MutablePageFragment getParent() {
+ return parent;
+ }
+
+ public void setParent(final MutablePageFragment parent) {
+ this.parent = parent;
+ }
+
+ public Map<String, MutablePageFragment> getChildrenMap() {
+ if (children == null) {
+ return Collections.emptyMap();
+ }
+ return children;
+ }
+
+ public MutablePageFragment getChild(final String name) {
+ if (children == null) {
+ return null;
+ }
+ return children.get(name);
+ }
+
+ public void addChild(final MutablePageFragment child) {
+ if (children == null) {
+ children = new LinkedHashMap<String, MutablePageFragment>(1);
+ }
+ children.put(child.getName(), child);
+ }
}
}
Modified:
rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/mvc/config/enhancers/FragmentsThatAreAbstractRemoverEnhancer.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/FragmentsThatAreAbstractRemoverEnhancer.java?rev=1383878&r1=1383877&r2=1383878&view=diff
==============================================================================
---
rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/mvc/config/enhancers/FragmentsThatAreAbstractRemoverEnhancer.java
(original)
+++
rave/sandbox/content-services/rave-web-hmvc/src/main/java/org/apache/rave/portal/web/mvc/config/enhancers/FragmentsThatAreAbstractRemoverEnhancer.java
Wed Sep 12 10:52:25 2012
@@ -24,6 +24,7 @@ import java.util.Set;
import org.apache.rave.portal.web.mvc.config.PageFragment;
import org.apache.rave.portal.web.mvc.config.PagesConfig;
+import org.apache.rave.portal.web.mvc.config.PagesConfigEnhancer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
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=1383878&r1=1383877&r2=1383878&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 10:52:25 2012
@@ -25,6 +25,7 @@ import java.util.Set;
import org.apache.rave.portal.web.mvc.config.PageFragment;
import org.apache.rave.portal.web.mvc.config.PagesConfig;
+import org.apache.rave.portal.web.mvc.config.PagesConfigEnhancer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
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=1383878&r1=1383877&r2=1383878&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 10:52:25 2012
@@ -103,11 +103,10 @@ public class EnhancedPagesConfigManagerT
@Test
public void simplePageExtensionPageRoutesManager() throws Exception {
EnhancedPagesConfigManager enhancedPagesConfigManager =
(EnhancedPagesConfigManager)applicationContext.getBean("simplePageExtensionEnhancedPagesConfigManager");
- final Map<String,PageFragment> pageDefinitions =
enhancedPagesConfigManager.getConfig().getPages();
- assertEquals(2, pageDefinitions.size());
-
final Map<String,PageFragment> pages =
enhancedPagesConfigManager.getConfig().getPages();
+ assertEquals(2, pages.size());
+
// 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());
@@ -117,20 +116,38 @@ public class EnhancedPagesConfigManagerT
assertEquals("sub3",standard.getChildren().get(2).getName());
final PageFragment home = pages.get("home");
+
+ // home has own description 'home'
+ assertEquals("home", home.getDescription());
+
+ // home has no 'controller' but should be inherited from 'standard'
+ assertEquals("org.apache.rave.unittest.NonExistingController",
home.getController());
+
// home has three children inherited from 'standard'
assertEquals(3, home.getChildren().size());
+ // The order should be maintained as well as the children order of
'standard'
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));
+
+ PageFragment sub2 = home.getChildren().get(1);
+ // sub2 has empty string controller
+ assertEquals("", sub2.getController());
+ assertEquals(1, sub2.getChildren().size());
+ assertEquals("sub2sub1", sub2.getChildren().get(0).getName());
+ PageFragment sub2sub1 = sub2.getChildren().get(0);
+ assertEquals("org.apache.rave.unittest.NonExistingController",
sub2sub1.getController());
+
}
+
}
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=1383878&r1=1383877&r2=1383878&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 10:52:25 2012
@@ -37,6 +37,7 @@
<property name="pageDefinitionsPath"
value="classpath:config/testenhancingmappings/noExtensionsPageDefinitions.xml"/>
</bean>
</constructor-arg>
+ <property name="enhancers" ref="pageEnhancers"/>
</bean>
<bean id="snsRemovingEnhancedPagesConfigManager"
class="org.apache.rave.portal.web.mvc.config.EnhancedPagesConfigManager">
Added:
rave/sandbox/content-services/rave-web-hmvc/src/test/resources/config/testenhancingmappings/deeperFragmentExtensionPageDefinitions.xml
URL:
http://svn.apache.org/viewvc/rave/sandbox/content-services/rave-web-hmvc/src/test/resources/config/testenhancingmappings/deeperFragmentExtensionPageDefinitions.xml?rev=1383878&view=auto
==============================================================================
---
rave/sandbox/content-services/rave-web-hmvc/src/test/resources/config/testenhancingmappings/deeperFragmentExtensionPageDefinitions.xml
(added)
+++
rave/sandbox/content-services/rave-web-hmvc/src/test/resources/config/testenhancingmappings/deeperFragmentExtensionPageDefinitions.xml
Wed Sep 12 10:52:25 2012
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+ -->
+<pageDefinitions name="default">
+ <pageFragment name="standard" description="Page that is being extended by
other pages"
+ 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" 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" description="Page that is being extended by other
pages"
+ controller="org.apache.rave.unittest.NonExistingController">
+ <pageFragment name="sub2" controller="">
+ <pageFragment name="sub2sub1" extends="/standard/sub2/sub2sub1"/>
+ </pageFragment>
+ </pageFragment>
+
+</pageDefinitions>
\ No newline at end of file
Added:
rave/sandbox/content-services/rave-web-hmvc/src/test/resources/config/testenhancingmappings/mergingPageExtensionPageDefinitions.xml
URL:
http://svn.apache.org/viewvc/rave/sandbox/content-services/rave-web-hmvc/src/test/resources/config/testenhancingmappings/mergingPageExtensionPageDefinitions.xml?rev=1383878&view=auto
==============================================================================
---
rave/sandbox/content-services/rave-web-hmvc/src/test/resources/config/testenhancingmappings/mergingPageExtensionPageDefinitions.xml
(added)
+++
rave/sandbox/content-services/rave-web-hmvc/src/test/resources/config/testenhancingmappings/mergingPageExtensionPageDefinitions.xml
Wed Sep 12 10:52:25 2012
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+ -->
+<pageDefinitions name="default">
+ <pageFragment name="standard" description="Page that is being extended by
other pages"
+ 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" 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="/standard" description="Page that is
being extended by other pages"
+ controller="org.apache.rave.unittest.NonExistingController">
+ </pageFragment>
+
+ <pageFragment name="agenda" extends="/standard" >
+ <pageFragment name="sub4"/>
+ </pageFragment>
+
+
+ <pageFragment name="news" extends="/standard" description="newsdescription">
+ <!-- override the controller from 'standard' -->
+ <pageFragment name="sub2"
controller="org.apache.rave.unittest.NonExistingNewsController">
+ <!-- a pageFragment that 'standard' does not have. It should also
inherit 'sub2sub1' -->
+ <pageFragment name="news" />
+ </pageFragment>
+ </pageFragment>
+
+</pageDefinitions>
\ No newline at end of file
Added:
rave/sandbox/content-services/rave-web-hmvc/src/test/resources/config/testenhancingmappings/nonExistingExtensionPageDefinitions.xml
URL:
http://svn.apache.org/viewvc/rave/sandbox/content-services/rave-web-hmvc/src/test/resources/config/testenhancingmappings/nonExistingExtensionPageDefinitions.xml?rev=1383878&view=auto
==============================================================================
---
rave/sandbox/content-services/rave-web-hmvc/src/test/resources/config/testenhancingmappings/nonExistingExtensionPageDefinitions.xml
(added)
+++
rave/sandbox/content-services/rave-web-hmvc/src/test/resources/config/testenhancingmappings/nonExistingExtensionPageDefinitions.xml
Wed Sep 12 10:52:25 2012
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+ -->
+<pageDefinitions name="default">
+ <pageFragment name="standard" description="Page that is being extended by
other pages"
+ 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" 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="/XXX" description="Page that is being
extended by other pages"
+ controller="org.apache.rave.unittest.NonExistingController">
+ </pageFragment>
+
+
+</pageDefinitions>
\ No newline at end of file
Modified:
rave/sandbox/content-services/rave-web-hmvc/src/test/resources/config/testenhancingmappings/simplePageExtensionPageDefinitions.xml
URL:
http://svn.apache.org/viewvc/rave/sandbox/content-services/rave-web-hmvc/src/test/resources/config/testenhancingmappings/simplePageExtensionPageDefinitions.xml?rev=1383878&r1=1383877&r2=1383878&view=diff
==============================================================================
---
rave/sandbox/content-services/rave-web-hmvc/src/test/resources/config/testenhancingmappings/simplePageExtensionPageDefinitions.xml
(original)
+++
rave/sandbox/content-services/rave-web-hmvc/src/test/resources/config/testenhancingmappings/simplePageExtensionPageDefinitions.xml
Wed Sep 12 10:52:25 2012
@@ -18,20 +18,19 @@
under the License.
-->
<pageDefinitions name="default">
- <pageFragment name="standard" description="Page that is being extended by
other pages"
+ <pageFragment name="standard" description="standard"
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" viewName="pages/test"
controller="org.apache.rave.unittest.NonExistingController">
- <pageFragment name="sub3sub1" extends="/some/fragment"
controller="org.apache.rave.unittest.NonExistingController"/>
+ <pageFragment name="sub3sub1"
controller="org.apache.rave.unittest.NonExistingController"/>
</pageFragment>
</pageFragment>
- <pageFragment name="home" extends="/standard" description="Page that is
being extended by other pages"
- controller="org.apache.rave.unittest.NonExistingController">
+ <pageFragment name="home" extends="/standard" description="home">
</pageFragment>