Author: athimel Date: 2014-05-16 11:28:46 +0200 (Fri, 16 May 2014) New Revision: 3110 Url: http://forge.nuiton.org/projects/topia/repository/revisions/3110 Log: fixes #3201 Fix TopiaEntityContextable generation and behavior Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/persistence/TopiaEntityContextable.java trunk/topia-persistence/src/main/java/org/nuiton/topia/persistence/internal/AbstractTopiaDao.java trunk/topia-persistence/src/main/java/org/nuiton/topia/persistence/internal/AbstractTopiaEntity.java trunk/topia-persistence/src/main/java/org/nuiton/topia/persistence/internal/support/TopiaHibernateEventListener.java trunk/topia-templates/src/main/java/org/nuiton/topia/templates/EntityTransformer.java Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/persistence/TopiaEntityContextable.java =================================================================== --- trunk/topia-persistence/src/main/java/org/nuiton/topia/persistence/TopiaEntityContextable.java 2014-05-15 16:51:48 UTC (rev 3109) +++ trunk/topia-persistence/src/main/java/org/nuiton/topia/persistence/TopiaEntityContextable.java 2014-05-16 09:28:46 UTC (rev 3110) @@ -70,6 +70,12 @@ TopiaDaoSupplier getTopiaDaoSupplier(); /** + * @return the TopiaDao managing the current entity. It may be null if the current entity isn't managed by ToPIA. + * @since 3.0 + */ + public TopiaDao<?> getGenericEntityDao(); + + /** * @return all objects that must be deleted if this object is deleted * @deprecated from 3.0, method will be moved to entity's generated Dao(cf http://nuiton.org/issues/2776) */ Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/persistence/internal/AbstractTopiaDao.java =================================================================== --- trunk/topia-persistence/src/main/java/org/nuiton/topia/persistence/internal/AbstractTopiaDao.java 2014-05-15 16:51:48 UTC (rev 3109) +++ trunk/topia-persistence/src/main/java/org/nuiton/topia/persistence/internal/AbstractTopiaDao.java 2014-05-16 09:28:46 UTC (rev 3110) @@ -46,6 +46,7 @@ import org.nuiton.topia.persistence.TopiaPersistenceContext; import org.nuiton.topia.persistence.TopiaQueryBuilderAddCriteriaOrRunQueryStep; import org.nuiton.topia.persistence.TopiaQueryBuilderRunQueryStep; +import org.nuiton.topia.persistence.internal.support.TopiaHibernateEventListener; import org.nuiton.topia.persistence.support.TopiaHibernateSupport; import org.nuiton.topia.persistence.support.TopiaJpaSupport; import org.nuiton.topia.persistence.support.TopiaListenableSupport; @@ -168,6 +169,9 @@ getTopiaEntityEnum().getImplementation(); try { E newInstance = implementation.newInstance(); + + TopiaHibernateEventListener.attachContext(newInstance, topiaDaoSupplier); + return newInstance; } catch (InstantiationException e) { throw new TopiaException( Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/persistence/internal/AbstractTopiaEntity.java =================================================================== --- trunk/topia-persistence/src/main/java/org/nuiton/topia/persistence/internal/AbstractTopiaEntity.java 2014-05-15 16:51:48 UTC (rev 3109) +++ trunk/topia-persistence/src/main/java/org/nuiton/topia/persistence/internal/AbstractTopiaEntity.java 2014-05-16 09:28:46 UTC (rev 3110) @@ -24,6 +24,7 @@ * #L% */ +import org.nuiton.topia.persistence.TopiaDaoSupplier; import org.nuiton.topia.persistence.TopiaEntity; import org.nuiton.topia.persistence.TopiaEntityContextable; import org.nuiton.topia.persistence.internal.support.TopiaFiresSupport; @@ -211,8 +212,11 @@ if (fireSupport == null) { if (this instanceof TopiaEntityContextable) { TopiaEntityContextable contextable = (TopiaEntityContextable) this; - AbstractTopiaDao topiaDAO = (AbstractTopiaDao)contextable.getTopiaDaoSupplier().getDao(getClass()); - fireSupport = topiaDAO.getTopiaFiresSupport(); + AbstractTopiaDao entityDao = (AbstractTopiaDao) contextable.getGenericEntityDao(); + // Dao may be null if the entity isn't managed by ToPIA (ie. created via "new XxxImpl()") + if (entityDao != null) { + fireSupport = entityDao.getTopiaFiresSupport(); + } } } return fireSupport; Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/persistence/internal/support/TopiaHibernateEventListener.java =================================================================== --- trunk/topia-persistence/src/main/java/org/nuiton/topia/persistence/internal/support/TopiaHibernateEventListener.java 2014-05-15 16:51:48 UTC (rev 3109) +++ trunk/topia-persistence/src/main/java/org/nuiton/topia/persistence/internal/support/TopiaHibernateEventListener.java 2014-05-16 09:28:46 UTC (rev 3110) @@ -89,7 +89,7 @@ return result; } - private void attachContext(Object entity, + public static void attachContext(Object entity, TopiaDaoSupplier daoSupplier) { if (entity instanceof TopiaEntityContextable) { TopiaEntityContextable topiaEntityContextable = (TopiaEntityContextable) entity; @@ -107,7 +107,7 @@ } } - /* Création */ + /* Création */ @Override public boolean onPreInsert(PreInsertEvent event) { Modified: trunk/topia-templates/src/main/java/org/nuiton/topia/templates/EntityTransformer.java =================================================================== --- trunk/topia-templates/src/main/java/org/nuiton/topia/templates/EntityTransformer.java 2014-05-15 16:51:48 UTC (rev 3109) +++ trunk/topia-templates/src/main/java/org/nuiton/topia/templates/EntityTransformer.java 2014-05-16 09:28:46 UTC (rev 3110) @@ -43,6 +43,7 @@ import org.nuiton.eugene.models.object.ObjectModelOperation; import org.nuiton.eugene.models.object.ObjectModelParameter; import org.nuiton.eugene.models.object.xml.ObjectModelInterfaceImpl; +import org.nuiton.topia.persistence.TopiaDao; import org.nuiton.topia.persistence.TopiaEntityVisitor; import org.nuiton.topia.persistence.internal.AbstractTopiaEntity; import org.nuiton.topia.persistence.TopiaDaoSupplier; @@ -342,6 +343,7 @@ ObjectModelClass outputAbstract) { addImport(outputAbstract, TopiaDaoSupplier.class); + addImport(outputAbstract, TopiaDao.class); // topiaContext attribute ObjectModelAttribute topiaContextAttribute = addAttribute( @@ -369,8 +371,7 @@ ObjectModelJavaModifier.PUBLIC); addException(op, TopiaException.class); addParameter(op, TopiaDaoSupplier.class, "topiaDaoSupplier"); - setDocumentation(op, - "@since 3.0"); + setDocumentation(op, "@since 3.0"); addAnnotation(outputAbstract, op, Override.class); setOperationBody(op, "" /*{ @@ -385,14 +386,27 @@ "getInternalDao", daoClassName, ObjectModelJavaModifier.PROTECTED); setDocumentation(op,"@since 3.0"); - addAnnotation(outputAbstract, op, Override.class); setOperationBody(op, "" /*{ - <%=daoClassName%> result = getTopiaDaoSupplier().getDao(<%=input.getName()%>.class, <%=daoClassName%>); + TopiaDaoSupplier daoSupplier = getTopiaDaoSupplier(); + <%=daoClassName%> result = null; + if (daoSupplier != null) { // This may happend when entity is created manually + result = daoSupplier.getDao(<%=input.getName()%>.class, <%=daoClassName%>.class); + } return result; }*/ ); + op = addOperation(outputAbstract, "getGenericEntityDao", "TopiaDao<?>", + ObjectModelJavaModifier.PUBLIC); + addAnnotation(outputAbstract, op, Override.class); + setDocumentation(op,"@since 3.0"); + setOperationBody(op, "" +/*{ + return getInternalDao(); + }*/ + ); + op = addOperation(outputAbstract, "update", "void", ObjectModelJavaModifier.PUBLIC); addException(op, TopiaException.class);