/*
* $Id: BuilderRootViewNode.java,v 1.9 2008/03/27 20:16:25 tryggvil Exp $
* Created on 16.9.2004
*
* Copyright (C) 2004 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.view;
import java.util.HashMap;
import java.util.Map;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import com.idega.core.builder.data.ICDomain;
import com.idega.core.view.DefaultViewNode;
import com.idega.core.view.ViewNode;
import com.idega.core.view.ViewNodeBase;
import com.idega.idegaweb.IWMainApplication;
import com.idega.presentation.IWContext;
/**
* <p>
* This is the ViewNode that is by default mapped to the root of the builder viewnode hierarchy, i.e. the one that is by
* default mapped under '/pages/'. The instance of this class is the one that handles precicely this url, i.e. the
* one on the root for pages.
* </p>
* Last modified: $Date: 2008/03/27 20:16:25 $ by $Author: tryggvil $
*
* @author <a href="mailto:tryggvil@idega.com">tryggvil</a>
* @version $Revision: 1.9 $
*/
public class BuilderRootViewNode extends DefaultViewNode {
private Map domainNodeMap;
/**
* @param viewId
* @param parent
*/
public BuilderRootViewNode(String viewId, ViewNode parent) {
super(viewId, parent);
}
/**
* @param iwma
*/
public BuilderRootViewNode(IWMainApplication iwma) {
super(iwma);
}
public UIComponent createComponent(FacesContext context){
ViewNode defaultChild = getDomainNode(context);
return defaultChild.createComponent(context);
}
private ViewNode getDomainNode(FacesContext context) {
ICDomain domain = getDomainForRequest(context);
BuilderDomainViewNode builderNode = getDefaultNodeForDomain(domain);
return builderNode;
}
private BuilderDomainViewNode getDefaultNodeForDomain(ICDomain domain) {
Map map = getDomainNodeMap();
String domainKey = domain.getServerName();
BuilderDomainViewNode node = (BuilderDomainViewNode) map.get(domainKey);
if(node==null){
node = new BuilderDomainViewNode(this,domain);
map.put(domainKey, node);
}
return node;
}
private ICDomain getDomainForRequest(FacesContext context) {
IWContext iwc = IWContext.getIWContext(context);
ICDomain domain = getIWMainApplication().getIWApplicationContext().getDomainByServerName(iwc.getServerName());
return domain;
}
private Map getDomainNodeMap() {
if(domainNodeMap==null){
domainNodeMap=new HashMap();
}
return domainNodeMap;
}
public boolean isComponentBased(){
FacesContext context = FacesContext.getCurrentInstance();
ViewNode domainChild = getDomainNode(context);
return domainChild.isComponentBased();
}
@Override
public ViewNodeBase getViewNodeBase() {
FacesContext context = FacesContext.getCurrentInstance();
ViewNode domainChild = getDomainNode(context);
return domainChild.getViewNodeBase();
}
public String getResourceURI(){
FacesContext context = FacesContext.getCurrentInstance();
ViewNode defaultChild = getDomainNode(context);
return defaultChild.getResourceURI();
}
public ViewNode getChild(String childViewId){
FacesContext context = FacesContext.getCurrentInstance();
if(context!=null){
ViewNode defaultChild = getDomainNode(context);
return defaultChild.getChild(childViewId);
}
return null;
}
}