/* * $Id: DomainTree.java,v 1.5 2007/04/27 14:59:45 eiki Exp $ * Created on 26.5.2006 in project com.idega.builder * * Copyright (C) 2006 Idega Software hf. All Rights Reserved. * * This software is the proprietary information of Idega hf. * Use is subject to license terms. */ package com.idega.builder.business; import java.util.Collection; import java.util.Iterator; import javax.ejb.FinderException; import com.idega.builder.data.IBStartPage; import com.idega.builder.data.IBStartPageHome; import com.idega.core.builder.data.ICDomain; import com.idega.core.data.DefaultTreeNode; import com.idega.core.data.ICTreeNode; import com.idega.data.IDOLookup; import com.idega.data.IDOLookupException; import com.idega.idegaweb.IWApplicationContext; /** * <p> * Cache for each domain and its page and templates tree * </p> * Last modified: $Date: 2007/04/27 14:59:45 $ by $Author: eiki $ * * @author <a href="mailto:tryggvil@idega.com">tryggvil</a> * @version $Revision: 1.5 $ */ public class DomainTree extends DefaultTreeNode { private static final String PAGES_ID = "pages"; private static final String TEMPLATES_ID = "templates"; private ICDomain domain; private static String DOMAIN_TREE_KEY="ic_domain_tree_"; private final int PAGEVIEWER = 0; private final int TEMPLATEVIEWER = 1; public DomainTree(ICDomain domain){ this.domain=domain; } public static DomainTree getDomainTree(IWApplicationContext iwac){ ICDomain domain = BuilderLogic.getInstance().getCurrentDomain(); String domainKey = DOMAIN_TREE_KEY+domain.getPrimaryKey(); DomainTree node = (DomainTree) iwac.getApplicationAttribute(domainKey); if(node==null){ node = new DomainTree(domain); node.initialize(iwac); iwac.setApplicationAttribute(domainKey, node); } return node; } public static void clearCache(IWApplicationContext iwac){ ICDomain domain = iwac.getDomain(); String domainKey = DOMAIN_TREE_KEY+domain.getPrimaryKey(); iwac.removeApplicationAttribute(domainKey); } /** * <p> * TODO tryggvil describe method initialize * </p> * @param iwac */ private void initialize(IWApplicationContext iwac) { initialize(iwac, this.PAGEVIEWER); initialize(iwac, this.TEMPLATEVIEWER); } /** * <p> * TODO tryggvil describe method initialize * </p> * @param iwac */ private void initialize(IWApplicationContext iwc, int type) { int id = -1; ICTreeNode parent = null; if (type == this.PAGEVIEWER) { parent = getPagesNode(); id = this.domain.getStartPageID(); } else { parent = getTemplatesNode(); id = this.domain.getStartTemplateID(); } PageTreeNode startNode = new PageTreeNode(id, iwc); // // startNode.setOrder(order) // parent.getChildren().add(startNode); try { java.util.Collection coll = null; if (type == this.PAGEVIEWER) { coll = getStartPages(this.domain); } else { coll = getTemplateStartPages(this.domain); } java.util.Iterator it = coll.iterator(); //int order = 0; while (it.hasNext()) { //order++; com.idega.builder.data.IBStartPage startPage = (com.idega.builder.data.IBStartPage) it.next(); if (startPage.getPageId() != id) { PageTreeNode node = new PageTreeNode(startPage.getPageId(), iwc); // node.setOrder(order); parent.getChildren().add(node); // parent.getChildren(). } } } catch (Exception e) { e.printStackTrace(); //return null; } } private Collection getStartPages(ICDomain domain) throws IDOLookupException, FinderException { return ((IBStartPageHome) IDOLookup.getHome(IBStartPage.class)).findAllPagesByDomain(((Integer) domain.getPrimaryKey()).intValue()); } private Collection getTemplateStartPages(ICDomain domain) throws IDOLookupException, FinderException { return ((IBStartPageHome) IDOLookup.getHome(IBStartPage.class)).findAllTemplatesByDomain(((Integer) domain.getPrimaryKey()).intValue()); } public ICTreeNode getPagesNode(){ return getSubNode("Pages",PAGES_ID); } public ICTreeNode getTemplatesNode(){ return getSubNode("Templates",TEMPLATES_ID); } protected ICTreeNode getSubNode(String nodeName,String id){ DefaultTreeNode pagesNode = null; Collection children = getChildren(); for (Iterator iter = children.iterator(); iter.hasNext();) { ICTreeNode child = (ICTreeNode) iter.next(); if(child.getId().equals(id)){ return child; } } if(pagesNode==null){ pagesNode = new DefaultTreeNode(nodeName,id); addTreeNode(pagesNode); } return pagesNode; } }