1 /*
2 * Licensed to the Apache Software Foundation (ASF) under one
3 * or more contributor license agreements. See the NOTICE file
4 * distributed with this work for additional information
5 * regarding copyright ownership. The ASF licenses this file
6 * to you under the Apache License, Version 2.0 (the
7 * "License"); you may not use this file except in compliance
8 * with the License. You may obtain a copy of the License at
9 *
10 * http://www.apache.org/licenses/LICENSE-2.0
11 *
12 * Unless required by applicable law or agreed to in writing,
13 * software distributed under the License is distributed on an
14 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15 * KIND, either express or implied. See the License for the
16 * specific language governing permissions and limitations
17 * under the License.
18 */
19 package org.apache.myfaces.view.facelets.tag;
20
21 import java.lang.reflect.Method;
22
23 import javax.faces.FacesException;
24 import javax.faces.view.facelets.TagConfig;
25 import javax.faces.view.facelets.TagHandler;
26
27 import org.apache.myfaces.view.facelets.util.ParameterCheck;
28
29 /**
30 * A TagLibrary that is composed of 1 or more TagLibrary children. Uses the chain of responsibility pattern to stop
31 * searching as soon as one of the children handles the requested method.
32 *
33 * @author Jacob Hookom
34 * @version $Id$
35 */
36 public final class CompositeTagLibrary implements TagLibrary
37 {
38
39 private final TagLibrary[] libraries;
40
41 public CompositeTagLibrary(TagLibrary[] libraries)
42 {
43 ParameterCheck.notNull("libraries", libraries);
44 this.libraries = libraries;
45 }
46
47 /*
48 * (non-Javadoc)
49 *
50 * @see org.apache.myfaces.view.facelets.tag.TagLibrary#containsNamespace(java.lang.String)
51 */
52 public boolean containsNamespace(String ns)
53 {
54 for (int i = 0; i < this.libraries.length; i++)
55 {
56 if (this.libraries[i].containsNamespace(ns))
57 {
58 return true;
59 }
60 }
61 return false;
62 }
63
64 /*
65 * (non-Javadoc)
66 *
67 * @see org.apache.myfaces.view.facelets.tag.TagLibrary#containsTagHandler(java.lang.String, java.lang.String)
68 */
69 public boolean containsTagHandler(String ns, String localName)
70 {
71 for (int i = 0; i < this.libraries.length; i++)
72 {
73 if (this.libraries[i].containsTagHandler(ns, localName))
74 {
75 return true;
76 }
77 }
78 return false;
79 }
80
81 /*
82 * (non-Javadoc)
83 *
84 * @see org.apache.myfaces.view.facelets.tag.TagLibrary#createTagHandler(java.lang.String, java.lang.String,
85 * org.apache.myfaces.view.facelets.tag.TagConfig)
86 */
87 public TagHandler createTagHandler(String ns, String localName, TagConfig tag) throws FacesException
88 {
89 for (int i = 0; i < this.libraries.length; i++)
90 {
91 if (this.libraries[i].containsTagHandler(ns, localName))
92 {
93 return this.libraries[i].createTagHandler(ns, localName, tag);
94 }
95 }
96 return null;
97 }
98
99 /*
100 * (non-Javadoc)
101 *
102 * @see org.apache.myfaces.view.facelets.tag.TagLibrary#containsFunction(java.lang.String, java.lang.String)
103 */
104 public boolean containsFunction(String ns, String name)
105 {
106 for (int i = 0; i < this.libraries.length; i++)
107 {
108 if (this.libraries[i].containsFunction(ns, name))
109 {
110 return true;
111 }
112 }
113 return false;
114 }
115
116 /*
117 * (non-Javadoc)
118 *
119 * @see org.apache.myfaces.view.facelets.tag.TagLibrary#createFunction(java.lang.String, java.lang.String)
120 */
121 public Method createFunction(String ns, String name)
122 {
123 for (int i = 0; i < this.libraries.length; i++)
124 {
125 if (this.libraries[i].containsFunction(ns, name))
126 {
127 return this.libraries[i].createFunction(ns, name);
128 }
129 }
130 return null;
131 }
132 }