/*
* $Id: BuilderPageFacetMap.java,v 1.1 2005/05/30 15:57:25 tryggvil Exp $
* Created on 16.12.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.presentation;
import java.util.Collection;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import javax.faces.component.UIComponent;
/**
* <p>
* This is special implementation of the standard JSF Facet Map to be used to implement the <code>region</code> tag inside Builder pages.<br/>
* This class is used to override the getFacets() method in BuilderPage and HtmlPage.
* <p>
* Last modified: $Date: 2005/05/30 15:57:25 $ by $Author: tryggvil $
*
* @author <a href="mailto:tryggvil@idega.com">Tryggvi Larusson</a>
* @version $Revision: 1.1 $
*/
public class BuilderPageFacetMap extends PresentationObjectComponentFacetMap {
public static final String PREFIX="builderRegion";
/**
* @param component
*/
public BuilderPageFacetMap(UIComponent component) {
super(component);
// TODO Auto-generated constructor stub
}
/* (non-Javadoc)
* @see java.util.Map#clear()
*/
public void clear() {
// TODO Auto-generated method stub
super.clear();
}
/* (non-Javadoc)
* @see java.lang.Object#clone()
*/
public Object clone() {
// TODO Auto-generated method stub
return super.clone();
}
/* (non-Javadoc)
* @see java.util.Map#containsKey(java.lang.Object)
*/
public boolean containsKey(Object key) {
// TODO Auto-generated method stub
return super.containsKey(key);
}
/* (non-Javadoc)
* @see java.util.Map#containsValue(java.lang.Object)
*/
public boolean containsValue(Object value) {
// TODO Auto-generated method stub
return super.containsValue(value);
}
/* (non-Javadoc)
* @see java.util.Map#entrySet()
*/
public Set entrySet() {
// TODO Auto-generated method stub
return super.entrySet();
}
/* (non-Javadoc)
* @see java.util.Map#get(java.lang.Object)
*/
public Object get(Object key) {
// TODO Auto-generated method stub
//return super.get(key);
String facetKey=(String)key;
if(facetKey.startsWith(PREFIX)){
String regionKey = facetKey.substring(PREFIX.length(),facetKey.length());
UIComponent region = findRegionComponent(regionKey);
if(region!=null){
if(region.getChildren().size()>0){
return region.getChildren().get(0);
}
}
/*if(doesComponentContainChild(region,component)){
//
}else{
region.getChildren().add(value);
}*/
return null;
}
else{
return super.get(key);
}
}
/* (non-Javadoc)
* @see com.idega.presentation.PresentationObjectComponentFacetMap#getComponent()
*/
protected UIComponent getComponent() {
// TODO Auto-generated method stub
return super.getComponent();
}
/* (non-Javadoc)
* @see java.util.Map#isEmpty()
*/
public boolean isEmpty() {
// TODO Auto-generated method stub
return super.isEmpty();
}
/* (non-Javadoc)
* @see java.util.Map#keySet()
*/
public Set keySet() {
// TODO Auto-generated method stub
return super.keySet();
}
/* (non-Javadoc)
* @see java.util.Map#put(java.lang.Object, java.lang.Object)
*/
public Object put(Object key, Object value) {
//return super.put(key, value);
String facetKey = (String)key;
if(facetKey.startsWith(PREFIX)){
String regionKey = facetKey.substring(PREFIX.length(),facetKey.length());
UIComponent region = findRegionComponent(regionKey);
UIComponent component =(UIComponent)value;
if(region!=null){
if(doesComponentContainChild(region,component)){
//
}else{
region.getChildren().add(value);
}
}
return null;
}
else{
return super.put(key,value);
}
}
/**
* Returns true if component already contains child
* @param component
* @param child
* @return
*/
protected boolean doesComponentContainChild(UIComponent component,UIComponent child){
if(component!=null){
for (Iterator iter = component.getChildren().iterator(); iter.hasNext();) {
UIComponent element = (UIComponent) iter.next();
if(element.getId().equals(child.getId())){
return true;
}
}
}
return false;
}
/**
* @param key
* @return
*/
protected UIComponent findRegionComponent(String key) {
Page page = (Page) this.getComponent();
UIComponent component = page;
component = findRegionComponentRecursive(component,key);
return component;
}
protected UIComponent findRegionComponentRecursive(UIComponent component, String key) {
for (Iterator iter = component.getFacetsAndChildren(); iter.hasNext();) {
UIComponent child = (UIComponent) iter.next();
if(child instanceof PresentationObjectContainer){
PresentationObjectContainer poc = (PresentationObjectContainer)child;
String label = poc.getLabel();
if(key.equals(label)){
return poc;
}
}
UIComponent obj = findRegionComponentRecursive(child,key);
if(obj!=null){
return obj;
}
}
return null;
}
/* (non-Javadoc)
* @see java.util.Map#putAll(java.util.Map)
*/
public void putAll(Map t) {
// TODO Auto-generated method stub
super.putAll(t);
}
/* (non-Javadoc)
* @see java.util.Map#remove(java.lang.Object)
*/
public Object remove(Object key) {
String facetKey = (String)key;
if(facetKey.startsWith(PREFIX)){
String regionKey = facetKey.substring(PREFIX.length(),facetKey.length());
UIComponent region = findRegionComponent(regionKey);
if(region!=null){
region.getChildren().clear();
region.getFacets().clear();
}
//region.getChildren().add(value);
return null;
}
else{
return super.remove(key);
}
//return super.remove(key);
}
/* (non-Javadoc)
* @see com.idega.presentation.PresentationObjectComponentFacetMap#setComponent(javax.faces.component.UIComponent)
*/
protected void setComponent(UIComponent _component) {
// TODO Auto-generated method stub
super.setComponent(_component);
}
/* (non-Javadoc)
* @see java.util.Map#size()
*/
public int size() {
// TODO Auto-generated method stub
return super.size();
}
/* (non-Javadoc)
* @see java.util.Map#values()
*/
public Collection values() {
// TODO Auto-generated method stub
return super.values();
}
/* (non-Javadoc)
* @see java.lang.Object#hashCode()
*/
public int hashCode() {
// TODO Auto-generated method stub
return super.hashCode();
}
/* (non-Javadoc)
* @see java.lang.Object#equals(java.lang.Object)
*/
public boolean equals(Object arg0) {
// TODO Auto-generated method stub
return super.equals(arg0);
}
/* (non-Javadoc)
* @see java.lang.Object#toString()
*/
public String toString() {
// TODO Auto-generated method stub
return super.toString();
}
/* (non-Javadoc)
* @see java.lang.Object#finalize()
*/
protected void finalize() throws Throwable {
// TODO Auto-generated method stub
super.finalize();
}
}