r634 - nuiton-jpa/nuiton-jpa-templates/src/main/java/org/nuiton/jpa/templates
Author: tchemit Date: 2013-05-27 23:25:49 +0200 (Mon, 27 May 2013) New Revision: 634 Url: http://nuiton.org/projects/sandbox/repository/revisions/634 Log: - add generatedValue on each entity - review isEntity method - review where to generate classes - review dao inheritance layout Modified: nuiton-jpa/nuiton-jpa-templates/src/main/java/org/nuiton/jpa/templates/JpaDaoTransformer.java nuiton-jpa/nuiton-jpa-templates/src/main/java/org/nuiton/jpa/templates/JpaEntityTransformer.java nuiton-jpa/nuiton-jpa-templates/src/main/java/org/nuiton/jpa/templates/JpaPersistenceContextTransformer.java nuiton-jpa/nuiton-jpa-templates/src/main/java/org/nuiton/jpa/templates/JpaTemplatesGeneratorUtil.java nuiton-jpa/nuiton-jpa-templates/src/main/java/org/nuiton/jpa/templates/JpaTemplatesStereoTypes.java nuiton-jpa/nuiton-jpa-templates/src/main/java/org/nuiton/jpa/templates/JpaTemplatesTagValues.java Modified: nuiton-jpa/nuiton-jpa-templates/src/main/java/org/nuiton/jpa/templates/JpaDaoTransformer.java =================================================================== --- nuiton-jpa/nuiton-jpa-templates/src/main/java/org/nuiton/jpa/templates/JpaDaoTransformer.java 2013-05-27 11:55:30 UTC (rev 633) +++ nuiton-jpa/nuiton-jpa-templates/src/main/java/org/nuiton/jpa/templates/JpaDaoTransformer.java 2013-05-27 21:25:49 UTC (rev 634) @@ -58,20 +58,26 @@ String packageName = JpaTemplatesGeneratorUtil.getDaoPackage(this, model, input); + String generatedDaoName = JpaTemplatesGeneratorUtil.getDaoGeneratedName(input); String abstractDaoName = JpaTemplatesGeneratorUtil.getDaoAbstractName(input); - String concreteDaoName = JpaTemplatesGeneratorUtil.getDaoConcreteName(input); String concreteEntityQualifiedName= JpaTemplatesGeneratorUtil.getConcreteEntityQualifiedName(this, model, input); + boolean generateGenerated= !isInClassPath(packageName, generatedDaoName); boolean generateAbstract = !isInClassPath(packageName, abstractDaoName); boolean generateConcrete = !isInClassPath(packageName, concreteDaoName); + if (generateGenerated) { + + generateGenerated(input, packageName, generatedDaoName, concreteEntityQualifiedName); + } + if (generateAbstract) { - generateAbstract(input, packageName, abstractDaoName, concreteEntityQualifiedName); + generateAbstract(input, packageName, generatedDaoName, abstractDaoName, concreteEntityQualifiedName); } if (generateConcrete) { @@ -80,7 +86,7 @@ } } - protected ObjectModelClass generateAbstract(ObjectModelClass input, + protected ObjectModelClass generateGenerated(ObjectModelClass input, String packageName, String abstractDaoName, String concreteEntityQualifiedName) { @@ -144,12 +150,30 @@ return output; } - protected ObjectModelClass generateImpl(ObjectModelClass input, + protected ObjectModelClass generateAbstract(ObjectModelClass input, String packageName, + String generatedDaoName, String abstractDaoName, - String concreteDaoName, String concreteEntityQualifiedName) { + ObjectModelClass output = createAbstractClass(abstractDaoName+ "<E extends " + input.getName() + ">", packageName); + + setSuperClass(output, packageName + '.' + generatedDaoName + "<E>"); + addImport(output, concreteEntityQualifiedName); + addConstructorWithEntityManager(output); + + if (isVerbose()) { + log.info("will generate " + output.getQualifiedName()); + } + return output; + } + + protected ObjectModelClass generateImpl(ObjectModelClass input, + String packageName, + String abstractDaoName, + String concreteDaoName, + String concreteEntityQualifiedName) { + ObjectModelClass output = createClass(concreteDaoName, packageName); setSuperClass(output, packageName + '.' + abstractDaoName + "<" + input.getName() + ">"); @@ -161,5 +185,4 @@ } return output; } - } \ No newline at end of file Modified: nuiton-jpa/nuiton-jpa-templates/src/main/java/org/nuiton/jpa/templates/JpaEntityTransformer.java =================================================================== --- nuiton-jpa/nuiton-jpa-templates/src/main/java/org/nuiton/jpa/templates/JpaEntityTransformer.java 2013-05-27 11:55:30 UTC (rev 633) +++ nuiton-jpa/nuiton-jpa-templates/src/main/java/org/nuiton/jpa/templates/JpaEntityTransformer.java 2013-05-27 21:25:49 UTC (rev 634) @@ -241,9 +241,7 @@ if (PROPERTY_ID.equals(propertyName)) { addAnnotation(result, property, output, Id.class); - if (JpaTemplatesGeneratorUtil.hasGeneratedValueStereotype(input)) { - addAnnotation(result, property, output, GeneratedValue.class); - } + addAnnotation(result, property, output, GeneratedValue.class); continue; } @@ -260,7 +258,6 @@ if (bidirection) { - // compute which is master of relation String inverseValue = JpaTemplatesGeneratorUtil.getInverseTagValue(property); if (StringUtils.isNotEmpty(inverseValue)) { Modified: nuiton-jpa/nuiton-jpa-templates/src/main/java/org/nuiton/jpa/templates/JpaPersistenceContextTransformer.java =================================================================== --- nuiton-jpa/nuiton-jpa-templates/src/main/java/org/nuiton/jpa/templates/JpaPersistenceContextTransformer.java 2013-05-27 11:55:30 UTC (rev 633) +++ nuiton-jpa/nuiton-jpa-templates/src/main/java/org/nuiton/jpa/templates/JpaPersistenceContextTransformer.java 2013-05-27 21:25:49 UTC (rev 634) @@ -29,6 +29,8 @@ import org.nuiton.eugene.models.object.ObjectModelOperation; import org.nuiton.jpa.api.AbstractJpaPersistenceContext; +import java.util.List; + /*{generator option: parentheses = false}*/ /*{generator option: writeString = +}*/ @@ -92,10 +94,11 @@ addConstructorWithEntityManager(output); // add dao factories - for (ObjectModelClass aClass : getModel().getClasses()) { - //FIXME Find a way to exclude none entities classes -// if (packageName.equals(aClass.getPackageName())) { + List<ObjectModelClass> entityClasses = + JpaTemplatesGeneratorUtil.getEntityClasses(getModel(), true); + for (ObjectModelClass aClass : entityClasses) { + // add dao factory method String daoPackageName = JpaTemplatesGeneratorUtil.getDaoPackage(this, model, aClass); String daoConcreteName = JpaTemplatesGeneratorUtil.getDaoConcreteName(aClass); Modified: nuiton-jpa/nuiton-jpa-templates/src/main/java/org/nuiton/jpa/templates/JpaTemplatesGeneratorUtil.java =================================================================== --- nuiton-jpa/nuiton-jpa-templates/src/main/java/org/nuiton/jpa/templates/JpaTemplatesGeneratorUtil.java 2013-05-27 11:55:30 UTC (rev 633) +++ nuiton-jpa/nuiton-jpa-templates/src/main/java/org/nuiton/jpa/templates/JpaTemplatesGeneratorUtil.java 2013-05-27 21:25:49 UTC (rev 634) @@ -24,6 +24,7 @@ * #L% */ +import com.google.common.base.Preconditions; import org.nuiton.eugene.java.JavaGeneratorUtil; import org.nuiton.eugene.models.object.ObjectModel; import org.nuiton.eugene.models.object.ObjectModelAttribute; @@ -32,6 +33,8 @@ import java.util.ArrayList; import java.util.Collection; +import java.util.Collections; +import java.util.Comparator; import java.util.LinkedHashSet; import java.util.List; import java.util.Set; @@ -44,16 +47,22 @@ */ public class JpaTemplatesGeneratorUtil extends JavaGeneratorUtil { + /** + * Tests if the given class is an entity (Need only to be in a entity + * package). + * + * @param input the class to test + * @return {@code true} if class is an entity. + */ + public static boolean isEntity(ObjectModelClassifier input) { + return input.getPackageName().endsWith(".entity"); + } + public static String getPersistenceContextPackage(AbstractJpaTransformer transformer, ObjectModel model) { - String result = getPersistenceContextPackageTagValue(model); - if (result == null) { + String result = transformer.getDefaultPackageName(); - // use default package - result = transformer.getDefaultPackageName(); - } - return result; } @@ -61,13 +70,7 @@ ObjectModel model, ObjectModelClassifier input) { - String result = getEntityPackageTagValue(model, input); - if (result == null) { - - // use default package - result = transformer.getDefaultPackageName() + ".entity"; - } - + String result = input.getPackageName(); return result; } @@ -75,16 +78,47 @@ ObjectModel model, ObjectModelClassifier input) { - String result = getDaoPackageTagValue(model, input); - if (result == null) { + Preconditions.checkState(isEntity(input), "Cant' find dao package name for a none entity " + input); + int lastIndexOf = input.getPackageName().lastIndexOf(".entity"); + String result = input.getPackageName().substring(0, lastIndexOf) + ".dao"; + return result; + } - // use default package - result = transformer.getDefaultPackageName() + ".dao"; + /** + * Obtain the list of entities classes with the possibility to sort the + * result. + * + * @param model the current model to scan + * @param sort flag to allow sort the result + * @return the list of filtred classes by their stereotype + */ + public static List<ObjectModelClass> getEntityClasses(ObjectModel model, + boolean sort) { + List<ObjectModelClass> classes = new ArrayList<ObjectModelClass>(); + for (ObjectModelClass clazz : model.getClasses()) { + if (isEntity(clazz)) { + classes.add(clazz); + } } + if (sort && !classes.isEmpty()) { - return result; + Collections.sort(classes, OBJECT_MODEL_CLASS_COMPARATOR); + } + return classes; } + static public final Comparator<ObjectModelClass> + OBJECT_MODEL_CLASS_COMPARATOR = + new Comparator<ObjectModelClass>() { + + @Override + public int compare(ObjectModelClass o1, + ObjectModelClass o2) { + return o1.getQualifiedName().compareTo( + o2.getQualifiedName()); + } + }; + public static String getPersistenceContextAbstractName(ObjectModel model) { return "AbstractJpa" + model.getName() + "PersistenceContext"; } @@ -105,6 +139,10 @@ return "Abstract" + input.getName() + "JpaDao"; } + public static String getDaoGeneratedName(ObjectModelClass input) { + return "Generated" + input.getName() + "JpaDao"; + } + public static String getDaoConcreteName(ObjectModelClass input) { return input.getName() + "JpaDao"; } @@ -321,17 +359,4 @@ public static boolean hasUniqueStereotype(ObjectModelAttribute attribute) { return attribute.hasStereotype(JpaTemplatesStereoTypes.STEREOTYPE_UNIQUE); } - - /** - * Check if the given class has the - * {@link JpaTemplatesStereoTypes#STEREOTYPE_GENERATED_VALUE} stereotype. - * - * @param aClass class to test - * @return {@code true} if stereotype was found, {@code false otherwise} - * @see JpaTemplatesStereoTypes#STEREOTYPE_GENERATED_VALUE - * @since 2.5 - */ - public static boolean hasGeneratedValueStereotype(ObjectModelClassifier aClass) { - return aClass.hasStereotype(JpaTemplatesStereoTypes.STEREOTYPE_GENERATED_VALUE); - } } Modified: nuiton-jpa/nuiton-jpa-templates/src/main/java/org/nuiton/jpa/templates/JpaTemplatesStereoTypes.java =================================================================== --- nuiton-jpa/nuiton-jpa-templates/src/main/java/org/nuiton/jpa/templates/JpaTemplatesStereoTypes.java 2013-05-27 11:55:30 UTC (rev 633) +++ nuiton-jpa/nuiton-jpa-templates/src/main/java/org/nuiton/jpa/templates/JpaTemplatesStereoTypes.java 2013-05-27 21:25:49 UTC (rev 634) @@ -27,10 +27,7 @@ import org.nuiton.eugene.EugeneStereoTypes; import org.nuiton.eugene.ModelPropertiesUtil; import org.nuiton.eugene.models.object.ObjectModelAttribute; -import org.nuiton.eugene.models.object.ObjectModelClassifier; -import javax.persistence.GeneratedValue; - /** * Defines all stereotypes managed by JPA templates. * @@ -47,13 +44,4 @@ @ModelPropertiesUtil.StereotypeDefinition(target = ObjectModelAttribute.class, documentation = "To specify that an attribute is unique (JPA mapping)") String STEREOTYPE_UNIQUE = "unique"; - - /** - * Stéréotype pour ajouter l'annoation {@link GeneratedValue} sur l'id. - * - * @see JpaTemplatesGeneratorUtil#hasGeneratedValueStereotype(ObjectModelClassifier) - */ - @ModelPropertiesUtil.StereotypeDefinition(target = ObjectModelClassifier.class, - documentation = "To specify that an entity has a generated id (see GeneratedValue annotation) (JPA mapping)") - String STEREOTYPE_GENERATED_VALUE = "generatedValue"; } Modified: nuiton-jpa/nuiton-jpa-templates/src/main/java/org/nuiton/jpa/templates/JpaTemplatesTagValues.java =================================================================== --- nuiton-jpa/nuiton-jpa-templates/src/main/java/org/nuiton/jpa/templates/JpaTemplatesTagValues.java 2013-05-27 11:55:30 UTC (rev 633) +++ nuiton-jpa/nuiton-jpa-templates/src/main/java/org/nuiton/jpa/templates/JpaTemplatesTagValues.java 2013-05-27 21:25:49 UTC (rev 634) @@ -53,7 +53,7 @@ /** * Tag value to specify where to generate entities. * - * @see JpaTemplatesGeneratorUtil#getEntityPackage(ObjectModel) + * @see JpaTemplatesGeneratorUtil#getEntityPackageTagValue(ObjectModel, ObjectModelClassifier) * @since 0.1 */ @ModelPropertiesUtil.TagValueDefinition( @@ -76,7 +76,7 @@ /** * Tag value to specify where to generate daos. * - * @see JpaTemplatesGeneratorUtil#getDaoPackage(ObjectModel) + * @see JpaTemplatesGeneratorUtil#getDaoPackageTagValue(ObjectModel, ObjectModelClassifier) * @since 0.1 */ @ModelPropertiesUtil.TagValueDefinition( @@ -96,9 +96,9 @@ String TAG_PERSISTENCE_CONTEXT_SUPER_CLASS = "persistenceContextSuperClass"; /** - * Tag value to specify where to generate persistenceContexts. + * Tag value to specify where to generate persistenceContext. * - * @see JpaTemplatesGeneratorUtil#getPersistenceContextPackage(ObjectModel) + * @see JpaTemplatesGeneratorUtil#getPersistenceContextPackageTagValue(ObjectModel) * @since 0.1 */ @ModelPropertiesUtil.TagValueDefinition(
participants (1)
-
tchemit@users.nuiton.org