// Copyright © 2007 Object Generation AB. // Feel free to modify this script as needed. package com.objectgen.build import com.objectgen.core.* import com.objectgen.codegen.* import com.objectgen.codegen.hibernate.* /** * This Groovy script will modify all classes with stereotype Persistent. */ class PersistentClassBuilder extends ClassBuilder { private String ID_STEREOTYPE = 'id' private Variable serialVersionUID private String interfaceName void build() { Project project = cl.project def persistentFactory = PersistentFactory.getInstance(project) if(persistentFactory?.generateInterfaces) { String newInterfaceName = cl.name if(newInterfaceName != interfaceName) { if(interfaceName != null) { removeInterface(interfaceName) } interfaceName = newInterfaceName addInterface(interfaceName) } } else if(interfaceName != null) { removeInterface(interfaceName) interfaceName = null } addInterface("java.io.Serializable") serialVersionUID = createSerialVersionUID( cl.fullName.hashCode() ) def constructor = createConstructor() callInitObjects(constructor) def id = cl.findVariableWithStereotype(ID_STEREOTYPE) // Create id unless a superclass already has an id. if(cl.superClass?.stereotype?.name == 'Persistent') { if(id != null) { cl.removeVariable(id) } } else { if(id == null) { id = cl.createVariable('Long', 'id') id.setStereotype(ID_STEREOTYPE) if(id.composite) { addTag(id, '@EmbeddedId') } else { addTag(id, '@Id') Tag generatedTag = addTag(id, '@GeneratedValue') // generatedTag.createParameter('strategy', 'IDENTITY') } } else { if(id.composite) { addTag(id, '@EmbeddedId') removeTag(id, '@Id') removeTag(id, '@GeneratedValue') } } } /* To generate version: if(cl.findVariableWithTag('@Version') == null) { println "Creating Variable version in ${cl}" def version = cl.createVariable('int', 'version') Tag tag = new Tag('@Version') version.addTag(tag) } */ implementInterfaceOperations() } void clear() { if(interfaceName != null) { removeInterface(interfaceName) } removeInterface("java.io.Serializable") if(serialVersionUID != null) { cl.removeVariable(serialVersionUID) } clearConstructor() def id = cl.findVariableWithStereotype(ID_STEREOTYPE) if(id != null) { cl.removeVariable(id) } /* To generate version: def version = cl.findVariableWithTag('@Version') if(version != null) { println "Removing ${version}" cl.removeVariable(version) version = null } */ removeInterfaceOperations() } }