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

Modified Files:
        SiteManagementAdmin.java SiteManagementServiceMMBaseImpl.java 
        SiteManagement.java WorkflowSiteManagementAdminService.java 
        SiteManagementService.java SiteModelManager.java 
        SiteManagementAdminServiceMMBaseImpl.java 
        SiteManagementAdminService.java SiteCache.java 
Added Files:
        SiteCacheLoader.java 
Log Message:
CMSC-755 Navigation code refactored to use navigationitem


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-755


SiteCacheLoader.java is new



Index: SiteManagementAdmin.java
===================================================================
RCS file: 
/var/cvs/contributions/CMSContainer/cmsc/sitemanagement/src/java/com/finalist/cmsc/services/sitemanagement/SiteManagementAdmin.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -b -r1.2 -r1.3
--- SiteManagementAdmin.java    26 Nov 2007 11:43:39 -0000      1.2
+++ SiteManagementAdmin.java    28 Jan 2008 21:15:43 -0000      1.3
@@ -57,8 +57,8 @@
    }
 
 
-   public static boolean mayEdit(Page page) {
-      return cService.mayEdit(page);
+   public static boolean mayEdit(NavigationItem item) {
+      return cService.mayEdit(item);
    }
 
 


Index: SiteManagementServiceMMBaseImpl.java
===================================================================
RCS file: 
/var/cvs/contributions/CMSContainer/cmsc/sitemanagement/src/java/com/finalist/cmsc/services/sitemanagement/SiteManagementServiceMMBaseImpl.java,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -b -r1.12 -r1.13
--- SiteManagementServiceMMBaseImpl.java        7 Jan 2008 20:27:17 -0000       
1.12
+++ SiteManagementServiceMMBaseImpl.java        28 Jan 2008 21:15:43 -0000      
1.13
@@ -156,26 +156,13 @@
        return sites;
    }
 
-
-   @Override
-   public List<Page> getPages(Page page) {
-      if (page != null) {
-         List<Page> children = siteModelManager.getChildren(page);
-         removeInvalidNavigationsFromList(children);
-         return children;
-      }
-      return new ArrayList<Page>();
-   }
-
-
-   @Override
-   public List<Page> getPages(Site site) {
-      if (site != null) {
-         List<Page> children = siteModelManager.getChildren(site);
+   public <E extends NavigationItem> List<E> getNavigationItems(NavigationItem 
parent, Class<E> childClazz) {
+       if (parent != null) {
+          List<E> children = siteModelManager.getChildren(parent, childClazz);
          removeInvalidNavigationsFromList(children);
          return children;
       }
-      return new ArrayList<Page>();
+       return new ArrayList<E>();
    }
 
    @Override
@@ -190,7 +177,7 @@
 
    @Override
    public List<Stylesheet> getStylesheetForPageByPath(String path, boolean 
override) {
-      List<Page> pagesToRoot = getListFromPath(path);// get all pages to root
+      List<Page> pagesToRoot = getPagesFromPath(path);// get all pages to root
       List<Stylesheet> stylesheets = new ArrayList<Stylesheet>();
       Page page = null;
 
@@ -241,19 +228,19 @@
 
 
    @Override
-   public List<Page> getListFromPath(String path) {
-      List<Page> pagesForPath = siteModelManager.getPagesForPath(path);
+   public <E extends NavigationItem> List<E> getListFromPath(String path, 
Class<E> clazz) {
+      List<E> itemsForPath = siteModelManager.getItemsForPath(path, clazz);
       if (ServerUtil.isStaging()) {
-          for (Iterator<? extends NavigationItem> iterator = 
pagesForPath.iterator(); iterator.hasNext();) {
-             NavigationItem child = iterator.next();
+          for (Iterator<E> iterator = itemsForPath.iterator(); 
iterator.hasNext();) {
+             E child = iterator.next();
              if (!showNavigation(child)) {
-                pagesForPath.clear();
+                itemsForPath.clear();
                 break;
              }
           }
       }
 
-      return pagesForPath;
+      return itemsForPath;
    }
 
 
@@ -264,13 +251,13 @@
 
 
    @Override
-   public String getPath(int pageId, boolean includeRoot) {
-      Page page = (Page) siteModelManager.getNavigationItem(pageId);
-      if (page == null) {
+   public String getPath(int itemId, boolean includeRoot) {
+      NavigationItem item = siteModelManager.getNavigationItem(itemId);
+      if (item == null) {
          return null;
       }
       else {
-         return siteModelManager.getPath(page, includeRoot);
+         return siteModelManager.getPath(item, includeRoot);
       }
    }
 
@@ -349,7 +336,7 @@
 
    @Override
    public List<Integer> getPageImagesForPath(String name, String path) {
-      List<Page> pagesToRoot = getListFromPath(path);// get all pages to root
+      List<Page> pagesToRoot = getPagesFromPath(path);// get all pages to root
 
       for (int count = pagesToRoot.size() - 1; count >= 0; count--) {
          Page page = pagesToRoot.get(count);


Index: SiteManagement.java
===================================================================
RCS file: 
/var/cvs/contributions/CMSContainer/cmsc/sitemanagement/src/java/com/finalist/cmsc/services/sitemanagement/SiteManagement.java,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -b -r1.8 -r1.9
--- SiteManagement.java 3 Dec 2007 13:10:26 -0000       1.8
+++ SiteManagement.java 28 Jan 2008 21:15:43 -0000      1.9
@@ -13,6 +13,7 @@
 
 import javax.servlet.http.HttpServletRequest;
 
+import org.apache.commons.lang.StringUtils;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
@@ -59,14 +60,16 @@
       return cService.getSites();
    }
 
-
-   public static List<Page> getPages(Page page) {
-      return cService.getPages(page);
+   public static <E extends NavigationItem> List<E> 
getNavigationItems(NavigationItem parent, Class<E> childClazz) {
+       return cService.getNavigationItems(parent, childClazz);
    }
 
+   public static List<NavigationItem> getNavigationItems(NavigationItem item) {
+       return cService.getNavigationItems(item);
+   }
 
-   public static List<Page> getPages(Site site) {
-      return cService.getPages(site);
+   public static List<Page> getPages(Page page) {
+       return cService.getPages(page);
    }
 
 
@@ -95,12 +98,15 @@
    }
 
 
-   public static String getPath(int pageid, boolean includeRoot) {
-      return cService.getPath(pageid, includeRoot);
+   public static String getPath(int itemId, boolean includeRoot) {
+      return cService.getPath(itemId, includeRoot);
    }
 
+   public static List<Page> getPagesFromPath(String path) {
+       return cService.getPagesFromPath(path);
+   }
 
-   public static List<Page> getListFromPath(String path) {
+   public static List<NavigationItem> getListFromPath(String path) {
       return cService.getListFromPath(path);
    }
 
@@ -165,8 +171,8 @@
    }
 
 
-   public static String getSite(NavigationItem page) {
-      return cService.getSite(page);
+   public static String getSite(NavigationItem item) {
+      return cService.getSite(item);
    }
 
 
@@ -174,22 +180,51 @@
       cService.resetSiteCache();
    }
 
+   public static NavigationItem convertToNavigationItem(Object dest) {
+        NavigationItem item = null;
+        if (dest instanceof NavigationItem) {
+            item = (NavigationItem) dest;
+        }
+        else
+            if (dest instanceof Integer) {
+                item = convertToNavigationItemInteger((Integer) dest);
+            }
+            else
+                if (dest instanceof String) {
+                    item = convertToNavigationItemString((String) dest);
+                }
+                else {
+                    throw new IllegalArgumentException(
+                            "only NavigationItem, integer or string allowed: " 
+ dest.getClass());
+                }
+        return item;
+    }
+
    /**
-    * Here for downwards compatibility
+     * Set destination node number to navigate to.
     * 
-    * @deprecated because we now have getNavigationItem
+     * @param n the node number
     */
-   public static Page getPage(int number) {
-      return (Page) getNavigationItem(number);
+    public static NavigationItem convertToNavigationItemInteger(Integer n) {
+        return SiteManagement.getNavigationItem(n.intValue());
    }
 
-
    /**
-    * Here for downwards compatibility
+     * Set the destination node path to navigate to.
     * 
-    * @deprecated because we now have getNavigationItemFromPath
+     * @param s comma, slash or space separated list of node numbers and/or 
aliases
     */
-   public static Page getPageFromPath(String path) {
-      return (Page) getNavigationItemFromPath(path);
+    public static NavigationItem convertToNavigationItemString(String s) {
+        NavigationItem temp = null;
+        if (!StringUtils.isBlank(s)) {
+            if (StringUtils.isNumeric(s)) {
+                temp = SiteManagement.getNavigationItem(Integer.parseInt(s));
+            }
+            else {
+                temp = SiteManagement.getNavigationItemFromPath(s);
    }
+        }
+        return temp;
+    }
+
 }


Index: WorkflowSiteManagementAdminService.java
===================================================================
RCS file: 
/var/cvs/contributions/CMSContainer/cmsc/sitemanagement/src/java/com/finalist/cmsc/services/sitemanagement/WorkflowSiteManagementAdminService.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -b -r1.2 -r1.3
--- WorkflowSiteManagementAdminService.java     26 Nov 2007 11:43:39 -0000      
1.2
+++ WorkflowSiteManagementAdminService.java     28 Jan 2008 21:15:43 -0000      
1.3
@@ -21,12 +21,12 @@
 public class WorkflowSiteManagementAdminService extends 
SiteManagementAdminServiceMMBaseImpl {
 
    @Override
-   public boolean mayEdit(Page page) {
-      if (super.mayEdit(page)) {
+   public boolean mayEdit(NavigationItem item) {
+      if (super.mayEdit(item)) {
          Cloud cloud = getUserCloud();
-         Node pageNode = cloud.getNode(page.getId());
-         UserRole userrole = NavigationUtil.getRole(pageNode.getCloud(), 
pageNode, false);
-         return Workflow.mayEdit(pageNode, userrole);
+         Node itemNode = cloud.getNode(item.getId());
+         UserRole userrole = NavigationUtil.getRole(itemNode.getCloud(), 
itemNode, false);
+         return Workflow.mayEdit(itemNode, userrole);
       }
       return false;
    }


Index: SiteManagementService.java
===================================================================
RCS file: 
/var/cvs/contributions/CMSContainer/cmsc/sitemanagement/src/java/com/finalist/cmsc/services/sitemanagement/SiteManagementService.java,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -b -r1.8 -r1.9
--- SiteManagementService.java  3 Dec 2007 13:10:26 -0000       1.8
+++ SiteManagementService.java  28 Jan 2008 21:15:43 -0000      1.9
@@ -43,11 +43,15 @@
    public abstract List<Site> getSites();
 
 
-   public abstract List<Page> getPages(Page page);
-
-
-   public abstract List<Page> getPages(Site site);
+   public List<NavigationItem> getNavigationItems(NavigationItem item) {
+       return getNavigationItems(item, NavigationItem.class);
+   }
+
+   public List<Page> getPages(Page page) {
+      return getNavigationItems(page, Page.class);
+   }
 
+   public abstract <E extends NavigationItem> List<E> 
getNavigationItems(NavigationItem parent, Class<E> childClazz);
 
    public abstract NavigationItem getNavigationItem(int id);
 
@@ -61,13 +65,20 @@
    public abstract String getPath(NavigationItem item, boolean includeRoot);
 
 
-   public abstract String getPath(int pageid, boolean includeRoot);
+   public abstract String getPath(int itemId, boolean includeRoot);
 
 
    public abstract List<Stylesheet> getStylesheetForPageByPath(String page, 
boolean override);
 
+   public List<NavigationItem> getListFromPath(String path) {
+       return getListFromPath(path, NavigationItem.class);
+   }
+
+   public List<Page> getPagesFromPath(String path) {
+       return getListFromPath(path, Page.class);
+   }
 
-   public abstract List<Page> getListFromPath(String path);
+   public abstract <E extends NavigationItem> List<E>  getListFromPath(String 
path, Class<E> clazz);
 
 
    public abstract List<View> getViews(String screenId, String layoutId);
@@ -110,4 +121,5 @@
 
 
    public abstract void resetSiteCache();
+
 }


Index: SiteModelManager.java
===================================================================
RCS file: 
/var/cvs/contributions/CMSContainer/cmsc/sitemanagement/src/java/com/finalist/cmsc/services/sitemanagement/SiteModelManager.java,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -b -r1.9 -r1.10
--- SiteModelManager.java       30 Nov 2007 10:58:31 -0000      1.9
+++ SiteModelManager.java       28 Jan 2008 21:15:43 -0000      1.10
@@ -79,14 +79,14 @@
 
 
    public void resetSiteCache() {
-      siteCache = new SiteCache();
+      siteCache.doSetupCache();
    }
 
 
    public boolean hasNavigationItem(String path) {
       if (path != null && path.length() > 0) {
-         Integer pageId = siteCache.getPage(path);
-         return pageId != null;
+         Integer itemId = siteCache.getPage(path);
+         return itemId != null;
       }
       return false;
    }
@@ -120,9 +120,9 @@
    public Site getSite(String path) {
       if (path != null && path.length() > 0) {
          try {
-            Integer pageId = siteCache.getSite(path);
-            if (pageId != null) {
-               return (Site) getCache(NAVIGATION_CACHE).get(pageId);
+            Integer itemId = siteCache.getSite(path);
+            if (itemId != null) {
+               return (Site) getCache(NAVIGATION_CACHE).get(itemId);
             }
             else {
                log.debug("Site not found for path " + path);
@@ -159,15 +159,15 @@
    }
 
 
-   public List<Page> getPagesForPath(String path) {
-      List<Page> pages = new ArrayList<Page>();
+   public <E extends NavigationItem> List<E> getItemsForPath(String path, 
Class<E> clazz) {
+      List<E> items = new ArrayList<E>();
       if (path != null && path.length() > 0) {
          try {
-            List<Integer> pageIds = siteCache.getPagesForPath(path);
-            for (Integer pageId : pageIds) {
-               Page page = (Page) getCache(NAVIGATION_CACHE).get(pageId);
-               if (page != null) {
-                  pages.add(page);
+            List<Integer> itemIds = siteCache.getItemsForPath(path);
+            for (Integer itemId : itemIds) {
+               NavigationItem item = (NavigationItem) 
getCache(NAVIGATION_CACHE).get(itemId);
+               if (item != null && clazz.isInstance(item)) {
+                  items.add(clazz.cast(item));
                }
             }
          }
@@ -175,19 +175,23 @@
             log.info("" + e.getMessage(), e);
          }
       }
-      return pages;
+      return items;
    }
 
 
-   public List<Page> getChildren(NavigationItem findpage) {
-      List<Page> pages = new ArrayList<Page>();
-      if (findpage != null) {
+   public List<NavigationItem> getChildren(NavigationItem parent) {
+       return getChildren(parent, NavigationItem.class);
+   }
+
+   public <E extends NavigationItem> List<E> getChildren(NavigationItem 
parent, Class<E> childClazz) {
+      List<E> items = new ArrayList<E>();
+      if (parent != null) {
          try {
-            List<Integer> pageIds = siteCache.getChildren(findpage);
-            for (Integer pageId : pageIds) {
-               NavigationItem navigationItem = (NavigationItem) 
getCache(NAVIGATION_CACHE).get(pageId);
-               if (navigationItem != null && navigationItem instanceof Page) {
-                  pages.add((Page) navigationItem);
+            List<Integer> itemIds = siteCache.getChildren(parent);
+            for (Integer itemId : itemIds) {
+               NavigationItem navigationItem = (NavigationItem) 
getCache(NAVIGATION_CACHE).get(itemId);
+               if (navigationItem != null &&  
childClazz.isInstance(navigationItem)) {
+                  items.add(childClazz.cast(navigationItem));
                }
             }
          }
@@ -195,7 +199,7 @@
             log.info("" + e.getMessage(), e);
          }
       }
-      return pages;
+      return items;
    }
 
 
@@ -335,8 +339,8 @@
    }
 
 
-   private List<Integer> getDefinitions(String screenId, String layoutId) {
-      Page page = (Page) getNavigationItem(Integer.parseInt(screenId));
+   private List<Integer> getDefinitions(String pageId, String layoutId) {
+      Page page = (Page) getNavigationItem(Integer.parseInt(pageId));
       Layout layout = getLayout(page.getLayout());
       return layout.getAllowedDefinitions(layoutId);
    }
@@ -387,14 +391,14 @@
    }
 
 
-   public void clearPage(String pageId) {
-      clearPage(Integer.valueOf(pageId));
+   public void clearItem(String itemId) {
+      clearItem(Integer.valueOf(itemId));
    }
 
 
-   public void clearPage(int pageId) {
+   public void clearItem(int itemId) {
       try {
-         getCache(NAVIGATION_CACHE).put(pageId, null);
+         getCache(NAVIGATION_CACHE).put(itemId, null);
       }
       catch (CacheException e) {
          log.info("" + e.getMessage(), e);
@@ -409,13 +413,4 @@
       return layout.getNames();
    }
 
-   /*
-    * [FP] public RssFeed getRssFeed(String path) { if (path != null &&
-    * path.length() > 0) { Integer rssFeed = siteCache.getPage(path); if
-    * (rssFeed != null) { return getRssFeed(rssFeed); } else { log.debug("Page
-    * not found for path " + path); } } return null; } public RssFeed
-    * getRssFeed(int rssFeedId) { try { return (RssFeed)
-    * getCache(NAVIGATION_CACHE).get(rssFeedId); } catch (CacheException e) {
-    * log.info("" + e.getMessage(), e); } return null; }
-    */
 }


Index: SiteManagementAdminServiceMMBaseImpl.java
===================================================================
RCS file: 
/var/cvs/contributions/CMSContainer/cmsc/sitemanagement/src/java/com/finalist/cmsc/services/sitemanagement/SiteManagementAdminServiceMMBaseImpl.java,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -b -r1.7 -r1.8
--- SiteManagementAdminServiceMMBaseImpl.java   30 Nov 2007 10:58:31 -0000      
1.7
+++ SiteManagementAdminServiceMMBaseImpl.java   28 Jan 2008 21:15:43 -0000      
1.8
@@ -134,7 +134,7 @@
          PortletUtil.setPagePortlet(cloud, pageId, portletId, id);
          updatePage(pageId);
 
-         siteModelManager.clearPage(pageId);
+         siteModelManager.clearItem(pageId);
       }
       catch (Exception e) {
          log.error("something went wrong while adding portlet (" + portletId + 
")", e);
@@ -155,7 +155,7 @@
          PortletUtil.setPagePortlet(cloud, pageId, newNode, layoutId);
          updatePage(pageId);
 
-         siteModelManager.clearPage(pageId);
+         siteModelManager.clearItem(pageId);
       }
       catch (Exception e) {
          log.error("something went wrong while creating portlet (" + 
portletName + ")", e);
@@ -172,21 +172,23 @@
          PortletUtil.deletePagePortlet(getUserCloud(), page.getId(), 
portlet.getId(), layoutId);
          updatePage(page.getId());
 
-         siteModelManager.clearPage(page.getId());
+         siteModelManager.clearItem(page.getId());
       }
    }
 
 
    @Override
-   public boolean mayEdit(Page page) {
+   public boolean mayEdit(NavigationItem item) {
       boolean result = false;
       try {
          Cloud cloud = getUserCloud();
-         UserRole role = NavigationUtil.getRole(cloud, page.getId());
+         if (cloud != null) {
+             UserRole role = NavigationUtil.getRole(cloud, item.getId());
          result = role != null && SecurityUtil.isWriter(role);
       }
+      }
       catch (Exception e) {
-         log.error("something went wrong checking page edit (" + page.getId() 
+ ")");
+         log.error("something went wrong checking page edit (" + item.getId() 
+ ")");
          if (log.isDebugEnabled()) {
             log.debug(e);
          }
@@ -200,6 +202,7 @@
       boolean result = false;
       try {
          Cloud cloud = getUserCloud();
+         if (cloud != null) {
          PortletDefinition definition = 
siteModelManager.getPortletDefinition(portlet.getDefinition());
          if (definition.isSingle()) {
             result = cloud.getUser().getRank().getInt() >= 
definition.getRank();
@@ -208,6 +211,7 @@
             result = true;
          }
       }
+      }
       catch (Exception e) {
          log.error("something went wrong checking portlet edit (" + 
portlet.getId() + ")");
          if (log.isDebugEnabled()) {


Index: SiteManagementAdminService.java
===================================================================
RCS file: 
/var/cvs/contributions/CMSContainer/cmsc/sitemanagement/src/java/com/finalist/cmsc/services/sitemanagement/SiteManagementAdminService.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -b -r1.3 -r1.4
--- SiteManagementAdminService.java     26 Nov 2007 11:43:39 -0000      1.3
+++ SiteManagementAdminService.java     28 Jan 2008 21:15:43 -0000      1.4
@@ -38,7 +38,7 @@
    public abstract void deletePagePortlet(Page page, Portlet portlet, String 
layoutId);
 
 
-   public abstract boolean mayEdit(Page page);
+   public abstract boolean mayEdit(NavigationItem item);
 
 
    public abstract boolean mayEdit(Portlet portlet);


Index: SiteCache.java
===================================================================
RCS file: 
/var/cvs/contributions/CMSContainer/cmsc/sitemanagement/src/java/com/finalist/cmsc/services/sitemanagement/SiteCache.java,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -b -r1.14 -r1.15
--- SiteCache.java      18 Jan 2008 20:13:01 -0000      1.14
+++ SiteCache.java      28 Jan 2008 21:15:43 -0000      1.15
@@ -9,35 +9,21 @@
  */
 package com.finalist.cmsc.services.sitemanagement;
 
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 import net.sf.mmapps.modules.cloudprovider.CloudProvider;
 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.core.event.Event;
-import org.mmbase.core.event.NodeEvent;
-import org.mmbase.core.event.NodeEventListener;
-import org.mmbase.core.event.RelationEvent;
-import org.mmbase.core.event.RelationEventListener;
+import org.mmbase.bridge.Cloud;
+import org.mmbase.bridge.Node;
+import org.mmbase.core.event.*;
 import org.mmbase.module.core.MMBase;
-import org.mmbase.storage.search.SortOrder;
-import org.mmbase.storage.search.StepField;
 import org.mmbase.util.logging.Logger;
 import org.mmbase.util.logging.Logging;
 
 import com.finalist.cmsc.beans.om.NavigationItem;
 import com.finalist.cmsc.mmbase.TreeUtil;
-import com.finalist.cmsc.navigation.NavigationItemManager;
-import com.finalist.cmsc.navigation.NavigationManager;
-import com.finalist.cmsc.navigation.NavigationUtil;
+import com.finalist.cmsc.navigation.*;
 import com.finalist.cmsc.services.sitemanagement.tree.PageTree;
 import com.finalist.cmsc.services.sitemanagement.tree.PageTreeNode;
 
@@ -53,145 +39,42 @@
    public SiteCache() {
       this.cloudProvider = CloudProviderFactory.getCloudProvider();
       doSetupCache();
+      registerListeners();
    }
 
-
-   public void doSetupCache() {
-       Cloud cloud = getCloud();
+   public void registerListeners() {
        List<NavigationItemManager> navigationManagers = 
NavigationManager.getNavigationManagers();
        for (NavigationItemManager nim : navigationManagers) {
-           if (nim.isRoot()) {
-               String nodeType = nim.getTreeManager();
-               String fragmentField = 
NavigationUtil.getFragmentFieldname(nodeType);
-               loadTrees(cloud, nodeType, fragmentField);
-           }
-       }
-
-       Map<Integer,String> itemUrlFragments = new HashMap<Integer, String>();
-       
-       for (NavigationItemManager nim : navigationManagers) {
            if (!nim.isRoot()) {
                String nodeType = nim.getTreeManager();
-               String fragmentField = 
NavigationUtil.getFragmentFieldname(nodeType);
-               loadNavigationItems(cloud, nodeType, fragmentField, 
itemUrlFragments);
                MMBase.getMMBase().addNodeRelatedEventsListener(nodeType, this);
            }
        }
-       
-       loadTreeStructure(cloud, itemUrlFragments);
-   }
-   
-   @SuppressWarnings("unchecked")
-   private void loadTrees(Cloud cloud, String nodeType, String fragmentField) {
-       NodeManager sitesManager = cloud.getNodeManager(nodeType);
-       NodeList sites = sitesManager.getList(sitesManager.createQuery());
-       for (Iterator<Node> iter = sites.iterator(); iter.hasNext();) {
-          Node siteNode = iter.next();
-          int siteId = siteNode.getNumber();
-          String sitefragment = siteNode.getStringValue(fragmentField);
-          createTree(siteId, sitefragment);
-       }
    }
 
-   @SuppressWarnings("unchecked")
-   private void loadNavigationItems(Cloud cloud, String nodeType, String 
fragmentField, Map<Integer, String> itemUrlFragments) {
-       NodeManager manager = cloud.getNodeManager(nodeType);
-
-       NodeQuery q = manager.createQuery();
-       List<String> types = new ArrayList<String>();
-       types.add(manager.getName());
-       SearchUtil.addTypeConstraints(q, types);
-       q.setCachePolicy(CachePolicy.NEVER);
-       
-       for (NodeIterator iter = new HugeNodeListIterator(q); iter.hasNext();) {
-           Node navNode = iter.nextNode();
-           int number = navNode.getNumber();
-           String urlfragment = navNode.getStringValue(fragmentField);
-           itemUrlFragments.put(number, urlfragment);
-       }
+   public void doSetupCache() {
+       Cloud cloud = getCloud();
+       SiteCacheLoader loader = new SiteCacheLoader();
+       Map<String, PageTree> newtrees = loader.loadPageTreeMap(cloud);
+       trees = newtrees;
    }
    
-   @SuppressWarnings("unchecked")
-   private void loadTreeStructure(Cloud cloud, Map<Integer,String> 
itemUrlFragments) {
-      List<Node> unfinishedNodes = new ArrayList<Node>();
-
-      NodeManager navrel = cloud.getNodeManager(NavigationUtil.NAVREL);
-
-      Query q = cloud.createQuery();
-      q.addStep(navrel);
-
-      StepField sourceField = q.addField(NavigationUtil.NAVREL + ".snumber");
-      StepField posField = q.addField(NavigationUtil.NAVREL + ".pos");
-
-      q.addSortOrder(sourceField, SortOrder.ORDER_ASCENDING);
-      q.addSortOrder(posField, SortOrder.ORDER_ASCENDING);
-      q.setCachePolicy(CachePolicy.NEVER);
 
-      for (NodeIterator iter = new HugeNodeListIterator(q); iter.hasNext();) {
-         Node navrelNode = iter.nextNode();
-
-         int sourceNumber = navrelNode.getIntValue(NavigationUtil.NAVREL + 
".snumber");
-         int destNumber = navrelNode.getIntValue(NavigationUtil.NAVREL + 
".dnumber");
-         int childIndex = navrelNode.getIntValue(NavigationUtil.NAVREL + 
".pos");
-         String fragment = itemUrlFragments.get(destNumber);
-         
-         boolean parentNotFound = true;
-         for (PageTree tree : trees.values()) {
-            PageTreeNode pageTreeNode = tree.insert(sourceNumber, destNumber, 
fragment, childIndex);
-            if (pageTreeNode != null) {
-               parentNotFound = false;
-               break;
-            }
-         }
-         if (parentNotFound) {
-            unfinishedNodes.add(navrelNode);
-         }
+   protected Cloud getAdminCloud() {
+      return cloudProvider.getAdminCloud();
       }
-      int oldUnfinishedSize = unfinishedNodes.size() + 1;
-      while (oldUnfinishedSize > unfinishedNodes.size()) {
-         oldUnfinishedSize = unfinishedNodes.size();
-
-         for (Iterator<Node> iter = unfinishedNodes.iterator(); 
iter.hasNext();) {
-            Node navrelNode = iter.next();
 
-            int sourceNumber = navrelNode.getIntValue(NavigationUtil.NAVREL + 
".snumber");
-            int destNumber = navrelNode.getIntValue(NavigationUtil.NAVREL + 
".dnumber");
-            int childIndex = navrelNode.getIntValue(NavigationUtil.NAVREL + 
".pos");
-            String fragment = itemUrlFragments.get(destNumber);
-
-            for (PageTree tree : trees.values()) {
-               PageTreeNode pageTreeNode = tree.insert(sourceNumber, 
destNumber, fragment, childIndex);
-               if (pageTreeNode != null) {
-                  iter.remove();
-                  break;
-               }
-            }
-         }
-      }
 
-      for (Iterator<Node> iter = unfinishedNodes.iterator(); iter.hasNext();) {
-         Node navrelNode = iter.next();
-         log.warn("Page treenode not found for navrel: " + navrelNode);
-      }
+   protected Cloud getCloud() {
+      return cloudProvider.getAnonymousCloud();
    }
 
-
    public void createTree(int siteId, String sitefragment) {
       PageTree siteTree = new PageTree(siteId, sitefragment);
       trees.put(sitefragment.toLowerCase(), siteTree);
    }
 
 
-   protected Cloud getAdminCloud() {
-      return cloudProvider.getAdminCloud();
-   }
-
-
-   protected Cloud getCloud() {
-      return cloudProvider.getAnonymousCloud();
-   }
-
-
    public Integer getSite(String path) {
       List<String> names = PageTree.getPathElements(path);
       PageTree tree = getTree(names.get(0));
@@ -292,7 +175,7 @@
    }
 
 
-   public List<Integer> getPagesForPath(String path) {
+   public List<Integer> getItemsForPath(String path) {
       List<Integer> pageIds = new ArrayList<Integer>();
 
       List<String> names = PageTree.getPathElements(path);
@@ -304,8 +187,8 @@
    }
 
 
-   public String getPath(NavigationItem page, boolean includeRoot) {
-      PageTreeNode pageTreeNode = getPageTreeNode(page);
+   public String getPath(NavigationItem item, boolean includeRoot) {
+      PageTreeNode pageTreeNode = getPageTreeNode(item);
       if (pageTreeNode != null) {
          return pageTreeNode.getPathStr(includeRoot);
       }
@@ -395,20 +278,14 @@
 
 
    private boolean isChangeTreeEvent(RelationEvent event) {
-      boolean sourceIsTreeType = false;
-      boolean destinationIsTreeType = false;
-
-      for (NavigationItemManager manager : 
NavigationManager.getNavigationManagers()) {
-         String treeManager = manager.getTreeManager();
-         if (treeManager.equals(event.getRelationSourceType())) {
-            sourceIsTreeType = true;
-         }
-         if (treeManager.equals(event.getRelationDestinationType())) {
-            destinationIsTreeType = true;
-         }
-      }
+      int relationNumber = 
MMBase.getMMBase().getRelDef().getNumberByName(NavigationUtil.NAVREL);
+      if (event.getRole() == relationNumber) { 
+          boolean sourceIsTreeType = 
NavigationManager.getNavigationManager(event.getRelationSourceType()) != null;
+          boolean destinationIsTreeType = 
NavigationManager.getNavigationManager(event.getRelationDestinationType()) != 
null;
       return sourceIsTreeType && destinationIsTreeType;
    }
+      return false;
+   }
 
 
    public void notify(NodeEvent event) {
_______________________________________________
Cvs mailing list
Cvs@lists.mmbase.org
http://lists.mmbase.org/mailman/listinfo/cvs

Reply via email to