001: /*
002: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
003: *
004: * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
005: *
006: * The contents of this file are subject to the terms of either the GNU
007: * General Public License Version 2 only ("GPL") or the Common
008: * Development and Distribution License("CDDL") (collectively, the
009: * "License"). You may not use this file except in compliance with the
010: * License. You can obtain a copy of the License at
011: * http://www.netbeans.org/cddl-gplv2.html
012: * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
013: * specific language governing permissions and limitations under the
014: * License. When distributing the software, include this License Header
015: * Notice in each file and include the License file at
016: * nbbuild/licenses/CDDL-GPL-2-CP. Sun designates this
017: * particular file as subject to the "Classpath" exception as provided
018: * by Sun in the GPL Version 2 section of the License file that
019: * accompanied this code. If applicable, add the following below the
020: * License Header, with the fields enclosed by brackets [] replaced by
021: * your own identifying information:
022: * "Portions Copyrighted [year] [name of copyright owner]"
023: *
024: * Contributor(s):
025: *
026: * The Original Software is NetBeans. The Initial Developer of the Original
027: * Software is Sun Microsystems, Inc. Portions Copyright 1997-2007 Sun
028: * Microsystems, Inc. All Rights Reserved.
029: *
030: * If you wish your version of this file to be governed by only the CDDL
031: * or only the GPL Version 2, indicate your decision by adding
032: * "[Contributor] elects to include this software in this distribution
033: * under the [CDDL or GPL Version 2] license." If you do not indicate a
034: * single choice of license, a recipient has the option to distribute
035: * your version of this file under either the CDDL, the GPL Version 2 or
036: * to extend the choice of license to its licensees as provided above.
037: * However, if you add GPL Version 2 code and therefore, elected the GPL
038: * Version 2 license, then the option applies only if the new code is
039: * made subject to such option by the copyright holder.
040: */
041: package com.sun.rave.web.ui.util;
042:
043: import javax.faces.component.UIComponent;
044:
045: /**
046: * Methods for general component manipulation.
047: */
048: public class ComponentUtilities {
049:
050: private final static String USCORE = "_"; //NOI18N
051:
052: /** Creates a new instance of ComponentUtilities. */
053: public ComponentUtilities() {
054: }
055:
056: /**
057: * Store an internally created component utilizing the
058: * internal facet naming convention by mapping the facet
059: * to the name returned by <code>createPrivateFacetName()</code>.
060: * Add the component to the parent's facets map.
061: *
062: * @param parent the component that created the facet
063: * @param facetName the public facet name
064: * @param facet the private facet component instance
065: */
066: public static void putPrivateFacet(UIComponent parent,
067: String facetName, UIComponent facet) {
068:
069: if (parent == null || facet == null || facetName == null) {
070: return;
071: }
072: parent.getFacets()
073: .put(createPrivateFacetName(facetName), facet);
074: }
075:
076: /**
077: * Remove an internally created component utilizing the
078: * internal facet naming convention by mapping the facet
079: * to the name returned by <code>createPrivateFacetName()</code>.
080: * Remove the component from the parent's facets map.
081: *
082: * @param parent the component that created the facet
083: * @param facetName the public facet name
084: */
085: public static void removePrivateFacet(UIComponent parent,
086: String facetName) {
087:
088: if (parent == null || facetName == null) {
089: return;
090: }
091: parent.getFacets().remove(createPrivateFacetName(facetName));
092: }
093:
094: /**
095: * Return a private facet from the the parent component's facet map.
096: * Look for a private facet name by calling
097: * <code>createPrivateFacetName()</code> on the facetName parameter.
098: * <p>
099: * If the matchId parameter is true, verify that the facet that is found
100: * has an id that matches the value of
101: * <code>getPrivateFacetId(parent.getId(), facetName)</code>.
102: * If the id's do not match return null and remove the existing facet.</br>
103: * If matchId is false, return the facet if found or null.
104: *
105: * @param parent the component that contains the facet
106: * @param facetName the public facet name
107: * @parem matchId verify a the id of the facet
108: * @return a UIComponent if the facet is found else null.
109: */
110: public static UIComponent getPrivateFacet(UIComponent parent,
111: String facetName, boolean matchId) {
112:
113: if (parent == null || facetName == null) {
114: return null;
115: }
116:
117: String pfacetName = createPrivateFacetName(facetName);
118: UIComponent facet = (UIComponent) parent.getFacets().get(
119: pfacetName);
120: if (facet == null) {
121: return null;
122: }
123:
124: if (matchId == false) {
125: return facet;
126: }
127:
128: // Will never be null as long as facetName is not null.
129: //
130: String id = createPrivateFacetId(parent, facetName);
131: if (!id.equals(facet.getId())) {
132: parent.getFacets().remove(pfacetName);
133: return null;
134: }
135: return facet;
136: }
137:
138: /**
139: * Prefix the facetName parameter with an "_".
140: *
141: * @param facetName the public facet name
142: * @return a private facet name
143: */
144: public static String createPrivateFacetName(String facetName) {
145: return USCORE.concat(facetName);
146: }
147:
148: /**
149: * Return an id using the convention</br>
150: * <code>parent.getId() + "_" + facetName</code>
151: * If <code>parent.getId()</code> is null, <code>"_" + facetName </code>
152: * is returned.
153: *
154: * @param parent the component that contains the facet
155: * @param facetName the public facet name
156: * @return an id for a private facet.
157: */
158: public static String createPrivateFacetId(UIComponent parent,
159: String facetName) {
160:
161: String pfacetName = createPrivateFacetName(facetName);
162: String id = parent.getId();
163: if (id != null) {
164: pfacetName = id.concat(pfacetName);
165: }
166: return pfacetName;
167: }
168: }
|