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