| ## Licensed to the Apache Software Foundation (ASF) under one |
| ## or more contributor license agreements. See the NOTICE file |
| ## distributed with this work for additional information |
| ## regarding copyright ownership. The ASF licenses this file |
| ## to you under the Apache License, Version 2.0 (the |
| ## "License"); you may not use this file except in compliance |
| ## with the License. You may obtain a copy of the License at |
| ## |
| ## https://www.apache.org/licenses/LICENSE-2.0 |
| ## |
| ## Unless required by applicable law or agreed to in writing, |
| ## software distributed under the License is distributed on an |
| ## "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| ## KIND, either express or implied. See the License for the |
| ## specific language governing permissions and limitations |
| ## under the License. |
| ## |
| ##Terminology: |
| ## Base class - super superclass of entity, ie, org.apache.cayenne.CayenneDataObject or MyBaseClass |
| ## Super class - superclass of entity, ie, org.apache.cayenne.art.auto._Artist |
| ## Sub class - class of entity, ie, org.apache.cayenne.art.Artist |
| ## |
| ## Classes available in template |
| ## object (duplicated as 'objEntity') - the ObjEntity class: See org.apache.cayenne.map.ObjectEntity |
| ## stringUtils - class for string "helper" functions: See org.apache.cayenne.gen.StringUtils |
| ## entityUtils - class for entity "helper" functions: See org.apache.cayenne.gen.EntityUtils |
| ## importUtils - class for import statement management: See org.apache.cayenne.gen.ImportUtils |
| ## superClassName |
| ## superPackageName |
| ## subClassName |
| ## subPackageName |
| ## baseClassName |
| ## basePackageName |
| ## |
| ################### |
| ## Create import ## |
| ################### |
| ${importUtils.setPackage($superPackageName)}## |
| ${importUtils.addReservedType("${superPackageName}.${superClassName}")}## |
| ${importUtils.addType("${basePackageName}.${baseClassName}")}## |
| ${importUtils.addType("java.io.IOException")}## |
| ${importUtils.addType("java.io.ObjectInputStream")}## |
| ${importUtils.addType("java.io.ObjectOutputStream")}## |
| #if( $createPKProperties ) |
| $propertyUtils.addImportForPK($entityUtils)## |
| #end |
| #foreach( $attr in ${object.DeclaredAttributes} ) |
| $propertyUtils.addImport($attr)## |
| #end |
| #foreach( $rel in ${object.DeclaredRelationships} ) |
| $propertyUtils.addImport($rel)## |
| #end |
| ${importUtils.generate()} |
| |
| /** |
| * Class ${superClassName} was generated by Cayenne. |
| * It is probably a good idea to avoid changing this class manually, |
| * since it may be overwritten next time code is regenerated. |
| * If you need to make any customizations, please use subclass. |
| #set ( $comment = ${metadataUtils.getComment($object)} ) |
| #if ( $comment ) |
| * |
| * $comment |
| * |
| #end |
| */ |
| public abstract class ${superClassName} extends ${baseClassName} { |
| |
| private static final long serialVersionUID = 1L; |
| |
| ########################### |
| ## Create property names ## |
| ########################### |
| #if( $createPropertyNames ) |
| #foreach( $attr in ${object.DeclaredAttributes} ) |
| public static final String ${stringUtils.capitalizedAsConstant($attr.Name)}_PROPERTY = "${attr.Name}"; |
| #end |
| #foreach( $rel in ${object.DeclaredRelationships} ) |
| public static final String ${stringUtils.capitalizedAsConstant($rel.Name)}_PROPERTY = "${rel.Name}"; |
| #end |
| |
| #end |
| ########################### |
| ## Create PK properties ## |
| ########################### |
| #if( $object.DbEntity ) |
| #foreach( $idAttr in ${object.DbEntity.PrimaryKeys} ) |
| #if( $createPKProperties && !${entityUtils.declaresDbAttribute($idAttr)}) |
| #set ( $type = "$importUtils.dbAttributeToJavaType($idAttr)") |
| $propertyUtils.propertyDefinition($object, $idAttr) |
| #end |
| public static final String ${stringUtils.capitalizedAsConstant($idAttr.Name)}_PK_COLUMN = "${idAttr.Name}"; |
| #end |
| #end |
| |
| ####################### |
| ## Create Properties ## |
| ####################### |
| #foreach( $attr in ${object.DeclaredAttributes} ) |
| $propertyUtils.propertyDefinition($attr) |
| #end |
| #foreach( $rel in ${object.DeclaredRelationships} ) |
| $propertyUtils.propertyDefinition($rel) |
| #end |
| |
| ################### |
| ## Create Fields ## |
| ################### |
| #foreach( $attr in ${object.DeclaredAttributes} ) |
| #set ( $flag = $importUtils.canUsePrimitive($attr) ) |
| #set ( $type = "$importUtils.formatJavaType(${attr.Type}, $flag)" ) |
| protected $type $stringUtils.formatVariableName(${attr.Name}); |
| #end |
| |
| #foreach( $rel in ${object.DeclaredRelationships} ) |
| protected Object $stringUtils.formatVariableName(${rel.Name}); |
| #end |
| |
| ######################################################### |
| ## Create attributes and relationships set/get methods ## |
| ######################################################### |
| #foreach( $attr in ${object.DeclaredAttributes} ) |
| #set ( $name = "$stringUtils.formatVariableName(${attr.Name})") |
| #set ( $type = "$importUtils.formatJavaType(${attr.Type})") |
| ## |
| ## setter |
| ## |
| #if ("true" != "${object.isReadOnly()}") |
| public void set${stringUtils.capitalized($attr.Name)}($type $name) { |
| beforePropertyWrite("${attr.Name}", this.$name, $name); |
| this.$name = $name; |
| } |
| |
| #end |
| ## |
| ## getter |
| ## |
| #if ( $importUtils.isBoolean(${attr.Type}) ) |
| public boolean is${stringUtils.capitalized($attr.Name)}() { |
| #else |
| public $type get${stringUtils.capitalized($attr.Name)}() { |
| #end |
| beforePropertyRead("${attr.Name}"); |
| #if ($importUtils.isPrimitive($type) && !$attr.isMandatory()) |
| if(this.$name == null) { |
| #if ($importUtils.isBoolean($type)) |
| return false; |
| #else |
| return 0; |
| #end |
| } |
| #end |
| return this.$name; |
| } |
| |
| #end## of foreach declared attribute |
| ## |
| ## Create list add/remove/get methods |
| #foreach( $rel in ${object.DeclaredRelationships} ) |
| #if( $rel.ToMany ) |
| #if ( ! $rel.ReadOnly ) |
| public void addTo${stringUtils.capitalized($rel.Name)}($importUtils.formatJavaType(${rel.TargetEntity.ClassName}) obj) { |
| addToManyTarget("${rel.Name}", obj, true); |
| } |
| |
| public void removeFrom${stringUtils.capitalized($rel.Name)}($importUtils.formatJavaType(${rel.TargetEntity.ClassName}) obj) { |
| removeToManyTarget("${rel.Name}", obj, true); |
| } |
| |
| #end |
| @SuppressWarnings("unchecked") |
| #if ( ${rel.CollectionType} == "java.util.Map") |
| public $importUtils.formatJavaType($rel.CollectionType)<$importUtils.formatJavaType($entityUtils.getMapKeyType($rel)), $importUtils.formatJavaType($rel.TargetEntity.ClassName)> get${stringUtils.capitalized($rel.Name)}() { |
| return ($importUtils.formatJavaType($rel.CollectionType)<$importUtils.formatJavaType($entityUtils.getMapKeyType($rel)), $importUtils.formatJavaType($rel.TargetEntity.ClassName)>)readProperty("${rel.Name}"); |
| } |
| #else |
| public $importUtils.formatJavaType($rel.CollectionType)<$importUtils.formatJavaType($rel.TargetEntity.ClassName)> get${stringUtils.capitalized($rel.Name)}() { |
| return ($importUtils.formatJavaType($rel.CollectionType)<$importUtils.formatJavaType($rel.TargetEntity.ClassName)>)readProperty("${rel.Name}"); |
| } |
| #end |
| |
| #else |
| #if ( !${object.isReadOnly()} && !$rel.ReadOnly ) |
| public void set${stringUtils.capitalized($rel.Name)}($importUtils.formatJavaType(${rel.TargetEntity.ClassName}) $stringUtils.formatVariableName(${rel.name})) { |
| setToOneTarget("${rel.Name}", $stringUtils.formatVariableName(${rel.name}), true); |
| } |
| |
| #end |
| public $importUtils.formatJavaType(${rel.TargetEntity.ClassName}) get${stringUtils.capitalized($rel.Name)}() { |
| return ($importUtils.formatJavaType(${rel.TargetEntity.ClassName}))readProperty("${rel.Name}"); |
| } |
| |
| #end |
| #end |
| ############################# |
| ## Create callback methods ## |
| ############################# |
| #foreach($cbname in ${entityUtils.callbackNames}) |
| protected abstract void ${cbname}(); |
| |
| #end |
| ########################################################### |
| ## Create writePropertyDirect/readPropertyDirect methods ## |
| ########################################################### |
| @Override |
| public Object readPropertyDirectly(String propName) { |
| if(propName == null) { |
| throw new IllegalArgumentException(); |
| } |
| |
| switch(propName) { |
| #foreach( $attr in ${object.DeclaredAttributes} ) |
| #set ( $name = "$stringUtils.formatVariableName(${attr.Name})") |
| case "${attr.Name}": |
| return this.${name}; |
| #end |
| #foreach( $rel in ${object.DeclaredRelationships} ) |
| case "${rel.Name}": |
| return this.$stringUtils.formatVariableName(${rel.name}); |
| #end |
| default: |
| return super.readPropertyDirectly(propName); |
| } |
| } |
| |
| @Override |
| public void writePropertyDirectly(String propName, Object val) { |
| if(propName == null) { |
| throw new IllegalArgumentException(); |
| } |
| |
| switch (propName) { |
| #foreach( $attr in ${object.DeclaredAttributes} ) |
| #set ( $name = "$stringUtils.formatVariableName(${attr.Name})") |
| #set ( $flag = $importUtils.canUsePrimitive($attr) ) |
| #set ( $type = "$importUtils.formatJavaType(${attr.Type}, $flag)") |
| case "${attr.Name}": |
| #if ( $importUtils.isBoolean($type) ) |
| this.${name} = val == null ? false : ($type)val; |
| #elseif ($importUtils.isPrimitive($type)) |
| this.${name} = val == null ? 0 : ($type)val; |
| #else |
| this.${name} = ($type)val; |
| #end |
| break; |
| #end |
| #foreach( $rel in ${object.DeclaredRelationships} ) |
| case "${rel.Name}": |
| this.$stringUtils.formatVariableName(${rel.name}) = val; |
| break; |
| #end |
| default: |
| super.writePropertyDirectly(propName, val); |
| } |
| } |
| |
| ################################## |
| ## Create serialization support ## |
| ################################## |
| private void writeObject(ObjectOutputStream out) throws IOException { |
| writeSerialized(out); |
| } |
| |
| private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException { |
| readSerialized(in); |
| } |
| |
| @Override |
| protected void writeState(ObjectOutputStream out) throws IOException { |
| super.writeState(out); |
| #foreach( $attr in ${object.DeclaredAttributes} ) |
| #set ( $name = "$stringUtils.formatVariableName(${attr.Name})") |
| #set ( $flag = $importUtils.canUsePrimitive($attr) ) |
| #set ( $type = "$importUtils.formatJavaType(${attr.Type}, $flag)") |
| #if($importUtils.isPrimitive($type)) |
| out.write${stringUtils.capitalized($type)}(this.$name); |
| #else |
| out.writeObject(this.${name}); |
| #end |
| #end |
| #foreach( $rel in ${object.DeclaredRelationships} ) |
| out.writeObject(this.${stringUtils.formatVariableName($rel.Name)}); |
| #end |
| } |
| |
| @Override |
| protected void readState(ObjectInputStream in) throws IOException, ClassNotFoundException { |
| super.readState(in); |
| #foreach( $attr in ${object.DeclaredAttributes} ) |
| #set ( $name = "$stringUtils.formatVariableName(${attr.Name})") |
| #set ( $flag = $importUtils.canUsePrimitive($attr) ) |
| #set ( $type = "$importUtils.formatJavaType(${attr.Type}, $flag)") |
| #if($importUtils.isPrimitive($type)) |
| this.$name = in.read${stringUtils.capitalized($type)}(); |
| #else |
| this.$name = ($type)in.readObject(); |
| #end |
| #end |
| #foreach( $rel in ${object.DeclaredRelationships} ) |
| #set ( $name = "${stringUtils.formatVariableName($rel.Name)}") |
| this.$name = in.readObject(); |
| #end |
| } |
| |
| } |