You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@deltaspike.apache.org by gp...@apache.org on 2013/12/05 17:21:15 UTC

git commit: DELTASPIKE-460 @SkipMetaDataMerge

Updated Branches:
  refs/heads/master e1aeb3acb -> 662f458cd


DELTASPIKE-460 @SkipMetaDataMerge


Project: http://git-wip-us.apache.org/repos/asf/deltaspike/repo
Commit: http://git-wip-us.apache.org/repos/asf/deltaspike/commit/662f458c
Tree: http://git-wip-us.apache.org/repos/asf/deltaspike/tree/662f458c
Diff: http://git-wip-us.apache.org/repos/asf/deltaspike/diff/662f458c

Branch: refs/heads/master
Commit: 662f458cd725c771362d60a0b913630cf5252cc7
Parents: e1aeb3a
Author: gpetracek <gp...@apache.org>
Authored: Thu Dec 5 17:12:14 2013 +0100
Committer: gpetracek <gp...@apache.org>
Committed: Thu Dec 5 17:12:14 2013 +0100

----------------------------------------------------------------------
 .../config/view/metadata/SkipMetaDataMerge.java |  37 +++
 .../deltaspike/jsf/api/config/view/Folder.java  |   2 +
 .../deltaspike/jsf/api/config/view/View.java    |   3 +
 .../config/view/DefaultConfigNodeConverter.java |   5 +-
 .../view/navigation/syntax/uc009/Pages.java     |  51 ++++
 .../navigation/syntax/uc009/ViewConfigTest.java | 276 +++++++++++++++++++
 6 files changed, 372 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/deltaspike/blob/662f458c/deltaspike/core/api/src/main/java/org/apache/deltaspike/core/api/config/view/metadata/SkipMetaDataMerge.java
----------------------------------------------------------------------
diff --git a/deltaspike/core/api/src/main/java/org/apache/deltaspike/core/api/config/view/metadata/SkipMetaDataMerge.java b/deltaspike/core/api/src/main/java/org/apache/deltaspike/core/api/config/view/metadata/SkipMetaDataMerge.java
new file mode 100644
index 0000000..acbf094
--- /dev/null
+++ b/deltaspike/core/api/src/main/java/org/apache/deltaspike/core/api/config/view/metadata/SkipMetaDataMerge.java
@@ -0,0 +1,37 @@
+/*
+ * 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.deltaspike.core.api.config.view.metadata;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+@Target( METHOD )
+@Retention(RUNTIME)
+@Documented
+
+/**
+ * In some cases (e.g. @Folder#name) it doesn't make sense to merge that part with inherited information.
+ */
+public @interface SkipMetaDataMerge
+{
+}

http://git-wip-us.apache.org/repos/asf/deltaspike/blob/662f458c/deltaspike/modules/jsf/api/src/main/java/org/apache/deltaspike/jsf/api/config/view/Folder.java
----------------------------------------------------------------------
diff --git a/deltaspike/modules/jsf/api/src/main/java/org/apache/deltaspike/jsf/api/config/view/Folder.java b/deltaspike/modules/jsf/api/src/main/java/org/apache/deltaspike/jsf/api/config/view/Folder.java
index 4edfeae..8cac6c5 100644
--- a/deltaspike/modules/jsf/api/src/main/java/org/apache/deltaspike/jsf/api/config/view/Folder.java
+++ b/deltaspike/modules/jsf/api/src/main/java/org/apache/deltaspike/jsf/api/config/view/Folder.java
@@ -19,6 +19,7 @@
 package org.apache.deltaspike.jsf.api.config.view;
 
 import org.apache.deltaspike.core.api.config.ConfigResolver;
+import org.apache.deltaspike.core.api.config.view.metadata.SkipMetaDataMerge;
 import org.apache.deltaspike.core.api.config.view.metadata.ViewMetaData;
 import org.apache.deltaspike.core.spi.config.view.ConfigPreProcessor;
 import org.apache.deltaspike.core.spi.config.view.ViewConfigNode;
@@ -53,6 +54,7 @@ public @interface Folder
      *
      * @return name of the folder
      */
+    @SkipMetaDataMerge
     String name() default ".";
 
     /**

http://git-wip-us.apache.org/repos/asf/deltaspike/blob/662f458c/deltaspike/modules/jsf/api/src/main/java/org/apache/deltaspike/jsf/api/config/view/View.java
----------------------------------------------------------------------
diff --git a/deltaspike/modules/jsf/api/src/main/java/org/apache/deltaspike/jsf/api/config/view/View.java b/deltaspike/modules/jsf/api/src/main/java/org/apache/deltaspike/jsf/api/config/view/View.java
index 24e3bbe..802ed56 100644
--- a/deltaspike/modules/jsf/api/src/main/java/org/apache/deltaspike/jsf/api/config/view/View.java
+++ b/deltaspike/modules/jsf/api/src/main/java/org/apache/deltaspike/jsf/api/config/view/View.java
@@ -19,6 +19,7 @@
 package org.apache.deltaspike.jsf.api.config.view;
 
 import org.apache.deltaspike.core.api.config.ConfigResolver;
+import org.apache.deltaspike.core.api.config.view.metadata.SkipMetaDataMerge;
 import org.apache.deltaspike.core.api.config.view.metadata.ViewMetaData;
 import org.apache.deltaspike.core.spi.config.view.ConfigPreProcessor;
 import org.apache.deltaspike.core.spi.config.view.ViewConfigNode;
@@ -56,6 +57,7 @@ public @interface View
      * Allows to specify a custom base-path for the page represented by the view-config
      * @return base-path
      */
+    @SkipMetaDataMerge
     String basePath() default "";
 
     /**
@@ -63,6 +65,7 @@ public @interface View
      *
      * @return name of the page
      */
+    @SkipMetaDataMerge
     String name() default "";
 
     /**

http://git-wip-us.apache.org/repos/asf/deltaspike/blob/662f458c/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/config/view/DefaultConfigNodeConverter.java
----------------------------------------------------------------------
diff --git a/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/config/view/DefaultConfigNodeConverter.java b/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/config/view/DefaultConfigNodeConverter.java
index d7e6b97..798b5ca 100644
--- a/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/config/view/DefaultConfigNodeConverter.java
+++ b/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/config/view/DefaultConfigNodeConverter.java
@@ -21,6 +21,7 @@ package org.apache.deltaspike.jsf.impl.config.view;
 import org.apache.deltaspike.core.api.config.ConfigResolver;
 import org.apache.deltaspike.core.api.config.view.metadata.Aggregated;
 import org.apache.deltaspike.core.api.config.view.ViewConfig;
+import org.apache.deltaspike.core.api.config.view.metadata.SkipMetaDataMerge;
 import org.apache.deltaspike.core.api.config.view.metadata.ViewMetaData;
 import org.apache.deltaspike.core.api.config.view.metadata.ConfigDescriptor;
 import org.apache.deltaspike.core.spi.config.view.ConfigNodeConverter;
@@ -160,7 +161,6 @@ public class DefaultConfigNodeConverter implements ConfigNodeConverter
 
         for (Method annotationMethod : existingMetaData.annotationType().getDeclaredMethods())
         {
-            //TODO discuss @ExcludeMethod
             annotationMethod.setAccessible(true); //TODO
 
             Annotation defaultAnnotation = AnnotationInstanceProvider.of(existingMetaData.annotationType());
@@ -175,7 +175,8 @@ public class DefaultConfigNodeConverter implements ConfigNodeConverter
                     Object inheritedValue = annotationMethod.invoke(inheritedMetaData);
 
                     if (inheritedValue == null /*possible with literal instances*/ ||
-                            inheritedValue.equals(defaultValue))
+                            inheritedValue.equals(defaultValue) ||
+                            annotationMethod.isAnnotationPresent(SkipMetaDataMerge.class))
                     {
                         values.put(annotationMethod.getName(), defaultValue);
                     }

http://git-wip-us.apache.org/repos/asf/deltaspike/blob/662f458c/deltaspike/modules/jsf/impl/src/test/java/org/apache/deltaspike/test/jsf/impl/config/view/navigation/syntax/uc009/Pages.java
----------------------------------------------------------------------
diff --git a/deltaspike/modules/jsf/impl/src/test/java/org/apache/deltaspike/test/jsf/impl/config/view/navigation/syntax/uc009/Pages.java b/deltaspike/modules/jsf/impl/src/test/java/org/apache/deltaspike/test/jsf/impl/config/view/navigation/syntax/uc009/Pages.java
new file mode 100644
index 0000000..d8cd006
--- /dev/null
+++ b/deltaspike/modules/jsf/impl/src/test/java/org/apache/deltaspike/test/jsf/impl/config/view/navigation/syntax/uc009/Pages.java
@@ -0,0 +1,51 @@
+/*
+ * 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.deltaspike.test.jsf.impl.config.view.navigation.syntax.uc009;
+
+import org.apache.deltaspike.core.api.config.view.ViewConfig;
+import org.apache.deltaspike.jsf.api.config.view.Folder;
+import org.apache.deltaspike.jsf.api.config.view.View;
+
+@Folder(name = "/") //there are multiple folders which should be grouped by the outermost interface
+interface Pages extends ViewConfig
+{
+    //result: /index.xhtml
+    class Index implements Pages
+    {
+    }
+
+    //result: /admin
+    interface Admin extends Pages
+    {
+        @View
+        class Index implements Admin
+        {
+        }
+    }
+
+    //result: /public
+    @Folder
+    interface Public extends Pages
+    {
+        @View
+        class Index implements Public
+        {
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/deltaspike/blob/662f458c/deltaspike/modules/jsf/impl/src/test/java/org/apache/deltaspike/test/jsf/impl/config/view/navigation/syntax/uc009/ViewConfigTest.java
----------------------------------------------------------------------
diff --git a/deltaspike/modules/jsf/impl/src/test/java/org/apache/deltaspike/test/jsf/impl/config/view/navigation/syntax/uc009/ViewConfigTest.java b/deltaspike/modules/jsf/impl/src/test/java/org/apache/deltaspike/test/jsf/impl/config/view/navigation/syntax/uc009/ViewConfigTest.java
new file mode 100644
index 0000000..17a11cb
--- /dev/null
+++ b/deltaspike/modules/jsf/impl/src/test/java/org/apache/deltaspike/test/jsf/impl/config/view/navigation/syntax/uc009/ViewConfigTest.java
@@ -0,0 +1,276 @@
+/*
+ * 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.deltaspike.test.jsf.impl.config.view.navigation.syntax.uc009;
+
+import org.apache.deltaspike.core.api.config.view.metadata.ConfigDescriptor;
+import org.apache.deltaspike.core.api.config.view.metadata.ViewConfigDescriptor;
+import org.apache.deltaspike.core.api.config.view.metadata.ViewConfigResolver;
+import org.apache.deltaspike.core.spi.config.view.ViewConfigNode;
+import org.apache.deltaspike.jsf.api.config.view.Folder;
+import org.apache.deltaspike.jsf.api.config.view.View;
+import org.apache.deltaspike.jsf.impl.config.view.ViewConfigExtension;
+import org.apache.deltaspike.jsf.impl.config.view.ViewConfigResolverProducer;
+import org.junit.After;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+
+public class ViewConfigTest
+{
+    private ViewConfigExtension viewConfigExtension;
+
+    private ViewConfigResolverProducer viewConfigResolverProducer;
+
+    @Before
+    public void before()
+    {
+        this.viewConfigExtension = new ViewConfigExtension();
+        this.viewConfigResolverProducer = new ViewConfigResolverProducer(this.viewConfigExtension);
+    }
+
+    @After
+    public void after()
+    {
+        this.viewConfigExtension.freeViewConfigCache(null);
+    }
+
+    @Test
+    public void testMetaDataInheritanceInTree()
+    {
+        this.viewConfigExtension.addPageDefinition(Pages.class);
+        this.viewConfigExtension.addPageDefinition(Pages.Index.class);
+        this.viewConfigExtension.addPageDefinition(Pages.Admin.class);
+        this.viewConfigExtension.addPageDefinition(Pages.Admin.Index.class);
+        this.viewConfigExtension.addPageDefinition(Pages.Public.class);
+        this.viewConfigExtension.addPageDefinition(Pages.Public.Index.class);
+
+        ViewConfigNode node = this.viewConfigExtension.findNode(Pages.class);
+
+        Assert.assertNotNull(node);
+        Assert.assertNotNull(node.getParent()); //Root
+        Assert.assertNull(node.getParent().getParent());
+
+        Assert.assertNotNull(node.getChildren());
+        Assert.assertEquals(3, node.getChildren().size());
+
+        Assert.assertNotNull(node.getMetaData());
+        Assert.assertEquals(1, node.getMetaData().size());
+
+        Assert.assertNotNull(node.getInheritedMetaData());
+        Assert.assertEquals(0, node.getInheritedMetaData().size());
+
+
+        node = this.viewConfigExtension.findNode(Pages.Index.class);
+
+        Assert.assertNotNull(node);
+        Assert.assertNotNull(node.getParent()); //Pages
+        Assert.assertNotNull(node.getParent().getParent()); //Root
+        Assert.assertNull(node.getParent().getParent().getParent());
+
+        Assert.assertNotNull(node.getChildren());
+        Assert.assertEquals(0, node.getChildren().size());
+
+        Assert.assertNotNull(node.getMetaData());
+        Assert.assertEquals(0, node.getMetaData().size());
+
+        Assert.assertNotNull(node.getInheritedMetaData());
+        Assert.assertEquals(0, node.getInheritedMetaData().size());
+
+
+        node = this.viewConfigExtension.findNode(Pages.Admin.class);
+
+        Assert.assertNotNull(node);
+        Assert.assertNotNull(node.getParent()); //Admin
+        Assert.assertNotNull(node.getParent().getParent()); //Root
+        Assert.assertNull(node.getParent().getParent().getParent());
+
+        Assert.assertNotNull(node.getChildren());
+        Assert.assertEquals(1, node.getChildren().size());
+
+        Assert.assertNotNull(node.getMetaData());
+        Assert.assertEquals(0, node.getMetaData().size());
+
+        Assert.assertNotNull(node.getInheritedMetaData());
+        Assert.assertEquals(0, node.getInheritedMetaData().size());
+
+
+        node = this.viewConfigExtension.findNode(Pages.Admin.Index.class);
+
+        Assert.assertNotNull(node);
+        Assert.assertNotNull(node.getParent()); //Admin
+        Assert.assertNotNull(node.getParent().getParent()); //Pages
+        Assert.assertNotNull(node.getParent().getParent().getParent()); //Root
+        Assert.assertNull(node.getParent().getParent().getParent().getParent());
+
+        Assert.assertNotNull(node.getChildren());
+        Assert.assertEquals(0, node.getChildren().size());
+
+        Assert.assertNotNull(node.getMetaData());
+        Assert.assertEquals(1, node.getMetaData().size());
+        Assert.assertEquals(View.NavigationMode.DEFAULT, ((View) node.getMetaData().iterator().next()).navigation());
+        Assert.assertEquals(View.ViewParameterMode.DEFAULT, ((View) node.getMetaData().iterator().next()).viewParams());
+        Assert.assertEquals("", ((View) node.getMetaData().iterator().next()).name());
+        Assert.assertEquals(View.Extension.DEFAULT, ((View) node.getMetaData().iterator().next()).extension());
+
+        Assert.assertNotNull(node.getInheritedMetaData());
+        Assert.assertEquals(0, node.getInheritedMetaData().size());
+
+
+        Assert.assertNotNull(node.getInheritedMetaData());
+        Assert.assertEquals(0, node.getInheritedMetaData().size());
+
+
+        node = this.viewConfigExtension.findNode(Pages.Public.class);
+
+        Assert.assertNotNull(node);
+        Assert.assertNotNull(node.getParent()); //Public
+        Assert.assertNotNull(node.getParent().getParent()); //Root
+        Assert.assertNull(node.getParent().getParent().getParent());
+
+        Assert.assertNotNull(node.getChildren());
+        Assert.assertEquals(1, node.getChildren().size());
+
+        Assert.assertNotNull(node.getMetaData());
+        Assert.assertEquals(1, node.getMetaData().size());
+        Assert.assertEquals(Folder.class, node.getMetaData().iterator().next().annotationType());
+
+        Assert.assertNotNull(node.getInheritedMetaData());
+        Assert.assertEquals(0, node.getInheritedMetaData().size());
+
+
+        node = this.viewConfigExtension.findNode(Pages.Public.Index.class);
+
+        Assert.assertNotNull(node);
+        Assert.assertNotNull(node.getParent()); //Public
+        Assert.assertNotNull(node.getParent().getParent()); //Pages
+        Assert.assertNotNull(node.getParent().getParent().getParent()); //Root
+        Assert.assertNull(node.getParent().getParent().getParent().getParent());
+
+        Assert.assertNotNull(node.getChildren());
+        Assert.assertEquals(0, node.getChildren().size());
+
+        Assert.assertNotNull(node.getMetaData());
+        Assert.assertEquals(1, node.getMetaData().size());
+        Assert.assertEquals(View.NavigationMode.DEFAULT, ((View) node.getMetaData().iterator().next()).navigation());
+        Assert.assertEquals(View.ViewParameterMode.DEFAULT, ((View) node.getMetaData().iterator().next()).viewParams());
+        Assert.assertEquals("", ((View) node.getMetaData().iterator().next()).name());
+        Assert.assertEquals(View.Extension.DEFAULT, ((View) node.getMetaData().iterator().next()).extension());
+
+        Assert.assertNotNull(node.getInheritedMetaData());
+        Assert.assertEquals(0, node.getInheritedMetaData().size());
+
+
+        Assert.assertNotNull(node.getInheritedMetaData());
+        Assert.assertEquals(0, node.getInheritedMetaData().size());
+
+    }
+
+    @Test
+    public void testMetaDataInheritanceInViewConfig()
+    {
+        this.viewConfigExtension.addPageDefinition(Pages.class);
+        this.viewConfigExtension.addPageDefinition(Pages.Index.class);
+        this.viewConfigExtension.addPageDefinition(Pages.Admin.class);
+        this.viewConfigExtension.addPageDefinition(Pages.Admin.Index.class);
+        this.viewConfigExtension.addPageDefinition(Pages.Public.class);
+        this.viewConfigExtension.addPageDefinition(Pages.Public.Index.class);
+
+        ViewConfigResolver viewConfigResolver = this.viewConfigResolverProducer.createViewConfigResolver();
+        ConfigDescriptor<?> configDescriptor = viewConfigResolver.getConfigDescriptor(Pages.class);
+
+        Assert.assertNotNull(configDescriptor);
+        Assert.assertNotNull(configDescriptor.getConfigClass());
+        Assert.assertEquals(Pages.class, configDescriptor.getConfigClass());
+
+        Assert.assertNotNull(configDescriptor.getMetaData());
+        Assert.assertEquals(1, configDescriptor.getMetaData().size());
+        Assert.assertEquals(1, configDescriptor.getMetaData(Folder.class).size());
+        Assert.assertEquals("/", configDescriptor.getMetaData(Folder.class).iterator().next().name());
+
+
+        ViewConfigDescriptor viewConfigDescriptor = viewConfigResolver.getViewConfigDescriptor(Pages.Index.class);
+
+        Assert.assertNotNull(viewConfigDescriptor);
+        Assert.assertEquals("/index.xhtml", viewConfigDescriptor.getViewId());
+        Assert.assertEquals(Pages.Index.class, viewConfigDescriptor.getConfigClass());
+
+        Assert.assertNotNull(viewConfigDescriptor.getMetaData());
+        Assert.assertEquals(1, viewConfigDescriptor.getMetaData().size());
+        Assert.assertEquals(View.NavigationMode.FORWARD, viewConfigDescriptor.getMetaData(View.class).iterator().next().navigation());
+        Assert.assertEquals(View.ViewParameterMode.EXCLUDE, viewConfigDescriptor.getMetaData(View.class).iterator().next().viewParams());
+        Assert.assertEquals("index", viewConfigDescriptor.getMetaData(View.class).iterator().next().name());
+        Assert.assertEquals("xhtml", viewConfigDescriptor.getMetaData(View.class).iterator().next().extension());
+        Assert.assertEquals("/", viewConfigDescriptor.getMetaData(View.class).iterator().next().basePath());
+
+
+        configDescriptor = viewConfigResolver.getConfigDescriptor(Pages.Admin.class);
+
+        Assert.assertNotNull(configDescriptor);
+        Assert.assertNotNull(configDescriptor.getConfigClass());
+        Assert.assertEquals(Pages.Admin.class, configDescriptor.getConfigClass());
+
+        Assert.assertNotNull(configDescriptor.getMetaData());
+        Assert.assertEquals(1, configDescriptor.getMetaData().size());
+        Assert.assertEquals(1, configDescriptor.getMetaData(Folder.class).size());
+        Assert.assertEquals("/admin/", configDescriptor.getMetaData(Folder.class).iterator().next().name());
+
+
+        viewConfigDescriptor = viewConfigResolver.getViewConfigDescriptor(Pages.Admin.Index.class);
+
+        Assert.assertNotNull(viewConfigDescriptor);
+        Assert.assertEquals("/admin/index.xhtml", viewConfigDescriptor.getViewId());
+        Assert.assertEquals(Pages.Admin.Index.class, viewConfigDescriptor.getConfigClass());
+
+        Assert.assertNotNull(viewConfigDescriptor.getMetaData());
+        Assert.assertEquals(1, viewConfigDescriptor.getMetaData().size());
+        Assert.assertEquals(View.NavigationMode.FORWARD, viewConfigDescriptor.getMetaData(View.class).iterator().next().navigation());
+        Assert.assertEquals(View.ViewParameterMode.EXCLUDE, viewConfigDescriptor.getMetaData(View.class).iterator().next().viewParams());
+        Assert.assertEquals("index", viewConfigDescriptor.getMetaData(View.class).iterator().next().name());
+        Assert.assertEquals("xhtml", viewConfigDescriptor.getMetaData(View.class).iterator().next().extension());
+        Assert.assertEquals("/admin/", viewConfigDescriptor.getMetaData(View.class).iterator().next().basePath());
+
+
+        configDescriptor = viewConfigResolver.getConfigDescriptor(Pages.Public.class);
+
+        Assert.assertNotNull(configDescriptor);
+        Assert.assertNotNull(configDescriptor.getConfigClass());
+        Assert.assertEquals(Pages.Public.class, configDescriptor.getConfigClass());
+
+        Assert.assertNotNull(configDescriptor.getMetaData());
+        Assert.assertEquals(1, configDescriptor.getMetaData().size());
+        Assert.assertEquals(1, configDescriptor.getMetaData(Folder.class).size());
+        Assert.assertEquals("/public/", configDescriptor.getMetaData(Folder.class).iterator().next().name());
+
+
+        viewConfigDescriptor = viewConfigResolver.getViewConfigDescriptor(Pages.Public.Index.class);
+
+        Assert.assertNotNull(viewConfigDescriptor);
+        Assert.assertEquals("/public/index.xhtml", viewConfigDescriptor.getViewId());
+        Assert.assertEquals(Pages.Public.Index.class, viewConfigDescriptor.getConfigClass());
+
+        Assert.assertNotNull(viewConfigDescriptor.getMetaData());
+        Assert.assertEquals(1, viewConfigDescriptor.getMetaData().size());
+        Assert.assertEquals(View.NavigationMode.FORWARD, viewConfigDescriptor.getMetaData(View.class).iterator().next().navigation());
+        Assert.assertEquals(View.ViewParameterMode.EXCLUDE, viewConfigDescriptor.getMetaData(View.class).iterator().next().viewParams());
+        Assert.assertEquals("index", viewConfigDescriptor.getMetaData(View.class).iterator().next().name());
+        Assert.assertEquals("xhtml", viewConfigDescriptor.getMetaData(View.class).iterator().next().extension());
+        Assert.assertEquals("/public/", viewConfigDescriptor.getMetaData(View.class).iterator().next().basePath());
+
+    }
+}