branch develop updated (0a178ea -> 83e0898)
This is an automated email from the git hooks/post-receive script. New change to branch develop in repository topia. See https://gitlab.nuiton.org/nuiton/topia.git from 0a178ea [jgitflow-maven-plugin]Updating develop poms back to pre merge state new d77fc23 Use EUGene new stereotypes and tag values API (see #4043) new 83e0898 Use EUGene new stereotypes and tag values API (Fixes #4043) Merge branch 'feature/4043' into develop The 2 revisions listed above as "new" are entirely new to this repository and will be described in separate emails. The revisions listed as "adds" were already present in the repository and have only been added to this reference. Detailed log of new commits: commit 83e089850d408a3e03d8c7f41b82b2fa97751bdd Merge: 0a178ea d77fc23 Author: Tony CHEMIT <chemit@codelutin.com> Date: Mon Sep 26 13:00:01 2016 +0200 Use EUGene new stereotypes and tag values API (Fixes #4043) Merge branch 'feature/4043' into develop commit d77fc23050e16d0885c53493a222838ec3719e71 Author: Tony CHEMIT <chemit@codelutin.com> Date: Mon Sep 26 12:59:34 2016 +0200 Use EUGene new stereotypes and tag values API (see #4043) Summary of changes: pom.xml | 2 +- .../templates/ApplicationContextTransformer.java | 10 +- .../topia/templates/EntityDaoTransformer.java | 19 +- .../topia/templates/EntityEnumTransformer.java | 14 +- .../templates/EntityHibernateMappingGenerator.java | 80 +-- .../nuiton/topia/templates/EntityTransformer.java | 41 +- .../templates/PersistenceContextTransformer.java | 8 +- .../topia/templates/TopiaCoreStereoTypes.java | 130 ++++ .../nuiton/topia/templates/TopiaCoreTagValues.java | 349 ++++++++++ .../nuiton/topia/templates/TopiaGeneratorUtil.java | 73 +- .../topia/templates/TopiaHibernateTagValues.java | 737 +++++++++++++++++++++ .../nuiton/topia/templates/TopiaStereoTypes.java | 15 +- .../org/nuiton/topia/templates/TopiaTagValues.java | 1 + .../topia/templates/TopiaTemplateHelper.java | 111 ++-- ...stereotype.provider.StereotypeMetadatasProvider | 1 + ...ion.tagvalue.provider.TagValueMetadatasProvider | 2 + ...ypesTest.java => TopiaCoreStereoTypesTest.java} | 25 +- ...ValuesTest.java => TopiaCoreTagValuesTest.java} | 13 +- ...sTest.java => TopiaHibernateTagValuesTest.java} | 12 +- .../topia/templates/TopiaStereoTypesTest.java | 1 + .../nuiton/topia/templates/TopiaTagValuesTest.java | 1 + 21 files changed, 1443 insertions(+), 202 deletions(-) create mode 100644 topia-templates/src/main/java/org/nuiton/topia/templates/TopiaCoreStereoTypes.java create mode 100644 topia-templates/src/main/java/org/nuiton/topia/templates/TopiaCoreTagValues.java create mode 100644 topia-templates/src/main/java/org/nuiton/topia/templates/TopiaHibernateTagValues.java create mode 100644 topia-templates/src/main/resources/META-INF/services/org.nuiton.eugene.models.extension.stereotype.provider.StereotypeMetadatasProvider create mode 100644 topia-templates/src/main/resources/META-INF/services/org.nuiton.eugene.models.extension.tagvalue.provider.TagValueMetadatasProvider copy topia-templates/src/test/java/org/nuiton/topia/templates/{TopiaStereoTypesTest.java => TopiaCoreStereoTypesTest.java} (59%) copy topia-templates/src/test/java/org/nuiton/topia/templates/{TopiaTagValuesTest.java => TopiaCoreTagValuesTest.java} (76%) copy topia-templates/src/test/java/org/nuiton/topia/templates/{TopiaTagValuesTest.java => TopiaHibernateTagValuesTest.java} (82%) -- To stop receiving notification emails like this one, please contact nuiton.org SCM administrator <admin+scm@nuiton.org>.
This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository topia. See https://gitlab.nuiton.org/nuiton/topia.git commit d77fc23050e16d0885c53493a222838ec3719e71 Author: Tony CHEMIT <chemit@codelutin.com> Date: Mon Sep 26 12:59:34 2016 +0200 Use EUGene new stereotypes and tag values API (see #4043) --- pom.xml | 2 +- .../templates/ApplicationContextTransformer.java | 10 +- .../topia/templates/EntityDaoTransformer.java | 19 +- .../topia/templates/EntityEnumTransformer.java | 14 +- .../templates/EntityHibernateMappingGenerator.java | 80 +-- .../nuiton/topia/templates/EntityTransformer.java | 41 +- .../templates/PersistenceContextTransformer.java | 8 +- .../topia/templates/TopiaCoreStereoTypes.java | 130 ++++ .../nuiton/topia/templates/TopiaCoreTagValues.java | 349 ++++++++++ .../nuiton/topia/templates/TopiaGeneratorUtil.java | 73 +- .../topia/templates/TopiaHibernateTagValues.java | 737 +++++++++++++++++++++ .../nuiton/topia/templates/TopiaStereoTypes.java | 15 +- .../org/nuiton/topia/templates/TopiaTagValues.java | 1 + .../topia/templates/TopiaTemplateHelper.java | 111 ++-- ...stereotype.provider.StereotypeMetadatasProvider | 1 + ...ion.tagvalue.provider.TagValueMetadatasProvider | 2 + ...ypesTest.java => TopiaCoreStereoTypesTest.java} | 25 +- ...ValuesTest.java => TopiaCoreTagValuesTest.java} | 13 +- ...sTest.java => TopiaHibernateTagValuesTest.java} | 12 +- .../topia/templates/TopiaStereoTypesTest.java | 1 + .../nuiton/topia/templates/TopiaTagValuesTest.java | 1 + 21 files changed, 1443 insertions(+), 202 deletions(-) diff --git a/pom.xml b/pom.xml index 55cdd21..3db3e92 100644 --- a/pom.xml +++ b/pom.xml @@ -218,7 +218,7 @@ <!-- libs version --> <commonsLoggingVersion>1.2</commonsLoggingVersion> - <eugeneVersion>3.0-alpha-5</eugeneVersion> + <eugeneVersion>3.0-SNAPSHOT</eugeneVersion> <flywayVersion>3.1</flywayVersion> <guavaVersion>19.0</guavaVersion> diff --git a/topia-templates/src/main/java/org/nuiton/topia/templates/ApplicationContextTransformer.java b/topia-templates/src/main/java/org/nuiton/topia/templates/ApplicationContextTransformer.java index 6524966..b3f684b 100644 --- a/topia-templates/src/main/java/org/nuiton/topia/templates/ApplicationContextTransformer.java +++ b/topia-templates/src/main/java/org/nuiton/topia/templates/ApplicationContextTransformer.java @@ -54,7 +54,7 @@ public class ApplicationContextTransformer extends ObjectModelTransformerToJava protected TopiaTemplateHelper templateHelper; - protected TopiaTagValues topiaTagValues; + protected TopiaCoreTagValues topiaCoreTagValues; @Override public void transformFromModel(ObjectModel input) { @@ -62,8 +62,8 @@ public class ApplicationContextTransformer extends ObjectModelTransformerToJava if (templateHelper == null) { templateHelper = new TopiaTemplateHelper(model); } - if (topiaTagValues == null) { - topiaTagValues = templateHelper.getTopiaTagValues(); + if (topiaCoreTagValues == null) { + topiaCoreTagValues = templateHelper.getTopiaCoreTagValues(); } String packageName = templateHelper.getApplicationContextPackage(this, model); @@ -95,7 +95,7 @@ public class ApplicationContextTransformer extends ObjectModelTransformerToJava String className) { // try to find a super class by tag-value - String superClass = topiaTagValues.getApplicationContextSuperClassTagValue(model); + String superClass = topiaCoreTagValues.getApplicationContextSuperClassTagValue(model); if (superClass == null) { @@ -130,7 +130,7 @@ public class ApplicationContextTransformer extends ObjectModelTransformerToJava addInterface(output, TopiaEntityEnumProvider.class.getName() + "<" + entityEnumName + ">"); boolean generateOperator = - topiaTagValues.getGenerateOperatorForDAOHelperTagValue(model); + topiaCoreTagValues.getGenerateOperatorForDAOHelperTagValue(model); addImport(output, TopiaEntity.class); diff --git a/topia-templates/src/main/java/org/nuiton/topia/templates/EntityDaoTransformer.java b/topia-templates/src/main/java/org/nuiton/topia/templates/EntityDaoTransformer.java index 3c0d3f9..19dbf8d 100644 --- a/topia-templates/src/main/java/org/nuiton/topia/templates/EntityDaoTransformer.java +++ b/topia-templates/src/main/java/org/nuiton/topia/templates/EntityDaoTransformer.java @@ -95,7 +95,8 @@ public class EntityDaoTransformer extends ObjectModelTransformerToJava { protected TopiaTemplateHelper templateHelper; - protected TopiaTagValues topiaTagValues; + protected TopiaCoreTagValues topiaCoreTagValues; + protected TopiaHibernateTagValues topiaHibernateTagValues; @Override public void transformFromModel(ObjectModel model) { @@ -103,10 +104,12 @@ public class EntityDaoTransformer extends ObjectModelTransformerToJava { if (templateHelper == null) { templateHelper = new TopiaTemplateHelper(model); } - if (topiaTagValues == null) { - topiaTagValues = templateHelper.getTopiaTagValues(); + if (topiaCoreTagValues == null) { + topiaCoreTagValues = templateHelper.getTopiaCoreTagValues(); + } + if (topiaHibernateTagValues == null) { + topiaHibernateTagValues = templateHelper.getTopiaHibernateTagValues(); } - String modelName = model.getName(); entityEnumName = modelName + "EntityEnum"; @@ -122,7 +125,7 @@ public class EntityDaoTransformer extends ObjectModelTransformerToJava { // keep all classifiers on the model which are entities List<ObjectModelClass> allEntities = templateHelper.getEntityClasses(model, true); - allEntitiesFqn = new HashSet<String>(allEntities.size()); + allEntitiesFqn = new HashSet<>(allEntities.size()); for (ObjectModelClass entity : allEntities) { String fqn = entity.getQualifiedName(); allEntitiesFqn.add(fqn); @@ -295,7 +298,7 @@ public class EntityDaoTransformer extends ObjectModelTransformerToJava { } } if (superClassName == null) { - superClassName = topiaTagValues.getDaoSuperClassTagValue(clazz, getPackage(clazz), model); + superClassName = topiaCoreTagValues.getDaoSuperClassTagValue(clazz, getPackage(clazz), model); if (superClassName == null) { superClassName = templateHelper.getParentDaoFqn(this, model); addImport(daoAbstractClass, superClassName); @@ -435,7 +438,7 @@ public class EntityDaoTransformer extends ObjectModelTransformerToJava { // On doit absolument supprimer pour les relations many-to-many // le this de la collection de l'autre cote - String dbSchema = topiaTagValues.getDbSchemaNameTagValue(clazz, aPackage, model); + String dbSchema = topiaHibernateTagValues.getDbSchemaNameTagValue(clazz, aPackage, model); String attrDBName = templateHelper.getDbName(attr); String attrClassifierDBName = templateHelper.getDbName(attr.getClassifier()); if (dbSchema != null) { @@ -615,7 +618,7 @@ public class EntityDaoTransformer extends ObjectModelTransformerToJava { Map<String, ObjectModelClass> allEntitiesByFQN; allEntities = templateHelper.getEntityClasses(model, true); - allEntitiesByFQN = new TreeMap<String, ObjectModelClass>(); + allEntitiesByFQN = new TreeMap<>(); // prepare usages map and fill allEntitiesByFQN map for (ObjectModelClass klass : allEntities) { diff --git a/topia-templates/src/main/java/org/nuiton/topia/templates/EntityEnumTransformer.java b/topia-templates/src/main/java/org/nuiton/topia/templates/EntityEnumTransformer.java index c2fbdb8..b3568e2 100644 --- a/topia-templates/src/main/java/org/nuiton/topia/templates/EntityEnumTransformer.java +++ b/topia-templates/src/main/java/org/nuiton/topia/templates/EntityEnumTransformer.java @@ -71,7 +71,8 @@ public class EntityEnumTransformer extends ObjectModelTransformerToJava { protected TopiaTemplateHelper templateHelper; - protected TopiaTagValues topiaTagValues; + protected TopiaCoreTagValues topiaCoreTagValues; + protected TopiaHibernateTagValues topiaHibernateTagValues; @Override public void transformFromModel(ObjectModel input) { @@ -80,15 +81,18 @@ public class EntityEnumTransformer extends ObjectModelTransformerToJava { templateHelper = new TopiaTemplateHelper(model); } - if (topiaTagValues == null) { - topiaTagValues = templateHelper.getTopiaTagValues(); + if (topiaCoreTagValues == null) { + topiaCoreTagValues = templateHelper.getTopiaCoreTagValues(); + } + if (topiaHibernateTagValues == null) { + topiaHibernateTagValues = templateHelper.getTopiaHibernateTagValues(); } String packageName = templateHelper.getApplicationContextPackage(this, model); String entityEnumName = templateHelper.getEntityEnumName(model); boolean generateOperator = - topiaTagValues.getGenerateOperatorForDAOHelperTagValue(model); + topiaCoreTagValues.getGenerateOperatorForDAOHelperTagValue(model); generateEntityEnum(packageName, entityEnumName, generateOperator); @@ -163,7 +167,7 @@ public class EntityEnumTransformer extends ObjectModelTransformerToJava { StringBuilder params = new StringBuilder(clazzName + ".class"); ObjectModelPackage aPackage = model.getPackage(clazz); - String dbSchema = topiaTagValues.getDbSchemaNameTagValue(clazz, aPackage, model); + String dbSchema = topiaHibernateTagValues.getDbSchemaNameTagValue(clazz, aPackage, model); if (dbSchema == null) { params.append(", null"); } else { diff --git a/topia-templates/src/main/java/org/nuiton/topia/templates/EntityHibernateMappingGenerator.java b/topia-templates/src/main/java/org/nuiton/topia/templates/EntityHibernateMappingGenerator.java index a644b87..7d1dd3d 100644 --- a/topia-templates/src/main/java/org/nuiton/topia/templates/EntityHibernateMappingGenerator.java +++ b/topia-templates/src/main/java/org/nuiton/topia/templates/EntityHibernateMappingGenerator.java @@ -28,7 +28,7 @@ import org.apache.commons.lang3.BooleanUtils; import org.apache.commons.lang3.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.nuiton.eugene.EugeneStereoTypes; +import org.nuiton.eugene.EugeneCoreStereotypes; import org.nuiton.eugene.GeneratorUtil; import org.nuiton.eugene.java.JavaGeneratorUtil; import org.nuiton.eugene.models.object.ObjectModel; @@ -71,7 +71,7 @@ public class EntityHibernateMappingGenerator extends ObjectModelGenerator { private static final String HIBERNATE_ATTRIBUTE_NAME = "name"; - private Map<String, String[]> columnNamesMap = new HashMap<String, String[]>(); + private Map<String, String[]> columnNamesMap = new HashMap<>(); public static final String HIBERNATE_ATTRIBUTE_LAZY = "lazy"; @@ -103,7 +103,7 @@ public class EntityHibernateMappingGenerator extends ObjectModelGenerator { protected TopiaTemplateHelper templateHelper; - protected TopiaTagValues topiaTagValues; + protected TopiaHibernateTagValues topiaHibernateTagValues; class ClassContext { @@ -123,9 +123,9 @@ public class EntityHibernateMappingGenerator extends ObjectModelGenerator { this.model = model; this.input = input; this.aPackage=aPackage; - this.generateForeignKeyNames = topiaTagValues.isGenerateForeignKeyNames(input, model); + this.generateForeignKeyNames = topiaHibernateTagValues.isGenerateForeignKeyNames(input, model); this.tableName = templateHelper.getDbName(input); - this.schema = topiaTagValues.getDbSchemaNameTagValue(input, aPackage, model); + this.schema = topiaHibernateTagValues.getDbSchemaNameTagValue(input, aPackage, model); } public boolean isGenerateForeignKeyNames() { @@ -177,8 +177,8 @@ public class EntityHibernateMappingGenerator extends ObjectModelGenerator { if (templateHelper == null) { templateHelper = new TopiaTemplateHelper(model); } - if (topiaTagValues == null) { - topiaTagValues = templateHelper.getTopiaTagValues(); + if (topiaHibernateTagValues == null) { + topiaHibernateTagValues = templateHelper.getTopiaHibernateTagValues(); } String persistenceType = templateHelper.getPersistenceType(input); @@ -202,16 +202,16 @@ public class EntityHibernateMappingGenerator extends ObjectModelGenerator { }*/ boolean haveSuper = input.getSuperclasses().size() > 0; // la liste des attributs faisant parti de la clef metier - List<ObjectModelAttribute> naturalAttributes = new ArrayList<ObjectModelAttribute>(); + List<ObjectModelAttribute> naturalAttributes = new ArrayList<>(); // la liste des autres attributs - List<ObjectModelAttribute> noneNaturalAttributes = new ArrayList<ObjectModelAttribute>(); + List<ObjectModelAttribute> noneNaturalAttributes = new ArrayList<>(); String clazzDOType = templateHelper.getDOType(input, model); String tableName = classContext.getTableName(); String isAbstract = BooleanUtils.toStringTrueFalse(input.isAbstract()); String clazzFQN = input.getQualifiedName(); - Map<String,String> optionalAttributesMap = new HashMap<String, String>(); + Map<String,String> optionalAttributesMap = new HashMap<>(); if (classContext.isUseSchema()) { generateFromTagValue(optionalAttributesMap,HIBERNATE_ATTRIBUTE_SCHEMA, classContext.getSchema()); @@ -219,7 +219,7 @@ public class EntityHibernateMappingGenerator extends ObjectModelGenerator { //On précise au proxy de quelle interface hérite l'objet - String proxyTagValue = topiaTagValues.getProxyInterfaceTagValue(input, aPackage, model); + String proxyTagValue = topiaHibernateTagValues.getProxyInterfaceTagValue(input, aPackage, model); if (StringUtils.isEmpty(proxyTagValue) || !proxyTagValue.equals("none")) { generateFromTagValue(optionalAttributesMap,HIBERNATE_ATTRIBUTE_PROXY, clazzFQN); } @@ -263,7 +263,7 @@ public class EntityHibernateMappingGenerator extends ObjectModelGenerator { // on detecte les attributs des clef metiers for (ObjectModelAttribute attr : input.getAttributes()) { - if (topiaTagValues.getNaturalIdTagValue(attr)) { + if (topiaHibernateTagValues.getNaturalIdTagValue(attr)) { // attribut metier naturalAttributes.add(attr); } else { @@ -273,7 +273,7 @@ public class EntityHibernateMappingGenerator extends ObjectModelGenerator { } if (!naturalAttributes.isEmpty()) { // generation de la clef metier - boolean mutable = topiaTagValues.getNaturalIdMutableTagValue(input); + boolean mutable = topiaHibernateTagValues.getNaturalIdMutableTagValue(input); String mutableStr = mutable ? " mutable=\"true\"" : ""; if (log.isDebugEnabled()) { log.debug("natural-id detected for class " + input.getName() + " (" + mutableStr + ") attributes : " + naturalAttributes); @@ -327,7 +327,7 @@ public class EntityHibernateMappingGenerator extends ObjectModelGenerator { ObjectModelPackage aPackage = classContext.getPackage(); boolean indexForeignKeys = - topiaTagValues.getIndexForeignKeysTagValue(attribute, aPackage, model); + topiaHibernateTagValues.getIndexForeignKeysTagValue(attribute, aPackage, model); if (!indexForeignKeys) { @@ -428,7 +428,7 @@ public class EntityHibernateMappingGenerator extends ObjectModelGenerator { String notNull = " " + generateFromTagValue(HIBERNATE_ATTRIBUTE_NOT_NULL, "true"); // AThimel 14/03/2014 I think both assoc class participants must always be not-null String attrName = getName(attr, true); String attrType = getType(aPackage, clazz, attr, true); - String lazy = generateFromTagValue(HIBERNATE_ATTRIBUTE_LAZY, topiaTagValues.getLazyTagValue(attr)); + String lazy = generateFromTagValue(HIBERNATE_ATTRIBUTE_LAZY, topiaHibernateTagValues.getLazyTagValue(attr)); String attrColumn = templateHelper.getDbName(attr); String foreignKeyName = ""; if (classContext.isGenerateForeignKeyNames()) { @@ -482,25 +482,25 @@ public class EntityHibernateMappingGenerator extends ObjectModelGenerator { } String type = attr.getType(); - String attrType = topiaTagValues.getHibernateAttributeType(attr, clazz, aPackage, model); + String attrType = topiaHibernateTagValues.getHibernateAttributeType(attr, clazz, aPackage, model); if (StringUtils.isNotEmpty(attrType)) { // tag value detected of the attribute type = attrType; } else { - attrType = topiaTagValues.getAttributeType(attr, clazz, aPackage, model); + attrType = topiaHibernateTagValues.getAttributeType(attr, clazz, aPackage, model); if (StringUtils.isNotEmpty(attrType)) { // tag value detected of the attribute type = attrType; } else{ // old code - attrType = topiaTagValues.getTypeTagValue(attr); + attrType = topiaHibernateTagValues.getTypeTagValue(attr); if (StringUtils.isNotEmpty(attrType)) { // tag value detected of the attribute if (log.isWarnEnabled()) { - String message = topiaTagValues.getDeprecatedAttributeTagValueMessage(clazz, attr, TopiaTagValues.TAG_TYPE, TopiaTagValues.TAG_HIBERNATE_ATTRIBUTE_TYPE , attrType); + String message = topiaHibernateTagValues.getDeprecatedAttributeTagValueMessage(clazz, attr, TopiaHibernateTagValues.Store.type.getName(), TopiaHibernateTagValues.Store.hibernateAttributeType.getName(), attrType); log.warn(message); } type = attrType; @@ -510,7 +510,7 @@ public class EntityHibernateMappingGenerator extends ObjectModelGenerator { if (StringUtils.isNotEmpty(modelType)) { // tag value detected of the model - String message = topiaTagValues.getDeprecatedModelTagValueMessage(model, type, TopiaTagValues.TAG_HIBERNATE_ATTRIBUTE_TYPE + "." + type , modelType); + String message = topiaHibernateTagValues.getDeprecatedModelTagValueMessage(model, type, TopiaHibernateTagValues.Store.attributeType.getName() + "." + type , modelType); log.warn(message); //TODO tchemit 20100507 Explain What todes it do ? Dont understand the story of columnNamesMap int bracketIndex = modelType.indexOf('('); @@ -545,7 +545,7 @@ public class EntityHibernateMappingGenerator extends ObjectModelGenerator { String attrType = getType(classContext, attr); String accessField = "field"; - String tagValue = topiaTagValues.getAccessTagValue(attr); + String tagValue = topiaHibernateTagValues.getAccessTagValue(attr); if (StringUtils.isNotEmpty(tagValue)) { accessField = tagValue; } @@ -559,7 +559,7 @@ public class EntityHibernateMappingGenerator extends ObjectModelGenerator { if (attrType.trim().endsWith("[]")) { attrType = attrType.trim().substring(0, attrType.trim().length()-2); - Map<String,String> optionalAttributesMap = new HashMap<String, String>(); + Map<String,String> optionalAttributesMap = new HashMap<>(); if (classContext.isUseSchema()) { generateFromTagValue(optionalAttributesMap, HIBERNATE_ATTRIBUTE_SCHEMA, classContext.getSchema()); @@ -578,17 +578,17 @@ public class EntityHibernateMappingGenerator extends ObjectModelGenerator { }*/ } else { - Map<String,String> optionalAttributesMap = new HashMap<String, String>(); + Map<String,String> optionalAttributesMap = new HashMap<>(); if (JavaGeneratorUtil.isOrdered(attr)) { String indexName = tableName + "_idx"; generateFromTagValue(optionalAttributesMap, HIBERNATE_ATTRIBUTE_INDEX, indexName); } - if (EugeneStereoTypes.hasUniqueStereotype(attr)) { + if (EugeneCoreStereotypes.hasUniqueStereotype(attr)) { generateFromTagValue(optionalAttributesMap, HIBERNATE_ATTRIBUTE_UNIQUE, "true"); } - generateFromTagValue(optionalAttributesMap, HIBERNATE_ATTRIBUTE_NOT_NULL, topiaTagValues.getNotNullTagValue(attr)); + generateFromTagValue(optionalAttributesMap, HIBERNATE_ATTRIBUTE_NOT_NULL, topiaHibernateTagValues.getNotNullTagValue(attr)); /*{<%=prefix%> <property name="<%=attrName%>" access="<%=accessField%>"}*/ if ( ! attrIsEnumeration) { /*{ type="<%=attrType%>"}*/ @@ -597,14 +597,14 @@ public class EntityHibernateMappingGenerator extends ObjectModelGenerator { String[] columnNames = columnNamesMap.get(attrType); // contains all required attributes for a column node - Map<String,String> columnAttributes = new TreeMap<String, String>(); + Map<String,String> columnAttributes = new TreeMap<>(); if (StringUtils.isNotEmpty(attr.getDefaultValue())) { //TC-20100129 with a default value we must use the column child tag String defaultValue = attr.getDefaultValue().trim(); columnAttributes.put(HIBERNATE_ATTRIBUTE_DEFAULT, defaultValue); } - String sqlType = topiaTagValues.getSqlTypeTagValue(attr); + String sqlType = topiaHibernateTagValues.getSqlTypeTagValue(attr); if (!StringUtils.isEmpty(sqlType)) { // an specific sql type was specified for the attribute, use it @@ -612,7 +612,7 @@ public class EntityHibernateMappingGenerator extends ObjectModelGenerator { } // add length attribute if required - String lengthTagValue = topiaTagValues.getLengthTagValue(attr); + String lengthTagValue = topiaHibernateTagValues.getLengthTagValue(attr); if (!StringUtils.isEmpty(lengthTagValue)) { generateFromTagValue(optionalAttributesMap, HIBERNATE_ATTRIBUTE_LENGTH, lengthTagValue); @@ -639,7 +639,7 @@ public class EntityHibernateMappingGenerator extends ObjectModelGenerator { // if the user tuned the model to use name instead of // ordinal to store the values, we must add a clause - boolean useEnumerationName = topiaTagValues.hasUseEnumerationNameTagValue(attr, classContext.getInput(), classContext.getPackage(), model); + boolean useEnumerationName = topiaHibernateTagValues.hasUseEnumerationNameTagValue(attr, classContext.getInput(), classContext.getPackage(), model); if (useEnumerationName) { String enumSQLType = String.valueOf(Types.VARCHAR); /*{ @@ -717,16 +717,16 @@ public class EntityHibernateMappingGenerator extends ObjectModelGenerator { String attrName = getName(attr); // ??? String attrType = getType(classContext, attr); String reverseAttrDBName = templateHelper.getReverseDbName(attr); - String orderBy = generateFromTagValue(HIBERNATE_ATTRIBUTE_ORDER_BY, topiaTagValues.getOrderByTagValue(attr)); + String orderBy = generateFromTagValue(HIBERNATE_ATTRIBUTE_ORDER_BY, topiaHibernateTagValues.getOrderByTagValue(attr)); String cascade = ""; if (attr.isComposite() || attr.hasAssociationClass()) { cascade += HIBERNATE_ATTRIBUTE_CASCADE+"=\"all,delete-orphan\" "; } - String lazy = generateFromTagValue(HIBERNATE_ATTRIBUTE_LAZY, topiaTagValues.getLazyTagValue(attr), "true"); + String lazy = generateFromTagValue(HIBERNATE_ATTRIBUTE_LAZY, topiaHibernateTagValues.getLazyTagValue(attr), "true"); - String fetch = generateFromTagValue(HIBERNATE_ATTRIBUTE_FETCH, topiaTagValues.getFetchTagValue(attr)); + String fetch = generateFromTagValue(HIBERNATE_ATTRIBUTE_FETCH, topiaHibernateTagValues.getFetchTagValue(attr)); String collType = templateHelper.getNMultiplicityHibernateType(attr); String inverse = ""; @@ -812,7 +812,7 @@ public class EntityHibernateMappingGenerator extends ObjectModelGenerator { String attrName = getName(attr); String attrType = getType(classContext, attr); String collType = templateHelper.getNMultiplicityHibernateType(attr); - String lazy = generateFromTagValue(HIBERNATE_ATTRIBUTE_LAZY, topiaTagValues.getLazyTagValue(attr)); + String lazy = generateFromTagValue(HIBERNATE_ATTRIBUTE_LAZY, topiaHibernateTagValues.getLazyTagValue(attr)); String attrColumn = templateHelper.getDbName(attr); String foreignKeyAttribute = ""; if (classContext.isGenerateForeignKeyNames()) { @@ -830,7 +830,7 @@ public class EntityHibernateMappingGenerator extends ObjectModelGenerator { } if (attrIsEnumeration) { - boolean useEnumerationName = topiaTagValues.hasUseEnumerationNameTagValue(attr, classContext.getInput(), classContext.getPackage(), model); + boolean useEnumerationName = topiaHibernateTagValues.hasUseEnumerationNameTagValue(attr, classContext.getInput(), classContext.getPackage(), model); /*{<%=prefix%> <element column="<%=attrColumn%>" node="id"> <%=prefix%> <type name="org.hibernate.type.EnumType"> <%=prefix%> <param name="<%=org.hibernate.type.EnumType.ENUM%>"><%=attrType%></param> @@ -884,9 +884,9 @@ public class EntityHibernateMappingGenerator extends ObjectModelGenerator { /*{access="field" }*/ } // vérifier si le tag lazy est defini par defaut dans le fichier de proprietes - String lazy = generateFromTagValue(HIBERNATE_ATTRIBUTE_LAZY, topiaTagValues.getLazyTagValue(attr)); + String lazy = generateFromTagValue(HIBERNATE_ATTRIBUTE_LAZY, topiaHibernateTagValues.getLazyTagValue(attr)); /*{<%=lazy%>}*/ - String notNull = generateFromTagValue(HIBERNATE_ATTRIBUTE_NOT_NULL, topiaTagValues.getNotNullTagValue(attr)); + String notNull = generateFromTagValue(HIBERNATE_ATTRIBUTE_NOT_NULL, topiaHibernateTagValues.getNotNullTagValue(attr)); /*{<%=notNull%>}*/ if (isUnique) { /*{unique="true" }*/ @@ -912,7 +912,7 @@ public class EntityHibernateMappingGenerator extends ObjectModelGenerator { // Le tagvalue "inverse" permet de spécifier qui possède le // inverse="true". Il est impératif de l'utiliser sur les deux // extrémités pour ne pas avoir de surprise. - String inverseValue = topiaTagValues.getInverseTagValue(attr); + String inverseValue = topiaHibernateTagValues.getInverseTagValue(attr); if (StringUtils.isNotEmpty(inverseValue)) { isInverse &= Boolean.parseBoolean(inverseValue); // Si aucun tagvalue n'est défini, le choix est arbitraire : le @@ -931,8 +931,8 @@ public class EntityHibernateMappingGenerator extends ObjectModelGenerator { String attrType = getType(classContext, attr); String attrName = getName(attr); String attrColumn = templateHelper.getDbName(attr); - String lazy = generateFromTagValue(HIBERNATE_ATTRIBUTE_LAZY, topiaTagValues.getLazyTagValue(attr), "true"); - String orderBy = generateFromTagValue(HIBERNATE_ATTRIBUTE_ORDER_BY, topiaTagValues.getOrderByTagValue(attr)); + String lazy = generateFromTagValue(HIBERNATE_ATTRIBUTE_LAZY, topiaHibernateTagValues.getLazyTagValue(attr), "true"); + String orderBy = generateFromTagValue(HIBERNATE_ATTRIBUTE_ORDER_BY, topiaHibernateTagValues.getOrderByTagValue(attr)); String collType = templateHelper.getNMultiplicityHibernateType(attr); String tableName = templateHelper.getManyToManyTableName(attr); String inverse = ""; @@ -940,7 +940,7 @@ public class EntityHibernateMappingGenerator extends ObjectModelGenerator { inverse = HIBERNATE_ATTRIBUTE_INVERSE+"=\"true\" "; } String reverseAttrDBName = templateHelper.getReverseDbName(attr); - Map<String, String> optionalAttributesMap = new HashMap<String, String>(); + Map<String, String> optionalAttributesMap = new HashMap<>(); if (classContext.isUseSchema()) { generateFromTagValue(optionalAttributesMap, HIBERNATE_ATTRIBUTE_SCHEMA, classContext.getSchema()); } diff --git a/topia-templates/src/main/java/org/nuiton/topia/templates/EntityTransformer.java b/topia-templates/src/main/java/org/nuiton/topia/templates/EntityTransformer.java index 836ec3d..765e43d 100644 --- a/topia-templates/src/main/java/org/nuiton/topia/templates/EntityTransformer.java +++ b/topia-templates/src/main/java/org/nuiton/topia/templates/EntityTransformer.java @@ -28,8 +28,8 @@ import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.builder.ToStringBuilder; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.nuiton.eugene.EugeneStereoTypes; -import org.nuiton.eugene.EugeneTagValues; +import org.nuiton.eugene.EugeneCoreStereotypes; +import org.nuiton.eugene.EugeneCoreTagValues; import org.nuiton.eugene.GeneratorUtil; import org.nuiton.eugene.java.JavaGeneratorUtil; import org.nuiton.eugene.java.ObjectModelTransformerToJava; @@ -109,7 +109,8 @@ public class EntityTransformer extends ObjectModelTransformerToJava { protected TopiaTemplateHelper templateHelper; - protected TopiaTagValues topiaTagValues; + protected TopiaCoreTagValues topiaCoreTagValues; + protected TopiaHibernateTagValues topiaHibernateTagValues; protected void clean() { outputInterface = null; @@ -144,9 +145,9 @@ public class EntityTransformer extends ObjectModelTransformerToJava { // no specific prefix, so no prefix if (log.isWarnEnabled()) { log.warn("[" + input.getName() + "] Will generate constants with NO prefix, not a good idea... \n" + - "Use '" + EugeneTagValues.TAG_CONSTANT_PREFIX + + "Use '" + EugeneCoreTagValues.Store.constantPrefix+ "' tagvalue in your xmi properties. For example " + - "for all the model : model.tagvalue." + EugeneTagValues.TAG_CONSTANT_PREFIX + "=PROPERTY_"); + "for all the model : model.tagvalue." + EugeneCoreTagValues.Store.constantPrefix + "=PROPERTY_"); } } setConstantPrefix(prefix); @@ -155,12 +156,15 @@ public class EntityTransformer extends ObjectModelTransformerToJava { generateAbstract = isGenerateAbstract(input); generateImpl = isGenerateImpl(input); - if (topiaTagValues == null) { - topiaTagValues = templateHelper.getTopiaTagValues(); + if (topiaCoreTagValues == null) { + topiaCoreTagValues = templateHelper.getTopiaCoreTagValues(); + } + if (topiaHibernateTagValues==null) { + topiaHibernateTagValues = templateHelper.getTopiaHibernateTagValues(); } generateBooleanGetMethods = getEugeneTagValues().isGenerateBooleanGetMethods(input, aPackage, model); - generatePropertyChangeSupport = topiaTagValues.isGeneratePropertyChangeSupport(input, model); + generatePropertyChangeSupport = topiaCoreTagValues.isGeneratePropertyChangeSupport(input, model); if (generateInterface) { @@ -211,7 +215,7 @@ public class EntityTransformer extends ObjectModelTransformerToJava { generateExtraOperations(input); // Implement toString operation - if (!topiaTagValues.getNotGenerateToStringTagValue(input, aPackage, model)) { + if (!topiaCoreTagValues.getNotGenerateToStringTagValue(input, aPackage, model)) { generateToStringOperation(input); } @@ -232,6 +236,7 @@ public class EntityTransformer extends ObjectModelTransformerToJava { ObjectModelClass ouput) { // serialVersionUID + //FIXME deprecated api String svUID = TagValues.findTagValue(GeneratorUtil.SERIAL_VERSION_UID, input, model); if (svUID == null) { @@ -258,7 +263,7 @@ public class EntityTransformer extends ObjectModelTransformerToJava { outputInterface.getQualifiedName()); } - List<String> interfaceAlreadyDone = new LinkedList<String> (); + List<String> interfaceAlreadyDone = new LinkedList<>(); // Extends for (ObjectModelClassifier parent : input.getInterfaces()) { addInterface(interfaceAlreadyDone, outputInterface, parent); @@ -278,7 +283,7 @@ public class EntityTransformer extends ObjectModelTransformerToJava { Class<?> interfaze = TopiaEntity.class; - if (topiaTagValues.getContextableTagValue(input, aPackage, model)) { + if (topiaCoreTagValues.getContextableTagValue(input, aPackage, model)) { interfaze = TopiaEntityContextable.class; } @@ -286,7 +291,7 @@ public class EntityTransformer extends ObjectModelTransformerToJava { outputInterface, interfaze); - } else if (topiaTagValues.getContextableTagValue(input, aPackage, model)) { + } else if (topiaCoreTagValues.getContextableTagValue(input, aPackage, model)) { // Even if there is no need to implement TopiaEntity, it might be // necessary to implement TopiaEntityContextable addInterface(interfaceAlreadyDone, @@ -346,21 +351,21 @@ public class EntityTransformer extends ObjectModelTransformerToJava { // Extends AbstractTopiaEntity (only if hasn't parent entity) if (outputAbstract.getSuperclasses().isEmpty()) { - String superClassName = topiaTagValues.getEntitySuperClassTagValue(input, aPackage, model); + String superClassName = topiaCoreTagValues.getEntitySuperClassTagValue(input, aPackage, model); if (superClassName == null) { superClassName = AbstractTopiaEntity.class.getName(); } setSuperClass(outputAbstract, superClassName); } - if (topiaTagValues.getContextableTagValue(input, aPackage, model)) { + if (topiaCoreTagValues.getContextableTagValue(input, aPackage, model)) { addContextableMethods(input, outputAbstract); } } /** * Ajout les methodes necessaire à l'interface {@link TopiaEntityContextable} - * si le tagValue {@link TopiaTagValues#TAG_CONTEXTABLE} est renseigné. + * si le tagValue {@link TopiaCoreTagValues.Store#contextable} est renseigné. * @param input FIXME * @param outputAbstract FIXME */ @@ -677,7 +682,7 @@ public class EntityTransformer extends ObjectModelTransformerToJava { setDocumentation(property, buffer.toString()); // Annotation - String annotation = getTagValueDefinitionProvider(TopiaTagValues.class).getAnnotationTagValue(attribute); + String annotation = getTagValueMetadatasProvider(TopiaCoreTagValues.class).getAnnotationTagValue(attribute); if (!StringUtils.isEmpty(annotation)) { //FIXME Make annotation works... //TODO tchemit 20100513 Test it still works @@ -755,7 +760,7 @@ public class EntityTransformer extends ObjectModelTransformerToJava { GeneratorUtil.getSimpleName(collectionImpl); boolean ordered = JavaGeneratorUtil.isOrdered(attribute); - boolean unique = EugeneStereoTypes.hasUniqueStereotype(attribute); + boolean unique = EugeneCoreStereotypes.hasUniqueStereotype(attribute); boolean entity = templateHelper.isEntity(attribute, model); // addXXX @@ -1853,7 +1858,7 @@ public class EntityTransformer extends ObjectModelTransformerToJava { } protected String getPropertyType(ObjectModelAttribute attribute, ObjectModelClassifier aClass, ObjectModelPackage aPackage) { - String propertyType = topiaTagValues.getAttributeType(attribute, aClass, aPackage ,model); + String propertyType = topiaHibernateTagValues.getAttributeType(attribute, aClass, aPackage , model); if (propertyType == null) { propertyType = attribute.getType(); } diff --git a/topia-templates/src/main/java/org/nuiton/topia/templates/PersistenceContextTransformer.java b/topia-templates/src/main/java/org/nuiton/topia/templates/PersistenceContextTransformer.java index 69979e5..3654ff7 100644 --- a/topia-templates/src/main/java/org/nuiton/topia/templates/PersistenceContextTransformer.java +++ b/topia-templates/src/main/java/org/nuiton/topia/templates/PersistenceContextTransformer.java @@ -50,7 +50,7 @@ public class PersistenceContextTransformer extends ObjectModelTransformerToJava protected TopiaTemplateHelper templateHelper; - protected TopiaTagValues topiaTagValues; + protected TopiaCoreTagValues topiaCoreTagValues; @Override public void transformFromModel(ObjectModel input) { @@ -59,8 +59,8 @@ public class PersistenceContextTransformer extends ObjectModelTransformerToJava templateHelper = new TopiaTemplateHelper(model); } - if (topiaTagValues == null) { - topiaTagValues = templateHelper.getTopiaTagValues(); + if (topiaCoreTagValues == null) { + topiaCoreTagValues = templateHelper.getTopiaCoreTagValues(); } String packageName = templateHelper.getPersistenceContextPackage(this, model); @@ -142,7 +142,7 @@ public class PersistenceContextTransformer extends ObjectModelTransformerToJava ObjectModelClass output = createAbstractClass(className, packageName); // try to find a super class by tag-value - String superClass = topiaTagValues.getPersistenceContextSuperClassTagValue(model); + String superClass = topiaCoreTagValues.getPersistenceContextSuperClassTagValue(model); if (superClass == null) { diff --git a/topia-templates/src/main/java/org/nuiton/topia/templates/TopiaCoreStereoTypes.java b/topia-templates/src/main/java/org/nuiton/topia/templates/TopiaCoreStereoTypes.java new file mode 100644 index 0000000..d7ee040 --- /dev/null +++ b/topia-templates/src/main/java/org/nuiton/topia/templates/TopiaCoreStereoTypes.java @@ -0,0 +1,130 @@ +package org.nuiton.topia.templates; + +/* + * #%L + * ToPIA :: Templates + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2004 - 2014 CodeLutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/lgpl-3.0.html>. + * #L% + */ + +import com.google.common.collect.ImmutableSet; +import org.nuiton.eugene.models.extension.stereotype.StereotypeMetadata; +import org.nuiton.eugene.models.extension.stereotype.StereotypeUtil; +import org.nuiton.eugene.models.extension.stereotype.provider.DefaultStereotypeMetadatasProvider; +import org.nuiton.eugene.models.object.ObjectModelAttribute; +import org.nuiton.eugene.models.object.ObjectModelClassifier; +import org.nuiton.eugene.models.object.ObjectModelPackage; + +import java.util.Set; + +import static org.nuiton.i18n.I18n.n; + +/** + * All extra stereotypes usable in topia generators. + * + * @author Tony Chemit - chemit@codelutin.com + * @plexus.component role="org.nuiton.eugene.models.extension.stereotype.provider.StereotypeMetadatasProvider" role-hint="topia-core" + * @since 2.5 + */ +public class TopiaCoreStereoTypes extends DefaultStereotypeMetadatasProvider { + + public enum Store implements StereotypeMetadata { + + /** + * Stéréotype pour les objets devant être générées sous forme d'entités + * + * @see TopiaTemplateHelper#isEntity(ObjectModelClassifier) + * @see #hasEntityStereotype(ObjectModelClassifier , ObjectModelPackage) + */ + entity(n("topia.stereotypes.entity"), ObjectModelPackage.class, ObjectModelClassifier.class), + /** + * Stéréotype pour les attributs étant des clés primaires. + * + * @see #hasPrimaryKeyStereotype(ObjectModelAttribute) + * @deprecated since 3.0, use nowhere in ToPIA + */ + primaryKey(n("topia.stereotypes.primaryKey"), ObjectModelAttribute.class); + + private final Set<Class<?>> targets; + private final String i18nDocumentationKey; + + Store(String i18nDocumentationKey, Class<?>... targets) { + this.targets = ImmutableSet.copyOf(targets); + this.i18nDocumentationKey = i18nDocumentationKey; + } + + @Override + public String getName() { + return name(); + } + + @Override + public Set<Class<?>> getTargets() { + return targets; + } + + @Override + public String getI18nDocumentationKey() { + return i18nDocumentationKey; + } + + @Override + public boolean isDeprecated() { + return false; + } + + } + + public TopiaCoreStereoTypes() { + super((StereotypeMetadata[]) Store.values()); + } + + /** + * Check if the given classifier has the {@link Store#entity} stereotype. + * + * @param aPackage FIXME + * @param classifier classifier to test + * @return {@code true} if stereotype was found, {@code false otherwise} + * @see Store#entity + * + * @since 2.5 + */ + public static boolean hasEntityStereotype(ObjectModelClassifier classifier, ObjectModelPackage aPackage) { + boolean hasStereotype = StereotypeUtil.findDirectStereotype(Store.entity, classifier); + if (!hasStereotype && aPackage!=null) { + hasStereotype = StereotypeUtil.findDirectStereotype(Store.entity, aPackage); + } + return hasStereotype; + } + + /** + * Check if the given attribute has the {@link Store#primaryKey} stereotype. + * + * @param attribute attribute to test + * @return {@code true} if stereotype was found, {@code false otherwise} + * @see Store#primaryKey + * @since 2.5 + * @deprecated since 3.0, not used in ToPIA + */ + @Deprecated + public static boolean hasPrimaryKeyStereotype(ObjectModelAttribute attribute) { + return StereotypeUtil.findDirectStereotype(Store.primaryKey, attribute); + } +} diff --git a/topia-templates/src/main/java/org/nuiton/topia/templates/TopiaCoreTagValues.java b/topia-templates/src/main/java/org/nuiton/topia/templates/TopiaCoreTagValues.java new file mode 100644 index 0000000..fbb705f --- /dev/null +++ b/topia-templates/src/main/java/org/nuiton/topia/templates/TopiaCoreTagValues.java @@ -0,0 +1,349 @@ +package org.nuiton.topia.templates; + +/* + * #%L + * ToPIA :: Templates + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2004 - 2014 CodeLutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/lgpl-3.0.html>. + * #L% + */ + +import com.google.common.collect.ImmutableSet; +import org.nuiton.eugene.models.extension.tagvalue.TagValueMetadata; +import org.nuiton.eugene.models.extension.tagvalue.TagValueUtil; +import org.nuiton.eugene.models.extension.tagvalue.matcher.EqualsTagValueNameMatcher; +import org.nuiton.eugene.models.extension.tagvalue.provider.DefaultTagValueMetadatasProvider; +import org.nuiton.eugene.models.object.ObjectModel; +import org.nuiton.eugene.models.object.ObjectModelAttribute; +import org.nuiton.eugene.models.object.ObjectModelClass; +import org.nuiton.eugene.models.object.ObjectModelClassifier; +import org.nuiton.eugene.models.object.ObjectModelPackage; +import org.nuiton.topia.persistence.TopiaDaoSupplier; +import org.nuiton.topia.persistence.TopiaEntity; +import org.nuiton.topia.persistence.TopiaEntityContextable; + +import java.util.Set; + +import static org.nuiton.i18n.I18n.n; + +/** + * All extra tag values usable in topia generators. + * + * @author Tony Chemit - chemit@codelutin.com + * @plexus.component role="org.nuiton.eugene.models.extension.tagvalue.provider.TagValueMetadatasProvider" role-hint="topia-core" + * @since 2.5 + */ +public class TopiaCoreTagValues extends DefaultTagValueMetadatasProvider { + + /** + * Static singleton instance used to read defaultValue + */ + protected static final TopiaCoreTagValues INSTANCE = new TopiaCoreTagValues(); + + public enum Store implements TagValueMetadata { + + /** + * Tag pour que les entités etendent {@link TopiaEntityContextable} et + * se fasse injecter le {@link TopiaDaoSupplier} par rapport aux autres + * entités qui ne l'ont pas. + * + * @since 2.5.3 + */ + contextable(n("topia.core.tagValue.contextable"), boolean.class, "false", ObjectModelPackage.class, ObjectModelClassifier.class), + + /** + * Tag pour ajouter une annotation à un champ. + * + * @see #getAnnotationTagValue(ObjectModelAttribute) + * @since 2.5 + */ + annotation(n("topia.core.tagValue.annotation"), String.class, null, ObjectModelAttribute.class), + + /** + * Tag to skip toString() methods generation on entities. + * + * @see #getNotGenerateToStringTagValue(ObjectModelClassifier, ObjectModelPackage, ObjectModel) + * @since 2.5 + */ + notGenerateToString(n("topia.core.tagValue.notGenerateToString"), boolean.class, "true", ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class), + + /** + * Tag pour specfier si on doit générer la methode getOperator dans les daohelpers. + * + * @see #getGenerateOperatorForDAOHelperTagValue(ObjectModel) + * @since 2.5 + */ + generateOperatorForDAOHelper(n("topia.core.tagValue.generateOperatorForDAOHelper"), boolean.class, "false", ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class), + + /** + * To specify the abstract dao to use. + * + * If none given, will use the {@code org.nuiton.topia.persistence.TopiaDAOImpl}. + * + * Other value possible is {@code org.nuiton.topia.persistence.TopiaDAOLegacy} + * + * @see #getDaoImplementationTagValue(ObjectModel) + * @since 2.5 + */ + daoImplementation(n("topia.core.tagValue.daoImplementation"), String.class, null, ObjectModel.class), + + /** + * Tag to specify a super class to use instead of + * {@link org.nuiton.topia.persistence.internal.AbstractTopiaPersistenceContext}. + * + * <strong>Note:</strong> the class must implements + * {@link org.nuiton.topia.persistence.internal.AbstractTopiaPersistenceContext}. + * + * @see org.nuiton.topia.persistence.internal.AbstractTopiaPersistenceContext + * @see #getPersistenceContextSuperClassTagValue(ObjectModel) + * @since 3.0 + */ + persistenceContextSuperClass(n("topia.core.tagValue.persistenceContextSuperClass"), String.class, null, ObjectModel.class), + + /** + * Tag to specify a super class to use instead of + * {@link org.nuiton.topia.persistence.internal.AbstractTopiaApplicationContext}. + * + * <strong>Note:</strong> the class must implement + * {@link org.nuiton.topia.persistence.internal.AbstractTopiaApplicationContext}. + * + * @see org.nuiton.topia.persistence.internal.AbstractTopiaApplicationContext + * @see #getApplicationContextSuperClassTagValue(ObjectModel) + * @since 3.0 + */ + applicationContextSuperClass(n("topia.core.tagValue.applicationContextSuperClass"), String.class, null, ObjectModel.class), + + /** + * Tag to specify a super class to use instead of {@link org.nuiton.topia.persistence.internal.AbstractTopiaDao}. + * + * <strong>Note:</strong> the class must implements {@link org.nuiton.topia.persistence.TopiaDao}. + * + * @see org.nuiton.topia.persistence.internal.AbstractTopiaDao + * @see #getDaoSuperClassTagValue(ObjectModelClassifier, ObjectModelPackage, ObjectModel) + * @since 3.0 + */ + daoSuperClass(n("topia.core.tagValue.daoSuperClass"), String.class, null, ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class), + + /** + * Tag to specify a super class to use instead of {@link org.nuiton.topia.persistence.internal.AbstractTopiaEntity}. + * + * <strong>Note:</strong> the class must implements {@link TopiaEntity}. + * + * @see TopiaEntity + * @see #getEntitySuperClassTagValue(ObjectModelClassifier, ObjectModelPackage, ObjectModel) + * @since 3.0 + */ + entitySuperClass(n("topia.core.tagValue.entitySuperClass"), String.class, null, ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class), + + /** + * Tag to specify if PropertyChangeListener support should be generated + * + * @see #isGeneratePropertyChangeSupport(ObjectModelClass, ObjectModel) + * @since 3.0 + */ + generatePropertyChangeSupport(n("topia.core.tagValue.generatePropertyChangeSupport"), boolean.class, "false", ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class); + + private final Set<Class<?>> targets; + private final Class<?> type; + private final String i18nDocumentationKey; + private final String defaultValue; + + Store(String i18nDocumentationKey, Class<?> type, String defaultValue, Class<?>... targets) { + this.targets = ImmutableSet.copyOf(targets); + this.type = type; + this.i18nDocumentationKey = i18nDocumentationKey; + this.defaultValue = defaultValue; + } + + @Override + public String getName() { + return name(); + } + + @Override + public Set<Class<?>> getTargets() { + return targets; + } + + @Override + public Class<?> getType() { + return type; + } + + @Override + public Class<EqualsTagValueNameMatcher> getMatcherClass() { + return EqualsTagValueNameMatcher.class; + } + + @Override + public String getI18nDocumentationKey() { + return i18nDocumentationKey; + } + + @Override + public String getDefaultValue() { + return defaultValue; + } + + @Override + public boolean isDeprecated() { + return false; + } + + } + + public TopiaCoreTagValues() { + super((TagValueMetadata[]) Store.values()); + } + + /** + * Obtain the value of the {@link Store#annotation} tag value on the given attribute. + * + * @param attribute attribute to seek + * @return the none empty value of the found tag value or {@code null} if not found nor empty. + * @see Store#annotation + * @since 2.5 + */ + public String getAnnotationTagValue(ObjectModelAttribute attribute) { + return TagValueUtil.findTagValue(Store.annotation, attribute); + } + + /** + * Obtain the value of the {@link Store#contextable} tag value on the given classifier or model. + * + * @param classifier classifier to seek + * @param aPackage FIXME + * @param model model to seek + * @return the boolean value of the found tag value or {@code false} if not found nor empty. + * @see Store#contextable + * @since 2.5 + */ + public boolean getContextableTagValue(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { + return TagValueUtil.findBooleanTagValue(Store.contextable, classifier, aPackage, model); + } + + /** + * Obtain the value of the {@link Store#notGenerateToString} tag value on the given class. + * + * @param clazz class to seek + * @param aPackage FIXME + * @param model model to seek + * @return the none empty value of the found tag value or {@code null} if not found nor empty. + * @see Store#notGenerateToString + * @since 2.5 + */ + public boolean getNotGenerateToStringTagValue(ObjectModelClassifier clazz, ObjectModelPackage aPackage, ObjectModel model) { + return TagValueUtil.findBooleanTagValue(Store.notGenerateToString, clazz, aPackage, model); + } + + /** + * Obtains the value of the {@link Store#daoImplementation} tag value on the given 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 Store#daoImplementation + * @since 2.5 + */ + public String getDaoImplementationTagValue(ObjectModel model) { + return TagValueUtil.findTagValue(Store.daoImplementation, model); + } + + /** + * Obtains the value of the {@link Store#persistenceContextSuperClass} 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 Store#persistenceContextSuperClass + * @since 3.0 + */ + public String getPersistenceContextSuperClassTagValue(ObjectModel model) { + return TagValueUtil.findTagValue(Store.persistenceContextSuperClass, model); + } + + /** + * Obtains the value of the {@link Store#applicationContextSuperClass} 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 Store#applicationContextSuperClass + * @since 3.0 + */ + public String getApplicationContextSuperClassTagValue(ObjectModel model) { + return TagValueUtil.findTagValue(Store.applicationContextSuperClass, model); + } + + /** + * Obtains the value of the {@link Store#daoSuperClass} tag value on the given classifier or on the model. + * + * @param model model to seek + * @param aPackage FIXME + * @param classifier FIXME + * @return the none empty value of the found tag value or {@code null} if not found nor empty. + * @see Store#daoSuperClass + * @since 3.0 + */ + public String getDaoSuperClassTagValue(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { + return TagValueUtil. findTagValue(Store.daoSuperClass, classifier, aPackage, model); + } + + /** + * Obtains the value of the {@link Store#entitySuperClass} tag value on the given classifier or on the model. + * + * @param model model to seek + * @param aPackage FIXME + * @param classifier FIXME + * @return the none empty value of the found tag value or {@code null} if not found nor empty. + * @see Store#entitySuperClass + * @since 3.0 + */ + public String getEntitySuperClassTagValue(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { + return TagValueUtil.findTagValue(Store.entitySuperClass, classifier, aPackage, model); + } + + /** + * Cherche si le tagvalue {@link Store#generateOperatorForDAOHelper} a été activé dans le model. + * + * @param model le modele utilisé + * @return {@code true} si le tag value trouvé dans le modèle, {@code false} + * sinon. + * @see Store#generateOperatorForDAOHelper + * @since 2.5 + */ + public boolean getGenerateOperatorForDAOHelperTagValue(ObjectModel model) { + return TagValueUtil. findBooleanTagValue(Store.generateOperatorForDAOHelper, model); + } + + public boolean isGeneratePropertyChangeSupport(ObjectModelClass clazz, ObjectModel model) { + ObjectModelPackage modelPackage = model.getPackage(clazz); + return TagValueUtil.findBooleanTagValue(Store.generatePropertyChangeSupport, clazz, modelPackage, model); + } + + public String getDeprecatedModelTagValueMessage(ObjectModel model, + String deprecatedTagValue, + String newTagValue, + String value) { + String tagValuePrefix = "model.tagValue."; + + String deprecatedTagName = tagValuePrefix + deprecatedTagValue + "=" + value; + String tagName = tagValuePrefix + newTagValue + "=" + value; + return "\n---------\nYou are using a deprecated tagValue (" + deprecatedTagName + "), replace it by\n" + tagName + "\n---------\n"; + + } + +} diff --git a/topia-templates/src/main/java/org/nuiton/topia/templates/TopiaGeneratorUtil.java b/topia-templates/src/main/java/org/nuiton/topia/templates/TopiaGeneratorUtil.java index 76b16df..8593dfd 100644 --- a/topia-templates/src/main/java/org/nuiton/topia/templates/TopiaGeneratorUtil.java +++ b/topia-templates/src/main/java/org/nuiton/topia/templates/TopiaGeneratorUtil.java @@ -32,7 +32,7 @@ import org.apache.commons.lang3.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.eugene.AbstractGenerator; -import org.nuiton.eugene.EugeneStereoTypes; +import org.nuiton.eugene.EugeneCoreStereotypes; import org.nuiton.eugene.GeneratorUtil; import org.nuiton.eugene.java.JavaGeneratorUtil; import org.nuiton.eugene.java.ObjectModelTransformerToJava; @@ -84,11 +84,8 @@ public class TopiaGeneratorUtil extends JavaGeneratorUtil { * Static singleton instance used to read defaultValue * TODO AThimel 19/06/14 Remove this when remove deprecated methods using it */ - protected final static TopiaTagValues TOPIA_TAG_VALUES = new TopiaTagValues(); - - static { - TOPIA_TAG_VALUES.init(); - } + protected final static TopiaCoreTagValues TOPIA_TAG_VALUES = new TopiaCoreTagValues(); + protected final static TopiaHibernateTagValues TOPIA_HIBERNATE_TAG_VALUES = new TopiaHibernateTagValues(); /** * dependency to add extra operations for entity dao. @@ -247,7 +244,7 @@ public class TopiaGeneratorUtil extends JavaGeneratorUtil { * @since 2.5 */ public static String getPersistenceType(ObjectModelClassifier classifier) { - String tag = TOPIA_TAG_VALUES.getPersistenceTypeTagValue(classifier); + String tag = TOPIA_HIBERNATE_TAG_VALUES.getPersistenceTypeTagValue(classifier); if (tag == null) { tag = PERSISTENCE_TYPE_DEFAULT; } @@ -283,7 +280,7 @@ public class TopiaGeneratorUtil extends JavaGeneratorUtil { if (element == null) { return null; } - String value = TOPIA_TAG_VALUES.getDbNameTagValue(element); + String value = TOPIA_HIBERNATE_TAG_VALUES.getDbNameTagValue(element); if (value != null) { return value; } @@ -302,9 +299,9 @@ public class TopiaGeneratorUtil extends JavaGeneratorUtil { // use {@link LinkedHashSet} to keep order and prevent duplicate natural ids found Set<ObjectModelAttribute> results = - new LinkedHashSet<ObjectModelAttribute>(); + new LinkedHashSet<>(); for (ObjectModelAttribute attr : clazz.getAttributes()) { - if (TOPIA_TAG_VALUES.getNaturalIdTagValue(attr)) { + if (TOPIA_HIBERNATE_TAG_VALUES.getNaturalIdTagValue(attr)) { results.add(attr); } } @@ -330,7 +327,7 @@ public class TopiaGeneratorUtil extends JavaGeneratorUtil { // use {@link LinkedHashSet} to keep order and prevent duplicate not null found Set<ObjectModelAttribute> results = - new LinkedHashSet<ObjectModelAttribute>(); + new LinkedHashSet<>(); for (ObjectModelAttribute attr : clazz.getAttributes()) { if (isAttributeNotNull(attr)) { results.add(attr); @@ -362,10 +359,10 @@ public class TopiaGeneratorUtil extends JavaGeneratorUtil { * @since 2.6.9 */ public static boolean isAttributeNotNull(ObjectModelAttribute attribute) { - Boolean value = TOPIA_TAG_VALUES.getNotNullTagValue(attribute); + Boolean value = TOPIA_HIBERNATE_TAG_VALUES.getNotNullTagValue(attribute); if (value == null) { // valeur null, donc pas positionnee - return TOPIA_TAG_VALUES.getNaturalIdTagValue(attribute); + return TOPIA_HIBERNATE_TAG_VALUES.getNaturalIdTagValue(attribute); } return value; } @@ -398,15 +395,15 @@ public class TopiaGeneratorUtil extends JavaGeneratorUtil { return type; } - private static final Set<String> numberTypes = new HashSet<String>(); + private static final Set<String> numberTypes = new HashSet<>(); - private static final Set<String> textTypes = new HashSet<String>(); + private static final Set<String> textTypes = new HashSet<>(); - private static final Set<String> booleanTypes = new HashSet<String>(); + private static final Set<String> booleanTypes = new HashSet<>(); - private static final Set<String> primitiveTypes = new HashSet<String>(); + private static final Set<String> primitiveTypes = new HashSet<>(); - private static final Map<String, String> primitiveTypeToClass = new HashMap<String, String>(); + private static final Map<String, String> primitiveTypeToClass = new HashMap<>(); private static final String VOID_TYPE = "void"; @@ -556,7 +553,7 @@ public class TopiaGeneratorUtil extends JavaGeneratorUtil { ObjectModelAttribute attr) { if (JavaGeneratorUtil.isOrdered(attr)) { return "list"; - } else if (EugeneStereoTypes.hasUniqueStereotype(attr)) { + } else if (EugeneCoreStereotypes.hasUniqueStereotype(attr)) { return "set"; } //attr.isOrdered() - On génère le ordered en bag @@ -573,7 +570,7 @@ public class TopiaGeneratorUtil extends JavaGeneratorUtil { */ public static List<ObjectModelClass> getEntityClasses(ObjectModel model, boolean sort) { - return getClassesByStereotype(TopiaStereoTypes.STEREOTYPE_ENTITY, model, sort); + return getClassesByStereotype(TopiaCoreStereoTypes.Store.entity.getName(), model, sort); } /** @@ -587,7 +584,7 @@ public class TopiaGeneratorUtil extends JavaGeneratorUtil { */ public static List<ObjectModelClass> getClassesByStereotype( String stereotype, ObjectModel model, boolean sort) { - List<ObjectModelClass> classes = new ArrayList<ObjectModelClass>(); + List<ObjectModelClass> classes = new ArrayList<>(); for (ObjectModelClass clazz : model.getClasses()) { if (clazz.hasStereotype(stereotype)) { classes.add(clazz); @@ -621,7 +618,7 @@ public class TopiaGeneratorUtil extends JavaGeneratorUtil { */ public static List<String> getImports(ObjectModelClass aClass, String... incomingFqns) { - Set<String> tmp = new HashSet<String>(); + Set<String> tmp = new HashSet<>(); tmp.addAll(Arrays.asList(incomingFqns)); getImports(aClass, tmp); List<String> result = cleanImports(aClass.getPackageName(), tmp); @@ -729,7 +726,7 @@ public class TopiaGeneratorUtil extends JavaGeneratorUtil { fqns.removeAll(primitiveTypes); fqns.remove(VOID_TYPE); int packageLength = packageName.length(); - List<String> genericType = new ArrayList<String>(); + List<String> genericType = new ArrayList<>(); for (Iterator<String> it = fqns.iterator(); it.hasNext(); ) { String fqn = it.next(); int lastIndex = fqn.lastIndexOf("."); @@ -746,7 +743,7 @@ public class TopiaGeneratorUtil extends JavaGeneratorUtil { } fqns.addAll(genericType); - ArrayList<String> result = new ArrayList<String>(fqns); + ArrayList<String> result = new ArrayList<>(fqns); Collections.sort(result); return result; } @@ -759,8 +756,8 @@ public class TopiaGeneratorUtil extends JavaGeneratorUtil { allEntities = getEntityClasses(model, true); - allEntitiesByFQN = new TreeMap<String, ObjectModelClass>(); - usages = new LinkedHashMap<ObjectModelClass, Set<ObjectModelClass>>(); + allEntitiesByFQN = new TreeMap<>(); + usages = new LinkedHashMap<>(); // prepare usages map and fill allEntitiesByFQN map for (ObjectModelClass klass : allEntities) { @@ -846,7 +843,7 @@ public class TopiaGeneratorUtil extends JavaGeneratorUtil { * @param model model containing the attribute * @return {@code true} if type of attribute is an entity, * {@code false} otherwise - * @see TopiaStereoTypes#STEREOTYPE_ENTITY + * @see TopiaCoreStereoTypes.Store#entity * @since 2.7 */ public static boolean isEntity(ObjectModelAttribute attribute, @@ -862,28 +859,28 @@ public class TopiaGeneratorUtil extends JavaGeneratorUtil { /** * Check if the given classifier has the - * {@link TopiaStereoTypes#STEREOTYPE_ENTITY} and is not an enumeration + * {@link TopiaCoreStereoTypes.Store#entity} and is not an enumeration * * @param classifier classifier to test * @return {@code true} if stereotype was found and classifier is not * enumeration, {@code false} otherwise - * @see TopiaStereoTypes#STEREOTYPE_ENTITY + * @see TopiaCoreStereoTypes.Store#entity * @since 2.5 */ public static boolean isEntity(ObjectModelClassifier classifier) { - return TopiaStereoTypes.hasEntityStereotype(classifier, null) && !classifier.isEnum(); + return TopiaCoreStereoTypes.hasEntityStereotype(classifier, null) && !classifier.isEnum(); } /** - * Obtain the value of the {@link TopiaTagValues#TAG_INHERITANCE_STRATEGY} tag value on the given classifier. + * Obtain the value of the {@link TopiaHibernateTagValues.Store#inheritanceStrategy} 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_INHERITANCE_STRATEGY + * @see TopiaHibernateTagValues.Store#inheritanceStrategy * @since 3.0 */ public static String getInheritanceStrategy(ObjectModelClassifier classifier) { - String value = TOPIA_TAG_VALUES.getInheritanceStrategyTagValue(classifier, null); + String value = TOPIA_HIBERNATE_TAG_VALUES.getInheritanceStrategyTagValue(classifier, null); if (value == null) { value = TopiaGeneratorUtil.DEFAULT_INHERITANCE_STRATEGY; } @@ -909,7 +906,7 @@ public class TopiaGeneratorUtil extends JavaGeneratorUtil { @Deprecated public static <Type extends ObjectModelElement> Collection<Type> getElementsWithStereotype( Collection<Type> elements, String... stereotypes) { - Collection<Type> result = new ArrayList<Type>(); + Collection<Type> result = new ArrayList<>(); for (Type element : elements) { if (hasStereotypes(element, stereotypes)) { result.add(element); @@ -946,7 +943,7 @@ public class TopiaGeneratorUtil extends JavaGeneratorUtil { ObjectModelClass clazz, boolean includeName) { Collection<ObjectModelAttribute> attributeCollection; attributeCollection = getElementsWithStereotype(clazz.getAttributes(), - TopiaStereoTypes.STEREOTYPE_PRIMARY_KEY); + TopiaCoreStereoTypes.Store.primaryKey.getName()); List<String> attributes = Lists.newArrayList(); for (ObjectModelAttribute attr : attributeCollection) { String attribute = attr.getType(); @@ -985,7 +982,7 @@ public class TopiaGeneratorUtil extends JavaGeneratorUtil { @Deprecated public static List<String> getImports(ObjectModelInterface anInterface, String... incomingFqns) { - Set<String> tmp = new HashSet<String>(); + Set<String> tmp = new HashSet<>(); tmp.addAll(Arrays.asList(incomingFqns)); getImports(anInterface, tmp); List<String> result = cleanImports(anInterface.getPackageName(), tmp); @@ -1027,13 +1024,13 @@ public class TopiaGeneratorUtil extends JavaGeneratorUtil { /** * Obtain the class to use as abstract dao. * - * It will look after a tag value {@link TopiaTagValues#TAG_DAO_IMPLEMENTATION} in model + * It will look after a tag value {@link TopiaCoreTagValues.Store#daoSuperClass} in model * 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 TopiaTagValues#getDaoSuperClassTagValue(ObjectModelClassifier, ObjectModelPackage, ObjectModel)} + * @deprecated since 3.0-alpha-8, replaced by {@link TopiaCoreTagValues#getDaoSuperClassTagValue(ObjectModelClassifier, ObjectModelPackage, ObjectModel)} */ @Deprecated public static Class<?> getDAOImplementation(ObjectModel model) { diff --git a/topia-templates/src/main/java/org/nuiton/topia/templates/TopiaHibernateTagValues.java b/topia-templates/src/main/java/org/nuiton/topia/templates/TopiaHibernateTagValues.java new file mode 100644 index 0000000..d0bad47 --- /dev/null +++ b/topia-templates/src/main/java/org/nuiton/topia/templates/TopiaHibernateTagValues.java @@ -0,0 +1,737 @@ +package org.nuiton.topia.templates; + +/* + * #%L + * ToPIA :: Templates + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2004 - 2014 CodeLutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/lgpl-3.0.html>. + * #L% + */ + +import com.google.common.collect.ImmutableSet; +import com.google.common.collect.Maps; +import org.nuiton.eugene.models.extension.tagvalue.TagValueMetadata; +import org.nuiton.eugene.models.extension.tagvalue.TagValueUtil; +import org.nuiton.eugene.models.extension.tagvalue.matcher.EqualsTagValueNameMatcher; +import org.nuiton.eugene.models.extension.tagvalue.matcher.TagValueDefinitionMatcher; +import org.nuiton.eugene.models.extension.tagvalue.provider.DefaultTagValueMetadatasProvider; +import org.nuiton.eugene.models.object.ObjectModel; +import org.nuiton.eugene.models.object.ObjectModelAttribute; +import org.nuiton.eugene.models.object.ObjectModelClass; +import org.nuiton.eugene.models.object.ObjectModelClassifier; +import org.nuiton.eugene.models.object.ObjectModelElement; +import org.nuiton.eugene.models.object.ObjectModelPackage; +import org.nuiton.eugene.models.tagvalue.TagValues; + +import java.sql.Blob; +import java.util.Map; +import java.util.Set; + +import static org.nuiton.eugene.models.tagvalue.TagValues.findTagValue; +import static org.nuiton.i18n.I18n.n; +import static org.nuiton.topia.templates.TopiaTagValues.TAG_ATTRIBUTE_TYPE; +import static org.nuiton.topia.templates.TopiaTagValues.TAG_HIBERNATE_ATTRIBUTE_TYPE; + +/** + * All extra tag values usable in topia generators. + * + * @author Tony Chemit - chemit@codelutin.com + * @plexus.component role="org.nuiton.eugene.models.extension.tagvalue.provider.TagValueMetadatasProvider" role-hint="topia-hibernate" + * @since 2.5 + */ +public class TopiaHibernateTagValues extends DefaultTagValueMetadatasProvider { + + /** + * Static singleton instance used to read defaultValue + */ + protected static final TopiaHibernateTagValues INSTANCE = new TopiaHibernateTagValues(); + + public enum Store implements TagValueMetadata { + + /** + * Tag pour le type de persistence. + * + * @see TopiaTemplateHelper#getPersistenceType(ObjectModelClassifier) + * @see #getPersistenceTypeTagValue(ObjectModelClassifier) + * @since 2.5 + */ + persistenceType(n("topia.core.tagValue.persistenceType"), String.class, null, ObjectModelClassifier.class), + + /** + * Tag pour le nom du champ / entité en BD. + * + * @see #getDbNameTagValue(ObjectModelElement) + * @see TopiaTemplateHelper#getDbName(ObjectModelElement) + * @see TopiaTemplateHelper#getReverseDbName(ObjectModelAttribute) + */ + dbName(n("topia.core.tagValue.dbName"), String.class, null, ObjectModelElement.class), + + /** + * Tag to specify the reverse db name of an attribute in database. + * + * @see TopiaTemplateHelper#getReverseDbName(ObjectModelAttribute) + */ + reverseDbName(n("topia.core.tagValue.reverseDbName"), String.class, null, ObjectModelAttribute.class), + + /** + * Tag to specify the reverse db name of an attribute in database. + * + * @see #getManytoManyTableNameTagValue(ObjectModelAttribute) + * @see TopiaTemplateHelper#getManyToManyTableName(ObjectModelAttribute) + * @since 2.9.2 + */ + manyToManyTableName(n("topia.core.tagValue.manyToManyTableName"), String.class, null, ObjectModelAttribute.class), + + /** + * Tag pour le nom du schema en BD. + * + * @see #getDbSchemaNameTagValue(ObjectModelClassifier, ObjectModelPackage, ObjectModel) + * @since 2.5 + */ + dbSchema(n("topia.core.tagValue.dbSchema"), String.class, null, ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class, ObjectModelAttribute.class), + + /** + * Tag pour la taille du champ en BD. + * + * @see #getLengthTagValue(ObjectModelAttribute) + * @since 2.5 + */ + length(n("topia.core.tagValue.length"), String.class, null, ObjectModelAttribute.class), + + /** + * Tag pour specfier le type d'acces a un champ. + * + * @see #getAccessTagValue(ObjectModelAttribute) + * @since 2.5 + */ + access(n("topia.core.tagValue.access"), String.class, null, ObjectModelAttribute.class), + + /** + * Tag pour ajouter un attribut dans une clef métier. + * + * @see #getNaturalIdTagValue(ObjectModelAttribute) + * @since 2.5 + */ + naturalId(n("topia.core.tagValue.naturalId"), String.class, null, ObjectModelAttribute.class), + + /** + * Tag pour specifier si une clef metier est mutable. + * + * @see #getNaturalIdMutableTagValue(ObjectModelClassifier) + * @since 2.5 + */ + naturalIdMutable(n("topia.core.tagValue.naturalIdMutable"), boolean.class, null, ObjectModelClassifier.class), + + /** + * Tag pour permettre de choisir qui contrôle la relation N-N + * bidirectionnelle. A utiliser sur les deux extremités de l'association. + * Mettre inverse=false sur le rôle fils et inverse=true sur le rôle père. + * Par défaut le inverse=true est placé sur le premier rôle trouvé dans + * l'ordre alphabétique. + * + * @see #getInverseTagValue(ObjectModelAttribute) + * @since 2.5 + */ + inverse(n("topia.core.tagValue.inverse"), boolean.class, null, ObjectModelAttribute.class), + + /** + * Tag pour spécifier la caractère lazy d'une association multiple. + * + * @see #getLazyTagValue(ObjectModelAttribute) + * @since 2.5 + */ + lazy(n("topia.core.tagValue.lazy"), boolean.class, null, ObjectModelAttribute.class), + + /** + * Tag pour spécifier la caractère fetch d'une association multiple. + * + * @see #getFetchTagValue(ObjectModelAttribute) + * @since 2.5 + */ + fetch(n("topia.core.tagValue.fetch"), String.class, null, ObjectModelAttribute.class), + + /** + * Tag pour spécifier la caractère order-by d'une association multiple. + * + * @see #getOrderByTagValue(ObjectModelAttribute) + * @since 2.5 + */ + orderBy(n("topia.core.tagValue.orderBy"), String.class, null, ObjectModelAttribute.class), + + /** + * Tag pour spécifier la caractère not-null d'un attribut. + * + * @see #getNotNullTagValue(ObjectModelAttribute) + * @since 2.5 + */ + notNull(n("topia.core.tagValue.notNull"), String.class, null, ObjectModelAttribute.class), + + /** + * Tag à placer sur un l'attribut d'une entité. Cet attribut est de type + * énumération : l'ajout de la tagValue indique qu'il faut utiliser le + * {@code name} de l'énumération et non l'ordinal pour stocker la valeur en + * base + * + * @see #hasUseEnumerationNameTagValue(ObjectModelAttribute, ObjectModelClassifier, ObjectModelPackage, ObjectModel) + * @since 3.0 + */ + useEnumerationName(n("topia.core.tagValue.useEnumerationName"), boolean.class, "true", ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class, ObjectModelAttribute.class), + + /** + * Tag pour configurer l'interface du proxy sur autre chose que l'implementation par defaut. + * + * Par defaut : + * null → generere le proxy sur l'interface de l'implementation + * Autre valeur : + * "none" → laisse la configuration par defaut d'hibernate + * + * @see #getPersistenceTypeTagValue(ObjectModelClassifier) + * @since 2.5 + */ + hibernateProxyInterface(n("topia.core.tagValue.hibernateProxyInterface"), String.class, null, ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class), + + /** + * Tag pour configurer la stategie d'heritage choisie. + * + * Par defaut : union-subclass : Table per class strategy + * Autre valeur : + * "subclass" → Single table per class hierarchy strategy + * "joined-subclass" → Joined subclass strategy + * + * @see #getPersistenceTypeTagValue(ObjectModelClassifier) + * @since 3.0 + */ + inheritanceStrategy(n("topia.core.tagValue.inheritanceStrategy"), String.class, "union-subclass", ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class), + + /** + * Tag pour specifier de trier les attributs par nom lors de la generation. + * + * @see #getSortAttributeTagValue(ObjectModelClassifier, ObjectModelPackage, ObjectModel) + * @since 2.5 + */ + sortAttribute(n("topia.core.tagValue.sortAttribute"), boolean.class, "false", ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class), + + /** + * Tag pour spécifier le type d'une propriété dans le mapping hibernate. + * + * @see #getTypeTagValue(ObjectModelAttribute) + * @since 2.5 + * @deprecated since 3.0, use now {@link #hibernateAttributeType} which + * permits to deal the same thing but at also model and classifier scope. + */ + @Deprecated + type(n("topia.core.tagValue.type"), String.class, null, ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class), + + /** + * Tag pour spécifier le type sql d'une propriété dans le mapping hibernate. + * + * @see #getSqlTypeTagValue(ObjectModelAttribute) + * @since 2.5 + */ + sqlType(n("topia.core.tagValue.sqlType"), String.class, null, ObjectModelAttribute.class), + + /** + * Stéréotype pour les attributs avec multiplicité nécessitant la création d'un index. + * + * @see #getIndexForeignKeysTagValue(ObjectModelAttribute, ObjectModelPackage, ObjectModel) + * @since 2.6.5 + */ + indexForeignKeys(n("topia.core.tagValue.indexForeignKeys"), boolean.class, "true", ObjectModel.class, ObjectModelPackage.class, ObjectModelAttribute.class), + + /** + * Tag to generate deterministic foreign key names in hibernate mapping files. + * + * @see #isGenerateForeignKeyNames(ObjectModelClassifier, ObjectModel) + * @since 3.0.1 + */ + generateForeignKeyNames(n("topia.core.tagValue.generateForeignKeyNames"), boolean.class, "false", ObjectModel.class, ObjectModelClassifier.class), + + /** + * Tag to change the type of an attribute in a hibernate mapping. + * + * This is a special tagValue that is dynamic. + * + * For example to change the type {@code String} into hibernate mapping type {@code text}, add this: + * <pre> + * model.tagValue.hibernateAttributeType.String=text + * </pre> + * + * Before 3.0, you could do the same thing using: + * <pre> + * model.tagValue.String=text + * </pre> + * + * The new way permits us to validate the usage of the tagValue, old way can't. + * + * @see #getHibernateAttributeType(ObjectModelAttribute, ObjectModelClassifier, ObjectModelPackage, ObjectModel) + * @since 3.0 + */ + hibernateAttributeType(n("topia.core.tagValue.hibernateAttributeType"), String.class, null, org.nuiton.eugene.models.extension.tagvalue.matcher.StartsWithTagNameMatcher.class, ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class, ObjectModelAttribute.class), + + /** + * Tag to change the type of an attribute. + * + * This is a special tagValue that is dynamic. + * + * For example to change the type {@code String} into type {@code java.lang.String}, add this: + * <pre> + * model.tagValue.attributeType.String=java.lang.String + * </pre> + * + * Before 3.0, you could do the same thing using: + * <pre> + * model.tagValue.String=java.lang.String + * </pre> + * + * The new way permits us to validate the usage of the tagValue, old way can't. + * + * @see #getHibernateAttributeType(ObjectModelAttribute, ObjectModelClassifier, ObjectModelPackage, ObjectModel) + * @since 3.0 + */ + attributeType(n("topia.core.tagValue.attributeType"), String.class, null, org.nuiton.eugene.models.extension.tagvalue.matcher.StartsWithTagNameMatcher.class, ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class, ObjectModelAttribute.class); + + private final Set<Class<?>> targets; + private final Class<?> tagValueType; + private final String i18nDocumentationKey; + private final String defaultValue; + private final Class<? extends TagValueDefinitionMatcher> matcher; + + Store(String i18nDocumentationKey, Class<?> tagValueType, String defaultValue, Class<?>... targets) { + this.targets = ImmutableSet.copyOf(targets); + this.tagValueType = tagValueType; + this.i18nDocumentationKey = i18nDocumentationKey; + this.defaultValue = defaultValue; + this.matcher = EqualsTagValueNameMatcher.class; + } + + Store(String i18nDocumentationKey, Class<?> tagValueType, String defaultValue, Class<? extends TagValueDefinitionMatcher> matcher, Class<?>... targets) { + this.targets = ImmutableSet.copyOf(targets); + this.tagValueType = tagValueType; + this.i18nDocumentationKey = i18nDocumentationKey; + this.defaultValue = defaultValue; + this.matcher = matcher; + } + + @Override + public String getName() { + return name(); + } + + @Override + public Set<Class<?>> getTargets() { + return targets; + } + + @Override + public Class<?> getType() { + return tagValueType; + } + + @Override + public Class<? extends TagValueDefinitionMatcher> getMatcherClass() { + return matcher; + } + + @Override + public String getI18nDocumentationKey() { + return i18nDocumentationKey; + } + + @Override + public String getDefaultValue() { + return defaultValue; + } + + @Override + public boolean isDeprecated() { + return false; + } + + } + + public TopiaHibernateTagValues() { + super((TagValueMetadata[]) Store.values()); + } + + /** + * Obtain the value of the {@link Store#persistenceType} 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 Store#persistenceType + * @since 2.5 + */ + public String getPersistenceTypeTagValue(ObjectModelClassifier classifier) { + return TagValueUtil.findTagValue(Store.persistenceType, classifier); + } + + /** + * Obtain the value of the {@link Store#inheritanceStrategy} tag value on the given classifier. + * + * @param classifier classifier to seek + * @param aPackage package to seek + * @return the none empty value of the found tag value or {@code null} if not found nor empty. + * @see Store#inheritanceStrategy + * @since 3.0 + */ + public String getInheritanceStrategyTagValue(ObjectModelClassifier classifier, + ObjectModelPackage aPackage) { + return TagValueUtil.findTagValue(Store.inheritanceStrategy, classifier, aPackage); + } + + /** + * Obtain the value of the {@link Store#dbName} tag value on the given element. + * + * <strong>Note:</strong> We just try a direct search on the element and do not + * walk through his declaring elements if not found (see https://forge.nuiton.org/issues/2342). + * + * @param element element to seek + * @return the none empty value of the found tag value or {@code null} if not found nor empty. + * @see Store#dbName + * @since 2.5 + */ + public String getDbNameTagValue(ObjectModelElement element) { + return TagValueUtil.findDirectTagValue(Store.dbName, null, element); + } + + /** + * Obtain the value of the {@link Store#dbSchema} tag value on the given classifier. + * + * @param classifier classifier to seek + * @param aPackage package to seek + * @param model model to seek + * @return the none empty value of the found tag value or {@code null} if not found nor empty. + * @see Store#dbSchema + * @since 2.5 + */ + public String getDbSchemaNameTagValue(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { + return TagValueUtil.findTagValue(Store.dbSchema, classifier, aPackage, model); + } + + /** + * Obtain the value of the {@link Store#manyToManyTableName} + * tag value on the given attribute. + * + * + * Note that it won't and search on declaring element or anywhere else than on the given element. + * See https://forge.nuiton.org/issues/2342 + * + * @param attribute attribute to seek + * @return the none empty value of the found tag value or {@code null} if not found nor empty. + * @see Store#manyToManyTableName + * @since 2.9.2 + */ + public String getManytoManyTableNameTagValue(ObjectModelAttribute attribute) { + return TagValueUtil.findDirectTagValue(Store.manyToManyTableName); + } + + /** + * Obtain the value of the {@link Store#length} tag value on the given attribute. + * + * @param attribute attribute to seek + * @return the none empty value of the found tag value or {@code null} if not found nor empty. + * @see Store#length + * @since 2.5 + */ + public String getLengthTagValue(ObjectModelAttribute attribute) { + return TagValueUtil.findTagValue(Store.length, attribute); + } + + /** + * Obtain the value of the {@link Store#access} tag value on the given attribute. + * + * @param attribute attribute to seek + * @return the none empty value of the found tag value or {@code null} if not found nor empty. + * @see Store#access + * @since 2.5 + */ + public String getAccessTagValue(ObjectModelAttribute attribute) { + return TagValueUtil.findTagValue(Store.access, attribute); + } + + /** + * Obtain the value of the {@link Store#naturalId} tag value on the given attribute. + * + * @param attribute attribute to seek + * @return the none empty value of the found tag value or {@code null} if not found nor empty. + * @see Store#naturalId + * @since 2.5 + */ + public boolean getNaturalIdTagValue(ObjectModelAttribute attribute) { + return TagValueUtil.findBooleanTagValue(Store.naturalId, attribute); + } + + /** + * Obtain the value of the {@link Store#naturalIdMutable} 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 Store#naturalIdMutable + * @since 2.5 + */ + public boolean getNaturalIdMutableTagValue(ObjectModelClassifier classifier) { + return TagValueUtil.findBooleanTagValue(Store.naturalIdMutable, classifier); + } + + /** + * Obtain the value of the {@link Store#inverse} tag value on the given attribute. + * + * @param attribute attribute to seek + * @return the none empty value of the found tag value or {@code null} if not found nor empty. + * @see Store#inverse + * @since 2.5 + */ + public String getInverseTagValue(ObjectModelAttribute attribute) { + return TagValueUtil.findTagValue(Store.inverse, attribute); + } + + /** + * Obtain the value of the {@link Store#lazy} tag value on the given attribute. + * + * @param attribute attribute to seek + * @return the none empty value of the found tag value or {@code null} if not found nor empty. + * @see Store#lazy + * @since 2.5 + */ + public String getLazyTagValue(ObjectModelAttribute attribute) { + return TagValueUtil.findTagValue(Store.lazy, attribute); + } + + /** + * Obtain the value of the {@link Store#fetch} tag value on the given attribute. + * + * @param attribute attribute to seek + * @return the none empty value of the found tag value or {@code null} if not found nor empty. + * @see Store#fetch + * @since 2.5 + */ + public String getFetchTagValue(ObjectModelAttribute attribute) { + return TagValueUtil.findTagValue(Store.fetch, attribute); + } + + /** + * Obtain the value of the {@link Store#orderBy} tag value on the given attribute. + * + * @param attribute attribute to seek + * @return the none empty value of the found tag value or {@code null} if not found nor empty. + * @see Store#orderBy + * @since 2.5 + */ + public String getOrderByTagValue(ObjectModelAttribute attribute) { + return TagValueUtil.findTagValue(Store.orderBy, attribute); + } + + /** + * Obtain the value of the {@link Store#notNull} tag value on the given attribute. + * + * @param attribute attribute to seek + * @return the none empty value of the found tag value or {@code null} if not found nor empty. + * @see Store#notNull + * @since 2.5 + */ + public Boolean getNotNullTagValue(ObjectModelAttribute attribute) { + return TagValueUtil.findNullableBooleanTagValue(Store.notNull, attribute); + } + + /** + * Obtain the value of the {@link Store#hibernateProxyInterface} tag value on the given classifier. + * + * @param classifier classifier to seek + * @param aPackage FIXME + * @param model model to seek + * @return the none empty value of the found tag value or {@code null} if not found nor empty. + * @see Store#hibernateProxyInterface + * @since 2.5 + */ + public String getProxyInterfaceTagValue(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { + return TagValueUtil.findTagValue(Store.hibernateProxyInterface, classifier, aPackage, model); + } + + /** + * Obtain the value of the {@link Store#sortAttribute} tag value on the given classifier. + * + * @param classifier classifier to seek + * @param aPackage FIXME + * @param model model to seek + * @return the none empty value of the found tag value or {@code null} if not found nor empty. + * @see Store#sortAttribute + * @since 2.5 + */ + public boolean getSortAttributeTagValue(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { + return TagValueUtil.findBooleanTagValue(Store.sortAttribute, classifier, aPackage, model); + } + + /** + * Obtain the value of the {@link Store#generateForeignKeyNames} + * tag value on the given model or classifier and returns {@code true} if the tag value was found and value {@code true}. + * + * It will first look on the model, and then in the given classifier. + * + * @param model model to seek + * @param classifier classifier to seek + * @return {@code true} if tag value was found on classifier or model and his value is {@code true}, otherwise {@code false}. + * @see Store#generateForeignKeyNames + * @since 2.10 + */ + public boolean isGenerateForeignKeyNames(ObjectModelClassifier classifier, ObjectModel model) { + return TagValueUtil.findBooleanTagValue(Store.generateForeignKeyNames, classifier, model); + } + + protected static final Map<String, String> HIBERNATE_ATTRIBUTE_TYPE_DEFAULT_VALUES = Maps.newHashMap(); + + static { + // String + HIBERNATE_ATTRIBUTE_TYPE_DEFAULT_VALUES.put(String.class.getSimpleName(), String.class.getName()); + + // primitive types wrappers + HIBERNATE_ATTRIBUTE_TYPE_DEFAULT_VALUES.put(Boolean.class.getSimpleName(), Boolean.class.getName()); + HIBERNATE_ATTRIBUTE_TYPE_DEFAULT_VALUES.put(Byte.class.getSimpleName(), Byte.class.getName()); + HIBERNATE_ATTRIBUTE_TYPE_DEFAULT_VALUES.put(Character.class.getSimpleName(), Character.class.getName()); + HIBERNATE_ATTRIBUTE_TYPE_DEFAULT_VALUES.put(Short.class.getSimpleName(), Short.class.getName()); + HIBERNATE_ATTRIBUTE_TYPE_DEFAULT_VALUES.put(Integer.class.getSimpleName(), Integer.class.getName()); + HIBERNATE_ATTRIBUTE_TYPE_DEFAULT_VALUES.put(Long.class.getSimpleName(), Long.class.getName()); + HIBERNATE_ATTRIBUTE_TYPE_DEFAULT_VALUES.put(Float.class.getSimpleName(), Float.class.getName()); + HIBERNATE_ATTRIBUTE_TYPE_DEFAULT_VALUES.put(Double.class.getSimpleName(), Double.class.getName()); + + // some particular types + HIBERNATE_ATTRIBUTE_TYPE_DEFAULT_VALUES.put(Blob.class.getSimpleName(), Blob.class.getName().toLowerCase()); + } + + /** + * Obtain the value of the {@link Store#hibernateAttributeType} tag value on the given attribute, classifier or model. + * + * @param attribute attribute to seek + * @param aPackage FIXME + * @param model FIXME + * @param classifier FIXME + * @return the none empty value of the found tag value or {@code null} if not found nor empty. + * @see Store#hibernateAttributeType + * @since 3.0 + */ + public String getHibernateAttributeType(ObjectModelAttribute attribute, ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { + + String value = TagValueUtil.findDirectTagValue(Store.hibernateAttributeType, null, attribute); + if (value == null) { + String tagValueName = TAG_HIBERNATE_ATTRIBUTE_TYPE + "." + attribute.getType(); + String defaultValue = HIBERNATE_ATTRIBUTE_TYPE_DEFAULT_VALUES.get(attribute.getType()); + value = findTagValue(tagValueName, defaultValue, attribute, classifier, aPackage, model); + } + return value; + + } + + /** + * Obtain the value of the {@link Store#attributeType} tag value on the given attribute, classifier or model. + * + * @param attribute attribute to seek + * @param aPackage FIXME + * @param model FIXME + * @param classifier FIXME + * @return the none empty value of the found tag value or {@code null} if not found nor empty. + * @see Store#attributeType + * @since 3.0.1 + */ + public String getAttributeType(ObjectModelAttribute attribute, ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { + + String value = TagValueUtil.findDirectTagValue(Store.attributeType, null, attribute); + if (value == null) { + String tagValueName = TAG_ATTRIBUTE_TYPE + "." + attribute.getType(); + //TODO do not use this deprecated api + value = TagValues.findTagValue(tagValueName, (String) null, attribute, classifier, aPackage, model); + } + return value; + + } + + /** + * Obtain the value of the {@link Store#sqlType} tag value on the given attribute. + * + * @param attribute attribute to seek + * @return the none empty value of the found tag value or {@code null} if not found nor empty. + * @see Store#sqlType + * @since 2.5 + */ + public String getSqlTypeTagValue(ObjectModelAttribute attribute) { + return TagValueUtil.findTagValue(Store.sqlType, attribute); + } + + /** + * Obtains the value of the tag value {@link Store#indexForeignKeys} on the model or on the + * given attribute. + * + * @param attribute attribute to test + * @param model model to test + * @param aPackage FIXME + * @return none empty value of the found tag value or {@code null} if not found nor empty. + * @see Store#indexForeignKeys + * @since 2.6.5 + */ + public boolean getIndexForeignKeysTagValue(ObjectModelAttribute attribute, ObjectModelPackage aPackage, ObjectModel model) { + return TagValueUtil.findBooleanTagValue(Store.indexForeignKeys, attribute, aPackage, model); + } + + //TODO Javadoc + public boolean hasUseEnumerationNameTagValue(ObjectModelAttribute attr, ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { + return TagValueUtil.findBooleanTagValue(Store.useEnumerationName, attr, classifier, aPackage, model); + } + + //--------------------------------------------------------------------------------------------------------------- + //-- DEPRECATED API TO REMOVE --------------------------------------------------------------------------------- + //--------------------------------------------------------------------------------------------------------------- + + /** + * Obtain the value of the {@link Store#type} tag value on the given attribute. + * + * @param attribute attribute to seek + * @return the none empty value of the found tag value or {@code null} if not found nor empty. + * @see Store#type + * @since 2.5 + * @deprecated since 3.0, use now {@link #getHibernateAttributeType(ObjectModelAttribute, ObjectModelClassifier, ObjectModelPackage, ObjectModel)} or {@link #getAttributeType(ObjectModelAttribute, ObjectModelClassifier, ObjectModelPackage, ObjectModel)} + */ + @Deprecated + public String getTypeTagValue(ObjectModelAttribute attribute) { + return TagValueUtil.findTagValue(Store.type, attribute); + } + + public String getDeprecatedAttributeTagValueMessage(ObjectModelClass clazz, + ObjectModelAttribute attr, + String deprecatedTagValue, + String newTagValue, + String value) { + String tagValuePrefix = clazz.getQualifiedName() + ".attribute." + attr.getName() + ".tagValue."; + + String deprecatedTagName = tagValuePrefix + deprecatedTagValue + "=" + value; + String tagName = tagValuePrefix + newTagValue + "=" + value; + return "\n---------\nYou are using a deprecated tagValue (" + deprecatedTagName + "), replace it by\n" + tagName + "\n---------\n"; + + } + + public String getDeprecatedModelTagValueMessage(ObjectModel model, + String deprecatedTagValue, + String newTagValue, + String value) { + String tagValuePrefix = "model.tagValue."; + + String deprecatedTagName = tagValuePrefix + deprecatedTagValue + "=" + value; + String tagName = tagValuePrefix + newTagValue + "=" + value; + return "\n---------\nYou are using a deprecated tagValue (" + deprecatedTagName + "), replace it by\n" + tagName + "\n---------\n"; + + } + +} diff --git a/topia-templates/src/main/java/org/nuiton/topia/templates/TopiaStereoTypes.java b/topia-templates/src/main/java/org/nuiton/topia/templates/TopiaStereoTypes.java index 01af013..706840f 100644 --- a/topia-templates/src/main/java/org/nuiton/topia/templates/TopiaStereoTypes.java +++ b/topia-templates/src/main/java/org/nuiton/topia/templates/TopiaStereoTypes.java @@ -37,6 +37,7 @@ import org.nuiton.eugene.models.stereotype.StereotypeDefinitionProvider; * @plexus.component role="org.nuiton.eugene.models.stereotype.StereotypeDefinitionProvider" role-hint="topia-templates" * @since 2.5 */ +@Deprecated public class TopiaStereoTypes extends StereotypeDefinitionProvider { /** @@ -61,33 +62,33 @@ public class TopiaStereoTypes extends StereotypeDefinitionProvider { public static final String STEREOTYPE_PRIMARY_KEY = "primaryKey"; /** - * Check if the given classifier has the {@link TopiaStereoTypes#STEREOTYPE_ENTITY} stereotype. + * Check if the given classifier has the {@link TopiaCoreStereoTypes.Store#entity} stereotype. * * @param aPackage FIXME * @param classifier classifier to test * @return {@code true} if stereotype was found, {@code false otherwise} - * @see TopiaStereoTypes#STEREOTYPE_ENTITY + * @see TopiaCoreStereoTypes.Store#entity * @since 2.5 */ public static boolean hasEntityStereotype(ObjectModelClassifier classifier, ObjectModelPackage aPackage) { - boolean hasStereotype = classifier.hasStereotype(TopiaStereoTypes.STEREOTYPE_ENTITY); + boolean hasStereotype = classifier.hasStereotype(TopiaCoreStereoTypes.Store.entity.getName()); if (!hasStereotype && aPackage!=null) { - hasStereotype = aPackage.hasStereotype(TopiaStereoTypes.STEREOTYPE_ENTITY); + hasStereotype = aPackage.hasStereotype(TopiaCoreStereoTypes.Store.entity.getName()); } return hasStereotype; } /** - * Check if the given attribute has the {@link TopiaStereoTypes#STEREOTYPE_PRIMARY_KEY} stereotype. + * Check if the given attribute has the {@link TopiaCoreStereoTypes.Store#primaryKey} stereotype. * * @param attribute attribute to test * @return {@code true} if stereotype was found, {@code false otherwise} - * @see TopiaStereoTypes#STEREOTYPE_PRIMARY_KEY + * @see TopiaCoreStereoTypes.Store#primaryKey * @since 2.5 * @deprecated since 3.0, not used in ToPIA */ @Deprecated public static boolean hasPrimaryKeyStereotype(ObjectModelAttribute attribute) { - return attribute.hasStereotype(TopiaStereoTypes.STEREOTYPE_PRIMARY_KEY); + return attribute.hasStereotype(TopiaCoreStereoTypes.Store.primaryKey.getName()); } } diff --git a/topia-templates/src/main/java/org/nuiton/topia/templates/TopiaTagValues.java b/topia-templates/src/main/java/org/nuiton/topia/templates/TopiaTagValues.java index 075b13f..ca854ca 100644 --- a/topia-templates/src/main/java/org/nuiton/topia/templates/TopiaTagValues.java +++ b/topia-templates/src/main/java/org/nuiton/topia/templates/TopiaTagValues.java @@ -49,6 +49,7 @@ import java.util.Map; * @plexus.component role="org.nuiton.eugene.models.tagvalue.TagValueDefinitionProvider" role-hint="topia-templates" * @since 2.5 */ +@Deprecated public class TopiaTagValues extends TagValueDefinitionProvider { /** diff --git a/topia-templates/src/main/java/org/nuiton/topia/templates/TopiaTemplateHelper.java b/topia-templates/src/main/java/org/nuiton/topia/templates/TopiaTemplateHelper.java index a17e749..43c2158 100644 --- a/topia-templates/src/main/java/org/nuiton/topia/templates/TopiaTemplateHelper.java +++ b/topia-templates/src/main/java/org/nuiton/topia/templates/TopiaTemplateHelper.java @@ -30,10 +30,13 @@ import org.apache.commons.lang3.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.eugene.AbstractGenerator; -import org.nuiton.eugene.EugeneStereoTypes; +import org.nuiton.eugene.EugeneCoreStereotypes; import org.nuiton.eugene.GeneratorUtil; import org.nuiton.eugene.java.JavaGeneratorUtil; import org.nuiton.eugene.java.ObjectModelTransformerToJava; +import org.nuiton.eugene.models.extension.tagvalue.TagValueMetadatasProviderManagerExtension; +import org.nuiton.eugene.models.extension.tagvalue.TagValueUtil; +import org.nuiton.eugene.models.extension.tagvalue.provider.TagValueMetadatasProvider; import org.nuiton.eugene.models.object.ObjectModel; import org.nuiton.eugene.models.object.ObjectModelAssociationClass; import org.nuiton.eugene.models.object.ObjectModelAttribute; @@ -44,8 +47,6 @@ import org.nuiton.eugene.models.object.ObjectModelInterface; import org.nuiton.eugene.models.object.ObjectModelOperation; import org.nuiton.eugene.models.object.ObjectModelPackage; import org.nuiton.eugene.models.object.ObjectModelParameter; -import org.nuiton.eugene.models.tagvalue.TagValueDefinitionProvider; -import org.nuiton.eugene.models.tagvalue.TagValueDefinitionProviderManagerExtension; import java.util.ArrayList; import java.util.Arrays; @@ -95,15 +96,21 @@ public class TopiaTemplateHelper { protected final ObjectModel model; - protected final TopiaTagValues topiaTagValues; + protected final TopiaCoreTagValues topiaCoreTagValues; + protected final TopiaHibernateTagValues topiaHibernateTagValues; public TopiaTemplateHelper(ObjectModel model) { this.model = model; - this.topiaTagValues = getTagValueDefinitionProvider(TopiaTagValues.class); + this.topiaCoreTagValues = getTagValueMetadatasProvider(TopiaCoreTagValues.class); + this.topiaHibernateTagValues = getTagValueMetadatasProvider(TopiaHibernateTagValues.class); } - public TopiaTagValues getTopiaTagValues() { - return topiaTagValues; + public TopiaCoreTagValues getTopiaCoreTagValues() { + return topiaCoreTagValues; + } + + public TopiaHibernateTagValues getTopiaHibernateTagValues() { + return topiaHibernateTagValues; } /** @@ -115,7 +122,7 @@ public class TopiaTemplateHelper { * @since 2.5 */ public String getPersistenceType(ObjectModelClassifier classifier) { - String tag = topiaTagValues.getPersistenceTypeTagValue(classifier); + String tag = topiaHibernateTagValues.getPersistenceTypeTagValue(classifier); if (tag == null) { tag = PERSISTENCE_TYPE_DEFAULT; } @@ -139,19 +146,16 @@ public class TopiaTemplateHelper { public String getApplicationContextPackage(ObjectModelTransformerToJava transformer, ObjectModel model) { - String result = transformer.getDefaultPackageName(); - return result; + return transformer.getDefaultPackageName(); } public String getPersistenceContextPackage(ObjectModelTransformerToJava transformer, ObjectModel model) { - String result = transformer.getDefaultPackageName(); - return result; + return transformer.getDefaultPackageName(); } public String getDaoPackage(ObjectModelTransformerToJava transformer, ObjectModel model) { - String result = transformer.getDefaultPackageName(); - return result; + return transformer.getDefaultPackageName(); } public String getParentDaoName(ObjectModel model) { @@ -237,8 +241,7 @@ public class TopiaTemplateHelper { public String getEntityPackage(ObjectModelTransformerToJava transformer, ObjectModel model, ObjectModelClassifier input) { - String result = input.getPackageName(); - return result; + return input.getPackageName(); } @@ -254,7 +257,7 @@ public class TopiaTemplateHelper { * @since 2.5 */ public String getReverseDbName(ObjectModelAttribute attr) { - String result = topiaTagValues.findDirectTagValue(TopiaTagValues.TAG_REVERSE_DB_NAME, attr); + String result = TagValueUtil.findDirectTagValue(TopiaHibernateTagValues.Store.reverseDbName, attr); if (StringUtils.isEmpty(result)) { if (attr.getReverseAttribute() != null) { result = getDbName(attr.getReverseAttribute()); @@ -276,7 +279,7 @@ public class TopiaTemplateHelper { if (element == null) { return null; } - String value = topiaTagValues.findDirectTagValue(TopiaTagValues.TAG_DB_NAME, element); + String value = topiaHibernateTagValues.getDbNameTagValue(element); if (value != null) { return value; } @@ -336,9 +339,9 @@ public class TopiaTemplateHelper { // use {@link LinkedHashSet} to keep order and prevent duplicate natural ids found Set<ObjectModelAttribute> results = - new LinkedHashSet<ObjectModelAttribute>(); + new LinkedHashSet<>(); for (ObjectModelAttribute attr : clazz.getAttributes()) { - if (topiaTagValues.getNaturalIdTagValue(attr)) { + if (topiaHibernateTagValues.getNaturalIdTagValue(attr)) { results.add(attr); } } @@ -364,7 +367,7 @@ public class TopiaTemplateHelper { // use {@link LinkedHashSet} to keep order and prevent duplicate not null found Set<ObjectModelAttribute> results = - new LinkedHashSet<ObjectModelAttribute>(); + new LinkedHashSet<>(); for (ObjectModelAttribute attr : clazz.getAttributes()) { if (isAttributeNotNull(attr)) { results.add(attr); @@ -396,10 +399,10 @@ public class TopiaTemplateHelper { * @since 2.6.9 */ public boolean isAttributeNotNull(ObjectModelAttribute attribute) { - Boolean value = topiaTagValues.getNotNullTagValue(attribute); + Boolean value = topiaHibernateTagValues.getNotNullTagValue(attribute); if (value == null) { // valeur null, donc pas positionnee - return topiaTagValues.getNaturalIdTagValue(attribute); + return topiaHibernateTagValues.getNaturalIdTagValue(attribute); } return value; } @@ -427,15 +430,15 @@ public class TopiaTemplateHelper { return type; } - private static final Set<String> numberTypes = new HashSet<String>(); + private static final Set<String> numberTypes = new HashSet<>(); - private static final Set<String> textTypes = new HashSet<String>(); + private static final Set<String> textTypes = new HashSet<>(); - private static final Set<String> booleanTypes = new HashSet<String>(); + private static final Set<String> booleanTypes = new HashSet<>(); - private static final Set<String> primitiveTypes = new HashSet<String>(); + private static final Set<String> primitiveTypes = new HashSet<>(); - private static final Map<String, String> primitiveTypeToClass = new HashMap<String, String>(); + private static final Map<String, String> primitiveTypeToClass = new HashMap<>(); private static final String VOID_TYPE = "void"; @@ -564,7 +567,7 @@ public class TopiaTemplateHelper { if (attr.hasAssociationClass()) { result = getDbName(attr.getAssociationClass()); } else { - result = topiaTagValues.getManytoManyTableNameTagValue(attr); + result = topiaHibernateTagValues.getManytoManyTableNameTagValue(attr); if (StringUtils.isEmpty(result)) { String name = attr.getName(); String revers = attr.getReverseAttributeName(); @@ -589,7 +592,7 @@ public class TopiaTemplateHelper { ObjectModelAttribute attr) { if (JavaGeneratorUtil.isOrdered(attr)) { return "list"; - } else if (EugeneStereoTypes.hasUniqueStereotype(attr)) { + } else if (EugeneCoreStereotypes.hasUniqueStereotype(attr)) { return "set"; } //attr.isOrdered() - On génère le ordered en bag @@ -606,7 +609,7 @@ public class TopiaTemplateHelper { */ public List<ObjectModelClass> getEntityClasses(ObjectModel model, boolean sort) { - List<ObjectModelClass> classes = new ArrayList<ObjectModelClass>(); + List<ObjectModelClass> classes = new ArrayList<>(); for (ObjectModelClass clazz : model.getClasses()) { if (isEntity(clazz)) { classes.add(clazz); @@ -640,11 +643,10 @@ public class TopiaTemplateHelper { */ public List<String> getImports(ObjectModelClass aClass, String... incomingFqns) { - Set<String> tmp = new HashSet<String>(); + Set<String> tmp = new HashSet<>(); tmp.addAll(Arrays.asList(incomingFqns)); getImports(aClass, tmp); - List<String> result = cleanImports(aClass.getPackageName(), tmp); - return result; + return cleanImports(aClass.getPackageName(), tmp); } /** @@ -748,7 +750,7 @@ public class TopiaTemplateHelper { fqns.removeAll(primitiveTypes); fqns.remove(VOID_TYPE); int packageLength = packageName.length(); - List<String> genericType = new ArrayList<String>(); + List<String> genericType = new ArrayList<>(); for (Iterator<String> it = fqns.iterator(); it.hasNext(); ) { String fqn = it.next(); int lastIndex = fqn.lastIndexOf("."); @@ -765,7 +767,7 @@ public class TopiaTemplateHelper { } fqns.addAll(genericType); - ArrayList<String> result = new ArrayList<String>(fqns); + ArrayList<String> result = new ArrayList<>(fqns); Collections.sort(result); return result; } @@ -778,8 +780,8 @@ public class TopiaTemplateHelper { allEntities = getEntityClasses(model, true); - allEntitiesByFQN = new TreeMap<String, ObjectModelClass>(); - usages = new LinkedHashMap<ObjectModelClass, Set<ObjectModelClass>>(); + allEntitiesByFQN = new TreeMap<>(); + usages = new LinkedHashMap<>(); // prepare usages map and fill allEntitiesByFQN map for (ObjectModelClass klass : allEntities) { @@ -865,7 +867,7 @@ public class TopiaTemplateHelper { * @param model model containing the attribute * @return {@code true} if type of attribute is an entity, * {@code false} otherwise - * @see TopiaStereoTypes#STEREOTYPE_ENTITY + * @see TopiaCoreStereoTypes.Store#entity * @since 2.7 */ public boolean isEntity(ObjectModelAttribute attribute, @@ -881,17 +883,17 @@ public class TopiaTemplateHelper { /** * Check if the given classifier has the - * {@link TopiaStereoTypes#STEREOTYPE_ENTITY} and is not an enumeration + * {@link TopiaCoreStereoTypes.Store#entity} and is not an enumeration * * @param classifier classifier to test * @return {@code true} if stereotype was found and classifier is not * enumeration, {@code false} otherwise - * @see TopiaStereoTypes#STEREOTYPE_ENTITY + * @see TopiaCoreStereoTypes.Store#entity * @since 2.5 */ public boolean isEntity(ObjectModelClassifier classifier) { ObjectModelPackage aPackage = model.getPackage(classifier); - return !classifier.isEnum() && TopiaStereoTypes.hasEntityStereotype(classifier, aPackage); + return !classifier.isEnum() && TopiaCoreStereoTypes.hasEntityStereotype(classifier, aPackage); } /** @@ -906,17 +908,17 @@ public class TopiaTemplateHelper { } /** - * Obtain the value of the {@link TopiaTagValues#TAG_INHERITANCE_STRATEGY} tag value on the given classifier. + * Obtain the value of the {@link TopiaHibernateTagValues.Store#inheritanceStrategy} 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_INHERITANCE_STRATEGY + * @see TopiaHibernateTagValues.Store#inheritanceStrategy * @since 3.0 */ public String getInheritanceStrategy(ObjectModelClassifier classifier) { ObjectModelPackage aPackage = model.getPackage(classifier); - String value = topiaTagValues.getInheritanceStrategyTagValue(classifier, - aPackage); + String value = topiaHibernateTagValues.getInheritanceStrategyTagValue(classifier, + aPackage); if (value == null) { value = DEFAULT_INHERITANCE_STRATEGY; } @@ -925,16 +927,15 @@ public class TopiaTemplateHelper { public Class<?> getCollectionType(ObjectModelAttribute attribute) { - Class<?> collectionType = JavaGeneratorUtil.getCollectionType(attribute); - return collectionType; + return JavaGeneratorUtil.getCollectionType(attribute); } public Class<?> getCollectionInstanceType(ObjectModelAttribute attribute) { - boolean unique = EugeneStereoTypes.hasUniqueStereotype(attribute); - boolean ordered = EugeneStereoTypes.hasOrderedStereotype(attribute); - boolean orderBy = topiaTagValues.getOrderByTagValue(attribute) != null; + boolean unique = EugeneCoreStereotypes.hasUniqueStereotype(attribute); + boolean ordered = EugeneCoreStereotypes.hasOrderedStereotype(attribute); + boolean orderBy = topiaHibernateTagValues.getOrderByTagValue(attribute) != null; Class<?> result; @@ -949,11 +950,11 @@ public class TopiaTemplateHelper { } - protected <T extends TagValueDefinitionProvider> T getTagValueDefinitionProvider(Class<T> providerType) { + protected <T extends TagValueMetadatasProvider> T getTagValueMetadatasProvider(Class<T> providerType) { - TagValueDefinitionProviderManagerExtension extension = model.getExtension( - TagValueDefinitionProviderManagerExtension.OBJECTMODEL_EXTENSION, TagValueDefinitionProviderManagerExtension.class); - return extension.getTagValueDefinitionProvider(providerType); + TagValueMetadatasProviderManagerExtension extension = model.getExtension( + TagValueMetadatasProviderManagerExtension.OBJECTMODEL_EXTENSION, TagValueMetadatasProviderManagerExtension.class); + return extension.getProvider(providerType); } //--------------------------------------------------------------------------------------------------------------- diff --git a/topia-templates/src/main/resources/META-INF/services/org.nuiton.eugene.models.extension.stereotype.provider.StereotypeMetadatasProvider b/topia-templates/src/main/resources/META-INF/services/org.nuiton.eugene.models.extension.stereotype.provider.StereotypeMetadatasProvider new file mode 100644 index 0000000..f6e805a --- /dev/null +++ b/topia-templates/src/main/resources/META-INF/services/org.nuiton.eugene.models.extension.stereotype.provider.StereotypeMetadatasProvider @@ -0,0 +1 @@ +org.nuiton.topia.templates.TopiaCoreStereoTypes \ No newline at end of file diff --git a/topia-templates/src/main/resources/META-INF/services/org.nuiton.eugene.models.extension.tagvalue.provider.TagValueMetadatasProvider b/topia-templates/src/main/resources/META-INF/services/org.nuiton.eugene.models.extension.tagvalue.provider.TagValueMetadatasProvider new file mode 100644 index 0000000..2858294 --- /dev/null +++ b/topia-templates/src/main/resources/META-INF/services/org.nuiton.eugene.models.extension.tagvalue.provider.TagValueMetadatasProvider @@ -0,0 +1,2 @@ +org.nuiton.topia.templates.TopiaCoreTagValues +org.nuiton.topia.templates.TopiaHibernateTagValues \ No newline at end of file diff --git a/topia-templates/src/test/java/org/nuiton/topia/templates/TopiaStereoTypesTest.java b/topia-templates/src/test/java/org/nuiton/topia/templates/TopiaCoreStereoTypesTest.java similarity index 59% copy from topia-templates/src/test/java/org/nuiton/topia/templates/TopiaStereoTypesTest.java copy to topia-templates/src/test/java/org/nuiton/topia/templates/TopiaCoreStereoTypesTest.java index 4a7f1d5..8350ba4 100644 --- a/topia-templates/src/test/java/org/nuiton/topia/templates/TopiaStereoTypesTest.java +++ b/topia-templates/src/test/java/org/nuiton/topia/templates/TopiaCoreStereoTypesTest.java @@ -26,19 +26,32 @@ package org.nuiton.topia.templates; import org.junit.Assert; import org.junit.Before; -import org.nuiton.eugene.models.stereotype.MismatchStereotypeTargetException; -import org.nuiton.eugene.models.stereotype.StereotypeNotFoundException; +import org.junit.Test; +import org.nuiton.eugene.models.extension.stereotype.MismatchStereotypeTargetException; +import org.nuiton.eugene.models.extension.stereotype.StereotypeNotFoundException; +import org.nuiton.eugene.models.object.ObjectModel; +import org.nuiton.eugene.models.object.ObjectModelAttribute; +import org.nuiton.eugene.models.object.ObjectModelClassifier; +import org.nuiton.eugene.models.object.ObjectModelPackage; -public class TopiaStereoTypesTest { +public class TopiaCoreStereoTypesTest { - protected TopiaStereoTypes provider; + protected TopiaCoreStereoTypes provider; @Before public void setUp() throws Exception { - provider = new TopiaStereoTypes(); - provider.init(); + provider = new TopiaCoreStereoTypes(); } + @Test + public void test() { + + validate(TopiaCoreStereoTypes.Store.entity.name(), true, ObjectModelPackage.class, ObjectModelClassifier.class); + validate(TopiaCoreStereoTypes.Store.entity.name(), false, ObjectModel.class, ObjectModelAttribute.class); + + validate(TopiaCoreStereoTypes.Store.entity.name() + System.nanoTime(), false, ObjectModelPackage.class, ObjectModelClassifier.class); + + } protected void validate(String name, boolean expected, Class<?>... types) { for (Class<?> type : types) { diff --git a/topia-templates/src/test/java/org/nuiton/topia/templates/TopiaTagValuesTest.java b/topia-templates/src/test/java/org/nuiton/topia/templates/TopiaCoreTagValuesTest.java similarity index 76% copy from topia-templates/src/test/java/org/nuiton/topia/templates/TopiaTagValuesTest.java copy to topia-templates/src/test/java/org/nuiton/topia/templates/TopiaCoreTagValuesTest.java index e91fb77..310ec90 100644 --- a/topia-templates/src/test/java/org/nuiton/topia/templates/TopiaTagValuesTest.java +++ b/topia-templates/src/test/java/org/nuiton/topia/templates/TopiaCoreTagValuesTest.java @@ -27,28 +27,25 @@ package org.nuiton.topia.templates; import org.junit.Assert; import org.junit.Before; import org.junit.Test; +import org.nuiton.eugene.models.extension.tagvalue.MismatchTagValueTargetException; +import org.nuiton.eugene.models.extension.tagvalue.TagValueNotFoundException; import org.nuiton.eugene.models.object.xml.ObjectModelAttributeImpl; import org.nuiton.eugene.models.object.xml.ObjectModelClassImpl; import org.nuiton.eugene.models.object.xml.ObjectModelImpl; import org.nuiton.eugene.models.object.xml.ObjectModelPackageImpl; -import org.nuiton.eugene.models.tagvalue.MismatchTagValueTargetException; -import org.nuiton.eugene.models.tagvalue.TagValueNotFoundException; -public class TopiaTagValuesTest { +public class TopiaCoreTagValuesTest { - protected TopiaTagValues provider; + protected TopiaCoreTagValues provider; @Before public void setUp() throws Exception { - provider = new TopiaTagValues(); - provider.init(); + provider = new TopiaCoreTagValues(); } @Test public void testDefaultValues() { - Assert.assertEquals("union-subclass", provider.getInheritanceStrategyTagValue(new ObjectModelClassImpl(), new ObjectModelPackageImpl())); Assert.assertEquals(true, provider.getNotGenerateToStringTagValue(new ObjectModelClassImpl(), new ObjectModelPackageImpl(), new ObjectModelImpl())); - Assert.assertEquals(true, provider.getIndexForeignKeysTagValue(new ObjectModelAttributeImpl(), new ObjectModelPackageImpl(), new ObjectModelImpl())); } protected void validate(String name, boolean expected, Class<?>... types) { diff --git a/topia-templates/src/test/java/org/nuiton/topia/templates/TopiaTagValuesTest.java b/topia-templates/src/test/java/org/nuiton/topia/templates/TopiaHibernateTagValuesTest.java similarity index 82% copy from topia-templates/src/test/java/org/nuiton/topia/templates/TopiaTagValuesTest.java copy to topia-templates/src/test/java/org/nuiton/topia/templates/TopiaHibernateTagValuesTest.java index e91fb77..bbb2907 100644 --- a/topia-templates/src/test/java/org/nuiton/topia/templates/TopiaTagValuesTest.java +++ b/topia-templates/src/test/java/org/nuiton/topia/templates/TopiaHibernateTagValuesTest.java @@ -27,27 +27,25 @@ package org.nuiton.topia.templates; import org.junit.Assert; import org.junit.Before; import org.junit.Test; +import org.nuiton.eugene.models.extension.tagvalue.MismatchTagValueTargetException; +import org.nuiton.eugene.models.extension.tagvalue.TagValueNotFoundException; import org.nuiton.eugene.models.object.xml.ObjectModelAttributeImpl; import org.nuiton.eugene.models.object.xml.ObjectModelClassImpl; import org.nuiton.eugene.models.object.xml.ObjectModelImpl; import org.nuiton.eugene.models.object.xml.ObjectModelPackageImpl; -import org.nuiton.eugene.models.tagvalue.MismatchTagValueTargetException; -import org.nuiton.eugene.models.tagvalue.TagValueNotFoundException; -public class TopiaTagValuesTest { +public class TopiaHibernateTagValuesTest { - protected TopiaTagValues provider; + protected TopiaHibernateTagValues provider; @Before public void setUp() throws Exception { - provider = new TopiaTagValues(); - provider.init(); + provider = new TopiaHibernateTagValues(); } @Test public void testDefaultValues() { Assert.assertEquals("union-subclass", provider.getInheritanceStrategyTagValue(new ObjectModelClassImpl(), new ObjectModelPackageImpl())); - Assert.assertEquals(true, provider.getNotGenerateToStringTagValue(new ObjectModelClassImpl(), new ObjectModelPackageImpl(), new ObjectModelImpl())); Assert.assertEquals(true, provider.getIndexForeignKeysTagValue(new ObjectModelAttributeImpl(), new ObjectModelPackageImpl(), new ObjectModelImpl())); } diff --git a/topia-templates/src/test/java/org/nuiton/topia/templates/TopiaStereoTypesTest.java b/topia-templates/src/test/java/org/nuiton/topia/templates/TopiaStereoTypesTest.java index 4a7f1d5..b1ae836 100644 --- a/topia-templates/src/test/java/org/nuiton/topia/templates/TopiaStereoTypesTest.java +++ b/topia-templates/src/test/java/org/nuiton/topia/templates/TopiaStereoTypesTest.java @@ -29,6 +29,7 @@ import org.junit.Before; import org.nuiton.eugene.models.stereotype.MismatchStereotypeTargetException; import org.nuiton.eugene.models.stereotype.StereotypeNotFoundException; +@Deprecated public class TopiaStereoTypesTest { protected TopiaStereoTypes provider; diff --git a/topia-templates/src/test/java/org/nuiton/topia/templates/TopiaTagValuesTest.java b/topia-templates/src/test/java/org/nuiton/topia/templates/TopiaTagValuesTest.java index e91fb77..75d5d86 100644 --- a/topia-templates/src/test/java/org/nuiton/topia/templates/TopiaTagValuesTest.java +++ b/topia-templates/src/test/java/org/nuiton/topia/templates/TopiaTagValuesTest.java @@ -34,6 +34,7 @@ import org.nuiton.eugene.models.object.xml.ObjectModelPackageImpl; import org.nuiton.eugene.models.tagvalue.MismatchTagValueTargetException; import org.nuiton.eugene.models.tagvalue.TagValueNotFoundException; +@Deprecated public class TopiaTagValuesTest { protected TopiaTagValues provider; -- To stop receiving notification emails like this one, please contact nuiton.org SCM administrator <admin+scm@nuiton.org>.
This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository topia. See https://gitlab.nuiton.org/nuiton/topia.git commit 83e089850d408a3e03d8c7f41b82b2fa97751bdd Merge: 0a178ea d77fc23 Author: Tony CHEMIT <chemit@codelutin.com> Date: Mon Sep 26 13:00:01 2016 +0200 Use EUGene new stereotypes and tag values API (Fixes #4043) Merge branch 'feature/4043' into develop pom.xml | 2 +- .../templates/ApplicationContextTransformer.java | 10 +- .../topia/templates/EntityDaoTransformer.java | 19 +- .../topia/templates/EntityEnumTransformer.java | 14 +- .../templates/EntityHibernateMappingGenerator.java | 80 +-- .../nuiton/topia/templates/EntityTransformer.java | 41 +- .../templates/PersistenceContextTransformer.java | 8 +- .../topia/templates/TopiaCoreStereoTypes.java | 130 ++++ .../nuiton/topia/templates/TopiaCoreTagValues.java | 349 ++++++++++ .../nuiton/topia/templates/TopiaGeneratorUtil.java | 73 +- .../topia/templates/TopiaHibernateTagValues.java | 737 +++++++++++++++++++++ .../nuiton/topia/templates/TopiaStereoTypes.java | 15 +- .../org/nuiton/topia/templates/TopiaTagValues.java | 1 + .../topia/templates/TopiaTemplateHelper.java | 111 ++-- ...stereotype.provider.StereotypeMetadatasProvider | 1 + ...ion.tagvalue.provider.TagValueMetadatasProvider | 2 + ...ypesTest.java => TopiaCoreStereoTypesTest.java} | 25 +- ...ValuesTest.java => TopiaCoreTagValuesTest.java} | 13 +- ...sTest.java => TopiaHibernateTagValuesTest.java} | 12 +- .../topia/templates/TopiaStereoTypesTest.java | 1 + .../nuiton/topia/templates/TopiaTagValuesTest.java | 1 + 21 files changed, 1443 insertions(+), 202 deletions(-) -- To stop receiving notification emails like this one, please contact nuiton.org SCM administrator <admin+scm@nuiton.org>.
participants (1)
-
nuiton.org scm