KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > icesoft > jsfmeta > eclipse > CMGenerator


1 /*
2  * CM Model Generator
3  */

4
5 package com.icesoft.jsfmeta.eclipse;
6
7 import com.icesoft.jsfmeta.MetadataXmlParser;
8 import com.icesoft.jsfmeta.util.GeneratorUtil;
9 import com.sun.rave.jsfmeta.beans.ComponentBean;
10 import com.sun.rave.jsfmeta.beans.FacesConfigBean;
11 import com.sun.rave.jsfmeta.beans.PropertyBean;
12 import com.sun.rave.jsfmeta.beans.RenderKitBean;
13 import com.sun.rave.jsfmeta.beans.RendererBean;
14 import java.io.File JavaDoc;
15 import java.io.FileNotFoundException JavaDoc;
16 import java.io.FileOutputStream JavaDoc;
17 import java.io.IOException JavaDoc;
18 import java.net.URL JavaDoc;
19 import java.util.HashMap JavaDoc;
20 import java.util.Map JavaDoc;
21 import java.util.Properties JavaDoc;
22 import java.util.logging.Level JavaDoc;
23 import java.util.logging.Logger JavaDoc;
24 import javax.faces.render.RenderKitFactory;
25 import javax.xml.parsers.DocumentBuilder JavaDoc;
26 import javax.xml.parsers.DocumentBuilderFactory JavaDoc;
27 import javax.xml.parsers.ParserConfigurationException JavaDoc;
28 import javax.xml.transform.Transformer JavaDoc;
29 import javax.xml.transform.TransformerConfigurationException JavaDoc;
30 import javax.xml.transform.TransformerException JavaDoc;
31 import javax.xml.transform.TransformerFactory JavaDoc;
32 import javax.xml.transform.TransformerFactoryConfigurationError JavaDoc;
33 import javax.xml.transform.dom.DOMSource JavaDoc;
34 import javax.xml.transform.stream.StreamResult JavaDoc;
35 import org.w3c.dom.DOMException JavaDoc;
36 import org.w3c.dom.Document JavaDoc;
37 import org.w3c.dom.Element JavaDoc;
38 import org.w3c.dom.NamedNodeMap JavaDoc;
39 import org.w3c.dom.Node JavaDoc;
40 import org.w3c.dom.NodeList JavaDoc;
41 import org.xml.sax.SAXException JavaDoc;
42
43 public class CMGenerator {
44     
45     private static Logger JavaDoc log = Logger.getLogger(CMGenerator.class .getName());
46     private Document JavaDoc cmDoc;
47     private Map JavaDoc propertyDisplayLabelMap = new HashMap JavaDoc();
48     private String JavaDoc cmOutputFolder;
49     
50     public CMGenerator() {
51     }
52     
53     public void traversal(RenderKitBean renderKitBean, FacesConfigBean facesConfigBean){
54         
55         ComponentBean[] componentBeans = facesConfigBean.getComponents();
56         try {
57             Element JavaDoc rootElement = cmDoc.createElement("taglib");
58             rootElement.setAttribute("uri", "http://www.icesoft.com/icefaces/component");
59             cmDoc.appendChild(rootElement);
60             rootElement.appendChild(cmDoc.createTextNode("\n"));
61             
62             for(int i = 0; i< componentBeans.length; i++){
63                 
64                 RendererBean rendererBean = renderKitBean.getRenderer(componentBeans[i].getComponentFamily(), componentBeans[i].getRendererType());
65                 if(rendererBean == null){
66                     continue;
67                 }
68                 
69                 String JavaDoc tagName = rendererBean.getTagName();
70                 if(tagName == null || tagName.length() < 1){
71                     continue;
72                 }
73                 
74                 Element JavaDoc tagElement = cmDoc.createElement("tag");
75                 tagElement.appendChild(cmDoc.createTextNode("\n"));
76                 tagElement.setAttribute("name", tagName);
77                 rootElement.appendChild(tagElement);
78                 rootElement.appendChild(cmDoc.createTextNode("\n"));
79                 
80                 baselineAttribute(componentBeans[i], tagElement, facesConfigBean);
81             }
82         } catch (DOMException JavaDoc ex) {
83             ex.printStackTrace();
84         }
85     }
86     
87     private void baselineAttribute(ComponentBean componentBean, Element JavaDoc tagElement, FacesConfigBean facesConfigBean){
88         
89         PropertyBean[] propertyBeans = componentBean.getProperties();
90         for(int j=0; j< propertyBeans.length; j++){
91             
92             if(propertyBeans[j].isSuppressed() || !propertyBeans[j].isTagAttribute()
93             || propertyBeans[j].getPropertyName().length() < 1
94                     || propertyBeans[j].getCategory() == null
95                     || propertyBeans[j].getCategory().length() < 1){
96                 continue;
97             }
98             
99             if(getElementByAttributeName(tagElement, "attribute",propertyBeans[j].getPropertyName()) != null){
100                 continue;
101             }
102             
103             addCategory(tagElement, propertyBeans[j], createAttributeElement(propertyBeans[j]));
104         }
105         
106         if(componentBean.getBaseComponentType() != null
107                 && facesConfigBean.getComponent(componentBean.getBaseComponentType()) != null){
108             baselineAttribute(facesConfigBean.getComponent(componentBean.getBaseComponentType()), tagElement, facesConfigBean);
109         }
110     }
111     
112     
113     private Element JavaDoc createAttributeElement(PropertyBean propertyBean){
114         
115         String JavaDoc suggestedValue = propertyBean.getSuggestedValue();
116         String JavaDoc defaultValue = propertyBean.getDefaultValue();
117         String JavaDoc propertyName = propertyBean.getPropertyName();
118         String JavaDoc propertyClass = propertyBean.getPropertyClass();
119         String JavaDoc category = propertyBean.getCategory();
120         String JavaDoc propertyEditor = propertyBean.getEditorClass();
121         
122         if(log.isLoggable(Level.FINEST)){
123             log.log(Level.FINEST, " suggestedValue="+suggestedValue+" defaultValue="+defaultValue+
124                     " propertyName="+propertyName+" propertyClass=" +propertyClass+" category="+category+" editor="+propertyEditor);
125         }
126         
127         Element JavaDoc attributeElement = cmDoc.createElement("attribute");
128         attributeElement.setAttribute("name", propertyName);
129         attributeElement.setAttribute("displaylabel", "%Attribute.Label."+ propertyName);
130         
131         propertyDisplayLabelMap.put("Attribute.Label."+propertyName, propertyBean.getPropertyName());
132         PropertyClassNameUtil util = new PropertyClassNameUtil();
133         String JavaDoc propertyTypeName = util.getMatchedName(propertyClass, category, propertyName, propertyEditor);
134         
135         if(propertyTypeName != null && propertyTypeName.length() > 0){
136             attributeElement.setAttribute("type", propertyTypeName);
137         }
138         
139         return attributeElement;
140     }
141     
142     private void addCategory(Element JavaDoc tagElement, PropertyBean propertyBean, Element JavaDoc attributeElement){
143         
144         Element JavaDoc categoryElement = null;
145         Node JavaDoc testElement = getElementByCategoryName(tagElement, "category",propertyBean.getCategory());
146         if(testElement != null){
147             return;
148         }else{
149             categoryElement = cmDoc.createElement("category");
150             categoryElement.setAttribute("displaylabel", "%Category.Label."+propertyBean.getCategory());
151             categoryElement.setAttribute("name",propertyBean.getCategory());
152             tagElement.appendChild(categoryElement);
153             tagElement.appendChild(cmDoc.createTextNode("\n"));
154             
155             //TODO: fix metadata related to category.
156
if(propertyBean != null && propertyBean.getCategory() != null){
157                 propertyDisplayLabelMap.put("Category.Label."+propertyBean.getCategory(), propertyBean.getCategory());
158             }
159         }
160         
161         if(categoryElement != null){
162             categoryElement.appendChild(attributeElement);
163             categoryElement.appendChild(cmDoc.createTextNode("\n"));
164         }
165     }
166     
167     
168     public static void main(String JavaDoc[] args){
169         
170         CMGenerator generator = new CMGenerator();
171         generator.generate(args);
172     }
173     
174     private void generate(String JavaDoc[] args){
175         
176         //TODO:
177
//for(int i=0; i<args.length; i++){
178

179         try {
180             
181             CMGenerator generator = new CMGenerator();
182             Document JavaDoc document = generator.initDoc();
183             generator.init();
184             generator.serialize(document);
185             
186             //TODO:
187
// CMParserHelper cmParser = new CMParserHelper();
188
// cmParser.getInfo();
189

190             CMProperties printProperties = new CMProperties();
191             printProperties.putAll(generator.propertyDisplayLabelMap);
192             
193             File JavaDoc propFile = new File JavaDoc(generator.cmOutputFolder, "ICEfaces_component_cm.properties");
194             generator.saveProperties(propFile.getPath(), printProperties);
195         } catch (ParserConfigurationException JavaDoc ex) {
196             ex.printStackTrace();
197         } catch(TransformerConfigurationException JavaDoc ex){
198             ex.printStackTrace();
199         } catch(TransformerException JavaDoc ex){
200             ex.printStackTrace();
201         }
202     }
203     
204     private void saveProperties(String JavaDoc filePath, Properties JavaDoc properties){
205         
206         File JavaDoc outputFile = new File JavaDoc(filePath);
207         try {
208             FileOutputStream JavaDoc outputStream = new FileOutputStream JavaDoc(outputFile);
209             properties.store(outputStream, null);
210         } catch (FileNotFoundException JavaDoc ex) {
211             ex.printStackTrace();
212         } catch (IOException JavaDoc ex) {
213             ex.printStackTrace();
214         }
215     }
216     
217     private void setOutputFolder(){
218         
219         try {
220             //File folder = GeneratorUtil.getDestFolder("/home/frank/eclipse_ide/com.icesoft.ide.eclipse.designtime/metadata");
221
File JavaDoc folder = GeneratorUtil.getDestFolder(GeneratorUtil.getWorkingFolder()+"../generated-sources/eclipse/metadata");
222             cmOutputFolder = folder.getPath();
223             File JavaDoc outputFile = new File JavaDoc(folder, "ICEfaces_component_cm.xml");
224             outputFile.mkdirs();
225             outputFile.delete();
226             
227             File JavaDoc propFile = new File JavaDoc(folder, "ICEfaces_component_cm.properties");
228             propFile.delete();
229         } catch (FileNotFoundException JavaDoc ex) {
230             ex.printStackTrace();
231         }
232     }
233     
234     public void init() {
235         
236         setOutputFolder();
237         String JavaDoc fileName = "./src/main/resources/conf/extended-faces-config.xml";
238         String JavaDoc standard_html_renderkit = "jar:file:"+GeneratorUtil.getWorkingFolder()+"jsfmeta-resources.jar!/com/sun/faces/standard-html-renderkit.xml";
239         String JavaDoc standard_html_renderkit_overlay = "jar:file:"+GeneratorUtil.getWorkingFolder()+"jsfmeta-resources.jar!/com/sun/rave/jsfmeta/standard-html-renderkit-overlay.xml";
240         String JavaDoc standard_html_renderkit_fixup = "jar:file:"+GeneratorUtil.getWorkingFolder()+"jsfmeta-resources.jar!/META-INF/standard-html-renderkit-fixups.xml";
241         
242         String JavaDoc[] baseUrlList = new String JavaDoc[]{standard_html_renderkit, standard_html_renderkit_overlay, standard_html_renderkit_fixup};
243         
244         MetadataXmlParser metadataParser = new MetadataXmlParser();
245         metadataParser.setDesign(false);
246         
247         try {
248             
249             File JavaDoc file = new File JavaDoc(fileName);
250             FacesConfigBean facesConfigBean = metadataParser.parse(file);
251             for(int i=0; i< baseUrlList.length; i++){
252                 metadataParser.parse(new URL JavaDoc(baseUrlList[i]), facesConfigBean);
253             }
254             RenderKitBean renderKitBean = facesConfigBean.getRenderKit(RenderKitFactory.HTML_BASIC_RENDER_KIT);
255             traversal(renderKitBean, facesConfigBean);
256         } catch (IOException JavaDoc e) {
257             e.printStackTrace();
258         } catch (SAXException JavaDoc e) {
259             e.printStackTrace();
260         }
261     }
262     
263     /*
264      * @return category node by given child tag name
265      */

266     private Node JavaDoc getElementByCategoryName(Element JavaDoc tagElement, String JavaDoc childTagName, String JavaDoc categoryName){
267         
268         NodeList JavaDoc nodeList = tagElement.getElementsByTagName(childTagName);
269         for(int i=0; i < nodeList.getLength(); i++){
270             Node JavaDoc node = nodeList.item(i);
271             NamedNodeMap JavaDoc namedNodeMap = node.getAttributes();
272             for(int j=0; j< namedNodeMap.getLength();j++){
273                 Node JavaDoc childNode = namedNodeMap.item(j);
274                 if(childNode.getNodeValue().equalsIgnoreCase(categoryName)){
275                     return node;
276                 }
277             }
278         }
279         return null;
280         
281     }
282     
283     /*
284      * @return child node by given child value
285      */

286     private Node JavaDoc getElementByAttributeName(Element JavaDoc tagElement, String JavaDoc childTagName, String JavaDoc value){
287         
288         NodeList JavaDoc nodeList = tagElement.getElementsByTagName(childTagName);
289         for(int i=0; i < nodeList.getLength(); i++){
290             Node JavaDoc node = nodeList.item(i);
291             NamedNodeMap JavaDoc namedNodeMap = node.getAttributes();
292             for(int j=0; j< namedNodeMap.getLength();j++){
293                 Node JavaDoc childNode = namedNodeMap.item(j);
294                 if(childNode.getNodeValue().equalsIgnoreCase(value)){
295                     return childNode;
296                 }
297             }
298         }
299         return null;
300     }
301     
302     
303     private Node JavaDoc getChildNode(Node JavaDoc node, String JavaDoc namedValue){
304         
305         NodeList JavaDoc nodeList = node.getChildNodes();
306         for(int i =0; i< nodeList.getLength(); i++){
307             Node JavaDoc child = nodeList.item(i);
308             if(child.getNodeName().equalsIgnoreCase(namedValue)){
309                 return child;
310             }
311         }
312         return null;
313     }
314     
315     public Document JavaDoc initDoc() throws ParserConfigurationException JavaDoc{
316         if(cmDoc == null){
317             DocumentBuilder JavaDoc builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
318             cmDoc = builder.newDocument();
319         }
320         return cmDoc;
321     }
322     
323     public void serialize(Document JavaDoc document) throws TransformerConfigurationException JavaDoc, TransformerException JavaDoc{
324         try {
325             
326             File JavaDoc outputXmlFile = new File JavaDoc(cmOutputFolder, "ICEfaces_component_cm.xml");
327             TransformerFactory JavaDoc transformerFactory = TransformerFactory.newInstance();
328             Transformer JavaDoc transformer = transformerFactory.newTransformer();
329             transformer.transform(new DOMSource JavaDoc(document),new StreamResult JavaDoc( new FileOutputStream JavaDoc(outputXmlFile.getPath())));
330         } catch (TransformerConfigurationException JavaDoc ex) {
331             ex.printStackTrace();
332         } catch (TransformerException JavaDoc ex) {
333             ex.printStackTrace();
334         } catch (TransformerFactoryConfigurationError JavaDoc ex) {
335             ex.printStackTrace();
336         } catch (Exception JavaDoc ex){
337             ex.printStackTrace();
338         }
339     }
340     
341 }
342
Popular Tags