package com.idega.content.tree; import java.io.IOException; import java.net.MalformedURLException; import java.net.URL; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.SortedMap; import javax.faces.component.html.HtmlOutputLink; import javax.faces.component.html.HtmlOutputText; import javax.faces.context.FacesContext; import org.apache.myfaces.custom.tree2.TreeNode; import org.jdom.Document; import org.jdom.Element; import org.jdom.JDOMException; import org.jdom.input.SAXBuilder; import com.idega.block.web2.presentation.Accordion; import com.idega.content.themes.business.TemplatesLoader; import com.idega.core.data.ICTreeNode; import com.idega.core.data.IWTreeNode; import com.idega.idegaweb.IWMainApplication; import com.idega.presentation.IWBaseComponent; import com.idega.presentation.IWContext; import com.idega.presentation.Layer; import com.idega.presentation.Script; import com.idega.presentation.text.Text; import com.idega.util.CoreConstants; import com.idega.util.CoreUtil; import com.idega.webface.IWTree; import com.idega.webface.WFTreeNode; import com.idega.webface.WFUtil; public class SiteTemplatesViewer extends IWBaseComponent { private Map <String, PageTemplate> pageMap = null; private SortedMap <String, SiteTemplate> siteMap = null; public SiteTemplatesViewer() { super(); FacesContext ctx = FacesContext.getCurrentInstance(); IWMainApplication iwma = IWMainApplication.getIWMainApplication(ctx); pageMap = TemplatesLoader.getInstance(iwma).getPageTemplates(); siteMap = TemplatesLoader.getInstance(iwma).getSiteTemplates(); } @Override protected void initializeComponent(FacesContext context) { Iterator<String> itrKeySet = null; if (siteMap.keySet() != null) { itrKeySet = siteMap.keySet().iterator(); } String mapKey = null; Layer container = new Layer(); add(container); Accordion accordion = new Accordion("site_templates"); accordion.setOnActiveScriptString("toggler.addClass('selectedToggler'); element.addClass('selectedStretch');"); accordion.setOnBackgroundScriptString("toggler.removeClass('selectedToggler'); element.removeClass('selectedStretch');"); container.add(accordion); int panelID = 0; Script script = new Script(); for(Iterator<String> it = itrKeySet; it.hasNext();) { panelID++; mapKey = it.next(); SiteTemplate currentSite = siteMap.get(mapKey); String panelName = mapKey; WFTreeNode rootNode = new WFTreeNode(new IWTreeNode(panelName)); rootNode = getPage(currentSite, rootNode); rootNode = settingIconURIsAndTemplateFiles(rootNode); IWTree tree = new IWTree(); tree.setValue(rootNode); tree.setShowRootNode(false); tree.setId("tree"+panelID); tree.setShowLines(false); tree.setVar("node"); tree.setRendererType("com.idega.webface.IWTree"); HtmlOutputLink linki = new HtmlOutputLink(); linki.setValue(CoreConstants.HASH); linki.getAttributes().put("iconURI", "testValue"); HtmlOutputText texti = new HtmlOutputText(); texti.setValueBinding("value",WFUtil.createValueBinding("#{node.description}")); linki.getChildren().add(texti); tree.getFacets().put("IWTreeNode",linki); tree.getAttributes().put("sourceTree", "true"); accordion.addPanel("panel"+panelID, new Text(panelName), tree); script.addScriptLine(new StringBuffer("window.addEvent('domready', function() {appendIdOfTree('tree").append(panelID).append("');});").toString()); } add(script); } private WFTreeNode settingIconURIsAndTemplateFiles(WFTreeNode node){ node.setIconURI(getIconUriByPageType(node.getPageType())); node.setTemplateURI(getTemplateFileByPageType(node.getPageType())); List<WFTreeNode> nodeChildren = node.getChildren(); if (nodeChildren != null) for (int i = 0; i < nodeChildren.size(); i++){ nodeChildren.set(i, settingIconURIsAndTemplateFiles(nodeChildren.get(i))); } return node; } private void preparePageMap() { if (pageMap == null) { IWContext iwc = CoreUtil.getIWContext(); IWMainApplication iwma = iwc.getApplicationContext().getIWMainApplication(); TemplatesLoader loader = TemplatesLoader.getInstance(iwma); pageMap = loader.getPageMap(); if(pageMap.isEmpty()){ loader.loadTemplatesFromBundles(); pageMap = loader.getPageMap(); } } } private String getTemplateFileByPageType(String pageType){ preparePageMap(); if (pageMap.get(pageType) == null) { return CoreConstants.EMPTY; } return pageMap.get(pageType).getTemplateFile(); } private String getIconUriByPageType(String pageType){ preparePageMap(); if (pageMap.get(pageType) == null) { return CoreConstants.EMPTY; } return pageMap.get(pageType).getIconFile(); } public TreeNode getTree(IWTreeNode rootNode){ ICTreeNode icnode = rootNode; return new WFTreeNode(icnode); } public WFTreeNode getPage(SiteTemplate currElement, WFTreeNode currNode){ Iterator<SiteTemplate> itr = (currElement.getChildStructure()).iterator(); String pageType = null; String iconFile = null; String templateFile = null; while(itr.hasNext()){ SiteTemplate current = itr.next(); WFTreeNode newNode = new WFTreeNode(new IWTreeNode(current.getName())); pageType = current.getType(); newNode.setPageType(pageType); iconFile = current.getIconFile(); templateFile = current.getTemplateFile(); PageTemplate pageTemplate = pageMap.get(pageType); if ((iconFile == null) && (pageType != null)){ if (pageTemplate != null) iconFile = pageMap.get(pageType).getIconFile(); } if ((templateFile == null) && (pageType != null)) if (pageTemplate != null) templateFile = pageMap.get(pageType).getTemplateFile(); newNode.setIconURI(iconFile); newNode.setTemplateURI(templateFile); if(!current.getChildStructure().isEmpty()){ newNode = getPage(current, newNode); } currNode.addChild(newNode); } return currNode; } public Document getXMLDocument(String link) { URL url = null; try { url = new URL(link); } catch (MalformedURLException e) { return null; } SAXBuilder builder = new SAXBuilder(); Document document = null; try { document = builder.build(url); } catch (JDOMException e) { return null; } catch (IOException e) { return null; } return document; } public SiteTemplate getNode(Element currElement){ String pageName = null; String pageType = null; String iconFile = null; String templateFile = null; SiteTemplate currNode = new SiteTemplate(); pageType = currElement.getAttributeValue("type"); currNode.setType(pageType); pageName = currElement.getAttributeValue("name"); currNode.setName(pageName); iconFile = currElement.getAttributeValue("iconfile"); templateFile = currElement.getAttributeValue("templatefile"); if ((iconFile == null) && (pageType != null)) iconFile = pageMap.get(pageType).getIconFile(); if ((templateFile == null) && (pageType != null)) templateFile = pageMap.get(pageType).getTemplateFile(); currNode.setIconFile(iconFile); currNode.setTemplateFile(templateFile); Iterator it = (currElement.getChildren()).iterator(); while(it.hasNext()){ currNode.addChild(getNode((Element)it.next())); } return currNode; } }