Author: tchemit Date: 2013-12-19 22:23:21 +0100 (Thu, 19 Dec 2013) New Revision: 2942 Url: http://nuiton.org/projects/topia/repository/revisions/2942 Log: fixes #2895: Remove duplicated code betweeen generated XxxApplicationContext and XxxPersistenceContext fixes #2974: Be able to specify a super class for any generated class clean transformers Modified: trunk/topia-templates/src/main/java/org/nuiton/topia/templates/ApplicationContextTransformer.java trunk/topia-templates/src/main/java/org/nuiton/topia/templates/EntityDaoTransformer.java trunk/topia-templates/src/main/java/org/nuiton/topia/templates/EntityTransformer.java trunk/topia-templates/src/main/java/org/nuiton/topia/templates/PersistenceContextTransformer.java trunk/topia-templates/src/main/java/org/nuiton/topia/templates/TopiaGeneratorUtil.java trunk/topia-templates/src/main/java/org/nuiton/topia/templates/TopiaStereoTypes.java trunk/topia-templates/src/main/java/org/nuiton/topia/templates/TopiaTagValues.java Modified: trunk/topia-templates/src/main/java/org/nuiton/topia/templates/ApplicationContextTransformer.java =================================================================== --- trunk/topia-templates/src/main/java/org/nuiton/topia/templates/ApplicationContextTransformer.java 2013-12-19 21:22:20 UTC (rev 2941) +++ trunk/topia-templates/src/main/java/org/nuiton/topia/templates/ApplicationContextTransformer.java 2013-12-19 21:23:21 UTC (rev 2942) @@ -36,10 +36,7 @@ import org.nuiton.topia.AbstractTopiaApplicationContext; import org.nuiton.topia.persistence.TopiaEntity; import org.nuiton.topia.persistence.util.EntityOperator; -import org.nuiton.topia.persistence.util.EntityOperatorStore; -import java.lang.reflect.Array; -import java.util.List; import java.util.Properties; /** @@ -64,7 +61,6 @@ boolean generateConcrete = !isInClassPath(packageName, applicationContextConcreteName); - if (generateAbstract) { generateAbstract(packageName, @@ -84,13 +80,16 @@ String className) { // try to find a super class by tag-value -// String superClass = TopiaGeneratorUtil.getPersistenceContextSuperClassTagValue(model); - String superClass = null; + String superClass = TopiaGeneratorUtil.getApplicationContextSuperClassTagValue(model); if (superClass == null) { // no super-class, use default one superClass = AbstractTopiaApplicationContext.class.getName(); + }else { + + //TODO check that super class instance of ApplicationPersistenceContext + } ObjectModelClass output = createAbstractClass(className, packageName); @@ -99,10 +98,8 @@ setSuperClass(output, superClass + "<" + persistenceContextConcreteName + ">"); // detect if there is a contract to set on abstract - String contractName = TopiaGeneratorUtil.getPersistenceContextInterfaceName(model); + String contractName = TopiaGeneratorUtil.getApplicationContextInterfaceName(model); -// addInterface(output, TopiaPersistenceContext.class); - boolean addPersistenceContextContract = isInClassPath(packageName, contractName); if (addPersistenceContextContract) { @@ -110,55 +107,20 @@ } String modelName = model.getName(); - String daoHelperClazzName = modelName + "DAOHelper"; String entityEnumName = modelName + "EntityEnum"; - List<ObjectModelClass> entityClasses = - TopiaGeneratorUtil.getEntityClasses(model, true); - boolean generateOperator = TopiaGeneratorUtil.shouldGenerateOperatorForDAOHelper(model); -// boolean generateStandaloneEnum = -// TopiaGeneratorUtil.shouldGenerateStandaloneEnumForDAOHelper(model); -// -// if (!generateStandaloneEnum) { -// -// addImport(output, packageName + "." + daoHelperClazzName + "." + entityEnumName); -// -// } - addImport(output, TopiaEntity.class); - addImport(output, Array.class); - addImport(output, Array.class); if (generateOperator) { addImport(output, EntityOperator.class); - addImport(output, EntityOperatorStore.class); } - // add public constructor - ObjectModelOperation constructor = addConstructor( - output, - ObjectModelJavaModifier.PUBLIC); - addParameter(constructor, Properties.class, "properties"); - setOperationBody(constructor, "" -/*{ - super(properties); - }*/ - ); + addConstructors(output, false); - constructor = addConstructor( - output, - ObjectModelJavaModifier.PUBLIC); - addParameter(constructor, "java.util.Map<String, String>", "configuration"); - setOperationBody(constructor, "" -/*{ - super(configuration); - }*/ - ); - ObjectModelOperation op; // getModelVersion method @@ -198,33 +160,26 @@ addParameter(op, "Class<T>", "klass"); setOperationBody(op, "" /*{ - <%=entityEnumName%> constant = <%=entityEnumName%>.valueOf(klass); - return (Class<T>) constant.getContract(); + return <%=entityEnumName%>.getContractClass(klass); }*/ ); - // getImplementationClass method - op = addOperation(output, "getImplementationClass", "<T extends TopiaEntity> Class<T>", ObjectModelJavaModifier.PUBLIC); + // getContractClasses method + op = addOperation(output, "getContractClasses", "Class<? extends TopiaEntity>[]", ObjectModelJavaModifier.PUBLIC); addAnnotation(output, op, Override.class); - addParameter(op, "Class<T>", "klass"); setOperationBody(op, "" /*{ - <%=entityEnumName%> constant = <%=entityEnumName%>.valueOf(klass); - return (Class<T>) constant.getImplementation(); + return <%=entityEnumName%>.getContractClasses(); }*/ ); - // getContractClasses method - op = addOperation(output, "getContractClasses", "Class<? extends TopiaEntity>[]", ObjectModelJavaModifier.PUBLIC); + // getImplementationClass method + op = addOperation(output, "getImplementationClass", "<T extends TopiaEntity> Class<T>", ObjectModelJavaModifier.PUBLIC); addAnnotation(output, op, Override.class); + addParameter(op, "Class<T>", "klass"); setOperationBody(op, "" /*{ - <%=entityEnumName%>[] values = <%=entityEnumName%>.values(); - Class<? extends TopiaEntity>[] result = (Class<? extends TopiaEntity>[]) Array.newInstance(Class.class, values.length); - for (int i = 0; i < values.length; i++) { - result[i] = values[i].getContract(); - } - return result; + return <%=entityEnumName%>.getImplementationClass(klass); }*/ ); @@ -233,12 +188,7 @@ addAnnotation(output, op, Override.class); setOperationBody(op, "" /*{ - <%=entityEnumName%>[] values = <%=entityEnumName%>.values(); - Class<? extends TopiaEntity>[] result = (Class<? extends TopiaEntity>[]) Array.newInstance(Class.class, values.length); - for (int i = 0; i < values.length; i++) { - result[i] = values[i].getImplementation(); - } - return result; + return <%=entityEnumName%>.getImplementationClasses(); }*/ ); @@ -246,7 +196,7 @@ op = addOperation(output, "getContracts", entityEnumName + "[]", ObjectModelJavaModifier.PUBLIC); setOperationBody(op, "" /*{ - return <%=entityEnumName%>.values(); + return <%=entityEnumName%>.getContracts(); }*/ ); @@ -256,12 +206,10 @@ addParameter(op, "Class<T>", "klass"); setOperationBody(op, "" /*{ - <%=entityEnumName%> constant = <%=entityEnumName%>.valueOf(klass); - return EntityOperatorStore.getOperator(constant); + return <%=entityEnumName%>.getOperator(klass); }*/ ); } - } protected ObjectModelClass generateImpl(String packageName, @@ -272,10 +220,17 @@ setSuperClass(output, applicationContextAbstractName); - // add public constructor - ObjectModelOperation constructor = addConstructor( - output, - ObjectModelJavaModifier.PUBLIC); + addConstructors(output, true); + return output; + } + + protected void addConstructors(ObjectModelClass output, boolean isPublic) { + + ObjectModelJavaModifier visibility = isPublic ? + ObjectModelJavaModifier.PUBLIC : + ObjectModelJavaModifier.PROTECTED; + + ObjectModelOperation constructor = addConstructor(output, visibility); addParameter(constructor, Properties.class, "properties"); setOperationBody(constructor, "" /*{ @@ -283,17 +238,13 @@ }*/ ); - constructor = addConstructor( - output, - ObjectModelJavaModifier.PUBLIC); + constructor = addConstructor(output, visibility); addParameter(constructor, "java.util.Map<String, String>", "configuration"); setOperationBody(constructor, "" /*{ super(configuration); }*/ ); - - return output; } } Modified: trunk/topia-templates/src/main/java/org/nuiton/topia/templates/EntityDaoTransformer.java =================================================================== --- trunk/topia-templates/src/main/java/org/nuiton/topia/templates/EntityDaoTransformer.java 2013-12-19 21:22:20 UTC (rev 2941) +++ trunk/topia-templates/src/main/java/org/nuiton/topia/templates/EntityDaoTransformer.java 2013-12-19 21:23:21 UTC (rev 2942) @@ -48,6 +48,7 @@ import org.nuiton.eugene.models.object.ObjectModelOperation; import org.nuiton.topia.HibernateTopiaJpaSupport; import org.nuiton.topia.TopiaHibernateSupport; +import org.nuiton.topia.persistence.AbstractTopiaDao; import org.nuiton.topia.persistence.TopiaEntity; import org.nuiton.topia.persistence.TopiaQueryBuilderAddCriteriaOrRunQueryStep; @@ -86,12 +87,6 @@ */ protected Set<String> allEntitiesFqn; - /** - * The class of abstract dao to use. - * @since 2.5 - */ - protected Class<?> daoImplementation; - protected String entityEnumName; protected String entityEnumPackage; @@ -117,9 +112,6 @@ usages = TopiaGeneratorUtil.searchDirectUsages(model); - daoImplementation = TopiaGeneratorUtil.getDAOImplementation(model); - - // keep all classifiers on the model which are entities List<ObjectModelClass> allEntities = TopiaGeneratorUtil.getEntityClasses(model, true); @@ -218,30 +210,12 @@ generateAbstractDao(clazz, clazzName, clazzFQN); } -// if (isGenerateLegacyDao(clazz)) { -// generateLegacyDao(clazz, clazzName, clazzFQN); -// } - if (isGenerateConcreteDao(clazz)) { generateConcreteDao(clazz, clazzName, clazzFQN); } } -// protected boolean isGenerateLegacyDao(ObjectModelClass input) { -// -// String daoLegacyFqn = TopiaGeneratorUtil.getLegacyDaoFqn(input); -// -// if (isInClassPath(daoLegacyFqn)) { -// -// // already in class-path -// return false; -// } -// -// // can safely generate the dao impl -// return true; -// } - protected boolean isGenerateConcreteDao(ObjectModelClass input) { String daoConcreteFqn = TopiaGeneratorUtil.getConcreteDaoFqn(input); @@ -295,17 +269,6 @@ } -// protected void generateLegacyDao(ObjectModelClass clazz, String clazzName, String clazzFQN) { -// ObjectModelClass daoClass = createClass(TopiaGeneratorUtil.getLegacyDaoName(clazz), clazz.getPackageName()); -// addAnnotation(daoClass, daoClass, Deprecated.class); -// setDocumentation(daoClass, "/**\n" + -// " * Cette classe etend le DAOImpl pour parametrer la classe avec le bon type\n" + -// " * Cette classe est marque finale car l'heritage entre les DAO se fait\n" + -// " * sur les DOAImpl, c-a-d que DAOAbstract peut etendre le DAOImpl\n" + -// " */"); -// setSuperClass(daoClass, TopiaGeneratorUtil.getAbstractDaoFqn(clazz) + "<" + clazzName + ">"); -// } - protected void generateConcreteDao(ObjectModelClass clazz, String clazzName, String clazzFQN) { String concreteDaoName = TopiaGeneratorUtil.getConcreteDaoName(clazz); ObjectModelClass daoClass = createClass(concreteDaoName, clazz.getPackageName()); @@ -398,8 +361,13 @@ } } if (superClassName == null) { - superClassName = daoImplementation.getName() + "<E>"; + superClassName = TopiaGeneratorUtil.getDaoSuperClassTagValue(clazz, model); + if (superClassName == null) { + superClassName = AbstractTopiaDao.class.getName(); + } + superClassName += "<E>"; } + if (log.isDebugEnabled()) { log.debug("super class = " + superClassName); } Modified: trunk/topia-templates/src/main/java/org/nuiton/topia/templates/EntityTransformer.java =================================================================== --- trunk/topia-templates/src/main/java/org/nuiton/topia/templates/EntityTransformer.java 2013-12-19 21:22:20 UTC (rev 2941) +++ trunk/topia-templates/src/main/java/org/nuiton/topia/templates/EntityTransformer.java 2013-12-19 21:23:21 UTC (rev 2942) @@ -41,6 +41,7 @@ import org.nuiton.eugene.models.object.ObjectModelParameter; import org.nuiton.topia.TopiaDaoSupplier; import org.nuiton.topia.TopiaException; +import org.nuiton.topia.persistence.AbstractTopiaDao; import org.nuiton.topia.persistence.EntityVisitor; import org.nuiton.topia.persistence.TopiaEntity; import org.nuiton.topia.persistence.TopiaEntityAbstract; @@ -321,7 +322,12 @@ // Extends TopiaEntityAbstract (only if hasn't parent entity) if (outputAbstract.getSuperclasses().isEmpty()) { - setSuperClass(outputAbstract, TopiaEntityAbstract.class); + + String superClassName = TopiaGeneratorUtil.getEntitySuperClassTagValue(input, model); + if (superClassName == null) { + superClassName = TopiaEntityAbstract.class.getName(); + } + setSuperClass(outputAbstract, superClassName); } addContextableMethods(input, outputAbstract); Modified: trunk/topia-templates/src/main/java/org/nuiton/topia/templates/PersistenceContextTransformer.java =================================================================== --- trunk/topia-templates/src/main/java/org/nuiton/topia/templates/PersistenceContextTransformer.java 2013-12-19 21:22:20 UTC (rev 2941) +++ trunk/topia-templates/src/main/java/org/nuiton/topia/templates/PersistenceContextTransformer.java 2013-12-19 21:23:21 UTC (rev 2942) @@ -25,7 +25,6 @@ */ /*{generator option: parentheses = false}*/ - /*{generator option: writeString = +}*/ import org.nuiton.eugene.java.ObjectModelTransformerToJava; @@ -37,10 +36,7 @@ import org.nuiton.topia.persistence.HibernateProvider; import org.nuiton.topia.persistence.TopiaHibernateSessionRegistry; import org.nuiton.topia.TopiaListenableSupport; -import org.nuiton.topia.persistence.TopiaEntity; import org.nuiton.topia.persistence.TopiaIdFactory; -import org.nuiton.topia.persistence.util.EntityOperator; -import org.nuiton.topia.persistence.util.EntityOperatorStore; import java.util.List; @@ -86,13 +82,16 @@ String className) { // try to find a super class by tag-value -// String superClass = TopiaGeneratorUtil.getPersistenceContextSuperClassTagValue(model); - String superClass = null; + String superClass = TopiaGeneratorUtil.getPersistenceContextSuperClassTagValue(model); if (superClass == null) { // no super-class, use default one superClass = AbstractTopiaPersistenceContext.class.getName(); + } else { + + //TODO check that super class instance of TopiaPersistenceContext + } ObjectModelClass output = createAbstractClass(className, packageName); @@ -102,83 +101,30 @@ // detect if there is a contract to set on abstract String contractName = TopiaGeneratorUtil.getPersistenceContextInterfaceName(model); -// addInterface(output, TopiaPersistenceContext.class); - boolean addPersistenceContextContract = isInClassPath(packageName, contractName); if (addPersistenceContextContract) { addInterface(output, packageName + "." + contractName); } - String modelName = model.getName(); - String daoHelperClazzName = modelName + "DAOHelper"; - - String entityEnumName = TopiaGeneratorUtil.getEntityEnumName(model); - List<ObjectModelClass> entityClasses = TopiaGeneratorUtil.getEntityClasses(model, true); - boolean generateOperator = - TopiaGeneratorUtil.shouldGenerateOperatorForDAOHelper(model); + addContructor(output, false); -// boolean generateStandaloneEnum = -// TopiaGeneratorUtil.shouldGenerateStandaloneEnumForDAOHelper(model); -// if (!generateStandaloneEnum) { -// -// addImport(output, packageName + "." + entityEnumName); -// -// } - addImport(output, TopiaEntity.class); - - if (generateOperator) { - addImport(output, EntityOperator.class); -// addImport(output, EntityOperatorStore.class); - } - - // add public constructor - ObjectModelOperation constructor = addConstructor( - output, - ObjectModelJavaModifier.PUBLIC); - addParameter(constructor, HibernateProvider.class, "hibernateProvider"); - addParameter(constructor, TopiaListenableSupport.class, "listenableSupport"); - addParameter(constructor, TopiaIdFactory.class, "topiaIdFactory"); - addParameter(constructor, TopiaHibernateSessionRegistry.class, "sessionRegistry"); - setOperationBody(constructor, "" -/*{ - super(hibernateProvider, listenableSupport, topiaIdFactory, sessionRegistry); - }*/ - ); - - ObjectModelOperation op; - - // getModelVersion method - String modelVersion = model.getVersion(); - op = addOperation(output, "getModelVersion", "String", ObjectModelJavaModifier.PUBLIC, ObjectModelJavaModifier.STATIC); - setOperationBody(op, "" -/*{ - return "<%=modelVersion%>"; - }*/ - ); - - // getModelName method - op = addOperation(output, "getModelName", "String", ObjectModelJavaModifier.PUBLIC, ObjectModelJavaModifier.STATIC); - setOperationBody(op, "" -/*{ - return "<%=modelName%>"; - }*/ - ); - for (ObjectModelClass clazz : entityClasses) { String clazzName = clazz.getName(); - // TODO brendan 14/10/13 use method - String daoContractName = clazzName + "Dao"; + String daoContractName = TopiaGeneratorUtil.getContracDaoName(clazz); String daoClazzName = TopiaGeneratorUtil.getConcreteDaoName(clazz); // specialized getXXXDao method - op = addOperation(output, "get" + daoContractName, clazz.getPackageName() + '.' + daoClazzName); + ObjectModelOperation op = addOperation( + output, + "get" + daoContractName, + clazz.getPackageName() + '.' + daoClazzName); addImport(output, clazz); setOperationBody(op, "" /*{ @@ -186,70 +132,7 @@ return result; }*/ ); - } - - // getContracts method - op = addOperation(output, "getContracts", entityEnumName + "[]", ObjectModelJavaModifier.PUBLIC, ObjectModelJavaModifier.STATIC); - setOperationBody(op, "" -/*{ - return <%=entityEnumName%>.getContracts(); - }*/ - ); - - // getContractClass method - op = addOperation(output, "getContractClass", "<T extends TopiaEntity> Class<T>", ObjectModelJavaModifier.PUBLIC, ObjectModelJavaModifier.STATIC); - addParameter(op, "Class<T>", "klass"); - setOperationBody(op, "" -/*{ - return <%=entityEnumName%>.getContractClass(klass); - }*/ - ); - - // getContractClasses method - op = addOperation(output, "getContractClasses", "Class<? extends TopiaEntity>[]", ObjectModelJavaModifier.PUBLIC, ObjectModelJavaModifier.STATIC); - setOperationBody(op, "" -/*{ - return <%=entityEnumName%>.getContractClasses(); - }*/ - ); - - // getImplementationClass method - op = addOperation(output, "getImplementationClass", "<T extends TopiaEntity> Class<T>", ObjectModelJavaModifier.PUBLIC, ObjectModelJavaModifier.STATIC); - addParameter(op, "Class<T>", "klass"); - setOperationBody(op, "" -/*{ - return <%=entityEnumName%>.getImplementationClass(klass); - }*/ - ); - - // getImplementationClasses method - op = addOperation(output, "getImplementationClasses", "Class<? extends TopiaEntity>[]", ObjectModelJavaModifier.PUBLIC, ObjectModelJavaModifier.STATIC); - setOperationBody(op, "" -/*{ - return <%=entityEnumName%>.getImplementationClasses(); - }*/ - ); - - // getImplementationClassesAsString method - op = addOperation(output, "getImplementationClassesAsString", "String", ObjectModelJavaModifier.PUBLIC, ObjectModelJavaModifier.STATIC); - setOperationBody(op, "" -/*{ - return <%=entityEnumName%>.getImplementationClassesAsString(); - }*/ - ); - - if (generateOperator) { - // getOperator method - op = addOperation(output, "getOperator", "<T extends TopiaEntity> EntityOperator<T>", ObjectModelJavaModifier.PUBLIC, ObjectModelJavaModifier.STATIC); - addParameter(op, "Class<T>", "klass"); - setOperationBody(op, "" -/*{ - return <%=entityEnumName%>.getOperator(klass); - }*/ - ); - } - } protected ObjectModelClass generateImpl(String packageName, @@ -259,10 +142,17 @@ ObjectModelClass output = createClass(entityConcreteName, packageName); setSuperClass(output, entityAbstractName); + addContructor(output, true); + return output; + } - ObjectModelOperation constructor = addConstructor( - output, - ObjectModelJavaModifier.PUBLIC); + protected void addContructor(ObjectModelClass output, boolean isPublic) { + + ObjectModelJavaModifier visibility = isPublic ? + ObjectModelJavaModifier.PUBLIC : + ObjectModelJavaModifier.PROTECTED; + + ObjectModelOperation constructor = addConstructor(output, visibility); addParameter(constructor, HibernateProvider.class, "hibernateProvider"); addParameter(constructor, TopiaListenableSupport.class, "listenableSupport"); addParameter(constructor, TopiaIdFactory.class, "topiaIdFactory"); @@ -272,8 +162,6 @@ super(hibernateProvider, listenableSupport, topiaIdFactory, sessionRegistry); }*/ ); - - return output; } } Modified: trunk/topia-templates/src/main/java/org/nuiton/topia/templates/TopiaGeneratorUtil.java =================================================================== --- trunk/topia-templates/src/main/java/org/nuiton/topia/templates/TopiaGeneratorUtil.java 2013-12-19 21:22:20 UTC (rev 2941) +++ trunk/topia-templates/src/main/java/org/nuiton/topia/templates/TopiaGeneratorUtil.java 2013-12-19 21:23:21 UTC (rev 2942) @@ -205,6 +205,10 @@ return input.getName() + "TopiaDao"; } + public static String getContracDaoName(ObjectModelClass input) { + return input.getName() + "Dao"; + } + @Deprecated public static String getLegacyDaoName(ObjectModelClass input) { return input.getName() + "DAO"; @@ -222,11 +226,6 @@ return input.getPackageName() + "." + getConcreteDaoName(input); } -// @Deprecated -// public static String getLegacyDaoFqn(ObjectModelClass input) { -// return input.getPackageName() + "." + getLegacyDaoName(input); -// } - public static String getEntityPackage(ObjectModelTransformerToJava transformer, ObjectModel model, ObjectModelClassifier input) { @@ -487,7 +486,7 @@ String attributes = ""; Collection<ObjectModelAttribute> attributeCollection; attributeCollection = getElementsWithStereotype(clazz.getAttributes(), - TopiaStereoTypes.STEREOTYPE_PRIMARYKAY); + TopiaStereoTypes.STEREOTYPE_PRIMARY_KEY); for (ObjectModelAttribute attr : attributeCollection) { attributes += attr.getType(); if (includeName) { @@ -1017,12 +1016,14 @@ * Obtain the class to use as abstract dao. * <p/> * It will look after a tag value {@link TopiaTagValues#TAG_DAO_IMPLEMENTATION} in model - * and if not found will use the default value which is {@link TopiaDAOImpl}. + * and if not found will use the default value which is {@link AbstractTopiaDao}. * * @param model the model which could contains * @return the type of the abstract dao to use * @since 2.5 + * @deprecated since 3.0-alpha-8, replaced by {@link #getDaoSuperClassTagValue(ObjectModelClassifier, ObjectModel)} */ + @Deprecated public static Class<?> getDAOImplementation(ObjectModel model) { String daoImpl = getDaoImplementationTagValue(model); Class<?> result; @@ -1178,7 +1179,6 @@ return hasEntityStereotype(classifier) && !classifier.isEnum(); } - /** * Check if the given attribute has the * {@link TopiaStereoTypes#STEREOTYPE_ENTITY} stereotype. @@ -1246,15 +1246,15 @@ /** * Check if the given attribute has the - * {@link TopiaStereoTypes#STEREOTYPE_PRIMARYKAY} stereotype. + * {@link TopiaStereoTypes#STEREOTYPE_PRIMARY_KEY} stereotype. * * @param attribute attribute to test * @return {@code true} if stereotype was found, {@code false otherwise} - * @see TopiaStereoTypes#STEREOTYPE_PRIMARYKAY + * @see TopiaStereoTypes#STEREOTYPE_PRIMARY_KEY * @since 2.5 */ public static boolean hasPrimaryKeyStereotype(ObjectModelAttribute attribute) { - return attribute.hasStereotype(TopiaStereoTypes.STEREOTYPE_PRIMARYKAY); + return attribute.hasStereotype(TopiaStereoTypes.STEREOTYPE_PRIMARY_KEY); } /** @@ -1488,76 +1488,6 @@ } /** - * Tests if the given classifier own at least one security tag value. - * - * @param classifier the classifier to test - * @return {@code true} if there is at least one security tag value on the given class - * @since 2.5 - */ - public static boolean isClassWithSecurity(ObjectModelClassifier classifier) { - return StringUtils.isNotEmpty(getSecurityCreateTagValue(classifier)) || - StringUtils.isNotEmpty(getSecurityLoadTagValue(classifier)) || - StringUtils.isNotEmpty(getSecurityUpdateTagValue(classifier)) || - StringUtils.isNotEmpty(getSecurityDeleteTagValue(classifier)); - } - - /** - * Obtain the value of the {@link TopiaTagValues#TAG_SECURITY_CREATE} - * tag value on the given classifier. - * - * @param classifier classifier to seek - * @return the none empty value of the found tag value or {@code null} if not found nor empty. - * @see TopiaTagValues#TAG_SECURITY_CREATE - * @since 2.5 - */ - public static String getSecurityCreateTagValue(ObjectModelClassifier classifier) { - String value = findTagValue(TopiaTagValues.TAG_SECURITY_CREATE, classifier, null); - return value; - } - - /** - * Obtain the value of the {@link TopiaTagValues#TAG_SECURITY_DELETE} - * tag value on the given classifier. - * - * @param classifier classifier to seek - * @return the none empty value of the found tag value or {@code null} if not found nor empty. - * @see TopiaTagValues#TAG_SECURITY_DELETE - * @since 2.5 - */ - public static String getSecurityDeleteTagValue(ObjectModelClassifier classifier) { - String value = findTagValue(TopiaTagValues.TAG_SECURITY_DELETE, classifier, null); - return value; - } - - /** - * Obtain the value of the {@link TopiaTagValues#TAG_SECURITY_LOAD} - * tag value on the given classifier. - * - * @param classifier classifier to seek - * @return the none empty value of the found tag value or {@code null} if not found nor empty. - * @see TopiaTagValues#TAG_SECURITY_LOAD - * @since 2.5 - */ - public static String getSecurityLoadTagValue(ObjectModelClassifier classifier) { - String value = findTagValue(TopiaTagValues.TAG_SECURITY_LOAD, classifier, null); - return value; - } - - /** - * Obtain the value of the {@link TopiaTagValues#TAG_SECURITY_UPDATE} - * tag value on the given classifier. - * - * @param classifier classifier to seek - * @return the none empty value of the found tag value or {@code null} if not found nor empty. - * @see TopiaTagValues#TAG_SECURITY_UPDATE - * @since 2.5 - */ - public static String getSecurityUpdateTagValue(ObjectModelClassifier classifier) { - String value = findTagValue(TopiaTagValues.TAG_SECURITY_UPDATE, classifier, null); - return value; - } - - /** * Obtain the value of the {@link TopiaTagValues#TAG_NOT_GENERATE_TO_STRING} * tag value on the given class. * @@ -1659,6 +1589,7 @@ return value; } + //TODO Javadoc public static boolean hasUseEnumerationNameTagValue(ObjectModelAttribute attr, ObjectModel model) { String value = findTagValue(TopiaTagValues.TAG_USE_ENUMERATION_NAME, attr, model); return Boolean.parseBoolean(value); @@ -1680,5 +1611,61 @@ return generate; } + /** + * Obtains the value of the {@link TopiaTagValues#TAG_PERSISTENCE_CONTEXT_SUPER_CLASS} + * tag value on the model. + * + * @param model model to seek + * @return the none empty value of the found tag value or {@code null} if not found nor empty. + * @see TopiaTagValues#TAG_PERSISTENCE_CONTEXT_SUPER_CLASS + * @since 3.0 + */ + public static String getPersistenceContextSuperClassTagValue(ObjectModel model) { + String value = findTagValue(TopiaTagValues.TAG_PERSISTENCE_CONTEXT_SUPER_CLASS, null, model); + return value; + } + + /** + * Obtains the value of the {@link TopiaTagValues#TAG_APPLICATION_CONTEXT_SUPER_CLASS} + * tag value on the model. + * + * @param model model to seek + * @return the none empty value of the found tag value or {@code null} if not found nor empty. + * @see TopiaTagValues#TAG_APPLICATION_CONTEXT_SUPER_CLASS + * @since 3.0 + */ + public static String getApplicationContextSuperClassTagValue(ObjectModel model) { + String value = findTagValue(TopiaTagValues.TAG_APPLICATION_CONTEXT_SUPER_CLASS, null, model); + return value; + } + + /** + * Obtains the value of the {@link TopiaTagValues#TAG_DAO_SUPER_CLASS} + * tag value on the given classifier or on the model. + * + * @param model model to seek + * @return the none empty value of the found tag value or {@code null} if not found nor empty. + * @see TopiaTagValues#TAG_DAO_SUPER_CLASS + * @since 3.0 + */ + public static String getDaoSuperClassTagValue(ObjectModelClassifier classifier, ObjectModel model) { + String value = findTagValue(TopiaTagValues.TAG_DAO_SUPER_CLASS, classifier, model); + return value; + } + + /** + * Obtains the value of the {@link TopiaTagValues#TAG_ENTITY_SUPER_CLASS} + * tag value on the given classifier or on the model. + * + * @param model model to seek + * @return the none empty value of the found tag value or {@code null} if not found nor empty. + * @see TopiaTagValues#TAG_ENTITY_SUPER_CLASS + * @since 3.0 + */ + public static String getEntitySuperClassTagValue(ObjectModelClassifier classifier, ObjectModel model) { + String value = findTagValue(TopiaTagValues.TAG_ENTITY_SUPER_CLASS, classifier, model); + return value; + } + } // TopiaGeneratorUtil Modified: trunk/topia-templates/src/main/java/org/nuiton/topia/templates/TopiaStereoTypes.java =================================================================== --- trunk/topia-templates/src/main/java/org/nuiton/topia/templates/TopiaStereoTypes.java 2013-12-19 21:22:20 UTC (rev 2941) +++ trunk/topia-templates/src/main/java/org/nuiton/topia/templates/TopiaStereoTypes.java 2013-12-19 21:23:21 UTC (rev 2942) @@ -84,5 +84,5 @@ */ @StereotypeDefinition(target = ObjectModelAttribute.class, documentation = "To specify that an attribute is part of a primary key (Hibernate mapping)") - String STEREOTYPE_PRIMARYKAY = "primaryKey"; + String STEREOTYPE_PRIMARY_KEY = "primaryKey"; } Modified: trunk/topia-templates/src/main/java/org/nuiton/topia/templates/TopiaTagValues.java =================================================================== --- trunk/topia-templates/src/main/java/org/nuiton/topia/templates/TopiaTagValues.java 2013-12-19 21:22:20 UTC (rev 2941) +++ trunk/topia-templates/src/main/java/org/nuiton/topia/templates/TopiaTagValues.java 2013-12-19 21:23:21 UTC (rev 2942) @@ -30,7 +30,13 @@ import org.nuiton.eugene.models.object.ObjectModelClass; import org.nuiton.eugene.models.object.ObjectModelClassifier; import org.nuiton.eugene.models.object.ObjectModelElement; +import org.nuiton.topia.AbstractTopiaApplicationContext; +import org.nuiton.topia.AbstractTopiaPersistenceContext; import org.nuiton.topia.TopiaDaoSupplier; +import org.nuiton.topia.persistence.AbstractTopiaDao; +import org.nuiton.topia.persistence.TopiaDao; +import org.nuiton.topia.persistence.TopiaEntity; +import org.nuiton.topia.persistence.TopiaEntityAbstract; import org.nuiton.topia.persistence.TopiaEntityContextable; import static org.nuiton.eugene.ModelPropertiesUtil.TagValueDefinition; @@ -233,46 +239,6 @@ String TAG_INHERITANCE_STRATEGY = "inheritanceStrategy"; /** - * Tag pour spécifier le permissions à la création. - * - * @see TopiaGeneratorUtil#getSecurityCreateTagValue(ObjectModelClassifier) - * @since 2.5 - */ - @TagValueDefinition(target = {ObjectModelClassifier.class}, - documentation = "Sets the create permission on an entity") - String TAG_SECURITY_CREATE = "securityCreate"; - - /** - * Tag pour spécifier le permissions au chargement. - * - * @see TopiaGeneratorUtil#getSecurityLoadTagValue(ObjectModelClassifier) - * @since 2.5 - */ - @TagValueDefinition(target = {ObjectModelClassifier.class}, - documentation = "Sets the load permission on an entity") - String TAG_SECURITY_LOAD = "securityLoad"; - - /** - * Tag pour spécifier le permissions à la mise à jour. - * - * @see TopiaGeneratorUtil#getSecurityUpdateTagValue(ObjectModelClassifier) - * @since 2.5 - */ - @TagValueDefinition(target = {ObjectModelClassifier.class}, - documentation = "Sets the update permission on an entity") - String TAG_SECURITY_UPDATE = "securityUpdate"; - - /** - * Tag pour spécifier le permissions à la suppression. - * - * @see TopiaGeneratorUtil#getSecurityDeleteTagValue(ObjectModelClassifier) - * @since 2.5 - */ - @TagValueDefinition(target = {ObjectModelClassifier.class}, - documentation = "sets the delete permission on an entity") - String TAG_SECURITY_DELETE = "securityDelete"; - - /** * Tag pour specifier de ne pas generer la methode toString. * * @see TopiaGeneratorUtil#getNotGenerateToStringTagValue(ObjectModelClassifier, ObjectModel) @@ -361,4 +327,57 @@ @TagValueDefinition(target = {ObjectModel.class, ObjectModelClassifier.class}, documentation = "Add a \"id\" property with its getter/setter on a DTO.") String TAG_GENERATE_TOPIA_ID_IN_DTO = "generateDTOTopiaId"; + + + /** + * Tag to specify a super class to use instead of {@link AbstractTopiaPersistenceContext}. + * <p/> + * <strong>Note:</strong> the class must implements {@link AbstractTopiaPersistenceContext}. + * + * @see AbstractTopiaPersistenceContext + * @see TopiaGeneratorUtil#getPersistenceContextSuperClassTagValue(ObjectModel)} + * @since 3.0 + */ + @TagValueDefinition(target = {ObjectModel.class}, + documentation = "Change the super class to use when generating PersistenceContext.") + String TAG_PERSISTENCE_CONTEXT_SUPER_CLASS = "persistenceContextSuperClass"; + + /** + * Tag to specify a super class to use instead of {@link AbstractTopiaApplicationContext}. + * <p/> + * <strong>Note:</strong> the class must implements {@link AbstractTopiaApplicationContext}. + * + * @see AbstractTopiaApplicationContext + * @see TopiaGeneratorUtil#getApplicationContextSuperClassTagValue(ObjectModel)} + * @since 3.0 + */ + @TagValueDefinition(target = {ObjectModel.class}, + documentation = "Change the super class to use when generating ApplicationContext.") + String TAG_APPLICATION_CONTEXT_SUPER_CLASS = "applicationContextSuperClass"; + + /** + * Tag to specify a super class to use instead of {@link AbstractTopiaDao}. + * <p/> + * <strong>Note:</strong> the class must implements {@link TopiaDao}. + * + * @see AbstractTopiaDao + * @see TopiaGeneratorUtil#getDaoSuperClassTagValue(ObjectModelClassifier, ObjectModel)} + * @since 3.0 + */ + @TagValueDefinition(target = {ObjectModelClassifier.class, ObjectModel.class}, + documentation = "Change the super class to use when generating dao.") + String TAG_DAO_SUPER_CLASS= "daoSuperClass"; + + /** + * Tag to specify a super class to use instead of {@link TopiaEntityAbstract}. + * <p/> + * <strong>Note:</strong> the class must implements {@link TopiaEntity}. + * + * @see TopiaEntity + * @see TopiaGeneratorUtil#getEntitySuperClassTagValue(ObjectModelClassifier, ObjectModel)} + * @since 3.0 + */ + @TagValueDefinition(target = {ObjectModelClassifier.class, ObjectModel.class}, + documentation = "Change the super class to use when generating Entity.") + String TAG_ENTITY_SUPER_CLASS= "entitySuperClass"; }