1 33 34 package com.icesoft.jsfmeta.util; 35 36 import java.io.File ; 37 import java.util.ArrayList ; 38 import java.util.HashMap ; 39 import java.util.HashSet ; 40 import java.util.Iterator ; 41 import java.util.List ; 42 import java.util.Map ; 43 import java.util.Set ; 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 ; 60 import java.util.logging.Level ; 61 import java.util.logging.Logger ; 62 63 67 68 public abstract class AbstractGenerator { 69 70 71 protected static Map defaults; 72 73 protected static Set keywords; 74 75 protected static Map unwrappers; 76 77 protected static Map wrappers; 78 79 private String defaultRenderKitId; 80 81 private String excludes[]; 82 83 private String includes[]; 84 85 private FacesConfigBean config; 86 87 private File dest; 88 89 private boolean verbose; 90 91 private JavaSourceWriter writer; 92 93 protected static final Logger logger = Logger.getLogger("com.icesoft.metadata.generators"); 94 95 static { 96 97 defaults = new HashMap (); 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 (); 107 keywords.addAll(Arrays.asList(new String []{ 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 (); 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 (); 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 [0]; 146 includes = new String [0]; 147 config = null; 148 dest = new File ("."); 149 verbose = Boolean.getBoolean(internalConfig.getProperty("project.verbose")); 150 writer = new JavaSourceWriter(); 151 } 152 153 154 public String getDefaultRenderKitId() { 155 return defaultRenderKitId; 156 } 157 158 public void setDefaultRenderKitId(String defaultRenderKitId) { 159 this.defaultRenderKitId = defaultRenderKitId; 160 } 161 162 public String [] getExcludes() { 163 return excludes; 164 } 165 166 public void setExcludes(String excludes[]) { 167 this.excludes = excludes; 168 } 169 170 public String [] getIncludes() { 171 return includes; 172 } 173 174 public void setIncludes(String 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 getDest() { 187 return dest; 188 } 189 190 public void setDest(File 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 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 (" invalid base component"); 220 } else { 221 return bcb; 222 } 223 } 224 225 protected String capitalize(String name) { 226 return Character.toUpperCase(name.charAt(0)) + name.substring(1); 227 } 228 229 public String componentFamily(ComponentBean cb) { 230 231 String 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 components = new ArrayList (); 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 facets = new ArrayList (); 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 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 mangle(String 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 outputFile(String fqcn) { 344 return new File (getDest(), fqcn.replace('.', File.separatorChar) 345 + ".java"); 346 } 347 348 protected boolean primitive(String type) { 349 return defaults.containsKey(type); 350 } 351 352 protected RendererBean renderer(ComponentBean cb) { 353 354 String rendererType = rendererType(cb); 355 if (rendererType == null) { 356 return null; 357 } 358 String componentFamily = componentFamily(cb); 359 if (componentFamily == null) { 360 361 logger.log(Level.SEVERE, "NoComponentFamily"); 362 throw new IllegalArgumentException ("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 ("InvalidRendererType"); 380 } else { 381 return rb; 382 } 383 } 384 385 public String rendererType(ComponentBean cb) { 386 387 String 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 simpleClassName(String 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 list, String name) { 414 415 for (Iterator 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 map = upd.getNamedValues(); 444 NamedValueBean nvb; 445 for (Iterator keys = map.keySet().iterator(); keys.hasNext(); orig 446 .addNamedValue(new NamedValueBean(nvb.getName(), nvb 447 .getExpression(), nvb.getValue()))) { 448 String key = (String ) keys.next(); 449 nvb = (NamedValueBean) map.get(key); 450 } 451 452 } 453 454 } 455 | Popular Tags |