Andus,
We make extensive use of EOGenerator. Here is our template and the ant  
task that we use. I would love to get rid of the dependance on  
EOGenerator.
Thanks
Pierre
     <!-- Generate EOs -->
     <target name="generate.eos">
         <exec dir="${project.dir}"  
executable="/Developer/Tools/eogenerator" vmlauncher="false"  
outputproperty="eogen.log" logError="true" newenvironment="true">
             <arg value="-model" />
             <arg file="${project.dir}/Resources/Catalog.eomodeld" />
             <arg value="-refmodel" />
             <arg  
file="${project.dir}/../sPearWayAccess/Resources/Prototypes.eomodeld"  
/>
             <arg value="-templatedir" />
             <arg file="${project.dir}/../sPearWayAccess/Templates" />
             <arg value="-destination" />
             <arg file="${project.dir}/Sources/" />
             <arg value="-packagedirs" />
             <arg value="-verbose" />
             <arg value="-java" />
             <arg value="-define-copyrightYear" />
             <arg value="1997-2004" />
             <arg value="-define-copyrightBy" />
             <arg value="sPearWay Ltd." />
         </exec>
         <echo message="EOGenerator ${eogen.log}" />
     </target>
<$comment
EO Template for use by "eogenerator" based upon MiscMerge engine.
You may customize this file to modify the templates generated
by this tool.  See the MiscMerge documentation for a description
of the parsing language.  The engine gets passed this file and an
EOEntity to process, so the methods used must be ones that an
EOEntity can respond to.
BE SURE NOT TO INCLUDE DATES IN THIS FILE.  Since the "eogenerator"
tool tries to compare the newly generated file with the old file,
adding dates to this file will guarantee the old file gets
overridden by the new file, forcing a recompilation of your EO.$>
//
// <$GEN_PREFIX$><$classNameWithoutPackage$>.java
//
// Created by eogenerator
// DO NOT EDIT.  Make changes to <$classNameWithoutPackage$>.java  
instead.
// copyright <$copyrightYear$> <$copyrightBy$>
<$foreach package classPackage do$>package <$package$>;
<$endforeach do$>
import com.webobjects.foundation.*;
import com.webobjects.eocontrol.*;
import java.math.BigDecimal;
import java.util.*;
public abstract class <$GEN_PREFIX$><$classNameWithoutPackage$> extends  
<$if  
hasParentEntity$><$javaParentClassName$><$else$>EOGenericRecord<$endif$> 
  {
     private static org.apache.log4j.Logger logger =  
org.apache.log4j.Logger.getLogger(<$GEN_PREFIX$><$classNameWithoutPackag 
e$>.class);
<$foreach attribute classAttributes..ortedNameArray do$>
     public static final String  
<$attribute.name.initialCapitalString$>Key =  
"<$attribute.name$>";<$endforeach$>
<$foreach rel classToOneRelationships..ortedNameArray do$>
     public static final String <$rel.name.initialCapitalString$>Key =  
"<$rel.name$>";<$endforeach$>
<$foreach rel classToManyRelationships..ortedNameArray do$>
     public static final String <$rel.name.initialCapitalString$>Key =  
"<$rel.name$>";<$endforeach$>
     public <$GEN_PREFIX$><$classNameWithoutPackage$>() {
         super();
     }
/*
     // If you add instance variables to store property values you
     // should add empty implementions of the Serialization methods
     // to avoid unnecessary overhead (the properties will be
     // serialized for you in the superclass).
     private void writeObject(java.io.ObjectOutputStream out) throws  
java.io.IOException {
     }
     private void readObject(java.io.ObjectInputStream in) throws  
java.io.IOException, java.lang.ClassNotFoundException {
     }
*/
<$foreach FetchSpec  
javaBeautifiedFetchSpecificationDictionaries..ortedNameArray do$>
     public static NSArray  
objectsFor<$FetchSpec.niceName$>(EOEditingContext context<$foreach  
Binding FetchSpec.bindings do2$>,  
<$Binding.codeType$><$Binding.name$>Binding<$endforeach do2$>) {
         EOFetchSpecification spec =  
EOFetchSpecification.fetchSpecificationNamed("<$FetchSpec.fetchName$>",  
"<$name$>");
<$if FetchSpec.bindings.count > 0$>
         NSMutableDictionary bindings = new NSMutableDictionary();
<$foreach Binding FetchSpec.bindings do2$>
         if (<$Binding.name$>Binding != null)
             bindings.setObjectForKey(<$Binding.name$>Binding,  
"<$Binding.name$>");<$endforeach do2$>
         spec = spec.fetchSpecificationWithQualifierBindings(bindings);
<$endif$>
         return context.objectsWithFetchSpecification(spec);
     }
<$endforeach do$>
<$foreach Attribute classAttributes..ortedNameArray do$>
     public <$Attribute.javaValueClassName$> <$Attribute.name$>() {
         return  
(<$Attribute.javaValueClassName$>)this.storedValueForKey("<$Attribute.na 
me$>");
     }
     public void  
set<$Attribute.name.initialCapitalString$>(<$Attribute.javaValueClassNam 
e$> value) {
         this.takeStoredValueForKey(value, "<$Attribute.name$>");
     }
     public void  
initialize<$Attribute.name.initialCapitalString$>(<$Attribute.javaValueC 
lassName$> value) {
         this.set<$Attribute.name.initialCapitalString$>(value);
     }
<$endforeach do$>
<$foreach ToOneRelationship classToOneRelationships..ortedNameArray  
do$>
     public  
<$ToOneRelationship.destinationEntity.referenceJavaClassName$>  
<$ToOneRelationship.name$>() {
         return  
(<$ToOneRelationship.destinationEntity.referenceJavaClassName$>)this.sto 
redValueForKey("<$ToOneRelationship.name$>");
     }
     public void  
set<$ToOneRelationship.name.initialCapitalString$>(<$ToOneRelationship.d 
estinationEntity.referenceJavaClassName$> value) {
         this.takeStoredValueForKey(value, "<$ToOneRelationship.name$>");
     }
     public  
<$ToOneRelationship.destinationEntity.referenceJavaClassName$>  
<$ToOneRelationship.name$>Relationship() {
         return  
(<$ToOneRelationship.destinationEntity.referenceJavaClassName$>)this.sto 
redValueForKey("<$ToOneRelationship.name$>");
     }
     public void  
set<$ToOneRelationship.name.initialCapitalString$>Relationship(<$ToOneRe 
lationship.destinationEntity.referenceJavaClassName$> value) {
         if (value == null) {
              
<$ToOneRelationship.destinationEntity.referenceJavaClassName$> object =  
this.<$ToOneRelationship.name$>();
             if (object != null)
                  
this.removeObjectFromBothSidesOfRelationshipWithKey(object,  
"<$ToOneRelationship.name$>");
         } else {
             this.addObjectToBothSidesOfRelationshipWithKey(value,  
"<$ToOneRelationship.name$>");
         }
     }
     public void  
initialize<$ToOneRelationship.name.initialCapitalString$>(<$ToOneRelatio 
nship.destinationEntity.referenceJavaClassName$> value) {
          
this.set<$ToOneRelationship.name.initialCapitalString$>Relationship(valu 
e);
     }
<$endforeach do$>
<$foreach ToManyRelationship classToManyRelationships..ortedNameArray  
do$>
     public NSArray <$ToManyRelationship.name$>() {
         return  
(NSArray)this.storedValueForKey("<$ToManyRelationship.name$>");
     }
     public void  
set<$ToManyRelationship.name.initialCapitalString$>(NSArray value) {
         this.takeStoredValueForKey(value,  
"<$ToManyRelationship.name$>");
     }
     public void  
addTo<$ToManyRelationship.name.initialCapitalString$>(<$ToManyRelationsh 
ip.destinationEntity.referenceJavaClassName$> object) {
         if (logger.isDebugEnabled()) {
             if ( (this.editingContext() != null) && (object != null) &&  
( ! this.editingContext().equals(object.editingContext()) ) ) {
                 try {
                     throw new Exception("WrongEdidtingContext");
                 } catch(Exception exception) {
                      
logger.warn("addTo<$ToManyRelationship.name.initialCapitalString$>  
exception " , exception);
                 }
             }
         }
         this.includeObjectIntoPropertyWithKey(object,  
"<$ToManyRelationship.name$>");
     }
     public void  
removeFrom<$ToManyRelationship.name.initialCapitalString$>(<$ToManyRelat 
ionship.destinationEntity.referenceJavaClassName$> object) {
         this.excludeObjectFromPropertyWithKey(object,  
"<$ToManyRelationship.name$>");
     }
     public void  
addTo<$ToManyRelationship.name.initialCapitalString$>Relationship(<$ToMa 
nyRelationship.destinationEntity.referenceJavaClassName$> object) {
         this.addObjectToBothSidesOfRelationshipWithKey(object,  
"<$ToManyRelationship.name$>");
     }
     public void  
removeFrom<$ToManyRelationship.name.initialCapitalString$>Relationship(< 
$ToManyRelationship.destinationEntity.referenceJavaClassName$> object)  
{
         this.removeObjectFromBothSidesOfRelationshipWithKey(object,  
"<$ToManyRelationship.name$>");
     }
     public  
<$ToManyRelationship.destinationEntity.referenceJavaClassName$>  
create<$ToManyRelationship.name.initialCapitalString$>Relationship() {
         EOClassDescription classDescription =  
EOClassDescription.classDescriptionForEntityName("<$ToManyRelationship.d 
estinationEntity.name$>");
         EOEnterpriseObject object =  
classDescription.createInstanceWithEditingContext(this.editingContext(), 
  null);
         this.editingContext().insertObject(object);
         this.addObjectToBothSidesOfRelationshipWithKey(object,  
"<$ToManyRelationship.name$>");
         return  
(<$ToManyRelationship.destinationEntity.referenceJavaClassName$>)object;
     }
     public void  
delete<$ToManyRelationship.name.initialCapitalString$>Relationship(<$ToM 
anyRelationship.destinationEntity.referenceJavaClassName$> object) {
         // DeleteRuleNullify = 0;
         // DeleteRuleCascade = 1;
         // DeleteRuleDeny = 2;
         // DeleteRuleNoAction = 3;
         <$if ToManyRelationship.deleteRule != 2$>
         this.removeObjectFromBothSidesOfRelationshipWithKey(object,  
"<$ToManyRelationship.name$>");<$if ToManyRelationship.deleteRule ==  
1$>
         // Cascade delete rule
         this.editingContext().deleteObject(object);<$else$><$if  
ToManyRelationship.ownsDestination$>
         // Own destination delete rule
         this.editingContext().deleteObject(object);<$endif$><$endif$>
         <$else$>
         // Deny delete rule
         <$endif$>
     }
     public void  
deleteAll<$ToManyRelationship.name.initialCapitalString$>Relationships() 
  {
         for ( Iterator objects =  
this.<$ToManyRelationship.name$>().vector().iterator();  
objects.hasNext(); )
              
this.delete<$ToManyRelationship.name.initialCapitalString$>Relationship( 
(<$ToManyRelationship.destinationEntity.referenceJavaClassName$>)objects 
.next());
     }
     public void  
initialize<$ToManyRelationship.name.initialCapitalString$>(NSArray  
value) {
         this.set<$ToManyRelationship.name.initialCapitalString$>(value);
     }
     public void  
initialize<$ToManyRelationship.name.initialCapitalString$>(<$ToManyRelat 
ionship.destinationEntity.referenceJavaClassName$> value) {
          
this.addTo<$ToManyRelationship.name.initialCapitalString$>Relationship(v 
alue);
     }
<$endforeach do$>}
On Jul 23, 2004, at 15:22, Andrus Adamchik wrote:
> Hi Pierre,
>
> On Jul 23, 2004, at 5:40 PM, Pierre Frisch wrote:
>> The last time I looked at WOGen it was a lot less flexible than  
>> EOGenerator.
>
>> Can you parse the same template files?
>
> The same - no, but it is based on Velocity templates that are very  
> flexible. Basically they are as flexible and dynamic as the API  
> provided by Java objects that sit in the template "context" during  
> parsing. "Context" objects usually limit what you can and can't  
> access, otherwise Velocity scripting language is generic, powerful and  
> rather well documented.
>
> BTW, if you have any specifics on what's missing, please open a  
> feature request via JIRA. Ulrich, please assign any such issues to me.
>
> Andrus
>
>
This archive was generated by hypermail 2.0.0 : Fri Jul 23 2004 - 18:41:48 EDT