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