Update of 
/var/cvs/contributions/CMSContainer/cmsc/sitemanagement/src/java/com/finalist/cmsc/services/sitemanagement
In directory 
james.mmbase.org:/tmp/cvs-serv6241/cmsc/sitemanagement/src/java/com/finalist/cmsc/services/sitemanagement

Modified Files:
        SiteCacheLoader.java SiteCache.java 
Log Message:
CMSC-997 Create an extensive testsuite for the sitecache


See also: 
http://cvs.mmbase.org/viewcvs/contributions/CMSContainer/cmsc/sitemanagement/src/java/com/finalist/cmsc/services/sitemanagement
See also: http://www.mmbase.org/jira/browse/CMSC-997


Index: SiteCacheLoader.java
===================================================================
RCS file: 
/var/cvs/contributions/CMSContainer/cmsc/sitemanagement/src/java/com/finalist/cmsc/services/sitemanagement/SiteCacheLoader.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -b -r1.3 -r1.4
--- SiteCacheLoader.java        16 May 2008 11:46:35 -0000      1.3
+++ SiteCacheLoader.java        3 Sep 2008 20:41:00 -0000       1.4
@@ -11,10 +11,13 @@
 
 import java.util.*;
 
+import net.sf.mmapps.modules.cloudprovider.CloudProviderFactory;
+
 import org.mmbase.bridge.*;
 import org.mmbase.bridge.util.HugeNodeListIterator;
 import org.mmbase.bridge.util.SearchUtil;
 import org.mmbase.cache.CachePolicy;
+import org.mmbase.module.core.MMBase;
 import org.mmbase.storage.search.SortOrder;
 import org.mmbase.storage.search.StepField;
 import org.mmbase.util.logging.Logger;
@@ -30,10 +33,24 @@
     /** MMbase logging system */
     private static final Logger log = 
Logging.getLoggerInstance(SiteCacheLoader.class.getName());
     
-    public Map<String, PageTree> loadPageTreeMap(Cloud cloud) {
+
+    public List<NavigationItemManager> getNavigationManagers() {
+       return NavigationManager.getNavigationManagers();
+    }
+
+    public Cloud getCloud() {
+       return CloudProviderFactory.getCloudProvider().getAnonymousCloud();
+    }
+
+    public int getNavrelRelationNumber() {
+       return 
MMBase.getMMBase().getRelDef().getNumberByName(NavigationUtil.NAVREL);
+    }
+
+    public Map<String, PageTree> loadPageTreeMap() {
+        Cloud cloud = getCloud();
         Map<String, PageTree> newtrees = new HashMap<String, PageTree>();
         
-        List<NavigationItemManager> navigationManagers = 
NavigationManager.getNavigationManagers();
+        List<NavigationItemManager> navigationManagers = 
getNavigationManagers();
         for (NavigationItemManager nim : navigationManagers) {
             if (nim.isRoot()) {
                 String nodeType = nim.getTreeManager();


Index: SiteCache.java
===================================================================
RCS file: 
/var/cvs/contributions/CMSContainer/cmsc/sitemanagement/src/java/com/finalist/cmsc/services/sitemanagement/SiteCache.java,v
retrieving revision 1.19
retrieving revision 1.20
diff -u -b -r1.19 -r1.20
--- SiteCache.java      9 Jun 2008 21:23:24 -0000       1.19
+++ SiteCache.java      3 Sep 2008 20:41:00 -0000       1.20
@@ -11,9 +11,6 @@
 
 import java.util.*;
 
-import net.sf.mmapps.modules.cloudprovider.CloudProviderFactory;
-
-import org.mmbase.bridge.Cloud;
 import org.mmbase.bridge.Node;
 import org.mmbase.core.event.*;
 import org.mmbase.module.core.MMBase;
@@ -29,18 +26,23 @@
 public final class SiteCache implements RelationEventListener, 
NodeEventListener {
 
    /** MMbase logging system */
-   private static final Logger log = 
Logging.getLoggerInstance(SiteCache.class.getName());
+   private static final Logger log = 
Logging.getLoggerInstance(SiteCache.class);
 
+   private final SiteCacheLoader loader;
    private Map<String, PageTree> trees = new HashMap<String, PageTree>();
 
-
    public SiteCache() {
+      this(new SiteCacheLoader());
+   }
+
+   public SiteCache(SiteCacheLoader loader) {
+      this.loader = loader;
       doSetupCache();
       registerListeners();
    }
 
    public void registerListeners() {
-       List<NavigationItemManager> navigationManagers = 
NavigationManager.getNavigationManagers();
+       List<NavigationItemManager> navigationManagers = 
loader.getNavigationManagers();
        for (NavigationItemManager nim : navigationManagers) {
            if (!nim.isRoot()) {
                String nodeType = nim.getTreeManager();
@@ -50,17 +52,10 @@
    }
 
    public void doSetupCache() {
-       Cloud cloud = getCloud();
-       SiteCacheLoader loader = new SiteCacheLoader();
-       Map<String, PageTree> newtrees = loader.loadPageTreeMap(cloud);
+       Map<String, PageTree> newtrees = loader.loadPageTreeMap();
        trees = newtrees;
    }
 
-
-   protected Cloud getCloud() {
-      return CloudProviderFactory.getCloudProvider().getAnonymousCloud();
-   }
-
    public void createTree(int siteId, String sitefragment) {
        PageTree siteTree = new PageTree(siteId, sitefragment);
        trees.put(sitefragment.toLowerCase(), siteTree);
@@ -218,7 +213,7 @@
                }
                int sourceNumber = event.getRelationSourceNumber();
                int destinationNumber = event.getRelationDestinationNumber();
-               Node sourceNode = getCloud().getNode(sourceNumber);
+               Node sourceNode = loader.getCloud().getNode(sourceNumber);
                String path = sourceNode.getStringValue(TreeUtil.PATH_FIELD);
 
                List<String> names = PageTree.getPathElements(path);
@@ -237,7 +232,9 @@
                int childIndex = (Integer) 
event.getNodeEvent().getNewValue(TreeUtil.RELATION_POS_FIELD);
                if (destTreeNode == null) {
                   // create new PageYreeNode
-                  Node destNode = getCloud().getNode(destinationNumber);
+                  Node destNode = loader.getCloud().getNode(destinationNumber);
+
+                  if (NavigationUtil.getChildCount(destNode) == 0) {
                   String path = destNode.getStringValue(TreeUtil.PATH_FIELD);
                   List<String> names = PageTree.getPathElements(path);
                   PageTree tree = getTree(names.get(0));
@@ -246,6 +243,12 @@
                   }
                }
                else {
+                     // this is NOT a new navigation item. SiteCache is 
invalid.
+                     // fastest way to recover (minimal number of queries) is 
a reset of the cache.
+                     doSetupCache();
+                  }
+               }
+               else {
                   // move PageTreeNode
                   int sourceNumber = event.getRelationSourceNumber();
 
@@ -270,7 +273,7 @@
 
 
    private boolean isChangeTreeEvent(RelationEvent event) {
-      int relationNumber = 
MMBase.getMMBase().getRelDef().getNumberByName(NavigationUtil.NAVREL);
+      int relationNumber = loader.getNavrelRelationNumber();
       if (event.getRole() == relationNumber) {
           boolean sourceIsTreeType = 
NavigationManager.getNavigationManager(event.getRelationSourceType()) != null;
           boolean destinationIsTreeType = 
NavigationManager.getNavigationManager(event.getRelationDestinationType()) != 
null;
@@ -279,7 +282,6 @@
       return false;
    }
 
-
    public void notify(NodeEvent event) {
       Integer key = event.getNodeNumber();
       if (key != null) {
_______________________________________________
Cvs mailing list
[email protected]
http://lists.mmbase.org/mailman/listinfo/cvs

Reply via email to