1 42 43 package org.jfree.xml.generator; 44 45 import java.io.BufferedInputStream ; 46 import java.io.BufferedWriter ; 47 import java.io.File ; 48 import java.io.FileWriter ; 49 import java.io.IOException ; 50 import java.io.InputStream ; 51 import java.io.Writer ; 52 import java.net.URL ; 53 import java.util.Iterator ; 54 import java.util.Properties ; 55 56 import org.jfree.util.Log; 57 import org.jfree.util.PrintStreamLogTarget; 58 import org.jfree.util.ObjectUtilities; 59 import org.jfree.xml.generator.model.DescriptionModel; 60 61 64 public final class DescriptionGenerator { 65 66 73 private static Properties loadProperties(final URL propertyURL) { 74 final Properties p = new Properties (); 75 try { 76 final InputStream in = new BufferedInputStream (propertyURL.openStream()); 77 p.load(in); 78 in.close(); 79 } 80 catch (Exception e) { 81 System.err.println("Unable to load properties from " + propertyURL); 82 } 83 return p; 84 } 85 86 93 public static void main(final String [] args) throws Exception { 94 95 Log.getInstance().addTarget(new PrintStreamLogTarget()); 96 97 URL propertyURL = ObjectUtilities.getResourceRelative 98 ("generator.properties", DescriptionGenerator.class); 99 if (args.length > 0) { 100 final File f = new File (args[0]); 101 propertyURL = f.toURL(); 102 } 103 final Properties p = loadProperties(propertyURL); 104 105 final String handlerSource = p.getProperty("attributedefinition"); 106 if (handlerSource != null) { 107 final Properties handlers = loadProperties(new URL (propertyURL, handlerSource)); 108 ModelBuilder.getInstance().addAttributeHandlers(handlers); 109 } 110 111 final String source = p.getProperty("sourcedirectory", "."); 112 final String target = p.getProperty("targetfile", "model.xml"); 113 DescriptionModel model = null; 114 try { 115 model = new DefaultModelReader().load(target); 116 } 117 catch (Exception e) { 118 Log.debug("Unable to load default model. Ignoring..."); 119 } 120 model = generate(source, p, model); 122 model.prune(); 123 writeMultiFile(target, model); 124 System.exit(0); 125 } 126 127 136 public static DescriptionModel generate(final String source, 137 final Properties configuration, 138 final DescriptionModel model) { 139 140 final JavaSourceCollector jsc = new JavaSourceCollector(new File (source)); 141 142 final Iterator it = configuration.keySet().iterator(); 143 while (it.hasNext()) { 144 final String pName = (String ) it.next(); 145 if (pName.startsWith("ignore.baseclass.")) { 146 jsc.addIgnoredBaseClass(configuration.getProperty(pName)); 147 } 148 else if (pName.startsWith("ignore.package.")) { 149 jsc.addIgnoredPackage(configuration.getProperty(pName)); 150 } 151 } 152 153 jsc.collectFiles(); 154 return ModelBuilder.getInstance().buildModel(jsc, model); 155 } 156 157 165 public static void writeSingleFile(final String target, final DescriptionModel model) throws IOException { 166 Log.debug ("Writing ..."); 167 final ModelWriter writer = new ModelWriter(); 168 writer.setModel(model); 169 final Writer w = new BufferedWriter (new FileWriter (target)); 170 writer.write(w); 171 w.close(); 172 } 173 174 182 public static void writeMultiFile(final String target, final DescriptionModel model) throws IOException { 183 Log.debug ("Writing multiple files ..."); 184 final SplittingModelWriter writer = new SplittingModelWriter(); 185 writer.setModel(model); 186 writer.write(target); 187 } 188 189 } 190
| Popular Tags
|