EXTCDI-277 custom path with nested view-config
git-svn-id: https://svn.apache.org/repos/asf/myfaces/extensions/cdi/trunk@1303556 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/config/view/DefaultViewConfigExtractor.java b/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/config/view/DefaultViewConfigExtractor.java
index 9264fde..6130206 100644
--- a/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/config/view/DefaultViewConfigExtractor.java
+++ b/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/config/view/DefaultViewConfigExtractor.java
@@ -194,8 +194,7 @@
scannedViewConfig
.setSimpleClassNameToPathMapping(currentClass.getSimpleName(), currentBasePath);
}
-
- if (rootPath.equals(scannedViewConfig.getBasePath()))
+ else if (rootPath.equals(scannedViewConfig.getBasePath()))
{
scannedViewConfig.setBasePath(currentBasePath);
}
diff --git a/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/config/view/ExtractedViewConfigDefinitionEntry.java b/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/config/view/ExtractedViewConfigDefinitionEntry.java
index 881f59a..ef3a0c4 100644
--- a/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/config/view/ExtractedViewConfigDefinitionEntry.java
+++ b/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/config/view/ExtractedViewConfigDefinitionEntry.java
@@ -238,23 +238,7 @@
StringBuilder viewId = new StringBuilder(this.basePath);
if(this.pageName.equals(""))
{
- String className = this.viewDefinitionClass.getName();
-
- //MyClass$MyInnerClass will be converted to /MyClass/MyInnerClass
- if(className.contains("$") && ".".equals(this.basePath))
- {
- this.basePath = "";
- className = className.substring(className.lastIndexOf('.') + 1);
- className = convertToPathSyntax(className, this.simpleClassNameToPathMapping);
- }
- else if(className.contains("$"))
- {
- className = className.substring(className.lastIndexOf('$') + 1);
- }
- else
- {
- className = className.substring(className.lastIndexOf('.') + 1);
- }
+ String className = getNestedConfigAsPath();
className = createPageName(className);
viewId.append(className);
}
@@ -263,14 +247,27 @@
{
String className = this.viewDefinitionClass.getName();
- this.basePath = "";
- className = className.substring(className.lastIndexOf('.') + 1);
- className = convertToPathSyntax(className, this.simpleClassNameToPathMapping);
- className = createPageName(className);
- className = className.substring(0, className.lastIndexOf('/') + 1);
+ //custom base-name for a config (overrides inherited base-path)
+ if ("/".endsWith(this.basePath) && this.simpleClassNameToPathMapping.size() == 1)
+ {
+ className = "/" + this.simpleClassNameToPathMapping.get(this.viewDefinitionClass.getSimpleName()) + "/";
+ }
+ else
+ {
+ className = className.substring(className.lastIndexOf('.') + 1);
+ className = convertToPathSyntax(className, this.simpleClassNameToPathMapping);
+ className = createPageName(className);
+ className = className.substring(0, className.lastIndexOf('/') + 1);
+ }
className += this.pageName;
viewId.append(className);
}
+ //only a custom name for a nested config
+ else if(!this.pageName.equals("") && this.viewDefinitionClass.getName().contains("$"))
+ {
+ String className = getNestedConfigAsPath();
+ viewId.append(className.substring(0, className.lastIndexOf("/") + 1)).append(this.pageName);
+ }
else
{
viewId.append(this.pageName);
@@ -295,6 +292,27 @@
return result;
}
+ private String getNestedConfigAsPath()
+ {
+ String className = this.viewDefinitionClass.getName();
+
+ //MyClass$MyInnerClass will be converted to /MyClass/MyInnerClass
+ if(className.contains("$") && ".".equals(this.basePath))
+ {
+ className = className.substring(className.lastIndexOf('.') + 1);
+ className = convertToPathSyntax(className, this.simpleClassNameToPathMapping);
+ }
+ else if(className.contains("$"))
+ {
+ className = className.substring(className.lastIndexOf('$') + 1);
+ }
+ else
+ {
+ className = className.substring(className.lastIndexOf('.') + 1);
+ }
+ return className;
+ }
+
protected String createPageName(String className)
{
className = className.substring(0, 1).toLowerCase() + className.substring(1);
diff --git a/jee-modules/jsf-module/impl/src/test/java/org/apache/myfaces/extensions/cdi/jsf/test/impl/config/view/SimpleNestedViewConfig.java b/jee-modules/jsf-module/impl/src/test/java/org/apache/myfaces/extensions/cdi/jsf/test/impl/config/view/SimpleNestedViewConfig.java
index 6ab890e..832b37e 100644
--- a/jee-modules/jsf-module/impl/src/test/java/org/apache/myfaces/extensions/cdi/jsf/test/impl/config/view/SimpleNestedViewConfig.java
+++ b/jee-modules/jsf-module/impl/src/test/java/org/apache/myfaces/extensions/cdi/jsf/test/impl/config/view/SimpleNestedViewConfig.java
@@ -35,4 +35,31 @@
public class Page2 extends SimpleNestedViewConfig
{
}
+
+ public class SubFolder extends SimpleNestedViewConfig
+ {
+ @Page(name = "customPage3")
+ public class Page3 extends SimpleNestedViewConfig
+ {
+ }
+
+ @Page(basePath = "my", name = "customPage4")
+ public class Page4 extends SimpleNestedViewConfig
+ {
+ }
+ }
+
+ @Page(basePath = "subFolder") //overridden
+ public class SubFolder2 extends SimpleNestedViewConfig
+ {
+ @Page(basePath = "/", name = "customPage5")
+ public class Page5 extends SimpleNestedViewConfig
+ {
+ }
+
+ @Page(basePath = "my", name = "customPage6")
+ public class Page6 extends SimpleNestedViewConfig
+ {
+ }
+ }
}
\ No newline at end of file
diff --git a/jee-modules/jsf-module/impl/src/test/java/org/apache/myfaces/extensions/cdi/jsf/test/impl/config/view/ViewConfigTest.java b/jee-modules/jsf-module/impl/src/test/java/org/apache/myfaces/extensions/cdi/jsf/test/impl/config/view/ViewConfigTest.java
index 7c91303..f4eab89 100644
--- a/jee-modules/jsf-module/impl/src/test/java/org/apache/myfaces/extensions/cdi/jsf/test/impl/config/view/ViewConfigTest.java
+++ b/jee-modules/jsf-module/impl/src/test/java/org/apache/myfaces/extensions/cdi/jsf/test/impl/config/view/ViewConfigTest.java
@@ -77,10 +77,26 @@
viewConfigExtension.addPageDefinition(SimpleNestedViewConfig.Page1.class);
viewConfigExtension.addPageDefinition(SimpleNestedViewConfig.Page2.class);
+ viewConfigExtension.addPageDefinition(SimpleNestedViewConfig.SubFolder.Page3.class);
+ viewConfigExtension.addPageDefinition(SimpleNestedViewConfig.SubFolder.Page4.class);
+
+ viewConfigExtension.addPageDefinition(SimpleNestedViewConfig.SubFolder2.Page5.class);
+ viewConfigExtension.addPageDefinition(SimpleNestedViewConfig.SubFolder2.Page6.class);
+
assertEquals(ViewConfigCache.getViewConfigDescriptor(SimpleNestedViewConfig.Page1.class).getViewId(),
"/simpleNestedViewConfig/page1.xhtml");
assertEquals(ViewConfigCache.getViewConfigDescriptor(SimpleNestedViewConfig.Page2.class).getViewId(),
"/simpleNestedViewConfig/page2.xhtml");
+
+ assertEquals(ViewConfigCache.getViewConfigDescriptor(SimpleNestedViewConfig.SubFolder.Page3.class).getViewId(),
+ "/simpleNestedViewConfig/subFolder/customPage3.xhtml");
+ assertEquals(ViewConfigCache.getViewConfigDescriptor(SimpleNestedViewConfig.SubFolder.Page4.class).getViewId(),
+ "/my/customPage4.xhtml");
+
+ assertEquals(ViewConfigCache.getViewConfigDescriptor(SimpleNestedViewConfig.SubFolder2.Page5.class).getViewId(),
+ "/customPage5.xhtml");
+ assertEquals(ViewConfigCache.getViewConfigDescriptor(SimpleNestedViewConfig.SubFolder2.Page6.class).getViewId(),
+ "/my/customPage6.xhtml");
}
@Test