KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > sun > facelets > tag > ui > CompositionHandler


1 /**
2  * Licensed under the Common Development and Distribution License,
3  * you may not use this file except in compliance with the License.
4  * You may obtain a copy of the License at
5  *
6  * http://www.sun.com/cddl/
7  *
8  * Unless required by applicable law or agreed to in writing, software
9  * distributed under the License is distributed on an "AS IS" BASIS,
10  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
11  * implied. See the License for the specific language governing
12  * permissions and limitations under the License.
13  */

14
15 package com.sun.facelets.tag.ui;
16
17 import java.io.IOException JavaDoc;
18 import java.util.ArrayList JavaDoc;
19 import java.util.HashMap JavaDoc;
20 import java.util.Iterator JavaDoc;
21 import java.util.List JavaDoc;
22 import java.util.Map JavaDoc;
23 import java.util.logging.Level JavaDoc;
24 import java.util.logging.Logger JavaDoc;
25
26 import javax.el.ELException;
27 import javax.el.VariableMapper;
28 import javax.faces.FacesException;
29 import javax.faces.component.UIComponent;
30
31 import com.sun.facelets.FaceletContext;
32 import com.sun.facelets.FaceletException;
33 import com.sun.facelets.FaceletHandler;
34 import com.sun.facelets.TemplateClient;
35 import com.sun.facelets.el.VariableMapperWrapper;
36 import com.sun.facelets.tag.TagAttribute;
37 import com.sun.facelets.tag.TagConfig;
38 import com.sun.facelets.tag.TagHandler;
39
40 /**
41  * @author Jacob Hookom
42  * @version $Id: CompositionHandler.java,v 1.10 2006/03/29 04:10:08 jhook Exp $
43  */

44 public final class CompositionHandler extends TagHandler implements
45         TemplateClient {
46
47     private final Logger JavaDoc log = Logger.getLogger("facelets.tag.ui.composition");
48
49     public final static String JavaDoc Name = "composition";
50
51     protected final TagAttribute template;
52
53     protected final Map JavaDoc handlers;
54
55     protected final ParamHandler[] params;
56
57     /**
58      * @param config
59      */

60     public CompositionHandler(TagConfig config) {
61         super(config);
62         this.template = this.getAttribute("template");
63         if (this.template != null) {
64             this.handlers = new HashMap JavaDoc();
65             Iterator JavaDoc itr = this.findNextByType(DefineHandler.class);
66             DefineHandler d = null;
67             while (itr.hasNext()) {
68                 d = (DefineHandler) itr.next();
69                 this.handlers.put(d.getName(), d);
70                 if (log.isLoggable(Level.FINE)) {
71                     log.fine(tag + " found Define[" + d.getName() + "]");
72                 }
73             }
74             List JavaDoc paramC = new ArrayList JavaDoc();
75             itr = this.findNextByType(ParamHandler.class);
76             while (itr.hasNext()) {
77                 paramC.add(itr.next());
78             }
79             if (paramC.size() > 0) {
80                 this.params = new ParamHandler[paramC.size()];
81                 for (int i = 0; i < this.params.length; i++) {
82                     this.params[i] = (ParamHandler) paramC.get(i);
83                 }
84             } else {
85                 this.params = null;
86             }
87         } else {
88             this.params = null;
89             this.handlers = null;
90         }
91     }
92
93     /*
94      * (non-Javadoc)
95      *
96      * @see com.sun.facelets.FaceletHandler#apply(com.sun.facelets.FaceletContext,
97      * javax.faces.component.UIComponent)
98      */

99     public void apply(FaceletContext ctx, UIComponent parent)
100             throws IOException JavaDoc, FacesException, FaceletException, ELException {
101         if (this.template != null) {
102             VariableMapper orig = ctx.getVariableMapper();
103             if (this.params != null) {
104                 VariableMapper vm = new VariableMapperWrapper(orig);
105                 ctx.setVariableMapper(vm);
106                 for (int i = 0; i < this.params.length; i++) {
107                     this.params[i].apply(ctx, parent);
108                 }
109             }
110
111             ctx.extendClient(this);
112             try {
113                 ctx.includeFacelet(parent, this.template.getValue(ctx));
114             } finally {
115                 ctx.popClient(this);
116                 ctx.setVariableMapper(orig);
117             }
118         } else {
119             this.nextHandler.apply(ctx, parent);
120         }
121     }
122
123     public boolean apply(FaceletContext ctx, UIComponent parent, String JavaDoc name)
124             throws IOException JavaDoc, FacesException, FaceletException, ELException {
125         if (name != null) {
126             FaceletHandler handler = (FaceletHandler) this.handlers.get(name);
127             if (handler != null) {
128                 handler.apply(ctx, parent);
129                 return true;
130             } else {
131                 return false;
132             }
133         } else {
134             this.nextHandler.apply(ctx, parent);
135             return true;
136         }
137     }
138
139 }
140
Popular Tags