All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.apache.myfaces.trinidadinternal.ui.BaseMutableUINode Maven / Gradle / Ivy

The newest version!
/*
 *  Licensed to the Apache Software Foundation (ASF) under one
 *  or more contributor license agreements.  See the NOTICE file
 *  distributed with this work for additional information
 *  regarding copyright ownership.  The ASF licenses this file
 *  to you under the Apache License, Version 2.0 (the
 *  "License"); you may not use this file except in compliance
 *  with the License.  You may obtain a copy of the License at
 * 
 *  http://www.apache.org/licenses/LICENSE-2.0
 * 
 *  Unless required by applicable law or agreed to in writing,
 *  software distributed under the License is distributed on an
 *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 *  KIND, either express or implied.  See the License for the
 *  specific language governing permissions and limitations
 *  under the License.
 */
package org.apache.myfaces.trinidadinternal.ui;

import java.util.Iterator;

import org.apache.myfaces.trinidad.util.ArrayMap;

import org.apache.myfaces.trinidadinternal.ui.collection.AttributeMap;
import org.apache.myfaces.trinidadinternal.ui.collection.FlaggedAttributeMap;
import org.apache.myfaces.trinidadinternal.ui.collection.ContextMap;
import org.apache.myfaces.trinidadinternal.ui.collection.MapContextMap;
import org.apache.myfaces.trinidadinternal.ui.collection.UINodeList;
import org.apache.myfaces.trinidadinternal.ui.collection.ArrayUINodeList;

/**
 * Root implementation for storing a mutable node of a UIX Components UI tree.
 * This class, as a superclass of BaseWebBean, is an ancestor of all
 * the UIX Componein) WebBeans.
 * 

* In addition to simply implementing the methods of MutableUINode, * BaseMutableUINode, also specifies how the named and indexed children * and attributes are stored, and allows the collections implementing * this storage to be set and retrieved. *

* @version $Name: $ ($Revision: adfrt/faces/adf-faces-impl/src/main/java/oracle/adfinternal/view/faces/ui/BaseMutableUINode.java#0 $) $Date: 10-nov-2005.18:50:10 $ * @deprecated This class comes from the old Java 1.2 UIX codebase and should not be used anymore. */ @Deprecated public class BaseMutableUINode extends BaseUINode implements MutableUINode { /** * Creates a BaseMutableUINode, binding it to a namespace * and local name. */ public BaseMutableUINode( String namespaceURI, String localName ) { super(namespaceURI, localName); } /** * Creates a BaseMutableUINode, binding it to a namespace * and local name. */ public BaseMutableUINode( String namespaceURI, String localName, int initialCapacity ) { super(namespaceURI, localName); if (initialCapacity != 0) { _indexedChildren = new ArrayUINodeList(initialCapacity); } } /** * Sets the page-wide unique client ID of this node. The string set * must comply with the * * XML id specification--namely it must begin * with a [a-z][A-z] and after that can contain as many of * [a-z][A-Z][0-9][._-:] as desired. *

* This property is typically only needed when writing client-side * JavaScript. */ public void setID(String newID) { setAttributeValue(ID_ATTR, newID); } /** * Sets whether the bean is rendered. When set to false, * no output will be delivered for this bean. */ public void setRendered( boolean rendered ) { setAttributeValue(UIConstants.RENDERED_ATTR, Boolean.valueOf(rendered)); } /** * Sets whether the bean is rendered. When set to false, * no output will be delivered for this bean. */ public boolean isRendered() { return !Boolean.FALSE.equals(getAttributeValue(UIConstants.RENDERED_ATTR)); } /** * Adds an indexed child to the node. Unlike many other APIs, * adding a child does not remove it from any other parent nodes. *

* @param childIndex the zero-based index to add the child at * @param child the new child node */ public void addIndexedChild( int childIndex, UINode child ) { getIndexedNodeList(true).addUINode(childIndex, child); } /** * Convenience method for appending an indexed child. */ public void addIndexedChild( UINode child ) { getIndexedNodeList(true).addUINode(child); } /** * Convenience method for appending an array of indexed children. */ public final void addIndexedChildren( UINode[] indexedChildren ) { NodeUtils.addIndexedChildren(this, indexedChildren); } /** * Convenience method for appending an enumeration of indexed children. */ public final void addIndexedChildren( Iterator indexedChildren ) { NodeUtils.addIndexedChildren(this, indexedChildren); } /** * Adds a text child to the bean. A convenience function * that automatically creates a TextNode. * @param text the text - does not need to be escaped */ public void addIndexedChild( String text ) { addIndexedChild(new TextNode(text)); } /** * Removes an indexed child from the node. * @param childIndex the zero-based index of the child */ public UINode removeIndexedChild( int childIndex ) { UINodeList indexedChildren = getIndexedNodeList(false); if (indexedChildren == null) throw new IndexOutOfBoundsException(); return indexedChildren.removeUINode(childIndex); } /** * Removes all of the indexed children. */ public void clearIndexedChildren() { UINodeList indexedChildren = getIndexedNodeList(false); if (indexedChildren != null) { indexedChildren.clearUINodes(); } } /** * Replaces a single child. *

* Although this method could be implemented in terms of * addIndexedChild and removeIndexedChild, * it is present on this interface in * order to allow for more efficient implementations. *

* @param childIndex the zero-based index to add the child at. * @param child the new child node *

* @see #removeIndexedChild */ public void replaceIndexedChild( int childIndex, UINode child ) { getIndexedNodeList(true).setUINode(childIndex, child); } /** * Sets a named child on the node. Any node attached with * that name will be removed. *

* @param childName the name of the child * @param namedChild the child; passing null will remove any existing * UINode with that name. */ public void setNamedChild( String childName, UINode namedChild ) { boolean doSet = namedChild != null; ContextMap childMap = getNamedChildMap(doSet); if (childMap != null) { childMap.set(childName, namedChild); } } /** * Returns the attribute value of the node; unlike the version of * this method that takes a RenderingContext, this method must * return the actual object originally set on the node - BoundValues * will be directly returned. *

* @param name the name of the attribute */ public final Object getAttributeValue( AttributeKey attrKey ) { return getAttributeValueImpl(null, attrKey, false); } /** * Sets an attribute value of the node. * @param name the name of the attribute * @param value the new value; passing null will remove any * existing attribute with that name. */ public void setAttributeValue( AttributeKey attrKey, Object value ) { AttributeMap attrDict = getAttributeMap((value != null)); if (attrDict != null) { attrDict.setAttribute(attrKey, value); } } /** * Replaces the AttributeMap used to store the attributes. * All currently set attributes will be forgotten, and * all future requests to get or set attributes will go * to this dictionary. Neither the ID of this node nor its * children are retrieved from this dictionary. */ public void setAttributeMap( AttributeMap newAttrMap ) { _attributes = newAttrMap; } /** * Replaces the UINodeList used to store the list of indexed children * for this UINode. All current indexed children of this UINode are * forgotten and all request to get and set indexed children will go * to this UINodeList. *

* @see #setAttributeMap * @see #setNamedChildMap */ public void setIndexedNodeList( UINodeList nodeList ) { _indexedChildren = nodeList; } /** * Replaces the ContextMap used to store the named children for this * UINode. All current named children of this UINode are forgotten and * all request to get and set named children will go to this ContextMap. */ public void setNamedChildMap( ContextMap childMap ) { _childMap = childMap; } /** * Returns the ContextMap used to store named children. */ public final ContextMap getNamedChildMap() { return getNamedChildMap(true); } /** * Returns the ContextMap used to store named children. *

* @param createIfNull if true, creates * a ContextMap object if one has not yet been created. */ @Override protected final ContextMap getNamedChildMap( boolean forMutating ) { if (forMutating && (_childMap == null)) { _childMap = createNamedChildMap(); } return _childMap; } /** * Returns the AttributeMap used to store attributes. */ public final AttributeMap getAttributeMap() { return getAttributeMap(true); } /** * Returns the AttributeMap used to store attributes. *

* @param createIfNull if true, creates * an AttributeMap object if one has not yet been created. */ @Override protected final AttributeMap getAttributeMap( boolean createIfNull ) { if (createIfNull && (_attributes == null)) { _attributes = createAttributeMap(); } return _attributes; } /** * Returns the UINodeList used to retrieve indexed children from * the node. * getIndexedChild(), * getIndexedChildCount(), and * replaceIndexedChild() * will use the result of this * method - if not implemented, subclasses must override both * of those methods. *

* @see #getIndexedChild * @see #replaceIndexedChild * @see #getIndexedChildCount */ public final UINodeList getIndexedNodeList() { return getIndexedNodeList(true); } /** * Returns the UINodeList used to retrieve indexed children from * the node. * getIndexedChild(), * getIndexedChildCount(), and * replaceIndexedChild() * will use the result of this * method - if not implemented, subclasses must override all * of those methods. *

* @see #getIndexedChild * @see #replaceIndexedChild * @see #getIndexedChildCount */ @Override protected final UINodeList getIndexedNodeList( boolean createIfNull ) { if (createIfNull && (_indexedChildren == null)) { _indexedChildren = createIndexedNodeList(); } return _indexedChildren; } /** * Creates the UINodeList that will be used for indexed * children of this node. */ protected UINodeList createIndexedNodeList() { return new ArrayUINodeList(); } /** * Creates the ContextMap that will be used for named * children of this node. */ protected ContextMap createNamedChildMap() { return new MapContextMap(new ArrayMap()); } /** * Creates the AttributeMap that will be used for * attributes of this node. */ protected AttributeMap createAttributeMap() { return new FlaggedAttributeMap(); } private ContextMap _childMap; private AttributeMap _attributes; private UINodeList _indexedChildren; }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy