Author: athimel Date: 2012-06-01 16:20:08 +0200 (Fri, 01 Jun 2012) New Revision: 2572 Url: http://nuiton.org/repositories/revision/topia/2572 Log: fixes #2078 Remove the TopiaContext from TopiaEntityAbstract. Use a tag-value on an entity (not yet model) : contextable=true EntityTransformer will generate TopiaContext relevant methods impl in XXXAbstract. XXXEntity#getComposite() was already deprecated, but now throws an UnsupportedOperationException is the entity is not TopiaEntityContextable. Unfortunatly, there is no other way to get the TopiaContext if the entity is not TopiaEntityContextable, thus TopiaFiresSupport may throw an exception if the entity is not assignable from it. Apply Eugene#107 : Remove attribute and use enum modifiers. Modified: trunk/topia-persistence-hibernate/src/main/java/org/nuiton/topia/framework/TopiaHibernateEntityListener.java trunk/topia-persistence-tck/src/main/xmi/topia-tck-it.zargo trunk/topia-persistence-tck/src/test/java/org/nuiton/topia/tck/it/events/VetoableEventTest.java trunk/topia-persistence/src/main/java/org/nuiton/topia/framework/TopiaContextImpl.java trunk/topia-persistence/src/main/java/org/nuiton/topia/framework/TopiaFiresSupport.java trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/BinderHelperTransformer.java trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/DAOHelperTransformer.java trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/DTOTransformer.java trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityDAOTransformer.java trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityDTOTransformer.java trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityTransformer.java trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/QueryHelperTransformer.java trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/ServiceTransformer.java trunk/topia-persistence/src/main/java/org/nuiton/topia/persistence/TopiaDAOImpl.java trunk/topia-persistence/src/main/java/org/nuiton/topia/persistence/TopiaEntityAbstract.java trunk/topia-service-security/src/main/java/org/nuiton/topia/taas/TaasService.java Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/framework/TopiaContextImpl.java =================================================================== --- trunk/topia-persistence/src/main/java/org/nuiton/topia/framework/TopiaContextImpl.java 2012-06-01 09:29:47 UTC (rev 2571) +++ trunk/topia-persistence/src/main/java/org/nuiton/topia/framework/TopiaContextImpl.java 2012-06-01 14:20:08 UTC (rev 2572) @@ -754,7 +754,7 @@ @Override public void addTopiaEntityVetoable(TopiaEntityVetoable vetoable) { - getFiresSupport().addTopiaEntityVetoable(TopiaEntity.class, vetoable); + getFiresSupport().addTopiaEntityVetoable(vetoable); } @Override Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/framework/TopiaFiresSupport.java =================================================================== --- trunk/topia-persistence/src/main/java/org/nuiton/topia/framework/TopiaFiresSupport.java 2012-06-01 09:29:47 UTC (rev 2571) +++ trunk/topia-persistence/src/main/java/org/nuiton/topia/framework/TopiaFiresSupport.java 2012-06-01 14:20:08 UTC (rev 2572) @@ -42,7 +42,7 @@ import org.nuiton.topia.event.TopiaTransactionListener; import org.nuiton.topia.event.TopiaTransactionVetoable; import org.nuiton.topia.persistence.TopiaEntity; -import org.nuiton.topia.persistence.TopiaEntityAbstract; +import org.nuiton.topia.persistence.TopiaEntityContextable; import org.nuiton.util.CategorisedListenerSet; import org.nuiton.util.ListenerSet; @@ -576,23 +576,22 @@ return result; } - private void attachContext(Object entity, - TopiaContextImplementor context) { - if (entity instanceof TopiaEntityAbstract) { - TopiaEntityAbstract entityAbstract = (TopiaEntityAbstract) entity; - if (entityAbstract.getTopiaContext() == null) { - try { - entityAbstract.setTopiaContext(context); - } catch (TopiaException eee) { - if (log.isWarnEnabled()) { - log.warn("Impossible d'initialiser le TopiaContext" - + " sur cette entité : " + entityAbstract, - eee); - } - } - } - } - } +// private void attachContext(Object entity, +// TopiaContextImplementor context) { +// if (entity instanceof TopiaEntityContextable) { +// TopiaEntityContextable contextable = (TopiaEntityContextable)entity; +// if (contextable.getTopiaContext() == null) { +// try { +// contextable.setTopiaContext(context); +// } catch (TopiaException eee) { +// if (log.isWarnEnabled()) { +// log.warn("Impossible d'initialiser le TopiaContext" +// + " sur cette entité : " + entity, eee); +// } +// } +// } +// } +// } /* Création */ // @@ -913,12 +912,21 @@ /* Adders */ public void addTopiaEntityListener(TopiaEntityListener listener) { - addTopiaEntityListener(TopiaEntity.class, listener); +// addTopiaEntityListener(TopiaEntity.class, listener); + // XXX AThimel 01/06/2012 Throw exception on runtime for the moment to avoid breaking signatures + // XXX AThimel 01/06/2012 This is because the underlying implementation cannot get the TopiaContext when the entity is not contextable + throw new UnsupportedOperationException("Method is not supported in this version, please use #addTopiaEntityListener(TopiaEntityContextable.class, listener);"); } public void addTopiaEntityListener( Class<? extends TopiaEntity> entityClass, TopiaEntityListener listener) { + // XXX AThimel 01/06/2012 Throw exception on runtime for the moment to avoid breaking signatures + // XXX AThimel 01/06/2012 This is because the underlying implementation cannot get the TopiaContext when the entity is not contextable + if (!TopiaEntityContextable.class.isAssignableFrom(entityClass)) { + throw new IllegalStateException( + "Entity is not a TopiaEntityContextable : " + entityClass.getName()); + } if (listener == null) { throw new NullPointerException("Listener can not be null."); } @@ -926,12 +934,21 @@ } public void addTopiaEntityVetoable(TopiaEntityVetoable vetoable) { - addTopiaEntityVetoable(TopiaEntity.class, vetoable); +// addTopiaEntityVetoable(TopiaEntity.class, vetoable); + // XXX AThimel 01/06/2012 Throw exception on runtime for the moment to avoid breaking signatures + // XXX AThimel 01/06/2012 This is because the underlying implementation cannot get the TopiaContext when the entity is not contextable + throw new UnsupportedOperationException("Method is not supported in this version, please use #addTopiaEntityVetoable(TopiaEntityContextable.class, vetoable);"); } public void addTopiaEntityVetoable( Class<? extends TopiaEntity> entityClass, TopiaEntityVetoable vetoable) { + // XXX AThimel 01/06/2012 Throw exception on runtime for the moment to avoid breaking signatures + // XXX AThimel 01/06/2012 This is because the underlying implementation cannot get the TopiaContext when the entity is not contextable + if (!TopiaEntityContextable.class.isAssignableFrom(entityClass)) { + throw new IllegalStateException( + "Entity is not a TopiaEntityContextable : " + entityClass.getName()); + } if (vetoable == null) { throw new NullPointerException("Listener can not be null."); } Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/BinderHelperTransformer.java =================================================================== --- trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/BinderHelperTransformer.java 2012-06-01 09:29:47 UTC (rev 2571) +++ trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/BinderHelperTransformer.java 2012-06-01 14:20:08 UTC (rev 2572) @@ -93,8 +93,8 @@ op = addOperation(resultClass, "getTopiaBinder", "<E extends TopiaEntity> TopiaEntityBinder<E>", - ObjectModelModifier.PUBLIC, - ObjectModelModifier.STATIC); + ObjectModelJavaModifier.PUBLIC, + ObjectModelJavaModifier.STATIC); addParameter(op, "Class<E>", "entityClass"); addParameter(op, "String", "contextName"); setOperationBody(op, "" @@ -106,8 +106,8 @@ op = addOperation(resultClass, "getSimpleTopiaBinder", "<E extends TopiaEntity> TopiaEntityBinder<E>", - ObjectModelModifier.PUBLIC, - ObjectModelModifier.STATIC); + ObjectModelJavaModifier.PUBLIC, + ObjectModelJavaModifier.STATIC); addParameter(op, "Class<E>", "entityClass"); setOperationBody(op, "" /*{ @@ -118,8 +118,8 @@ op = addOperation(resultClass, "registerTopiaBinder", "void", - ObjectModelModifier.PUBLIC, - ObjectModelModifier.STATIC); + ObjectModelJavaModifier.PUBLIC, + ObjectModelJavaModifier.STATIC); addParameter(op, "BinderModelBuilder", "builder"); addParameter(op, "String", "contextName"); setOperationBody(op, "" @@ -131,8 +131,8 @@ op = addOperation(resultClass, "registerTopiaBinder", "<E extends TopiaEntity> TopiaEntityBinder<E>", - ObjectModelModifier.PUBLIC, - ObjectModelModifier.STATIC); + ObjectModelJavaModifier.PUBLIC, + ObjectModelJavaModifier.STATIC); addParameter(op, "Class<E>", "entityClass"); addParameter(op, "BinderModelBuilder", "builder"); addParameter(op, "String", "contextName"); @@ -146,8 +146,8 @@ op = addOperation(resultClass, "copy", "<E extends TopiaEntity> void", - ObjectModelModifier.PUBLIC, - ObjectModelModifier.STATIC); + ObjectModelJavaModifier.PUBLIC, + ObjectModelJavaModifier.STATIC); addParameter(op, "String", "contextName"); addParameter(op, "E", "source"); addParameter(op, "E", "target"); @@ -166,8 +166,8 @@ op = addOperation(resultClass, "simpleCopy", "<E extends TopiaEntity> void", - ObjectModelModifier.PUBLIC, - ObjectModelModifier.STATIC); + ObjectModelJavaModifier.PUBLIC, + ObjectModelJavaModifier.STATIC); addParameter(op, "E", "source"); addParameter(op, "E", "target"); addParameter(op, "boolean", "tech"); @@ -202,10 +202,10 @@ } - op = addOperation(resultClass, "initBinders", "void", ObjectModelModifier.PROTECTED, ObjectModelModifier.STATIC); + op = addOperation(resultClass, "initBinders", "void", ObjectModelJavaModifier.PROTECTED, ObjectModelJavaModifier.STATIC); setOperationBody(op, initCode.toString()); - op = addOperation(resultClass, null, (String) null, ObjectModelModifier.STATIC); + op = addOperation(resultClass, null, (String) null, ObjectModelJavaModifier.STATIC); setOperationBody(op, "" /*{ initBinders(); Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/DAOHelperTransformer.java =================================================================== --- trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/DAOHelperTransformer.java 2012-06-01 09:29:47 UTC (rev 2571) +++ trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/DAOHelperTransformer.java 2012-06-01 14:20:08 UTC (rev 2572) @@ -156,13 +156,13 @@ // add non public constructor ObjectModelOperation constructor = - addConstructor(daoHelper, ObjectModelModifier.PROTECTED); + addConstructor(daoHelper, ObjectModelJavaModifier.PROTECTED); setOperationBody(constructor," "); ObjectModelOperation op; // getModelVersion method - op = addOperation(daoHelper, "getModelVersion", "String", ObjectModelModifier.PUBLIC, ObjectModelModifier.STATIC); + op = addOperation(daoHelper, "getModelVersion", "String", ObjectModelJavaModifier.PUBLIC, ObjectModelJavaModifier.STATIC); setOperationBody(op, "" /*{ return "<%=modelVersion%>"; @@ -170,7 +170,7 @@ ); // getModelName method - op = addOperation(daoHelper, "getModelName", "String", ObjectModelModifier.PUBLIC, ObjectModelModifier.STATIC); + op = addOperation(daoHelper, "getModelName", "String", ObjectModelJavaModifier.PUBLIC, ObjectModelJavaModifier.STATIC); setOperationBody(op, "" /*{ return "<%=modelName%>"; @@ -183,7 +183,7 @@ String daoClazzName = clazzName + "DAO"; // specialized getXXXDao method - op = addOperation(daoHelper, "get" + daoClazzName, clazz.getPackageName() + '.' + daoClazzName, ObjectModelModifier.PUBLIC, ObjectModelModifier.STATIC); + op = addOperation(daoHelper, "get" + daoClazzName, clazz.getPackageName() + '.' + daoClazzName, ObjectModelJavaModifier.PUBLIC, ObjectModelJavaModifier.STATIC); addParameter(op, TopiaContext.class, "context"); addImport(daoHelper, clazz); addException(op, TopiaException.class); @@ -198,7 +198,7 @@ } // generic getDao method - op = addOperation(daoHelper, "getDAO", "<T extends TopiaEntity, D extends TopiaDAO<? super T>> D", ObjectModelModifier.PUBLIC, ObjectModelModifier.STATIC); + op = addOperation(daoHelper, "getDAO", "<T extends TopiaEntity, D extends TopiaDAO<? super T>> D", ObjectModelJavaModifier.PUBLIC, ObjectModelJavaModifier.STATIC); addParameter(op, TopiaContext.class, "context"); addParameter(op, "Class<T>", "klass"); addException(op, TopiaException.class); @@ -211,7 +211,7 @@ }*/ ); - op = addOperation(daoHelper, "getDAO", "<T extends TopiaEntity, D extends TopiaDAO<? super T>> D", ObjectModelModifier.PUBLIC, ObjectModelModifier.STATIC); + op = addOperation(daoHelper, "getDAO", "<T extends TopiaEntity, D extends TopiaDAO<? super T>> D", ObjectModelJavaModifier.PUBLIC, ObjectModelJavaModifier.STATIC); addParameter(op, TopiaContext.class, "context"); addParameter(op, "T", "entity"); addException(op, TopiaException.class); @@ -225,7 +225,7 @@ ); // getContractClass method - op = addOperation(daoHelper, "getContractClass", "<T extends TopiaEntity> Class<T>", ObjectModelModifier.PUBLIC, ObjectModelModifier.STATIC); + op = addOperation(daoHelper, "getContractClass", "<T extends TopiaEntity> Class<T>", ObjectModelJavaModifier.PUBLIC, ObjectModelJavaModifier.STATIC); addParameter(op, "Class<T>", "klass"); setOperationBody(op, "" /*{ @@ -235,7 +235,7 @@ ); // getImplementationClass method - op = addOperation(daoHelper, "getImplementationClass", "<T extends TopiaEntity> Class<T>", ObjectModelModifier.PUBLIC, ObjectModelModifier.STATIC); + op = addOperation(daoHelper, "getImplementationClass", "<T extends TopiaEntity> Class<T>", ObjectModelJavaModifier.PUBLIC, ObjectModelJavaModifier.STATIC); addParameter(op, "Class<T>", "klass"); setOperationBody(op, "" /*{ @@ -245,7 +245,7 @@ ); // getContractClasses method - op = addOperation(daoHelper, "getContractClasses", "Class<? extends TopiaEntity>[]", ObjectModelModifier.PUBLIC, ObjectModelModifier.STATIC); + op = addOperation(daoHelper, "getContractClasses", "Class<? extends TopiaEntity>[]", ObjectModelJavaModifier.PUBLIC, ObjectModelJavaModifier.STATIC); setOperationBody(op, "" /*{ <%=entityEnumName%>[] values = <%=entityEnumName%>.values(); @@ -258,7 +258,7 @@ ); // getImplementationClasses method - op = addOperation(daoHelper, "getImplementationClasses", "Class<? extends TopiaEntity>[]", ObjectModelModifier.PUBLIC, ObjectModelModifier.STATIC); + op = addOperation(daoHelper, "getImplementationClasses", "Class<? extends TopiaEntity>[]", ObjectModelJavaModifier.PUBLIC, ObjectModelJavaModifier.STATIC); setOperationBody(op, "" /*{ <%=entityEnumName%>[] values = <%=entityEnumName%>.values(); @@ -271,7 +271,7 @@ ); // getImplementationClassesAsString method - op = addOperation(daoHelper, "getImplementationClassesAsString", "String", ObjectModelModifier.PUBLIC, ObjectModelModifier.STATIC); + op = addOperation(daoHelper, "getImplementationClassesAsString", "String", ObjectModelJavaModifier.PUBLIC, ObjectModelJavaModifier.STATIC); setOperationBody(op, "" /*{ StringBuilder buffer = new StringBuilder(); @@ -283,7 +283,7 @@ ); // getContracts method - op = addOperation(daoHelper, "getContracts", entityEnumName+"[]", ObjectModelModifier.PUBLIC, ObjectModelModifier.STATIC); + op = addOperation(daoHelper, "getContracts", entityEnumName+"[]", ObjectModelJavaModifier.PUBLIC, ObjectModelJavaModifier.STATIC); setOperationBody(op, "" /*{ return <%=entityEnumName%>.values(); @@ -292,7 +292,7 @@ if (generateOperator) { // getOperator method - op = addOperation(daoHelper, "getOperator", "<T extends TopiaEntity> EntityOperator<T>", ObjectModelModifier.PUBLIC, ObjectModelModifier.STATIC); + op = addOperation(daoHelper, "getOperator", "<T extends TopiaEntity> EntityOperator<T>", ObjectModelJavaModifier.PUBLIC, ObjectModelJavaModifier.STATIC); addParameter(op,"Class<T>","klass"); setOperationBody(op, "" /*{ @@ -367,7 +367,7 @@ attr.setDocumentation("The array of not null properties of the entity."); // constructor - op = addConstructor(entityEnum, ObjectModelModifier.PACKAGE); + op = addConstructor(entityEnum, ObjectModelJavaModifier.PACKAGE); addParameter(op,"Class<? extends TopiaEntity >","contract"); addParameter(op,"String[]","notNulls"); addParameter(op,"String...","naturalIds"); @@ -381,7 +381,7 @@ ); // getContract method - op = addOperation(entityEnum, "getContract", "Class<? extends TopiaEntity>", ObjectModelModifier.PUBLIC); + op = addOperation(entityEnum, "getContract", "Class<? extends TopiaEntity>", ObjectModelJavaModifier.PUBLIC); addAnnotation(entityEnum,op,Override.class.getSimpleName()); setOperationBody(op, "" /*{ @@ -390,7 +390,7 @@ ); // getNaturalIds method - op = addOperation(entityEnum, "getNaturalIds", "String[]", ObjectModelModifier.PUBLIC); + op = addOperation(entityEnum, "getNaturalIds", "String[]", ObjectModelJavaModifier.PUBLIC); addAnnotation(entityEnum,op,Override.class.getSimpleName()); setOperationBody(op, "" /*{ @@ -399,7 +399,7 @@ ); // isUseNaturalIds method - op = addOperation(entityEnum, "isUseNaturalIds", "boolean", ObjectModelModifier.PUBLIC); + op = addOperation(entityEnum, "isUseNaturalIds", "boolean", ObjectModelJavaModifier.PUBLIC); addAnnotation(entityEnum,op,Override.class.getSimpleName()); setOperationBody(op, "" /*{ @@ -408,7 +408,7 @@ ); // getNotNulls method - op = addOperation(entityEnum, "getNotNulls", "String[]", ObjectModelModifier.PUBLIC); + op = addOperation(entityEnum, "getNotNulls", "String[]", ObjectModelJavaModifier.PUBLIC); addAnnotation(entityEnum,op,Override.class.getSimpleName()); setOperationBody(op, "" /*{ @@ -417,7 +417,7 @@ ); // isUseNotNulls method - op = addOperation(entityEnum, "isUseNotNulls", "boolean", ObjectModelModifier.PUBLIC); + op = addOperation(entityEnum, "isUseNotNulls", "boolean", ObjectModelJavaModifier.PUBLIC); addAnnotation(entityEnum,op,Override.class.getSimpleName()); setOperationBody(op, "" /*{ @@ -426,7 +426,7 @@ ); // getImplementationFQN method - op = addOperation(entityEnum, "getImplementationFQN","String",ObjectModelModifier.PUBLIC); + op = addOperation(entityEnum, "getImplementationFQN","String",ObjectModelJavaModifier.PUBLIC); addAnnotation(entityEnum,op,Override.class.getSimpleName()); setOperationBody(op, "" /*{ @@ -435,7 +435,7 @@ ); // setImplementationFQN method - op = addOperation(entityEnum, "setImplementationFQN","void",ObjectModelModifier.PUBLIC); + op = addOperation(entityEnum, "setImplementationFQN","void",ObjectModelJavaModifier.PUBLIC); addAnnotation(entityEnum,op,Override.class.getSimpleName()); addParameter(op,"String","implementationFQN"); if (generateOperator) { @@ -457,7 +457,7 @@ } // accept method - op = addOperation(entityEnum, "accept","boolean",ObjectModelModifier.PUBLIC); + op = addOperation(entityEnum, "accept","boolean",ObjectModelJavaModifier.PUBLIC); addAnnotation(entityEnum,op,Override.class.getSimpleName()); addParameter(op,"Class<? extends TopiaEntity>","klass"); setOperationBody(op, "" @@ -467,7 +467,7 @@ ); // getImplementation method - op = addOperation(entityEnum, "getImplementation","Class<? extends TopiaEntity>",ObjectModelModifier.PUBLIC); + op = addOperation(entityEnum, "getImplementation","Class<? extends TopiaEntity>",ObjectModelJavaModifier.PUBLIC); addAnnotation(entityEnum,op,Override.class.getSimpleName()); setOperationBody(op, "" /*{ @@ -483,7 +483,7 @@ ); // valueOf method - op = addOperation(entityEnum, "valueOf", entityEnumName, ObjectModelModifier.PUBLIC,ObjectModelModifier.STATIC); + op = addOperation(entityEnum, "valueOf", entityEnumName, ObjectModelJavaModifier.PUBLIC,ObjectModelJavaModifier.STATIC); addParameter(op,"TopiaEntity","entity"); setOperationBody(op, "" /*{ @@ -492,7 +492,7 @@ ); // valueOf method - op = addOperation(entityEnum, "valueOf", entityEnumName, ObjectModelModifier.PUBLIC,ObjectModelModifier.STATIC); + op = addOperation(entityEnum, "valueOf", entityEnumName, ObjectModelJavaModifier.PUBLIC,ObjectModelJavaModifier.STATIC); addParameter(op,"Class<?>","klass"); setOperationBody(op, "" /*{ Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/DTOTransformer.java =================================================================== --- trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/DTOTransformer.java 2012-06-01 09:29:47 UTC (rev 2571) +++ trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/DTOTransformer.java 2012-06-01 14:20:08 UTC (rev 2572) @@ -102,10 +102,10 @@ String svUID = TopiaGeneratorUtil.findTagValue("dto-serialVersionUID", clazz, model); if (StringUtils.isNotEmpty(svUID)) { - addAttribute(result, "serialVersionUID", long.class, svUID, ObjectModelModifier.FINAL, ObjectModelModifier.PUBLIC, ObjectModelModifier.STATIC); + addAttribute(result, "serialVersionUID", long.class, svUID, ObjectModelJavaModifier.FINAL, ObjectModelJavaModifier.PUBLIC, ObjectModelJavaModifier.STATIC); } - addAttribute(result, "p", PropertyChangeSupport.class, null, ObjectModelModifier.PROTECTED); + addAttribute(result, "p", PropertyChangeSupport.class, null, ObjectModelJavaModifier.PROTECTED); /* * Définition des attributs @@ -171,7 +171,7 @@ } } - attr2 = addAttribute(result, attributeName, attributeType, null, ObjectModelModifier.PROTECTED); + attr2 = addAttribute(result, attributeName, attributeType, null, ObjectModelJavaModifier.PROTECTED); if (attr2 != null) { if (TopiaGeneratorUtil.hasDocumentation(attr)) { @@ -204,7 +204,7 @@ protected void addOperations(ObjectModelClass result, ObjectModelClass clazz) { ObjectModelOperation op; - op = addOperation(result, "addPropertyChangeListener", "void", ObjectModelModifier.PUBLIC); + op = addOperation(result, "addPropertyChangeListener", "void", ObjectModelJavaModifier.PUBLIC); addParameter(op, PropertyChangeListener.class, "listener"); setOperationBody(op, "" /*{ @@ -212,7 +212,7 @@ }*/ ); - op = addOperation(result, "addPropertyChangeListener", "void", ObjectModelModifier.PUBLIC); + op = addOperation(result, "addPropertyChangeListener", "void", ObjectModelJavaModifier.PUBLIC); addParameter(op, String.class, "propertyName"); addParameter(op, PropertyChangeListener.class, "listener"); setOperationBody(op, "" @@ -221,7 +221,7 @@ }*/ ); - op = addOperation(result, "removePropertyChangeListener", "void", ObjectModelModifier.PUBLIC); + op = addOperation(result, "removePropertyChangeListener", "void", ObjectModelJavaModifier.PUBLIC); addParameter(op, PropertyChangeListener.class, "listener"); setOperationBody(op, "" /*{ @@ -229,7 +229,7 @@ }*/ ); - op = addOperation(result, "removePropertyChangeListener", "void", ObjectModelModifier.PUBLIC); + op = addOperation(result, "removePropertyChangeListener", "void", ObjectModelJavaModifier.PUBLIC); addParameter(op, String.class, "propertyName"); addParameter(op, PropertyChangeListener.class, "listener"); setOperationBody(op, "" @@ -258,7 +258,7 @@ if (!GeneratorUtil.isNMultiplicity(attr)) { if (!attr.hasAssociationClass()) { - op = addOperation(result, "set" + StringUtils.capitalize(attrName), "void", ObjectModelModifier.PUBLIC); + op = addOperation(result, "set" + StringUtils.capitalize(attrName), "void", ObjectModelJavaModifier.PUBLIC); addParameter(op, attrTypeDTO, "value"); setOperationBody(op, "" /*{ @@ -268,7 +268,7 @@ }*/ ); - op = addOperation(result, "get" + StringUtils.capitalize(attrName), attrTypeDTO, ObjectModelModifier.PUBLIC); + op = addOperation(result, "get" + StringUtils.capitalize(attrName), attrTypeDTO, ObjectModelJavaModifier.PUBLIC); setOperationBody(op, "" /*{ return <%=attrName%>; @@ -281,7 +281,7 @@ if (log.isTraceEnabled()) { log.trace("assocAttrName: " + assocAttrName); } - op = addOperation(result, "set" + StringUtils.capitalize(assocAttrName), "void", ObjectModelModifier.PUBLIC); + op = addOperation(result, "set" + StringUtils.capitalize(assocAttrName), "void", ObjectModelJavaModifier.PUBLIC); addParameter(op, assocClassFQN + "DTO", "association"); setOperationBody(op, "" /*{ @@ -291,7 +291,7 @@ }*/ ); - op = addOperation(result, "get" + StringUtils.capitalize(assocAttrName), assocClassFQN + "DTO", ObjectModelModifier.PUBLIC); + op = addOperation(result, "get" + StringUtils.capitalize(assocAttrName), assocClassFQN + "DTO", ObjectModelJavaModifier.PUBLIC); setOperationBody(op, "" /*{ return <%=GeneratorUtil.toLowerCaseFirstLetter(assocAttrName)%>; @@ -307,7 +307,7 @@ } else { nMultType = Collection.class.getName() + "<" + attrTypeDTO + ">"; } - op = addOperation(result, "set" + StringUtils.capitalize(attrName), "void", ObjectModelModifier.PUBLIC); + op = addOperation(result, "set" + StringUtils.capitalize(attrName), "void", ObjectModelJavaModifier.PUBLIC); addParameter(op, nMultType, "values"); setOperationBody(op, "" /*{ @@ -317,7 +317,7 @@ }*/ ); - op = addOperation(result, "addChild" + StringUtils.capitalize(attrName), attrTypeDTO, ObjectModelModifier.PUBLIC); + op = addOperation(result, "addChild" + StringUtils.capitalize(attrName), attrTypeDTO, ObjectModelJavaModifier.PUBLIC); addParameter(op, attrTypeDTO, attrName); StringBuilder buffercode = new StringBuilder(); @@ -416,7 +416,7 @@ } } - op = addOperation(result, "toString", String.class, ObjectModelModifier.PUBLIC); + op = addOperation(result, "toString", String.class, ObjectModelJavaModifier.PUBLIC); StringBuilder buffer = new StringBuilder(); buffer.append("" 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-06-01 09:29:47 UTC (rev 2571) +++ trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityDAOTransformer.java 2012-06-01 14:20:08 UTC (rev 2572) @@ -42,7 +42,7 @@ 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.ObjectModelJavaModifier; import org.nuiton.eugene.models.object.ObjectModelOperation; import org.nuiton.topia.TopiaException; import org.nuiton.topia.framework.TopiaContextImplementor; @@ -388,7 +388,7 @@ op = addOperation(daoAbstractClass, "getEntityClass", "Class<E>", - ObjectModelModifier.PUBLIC); + ObjectModelJavaModifier.PUBLIC); addAnnotation(daoAbstractClass, op,Override.class.getSimpleName()); setOperationBody(op, "" /*{ @@ -401,7 +401,7 @@ op = addOperation(daoAbstractClass, "getTopiaEntityEnum", entityEnumName, - ObjectModelModifier.PUBLIC); + ObjectModelJavaModifier.PUBLIC); addAnnotation(daoAbstractClass, op,Override.class.getSimpleName()); setOperationBody(op, "" /*{ @@ -454,7 +454,7 @@ op = addOperation(daoAbstractClass, "getRequestPermission", "List<Permission>", - ObjectModelModifier.PUBLIC); + ObjectModelJavaModifier.PUBLIC); // setDocumentation(op, "Retourne les permissions a verifier pour " + // "l'acces a l'entite pour le service Taas"); addException(op, TopiaException.class); @@ -510,7 +510,7 @@ op = addOperation(daoAbstractClass, "getRequestPermission", "List<Permission>", - ObjectModelModifier.PROTECTED); + ObjectModelJavaModifier.PROTECTED); addParameter(op, String.class, "topiaId"); addParameter(op, int.class, "actions"); addParameter(op, String.class, "query"); @@ -662,7 +662,7 @@ if (body.length()>0) { // something specific was done, need to generate the method ObjectModelOperation op; - op = addOperation(result, "delete", "void", ObjectModelModifier.PUBLIC); + op = addOperation(result, "delete", "void", ObjectModelJavaModifier.PUBLIC); addAnnotation(result, op,Override.class.getSimpleName()); addException(op, TopiaException.class); addParameter(op, "E", "entity"); @@ -695,7 +695,7 @@ operation = addOperation(result, "findUsages", "<U extends TopiaEntity> List<U>", - ObjectModelModifier.PUBLIC); + ObjectModelJavaModifier.PUBLIC); addParameter(operation, "Class<U>", "type"); addParameter(operation, "E", "entity"); @@ -710,7 +710,7 @@ operation = addOperation(result, "findAllUsages", "Map<Class<? extends TopiaEntity>, List<? extends TopiaEntity>>", - ObjectModelModifier.PUBLIC); + ObjectModelJavaModifier.PUBLIC); addParameter(operation, "E", "entity"); addException(operation, TopiaException.class); @@ -738,7 +738,7 @@ operation = addOperation(result, "findUsages", "<U extends TopiaEntity> List<U>", - ObjectModelModifier.PUBLIC); + ObjectModelJavaModifier.PUBLIC); addParameter(operation, "Class<U>", "type"); addParameter(operation, "E", "entity"); @@ -821,7 +821,7 @@ operation = addOperation(result, "findAllUsages", "Map<Class<? extends TopiaEntity>, List<? extends TopiaEntity>>", - ObjectModelModifier.PUBLIC); + ObjectModelJavaModifier.PUBLIC); addParameter(operation, "E", "entity"); addException(operation, TopiaException.class); @@ -883,8 +883,8 @@ cloneOperation(op, result, true, - ObjectModelModifier.ABSTRACT, - ObjectModelModifier.toValue(op.getVisibility()) + ObjectModelJavaModifier.ABSTRACT, + ObjectModelJavaModifier.fromVisibility(op.getVisibility()) ); } } @@ -956,7 +956,7 @@ op = addOperation(result, getJavaBeanMethodName("findBy", attrName), "E", - ObjectModelModifier.PUBLIC); + ObjectModelJavaModifier.PUBLIC); addException(op, TopiaException.class); addParameter(op, attrType, "v"); setOperationBody(op, "" @@ -969,7 +969,7 @@ op = addOperation(result, getJavaBeanMethodName("findAllBy", attrName), "List<E>", - ObjectModelModifier.PUBLIC); + ObjectModelJavaModifier.PUBLIC); addException(op, TopiaException.class); addParameter(op, attrType, "v"); setOperationBody(op, "" @@ -985,7 +985,7 @@ op = addOperation(result, getJavaBeanMethodName("findBy", assocClassName), "E", - ObjectModelModifier.PUBLIC); + ObjectModelJavaModifier.PUBLIC); addException(op, TopiaException.class); addParameter(op, assocClassFQN, "value"); setOperationBody(op, "" @@ -998,7 +998,7 @@ op = addOperation(result, getJavaBeanMethodName("findAllBy", assocClassName), "List<E>", - ObjectModelModifier.PUBLIC); + ObjectModelJavaModifier.PUBLIC); addException(op, TopiaException.class); addParameter(op, assocClassFQN, "value"); setOperationBody(op, "" @@ -1024,7 +1024,7 @@ op = addOperation(result, getJavaBeanMethodName("findContains", attrName), "E", - ObjectModelModifier.PUBLIC); + ObjectModelJavaModifier.PUBLIC); addException(op, TopiaException.class); addParameter(op, attrType, "v"); setOperationBody(op, "" @@ -1037,7 +1037,7 @@ op = addOperation(result, getJavaBeanMethodName("findAllContains", attrName), "List<E>", - ObjectModelModifier.PUBLIC); + ObjectModelJavaModifier.PUBLIC); addException(op, TopiaException.class); addParameter(op, attrType, "v"); setOperationBody(op, "" @@ -1094,15 +1094,15 @@ log.debug("generateNaturalId for " + props); } ObjectModelOperation findByNaturalId = addOperation(result, - "findByNaturalId", "E", ObjectModelModifier.PUBLIC); + "findByNaturalId", "E", ObjectModelJavaModifier.PUBLIC); addException(findByNaturalId, TopiaException.class); ObjectModelOperation existByNaturalId = addOperation(result, - "existByNaturalId", "boolean", ObjectModelModifier.PUBLIC); + "existByNaturalId", "boolean", ObjectModelJavaModifier.PUBLIC); addException(existByNaturalId, TopiaException.class); ObjectModelOperation createByNaturalId = addOperation(result, - "createByNaturalId", "E", ObjectModelModifier.PUBLIC); + "createByNaturalId", "E", ObjectModelJavaModifier.PUBLIC); addException(createByNaturalId, TopiaException.class); @@ -1159,7 +1159,7 @@ } ObjectModelOperation createByNotNull = addOperation(result, - "createByNotNull", "E", ObjectModelModifier.PUBLIC); + "createByNotNull", "E", ObjectModelJavaModifier.PUBLIC); addException(createByNotNull, TopiaException.class); Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityDTOTransformer.java =================================================================== --- trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityDTOTransformer.java 2012-06-01 09:29:47 UTC (rev 2571) +++ trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityDTOTransformer.java 2012-06-01 14:20:08 UTC (rev 2572) @@ -33,7 +33,7 @@ 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.ObjectModelModifier; +import org.nuiton.eugene.models.object.ObjectModelJavaModifier; import org.nuiton.eugene.models.object.ObjectModelOperation; import java.beans.PropertyChangeListener; @@ -100,7 +100,7 @@ String svUID = TopiaGeneratorUtil.findTagValue("dto-serialVersionUID", clazz, model); if (svUID != null) { - addAttribute(result, "serialVersionUID", "long", svUID, ObjectModelModifier.FINAL, ObjectModelModifier.PUBLIC, ObjectModelModifier.STATIC); + addAttribute(result, "serialVersionUID", "long", svUID, ObjectModelJavaModifier.FINAL, ObjectModelJavaModifier.PUBLIC, ObjectModelJavaModifier.STATIC); } boolean generateDTOId = shouldGenerateDTOTopiaIdTagValue(clazz, model); @@ -122,7 +122,7 @@ } String attrVisibility = attr.getVisibility(); - ObjectModelModifier modifier = ObjectModelModifier.toValue(attrVisibility); + ObjectModelJavaModifier modifier = ObjectModelJavaModifier.fromVisibility(attrVisibility); if (!attr.hasAssociationClass()) { String attrType = attr.getType(); String attrName = attr.getName(); @@ -161,7 +161,7 @@ for (ObjectModelAttribute attr : assoc.getParticipantsAttributes()) { if (attr != null) { String attrVisibility = attr.getVisibility(); - ObjectModelModifier modifier = ObjectModelModifier.toValue(attrVisibility); + ObjectModelJavaModifier modifier = ObjectModelJavaModifier.fromVisibility(attrVisibility); String attrType = attr.getType(); String attrName = attr.getName(); if (isEntity(attrType)) { @@ -172,7 +172,7 @@ } } - addAttribute(result,"p", PropertyChangeSupport.class,"new PropertyChangeSupport(this)",ObjectModelModifier.PROTECTED,ObjectModelModifier.FINAL); + addAttribute(result,"p", PropertyChangeSupport.class,"new PropertyChangeSupport(this)",ObjectModelJavaModifier.PROTECTED,ObjectModelJavaModifier.FINAL); } protected void addOperations(ObjectModelClass result,ObjectModelClass clazz) { @@ -180,7 +180,7 @@ boolean generateDTOId = shouldGenerateDTOTopiaIdTagValue(clazz, model); ObjectModelOperation op; if (generateDTOId) { - op = addOperation(result, "setTopiaId", "void", ObjectModelModifier.PUBLIC); + op = addOperation(result, "setTopiaId", "void", ObjectModelJavaModifier.PUBLIC); addParameter(op, "String", "topiaId"); setOperationBody(op, "" /*{ @@ -188,7 +188,7 @@ }*/ ); - op = addOperation(result, "getTopiaId", "String", ObjectModelModifier.PUBLIC); + op = addOperation(result, "getTopiaId", "String", ObjectModelJavaModifier.PUBLIC); setOperationBody(op, "" /*{ return topiaId; @@ -248,7 +248,7 @@ String setterName = getJavaBeanMethodName("set", attrName); String getterName = getJavaBeanMethodName("get", attrName); if (!GeneratorUtil.isNMultiplicity(attr)) { - op = addOperation(result, setterName, "void", ObjectModelModifier.PUBLIC); + op = addOperation(result, setterName, "void", ObjectModelJavaModifier.PUBLIC); addParameter(op, attrType, "value"); setOperationBody(op, "" /*{ @@ -258,7 +258,7 @@ }*/ ); - op = addOperation(result, getterName, attrType, ObjectModelModifier.PUBLIC); + op = addOperation(result, getterName, attrType, ObjectModelJavaModifier.PUBLIC); setOperationBody(op, "" /*{ return <%=attrName%>; @@ -267,7 +267,7 @@ } else { - op = addOperation(result, setterName, "void", ObjectModelModifier.PUBLIC); + op = addOperation(result, setterName, "void", ObjectModelJavaModifier.PUBLIC); addParameter(op, attrType+"[]", "values"); setOperationBody(op, "" /*{ @@ -277,7 +277,7 @@ }*/ ); - op = addOperation(result, getterName, attrType+"[]", ObjectModelModifier.PUBLIC); + op = addOperation(result, getterName, attrType+"[]", ObjectModelJavaModifier.PUBLIC); setOperationBody(op, "" /*{ return <%=attrName%>; @@ -291,7 +291,7 @@ String setterName = getJavaBeanMethodName("set", assocAttrName); String getterName = getJavaBeanMethodName("get", assocAttrName); if (!GeneratorUtil.isNMultiplicity(attr)) { - op = addOperation(result, setterName, "void", ObjectModelModifier.PUBLIC); + op = addOperation(result, setterName, "void", ObjectModelJavaModifier.PUBLIC); addParameter(op, assocClassFQN + "DTO", "association"); setOperationBody(op, "" /*{ @@ -301,7 +301,7 @@ }*/ ); - op = addOperation(result, getterName, assocClassFQN + "DTO", ObjectModelModifier.PUBLIC); + op = addOperation(result, getterName, assocClassFQN + "DTO", ObjectModelJavaModifier.PUBLIC); setOperationBody(op, "" /*{ return <%=propertyName%>; @@ -309,7 +309,7 @@ ); } else { - op = addOperation(result, setterName, "void", ObjectModelModifier.PUBLIC); + op = addOperation(result, setterName, "void", ObjectModelJavaModifier.PUBLIC); addParameter(op, assocClassFQN + "DTO[]", "values"); setOperationBody(op, "" /*{ @@ -319,7 +319,7 @@ }*/ ); - op = addOperation(result, getterName, assocClassFQN + "DTO[]", ObjectModelModifier.PUBLIC); + op = addOperation(result, getterName, assocClassFQN + "DTO[]", ObjectModelJavaModifier.PUBLIC); setOperationBody(op, "" /*{ return this.<%=propertyName%>; @@ -329,7 +329,7 @@ } } - op = addOperation(result,"toString",String.class, ObjectModelModifier.PUBLIC); + op = addOperation(result,"toString",String.class, ObjectModelJavaModifier.PUBLIC); StringBuilder buffer = new StringBuilder(); buffer.append("" Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityTransformer.java =================================================================== --- trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityTransformer.java 2012-06-01 09:29:47 UTC (rev 2571) +++ trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityTransformer.java 2012-06-01 14:20:08 UTC (rev 2572) @@ -35,9 +35,10 @@ import org.nuiton.eugene.models.object.ObjectModelClass; import org.nuiton.eugene.models.object.ObjectModelClassifier; import org.nuiton.eugene.models.object.ObjectModelInterface; -import org.nuiton.eugene.models.object.ObjectModelModifier; +import org.nuiton.eugene.models.object.ObjectModelJavaModifier; import org.nuiton.eugene.models.object.ObjectModelOperation; import org.nuiton.eugene.models.object.ObjectModelParameter; +import org.nuiton.topia.TopiaContext; import org.nuiton.topia.TopiaException; import org.nuiton.topia.framework.TopiaContextImplementor; import org.nuiton.topia.framework.TopiaUtil; @@ -309,10 +310,17 @@ if (TopiaGeneratorUtil.isContextable(input)) { interfaze = TopiaEntityContextable.class; } - + addInterface(interfaceAlreadyDone, outputInterface, interfaze); + + } else if (TopiaGeneratorUtil.isContextable(input)) { + // Even if there is no need to implement TopiaEntity, it might be + // necessary to implement TopiaEntityContextable + addInterface(interfaceAlreadyDone, + outputInterface, + TopiaEntityContextable.class); } } @@ -385,7 +393,7 @@ svUID = TopiaGeneratorUtil.generateSerialVersionUID(ouput) + "L"; } addConstant(ouput, TopiaGeneratorUtil.SERIAL_VERSION_UID, long.class, svUID, - ObjectModelModifier.PRIVATE); + ObjectModelJavaModifier.PRIVATE); } protected boolean isGenerateInterface(ObjectModelClass input) { @@ -450,7 +458,7 @@ ObjectModelAttribute attribute = addAttribute( outputAbstract, naturalIdFieldName, naturalIdClassName, "new " + naturalIdClassName + "()", - ObjectModelModifier.PROTECTED,ObjectModelModifier.FINAL + ObjectModelJavaModifier.PROTECTED, ObjectModelJavaModifier.FINAL ); setDocumentation(attribute, "Clef métier de l'entité."); @@ -459,7 +467,7 @@ // Interface operation ObjectModelOperation interfaceOperation = addOperation(outputInterface, naturalIdGetterName, - naturalIdClassName, ObjectModelModifier.PUBLIC); + naturalIdClassName, ObjectModelJavaModifier.PUBLIC); // Implementation ObjectModelOperation implOperation = @@ -484,27 +492,67 @@ if (TopiaGeneratorUtil.isContextable(input)) { + addImport(outputAbstract, TopiaContext.class); addImport(outputAbstract, TopiaContextImplementor.class); - ObjectModelOperation op = addOperation(outputAbstract, "update", "void", - ObjectModelModifier.PUBLIC); + // topiaContext attribute + ObjectModelAttribute topiaContextAttribute = addAttribute( + outputAbstract, "topiaContext", TopiaContext.class, null, + ObjectModelJavaModifier.PROTECTED, ObjectModelJavaModifier.TRANSIENT); + setDocumentation(topiaContextAttribute, + "TopiaContext instance associated with the current \n" + + "instance. For internal usage only"); + + ObjectModelOperation op = addOperation(outputAbstract, + "getTopiaContext", TopiaContext.class, + ObjectModelJavaModifier.PUBLIC); + setDocumentation(op,"@since 3.0"); + addAnnotation(outputAbstract, op, Override.class.getSimpleName()); + setOperationBody(op, "" +/*{ + return topiaContext; + }*/ + ); + + op = addOperation(outputAbstract, + "setTopiaContext", "void", + ObjectModelJavaModifier.PUBLIC); addException(op, TopiaException.class); + addParameter(op, TopiaContext.class, "context"); + setDocumentation(op, +// "@param context The context to set.\n" + +// "@throws TopiaException if trying to replace a context\n" + + "@since 3.0"); + addAnnotation(outputAbstract, op, Override.class.getSimpleName()); + setOperationBody(op, "" +/*{ + if (topiaContext == null) { + topiaContext = context; +// } else { +// throw new TopiaRuntimeException("TopiaContext replacement is forbidden"); + } + }*/ + ); + + op = addOperation(outputAbstract, "update", "void", + ObjectModelJavaModifier.PUBLIC); + addException(op, TopiaException.class); // setDocumentation(op,"@since 2.5.3"); addAnnotation(outputAbstract, op, Override.class.getSimpleName()); setOperationBody(op, "" /*{ ((TopiaContextImplementor)getTopiaContext()).getDAO(<%=input.getName()%>.class).update(this); -}*/ + }*/ ); - op = addOperation(outputAbstract, "delete", "void", ObjectModelModifier.PUBLIC); + op = addOperation(outputAbstract, "delete", "void", ObjectModelJavaModifier.PUBLIC); addException(op, TopiaException.class); // setDocumentation(op,"@since 2.5.3"); addAnnotation(outputAbstract, op, Override.class.getSimpleName()); setOperationBody(op, "" /*{ ((TopiaContextImplementor)getTopiaContext()).getDAO(<%=input.getName()%>.class).delete(this); -}*/ + }*/ ); } } @@ -547,8 +595,8 @@ String opName = operation.getName(); String opType = operation.getReturnType(); - ObjectModelModifier visibility = - ObjectModelModifier.toValue(operation.getVisibility()); + ObjectModelJavaModifier visibility = + ObjectModelJavaModifier.fromVisibility(operation.getVisibility()); if (log.isDebugEnabled()) { log.debug("Extra operation for : " + input.getQualifiedName() + @@ -559,9 +607,9 @@ // Generate entity methods which have not a public visibility. // Only in abstract entity class as abstract operation. - if (!visibility.equals(ObjectModelModifier.PUBLIC)) { + if (!visibility.equals(ObjectModelJavaModifier.PUBLIC)) { addOperation(outputAbstract, opName, opType, visibility, - ObjectModelModifier.ABSTRACT); + ObjectModelJavaModifier.ABSTRACT); // Other operations, only in entity interface, implementations // need to be done in implementation class created by developper @@ -651,7 +699,7 @@ ObjectModelAttribute property = addAttribute(isNaturalId ? outputNaturalIdEmbedded : outputAbstract, attrName, attrType, null, - ObjectModelModifier.PROTECTED + ObjectModelJavaModifier.PROTECTED ); // Documentation @@ -816,7 +864,7 @@ // add also a setter in the natural id class implOperation = cloneOperationSignature(interfaceOperation, outputNaturalIdEmbedded, false, - ObjectModelModifier.PUBLIC ); + ObjectModelJavaModifier.PUBLIC ); setOperationBody(implOperation, "" /*{ @@ -854,7 +902,7 @@ // Interface operation ObjectModelOperation interfaceOperation = addOperation(outputInterface, getJavaBeanMethodName(operationPrefix, attrName), - attrType, ObjectModelModifier.PACKAGE); + attrType, ObjectModelJavaModifier.PACKAGE); // Implementation ObjectModelOperation implOperation = @@ -876,7 +924,7 @@ // add also a getter in the natural id class implOperation = cloneOperationSignature(interfaceOperation, outputNaturalIdEmbedded, false, - ObjectModelModifier.PUBLIC ); + ObjectModelJavaModifier.PUBLIC ); setOperationBody(implOperation, "" /*{ @@ -904,7 +952,7 @@ // Interface operation ObjectModelOperation interfaceOperation = addOperation(outputInterface, getJavaBeanMethodName("add", attrName), - void.class, ObjectModelModifier.PACKAGE); + void.class, ObjectModelJavaModifier.PACKAGE); ObjectModelParameter param = addParameter(interfaceOperation, attrType, attrName); @@ -974,7 +1022,7 @@ // Interface operation ObjectModelOperation interfaceOperation = addOperation(outputInterface, getJavaBeanMethodName("addAll", attrName), - void.class, ObjectModelModifier.PACKAGE); + void.class, ObjectModelJavaModifier.PACKAGE); ObjectModelParameter param = addParameter(interfaceOperation, collectionInterface + "<" + attrType + ">", attrName); @@ -1059,7 +1107,7 @@ // Interface operation ObjectModelOperation interfaceOperation = addOperation(outputInterface, getJavaBeanMethodName("remove" , attrName), - void.class, ObjectModelModifier.PACKAGE); + void.class, ObjectModelJavaModifier.PACKAGE); ObjectModelParameter param = addParameter(interfaceOperation, attrType, attrName); @@ -1125,7 +1173,7 @@ // Interface operation ObjectModelOperation interfaceOperation = addOperation(outputInterface, getJavaBeanMethodName("clear" , attrName), - void.class, ObjectModelModifier.PACKAGE); + void.class, ObjectModelJavaModifier.PACKAGE); // Implementation ObjectModelOperation implOperation = createImplOperation(interfaceOperation); @@ -1194,7 +1242,7 @@ // Interface operation ObjectModelOperation interfaceOperation = addOperation(outputInterface, getJavaBeanMethodName("get" , attrName), - attrType, ObjectModelModifier.PACKAGE); + attrType, ObjectModelJavaModifier.PACKAGE); // Implementation ObjectModelOperation implOperation = createImplOperation(interfaceOperation); @@ -1220,7 +1268,7 @@ // Interface operation ObjectModelOperation interfaceOperation = addOperation(outputInterface, getJavaBeanMethodName("get", attrName) + "ByTopiaId", - attrType, ObjectModelModifier.PACKAGE); + attrType, ObjectModelJavaModifier.PACKAGE); ObjectModelParameter param = addParameter(interfaceOperation, String.class, "topiaId"); @@ -1293,7 +1341,7 @@ // Interface operation ObjectModelOperation interfaceOperation = addOperation(outputInterface, getJavaBeanMethodName("size", attrName), - int.class, ObjectModelModifier.PACKAGE); + int.class, ObjectModelJavaModifier.PACKAGE); // Implementation ObjectModelOperation implOperation = createImplOperation(interfaceOperation); @@ -1320,7 +1368,7 @@ // Interface operation ObjectModelOperation interfaceOperation = addOperation(outputInterface, getJavaBeanMethodName("is", attrName)+ "Empty", - boolean.class, ObjectModelModifier.PACKAGE); + boolean.class, ObjectModelJavaModifier.PACKAGE); // Implementation ObjectModelOperation implOperation = createImplOperation(interfaceOperation); @@ -1452,69 +1500,77 @@ addAnnotation(outputAbstract, operation, Override.class.getSimpleName()); addAnnotation(outputAbstract, operation, Deprecated.class.getSimpleName()); - addImport(outputAbstract, ArrayList.class); - addImport(outputAbstract, List.class); + StringBuilder body; + if (!TopiaGeneratorUtil.isContextable(input)) { + body = new StringBuilder("" +/*{ + throw new UnsupportedOperationException("Since ToPIA 3.0, 'getComposite' is only available for contextable entities"); + }*/ + ); + } else { + addImport(outputAbstract, ArrayList.class); + addImport(outputAbstract, List.class); - StringBuilder body = new StringBuilder("" + body = new StringBuilder("" /*{ List<TopiaEntity> tmp = new ArrayList<TopiaEntity>(); // pour tous les attributs rechecher les composites et les class d'asso // on les ajoute dans tmp }*/ - ); - for (ObjectModelAttribute attr : input.getAttributes()) { + ); + for (ObjectModelAttribute attr : input.getAttributes()) { - if (attr.referenceClassifier() && - TopiaGeneratorUtil.isEntity(attr.getClassifier())) { + if (attr.referenceClassifier() && + TopiaGeneratorUtil.isEntity(attr.getClassifier())) { - if (attr.isComposite()) { - String attrName = attr.getName(); - String getterName = getJavaBeanMethodName("get", attrName); - if (TopiaGeneratorUtil.isNMultiplicity(attr)) { - body.append("" + if (attr.isComposite()) { + String attrName = attr.getName(); + String getterName = getJavaBeanMethodName("get", attrName); + if (TopiaGeneratorUtil.isNMultiplicity(attr)) { + body.append("" /*{ if (<%=getterName%>() != null) { tmp.addAll(<%=getterName%>()); } }*/ - ); - } else { - body.append("" + ); + } else { + body.append("" /*{ tmp.add(<%=getterName%>()); }*/ - ); - } - } else if (attr.hasAssociationClass()) { - String assocAttrName = TopiaGeneratorUtil.getAssocAttrName( - attr); - String assocClassFQN = TopiaGeneratorUtil.getSimpleName( - attr.getAssociationClass().getQualifiedName()); - String ref = "this." + TopiaGeneratorUtil.toLowerCaseFirstLetter( - assocAttrName); - if (!TopiaGeneratorUtil.isNMultiplicity(attr)) { - body.append("" + ); + } + } else if (attr.hasAssociationClass()) { + String assocAttrName = TopiaGeneratorUtil.getAssocAttrName( + attr); + String assocClassFQN = TopiaGeneratorUtil.getSimpleName( + attr.getAssociationClass().getQualifiedName()); + String ref = "this." + TopiaGeneratorUtil.toLowerCaseFirstLetter( + assocAttrName); + if (!TopiaGeneratorUtil.isNMultiplicity(attr)) { + body.append("" /*{ if (<%=ref%> != null) { tmp.add(<%=ref%>); } }*/ - ); - } else { - ObjectModelAttribute reverse = attr.getReverseAttribute(); - String reverseAttrName = reverse.getName(); - // On utilise pas l'attribut car il est potentiellement - // pas a jour, car pour les asso avec cardinalité - // personne ne fait de add. Ce qui est normal, mais - // pour pouvoir faire tout de meme des delete en cascade - // sur les asso, le champs est dans le mapping - // hibernate et donc il le faut aussi dans la classe - // sinon hibernate rale lorsqu'il charge l'objet + ); + } else { + ObjectModelAttribute reverse = attr.getReverseAttribute(); + String reverseAttrName = reverse.getName(); + // On utilise pas l'attribut car il est potentiellement + // pas a jour, car pour les asso avec cardinalité + // personne ne fait de add. Ce qui est normal, mais + // pour pouvoir faire tout de meme des delete en cascade + // sur les asso, le champs est dans le mapping + // hibernate et donc il le faut aussi dans la classe + // sinon hibernate rale lorsqu'il charge l'objet // if (<%=ref%> != null) { // tmp.addAll(<%=ref%>); // } - addImport(outputAbstract, TopiaContextImplementor.class); - body.append("" + addImport(outputAbstract, TopiaContextImplementor.class); + body.append("" /*{ { org.nuiton.topia.persistence.TopiaDAO<<%=assocClassFQN%>> dao = ((TopiaContextImplementor) getTopiaContext()).getDAO(<%=assocClassFQN%>.class); @@ -1524,12 +1580,12 @@ } } }*/ - ); + ); + } } } } - } - body.append("" + body.append("" /*{ // on refait un tour sur chaque entity de tmp pour recuperer leur // composite @@ -1542,7 +1598,8 @@ } return result; }*/ - ); + ); + } setOperationBody(operation, body.length() == 0 ? " " : body.toString()); } Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/QueryHelperTransformer.java =================================================================== --- trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/QueryHelperTransformer.java 2012-06-01 09:29:47 UTC (rev 2571) +++ trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/QueryHelperTransformer.java 2012-06-01 14:20:08 UTC (rev 2572) @@ -36,7 +36,7 @@ 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.ObjectModelModifier; +import org.nuiton.eugene.models.object.ObjectModelJavaModifier; import org.nuiton.eugene.models.object.ObjectModelOperation; import org.nuiton.eugene.models.object.ObjectModelType; import org.nuiton.topia.framework.TopiaQuery; @@ -106,26 +106,26 @@ abstractEntityPropertyClass = (ObjectModelClass)addInnerClassifier(helperClass, ObjectModelType.OBJECT_MODEL_CLASS, ENTITY_PROPERTY_CLASS_NAME + ENTITY_PROPERTY_GENERIC_TYPE, - ObjectModelModifier.ABSTRACT, - ObjectModelModifier.STATIC); + ObjectModelJavaModifier.ABSTRACT, + ObjectModelJavaModifier.STATIC); addImport(helperClass, HashMap.class); addImport(helperClass, Map.class); addAttribute(abstractEntityPropertyClass, "alias", String.class, null, - ObjectModelModifier.PROTECTED); + ObjectModelJavaModifier.PROTECTED); addAttribute(abstractEntityPropertyClass, "propertiesCache", "Map<String, String>", null, - ObjectModelModifier.PROTECTED); + ObjectModelJavaModifier.PROTECTED); // Constructor // FIXME-fdesbois-2010-06-23 : need to take care of generic case in JavaBuilder in EUGene // ObjectModelOperation constructor = -// addConstructor(abstractEntityPropertyClass, ObjectModelModifier.PUBLIC); +// addConstructor(abstractEntityPropertyClass, ObjectModelJavaModifier.PUBLIC); ObjectModelOperation constructor = - builder.addOperation(abstractEntityPropertyClass, ENTITY_PROPERTY_CLASS_NAME, null, ObjectModelModifier.PUBLIC); + builder.addOperation(abstractEntityPropertyClass, ENTITY_PROPERTY_CLASS_NAME, null, ObjectModelJavaModifier.PUBLIC); setOperationBody(constructor, "" /*{ @@ -136,7 +136,7 @@ // Getter and setter for alias ObjectModelOperation setAlias = addOperation(abstractEntityPropertyClass, "setAlias", "void", - ObjectModelModifier.PROTECTED); + ObjectModelJavaModifier.PROTECTED); addParameter(setAlias, String.class, "alias"); @@ -148,7 +148,7 @@ ObjectModelOperation getAlias = addOperation(abstractEntityPropertyClass, "$alias", String.class, - ObjectModelModifier.PUBLIC); + ObjectModelJavaModifier.PUBLIC); setOperationBody(getAlias, "" @@ -160,7 +160,7 @@ // Getter for properties ObjectModelOperation getProperty = addOperation(abstractEntityPropertyClass, "$property", String.class, - ObjectModelModifier.PUBLIC); + ObjectModelJavaModifier.PUBLIC); addParameter(getProperty, String.class, "propertyName"); @@ -177,7 +177,7 @@ ObjectModelOperation topiaCreateDate = addOperation(abstractEntityPropertyClass, "topiaCreateDate", String.class, - ObjectModelModifier.PUBLIC); + ObjectModelJavaModifier.PUBLIC); setOperationBody(topiaCreateDate, "" /*{ @@ -187,7 +187,7 @@ ObjectModelOperation topiaId = addOperation(abstractEntityPropertyClass, "topiaId", String.class, - ObjectModelModifier.PUBLIC); + ObjectModelJavaModifier.PUBLIC); setOperationBody(topiaId, "" /*{ @@ -197,7 +197,7 @@ ObjectModelOperation topiaVersion = addOperation(abstractEntityPropertyClass, "topiaVersion", String.class, - ObjectModelModifier.PUBLIC); + ObjectModelJavaModifier.PUBLIC); setOperationBody(topiaVersion, "" /*{ @@ -208,10 +208,10 @@ // Abstract methods addOperation(abstractEntityPropertyClass, "getEntityClass", "Class" + ENTITY_PROPERTY_GENERIC_TYPE, - ObjectModelModifier.PUBLIC, ObjectModelModifier.ABSTRACT); + ObjectModelJavaModifier.PUBLIC, ObjectModelJavaModifier.ABSTRACT); addOperation(abstractEntityPropertyClass, "defaultAlias", String.class, - ObjectModelModifier.PUBLIC, ObjectModelModifier.ABSTRACT); + ObjectModelJavaModifier.PUBLIC, ObjectModelJavaModifier.ABSTRACT); } protected void createUtilOperations() { @@ -219,7 +219,7 @@ // createQuery method with EntityProperty in argument ObjectModelOperation createQuery = addOperation(helperClass, "createQuery", TopiaQuery.class, - ObjectModelModifier.PUBLIC, ObjectModelModifier.STATIC); + ObjectModelJavaModifier.PUBLIC, ObjectModelJavaModifier.STATIC); addParameter(createQuery, ENTITY_PROPERTY_CLASS_NAME, "property"); setOperationBody(createQuery, "" @@ -231,7 +231,7 @@ // format method to format statement using $1, $2 corresponding to property names ObjectModelOperation format = addOperation(helperClass, "format", String.class, - ObjectModelModifier.PUBLIC, ObjectModelModifier.STATIC); + ObjectModelJavaModifier.PUBLIC, ObjectModelJavaModifier.STATIC); addParameter(format, String.class, "statement"); addParameter(format, "String...", "propertyNames"); @@ -248,7 +248,7 @@ String genericType = "<P extends " + ENTITY_PROPERTY_CLASS_NAME + "> P"; ObjectModelOperation newEntityProperty1 = addOperation(helperClass, "newEntityProperty", genericType, - ObjectModelModifier.PRIVATE, ObjectModelModifier.STATIC); + ObjectModelJavaModifier.PRIVATE, ObjectModelJavaModifier.STATIC); addParameter(newEntityProperty1, "Class<P>", "propertyClass"); setOperationBody(newEntityProperty1, "" @@ -258,7 +258,7 @@ ); ObjectModelOperation newEntityProperty2 = addOperation(helperClass, "newEntityProperty", genericType, - ObjectModelModifier.PRIVATE, ObjectModelModifier.STATIC); + ObjectModelJavaModifier.PRIVATE, ObjectModelJavaModifier.STATIC); addParameter(newEntityProperty2, "Class<P>", "propertyClass"); addParameter(newEntityProperty2, String.class, "alias"); @@ -355,7 +355,7 @@ aliases.put(alias, aliasPropertyName); addAttribute(helperClass, aliasPropertyName, String.class, "\"" + alias + "\"", - ObjectModelModifier.PUBLIC, ObjectModelModifier.STATIC, ObjectModelModifier.FINAL); + ObjectModelJavaModifier.PUBLIC, ObjectModelJavaModifier.STATIC, ObjectModelJavaModifier.FINAL); return aliasPropertyName; } @@ -367,7 +367,7 @@ addInnerClassifier(helperClass, ObjectModelType.OBJECT_MODEL_CLASS, className, - ObjectModelModifier.STATIC); + ObjectModelJavaModifier.STATIC); if (log.isDebugEnabled()) { log.debug("Generate for entity : " + input.getQualifiedName()); @@ -383,7 +383,7 @@ setSuperClass(propertyClass, superClassQualifiedName); ObjectModelOperation constructor = - addConstructor(propertyClass, ObjectModelModifier.PROTECTED); + addConstructor(propertyClass, ObjectModelJavaModifier.PROTECTED); setOperationBody(constructor, "" /*{ @@ -392,7 +392,7 @@ ObjectModelOperation getEntityClass = addOperation(propertyClass, "getEntityClass", "Class<" + input.getName() + ">", - ObjectModelModifier.PUBLIC); + ObjectModelJavaModifier.PUBLIC); addAnnotation(propertyClass, getEntityClass, "Override"); @@ -404,7 +404,7 @@ ObjectModelOperation defaultAlias = addOperation(propertyClass, "defaultAlias", String.class, - ObjectModelModifier.PUBLIC); + ObjectModelJavaModifier.PUBLIC); addAnnotation(propertyClass, defaultAlias, "Override"); @@ -461,7 +461,7 @@ protected ObjectModelOperation createGetPropertyNameOperation(ObjectModelClass output, String attrName, String entityClassName) { ObjectModelOperation result = - addOperation(output, attrName, String.class, ObjectModelModifier.PUBLIC); + addOperation(output, attrName, String.class, ObjectModelJavaModifier.PUBLIC); String constantName = entityClassName + "." + getConstantName(attrName); @@ -523,7 +523,7 @@ ObjectModelOperation newEntityProperty1 = addOperation(helperClass, "new" + className, className, - ObjectModelModifier.PUBLIC, ObjectModelModifier.STATIC); + ObjectModelJavaModifier.PUBLIC, ObjectModelJavaModifier.STATIC); setOperationBody(newEntityProperty1, "" /*{ @@ -533,7 +533,7 @@ ObjectModelOperation newEntityProperty2 = addOperation(helperClass, "new" + className, className, - ObjectModelModifier.PUBLIC, ObjectModelModifier.STATIC); + ObjectModelJavaModifier.PUBLIC, ObjectModelJavaModifier.STATIC); addParameter(newEntityProperty2, String.class, "alias"); setOperationBody(newEntityProperty2, "" @@ -557,7 +557,7 @@ ObjectModelOperation newEntityProperty = addOperation(helperClass, "new" + subEntityName + "Property", propertyClassName, - ObjectModelModifier.PUBLIC, ObjectModelModifier.STATIC); + ObjectModelJavaModifier.PUBLIC, ObjectModelJavaModifier.STATIC); String callMethodName = "new" + propertyClassName; Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/ServiceTransformer.java =================================================================== --- trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/ServiceTransformer.java 2012-06-01 09:29:47 UTC (rev 2571) +++ trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/ServiceTransformer.java 2012-06-01 14:20:08 UTC (rev 2572) @@ -33,7 +33,7 @@ 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.ObjectModelModifier; +import org.nuiton.eugene.models.object.ObjectModelJavaModifier; import org.nuiton.eugene.models.object.ObjectModelOperation; import org.nuiton.eugene.models.object.ObjectModelParameter; import org.nuiton.i18n.I18n; @@ -279,8 +279,8 @@ ObjectModelOperation operation = addOperation(serviceAbstract, OP_NAME_BEGIN_TRANSACTION, TopiaContext.class, - ObjectModelModifier.ABSTRACT, - ObjectModelModifier.PROTECTED); + ObjectModelJavaModifier.ABSTRACT, + ObjectModelJavaModifier.PROTECTED); addException(operation, TopiaException.class); } @@ -289,7 +289,7 @@ addOperation(serviceAbstract, OP_NAME_COMMIT_TRANSACTION, "void", - ObjectModelModifier.PROTECTED); + ObjectModelJavaModifier.PROTECTED); addParameter(operation, TopiaContext.class, PARAMETER_TRANSACTION); addException(operation, TopiaException.class); setOperationBody(operation,"" @@ -307,8 +307,8 @@ addOperation(serviceAbstract, OP_NAME_CLOSE_TRANSACTION, "void", - ObjectModelModifier.ABSTRACT, - ObjectModelModifier.PROTECTED); + ObjectModelJavaModifier.ABSTRACT, + ObjectModelJavaModifier.PROTECTED); addParameter(operation, TopiaContext.class, PARAMETER_TRANSACTION); addException(operation, TopiaException.class); } @@ -322,8 +322,8 @@ addOperation(serviceAbstract, OP_NAME_TREATE_ERROR, "void", - ObjectModelModifier.ABSTRACT, - ObjectModelModifier.PROTECTED); + ObjectModelJavaModifier.ABSTRACT, + ObjectModelJavaModifier.PROTECTED); if (needTransaction) { addParameter(treateError1, TopiaContext.class, PARAMETER_TRANSACTION); } @@ -337,7 +337,7 @@ if (needTransaction) { ObjectModelOperation treateError2 = addOperation(serviceAbstract, OP_NAME_TREATE_ERROR, "void", - ObjectModelModifier.PROTECTED); + ObjectModelJavaModifier.PROTECTED); addParameter(treateError2, Exception.class, "eee"); addParameter(treateError2, String.class, "message"); addParameter(treateError2, "Object...", "args"); @@ -457,8 +457,8 @@ ObjectModelOperation executeOperation = addOperation(serviceAbstract, "execute" + opName, source.getReturnType(), - ObjectModelModifier.ABSTRACT, - ObjectModelModifier.PROTECTED); + ObjectModelJavaModifier.ABSTRACT, + ObjectModelJavaModifier.PROTECTED); // Throw all exception from abstract method // They will be catched by interface method to use treateError @@ -518,7 +518,7 @@ addOperation(serviceAbstract, source.getName(), source.getReturnType(), - ObjectModelModifier.PUBLIC); + ObjectModelJavaModifier.PUBLIC); addAnnotation(serviceAbstract, implOp, Override.class.getSimpleName()); Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/persistence/TopiaDAOImpl.java =================================================================== --- trunk/topia-persistence/src/main/java/org/nuiton/topia/persistence/TopiaDAOImpl.java 2012-06-01 09:29:47 UTC (rev 2571) +++ trunk/topia-persistence/src/main/java/org/nuiton/topia/persistence/TopiaDAOImpl.java 2012-06-01 14:20:08 UTC (rev 2572) @@ -199,7 +199,9 @@ E result = newInstance(); TopiaEntityAbstract entity = (TopiaEntityAbstract) result; - entity.setTopiaContext(getContext()); + if (entity instanceof TopiaEntityContextable) { + ((TopiaEntityContextable)entity).setTopiaContext(getContext()); + } try { for (Map.Entry<String, Object> e : properties.entrySet()) { Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/persistence/TopiaEntityAbstract.java =================================================================== --- trunk/topia-persistence/src/main/java/org/nuiton/topia/persistence/TopiaEntityAbstract.java 2012-06-01 09:29:47 UTC (rev 2571) +++ trunk/topia-persistence/src/main/java/org/nuiton/topia/persistence/TopiaEntityAbstract.java 2012-06-01 14:20:08 UTC (rev 2572) @@ -27,8 +27,8 @@ import org.nuiton.topia.TopiaContext; import org.nuiton.topia.TopiaException; -import org.nuiton.topia.TopiaRuntimeException; import org.nuiton.topia.framework.TopiaContextImplementor; +import org.nuiton.topia.framework.TopiaFiresSupport; import java.beans.PropertyChangeListener; import java.beans.PropertyChangeSupport; @@ -59,7 +59,7 @@ transient protected boolean deleted = false; - transient protected TopiaContext topiaContext; + transient protected TopiaFiresSupport fireSupport; transient protected VetoableChangeSupport readVetoables; @@ -161,31 +161,16 @@ deleted = true; } - public TopiaContext getTopiaContext() { - return topiaContext; - } - - /** - * @param context The context to set. - * @throws TopiaException if trying to replace a context - */ - public void setTopiaContext(TopiaContext context) throws TopiaException { - if (topiaContext == null) { - topiaContext = context; - } else { - // XXX AThimel 30/05/2012 Use deprecated TopiaRruntimeException because this will be removed with http://nuiton.org/issues/2078 - throw new TopiaRuntimeException("Remplacement du contexte interdit"); - } - } - @Override public List<TopiaEntity> getComposite() throws TopiaException { - throw new UnsupportedOperationException(); + throw new UnsupportedOperationException( + "#getComposite() is supposed to be overridden"); } @Override public List<TopiaEntity> getAggregate() throws TopiaException { - throw new UnsupportedOperationException(); + throw new UnsupportedOperationException( + "#getAggregate() is supposed to be overridden"); } /** @@ -224,62 +209,73 @@ return result; } + protected TopiaFiresSupport getFireSupportOrNull() { + if (fireSupport == null) { + if (this instanceof TopiaEntityContextable) { + TopiaEntityContextable contextable = (TopiaEntityContextable) this; + TopiaContext context = contextable.getTopiaContext(); + if (context instanceof TopiaContextImplementor) { + TopiaContextImplementor contextImpl = (TopiaContextImplementor) context; + fireSupport = contextImpl.getFiresSupport(); + } + } + } + return fireSupport; + } + protected void fireOnPreRead(String propertyName, Object value) { - TopiaContextImplementor contextImplementor = - (TopiaContextImplementor) getTopiaContext(); - if (contextImplementor != null) { - contextImplementor.getFiresSupport().fireOnPreRead(getReadVetoableChangeSupport(), - this, propertyName, value); + TopiaFiresSupport firesSupport = getFireSupportOrNull(); + if (firesSupport != null) { + firesSupport.fireOnPreRead( + getReadVetoableChangeSupport(), this, propertyName, value); } } protected void fireOnPostRead(String propertyName, Object value) { - TopiaContextImplementor contextImplementor = - (TopiaContextImplementor) getTopiaContext(); - if (contextImplementor != null) { - contextImplementor.getFiresSupport().fireOnPostRead(getReadPropertyChangeSupport(), - this, propertyName, value); + TopiaFiresSupport firesSupport = getFireSupportOrNull(); + if (firesSupport != null) { + firesSupport.fireOnPostRead( + getReadPropertyChangeSupport(), this, propertyName, value); } } protected void fireOnPostRead(String propertyName, int index, Object value) { - TopiaContextImplementor contextImplementor = - (TopiaContextImplementor) getTopiaContext(); - if (contextImplementor != null) { - contextImplementor.getFiresSupport().fireOnPostRead(getReadPropertyChangeSupport(), - this, propertyName, index, value); + TopiaFiresSupport firesSupport = getFireSupportOrNull(); + if (firesSupport != null) { + firesSupport.fireOnPostRead( + getReadPropertyChangeSupport(), this, propertyName, + index, value); } } protected void fireOnPreWrite(String propertyName, Object oldValue, Object newValue) { - TopiaContextImplementor contextImplementor = - (TopiaContextImplementor) getTopiaContext(); - if (contextImplementor != null) { - contextImplementor.getFiresSupport().fireOnPreWrite(getWriteVetoableChangeSupport(), - this, propertyName, oldValue, newValue); + TopiaFiresSupport firesSupport = getFireSupportOrNull(); + if (firesSupport != null) { + firesSupport.fireOnPreWrite( + getWriteVetoableChangeSupport(), this, propertyName, + oldValue, newValue); } } protected void fireOnPostWrite(String propertyName, Object oldValue, Object newValue) { - TopiaContextImplementor contextImplementor = - (TopiaContextImplementor) getTopiaContext(); - if (contextImplementor != null) { - contextImplementor.getFiresSupport().fireOnPostWrite( - getWritePropertyChangeSupport(), this, propertyName, oldValue, newValue); + TopiaFiresSupport firesSupport = getFireSupportOrNull(); + if (firesSupport != null) { + firesSupport.fireOnPostWrite( + getWritePropertyChangeSupport(), this, propertyName, + oldValue, newValue); } } protected void fireOnPostWrite(String propertyName, int index, Object oldValue, Object newValue) { - TopiaContextImplementor contextImplementor = - (TopiaContextImplementor) getTopiaContext(); - if (contextImplementor != null) { - contextImplementor.getFiresSupport().fireOnPostWrite( - getWritePropertyChangeSupport(), this, propertyName, index, oldValue, - newValue); + TopiaFiresSupport firesSupport = getFireSupportOrNull(); + if (firesSupport != null) { + firesSupport.fireOnPostWrite( + getWritePropertyChangeSupport(), this, propertyName, + index, oldValue, newValue); } } Modified: trunk/topia-persistence-hibernate/src/main/java/org/nuiton/topia/framework/TopiaHibernateEntityListener.java =================================================================== --- trunk/topia-persistence-hibernate/src/main/java/org/nuiton/topia/framework/TopiaHibernateEntityListener.java 2012-06-01 09:29:47 UTC (rev 2571) +++ trunk/topia-persistence-hibernate/src/main/java/org/nuiton/topia/framework/TopiaHibernateEntityListener.java 2012-06-01 14:20:08 UTC (rev 2572) @@ -44,9 +44,7 @@ import org.nuiton.topia.TopiaContext; import org.nuiton.topia.TopiaException; import org.nuiton.topia.persistence.TopiaEntity; -import org.nuiton.topia.persistence.TopiaEntityAbstract; -import org.nuiton.topia.persistence.TopiaId; -import org.nuiton.topia.persistence.TopiaPersistenceUtil; +import org.nuiton.topia.persistence.TopiaEntityContextable; /** * @author Arnaud Thimel <thimel@codelutin.com> @@ -113,20 +111,23 @@ protected void attachContext(TopiaEntity entity, TopiaContextImplementor context) { - // FIXME AThimel 14/05/2012 http://nuiton.org/issues/2078 - if (entity instanceof TopiaEntityAbstract) { - TopiaEntityAbstract entityAbstract = (TopiaEntityAbstract) entity; - if (entityAbstract.getTopiaContext() == null) { + // FIXME AThimel 14/05/2012 Find another way to get the TopiaContext and/or TopiaFireSupport + if (entity instanceof TopiaEntityContextable) { + TopiaEntityContextable contextable = (TopiaEntityContextable)entity; + if (contextable.getTopiaContext() == null) { try { - entityAbstract.setTopiaContext(context); + contextable.setTopiaContext(context); } catch (TopiaException eee) { if (log.isWarnEnabled()) { log.warn("Impossible d'initialiser le TopiaContext" - + " sur cette entité : " + entityAbstract, + + " sur cette entité : " + contextable, eee); } } } + } else { + throw new IllegalStateException( + "Entity is not a TopiaEntityContextable : " + entity.getClass().getName()); } } @@ -136,13 +137,12 @@ // return result; // } - // FIXME AThimel 15/05/2012 I don't like it, but I haven't found a better way protected TopiaContextImplementor findContext(TopiaEntity entity) { TopiaContextImplementor result = null; - // FIXME AThimel 14/05/2012 http://nuiton.org/issues/2078 - if (entity instanceof TopiaEntityAbstract) { + // FIXME AThimel 14/05/2012 Find another way to get the TopiaContext and/or TopiaFireSupport + if (entity instanceof TopiaEntityContextable) { TopiaContext entityContext = - ((TopiaEntityAbstract) entity).getTopiaContext(); + ((TopiaEntityContextable) entity).getTopiaContext(); if (entityContext instanceof TopiaContextImplementor) { result = (TopiaContextImplementor) entityContext; } Modified: trunk/topia-persistence-tck/src/main/xmi/topia-tck-it.zargo =================================================================== (Binary files differ) Modified: trunk/topia-persistence-tck/src/test/java/org/nuiton/topia/tck/it/events/VetoableEventTest.java =================================================================== --- trunk/topia-persistence-tck/src/test/java/org/nuiton/topia/tck/it/events/VetoableEventTest.java 2012-06-01 09:29:47 UTC (rev 2571) +++ trunk/topia-persistence-tck/src/test/java/org/nuiton/topia/tck/it/events/VetoableEventTest.java 2012-06-01 14:20:08 UTC (rev 2572) @@ -32,6 +32,7 @@ import org.nuiton.topia.TopiaException; import org.nuiton.topia.event.TopiaEntityEvent; import org.nuiton.topia.event.TopiaEntityVetoable; +import org.nuiton.topia.persistence.TopiaEntityContextable; import org.nuiton.topia.tck.TopiaDatabase; import org.nuiton.topia.tck.it.Address; import org.nuiton.topia.tck.it.AddressDAO; @@ -132,7 +133,7 @@ TopiaContext transaction = db.beginTransaction(); transaction.addTopiaEntityVetoable(Personne.class, personneCounter); - transaction.addTopiaEntityVetoable(allCounter); + transaction.addTopiaEntityVetoable(TopiaEntityContextable.class, allCounter); log.debug("DAO : PersonneDAO"); PersonneDAO personneDAO = TopiaTckItDAOHelper.getPersonneDAO(transaction); Modified: trunk/topia-service-security/src/main/java/org/nuiton/topia/taas/TaasService.java =================================================================== --- trunk/topia-service-security/src/main/java/org/nuiton/topia/taas/TaasService.java 2012-06-01 09:29:47 UTC (rev 2571) +++ trunk/topia-service-security/src/main/java/org/nuiton/topia/taas/TaasService.java 2012-06-01 14:20:08 UTC (rev 2572) @@ -49,7 +49,7 @@ import org.nuiton.topia.framework.TopiaService; import org.nuiton.topia.persistence.TopiaDAO; import org.nuiton.topia.persistence.TopiaEntity; -import org.nuiton.topia.persistence.TopiaEntityAbstract; +import org.nuiton.topia.persistence.TopiaEntityContextable; import org.nuiton.topia.persistence.TopiaIdUtil; import org.nuiton.topia.taas.entities.TaasAuthorizationImpl; import org.nuiton.topia.taas.entities.TaasPrincipalImpl; @@ -457,7 +457,7 @@ List<Permission> permissions; try { TopiaContextImplementor transaction = (TopiaContextImplementor) - ((TopiaEntityAbstract)entity).getTopiaContext(); + ((TopiaEntityContextable)entity).getTopiaContext(); TopiaDAO<?> dao = transaction.getDAO(klass); permissions = dao.getRequestPermission(topiaId, actions); } catch (TopiaException e) {