1 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 ; 15 import java.io.FileNotFoundException ; 16 import java.io.FileOutputStream ; 17 import java.io.IOException ; 18 import java.net.URL ; 19 import java.util.HashMap ; 20 import java.util.Map ; 21 import java.util.Properties ; 22 import java.util.logging.Level ; 23 import java.util.logging.Logger ; 24 import javax.faces.render.RenderKitFactory; 25 import javax.xml.parsers.DocumentBuilder ; 26 import javax.xml.parsers.DocumentBuilderFactory ; 27 import javax.xml.parsers.ParserConfigurationException ; 28 import javax.xml.transform.Transformer ; 29 import javax.xml.transform.TransformerConfigurationException ; 30 import javax.xml.transform.TransformerException ; 31 import javax.xml.transform.TransformerFactory ; 32 import javax.xml.transform.TransformerFactoryConfigurationError ; 33 import javax.xml.transform.dom.DOMSource ; 34 import javax.xml.transform.stream.StreamResult ; 35 import org.w3c.dom.DOMException ; 36 import org.w3c.dom.Document ; 37 import org.w3c.dom.Element ; 38 import org.w3c.dom.NamedNodeMap ; 39 import org.w3c.dom.Node ; 40 import org.w3c.dom.NodeList ; 41 import org.xml.sax.SAXException ; 42 43 public class CMGenerator { 44 45 private static Logger log = Logger.getLogger(CMGenerator.class .getName()); 46 private Document cmDoc; 47 private Map propertyDisplayLabelMap = new HashMap (); 48 private String 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 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 tagName = rendererBean.getTagName(); 70 if(tagName == null || tagName.length() < 1){ 71 continue; 72 } 73 74 Element 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 ex) { 83 ex.printStackTrace(); 84 } 85 } 86 87 private void baselineAttribute(ComponentBean componentBean, Element 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 createAttributeElement(PropertyBean propertyBean){ 114 115 String suggestedValue = propertyBean.getSuggestedValue(); 116 String defaultValue = propertyBean.getDefaultValue(); 117 String propertyName = propertyBean.getPropertyName(); 118 String propertyClass = propertyBean.getPropertyClass(); 119 String category = propertyBean.getCategory(); 120 String 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 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 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 tagElement, PropertyBean propertyBean, Element attributeElement){ 143 144 Element categoryElement = null; 145 Node 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 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 [] args){ 169 170 CMGenerator generator = new CMGenerator(); 171 generator.generate(args); 172 } 173 174 private void generate(String [] args){ 175 176 179 try { 180 181 CMGenerator generator = new CMGenerator(); 182 Document document = generator.initDoc(); 183 generator.init(); 184 generator.serialize(document); 185 186 190 CMProperties printProperties = new CMProperties(); 191 printProperties.putAll(generator.propertyDisplayLabelMap); 192 193 File propFile = new File (generator.cmOutputFolder, "ICEfaces_component_cm.properties"); 194 generator.saveProperties(propFile.getPath(), printProperties); 195 } catch (ParserConfigurationException ex) { 196 ex.printStackTrace(); 197 } catch(TransformerConfigurationException ex){ 198 ex.printStackTrace(); 199 } catch(TransformerException ex){ 200 ex.printStackTrace(); 201 } 202 } 203 204 private void saveProperties(String filePath, Properties properties){ 205 206 File outputFile = new File (filePath); 207 try { 208 FileOutputStream outputStream = new FileOutputStream (outputFile); 209 properties.store(outputStream, null); 210 } catch (FileNotFoundException ex) { 211 ex.printStackTrace(); 212 } catch (IOException ex) { 213 ex.printStackTrace(); 214 } 215 } 216 217 private void setOutputFolder(){ 218 219 try { 220 File folder = GeneratorUtil.getDestFolder(GeneratorUtil.getWorkingFolder()+"../generated-sources/eclipse/metadata"); 222 cmOutputFolder = folder.getPath(); 223 File outputFile = new File (folder, "ICEfaces_component_cm.xml"); 224 outputFile.mkdirs(); 225 outputFile.delete(); 226 227 File propFile = new File (folder, "ICEfaces_component_cm.properties"); 228 propFile.delete(); 229 } catch (FileNotFoundException ex) { 230 ex.printStackTrace(); 231 } 232 } 233 234 public void init() { 235 236 setOutputFolder(); 237 String fileName = "./src/main/resources/conf/extended-faces-config.xml"; 238 String standard_html_renderkit = "jar:file:"+GeneratorUtil.getWorkingFolder()+"jsfmeta-resources.jar!/com/sun/faces/standard-html-renderkit.xml"; 239 String standard_html_renderkit_overlay = "jar:file:"+GeneratorUtil.getWorkingFolder()+"jsfmeta-resources.jar!/com/sun/rave/jsfmeta/standard-html-renderkit-overlay.xml"; 240 String standard_html_renderkit_fixup = "jar:file:"+GeneratorUtil.getWorkingFolder()+"jsfmeta-resources.jar!/META-INF/standard-html-renderkit-fixups.xml"; 241 242 String [] baseUrlList = new String []{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 file = new File (fileName); 250 FacesConfigBean facesConfigBean = metadataParser.parse(file); 251 for(int i=0; i< baseUrlList.length; i++){ 252 metadataParser.parse(new URL (baseUrlList[i]), facesConfigBean); 253 } 254 RenderKitBean renderKitBean = facesConfigBean.getRenderKit(RenderKitFactory.HTML_BASIC_RENDER_KIT); 255 traversal(renderKitBean, facesConfigBean); 256 } catch (IOException e) { 257 e.printStackTrace(); 258 } catch (SAXException e) { 259 e.printStackTrace(); 260 } 261 } 262 263 266 private Node getElementByCategoryName(Element tagElement, String childTagName, String categoryName){ 267 268 NodeList nodeList = tagElement.getElementsByTagName(childTagName); 269 for(int i=0; i < nodeList.getLength(); i++){ 270 Node node = nodeList.item(i); 271 NamedNodeMap namedNodeMap = node.getAttributes(); 272 for(int j=0; j< namedNodeMap.getLength();j++){ 273 Node childNode = namedNodeMap.item(j); 274 if(childNode.getNodeValue().equalsIgnoreCase(categoryName)){ 275 return node; 276 } 277 } 278 } 279 return null; 280 281 } 282 283 286 private Node getElementByAttributeName(Element tagElement, String childTagName, String value){ 287 288 NodeList nodeList = tagElement.getElementsByTagName(childTagName); 289 for(int i=0; i < nodeList.getLength(); i++){ 290 Node node = nodeList.item(i); 291 NamedNodeMap namedNodeMap = node.getAttributes(); 292 for(int j=0; j< namedNodeMap.getLength();j++){ 293 Node 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 getChildNode(Node node, String namedValue){ 304 305 NodeList nodeList = node.getChildNodes(); 306 for(int i =0; i< nodeList.getLength(); i++){ 307 Node child = nodeList.item(i); 308 if(child.getNodeName().equalsIgnoreCase(namedValue)){ 309 return child; 310 } 311 } 312 return null; 313 } 314 315 public Document initDoc() throws ParserConfigurationException { 316 if(cmDoc == null){ 317 DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); 318 cmDoc = builder.newDocument(); 319 } 320 return cmDoc; 321 } 322 323 public void serialize(Document document) throws TransformerConfigurationException , TransformerException { 324 try { 325 326 File outputXmlFile = new File (cmOutputFolder, "ICEfaces_component_cm.xml"); 327 TransformerFactory transformerFactory = TransformerFactory.newInstance(); 328 Transformer transformer = transformerFactory.newTransformer(); 329 transformer.transform(new DOMSource (document),new StreamResult ( new FileOutputStream (outputXmlFile.getPath()))); 330 } catch (TransformerConfigurationException ex) { 331 ex.printStackTrace(); 332 } catch (TransformerException ex) { 333 ex.printStackTrace(); 334 } catch (TransformerFactoryConfigurationError ex) { 335 ex.printStackTrace(); 336 } catch (Exception ex){ 337 ex.printStackTrace(); 338 } 339 } 340 341 } 342
| Popular Tags
|