1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.javagen.revgen;
17
18 import org.javagen.agile.core.ioc.spring.SpringMain;
19
20 /***
21 * Loads RevGen configuration and executes code generation pipeline using Spring framework IoC BeanFactory.
22 * <p>
23 * This class excepts two arguments: <code>revgen.properties</code> and <code>RevGenSpringConfig.xml</code>.
24 * <p>
25 * <code>revgen.properties</code> is meant to be the first (ie easiest) level of RevGen configuration specifying:
26 * <ul>
27 * <li>Database connection properties</li>
28 * <li>Generated project name and directory location</li>
29 * <li>Source folder layout</li>
30 * <li>Output types: annotations vs XML, Hibernate vs Spring vs EJB3 implementations, etc.</li>
31 * <li>The global overwrite policy (aka <code>overwriteAll</code>)</li>
32 * </ul>
33 *
34 * Any type of configuration can be achieved using <code>RevGenSpringConfig.xml</code> including:
35 * <ul>
36 * <li>Pipeline components and order of execution</li>
37 * <li>Template names, locations and types and their artifact naming patterns and relative output locations</li>
38 * <li>Per-template overwrite predicates</li>
39 * <li>Binding templates to model instances</li>
40 * <li>Root structure of model tree including global properties and parent containers for generated model instances</li>
41 * <li>Default and artifact-specific naming patterns using model and emitter contexts</li>
42 * <li>Reading, writing and merging of metadata</li>
43 * <li>Database table selection</li>
44 * <li>Code naming and conversion implementations</li>
45 * <li>Anything that <code>revgen.properties</code> can specify</li>
46 * </ul>
47 * <p>
48 * <p>
49 * Properties inputs have the following precedence from lowest to highest:
50 * <ol>
51 * <li>Properties specified in the <code>GlobalPropertyHolder</code> bean within the RevGenSpringConfig.xml file.</li>
52 * <li>Properties specified in the external <code>propertyFile</code>. Note: this can be specified as a <code>GlobalPropertyHolder</code> property and overridden here.</li>
53 * <li>Properties specified in the <code>properties</code> instance. Note: these are usually set by the invoking tool (i.e. Maven).</li>
54 * </ol>
55 * This is an extremely flexible way to configure the code generator, avoiding a one-size-fits-all approach.
56 * <p>
57 * @author Richard Easterling
58 */
59 public class Main extends SpringMain {
60
61 public Main() {
62 this.setConfigFile("classpath:RevGenSpringConfig.xml");
63 }
64 /***
65 * Loads and runs RevGen using Spring configuration file. RevGen is started by invoking
66 * the <code>pipeline</code> bean.
67 * <p>
68 * @param args takes an optional Spring XML configuration file location and/or a properties file.
69 * Files can be any valid URL or classpath location. File types are recognized by their extension,
70 * names and order are not important. Here are some valid examples:
71 * <ul>
72 * <li>file:src/revgen/RevGenSpringConfig.xml</li>
73 * <li>classpath:RevGenSpringConfig.xml</li>
74 * <li>file:src/revgen/revgen.properties</li>
75 * <li>classpath:revgen.properties</li>
76 * </ul>
77 */
78 public static void main(String[] args) throws Exception {
79 Main main = new Main();
80 main.setArgs(args);
81 main.runPipeline();
82 }
83
84 }