Wiki source code of Velocity EOGenerator (Veogen)

Version 72.1 by chuckhill on 2008/03/05 12:30

Hide last authors
chuckhill 72.1 1 This is a basic guide to getting the Velocity Generator to work under Leopard, using Eclipse 3.3.1.1 and WOLips 3.3.4669, later versions should work. The guide is basic in that it should work the way it's detailed below, it doesn't represent the only way, nor probably an optimized way to work with Velocity Generator.
cornelius 48.1 2
chuckhill 72.1 3 See also [[EOGenerator Templates & Additions>>WOL:*EOGenerator Templates & Additions]] for detailed information on template contents.
4
David Avendasora 50.1 5 === History and Context ===
David Avendasora 26.1 6
David Avendasora 50.1 7 (from Pierce T Wetter III)
8 EOModeler had built in code generation, which always sucked, because it didn't use the [[Generation Gap Pattern>>http://www.research.ibm.com/designpatterns/pubs/gg.html]]. It used some kind of Apple-specific template format.
David Avendasora 26.1 9
chuckhill 72.1 10 [[EOGenerator>>http://www.rubicode.com/Software/EOGenerator/]], written in objc, relied on an objc-EOF framework to parse the model. That's broken in Mac OS 10.5, (WO 5.4), even if you have the 5.3 frameworks installed, because the Java-objc bridge it uses is not available on 10.5. It uses MiscMerge templates, an open source objc library.
David Avendasora 26.1 11
chuckhill 72.1 12 [[JavaEOGenerator>>http://developer.apple.com/samplecode/JavaEOGenerator/]] is an Apple replacement that uses WO style templates (.html, .wod, etc.), which means it's actually written as a .woa. It uses the WO code to parse the model. The advantage of it is that if Apple changes the model file format, presumably they might change JavaEOGenerator. The disadvantage is that you have to rewrite your templates anyways.
David Avendasora 26.1 13
chuckhill 72.1 14 What people are calling VelocityGenerator is built into WOLips, and uses the code from EntityModeler inside WOLips to parse the model. Given that Apple is funding EntityModeler these days, presumably it will be inherently compatible with any/all .eomodel files going forward. It uses a template library in [[Velocity format>>http://velocity.apache.org/engine/releases/velocity-1.5/vtl-reference-guide.html]], [[Velocity>>http://velocity.apache.org/]] being an open source Java library. It's main advantage is that it's built into WOLips, so there's nothing else to install, and it has some useful built-in defaults (like looking in a templates folder for the templates).
David Avendasora 50.1 15
16 My decision: After considering the above, I went with the Velocity templates. They were built in, the .eogen default was to use that anyways, so I'll have zero-config issues with the other team members, and Mike Shrag's public much-more-capable template examples were in that format anyways.
17
18 === Tutorial ===
19
chuckhill 72.1 20 There are two ways: create eclipse-wide settings, or create settings per project.
Johan Henselmans 64.1 21
chuckhill 72.1 22 Note: There is actually no need to download Mike's templates as described below unless you want to customize them. WOLips includes two sets of default templates in the .jar files (so don't bother searching your file system for them) - one as described below and another for use with WOnder. If you are using WOnder, you need to follow Mike's instructions for their use: "Where it says "Entity.java" and "//Entity.java" you can use WonderEntity.java and //WonderEntity.java ... If your individual .eogen files override that, you will have to set it in there also". If you leave the "EOGenerator Template Folder" field empty, it will use the default templates...
23
Johan Henselmans 70.1 24 ==== eclipse-wide settings for EOGeneration ====
Johan Henselmans 64.1 25
26 ~1. Download the templates that Mike Schrag made from [[http://webobjects.mdimension.com/wolips/EOGenerator/Velocity%20EOGenerator%20Templates/]]
27
chuckhill 72.1 28 and place them in a folder. In my case that was in
Johan Henselmans 64.1 29
Johan Henselmans 66.1 30 /Applications/Developing/VelocityEOGeneratorTemplates
Johan Henselmans 64.1 31
chuckhill 72.1 32 Inside this folder you will have two standard templates: Entity.java en Entity.java. Do not change them for the moment.
Johan Henselmans 70.1 33
chuckhill 72.1 34 (Additional templates and a reference are available [[here>>*EOGenerator Templates & Additions]])
35
Johan Henselmans 64.1 36 2. Go to Preferences > WOLips > EOGenerator
37
38 In EOGenerator Template Folder, fill in the folder you have placed the templates
chuckhill 72.1 39 In EOGenerator Java Template fill in Entity.java
Johan Henselmans 64.1 40 In EOGenerator Subclass Java Template fill in Entity.java
41
42 This is how it looks in my settings:
43
Johan Henselmans 66.1 44 {{panel bgColor="#d8e4f1"}}
45
chuckhill 72.1 46 \\ !VEOGeneratorSettingsEclipse.png|align=center!\\
47 \\
48 \\
Johan Henselmans 66.1 49
50 {{/panel}}
51
chuckhill 72.1 52 3. Go to the eomodel from which you want to create classes and subclasses in the WOPackage sidebar of Eclipse
Johan Henselmans 64.1 53
chuckhill 72.1 54 4. Right click and choose WOLips Tools > Create EOGenerator File from the contextual menu, (it's a submenu)
Johan Henselmans 64.1 55
Johan Henselmans 68.1 56 {{panel bgColor="#d8e4f1"}}
57
chuckhill 72.1 58 \\ !CreateEOGenContextualMenu.png|align=center!\\
59 \\
60 \\
Johan Henselmans 68.1 61
62 {{/panel}}
63
chuckhill 72.1 64 Now a eogen file is created which has the name of the EOModel and an .eogen extension.
65 If there is already an eogen file, then another one will be created, with a number between the EOModel name and the extension.
Johan Henselmans 64.1 66 The one with the highest number will be the newest (unless you decided to throw earlier ones away, then the numbering starts all over again).
67
Johan Henselmans 68.1 68 {{panel bgColor="#d8e4f1"}}
69
chuckhill 72.1 70 \\ !MoreEogenfiles.png|align=center!\\
71 \\
72 \\
Johan Henselmans 68.1 73
74 {{/panel}}
75
chuckhill 72.1 76 5. Go to the eogen file, right click and choose EOGenerate... from the contextual menu.
Johan Henselmans 64.1 77
Johan Henselmans 68.1 78 {{panel bgColor="#d8e4f1"}}
79
chuckhill 72.1 80 \\ !EOGenerateContextualMenu.png|align=center!\\
81 \\
82 \\
Johan Henselmans 68.1 83
84 {{/panel}}
85
chuckhill 72.1 86 If you have some definitions in your EOModel that have a Class Name that is not an EOGenericRecord, then the appropriate java class and subclass will be generated.
Johan Henselmans 64.1 87
chuckhill 72.1 88 For instance: a Person class name in EOModel will result in a Person.java file (which will be overwritten the next time EOGeneration will take place) and a Person.java file. The java file without the underscore is the file that will not be overwritten the next time. This file is the file that you would add your own methods. The next time the model changes, the underscore.java file will be overwritten, but your methods are safe.
Johan Henselmans 64.1 89
chuckhill 72.1 90 6. Check if everything worked out fine. If not (e.g. you made a typing error and a java file happens to be empty) throw away the generated file yo do not want, and restart the process.
Johan Henselmans 64.1 91
chuckhill 72.1 92 7. If you are fine, you can start fine tuning your templates, or start defining templates per project.
Johan Henselmans 64.1 93
Johan Henselmans 70.1 94 ==== making Velocity EOGenerator settings per project ====
95
David Avendasora 50.1 96 ~1. Under Preferences > WOLips > EOGenerator
97 ~> Remove all entries (this is not strictly necessary, but it rules out any errors at the project level)
98
99 {{panel bgColor="#d8e4f1"}}
100
chuckhill 72.1 101 \\ !1. EOGenerator Project.png|align=center!\\
102 \\
103 \\
David Avendasora 50.1 104
105 {{/panel}}
106
107 2. Add a folder named templates in your project folder, inside of which you place your template files.
108 For starters, don't rename them. You can download them here:
109 [[http://webobjects.mdimension.com/wolips/EOGenerator/Velocity%20EOGenerator%20Templates/]]
110
111 {{panel bgColor="#d8e4f1"}}
112
chuckhill 72.1 113 \\ !2. Directory Structure.png|align=center!\\
114 \\
115 \\
David Avendasora 50.1 116
117 {{/panel}}
118
119 Other options for Veogen to pick up any changes you wish to make to the templates:
120
121 * inside your eogen file you need to set template path to the folder containing Entity.java, and if it's named something other than Entity.java, you need to also set template name. Note that template name is ONLY a name, not a full path.
122 * or locate the template files in one of the paths that Velocity EOGenerator looks in by default (,,/Library/Application Support/WOLips/EOGenerator///Entity.java, for example).//,,
123
124 3. Double check your model, so that none of your entities extend EOGenericRecord,
125 otherwise the generation gap pattern won't work, as the velocity generator generates all files,
126 rather than just those extending custom classes. this is a change from the old eogenerator. Also, your entities should be in packages for this all to work optimally. In the example "projectname.eo.class". When it was tried with no package (class) there were a number of errors in the resulting Java class files.
127
128 {{panel bgColor="#d8e4f1"}}
129
chuckhill 72.1 130 \\ !3. Entities Snapshot.png|align=center!\\
131 \\
132 \\
David Avendasora 50.1 133
134 {{/panel}}
135
136 4. Create or edit your .eogen file, mine looks like this:
137
138 {{panel bgColor="#d8e4f1"}}
139
chuckhill 72.1 140 \\ !4. Config Overview.png|align=center!\\
141 \\
142 \\
David Avendasora 50.1 143
144 {{/panel}}
145
chuckhill 72.1 146 5. Double check, and open the .eogen file using open with > text editor. The whole command must all be on a single line; this is formatted for clarity:
David Avendasora 50.1 147
Pascal Robert 62.1 148 {{panel bgColor="#d8e4f1"}}
David Avendasora 50.1 149
chuckhill 72.1 150 {code}
151 1. -destination Sources
152 -java
153 -javaTemplate _Entity.java
154 -model Resources/SF.eomodeld
155 -packagedirs
156 -subclassDestination Sources
157 -subclassJavaTemplate Entity.java
158 -templatedir templates
159 -verbose
160 {code}
David Avendasora 50.1 161
162 {{/panel}}
163
164 6. If you are not seeing your entity files that start with the underscore character "//" in Eclipse, it is because you have them filtered out. Select filters from the down triangle in the package explorer~://
165
166 {{panel bgColor="#d8e4f1"}}
167
chuckhill 72.1 168 \\ !select.png|align=center!\\
169 \\
170 \\
David Avendasora 50.1 171
172 {{/panel}}
173
174 7. Then uncheck 'EOGenerator Files':
175
176 {{panel bgColor="#d8e4f1"}}
177
chuckhill 72.1 178 \\ !filters.png|align=center!\\
179 \\
180 \\
David Avendasora 50.1 181
182 {{/panel}}