Author: ate
Date: Tue Sep 11 14:10:34 2012
New Revision: 1383424

URL: http://svn.apache.org/viewvc?rev=1383424&view=rev
Log:
RAVE-696: aligning rave-web-jcr with new routes and pages configuration model
- pending: fix and re-enable jcr config model unit-test

Added:
    rave/sandbox/content-services/demo-portal/src/main/resources/META-INF/
    rave/sandbox/content-services/demo-portal/src/main/resources/META-INF/rave/
    
rave/sandbox/content-services/demo-portal/src/main/resources/META-INF/rave/module.json
    
rave/sandbox/content-services/demo-portal/src/main/resources/page-config.json
      - copied, changed from r1383356, 
rave/sandbox/content-services/rave-web-jcr/src/test/resources/page-config.json
    
rave/sandbox/content-services/rave-web-jcr/src/main/java/org/apache/rave/portal/web/mvc/config/jcr/JcrPagesConfigManager.java
      - copied, changed from r1383339, 
rave/sandbox/content-services/rave-web-jcr/src/main/java/org/apache/rave/portal/web/mvc/config/jcr/JcrConfigManager.java
    rave/sandbox/content-services/rave-web-jcr/src/main/resources/raveconfig.cnd
      - copied, changed from r1383356, 
rave/sandbox/content-services/rave-web-jcr/src/main/resources/rave-page-config.cnd
    rave/sandbox/content-services/rave-web-jcr/src/test/resources/META-INF/
    rave/sandbox/content-services/rave-web-jcr/src/test/resources/META-INF/rave/
    
rave/sandbox/content-services/rave-web-jcr/src/test/resources/META-INF/rave/module.json
Removed:
    
rave/sandbox/content-services/rave-web-jcr/src/main/java/org/apache/rave/portal/web/mvc/config/jcr/JcrConfigManager.java
    
rave/sandbox/content-services/rave-web-jcr/src/main/java/org/apache/rave/portal/web/mvc/config/jcr/JcrPageDefinition.java
    
rave/sandbox/content-services/rave-web-jcr/src/main/resources/rave-page-config.cnd
Modified:
    rave/sandbox/content-services/demo-portal/pom.xml
    rave/sandbox/content-services/pom.xml
    
rave/sandbox/content-services/rave-web-jcr/src/main/java/org/apache/rave/portal/web/mvc/config/jcr/JcrPageDefinitions.java
    
rave/sandbox/content-services/rave-web-jcr/src/main/java/org/apache/rave/portal/web/mvc/config/jcr/JcrPageFragment.java
    
rave/sandbox/content-services/rave-web-jcr/src/main/java/org/apache/rave/portal/web/mvc/config/jcr/JcrRoute.java
    
rave/sandbox/content-services/rave-web-jcr/src/main/java/org/apache/rave/portal/web/mvc/config/jcr/JcrRoutes.java
    
rave/sandbox/content-services/rave-web-jcr/src/main/resources/META-INF/rave/module.json
    
rave/sandbox/content-services/rave-web-jcr/src/test/java/org/apache/rave/portal/web/mvc/config/jcr/JcrConfigManagerTest.java
    
rave/sandbox/content-services/rave-web-jcr/src/test/resources/page-config.json
    
rave/sandbox/content-services/rave-web-jcr/src/test/resources/test-config.xml

Modified: rave/sandbox/content-services/demo-portal/pom.xml
URL: 
http://svn.apache.org/viewvc/rave/sandbox/content-services/demo-portal/pom.xml?rev=1383424&r1=1383423&r2=1383424&view=diff
==============================================================================
--- rave/sandbox/content-services/demo-portal/pom.xml (original)
+++ rave/sandbox/content-services/demo-portal/pom.xml Tue Sep 11 14:10:34 2012
@@ -90,13 +90,13 @@
       <type>war</type>
       <scope>provided</scope>
     </dependency>
-    <!--<dependency>-->
-      <!--<groupId>org.apache.rave.sandbox.jcr</groupId>-->
-      <!--<artifactId>rave-jcr-console</artifactId>-->
-      <!--<version>${project.version}</version>-->
-      <!--<type>war</type>-->
-      <!--<scope>provided</scope>-->
-    <!--</dependency>-->
+    <dependency>
+      <groupId>org.apache.rave.sandbox.jcr</groupId>
+      <artifactId>rave-jcr-console</artifactId>
+      <version>${project.version}</version>
+      <type>war</type>
+      <scope>provided</scope>
+    </dependency>
     <dependency>
       <groupId>org.apache.rave.sandbox.jcr</groupId>
       <artifactId>rave-jcr-config</artifactId>
@@ -112,6 +112,11 @@
       <artifactId>rave-web-hmvc</artifactId>
       <version>${project.version}</version>
     </dependency>
+    <dependency>
+      <groupId>org.apache.rave.sandbox.jcr</groupId>
+      <artifactId>rave-web-jcr</artifactId>
+      <version>${project.version}</version>
+    </dependency>
 
     <!-- Default database -->
     <dependency>
@@ -218,14 +223,14 @@
                   <context>${rave.repository.context.path}</context>
                 </properties>
               </deployable>
-              <!--<deployable>-->
-                <!--<groupId>org.apache.rave.sandbox.jcr</groupId>-->
-                <!--<artifactId>rave-jcr-console</artifactId>-->
-                <!--<type>war</type>-->
-                <!--<properties>-->
-                  <!--<context>/console</context>-->
-                <!--</properties>-->
-              <!--</deployable>-->
+              <deployable>
+                <groupId>org.apache.rave.sandbox.jcr</groupId>
+                <artifactId>rave-jcr-console</artifactId>
+                <type>war</type>
+                <properties>
+                  <context>/console</context>
+                </properties>
+              </deployable>
               <deployable>
                 <groupId>org.apache.rave.sandbox.jcr</groupId>
                 <artifactId>rave-demo-portal</artifactId>

Added: 
rave/sandbox/content-services/demo-portal/src/main/resources/META-INF/rave/module.json
URL: 
http://svn.apache.org/viewvc/rave/sandbox/content-services/demo-portal/src/main/resources/META-INF/rave/module.json?rev=1383424&view=auto
==============================================================================
--- 
rave/sandbox/content-services/demo-portal/src/main/resources/META-INF/rave/module.json
 (added)
+++ 
rave/sandbox/content-services/demo-portal/src/main/resources/META-INF/rave/module.json
 Tue Sep 11 14:10:34 2012
@@ -0,0 +1,10 @@
+{
+    "name":"rave-demo-portal",
+    "contents":{
+        "raveconfig":{
+            "file":"page-config.json",
+            "parent":"/",
+            "importBehavior":"merge"
+        }
+    }
+}

Copied: 
rave/sandbox/content-services/demo-portal/src/main/resources/page-config.json 
(from r1383356, 
rave/sandbox/content-services/rave-web-jcr/src/test/resources/page-config.json)
URL: 
http://svn.apache.org/viewvc/rave/sandbox/content-services/demo-portal/src/main/resources/page-config.json?p2=rave/sandbox/content-services/demo-portal/src/main/resources/page-config.json&p1=rave/sandbox/content-services/rave-web-jcr/src/test/resources/page-config.json&r1=1383356&r2=1383424&rev=1383424&view=diff
==============================================================================
--- 
rave/sandbox/content-services/rave-web-jcr/src/test/resources/page-config.json 
(original)
+++ 
rave/sandbox/content-services/demo-portal/src/main/resources/page-config.json 
Tue Sep 11 14:10:34 2012
@@ -1,33 +1,44 @@
 {
-    "myConfiguration":{
-        "jcr:primaryType":"raveconfig:pageconfiguration",
-        "name":"myConfiguration",
-        "pageDefinitions":{
-            "jcr:primaryType":"raveconfig:pagedefinition",
-            "myPage":{
-                "jcr:primaryType":"raveconfig:pagedefinition",
-                "name":"myPage",
-                "path":"/mypage2",
-                "description":"Simple page",
-                
"controller":"org.apache.rave.unittest.NonExistingMyPageController",
-                "head":{
-                    "jcr:primaryType":"raveconfig:pagefragment",
-                    "name":"head",
-                    "path":"myHeader",
-                    
"controller":"org.apache.rave.unittest.NonExistingMyHeaderController"
-                },
-                "body":{
-                    "jcr:primaryType":"raveconfig:pagefragment",
-                    "name":"body",
-                    "path":"myBody",
-                    
"controller":"org.apache.rave.unittest.NonExistingMyContentController"
-                },
-                "footer":{
-                    "jcr:primaryType":"raveconfig:pagefragment",
-                    "name":"footer",
-                    "path":"myFooter",
-                    
"controller":"org.apache.rave.unittest.NonExistingMyFooterController"
-                }
+    "myRoutes":{
+        "jcr:primaryType":"raveconfig:routes",
+        "name":"myRoutes",
+        "route1":{
+            "jcr:primaryType":"raveconfig:route",
+            "name":"route1",
+            "path":"/mypage1",
+            "target":"/mypage",
+            "action": "action1"
+        },
+        "route2":{
+            "jcr:primaryType":"raveconfig:route",
+            "name":"route2",
+            "path":"/mypage2",
+            "target":"/mypage",
+            "action": "action2"
+        }
+    },
+    "myPages":{
+        "jcr:primaryType":"raveconfig:pagedefinitions",
+        "name":"myPages",
+        "myPage":{
+            "jcr:primaryType":"raveconfig:pagefragment",
+            "name":"myPage",
+            "description":"Simple page",
+            
"controller":"org.apache.rave.unittest.NonExistingMyPageController",
+            "head":{
+                "jcr:primaryType":"raveconfig:pagefragment",
+                "name":"head",
+                
"controller":"org.apache.rave.unittest.NonExistingMyHeaderController"
+            },
+            "body":{
+                "jcr:primaryType":"raveconfig:pagefragment",
+                "name":"body",
+                
"controller":"org.apache.rave.unittest.NonExistingMyContentController"
+            },
+            "footer":{
+                "jcr:primaryType":"raveconfig:pagefragment",
+                "name":"footer",
+                
"controller":"org.apache.rave.unittest.NonExistingMyFooterController"
             }
         }
     }

Modified: rave/sandbox/content-services/pom.xml
URL: 
http://svn.apache.org/viewvc/rave/sandbox/content-services/pom.xml?rev=1383424&r1=1383423&r2=1383424&view=diff
==============================================================================
--- rave/sandbox/content-services/pom.xml (original)
+++ rave/sandbox/content-services/pom.xml Tue Sep 11 14:10:34 2012
@@ -189,11 +189,8 @@
     <module>rave-jcr-integration</module>
     <module>rave-jcr-utils</module>
     <module>rave-web-hmvc</module>
-    <!--<module>rave-web-jcr</module>-->
+    <module>rave-web-jcr</module>
     <module>rave-jcr-tools</module>
-    <!-- disable incomple simple-app module
-    <module>simple-app</module>
-    -->
     <module>demo-portal</module>
   </modules>
 

Modified: 
rave/sandbox/content-services/rave-web-jcr/src/main/java/org/apache/rave/portal/web/mvc/config/jcr/JcrPageDefinitions.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/JcrPageDefinitions.java?rev=1383424&r1=1383423&r2=1383424&view=diff
==============================================================================
--- 
rave/sandbox/content-services/rave-web-jcr/src/main/java/org/apache/rave/portal/web/mvc/config/jcr/JcrPageDefinitions.java
 (original)
+++ 
rave/sandbox/content-services/rave-web-jcr/src/main/java/org/apache/rave/portal/web/mvc/config/jcr/JcrPageDefinitions.java
 Tue Sep 11 14:10:34 2012
@@ -24,23 +24,18 @@ import java.util.List;
 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.PageDefinitions;
-import org.apache.rave.portal.web.mvc.config.PageDefinition;
 import org.apache.rave.portal.web.mvc.config.PageFragment;
 
 /**
  * @version "$Id$"
  */
-@Node(discriminator = false, jcrType = "raveconfig:pageconfiguration")
-public class JcrPageDefinitions implements PageDefinitions {
+@Node(discriminator = false, jcrType = "raveconfig:pagedefinitions")
+public class JcrPageDefinitions {
 
 
     @Field(path = true, id = true)
     private String path;
 
-    @Collection(elementClassName = JcrPageDefinition.class, jcrType = 
"raveconfig:pagedefinition")
-    private List<PageDefinition> pageDefinitions;
-
     @Collection(elementClassName = JcrPageFragment.class, jcrType = 
"raveconfig:pagefragment")
     private List<PageFragment> pageFragments;
 
@@ -52,7 +47,6 @@ public class JcrPageDefinitions implemen
         // TODO implement
     }
 
-    @Override
     public String getName() {
         return name;
     }
@@ -62,16 +56,6 @@ public class JcrPageDefinitions implemen
 
     }
 
-    @Override
-    public List<PageDefinition> getPageDefinitions() {
-        return pageDefinitions;
-    }
-
-    public void setPageDefinitions(List<PageDefinition> definitions) {
-        pageDefinitions = definitions;
-
-    }
-
     public List<PageFragment> getPageFragments() {
         return pageFragments;
     }

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=1383424&r1=1383423&r2=1383424&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
 Tue Sep 11 14:10:34 2012
@@ -22,7 +22,6 @@ package org.apache.rave.portal.web.mvc.c
 import java.util.ArrayList;
 import java.util.List;
 
-import org.apache.jackrabbit.ocm.mapper.impl.annotation.Bean;
 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;
@@ -48,8 +47,10 @@ public class JcrPageFragment implements 
     @Field(path = true)
     private String path;
 
-    @Field(jcrType = "String")
-    private String extend;
+    @Field(jcrName="abstract", jcrType = "Boolean")
+    private boolean jcrAbstact;
+    @Field(jcrName="extends", jcrType = "String")
+    private String jcrExtends;
     @Field(jcrType = "String")
     private String controller;
     @Field(jcrType = "String")
@@ -61,26 +62,13 @@ public class JcrPageFragment implements 
     @Field(jcrType = "String", id=true)
     private String name;
 
-    @Bean(jcrType = "raveconfig:pagefragment", jcrName = 
"raveconfig:parentfragment")
-    private JcrPageFragment jcrParent;
-
-    @Collection(elementClassName = JcrPageFragment.class, jcrType = 
"raveconfig:pagefragment", jcrName = "pageFragments")
+    @Collection(elementClassName = JcrPageFragment.class, jcrType = 
"raveconfig:pagefragment")
     private List<PageFragment> children;
 
     public String getPath() {
         return path;
     }
 
-    // needed only for OCM mapper which used Java bean methods mapping to 
determine the persistent field or bean type
-    public JcrPageFragment getJcrParent() {
-        return jcrParent;
-    }
-
-    // needed only for OCM mapper which used Java bean methods mapping to 
determine the persistent field or bean type
-    public void setJcrParent(JcrPageFragment jcrParent) {
-        this.jcrParent = jcrParent;
-    }
-
     @Override
     public String getViewName() {
         return viewName;
@@ -112,13 +100,38 @@ public class JcrPageFragment implements 
         this.description = description;
     }
 
+    public boolean isJcrAbstact() {
+        return jcrAbstact;
+    }
+
+    public void setJcrAbstact(boolean jcrAbstact) {
+        this.jcrAbstact = jcrAbstact;
+    }
+
+    public String getJcrExtends() {
+        return jcrExtends;
+    }
+
+    public void setJcrExtends(String jcrExtends) {
+        this.jcrExtends = jcrExtends;
+    }
+
+    @Override
+    public boolean isAbstract() {
+        return this.jcrAbstact;
+    }
+
+    public void setAbstract(boolean jcrAbstract) {
+        this.jcrAbstact = jcrAbstract;
+    }
+
     @Override
-    public String getExtend() {
-        return extend;
+    public String getExtends() {
+        return jcrExtends;
     }
 
-    public void setExtend(String extend) {
-        this.extend = extend;
+    public void setExtends(String jcrExtends) {
+        this.jcrExtends = jcrExtends;
     }
 
     @Override
@@ -152,12 +165,10 @@ public class JcrPageFragment implements 
         final StringBuilder sb = new StringBuilder();
         sb.append("JcrPageFragment");
         sb.append("{path='").append(path).append('\'');
-        sb.append(", reference='").append(extend).append('\'');
+        sb.append(", extends='").append(jcrExtends).append('\'');
         sb.append(", controller='").append(controller).append('\'');
         sb.append(", name='").append(name).append('\'');
-        sb.append(", jcrParent=").append(jcrParent);
         sb.append('}');
         return sb.toString();
     }
-
 }

Copied: 
rave/sandbox/content-services/rave-web-jcr/src/main/java/org/apache/rave/portal/web/mvc/config/jcr/JcrPagesConfigManager.java
 (from r1383339, 
rave/sandbox/content-services/rave-web-jcr/src/main/java/org/apache/rave/portal/web/mvc/config/jcr/JcrConfigManager.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/JcrPagesConfigManager.java?p2=rave/sandbox/content-services/rave-web-jcr/src/main/java/org/apache/rave/portal/web/mvc/config/jcr/JcrPagesConfigManager.java&p1=rave/sandbox/content-services/rave-web-jcr/src/main/java/org/apache/rave/portal/web/mvc/config/jcr/JcrConfigManager.java&r1=1383339&r2=1383424&rev=1383424&view=diff
==============================================================================
--- 
rave/sandbox/content-services/rave-web-jcr/src/main/java/org/apache/rave/portal/web/mvc/config/jcr/JcrConfigManager.java
 (original)
+++ 
rave/sandbox/content-services/rave-web-jcr/src/main/java/org/apache/rave/portal/web/mvc/config/jcr/JcrPagesConfigManager.java
 Tue Sep 11 14:10:34 2012
@@ -20,9 +20,12 @@
 package org.apache.rave.portal.web.mvc.config.jcr;
 
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
-import javax.jcr.Node;
+import javax.jcr.Credentials;
+import javax.jcr.Repository;
 import javax.jcr.RepositoryException;
 import javax.jcr.Session;
 
@@ -30,83 +33,142 @@ import org.apache.jackrabbit.ocm.manager
 import org.apache.jackrabbit.ocm.manager.impl.ObjectContentManagerImpl;
 import org.apache.jackrabbit.ocm.mapper.Mapper;
 import org.apache.jackrabbit.ocm.mapper.impl.annotation.AnnotationMapperImpl;
-import org.apache.rave.portal.web.mvc.config.PageRoutesManager;
-import org.apache.rave.portal.web.mvc.config.RoutesManager;
+import org.apache.rave.jcr.LazyRepositoryFactory;
+import org.apache.rave.jcr.LazyRepositoryFactoryListener;
+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.InvalidConfigurationException;
-import org.apache.rave.portal.web.mvc.config.PageDefinitions;
-import org.apache.rave.portal.web.mvc.config.Routes;
+import org.apache.rave.portal.web.mvc.config.PagesConfigManager;
+import org.apache.rave.portal.web.mvc.config.Route;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 /**
  * @version "$Id$"
  */
-public class JcrConfigManager implements PageRoutesManager {
+public class JcrPagesConfigManager implements PagesConfigManager, 
LazyRepositoryFactoryListener {
 
-    private static Logger log = 
LoggerFactory.getLogger(JcrConfigManager.class);
+    private static Logger log = 
LoggerFactory.getLogger(JcrPagesConfigManager.class);
 
-    private Session session;
-    private String configPath;
-    private ObjectContentManager manager;
+    private static class PagesConfigImpl implements PagesConfig {
 
-    private String urlMappingsPath;
+        private List<Route> routes;
+        private Map<String, PageFragment> pages;
 
-    private String configurationPath;
+        public PagesConfigImpl(List<Route> routes, Map<String, PageFragment> 
pages) {
+            this.routes = routes;
+            this.pages = pages;
+        }
 
+        @Override
+        public Map<String, PageFragment> getPages() {
+            return pages;
+        }
 
-    public void setUrlMappingsPath(final String urlMappingsPath) {
-        this.urlMappingsPath = urlMappingsPath;
+        @Override
+        public List<Route> getRoutes() {
+            return routes;
+        }
     }
 
-    public void setConfigurationPath(final String configurationPath) {
-        this.configurationPath = configurationPath;
+    private LazyRepositoryFactory repositoryFactory;
+    private Credentials credetials;
+    private Repository repository;
+    private PagesConfig config;
+
+    private String routesPath;
+    private String pageDefinitionsPath;
+
+    // delay refresh in milliseconds
+    private long refreshDelay;
+
+    private volatile long lastBuildTime;
+
+    public JcrPagesConfigManager(LazyRepositoryFactory repositoryFactory, 
Credentials credentials, String routesPath, String pageDefinitionsPath) {
+        this.credetials = credentials;
+        this.routesPath = routesPath;
+        this.pageDefinitionsPath = pageDefinitionsPath;
+        Repository repository = repositoryFactory.getRepository(this);
+        if (repository != null) {
+            repositoryAvailable(repositoryFactory.getFactoryKey(), repository);
+        }
     }
 
-    public JcrConfigManager(Session session, String configPath) {
-        this.session = session;
-        this.configPath = configPath;
-        this.manager = createManager();
+    @Override
+    public synchronized void repositoryAvailable(final Object factoryKey, 
final Repository repository) {
+        this.repository = repository;
+        loadConfig();
     }
 
+    @Override
+    public synchronized void repositoryNotAvailable(final Object factoryKey) {
+        config = null;
+        repository = null;
+    }
 
-    public Routes getRoutes() throws InvalidConfigurationException {
-        final Routes routes = (Routes) manager.getObject(JcrRoutes.class, 
configPath + '/' + urlMappingsPath);
-        log.info("Loaded URL configuration {}", routes);
-        return routes;
-
+    public void setRefreshDelay(long refreshDelay) {
+        this.refreshDelay = refreshDelay;
+    }
 
+    private boolean checkBuildTime() {
+        if ((lastBuildTime + refreshDelay) >  System.currentTimeMillis()) {
+            if (lastModified() > lastBuildTime) {
+                return true;
+            }
+        }
+        return false;
     }
 
-    @Override
-    public PageDefinitions getPageDefinitions() {
-        final PageDefinitions definitions = (PageDefinitions) 
manager.getObject(JcrPageDefinitions.class, configPath + '/' + 
configurationPath);
-        log.info("Loaded PAGE definitions {}", definitions);
-        return definitions;
+    public synchronized void shutdown() {
+//        repositoryFactory.removeListener(this);
     }
 
-    private void initConfigRoot() {
+    protected synchronized void loadConfig() {
+        Session session = null;
+        config = null;
         try {
-            if (!session.nodeExists(configPath)) {
-
-                final Node root = session.getNode("/");
-
-                root.addNode(configPath.substring(1, configPath.length()), 
"nt:unstructured");
-                session.save();
+            session = repository.login(credetials);
+            ObjectContentManager ocm = createManager(session);
+            JcrRoutes routes = (JcrRoutes) ocm.getObject(JcrRoutes.class, 
routesPath);
+            log.info("Loaded Routes configuration {}", routes);
+            JcrPageDefinitions definitions = (JcrPageDefinitions) 
ocm.getObject(JcrPageDefinitions.class, pageDefinitionsPath);
+            log.info("Loaded Page definitions {}", definitions);
+            Map<String, PageFragment> pages = new HashMap<String, 
PageFragment>();
+            for (PageFragment pf : definitions.getPageFragments()) {
+                pages.put(pf.getName(), pf);
             }
+            config = new PagesConfigImpl(routes.getRoutes(), pages);
+            lastBuildTime = System.currentTimeMillis();
+
         } catch (RepositoryException e) {
+            e.printStackTrace();  //To change body of catch statement use File 
| Settings | File Templates.
+        }
+        finally {
+            if (session != null && session.isLive()) {
+                session.logout();
+            }
+        }
+    }
+
+    @Override
+    public synchronized PagesConfig getConfig() throws 
InvalidConfigurationException {
+        PagesConfig existing = config;
 
-            throw new InvalidConfigurationException("Couldn't initialize 
configuration root path: " + configPath, e);
+        if (existing != null && !checkBuildTime()) {
+            return existing;
         }
+        loadConfig();
+        return config;
+
     }
 
-    private ObjectContentManager createManager() {
+    private ObjectContentManager createManager(Session session) {
         @SuppressWarnings("rawtypes")
         List<Class> classes = new ArrayList<Class>();
-        //
-        // implementations:
+
+        // persistent classes:
         classes.add(JcrRoute.class);
         classes.add(JcrRoutes.class);
-        classes.add(JcrPageDefinition.class);
         classes.add(JcrPageFragment.class);
         classes.add(JcrPageDefinitions.class);
 
@@ -116,6 +178,6 @@ public class JcrConfigManager implements
 
     public long lastModified() {
         // just make sure the model gets invalidated on the right jcr event
-        return 0;
+        return lastBuildTime;
     }
 }

Modified: 
rave/sandbox/content-services/rave-web-jcr/src/main/java/org/apache/rave/portal/web/mvc/config/jcr/JcrRoute.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/JcrRoute.java?rev=1383424&r1=1383423&r2=1383424&view=diff
==============================================================================
--- 
rave/sandbox/content-services/rave-web-jcr/src/main/java/org/apache/rave/portal/web/mvc/config/jcr/JcrRoute.java
 (original)
+++ 
rave/sandbox/content-services/rave-web-jcr/src/main/java/org/apache/rave/portal/web/mvc/config/jcr/JcrRoute.java
 Tue Sep 11 14:10:34 2012
@@ -31,41 +31,44 @@ import org.slf4j.LoggerFactory;
 /**
  * @version "$Id$"
  */
-@Node(discriminator = false, jcrType = "raveconfig:urlmapping", jcrMixinTypes 
= "mix:referenceable")
+@Node(discriminator = false, jcrType = "raveconfig:route", jcrMixinTypes = 
"mix:referenceable")
 public class JcrRoute implements Route {
 
     private static Logger log = LoggerFactory.getLogger(JcrRoute.class);
 
+    @Field(path = true, id = true)
+    private String jcrNodePath;
+
     @Field(jcrType = "String")
-    private String url;
+    private String path;
 
     @Field(jcrType = "String")
-    private String page;
+    private String target;
 
-    @Field(jcrType = "action")
+    @Field(jcrType = "String")
     private String action;
 
-    @Collection(jcrType = "raveconfig:urlmapping", jcrName = 
"raveconfig:urlmapping")
+    @Collection(elementClassName = JcrRoute.class, jcrType = 
"raveconfig:route", jcrName = "raveconfig:route")
     private List<Route> children;
 
     @Override
     public String getPath() {
-        return url;
+        return path;
     }
 
     @Override
-    public void setPath(String url) {
-        this.url = url;
+    public void setPath(String path) {
+        this.path = path;
     }
 
     @Override
     public String getTarget() {
-        return page;
+        return target;
     }
 
     @Override
     public void setTarget(String target) {
-        this.page = target;
+        this.target = target;
     }
 
     @Override
@@ -92,8 +95,9 @@ public class JcrRoute implements Route {
     public String toString() {
         final StringBuilder sb = new StringBuilder();
         sb.append("JcrRoute");
-        sb.append("{url='").append(url).append('\'');
-        sb.append(", page='").append(page).append('\'');
+        sb.append("{path='").append(path).append('\'');
+        sb.append(", target='").append(target).append('\'');
+        sb.append(", action='").append(action).append('\'');
         sb.append(", children=").append(children);
         sb.append('}');
         return sb.toString();

Modified: 
rave/sandbox/content-services/rave-web-jcr/src/main/java/org/apache/rave/portal/web/mvc/config/jcr/JcrRoutes.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/JcrRoutes.java?rev=1383424&r1=1383423&r2=1383424&view=diff
==============================================================================
--- 
rave/sandbox/content-services/rave-web-jcr/src/main/java/org/apache/rave/portal/web/mvc/config/jcr/JcrRoutes.java
 (original)
+++ 
rave/sandbox/content-services/rave-web-jcr/src/main/java/org/apache/rave/portal/web/mvc/config/jcr/JcrRoutes.java
 Tue Sep 11 14:10:34 2012
@@ -26,13 +26,12 @@ import org.apache.jackrabbit.ocm.mapper.
 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.Route;
-import org.apache.rave.portal.web.mvc.config.Routes;
 
 /**
  * @version "$Id$"
  */
-@Node(discriminator = false, jcrType = "raveconfig:urlconfiguration", 
jcrMixinTypes = "mix:referenceable")
-public class JcrRoutes implements Routes {
+@Node(discriminator = false, jcrType = "raveconfig:routes", jcrMixinTypes = 
"mix:referenceable")
+public class JcrRoutes {
 
     @Field(path = true, id = true)
     private String path;
@@ -40,7 +39,7 @@ public class JcrRoutes implements Routes
     @Field(jcrName = "raveconfig:name", jcrType = "String")
     private String name;
 
-    @Collection(elementClassName = JcrRoute.class, jcrType = 
"raveconfig:urlmapping")
+    @Collection(elementClassName = JcrRoute.class, jcrType = 
"raveconfig:route")
     private List<Route> routes;
 
     public JcrRoutes() {
@@ -50,18 +49,15 @@ public class JcrRoutes implements Routes
         this.name = name;
     }
 
-    @Override
     public String getName() {
         return name;
     }
 
-    @Override
     public void setName(String name) {
 
         this.name = name;
     }
 
-    @Override
     public List<Route> getRoutes() {
         if (routes == null) {
             return new ArrayList<Route>();
@@ -69,7 +65,6 @@ public class JcrRoutes implements Routes
         return routes;
     }
 
-    @Override
     public void setRoutes(List<Route> routes) {
         this.routes = routes;
     }

Modified: 
rave/sandbox/content-services/rave-web-jcr/src/main/resources/META-INF/rave/module.json
URL: 
http://svn.apache.org/viewvc/rave/sandbox/content-services/rave-web-jcr/src/main/resources/META-INF/rave/module.json?rev=1383424&r1=1383423&r2=1383424&view=diff
==============================================================================
--- 
rave/sandbox/content-services/rave-web-jcr/src/main/resources/META-INF/rave/module.json
 (original)
+++ 
rave/sandbox/content-services/rave-web-jcr/src/main/resources/META-INF/rave/module.json
 Tue Sep 11 14:10:34 2012
@@ -1,18 +1,11 @@
 {
-    "name":"pageconfiguration",
+    "name":"raveconfig",
     "namespaces":{
         "rave":"http://www.apache.org/rave/config/1.0";
     },
     "cnds":{
         "rave":{
-            "file":"rave-page-config.cnd"
-        }
-    },
-    "contents":{
-        "raveconfig":{
-            "file":"page-config.json",
-            "parent":"/",
-            "importBehavior":"merge"
+            "file":"raveconfig.cnd"
         }
     }
 }

Copied: 
rave/sandbox/content-services/rave-web-jcr/src/main/resources/raveconfig.cnd 
(from r1383356, 
rave/sandbox/content-services/rave-web-jcr/src/main/resources/rave-page-config.cnd)
URL: 
http://svn.apache.org/viewvc/rave/sandbox/content-services/rave-web-jcr/src/main/resources/raveconfig.cnd?p2=rave/sandbox/content-services/rave-web-jcr/src/main/resources/raveconfig.cnd&p1=rave/sandbox/content-services/rave-web-jcr/src/main/resources/rave-page-config.cnd&r1=1383356&r2=1383424&rev=1383424&view=diff
==============================================================================
--- 
rave/sandbox/content-services/rave-web-jcr/src/main/resources/rave-page-config.cnd
 (original)
+++ 
rave/sandbox/content-services/rave-web-jcr/src/main/resources/raveconfig.cnd 
Tue Sep 11 14:10:34 2012
@@ -27,23 +27,10 @@
 //############################################
 
 [raveconfig:pagefragment]  >  raveconfig:relaxed
- + raveconfig:parentfragment (raveconfig:pagefragment)
  + * (raveconfig:pagefragment) multiple
 
-[raveconfig:pagedefinition] >  raveconfig:pagefragment
-
-// collections
-[raveconfig:fragmentcollection]
-+ * (raveconfig:pagefragment) multiple
-
-[raveconfig:definitioncollection]
-+ * (raveconfig:pagedefinition) multiple
-
-
-
-[raveconfig:pageconfiguration] > raveconfig:relaxed
+[raveconfig:pagedefinitions] > raveconfig:relaxed
 + * (raveconfig:pagefragment) multiple
-+ * (raveconfig:pagedefinition) multiple
 
 
 //############################################
@@ -51,9 +38,8 @@
 //############################################
 
 
-[raveconfig:urlmapping]  >  raveconfig:relaxed
- + raveconfig:urlmapping (raveconfig:urlmapping)
- + * (raveconfig:urlmapping) multiple
+[raveconfig:route]  >  raveconfig:relaxed
+ + * (raveconfig:route) multiple
 
-[raveconfig:urlconfiguration] > raveconfig:relaxed
-+ * (raveconfig:urlmapping) multiple
\ No newline at end of file
+[raveconfig:routes] > raveconfig:relaxed
++ * (raveconfig:route) multiple
\ No newline at end of file

Modified: 
rave/sandbox/content-services/rave-web-jcr/src/test/java/org/apache/rave/portal/web/mvc/config/jcr/JcrConfigManagerTest.java
URL: 
http://svn.apache.org/viewvc/rave/sandbox/content-services/rave-web-jcr/src/test/java/org/apache/rave/portal/web/mvc/config/jcr/JcrConfigManagerTest.java?rev=1383424&r1=1383423&r2=1383424&view=diff
==============================================================================
--- 
rave/sandbox/content-services/rave-web-jcr/src/test/java/org/apache/rave/portal/web/mvc/config/jcr/JcrConfigManagerTest.java
 (original)
+++ 
rave/sandbox/content-services/rave-web-jcr/src/test/java/org/apache/rave/portal/web/mvc/config/jcr/JcrConfigManagerTest.java
 Tue Sep 11 14:10:34 2012
@@ -26,7 +26,7 @@ public class JcrConfigManagerTest extend
 
 //    private static Logger log = 
LoggerFactory.getLogger(JcrConfigManagerTest.class);
 //    public static final String CONFIG_ROOT = "/raveconfig";
-//    public static final String RAVE_CND = "rave-page-config.cnd";
+//    public static final String RAVE_CND = "raveconfig.cnd";
 //
 //    @Override
 //    public void setUp() throws Exception {

Added: 
rave/sandbox/content-services/rave-web-jcr/src/test/resources/META-INF/rave/module.json
URL: 
http://svn.apache.org/viewvc/rave/sandbox/content-services/rave-web-jcr/src/test/resources/META-INF/rave/module.json?rev=1383424&view=auto
==============================================================================
--- 
rave/sandbox/content-services/rave-web-jcr/src/test/resources/META-INF/rave/module.json
 (added)
+++ 
rave/sandbox/content-services/rave-web-jcr/src/test/resources/META-INF/rave/module.json
 Tue Sep 11 14:10:34 2012
@@ -0,0 +1,18 @@
+{
+    "name":"raveconfig",
+    "namespaces":{
+        "rave":"http://www.apache.org/rave/config/1.0";
+    },
+    "cnds":{
+        "rave":{
+            "file":"raveconfig.cnd"
+        }
+    },
+    "contents":{
+        "raveconfig":{
+            "file":"page-config.json",
+            "parent":"/",
+            "importBehavior":"merge"
+        }
+    }
+}

Modified: 
rave/sandbox/content-services/rave-web-jcr/src/test/resources/page-config.json
URL: 
http://svn.apache.org/viewvc/rave/sandbox/content-services/rave-web-jcr/src/test/resources/page-config.json?rev=1383424&r1=1383423&r2=1383424&view=diff
==============================================================================
--- 
rave/sandbox/content-services/rave-web-jcr/src/test/resources/page-config.json 
(original)
+++ 
rave/sandbox/content-services/rave-web-jcr/src/test/resources/page-config.json 
Tue Sep 11 14:10:34 2012
@@ -1,33 +1,44 @@
 {
-    "myConfiguration":{
-        "jcr:primaryType":"raveconfig:pageconfiguration",
-        "name":"myConfiguration",
-        "pageDefinitions":{
-            "jcr:primaryType":"raveconfig:pagedefinition",
-            "myPage":{
-                "jcr:primaryType":"raveconfig:pagedefinition",
-                "name":"myPage",
-                "path":"/mypage2",
-                "description":"Simple page",
-                
"controller":"org.apache.rave.unittest.NonExistingMyPageController",
-                "head":{
-                    "jcr:primaryType":"raveconfig:pagefragment",
-                    "name":"head",
-                    "path":"myHeader",
-                    
"controller":"org.apache.rave.unittest.NonExistingMyHeaderController"
-                },
-                "body":{
-                    "jcr:primaryType":"raveconfig:pagefragment",
-                    "name":"body",
-                    "path":"myBody",
-                    
"controller":"org.apache.rave.unittest.NonExistingMyContentController"
-                },
-                "footer":{
-                    "jcr:primaryType":"raveconfig:pagefragment",
-                    "name":"footer",
-                    "path":"myFooter",
-                    
"controller":"org.apache.rave.unittest.NonExistingMyFooterController"
-                }
+    "myRoutes":{
+        "jcr:primaryType":"raveconfig:routes",
+        "name":"myRoutes",
+        "route1":{
+            "jcr:primaryType":"raveconfig:route",
+            "name":"route1",
+            "path":"/mypage1",
+            "target":"/mypage",
+            "action": "action1"
+        },
+        "route2":{
+            "jcr:primaryType":"raveconfig:route",
+            "name":"route2",
+            "path":"/mypage2",
+            "target":"/mypage",
+            "action": "action2"
+        }
+    },
+    "myPages":{
+        "jcr:primaryType":"raveconfig:pagedefinitions",
+        "name":"myPages",
+        "myPage":{
+            "jcr:primaryType":"raveconfig:pagefragment",
+            "name":"myPage",
+            "description":"Simple page",
+            
"controller":"org.apache.rave.unittest.NonExistingMyPageController",
+            "head":{
+                "jcr:primaryType":"raveconfig:pagefragment",
+                "name":"head",
+                
"controller":"org.apache.rave.unittest.NonExistingMyHeaderController"
+            },
+            "body":{
+                "jcr:primaryType":"raveconfig:pagefragment",
+                "name":"body",
+                
"controller":"org.apache.rave.unittest.NonExistingMyContentController"
+            },
+            "footer":{
+                "jcr:primaryType":"raveconfig:pagefragment",
+                "name":"footer",
+                
"controller":"org.apache.rave.unittest.NonExistingMyFooterController"
             }
         }
     }

Modified: 
rave/sandbox/content-services/rave-web-jcr/src/test/resources/test-config.xml
URL: 
http://svn.apache.org/viewvc/rave/sandbox/content-services/rave-web-jcr/src/test/resources/test-config.xml?rev=1383424&r1=1383423&r2=1383424&view=diff
==============================================================================
--- 
rave/sandbox/content-services/rave-web-jcr/src/test/resources/test-config.xml 
(original)
+++ 
rave/sandbox/content-services/rave-web-jcr/src/test/resources/test-config.xml 
Tue Sep 11 14:10:34 2012
@@ -92,11 +92,18 @@
   <!-- FILE LOADING -->
   <bean name="routedHandlerMapping" 
class="org.apache.rave.portal.web.mvc.RoutedRequestMappingHandlerMapping">
     <property name="order" value="-1"/>
-    <property name="routesManager" ref="fileConfigurationManager"/>
+    <property name="configManager" ref="pagesConfigManager"/>
 
   </bean>
 
-  <bean id="fileConfigurationManager" 
class="org.apache.rave.portal.web.mvc.config.file.FilePageRoutesManager"/>
+  <bean id="pagesConfigManager" 
class="org.apache.rave.portal.web.mvc.config.jcr.JcrPagesConfigManager">
+    <constructor-arg index="0" ref="lazyRepositoryFactory"/>
+    <constructor-arg index="1" ref="jcrCredentials"/>
+    <constructor-arg index="2" value="/raveconfig/myRoutes"/>
+    <constructor-arg index="3" value="/raveconfig/myPages"/>
+    <property name="refreshDelay" value="3000"/>
+  </bean>
+
 
   <bean name="unroutedHandlerMapping" 
class="org.apache.rave.portal.web.mvc.UnRoutedRequestMappingHandlerMapping">
     <property name="order" value="0"/>


Reply via email to