KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > icesoft > jsfmeta > util > AbstractGenerator


1 /*
2  * Version: MPL 1.1/GPL 2.0/LGPL 2.1
3  *
4  * "The contents of this file are subject to the Mozilla Public License
5  * Version 1.1 (the "License"); you may not use this file except in
6  * compliance with the License. You may obtain a copy of the License at
7  * http://www.mozilla.org/MPL/
8  *
9  * Software distributed under the License is distributed on an "AS IS"
10  * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
11  * License for the specific language governing rights and limitations under
12  * the License.
13  *
14  * The Original Code is ICEfaces 1.5 open source software code, released
15  * November 5, 2006. The Initial Developer of the Original Code is ICEsoft
16  * Technologies Canada, Corp. Portions created by ICEsoft are Copyright (C)
17  * 2004-2006 ICEsoft Technologies Canada, Corp. All Rights Reserved.
18  *
19  * Contributor(s): _____________________.
20  *
21  * Alternatively, the contents of this file may be used under the terms of
22  * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"
23  * License), in which case the provisions of the LGPL License are
24  * applicable instead of those above. If you wish to allow use of your
25  * version of this file only under the terms of the LGPL License and not to
26  * allow others to use your version of this file under the MPL, indicate
27  * your decision by deleting the provisions above and replace them with
28  * the notice and other provisions required by the LGPL License. If you do
29  * not delete the provisions above, a recipient may use your version of
30  * this file under either the MPL or the LGPL License."
31  *
32  */

33
34 package com.icesoft.jsfmeta.util;
35
36 import java.io.File JavaDoc;
37 import java.util.ArrayList JavaDoc;
38 import java.util.HashMap JavaDoc;
39 import java.util.HashSet JavaDoc;
40 import java.util.Iterator JavaDoc;
41 import java.util.List JavaDoc;
42 import java.util.Map JavaDoc;
43 import java.util.Set JavaDoc;
44
45 import javax.faces.render.RenderKitFactory;
46
47
48 import com.sun.rave.jsfmeta.beans.AttributeBean;
49 import com.sun.rave.jsfmeta.beans.ComponentBean;
50 import com.sun.rave.jsfmeta.beans.DescriptionBean;
51 import com.sun.rave.jsfmeta.beans.DisplayNameBean;
52 import com.sun.rave.jsfmeta.beans.FacesConfigBean;
53 import com.sun.rave.jsfmeta.beans.FacetBean;
54 import com.sun.rave.jsfmeta.beans.IconBean;
55 import com.sun.rave.jsfmeta.beans.NamedValueBean;
56 import com.sun.rave.jsfmeta.beans.PropertyBean;
57 import com.sun.rave.jsfmeta.beans.RenderKitBean;
58 import com.sun.rave.jsfmeta.beans.RendererBean;
59 import java.util.Arrays JavaDoc;
60 import java.util.logging.Level JavaDoc;
61 import java.util.logging.Logger JavaDoc;
62
63 /*
64  * Base Generator
65  *
66  */

67
68 public abstract class AbstractGenerator {
69     
70     
71     protected static Map JavaDoc defaults;
72     
73     protected static Set JavaDoc keywords;
74     
75     protected static Map JavaDoc unwrappers;
76     
77     protected static Map JavaDoc wrappers;
78     
79     private String JavaDoc defaultRenderKitId;
80     
81     private String JavaDoc excludes[];
82     
83     private String JavaDoc includes[];
84     
85     private FacesConfigBean config;
86     
87     private File JavaDoc dest;
88     
89     private boolean verbose;
90     
91     private JavaSourceWriter writer;
92     
93     protected static final Logger JavaDoc logger = Logger.getLogger("com.icesoft.metadata.generators");
94     
95     static {
96         
97         defaults = new HashMap JavaDoc();
98         defaults.put("boolean", "false");
99         defaults.put("byte", "Byte.MIN_VALUE");
100         defaults.put("char", "Character.MIN_VALUE");
101         defaults.put("double", "Double.MIN_VALUE");
102         defaults.put("float", "Float.MIN_VALUE");
103         defaults.put("int", "Integer.MIN_VALUE");
104         defaults.put("long", "Long.MIN_VALUE");
105         defaults.put("short", "Short.MIN_VALUE");
106         keywords = new HashSet JavaDoc();
107         keywords.addAll(Arrays.asList(new String JavaDoc[]{
108             "abstract", "boolean","break","byte","case","cast",
109             "catch","char","class","const","continue",
110             "default","do","double","else","extends",
111             "final","finally","float","for","future",
112             "generic","goto","if","implements","import",
113             "inner","instanceof","int","interface",
114             "long","native","new","null","operator",
115             "outer","package","private","protected","public",
116             "rest","return","short","static","super",
117             "switch","synchronized","this","throw","throws",
118             "transient","try","var","void","volatile","while"
119         }));
120         
121         unwrappers = new HashMap JavaDoc();
122         unwrappers.put("boolean", "booleanValue");
123         unwrappers.put("byte", "byteValue");
124         unwrappers.put("char", "charValue");
125         unwrappers.put("double", "doubleValue");
126         unwrappers.put("float", "floatValue");
127         unwrappers.put("int", "intValue");
128         unwrappers.put("long", "longValue");
129         unwrappers.put("short", "shortValue");
130         wrappers = new HashMap JavaDoc();
131         wrappers.put("boolean", "Boolean");
132         wrappers.put("byte", "Byte");
133         wrappers.put("char", "Character");
134         wrappers.put("double", "Double");
135         wrappers.put("float", "Float");
136         wrappers.put("int", "Integer");
137         wrappers.put("long", "Long");
138         wrappers.put("short", "Short");
139     }
140     
141     
142     public AbstractGenerator(InternalConfig internalConfig) {
143         
144         defaultRenderKitId = RenderKitFactory.HTML_BASIC_RENDER_KIT;
145         excludes = new String JavaDoc[0];
146         includes = new String JavaDoc[0];
147         config = null;
148         dest = new File JavaDoc(".");
149         verbose = Boolean.getBoolean(internalConfig.getProperty("project.verbose"));
150         writer = new JavaSourceWriter();
151     }
152     
153     
154     public String JavaDoc getDefaultRenderKitId() {
155         return defaultRenderKitId;
156     }
157     
158     public void setDefaultRenderKitId(String JavaDoc defaultRenderKitId) {
159         this.defaultRenderKitId = defaultRenderKitId;
160     }
161     
162     public String JavaDoc[] getExcludes() {
163         return excludes;
164     }
165     
166     public void setExcludes(String JavaDoc excludes[]) {
167         this.excludes = excludes;
168     }
169     
170     public String JavaDoc[] getIncludes() {
171         return includes;
172     }
173     
174     public void setIncludes(String JavaDoc includes[]) {
175         this.includes = includes;
176     }
177     
178     public FacesConfigBean getConfig() {
179         return config;
180     }
181     
182     public void setConfig(FacesConfigBean config) {
183         this.config = config;
184     }
185     
186     public File JavaDoc getDest() {
187         return dest;
188     }
189     
190     public void setDest(File JavaDoc dest) {
191         this.dest = dest;
192     }
193     
194     public boolean isVerbose() {
195         return verbose;
196     }
197     
198     public void setVerbose(boolean verbose) {
199         this.verbose = verbose;
200     }
201     
202     public JavaSourceWriter getWriter() {
203         return writer;
204     }
205     
206     public void setWriter(JavaSourceWriter writer) {
207         this.writer = writer;
208     }
209     
210     protected ComponentBean baseComponent(ComponentBean cb) {
211         String JavaDoc baseComponentType = cb.getBaseComponentType();
212         if (baseComponentType == null) {
213             return null;
214         }
215         ComponentBean bcb = getConfig().getComponent(baseComponentType);
216         if (bcb == null) {
217             
218             logger.log(Level.SEVERE, " invalid base component");
219             throw new IllegalArgumentException JavaDoc(" invalid base component");
220         } else {
221             return bcb;
222         }
223     }
224     
225     protected String JavaDoc capitalize(String JavaDoc name) {
226         return Character.toUpperCase(name.charAt(0)) + name.substring(1);
227     }
228     
229     public String JavaDoc componentFamily(ComponentBean cb) {
230         
231         String JavaDoc componentFamily = cb.getComponentFamily();
232         if (componentFamily == null) {
233             ComponentBean bcb = baseComponent(cb);
234             do {
235                 if ((componentFamily != null) || (bcb == null)) {
236                     break;
237                 }
238                 componentFamily = bcb.getComponentFamily();
239                 if (componentFamily == null) {
240                     bcb = baseComponent(bcb);
241                 }
242             } while (true);
243         }
244         return componentFamily;
245     }
246     
247     protected FacetBean[] facets(ComponentBean cb, RendererBean rb) {
248         
249         List JavaDoc components = new ArrayList JavaDoc();
250         components.add(cb);
251         ComponentBean current = cb;
252         do {
253             ComponentBean bcb = baseComponent(current);
254             if (bcb == null) {
255                 break;
256             }
257             components.add(bcb);
258             current = bcb;
259         } while (true);
260         
261         List JavaDoc facets = new ArrayList JavaDoc();
262         FacetBean f[] = null;
263         for (int i = components.size() - 1; i >= 0; i--) {
264             current = (ComponentBean) components.get(i);
265             f = current.getFacets();
266             for (int j = 0; j < f.length; j++) {
267                 FacetBean facet = lookupFacet(facets, f[j].getFacetName());
268                 if (facet == null) {
269                     facets.add(f[j].clone());
270                 } else {
271                     mergeFacet(facet, f[j]);
272                 }
273             }
274             
275         }
276         
277         f = rb.getFacets();
278         for (int j = 0; j < f.length; j++) {
279             FacetBean facet = lookupFacet(facets, f[j].getFacetName());
280             if (facet == null) {
281                 facets.add(f[j].clone());
282             } else {
283                 mergeFacet(facet, f[j]);
284             }
285         }
286         
287         return (FacetBean[]) facets.toArray(new FacetBean[facets.size()]);
288     }
289     
290     protected boolean generated(String JavaDoc fqcn) {
291         
292         for (int i = 0; i < excludes.length; i++) {
293             if (fqcn.equals(excludes[i])) {
294                 return false;
295             }
296         }
297         
298         for (int i = 0; i < includes.length; i++) {
299             if (fqcn.equals(includes[i])) {
300                 return true;
301             }
302         }
303         
304         return includes.length == 0;
305     }
306     
307     protected String JavaDoc mangle(String JavaDoc name) {
308         if (keywords.contains(name)) {
309             return "_" + name;
310         } else {
311             return name;
312         }
313     }
314     
315     protected PropertyBean merge(PropertyBean pb, AttributeBean ab) {
316         if (ab == null) {
317             return pb;
318         }
319         PropertyBean newPb = new PropertyBean();
320         pb.copy(newPb);
321         if (!ab.isBindable()) {
322             newPb.setBindable(false);
323         }
324         if (ab.isExpert()) {
325             newPb.setExpert(true);
326         }
327         if (ab.isHidden()) {
328             newPb.setHidden(true);
329         }
330         if (ab.isRequired()) {
331             newPb.setRequired(true);
332         }
333         if (ab.isSuppressed()) {
334             newPb.setSuppressed(true);
335         }
336         if (!ab.isTagAttribute()) {
337             newPb.setTagAttribute(false);
338         }
339         return newPb;
340     }
341     
342     
343     protected File JavaDoc outputFile(String JavaDoc fqcn) {
344         return new File JavaDoc(getDest(), fqcn.replace('.', File.separatorChar)
345         + ".java");
346     }
347     
348     protected boolean primitive(String JavaDoc type) {
349         return defaults.containsKey(type);
350     }
351     
352     protected RendererBean renderer(ComponentBean cb) {
353         
354         String JavaDoc rendererType = rendererType(cb);
355         if (rendererType == null) {
356             return null;
357         }
358         String JavaDoc componentFamily = componentFamily(cb);
359         if (componentFamily == null) {
360             
361             logger.log(Level.SEVERE, "NoComponentFamily");
362             throw new IllegalArgumentException JavaDoc("NoComponentFamily");
363         }
364         
365         RenderKitBean renderKitBean = getConfig().getRenderKit(
366                 getDefaultRenderKitId());
367         logger.log(Level.FINEST, "renderKit="+ renderKitBean.getRenderKitId());
368         
369         RendererBean rb = renderKitBean.getRenderer(componentFamily,
370                 rendererType);
371         
372         if (rb == null) {
373             logger.log(Level.SEVERE, "RenderBean componentFamily="
374                     + componentFamily + " rendererType=" + rendererType);
375         }
376         
377         if (rb == null) {
378             logger.log(Level.SEVERE, "InvalidRendererType");
379             throw new IllegalArgumentException JavaDoc("InvalidRendererType");
380         } else {
381             return rb;
382         }
383     }
384     
385     public String JavaDoc rendererType(ComponentBean cb) {
386         
387         String JavaDoc rendererType = cb.getRendererType();
388         if (rendererType == null) {
389             ComponentBean bcb = baseComponent(cb);
390             do {
391                 if ((rendererType != null) || (bcb == null)) {
392                     break;
393                 }
394                 rendererType = bcb.getRendererType();
395                 if (rendererType == null) {
396                     bcb = baseComponent(bcb);
397                 }
398             } while (true);
399         }
400         return rendererType;
401     }
402     
403     protected String JavaDoc simpleClassName(String JavaDoc fqcn) {
404         
405         int last = fqcn.lastIndexOf('.');
406         if (last >= 0) {
407             return fqcn.substring(last + 1);
408         } else {
409             return fqcn;
410         }
411     }
412     
413     private FacetBean lookupFacet(List JavaDoc list, String JavaDoc name) {
414         
415         for (Iterator JavaDoc facets = list.iterator(); facets.hasNext();) {
416             FacetBean facet = (FacetBean) facets.next();
417             if (name.equals(facet.getFacetName())) {
418                 return facet;
419             }
420         }
421         return null;
422     }
423     
424     private void mergeFacet(FacetBean orig, FacetBean upd) {
425         DescriptionBean dbs[] = upd.getDescriptions();
426         for (int i = 0; i < dbs.length; i++) {
427             orig.addDescription(new DescriptionBean(dbs[i].getDescription(),
428                     dbs[i].getLang()));
429         }
430         
431         DisplayNameBean dns[] = upd.getDisplayNames();
432         for (int i = 0; i < dns.length; i++) {
433             orig.addDisplayName(new DisplayNameBean(dns[i].getDisplayName(),
434                     dns[i].getLang()));
435         }
436         
437         IconBean ibs[] = upd.getIcons();
438         for (int i = 0; i < ibs.length; i++) {
439             orig.addIcon(new IconBean(ibs[i].getLang(), ibs[i].getLargeIcon(),
440                     ibs[i].getSmallIcon()));
441         }
442         
443         Map JavaDoc map = upd.getNamedValues();
444         NamedValueBean nvb;
445         for (Iterator JavaDoc keys = map.keySet().iterator(); keys.hasNext(); orig
446                 .addNamedValue(new NamedValueBean(nvb.getName(), nvb
447                 .getExpression(), nvb.getValue()))) {
448             String JavaDoc key = (String JavaDoc) keys.next();
449             nvb = (NamedValueBean) map.get(key);
450         }
451         
452     }
453     
454 }
455
Popular Tags