Author: sletellier Date: 2012-04-06 15:58:37 +0200 (Fri, 06 Apr 2012) New Revision: 2434 Url: http://nuiton.org/repositories/revision/topia/2434 Log: - fixes #2051 : Depreciate method create(naturalId) on DAOs - Update documentation - Update tests Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityDAOTransformer.java trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/TopiaGeneratorUtil.java trunk/topia-persistence/src/site/rst/user/extend_model.rst trunk/topia-persistence/src/test/java/org/nuiton/topia/persistence/NaturalIdTest.java Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityDAOTransformer.java =================================================================== --- trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityDAOTransformer.java 2012-04-06 08:56:17 UTC (rev 2433) +++ trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityDAOTransformer.java 2012-04-06 13:58:37 UTC (rev 2434) @@ -423,6 +423,8 @@ generateNaturalId(daoAbstractClass, clazz); + generateNotNull(daoAbstractClass, clazz); + for (ObjectModelAttribute attr : clazz.getAttributes()) { if (!attr.isNavigable()) { continue; @@ -1118,14 +1120,24 @@ "existByNaturalId", "boolean", ObjectModelModifier.PUBLIC); addException(existByNaturalId, TopiaException.class); + // TODO sletellier 20120406 : remove method on 3.0 ObjectModelOperation create = addOperation(result, "create", "E", ObjectModelModifier.PUBLIC); + + // sletellier : mark as Deprecated (http://nuiton.org/issues/2051) + setDocumentation(create, "@deprecated since 2.6.10, prefer use {@link #createByNaturalId}\n"); + addAnnotation(result, create, "Deprecated"); addException(create, TopiaException.class); + ObjectModelOperation createByNaturalId = addOperation(result, + "createByNaturalId", "E", ObjectModelModifier.PUBLIC); + + addException(createByNaturalId, TopiaException.class); + // used for calling findByProperties in findByNaturalId String searchProperties = ""; // used for calling findByNaturalId in existByNaturalId - String params = ""; +// String params = ""; String clazzName = clazz.getName(); for (ObjectModelAttribute attr : props) { String propName = attr.getName(); @@ -1133,6 +1145,7 @@ addParameter(findByNaturalId, attr.getType(), propName); addParameter(existByNaturalId, attr.getType(), propName); addParameter(create, attr.getType(), propName); + addParameter(createByNaturalId, attr.getType(), propName); searchProperties += ", " + clazzName + '.' + getConstantName(propName) + @@ -1159,6 +1172,53 @@ return create(<%=searchProperties%>); }*/ ); + + setOperationBody(createByNaturalId, "" +/*{ + return create(<%=searchProperties%>); + }*/ + ); } } + + private void generateNotNull(ObjectModelClass result, + ObjectModelClass clazz) { + + Set<ObjectModelAttribute> props = + TopiaGeneratorUtil.getNotNullAttributes(clazz); + + if (!props.isEmpty()) { + + if (log.isDebugEnabled()) { + log.debug("generateNotNull for " + props); + } + + ObjectModelOperation createByNotNull = addOperation(result, + "createByNotNull", "E", ObjectModelModifier.PUBLIC); + + addException(createByNotNull, TopiaException.class); + + String searchProperties = ""; +// String params = ""; + String clazzName = clazz.getName(); + for (ObjectModelAttribute attr : props) { + String propName = attr.getName(); + // add property as param in both methods + addParameter(createByNotNull, attr.getType(), propName); + + searchProperties += + ", " + clazzName + '.' + getConstantName(propName) + + ", " + propName; + //params += ", " + propName; + } + searchProperties = searchProperties.substring(2); + //params = params.substring(2); + + setOperationBody(createByNotNull, "" +/*{ + return create(<%=searchProperties%>); + }*/ + ); + } + } } Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/TopiaGeneratorUtil.java =================================================================== --- trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/TopiaGeneratorUtil.java 2012-04-06 08:56:17 UTC (rev 2433) +++ trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/TopiaGeneratorUtil.java 2012-04-06 13:58:37 UTC (rev 2434) @@ -375,6 +375,33 @@ } /** + * Cherche et renvoie la liste des attributs qui ne doivent pas etre null dans + * une classe. + * + * @param clazz la classe à tester + * @return la liste des attributs qui ne doivent pas etre null + */ + public static Set<ObjectModelAttribute> getNotNullAttributes( + ObjectModelClass clazz) { + + // use {@link LinkedHashSet} to keep order and prevent duplicate not null found + Set<ObjectModelAttribute> results = + new LinkedHashSet<ObjectModelAttribute>(); + for (ObjectModelAttribute attr : clazz.getAttributes()) { + if (isNotNull(attr)) { + results.add(attr); + } + } + + Collection<ObjectModelClass> superclasses = clazz.getSuperclasses(); + for (ObjectModelClass superClass : superclasses) { + Set<ObjectModelAttribute> notNullOfSuperClass = getNotNullAttributes(superClass); + results.addAll(notNullOfSuperClass); + } + return results; + } + + /** * Test if we need to generate {@code toString} method for the given class. * * @param clazz class to test @@ -453,17 +480,19 @@ } /** - * Detecte si un attribut est marué comme non null. + * Detecte si un attribut est marqué comme non null. + * Les naturalId {@link #isNaturalId} sont not null par défaut * * @param attribute l'attribut à tester - * @return {@code true} si l'attribut doit être non null, {@code false} sinon.. + * @return {@code true} si l'attribut doit être non null, + * par défaut pour les naturalId, {@code false} sinon.. * @since 2.6.9 */ public static boolean isNotNull(ObjectModelAttribute attribute) { String value = getNotNullTagValue(attribute); if (StringUtils.isEmpty(value)) { // valeur null, donc pas positionnee - return false; + return isNaturalId(attribute); } try { return Boolean.valueOf(value.trim()); Modified: trunk/topia-persistence/src/site/rst/user/extend_model.rst =================================================================== --- trunk/topia-persistence/src/site/rst/user/extend_model.rst 2012-04-06 08:56:17 UTC (rev 2433) +++ trunk/topia-persistence/src/site/rst/user/extend_model.rst 2012-04-06 13:58:37 UTC (rev 2434) @@ -85,7 +85,13 @@ existante ; à moins de le préciser dans la configuration via le tagValue "naturalIdMutable" placé à "true" (déconseillé). +Le DAO de l'entité se voit ajouté les méthodes suivantes : +- createByNaturalId : qui permet de crée l'entité avec tout les naturalId +- createByNotNull : qui permet de crée l'entité avec tout les naturalId not null (donc obligatoire) +- existByNaturalId : qui permet de vérifié que l'entité correspondant au naturalId existe +- findByNaturalId : qui permet de chercher l'entité sur les naturalId + Ajouter des requêtes complexes ============================== Modified: trunk/topia-persistence/src/test/java/org/nuiton/topia/persistence/NaturalIdTest.java =================================================================== --- trunk/topia-persistence/src/test/java/org/nuiton/topia/persistence/NaturalIdTest.java 2012-04-06 08:56:17 UTC (rev 2433) +++ trunk/topia-persistence/src/test/java/org/nuiton/topia/persistence/NaturalIdTest.java 2012-04-06 13:58:37 UTC (rev 2434) @@ -65,10 +65,14 @@ TopiaTestDAOHelper.getNaturalizedEntityDAO(transaction); // No exception will be thrown with the two properties - dao.create(5, "str"); + dao.createByNaturalId(5, "str"); transaction.commitTransaction(); // No exception will only the need property + dao.createByNotNull(3); + transaction.commitTransaction(); + + // No exception will only the need property dao.create(NaturalizedEntity.PROPERTY_NATURAL_ID_NOT_NULL, 3); transaction.commitTransaction(); } @@ -103,7 +107,7 @@ TopiaTestDAOHelper.getNaturalizedEntityDAO(transaction); NaturalizedEntity entity = - dao.create(5, "str"); + dao.createByNaturalId(5, "str"); transaction.commitTransaction(); // Exception will be throw : not allowed to modify a naturalId property @@ -125,7 +129,7 @@ TopiaTestDAOHelper.getNaturalizedEntityDAO(transaction); NaturalizedEntity entity = - dao.create(5, "str"); + dao.createByNaturalId(5, "str"); transaction.commitTransaction(); NaturalizedEntity result = dao.findByNaturalId(5, "str"); @@ -141,7 +145,7 @@ NaturalizedEntityDAO dao = TopiaTestDAOHelper.getNaturalizedEntityDAO(transaction); - dao.create(5, "str"); + dao.createByNaturalId(5, "str"); transaction.commitTransaction(); boolean result = dao.existByNaturalId(5, "str");