pt.ist.fenixframework.dml
Class CodeGenerator

Package class diagram package CodeGenerator
java.lang.Object
  extended by pt.ist.fenixframework.dml.CodeGenerator
Direct Known Subclasses:
DefaultCodeGenerator

public abstract class CodeGenerator
extends Object

Top-level class of all DML code generators.


Nested Class Summary
protected static class CodeGenerator.PrimitiveToWrapperEntry
           
 
Field Summary
static String ABSTRACT_BACKEND_ID_CLASS
           
static String BACKEND_PACKAGE
           
static String COLLECTION_CLASS_NAME_KEY
           
static String CURRENT_BACKEND_ID_CLASS
           
static String CURRENT_BACKEND_ID_FULL_CLASS
           
protected static CodeGenerator.PrimitiveToWrapperEntry[] primitiveToWrapperTypes
           
 
Constructor Summary
CodeGenerator(CompilerArgs compArgs, DomainModel domainModel)
           
 
Method Summary
static String capitalize(String str)
           
protected  void closeBlock(PrintWriter out)
           
protected  void closeBlock(PrintWriter out, boolean withNewLine)
           
protected  void comment(PrintWriter out, String msg)
           
protected  void endMethodBody(PrintWriter out)
           
protected  CodeGenerator.PrimitiveToWrapperEntry findWrapperEntry(String type)
           
protected  void generateBackEndId()
          Generate the class that identifies the backend to which this code generator creates the code.
protected  void generateBackEndIdClassBody(PrintWriter out)
           
protected  void generateBaseClass(DomainClass domClass, PrintWriter out)
           
protected  void generateBaseClassBody(DomainClass domClass, PrintWriter out)
           
protected  void generateBaseClassConstructorsBody(DomainClass domClass, PrintWriter out)
           
protected  void generateClasses(Iterator<DomainClass> classesIter)
           
 void generateCode()
          Generate the backend-specific code for the domain model.
protected  void generateCurrentBackEndIdClass(String className, PrintWriter out)
           
protected  void generateDefaultRelationListeners(Role role, PrintWriter out)
           
protected  void generateFilePreamble(String subPackageName, PrintWriter out)
           
protected  void generateGetter(String visibility, String getterName, String slotName, String typeName, PrintWriter out)
           
protected  void generateGetterBody(String slotName, String typeName, PrintWriter out)
           
protected  void generateInitInstance(DomainClass domClass, PrintWriter out)
          The purpose of the initInstance method is to have the code needed to correctly initialize a domain object instance.
protected  void generateInitInstanceInitializer(DomainClass domClass, PrintWriter out)
           
protected  void generateInitInstanceMethod(DomainClass domClass, PrintWriter out)
           
protected  void generateInitInstanceMethodBody(DomainClass domClass, PrintWriter out)
           
protected  void generateInitInstanceNoArg(DomainClass domClass, PrintWriter out)
           
protected  void generateInitRoleSlot(Role role, PrintWriter out)
           
protected  void generateIteratorMethod(Role role, PrintWriter out)
           
protected  void generateIteratorMethod(Role role, PrintWriter out, String slotAccessExpression)
           
protected  void generateOneClass(DomainClass domClass)
           
protected  void generatePackageDecl(String subPackageName, PrintWriter out)
           
protected  void generatePublicClass(DomainClass domClass, PrintWriter out)
           
protected  void generatePublicClassConstructors(String className, PrintWriter out)
           
protected  void generatePublicFilePreamble(String subPackageName, PrintWriter out)
           
protected  void generateRelationAddMethodCall(Role role, String otherArg, String indexParam, PrintWriter out)
           
protected  void generateRelationGetter(String getterName, Role role, PrintWriter out)
           
protected  void generateRelationGetter(String getterName, Role role, String paramListType, PrintWriter out)
           
protected  void generateRelationGetter(String getterName, String valueToReturn, Role role, String typeName, PrintWriter out)
           
protected  void generateRelationRemoveMethodCall(Role role, String otherArg, PrintWriter out)
           
protected  void generateRoleGetter(String slotName, String typeName, PrintWriter out)
          Deprecated. Replaced by generateRoleSlotMethodsMultOneGetter(Role, PrintWriter)
protected  void generateRoleMethodGetInverseRole(Role role, Role otherRole, PrintWriter out)
           
protected  void generateRoleSlot(Role role, PrintWriter out)
           
protected  void generateRoleSlotMethods(Role role, PrintWriter out)
           
protected  void generateRoleSlotMethodsMultOne(Role role, PrintWriter out)
           
protected  void generateRoleSlotMethodsMultOneGetter(String slotName, String typeName, PrintWriter out)
           
protected  void generateRoleSlotMethodsMultOneHas(Role role, PrintWriter out)
           
protected  void generateRoleSlotMethodsMultOneRemove(Role role, PrintWriter out)
           
protected  void generateRoleSlotMethodsMultOneSetter(Role role, PrintWriter out)
           
protected  void generateRoleSlotMethodsMultStar(Role role, PrintWriter out)
           
protected  void generateRoleSlotMethodsMultStarCount(Role role, PrintWriter out, String methodModifiers, String capitalizedSlotName, String slotAccessExpression)
           
protected  void generateRoleSlotMethodsMultStarGettersAndIterators(Role role, PrintWriter out)
           
protected  void generateRoleSlotMethodsMultStarHasAnyChild(Role role, PrintWriter out, String methodModifiers, String capitalizedSlotName, String slotAccessExpression)
           
protected  void generateRoleSlotMethodsMultStarHasChild(Role role, PrintWriter out, String methodModifiers, String capitalizedSlotName, String slotAccessExpression, String typeName, String slotName, boolean isIndexed, String indexGetterCall)
           
protected  void generateRoleSlotMethodsMultStarSet(Role role, PrintWriter out, String methodModifiers, String capitalizedSlotName, String slotAccessExpression, String slotName, String typeName)
           
protected  void generateRoleSlots(Iterator roleSlotsIter, PrintWriter out)
           
protected  void generateRoleSlotsMethods(Iterator roleSlotsIter, PrintWriter out)
           
protected  void generateSetter(DomainClass domainClass, String visibility, String setterName, Slot slot, PrintWriter out)
           
protected  void generateSetterBody(DomainClass domainClass, String setterName, Slot slot, PrintWriter out)
           
protected  void generateSlot(Slot slot, PrintWriter out)
           
protected  void generateSlotAccessors(DomainClass domainClass, Slot slot, PrintWriter out)
           
protected  void generateSlotDeclaration(PrintWriter out, String type, String name)
           
protected  void generateSlotGetter(String slotName, String typeName, PrintWriter out)
           
protected  void generateSlots(Iterator slotsIter, PrintWriter out)
           
protected  void generateSlotsAccessors(DomainClass domainClass, PrintWriter out)
           
protected  void generateSlotSetter(DomainClass domainClass, Slot slot, PrintWriter out)
           
protected  void generateStaticRelationSlots(Role role, PrintWriter out)
           
protected  void generateStaticRoleSlots(Role role, PrintWriter out)
           
protected  void generateStaticRoleSlotsMultOne(Role role, Role otherRole, PrintWriter out)
           
protected  void generateStaticRoleSlotsMultStar(Role role, Role otherRole, PrintWriter out)
           
protected  void generateStaticSlots(DomainClass domClass, PrintWriter out)
           
protected  String getAdderMethodName(Role role)
           
protected abstract  Class<? extends ContextFactory> getAtomicContextFactoryClass()
          Get the class that implements the ContextFactory for AtomicContexts
protected abstract  String getBackEndName()
          Get the name of the backend for which this class generates code.
protected  File getBaseDirectoryFor(String packageName)
           
protected  String getCollectionTypeFor(Role role)
           
protected  String getConcreteSetTypeDeclarationFor(Role role)
           
protected  String getDefaultCollectionFor(String type)
           
protected abstract  String getDefaultConfigClassName()
          Get the name of the default configuration class of the backend for which this class generates code.
protected  File getDirectoryFor(String packageName)
           
protected  String getDirectRelationType()
           
protected  String getDomainClassRoot()
           
 DomainModel getDomainModel()
           
protected  String getEntityFullName(DomainEntity domEntity)
           
protected  String getMethodModifiers()
           
protected  String getNewRoleStarSlotExpression(Role role)
           
 String getPackageName()
           
protected  String getPackagePrefix(String packageName)
           
protected  String getReferenceType(String type)
           
protected  String getRelationAwareBaseTypeFor(Role role)
           
protected  String getRelationAwareTypeFor(Role role)
           
protected  String getRelationSlotNameFor(Role role)
           
protected  String getRemoverMethodName(Role role)
           
protected  String getRoleArgs(Role role)
           
protected  String getRoleBaseType(Role role)
           
protected  String getRoleHandlerName(Role role, boolean otherClass)
           
protected  String getRoleManyBaseType()
           
protected  String getRoleOneBaseType()
           
protected  String getRoleType(Role role)
           
protected  String getSetTypeDeclarationFor(Role role)
           
protected  String getSlotExpression(String slotName)
           
protected  String getTypeFullName(DomainEntity domEntity)
           
protected  String makeArg(String type, String arg)
           
static String makeGenericType(String baseType, String... argTypes)
           
protected  void newBlock(PrintWriter out)
           
protected  void newline(PrintWriter out)
           
protected  void onNewline(PrintWriter out)
           
protected  void print(PrintWriter out, String text)
           
protected  void printFinalMethod(PrintWriter out, String mods, String type, String name, String... args)
           
protected  void println(PrintWriter out, String text)
           
protected  void printMethod(PrintWriter out, String mods, String type, String name, String... args)
           
protected  void printWords(PrintWriter out, String... words)
           
 void setCollectionToUse(String newCollectionName)
           
protected  void startMethodBody(PrintWriter out)
           
protected  void writeToFile(File file, pt.ist.fenixframework.dml.CodeGenerator.WriteProcedure proc)
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

BACKEND_PACKAGE

public static final String BACKEND_PACKAGE
See Also:
Constant Field Values

ABSTRACT_BACKEND_ID_CLASS

public static final String ABSTRACT_BACKEND_ID_CLASS
See Also:
Constant Field Values

CURRENT_BACKEND_ID_CLASS

public static final String CURRENT_BACKEND_ID_CLASS
See Also:
Constant Field Values

CURRENT_BACKEND_ID_FULL_CLASS

public static final String CURRENT_BACKEND_ID_FULL_CLASS
See Also:
Constant Field Values

COLLECTION_CLASS_NAME_KEY

public static final String COLLECTION_CLASS_NAME_KEY
See Also:
Constant Field Values

primitiveToWrapperTypes

protected static CodeGenerator.PrimitiveToWrapperEntry[] primitiveToWrapperTypes
Constructor Detail

CodeGenerator

public CodeGenerator(CompilerArgs compArgs,
                     DomainModel domainModel)
Method Detail

setCollectionToUse

public void setCollectionToUse(String newCollectionName)

getDomainModel

public DomainModel getDomainModel()

getPackageName

public String getPackageName()

getDirectoryFor

protected File getDirectoryFor(String packageName)

getBaseDirectoryFor

protected File getBaseDirectoryFor(String packageName)

getPackagePrefix

protected String getPackagePrefix(String packageName)

getEntityFullName

protected String getEntityFullName(DomainEntity domEntity)

getTypeFullName

protected String getTypeFullName(DomainEntity domEntity)

getDomainClassRoot

protected String getDomainClassRoot()

generateCode

public void generateCode()
Generate the backend-specific code for the domain model.


generateBackEndId

protected void generateBackEndId()
Generate the class that identifies the backend to which this code generator creates the code. The generated class must be named CurrentBackEndId and extend the BackEndId class.


writeToFile

protected void writeToFile(File file,
                           pt.ist.fenixframework.dml.CodeGenerator.WriteProcedure proc)

generateClasses

protected void generateClasses(Iterator<DomainClass> classesIter)

generateOneClass

protected void generateOneClass(DomainClass domClass)

generateFilePreamble

protected void generateFilePreamble(String subPackageName,
                                    PrintWriter out)

generatePublicFilePreamble

protected void generatePublicFilePreamble(String subPackageName,
                                          PrintWriter out)

generatePackageDecl

protected void generatePackageDecl(String subPackageName,
                                   PrintWriter out)

generatePublicClass

protected void generatePublicClass(DomainClass domClass,
                                   PrintWriter out)

generatePublicClassConstructors

protected void generatePublicClassConstructors(String className,
                                               PrintWriter out)

generateCurrentBackEndIdClass

protected void generateCurrentBackEndIdClass(String className,
                                             PrintWriter out)

generateBackEndIdClassBody

protected void generateBackEndIdClassBody(PrintWriter out)

generateBaseClass

protected void generateBaseClass(DomainClass domClass,
                                 PrintWriter out)

generateBaseClassBody

protected void generateBaseClassBody(DomainClass domClass,
                                     PrintWriter out)

generateBaseClassConstructorsBody

protected void generateBaseClassConstructorsBody(DomainClass domClass,
                                                 PrintWriter out)

generateSlots

protected void generateSlots(Iterator slotsIter,
                             PrintWriter out)

generateSlot

protected void generateSlot(Slot slot,
                            PrintWriter out)

generateSlotDeclaration

protected void generateSlotDeclaration(PrintWriter out,
                                       String type,
                                       String name)

findWrapperEntry

protected CodeGenerator.PrimitiveToWrapperEntry findWrapperEntry(String type)

getReferenceType

protected String getReferenceType(String type)

generateStaticSlots

protected void generateStaticSlots(DomainClass domClass,
                                   PrintWriter out)

generateStaticRoleSlots

protected void generateStaticRoleSlots(Role role,
                                       PrintWriter out)

generateStaticRoleSlotsMultOne

protected void generateStaticRoleSlotsMultOne(Role role,
                                              Role otherRole,
                                              PrintWriter out)

generateStaticRoleSlotsMultStar

protected void generateStaticRoleSlotsMultStar(Role role,
                                               Role otherRole,
                                               PrintWriter out)

generateRoleMethodGetInverseRole

protected void generateRoleMethodGetInverseRole(Role role,
                                                Role otherRole,
                                                PrintWriter out)

getRoleHandlerName

protected String getRoleHandlerName(Role role,
                                    boolean otherClass)

getDirectRelationType

protected String getDirectRelationType()

generateStaticRelationSlots

protected void generateStaticRelationSlots(Role role,
                                           PrintWriter out)

generateDefaultRelationListeners

protected void generateDefaultRelationListeners(Role role,
                                                PrintWriter out)

getRoleType

protected String getRoleType(Role role)

getRoleBaseType

protected String getRoleBaseType(Role role)

getRoleArgs

protected String getRoleArgs(Role role)

getRoleOneBaseType

protected String getRoleOneBaseType()

getRoleManyBaseType

protected String getRoleManyBaseType()

generateRoleSlots

protected void generateRoleSlots(Iterator roleSlotsIter,
                                 PrintWriter out)

getCollectionTypeFor

protected String getCollectionTypeFor(Role role)

getRelationAwareTypeFor

protected String getRelationAwareTypeFor(Role role)

getRelationAwareBaseTypeFor

protected String getRelationAwareBaseTypeFor(Role role)

generateRoleSlot

protected void generateRoleSlot(Role role,
                                PrintWriter out)

getDefaultCollectionFor

protected String getDefaultCollectionFor(String type)

getNewRoleStarSlotExpression

protected String getNewRoleStarSlotExpression(Role role)

getRelationSlotNameFor

protected String getRelationSlotNameFor(Role role)

generateInitInstance

protected void generateInitInstance(DomainClass domClass,
                                    PrintWriter out)
The purpose of the initInstance method is to have the code needed to correctly initialize a domain object instance. There are two cases:
  1. When the instance is *really* new.
  2. When the instance is being re-constructed from persistence (by the DomainObjectAllocator)

In the first case the parameter 'allocateOnly' is false. Tipically, we need to fully initialize the slots, e.g. create new lists, etc. In the second case, the instance's attributes will be populated, so we should not create them anew.

This method is responsible for: generating the initInstance(boolean) method; generate the call to this method as an instance initializer with the parameter allocateInstance = false.


generateInitInstanceNoArg

protected void generateInitInstanceNoArg(DomainClass domClass,
                                         PrintWriter out)

generateInitInstanceMethod

protected void generateInitInstanceMethod(DomainClass domClass,
                                          PrintWriter out)

generateInitInstanceMethodBody

protected void generateInitInstanceMethodBody(DomainClass domClass,
                                              PrintWriter out)

generateInitInstanceInitializer

protected void generateInitInstanceInitializer(DomainClass domClass,
                                               PrintWriter out)

generateInitRoleSlot

protected void generateInitRoleSlot(Role role,
                                    PrintWriter out)

generateSlotsAccessors

protected void generateSlotsAccessors(DomainClass domainClass,
                                      PrintWriter out)

generateSlotAccessors

protected void generateSlotAccessors(DomainClass domainClass,
                                     Slot slot,
                                     PrintWriter out)

getSlotExpression

protected String getSlotExpression(String slotName)

generateSlotGetter

protected void generateSlotGetter(String slotName,
                                  String typeName,
                                  PrintWriter out)

generateGetter

protected void generateGetter(String visibility,
                              String getterName,
                              String slotName,
                              String typeName,
                              PrintWriter out)

generateGetterBody

protected void generateGetterBody(String slotName,
                                  String typeName,
                                  PrintWriter out)

generateSlotSetter

protected void generateSlotSetter(DomainClass domainClass,
                                  Slot slot,
                                  PrintWriter out)

generateSetter

protected void generateSetter(DomainClass domainClass,
                              String visibility,
                              String setterName,
                              Slot slot,
                              PrintWriter out)

generateRoleGetter

@Deprecated
protected void generateRoleGetter(String slotName,
                                             String typeName,
                                             PrintWriter out)
Deprecated. Replaced by generateRoleSlotMethodsMultOneGetter(Role, PrintWriter)


generateSetterBody

protected void generateSetterBody(DomainClass domainClass,
                                  String setterName,
                                  Slot slot,
                                  PrintWriter out)

generateRoleSlotsMethods

protected void generateRoleSlotsMethods(Iterator roleSlotsIter,
                                        PrintWriter out)

generateRoleSlotMethods

protected void generateRoleSlotMethods(Role role,
                                       PrintWriter out)

getSetTypeDeclarationFor

protected String getSetTypeDeclarationFor(Role role)

getConcreteSetTypeDeclarationFor

protected String getConcreteSetTypeDeclarationFor(Role role)

generateRoleSlotMethodsMultOne

protected void generateRoleSlotMethodsMultOne(Role role,
                                              PrintWriter out)

generateRoleSlotMethodsMultOneGetter

protected void generateRoleSlotMethodsMultOneGetter(String slotName,
                                                    String typeName,
                                                    PrintWriter out)

generateRoleSlotMethodsMultOneSetter

protected void generateRoleSlotMethodsMultOneSetter(Role role,
                                                    PrintWriter out)

generateRoleSlotMethodsMultOneHas

protected void generateRoleSlotMethodsMultOneHas(Role role,
                                                 PrintWriter out)

generateRoleSlotMethodsMultOneRemove

protected void generateRoleSlotMethodsMultOneRemove(Role role,
                                                    PrintWriter out)

generateRelationAddMethodCall

protected void generateRelationAddMethodCall(Role role,
                                             String otherArg,
                                             String indexParam,
                                             PrintWriter out)

generateRelationRemoveMethodCall

protected void generateRelationRemoveMethodCall(Role role,
                                                String otherArg,
                                                PrintWriter out)

getAdderMethodName

protected String getAdderMethodName(Role role)

getRemoverMethodName

protected String getRemoverMethodName(Role role)

getMethodModifiers

protected String getMethodModifiers()

generateRoleSlotMethodsMultStar

protected void generateRoleSlotMethodsMultStar(Role role,
                                               PrintWriter out)

generateRoleSlotMethodsMultStarGettersAndIterators

protected void generateRoleSlotMethodsMultStarGettersAndIterators(Role role,
                                                                  PrintWriter out)

generateIteratorMethod

protected void generateIteratorMethod(Role role,
                                      PrintWriter out)

generateIteratorMethod

protected void generateIteratorMethod(Role role,
                                      PrintWriter out,
                                      String slotAccessExpression)

generateRelationGetter

protected void generateRelationGetter(String getterName,
                                      Role role,
                                      PrintWriter out)

generateRelationGetter

protected void generateRelationGetter(String getterName,
                                      Role role,
                                      String paramListType,
                                      PrintWriter out)

generateRelationGetter

protected void generateRelationGetter(String getterName,
                                      String valueToReturn,
                                      Role role,
                                      String typeName,
                                      PrintWriter out)

generateRoleSlotMethodsMultStarCount

protected void generateRoleSlotMethodsMultStarCount(Role role,
                                                    PrintWriter out,
                                                    String methodModifiers,
                                                    String capitalizedSlotName,
                                                    String slotAccessExpression)

generateRoleSlotMethodsMultStarHasAnyChild

protected void generateRoleSlotMethodsMultStarHasAnyChild(Role role,
                                                          PrintWriter out,
                                                          String methodModifiers,
                                                          String capitalizedSlotName,
                                                          String slotAccessExpression)

generateRoleSlotMethodsMultStarHasChild

protected void generateRoleSlotMethodsMultStarHasChild(Role role,
                                                       PrintWriter out,
                                                       String methodModifiers,
                                                       String capitalizedSlotName,
                                                       String slotAccessExpression,
                                                       String typeName,
                                                       String slotName,
                                                       boolean isIndexed,
                                                       String indexGetterCall)

generateRoleSlotMethodsMultStarSet

protected void generateRoleSlotMethodsMultStarSet(Role role,
                                                  PrintWriter out,
                                                  String methodModifiers,
                                                  String capitalizedSlotName,
                                                  String slotAccessExpression,
                                                  String slotName,
                                                  String typeName)

makeGenericType

public static String makeGenericType(String baseType,
                                     String... argTypes)

printMethod

protected void printMethod(PrintWriter out,
                           String mods,
                           String type,
                           String name,
                           String... args)

printFinalMethod

protected void printFinalMethod(PrintWriter out,
                                String mods,
                                String type,
                                String name,
                                String... args)

startMethodBody

protected void startMethodBody(PrintWriter out)

endMethodBody

protected void endMethodBody(PrintWriter out)

makeArg

protected String makeArg(String type,
                         String arg)

printWords

protected void printWords(PrintWriter out,
                          String... words)

print

protected void print(PrintWriter out,
                     String text)

println

protected void println(PrintWriter out,
                       String text)

newBlock

protected void newBlock(PrintWriter out)

closeBlock

protected void closeBlock(PrintWriter out)

closeBlock

protected void closeBlock(PrintWriter out,
                          boolean withNewLine)

comment

protected void comment(PrintWriter out,
                       String msg)

onNewline

protected void onNewline(PrintWriter out)

capitalize

public static String capitalize(String str)

newline

protected void newline(PrintWriter out)

getBackEndName

protected abstract String getBackEndName()
Get the name of the backend for which this class generates code. This method is used during the execution of generateBackEndId().


getDefaultConfigClassName

protected abstract String getDefaultConfigClassName()
Get the name of the default configuration class of the backend for which this class generates code. This method is used during the execution of generateBackEndId().


getAtomicContextFactoryClass

protected abstract Class<? extends ContextFactory> getAtomicContextFactoryClass()
Get the class that implements the ContextFactory for AtomicContexts



Copyright © 2013. All Rights Reserved.