r1972 - in trunk/topia-persistence/src: main/java/org/nuiton/topia/generator test/xmi
Author: fdesbois Date: 2010-05-26 11:01:27 +0200 (Wed, 26 May 2010) New Revision: 1972 Url: http://nuiton.org/repositories/revision/topia/1972 Log: Evo #636 : Use dependency for extra operations on entity DAO Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/DAOAbstractTransformer.java trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/DAOImplTransformer.java trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/TopiaGeneratorUtil.java trunk/topia-persistence/src/test/xmi/topiatest.zargo Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/DAOAbstractTransformer.java =================================================================== --- trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/DAOAbstractTransformer.java 2010-05-25 16:48:59 UTC (rev 1971) +++ trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/DAOAbstractTransformer.java 2010-05-26 09:01:27 UTC (rev 1972) @@ -34,6 +34,9 @@ import org.nuiton.eugene.models.object.ObjectModelAssociationClass; 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.ObjectModelDependency; +import org.nuiton.eugene.models.object.ObjectModelInterface; import org.nuiton.eugene.models.object.ObjectModelModifier; import org.nuiton.eugene.models.object.ObjectModelOperation; import org.nuiton.eugene.models.object.ObjectModelParameter; @@ -78,6 +81,13 @@ Map<ObjectModelClass, Set<ObjectModelClass>> usages; + /** + * Map of extra operations for DAO. The key of the map is the qualified + * name of the entity relative to the DAO. + */ + Map<String, Collection<ObjectModelOperation>> extraOperations = + new HashMap<String, Collection<ObjectModelOperation>>(); + @Override public void transformFromModel(ObjectModel model) { @@ -85,6 +95,44 @@ } @Override + public void transformFromInterface(ObjectModelInterface interfacez) { + if (!interfacez.hasStereotype(TopiaGeneratorUtil.STEREOTYPE_DAO)) { + return; + } + + // Extra operations from <<dao>> interfacez + collectExtraOperations(interfacez); + } + + /** + * EVO #636 : Manage extra operations for DAO from "dao" dependency + * between an interface with stereotype <<dao>> (dependency client) and + * a class with stereotype <<entity>> (dependency supplier). + * + * @param interfacez The interface with <<dao>> stereotype + */ + protected void collectExtraOperations(ObjectModelInterface interfacez) { + ObjectModelDependency dependency = + interfacez.getDependency(TopiaGeneratorUtil.DEPENDENCIES_DAO); + + ObjectModelClassifier classifier = dependency.getSupplier(); + + if (classifier.hasStereotype(TopiaGeneratorUtil.STEREOTYPE_ENTITY)) { + + // Only direct operations will be used. No need to have more + // operations. + Collection<ObjectModelOperation> operations = + interfacez.getOperations(); + + if (log.isDebugEnabled()) { + log.debug("add extra operations for DAO"); + } + + extraOperations.put(classifier.getQualifiedName(), operations); + } + } + + @Override public void transformFromClass(ObjectModelClass clazz) { if (!clazz.hasStereotype(TopiaGeneratorUtil.STEREOTYPE_ENTITY)) { return; @@ -833,15 +881,29 @@ return false; } - public static Collection<ObjectModelOperation> getDAOOperations( + public Collection<ObjectModelOperation> getDAOOperations( ObjectModelClass clazz) { + // Note : this collection will contains extra operations for DAO. + // Overriding existing generated methods is not managed yet Collection<ObjectModelOperation> results = new ArrayList<ObjectModelOperation>(); + + // This code will be deprecated for (ObjectModelOperation op : clazz.getOperations()) { if (op.hasStereotype(TopiaGeneratorUtil.STEREOTYPE_DAO)) { results.add(op); } } + // New method : interface dependency + Collection<ObjectModelOperation> extra = + extraOperations.get(clazz.getQualifiedName()); + + if (extra != null) { + for (ObjectModelOperation op : extra) { + results.add(op); + } + } + return results; } Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/DAOImplTransformer.java =================================================================== --- trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/DAOImplTransformer.java 2010-05-25 16:48:59 UTC (rev 1971) +++ trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/DAOImplTransformer.java 2010-05-26 09:01:27 UTC (rev 1972) @@ -27,8 +27,14 @@ import org.nuiton.eugene.java.ObjectModelTransformerToJava; import org.nuiton.eugene.models.object.ObjectModelClass; +import org.nuiton.eugene.models.object.ObjectModelClassifier; +import org.nuiton.eugene.models.object.ObjectModelDependency; +import org.nuiton.eugene.models.object.ObjectModelInterface; import org.nuiton.eugene.models.object.ObjectModelOperation; +import java.util.ArrayList; +import java.util.List; + /** * Created: 14 déc. 2009 * @@ -39,7 +45,36 @@ */ public class DAOImplTransformer extends ObjectModelTransformerToJava { + /** + * Collection used to identify entities full qualified name that have + * a dependency for DAO extra operations. So no need to generate the + * DAOImpl in this case, it will be created by the developper. + */ + List<String> noGenerationNeeded = new ArrayList<String>(); + @Override + public void transformFromInterface(ObjectModelInterface interfacez) { + if (!interfacez.hasStereotype(TopiaGeneratorUtil.STEREOTYPE_DAO)) { + return; + } + + /** + * EVO #636 : Manage extra operations for DAO from "dao" dependency + * between an interface with stereotype <<dao>> (dependency client) and + * a class with stereotype <<entity>> (dependency supplier). + */ + + ObjectModelDependency dependency = + interfacez.getDependency(TopiaGeneratorUtil.DEPENDENCIES_DAO); + + ObjectModelClassifier classifier = dependency.getSupplier(); + + if (classifier.hasStereotype(TopiaGeneratorUtil.STEREOTYPE_ENTITY)) { + noGenerationNeeded.add(classifier.getQualifiedName()); + } + } + + @Override public void transformFromClass(ObjectModelClass clazz) { if (!clazz.hasStereotype(TopiaGeneratorUtil.STEREOTYPE_ENTITY) || hasDAOOperations(clazz)) { return; @@ -62,12 +97,17 @@ * @param clazz The ObjectModelClass with operations (Corresponding to the Entity) * @return true if the class has some dao operations, false if not */ - public static boolean hasDAOOperations(ObjectModelClass clazz) { + public boolean hasDAOOperations(ObjectModelClass clazz) { + // This code will be deprecated for (ObjectModelOperation op : clazz.getOperations()) { if (op.hasStereotype(TopiaGeneratorUtil.STEREOTYPE_DAO)) { return true; } } + // New method : interface dependency + if (noGenerationNeeded.contains(clazz.getQualifiedName())) { + return true; + } return false; } } 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 2010-05-25 16:48:59 UTC (rev 1971) +++ trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/TopiaGeneratorUtil.java 2010-05-26 09:01:27 UTC (rev 1972) @@ -114,6 +114,11 @@ */ public static final String STEREOTYPE_ARRAY = "array"; /** + * dependency to add extra operations for entity dao. + * @since 2.4 + */ + public static final String DEPENDENCIES_DAO = "dao"; + /** * Tag pour le type de persistence */ public static final String TAG_PERSISTENCE_TYPE = "persistenceType"; Modified: trunk/topia-persistence/src/test/xmi/topiatest.zargo =================================================================== (Binary files differ)
participants (1)
-
fdesbois@users.nuiton.org