Author: tchemit Date: 2013-12-20 15:04:05 +0100 (Fri, 20 Dec 2013) New Revision: 2948 Url: http://nuiton.org/projects/topia/repository/revisions/2948 Log: fixes #2976: Generate a DaoSupplier Added: trunk/topia-it/src/main/java/org/nuiton/topia/it/legacy/TopiaTestDaoSupplier.java Modified: trunk/topia-it/src/test/java/org/nuiton/topia/it/GenerateTest.java trunk/topia-templates/src/main/java/org/nuiton/topia/templates/PersistenceContextTransformer.java trunk/topia-templates/src/main/java/org/nuiton/topia/templates/TopiaGeneratorUtil.java Added: trunk/topia-it/src/main/java/org/nuiton/topia/it/legacy/TopiaTestDaoSupplier.java =================================================================== --- trunk/topia-it/src/main/java/org/nuiton/topia/it/legacy/TopiaTestDaoSupplier.java (rev 0) +++ trunk/topia-it/src/main/java/org/nuiton/topia/it/legacy/TopiaTestDaoSupplier.java 2013-12-20 14:04:05 UTC (rev 2948) @@ -0,0 +1,10 @@ +package org.nuiton.topia.it.legacy; + +/** + * Created on 12/20/13. + * + * @author Tony Chemit <chemit@codelutin.com> + * @since XXX + */ +public interface TopiaTestDaoSupplier { +} Property changes on: trunk/topia-it/src/main/java/org/nuiton/topia/it/legacy/TopiaTestDaoSupplier.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native Modified: trunk/topia-it/src/test/java/org/nuiton/topia/it/GenerateTest.java =================================================================== --- trunk/topia-it/src/test/java/org/nuiton/topia/it/GenerateTest.java 2013-12-20 11:31:25 UTC (rev 2947) +++ trunk/topia-it/src/test/java/org/nuiton/topia/it/GenerateTest.java 2013-12-20 14:04:05 UTC (rev 2948) @@ -33,8 +33,10 @@ import org.nuiton.topia.it.legacy.AbstractTopiaTestTopiaApplicationContext; import org.nuiton.topia.it.legacy.AbstractTopiaTestTopiaPersistenceContext; import org.nuiton.topia.it.legacy.TopiaTestApplicationContext; +import org.nuiton.topia.it.legacy.TopiaTestDaoSupplier; import org.nuiton.topia.it.legacy.TopiaTestPersistenceContext; import org.nuiton.topia.it.legacy.TopiaTestTopiaApplicationContext; +import org.nuiton.topia.it.legacy.TopiaTestTopiaDaoSupplier; import org.nuiton.topia.it.legacy.TopiaTestTopiaPersistenceContext; import org.nuiton.topia.it.legacy.test.entities.AbstractPetTopiaDao; import org.nuiton.topia.it.legacy.test.entities.GeneratedPetTopiaDao; @@ -65,8 +67,18 @@ } @Test + public void testDaoSupplier() { + + // add contract from class-path + Assert.assertTrue(TopiaTestDaoSupplier.class.isAssignableFrom(TopiaTestTopiaDaoSupplier.class)); + } + + @Test public void testPersistenceContext() { + // use dao supplier as contract of topia persistence context + Assert.assertTrue(TopiaTestDaoSupplier.class.isAssignableFrom(AbstractTopiaTestTopiaPersistenceContext.class)); + // add contract from class-path Assert.assertTrue(TopiaTestPersistenceContext.class.isAssignableFrom(AbstractTopiaTestTopiaPersistenceContext.class)); Assert.assertTrue(TopiaTestPersistenceContext.class.isAssignableFrom(TopiaTestTopiaPersistenceContext.class)); Modified: trunk/topia-templates/src/main/java/org/nuiton/topia/templates/PersistenceContextTransformer.java =================================================================== --- trunk/topia-templates/src/main/java/org/nuiton/topia/templates/PersistenceContextTransformer.java 2013-12-20 11:31:25 UTC (rev 2947) +++ trunk/topia-templates/src/main/java/org/nuiton/topia/templates/PersistenceContextTransformer.java 2013-12-20 14:04:05 UTC (rev 2948) @@ -30,9 +30,11 @@ import org.nuiton.eugene.java.ObjectModelTransformerToJava; import org.nuiton.eugene.models.object.ObjectModel; import org.nuiton.eugene.models.object.ObjectModelClass; +import org.nuiton.eugene.models.object.ObjectModelInterface; import org.nuiton.eugene.models.object.ObjectModelJavaModifier; import org.nuiton.eugene.models.object.ObjectModelOperation; import org.nuiton.topia.AbstractTopiaPersistenceContext; +import org.nuiton.topia.TopiaDaoSupplier; import org.nuiton.topia.persistence.HibernateProvider; import org.nuiton.topia.persistence.TopiaHibernateSessionRegistry; import org.nuiton.topia.TopiaListenableSupport; @@ -52,35 +54,85 @@ @Override public void transformFromModel(ObjectModel input) { - String packageName = TopiaGeneratorUtil.getPersistenceContextPackage(this, model); + String packageName = + TopiaGeneratorUtil.getPersistenceContextPackage(this, model); - String entityAbstractName = TopiaGeneratorUtil.getPersistenceContextAbstractName(model); + String daoSupplierName = TopiaGeneratorUtil.getDaoSupplierName(model); - String entityConcreteName = TopiaGeneratorUtil.getPersistenceContextConcreteName(model); + String persistenceContextAbstractName = + TopiaGeneratorUtil.getPersistenceContextAbstractName(model); - boolean generateAbstract = !isInClassPath(packageName, entityAbstractName); + String persistenceContextConcreteName = + TopiaGeneratorUtil.getPersistenceContextConcreteName(model); - boolean generateConcrete = !isInClassPath(packageName, entityConcreteName); + boolean generateDaoSupplier = + !isInClassPath(packageName, daoSupplierName); + boolean generateAbstract = + !isInClassPath(packageName, persistenceContextAbstractName); + boolean generateConcrete = + !isInClassPath(packageName, persistenceContextConcreteName); + + if (generateDaoSupplier) { + + generateDaoSupplier(packageName, + daoSupplierName); + } + if (generateAbstract) { generateAbstract(packageName, - entityAbstractName); + persistenceContextAbstractName, + daoSupplierName); } if (generateConcrete) { generateImpl(packageName, - entityAbstractName, - entityConcreteName); + persistenceContextAbstractName, + persistenceContextConcreteName); } } + protected void generateDaoSupplier(String packageName, String className) { + + ObjectModelInterface output = createInterface(className, packageName); + + // detect if there is a contract to set on abstract + String contractName = TopiaGeneratorUtil.getDaoSupplierInterfaceName(model); + + boolean addPersistenceContextContract = isInClassPath(packageName, contractName); + + if (addPersistenceContextContract) { + addInterface(output, packageName + "." + contractName); + } + + addInterface(output, TopiaDaoSupplier.class); + + List<ObjectModelClass> entityClasses = + TopiaGeneratorUtil.getEntityClasses(model, true); + + for (ObjectModelClass clazz : entityClasses) { + + String daoContractName = TopiaGeneratorUtil.getContracDaoName(clazz); + String daoClazzName = TopiaGeneratorUtil.getConcreteDaoName(clazz); + + // specialized getXXXDao method + addOperation( + output, + "get" + daoContractName, + clazz.getPackageName() + '.' + daoClazzName); + } + } + protected void generateAbstract(String packageName, - String className) { + String className, + String daoSupplierName) { + ObjectModelClass output = createAbstractClass(className, packageName); + // try to find a super class by tag-value String superClass = TopiaGeneratorUtil.getPersistenceContextSuperClassTagValue(model); @@ -91,11 +143,8 @@ } else { //TODO check that super class instance of TopiaPersistenceContext - } - ObjectModelClass output = createAbstractClass(className, packageName); - setSuperClass(output, superClass); // detect if there is a contract to set on abstract @@ -107,13 +156,12 @@ addInterface(output, packageName + "." + contractName); } + addInterface(output, packageName + "." + daoSupplierName); + addContructor(output, false); + List<ObjectModelClass> entityClasses = TopiaGeneratorUtil.getEntityClasses(model, true); - addContructor(output, false); - - - for (ObjectModelClass clazz : entityClasses) { String clazzName = clazz.getName(); @@ -125,6 +173,7 @@ output, "get" + daoContractName, clazz.getPackageName() + '.' + daoClazzName); + addAnnotation(output, op, Override.class); addImport(output, clazz); setOperationBody(op, "" /*{ Modified: trunk/topia-templates/src/main/java/org/nuiton/topia/templates/TopiaGeneratorUtil.java =================================================================== --- trunk/topia-templates/src/main/java/org/nuiton/topia/templates/TopiaGeneratorUtil.java 2013-12-20 11:31:25 UTC (rev 2947) +++ trunk/topia-templates/src/main/java/org/nuiton/topia/templates/TopiaGeneratorUtil.java 2013-12-20 14:04:05 UTC (rev 2948) @@ -181,6 +181,14 @@ return model.getName() + "PersistenceContext"; } + public static String getDaoSupplierInterfaceName(ObjectModel model) { + return model.getName() + "DaoSupplier"; + } + + public static String getDaoSupplierName(ObjectModel model) { + return model.getName() + "TopiaDaoSupplier"; + } + public static String getEntityEnumName(ObjectModel model) { return model.getName() + "EntityEnum"; }