Author: tchemit Date: 2011-02-09 12:12:15 +0100 (Wed, 09 Feb 2011) New Revision: 2203 Url: http://nuiton.org/repositories/revision/topia/2203 Log: Anomalie #1306: Some association are not reattached while replication Modified: trunk/topia-service-replication/src/main/java/org/nuiton/topia/replication/TopiaReplicationContext.java trunk/topia-service-replication/src/main/java/org/nuiton/topia/replication/TopiaReplicationOperation.java trunk/topia-service-replication/src/main/java/org/nuiton/topia/replication/TopiaReplicationService.java trunk/topia-service-replication/src/main/java/org/nuiton/topia/replication/TopiaReplicationServiceImpl.java trunk/topia-service-replication/src/main/java/org/nuiton/topia/replication/model/ReplicationModel.java trunk/topia-service-replication/src/main/java/org/nuiton/topia/replication/model/ReplicationNode.java trunk/topia-service-replication/src/main/java/org/nuiton/topia/replication/operation/AttachAssociation.java trunk/topia-service-replication/src/main/java/org/nuiton/topia/replication/operation/AttachLink.java trunk/topia-service-replication/src/main/java/org/nuiton/topia/replication/operation/DettachAssociation.java trunk/topia-service-replication/src/main/java/org/nuiton/topia/replication/operation/Duplicate.java trunk/topia-service-replication/src/main/java/org/nuiton/topia/replication/operation/LoadLink.java trunk/topia-service-replication/src/test/java/org/nuiton/topia/replication/AbstractTopiaReplicationServiceTest.java trunk/topia-service-replication/src/test/java/org/nuiton/topia/replication/TopiaReplicationOperationTest.java Modified: trunk/topia-service-replication/src/main/java/org/nuiton/topia/replication/TopiaReplicationContext.java =================================================================== --- trunk/topia-service-replication/src/main/java/org/nuiton/topia/replication/TopiaReplicationContext.java 2011-02-09 11:00:14 UTC (rev 2202) +++ trunk/topia-service-replication/src/main/java/org/nuiton/topia/replication/TopiaReplicationContext.java 2011-02-09 11:12:15 UTC (rev 2203) @@ -172,6 +172,12 @@ List<String> nodeEntityIds = getEntityIds(node); + if (nodeEntityIds == null) { + + // no ids found for this node + return Collections.emptyList(); + } + if (log.isDebugEnabled()) { log.debug("Will load " + nodeEntityIds.size() + " entities"); } Modified: trunk/topia-service-replication/src/main/java/org/nuiton/topia/replication/TopiaReplicationOperation.java =================================================================== --- trunk/topia-service-replication/src/main/java/org/nuiton/topia/replication/TopiaReplicationOperation.java 2011-02-09 11:00:14 UTC (rev 2202) +++ trunk/topia-service-replication/src/main/java/org/nuiton/topia/replication/TopiaReplicationOperation.java 2011-02-09 11:12:15 UTC (rev 2203) @@ -61,7 +61,7 @@ * Creer et enregister une operation utilisateur apres la creation du * modele via la methode * <p/> - * {@link TopiaReplicationService#prepare(TopiaEntityEnum[],boolean, String...)}. + * {@link TopiaReplicationService#prepare(TopiaEntityEnum[], boolean, String...)}. * * @param model le modele de replication * @param ownerNode le noeud proprietaire de l'operation @@ -71,11 +71,13 @@ * (says when operation is only internal) * @see ReplicationModel * @see ReplicationOperationPhase + * @deprecated since 2.5.2, there is no difference between a user operation and an internal one. This method will be + * removed in version 2.6 and never replaced */ - void register(ReplicationModel model, - ReplicationNode ownerNode, - ReplicationOperationPhase phase, - Object... parameters) throws UnsupportedOperationException; + @Deprecated + void register(ReplicationModel model, ReplicationNode ownerNode, ReplicationOperationPhase phase, + Object... parameters) + throws UnsupportedOperationException; /** * Execute l'operation avec le parametrage donnee. @@ -89,10 +91,8 @@ * @param entities la liste des entités à traiter * @throws Exception pour toute erreur */ - void run(TopiaReplicationContext replicationContext, - ReplicationOperationDef operationDef, - TopiaContextImplementor srcCtxt, - TopiaContextImplementor dstCtxt, - List<? extends TopiaEntity> entities) throws Exception; + void run(TopiaReplicationContext replicationContext, ReplicationOperationDef operationDef, + TopiaContextImplementor srcCtxt, TopiaContextImplementor dstCtxt, List<? extends TopiaEntity> entities) + throws Exception; } Modified: trunk/topia-service-replication/src/main/java/org/nuiton/topia/replication/TopiaReplicationService.java =================================================================== --- trunk/topia-service-replication/src/main/java/org/nuiton/topia/replication/TopiaReplicationService.java 2011-02-09 11:00:14 UTC (rev 2202) +++ trunk/topia-service-replication/src/main/java/org/nuiton/topia/replication/TopiaReplicationService.java 2011-02-09 11:12:15 UTC (rev 2203) @@ -39,7 +39,7 @@ * <p/> * The replication is always done in two phases : * <p/> - * <li> - prepare the replication model - ({@link #prepare(TopiaEntityEnum[],boolean, String...)} - ({@link #prepareForAll(TopiaEntityEnum[])} + * <li> - prepare the replication model - ({@link #prepare(TopiaEntityEnum[], boolean, String...)} - ({@link #prepareForAll(TopiaEntityEnum[])} * <p/> * <li> - lanch replication {@link #doReplicate(ReplicationModel, * TopiaContext)} @@ -49,10 +49,14 @@ */ public interface TopiaReplicationService extends TopiaService { - /** Nom du service */ + /** + * Nom du service + */ String SERVICE_NAME = "replication"; - /** Nom du service topia */ + /** + * Nom du service topia + */ String TOPIA_SERVICE_NAME = "topia.service.replication"; /** @@ -80,23 +84,6 @@ String... topiaIds) throws TopiaException; /** - * Prepare le modele de replication pour les entites dans les topiaIds sont - * donnes en utilisant l'ordre des {@code contracts} donné pour l'ordre de - * replication. - * - * @param contracts les contrats a repliquer - * l'ordre des entités à repliquer, sinon on utilise - * l'ordre induit par les {@code contracts}. - * @param topiaIds la liste des ids d'entites a repliquer - * @return le model de replication initialise - * @throws TopiaException pour toute erreur recontree - * @deprecated since 2.4.3, prefer use the method {@link #prepare(TopiaEntityEnum[], boolean, String...)} with flag setted to {@code false}. - */ - @Deprecated - ReplicationModel prepareWithComputedOrder(TopiaEntityEnum[] contracts, - String... topiaIds) throws TopiaException; - - /** * Prepare le modele de replication pour toutes les entites des types * donnes. * <p/> @@ -114,40 +101,10 @@ ReplicationModel prepareForAll(TopiaEntityEnum[] contracts) throws TopiaException; /** - * Ajouter une nouvelle operation pre-replication, sur un type de donnee. - * - * @param model le modele de replication - * @param type le type du noeud de replication - * @param operationClass l'implantation de l'operation - * @param parameters les parametres supplementaires pour l'operation - * @deprecated since 2.4.3, prefer use the method {@link TopiaReplicationModelBuilder#addBeforeOperation(ReplicationModel, TopiaEntityEnum, Class, Object...)} - */ - @Deprecated - void addBeforeOperation(ReplicationModel model, - TopiaEntityEnum type, - Class<? extends TopiaReplicationOperation> operationClass, - Object... parameters); - - /** - * Ajouter une nouvelle operation post-replication, sur un type de donnee. - * - * @param model le modele de replication - * @param type le type du noeud de replication - * @param operationClass l'implantation de l'operation - * @param parameters les parametres supplementaires pour l'operation - * @deprecated since 2.4.3, prefer use the method {@link TopiaReplicationModelBuilder#addAfterOperation(ReplicationModel, TopiaEntityEnum, Class, Object...)} - */ - @Deprecated - void addAfterOperation(ReplicationModel model, - TopiaEntityEnum type, - Class<? extends TopiaReplicationOperation> operationClass, - Object... parameters); - - /** * Lance l'operation de replication a partir du context source vers le * context de destination sur les entites donnees et en utilisant le modele * de replication precedemment construit via la methode {@link - * #prepare(TopiaEntityEnum[],boolean, String...)} ou {@link + * #prepare(TopiaEntityEnum[], boolean, String...)} ou {@link * #prepareForAll(TopiaEntityEnum[])}. * * @param model le modele de replication Modified: trunk/topia-service-replication/src/main/java/org/nuiton/topia/replication/TopiaReplicationServiceImpl.java =================================================================== --- trunk/topia-service-replication/src/main/java/org/nuiton/topia/replication/TopiaReplicationServiceImpl.java 2011-02-09 11:00:14 UTC (rev 2202) +++ trunk/topia-service-replication/src/main/java/org/nuiton/topia/replication/TopiaReplicationServiceImpl.java 2011-02-09 11:12:15 UTC (rev 2203) @@ -110,44 +110,13 @@ } @Override - public ReplicationModel prepareWithComputedOrder(TopiaEntityEnum[] contracts, - String... topiaIds) throws TopiaException { - return prepare(contracts, false, topiaIds); - } - - @Override public ReplicationModel prepareForAll(TopiaEntityEnum[] contracts) throws TopiaException { ReplicationModel model = getModelBuilder().prepareForAll(contracts); return model; } - @Override - public void addBeforeOperation(ReplicationModel model, - TopiaEntityEnum type, - Class<? extends TopiaReplicationOperation> operationClass, - Object... parameters) { - getModelBuilder().addBeforeOperation(model, - type, - operationClass, - parameters - ); - } - @Override - public void addAfterOperation(ReplicationModel model, - TopiaEntityEnum type, - Class<? extends TopiaReplicationOperation> operationClass, - Object... parameters) { - - getModelBuilder().addAfterOperation(model, - type, - operationClass, - parameters - ); - } - - @Override public TopiaReplicationModelBuilder getModelBuilder() { if (modelBuilder == null) { modelBuilder = new TopiaReplicationModelBuilder(); @@ -172,10 +141,13 @@ // init replication context replicationContext.init(); + ReplicationNode currentNode = null; try { for (ReplicationNode node : model.getOrder()) { + currentNode = node; + // start replication of current node doReplicateNode(replicationContext, node); @@ -184,6 +156,9 @@ } } catch (Exception e) { + if (log.isErrorEnabled()) { + log.error("Could not replicate node " + currentNode, e); + } // an error occurs, rollback all sucessfull replicated nodes. doRollback(replicationContext); @@ -273,6 +248,13 @@ TopiaReplicationOperation operation = replicationContext.getOperation(def); + if (!node.equals(def.getNode())) { + + // when a node operation is reattached to a later node... + entities = + replicationContext.getEntities(srcCtxt, def.getNode()); + } + operation.run(replicationContext, def, srcCtxt, Modified: trunk/topia-service-replication/src/main/java/org/nuiton/topia/replication/model/ReplicationModel.java =================================================================== --- trunk/topia-service-replication/src/main/java/org/nuiton/topia/replication/model/ReplicationModel.java 2011-02-09 11:00:14 UTC (rev 2202) +++ trunk/topia-service-replication/src/main/java/org/nuiton/topia/replication/model/ReplicationModel.java 2011-02-09 11:12:15 UTC (rev 2203) @@ -504,7 +504,8 @@ if (!tmpLinks.isEmpty()) { // on a des associations a charger avant replication for (ReplicationLink link : tmpLinks) { - addPreOperation(node, node, LoadLink.class, link); +// addPreOperation(node, node, LoadLink.class, link); + addPreOperation(node, link.getSource(), LoadLink.class, link); } linksToLoad.removeAll(links); tmpLinks.clear(); @@ -525,7 +526,8 @@ if (!tmpLinks.isEmpty()) { // on a trouve des liens a reattacher for (ReplicationLink link : tmpLinks) { - addPostOperation(node, node, AttachLink.class, link); +// addPostOperation(node, node, AttachLink.class, link); + addPostOperation(node, link.getTarget(), AttachLink.class, link); } // ces liens ne sont plus a traiter links.removeAll(tmpLinks); @@ -533,6 +535,7 @@ } } + // List<ReplicationOperationDef> realOperations = new ArrayList<ReplicationOperationDef>(); public void adjustOperations(TopiaEntityIdsMap data) { for (TopiaEntityEnum e : getContracts()) { List<String> ids = data.get(e.getContract()); @@ -541,17 +544,50 @@ // le noeud n'est pas connu (ce n'est pas normal!) continue; } + List<ReplicationOperationDef> realOperations = + new ArrayList<ReplicationOperationDef>(); if (CollectionUtils.isEmpty(ids)) { + + if (log.isInfoEnabled()) { + log.info("skip operations on node " + node + + " (no data associated)"); + } + + // must only keep operation that are not directly linked with the node + // at the moment only attachLink is in that case ReplicationOperationDef[] operations = node.getOperations(); - log.info("skip operations on node " + node + - " (no data associated)"); for (ReplicationOperationDef op : operations) { - log.info(" skip " + op); + + if (!node.equals(op.getNode())) { + + // keep this operation + realOperations.add(op); + if (log.isInfoEnabled()) { + log.info(" keep " + op); + } + } else { + if (log.isInfoEnabled()) { + log.info(" skip " + op); + } + } } - node.clearOperations(); - } else { - node.sortOperations(); + node.setOperations(realOperations); } + + // always sort operations on the phase + node.sortOperations(); + +// if (CollectionUtils.isEmpty(ids)) { +// ReplicationOperationDef[] operations = node.getOperations(); +// log.info("skip operations on node " + node + +// " (no data associated)"); +// for (ReplicationOperationDef op : operations) { +// log.info(" skip " + op); +// } +// node.clearOperations(); +// } else { +// node.sortOperations(); +// } } } Modified: trunk/topia-service-replication/src/main/java/org/nuiton/topia/replication/model/ReplicationNode.java =================================================================== --- trunk/topia-service-replication/src/main/java/org/nuiton/topia/replication/model/ReplicationNode.java 2011-02-09 11:00:14 UTC (rev 2202) +++ trunk/topia-service-replication/src/main/java/org/nuiton/topia/replication/model/ReplicationNode.java 2011-02-09 11:12:15 UTC (rev 2203) @@ -117,6 +117,11 @@ } } + public void setOperations(List<ReplicationOperationDef> operations) { + clearOperations(); + this.operations.addAll(operations); + } + public ReplicationOperationDef[] getOperations() { return operations.toArray( new ReplicationOperationDef[operations.size()]); Modified: trunk/topia-service-replication/src/main/java/org/nuiton/topia/replication/operation/AttachAssociation.java =================================================================== --- trunk/topia-service-replication/src/main/java/org/nuiton/topia/replication/operation/AttachAssociation.java 2011-02-09 11:00:14 UTC (rev 2202) +++ trunk/topia-service-replication/src/main/java/org/nuiton/topia/replication/operation/AttachAssociation.java 2011-02-09 11:12:15 UTC (rev 2203) @@ -77,7 +77,10 @@ * * @author tchemit <chemit@codelutin.com> * @since 2.2.0 + * @deprecated since 2.5.2, this operation will be removed in version 2.6 and + * will not be replaced : prefer use the {@link AttachLink} instead. */ +@Deprecated public class AttachAssociation implements TopiaReplicationOperation { /** Logger */ @@ -89,8 +92,8 @@ ReplicationOperationPhase phase, Object... parameters) { - throw new UnsupportedOperationException( - _("topia.replication.error.operation.uncreatable", getClass())); +// throw new UnsupportedOperationException( +// _("topia.replication.error.operation.uncreatable", getClass())); } @Override Modified: trunk/topia-service-replication/src/main/java/org/nuiton/topia/replication/operation/AttachLink.java =================================================================== --- trunk/topia-service-replication/src/main/java/org/nuiton/topia/replication/operation/AttachLink.java 2011-02-09 11:00:14 UTC (rev 2202) +++ trunk/topia-service-replication/src/main/java/org/nuiton/topia/replication/operation/AttachLink.java 2011-02-09 11:12:15 UTC (rev 2203) @@ -80,8 +80,8 @@ ReplicationOperationPhase phase, Object... parameters) { - throw new UnsupportedOperationException( - _("topia.replication.error.operation.uncreatable", getClass())); +// throw new UnsupportedOperationException( +// _("topia.replication.error.operation.uncreatable", getClass())); } @Override Modified: trunk/topia-service-replication/src/main/java/org/nuiton/topia/replication/operation/DettachAssociation.java =================================================================== --- trunk/topia-service-replication/src/main/java/org/nuiton/topia/replication/operation/DettachAssociation.java 2011-02-09 11:00:14 UTC (rev 2202) +++ trunk/topia-service-replication/src/main/java/org/nuiton/topia/replication/operation/DettachAssociation.java 2011-02-09 11:12:15 UTC (rev 2203) @@ -40,8 +40,6 @@ import java.util.List; -import static org.nuiton.i18n.I18n._; - /** * Pour dettacher une association. * <p/> @@ -54,7 +52,9 @@ */ public class DettachAssociation implements TopiaReplicationOperation { - /** Logger */ + /** + * Logger + */ private static final Log log = LogFactory.getLog(DettachAssociation.class); @Override @@ -63,8 +63,8 @@ ReplicationOperationPhase phase, Object... parameters) { - throw new UnsupportedOperationException( - _("topia.replication.error.operation.uncreatable", getClass())); +// throw new UnsupportedOperationException( +// _("topia.replication.error.operation.uncreatable", getClass())); } @Override @@ -87,7 +87,7 @@ if (size > 0) { if (log.isDebugEnabled()) { log.debug("will dettach " + size + " association(s) '" + - name + "' from " + e); + name + "' from " + e); } operator.setNull(name, e); } Modified: trunk/topia-service-replication/src/main/java/org/nuiton/topia/replication/operation/Duplicate.java =================================================================== --- trunk/topia-service-replication/src/main/java/org/nuiton/topia/replication/operation/Duplicate.java 2011-02-09 11:00:14 UTC (rev 2202) +++ trunk/topia-service-replication/src/main/java/org/nuiton/topia/replication/operation/Duplicate.java 2011-02-09 11:12:15 UTC (rev 2203) @@ -41,8 +41,6 @@ import java.util.List; -import static org.nuiton.i18n.I18n._; - /** * L'operation de duplication d'un noeud de replication. * <p/> @@ -56,7 +54,9 @@ public class Duplicate implements TopiaReplicationOperationUndoable { - /** Logger */ + /** + * Logger + */ private static final Log log = LogFactory.getLog(Duplicate.class); @@ -65,8 +65,8 @@ ReplicationNode ownerNode, ReplicationOperationPhase phase, Object... parameters) throws UnsupportedOperationException { - throw new UnsupportedOperationException( - _("topia.replication.error.operation.uncreatable", getClass())); +// throw new UnsupportedOperationException( +// _("topia.replication.error.operation.uncreatable", getClass())); } @Override Modified: trunk/topia-service-replication/src/main/java/org/nuiton/topia/replication/operation/LoadLink.java =================================================================== --- trunk/topia-service-replication/src/main/java/org/nuiton/topia/replication/operation/LoadLink.java 2011-02-09 11:00:14 UTC (rev 2202) +++ trunk/topia-service-replication/src/main/java/org/nuiton/topia/replication/operation/LoadLink.java 2011-02-09 11:12:15 UTC (rev 2203) @@ -64,8 +64,8 @@ ReplicationOperationPhase phase, Object... parameters) { - throw new UnsupportedOperationException( - _("topia.replication.error.operation.uncreatable", getClass())); +// throw new UnsupportedOperationException( +// _("topia.replication.error.operation.uncreatable", getClass())); } @Override Modified: trunk/topia-service-replication/src/test/java/org/nuiton/topia/replication/AbstractTopiaReplicationServiceTest.java =================================================================== --- trunk/topia-service-replication/src/test/java/org/nuiton/topia/replication/AbstractTopiaReplicationServiceTest.java 2011-02-09 11:00:14 UTC (rev 2202) +++ trunk/topia-service-replication/src/test/java/org/nuiton/topia/replication/AbstractTopiaReplicationServiceTest.java 2011-02-09 11:12:15 UTC (rev 2203) @@ -594,6 +594,7 @@ } } + @Deprecated protected void createUnsupportedBeforeOperation(TopiaEntityEnum contract, TopiaEntity entity, Class<? extends TopiaReplicationOperation> operationClass, @@ -607,6 +608,7 @@ fail(); } + @Deprecated protected void createUnsupportedAfterOperation( TopiaEntityEnum contract, TopiaEntity entity, @@ -622,6 +624,34 @@ fail(); } + protected void createSupportedBeforeOperation(TopiaEntityEnum contract, + TopiaEntity entity, + Class<? extends TopiaReplicationOperation> operationClass, + Object... parameters) throws Exception { + + getLog().info("entity " + entity.getTopiaId()); + prepareModel(entity.getTopiaId()); + + getModelBuilder().addBeforeOperation(model, contract, operationClass, parameters); + // on doit avoir le droit de creer cette operation + Assert.assertTrue(true); + } + + protected void createSupportedAfterOperation( + TopiaEntityEnum contract, + TopiaEntity entity, + Class<? extends TopiaReplicationOperation> operationClass, + Object... parameters) throws Exception { + + getLog().info("entity " + entity.getTopiaId()); + prepareModel(entity.getTopiaId()); +// model = service.createModel(getContracts()); +// model.detectDirectDependencies(); + getModelBuilder().addAfterOperation(model, contract, operationClass, parameters); + // on doit avoir le droit de creer cette operation + Assert.assertTrue(true); + } + protected Long getTestsTimeStamp() { if (testsTimeStamp == null) { testsTimeStamp = System.currentTimeMillis(); Modified: trunk/topia-service-replication/src/test/java/org/nuiton/topia/replication/TopiaReplicationOperationTest.java =================================================================== --- trunk/topia-service-replication/src/test/java/org/nuiton/topia/replication/TopiaReplicationOperationTest.java 2011-02-09 11:00:14 UTC (rev 2202) +++ trunk/topia-service-replication/src/test/java/org/nuiton/topia/replication/TopiaReplicationOperationTest.java 2011-02-09 11:12:15 UTC (rev 2203) @@ -27,11 +27,7 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.junit.After; -import org.junit.AfterClass; -import org.junit.Before; -import org.junit.BeforeClass; -import org.junit.Test; +import org.junit.*; import org.nuiton.topia.TestHelper; import org.nuiton.topia.TopiaContext; import org.nuiton.topia.TopiaContextFactory; @@ -39,18 +35,8 @@ import org.nuiton.topia.framework.TopiaContextImplementor; import org.nuiton.topia.persistence.TopiaEntityEnum; import org.nuiton.topia.replication.model.ReplicationOperationPhase; -import org.nuiton.topia.replication.operation.AttachAssociation; -import org.nuiton.topia.replication.operation.DettachAssociation; -import org.nuiton.topia.replication.operation.Duplicate; -import org.nuiton.topia.replication.operation.FakeOperation; -import org.nuiton.topia.replication.operation.UncreatableOperation; -import org.nuiton.topia.replication.operation.UnregistredOperation; -import org.nuiton.topia.test.entities.Person; -import org.nuiton.topia.test.entities.PersonImpl; -import org.nuiton.topia.test.entities.Pet; -import org.nuiton.topia.test.entities.PetImpl; -import org.nuiton.topia.test.entities.Race; -import org.nuiton.topia.test.entities.RaceImpl; +import org.nuiton.topia.replication.operation.*; +import org.nuiton.topia.test.entities.*; import java.io.File; import java.io.IOException; @@ -140,7 +126,7 @@ getOperation(UncreatableOperation.class, true); getOperation(FakeOperation.class, true); getOperation(Duplicate.class, true); - getOperation(AttachAssociation.class, true); +// getOperation(AttachAssociation.class, true); getOperation(DettachAssociation.class, true); } @@ -186,45 +172,49 @@ getModelBuilder().addAfterOperation(model, TopiaTestEntityEnum.Pet, UnregistredOperation.class); } - @Test(expected = UnsupportedOperationException.class) - public void testCreateUnsupportedBeforeOperation_Duplicate() throws Exception { - createUnsupportedBeforeOperation(TopiaTestEntityEnum.Person, person, Duplicate.class); + @Test +// @Test(expected = UnsupportedOperationException.class) + public void testCreateSupportedBeforeOperation_Duplicate() throws Exception { + createSupportedBeforeOperation(TopiaTestEntityEnum.Person, person, Duplicate.class); } - @Test(expected = UnsupportedOperationException.class) - public void testCreateUnsupportedBeforeOperation_AttachAssociation() throws Exception { - createUnsupportedBeforeOperation(TopiaTestEntityEnum.Person, person, AttachAssociation.class); - } +// @Test(expected = UnsupportedOperationException.class) +// public void testCreateUnsupportedBeforeOperation_AttachAssociation() throws Exception { +// createUnsupportedBeforeOperation(TopiaTestEntityEnum.Person, person, AttachAssociation.class); +// } - @Test(expected = UnsupportedOperationException.class) - public void testCreateUnsupportedBeforeOperation_DetachAssociation() throws Exception { - createUnsupportedBeforeOperation(TopiaTestEntityEnum.Person, person, DettachAssociation.class); + @Test +// @Test(expected = UnsupportedOperationException.class) + public void testCreateSupportedBeforeOperation_DetachAssociation() throws Exception { + createSupportedBeforeOperation(TopiaTestEntityEnum.Person, person, DettachAssociation.class); } - @Test(expected = UnsupportedOperationException.class) - public void testCreateUnsupportedAfterOperation_Duplicate() throws Exception { - createUnsupportedAfterOperation(TopiaTestEntityEnum.Person, person, Duplicate.class); + @Test +// @Test(expected = UnsupportedOperationException.class) + public void testCreateSupportedAfterOperation_Duplicate() throws Exception { + createSupportedAfterOperation(TopiaTestEntityEnum.Person, person, Duplicate.class); } - @Test(expected = UnsupportedOperationException.class) - public void testCreateUnsupportedAfterOperation_AttachAssociation() throws Exception { - createUnsupportedAfterOperation(TopiaTestEntityEnum.Person, person, AttachAssociation.class); - } +// @Test(expected = UnsupportedOperationException.class) +// public void testCreateSupportedAfterOperation_AttachAssociation() throws Exception { +// createUnsupportedAfterOperation(TopiaTestEntityEnum.Person, person, AttachAssociation.class); +// } - @Test(expected = UnsupportedOperationException.class) - public void testCreateUnsupportedAfterOperation_DetachAssociation() throws Exception { - createUnsupportedAfterOperation(TopiaTestEntityEnum.Person, person, DettachAssociation.class); + @Test +// @Test(expected = UnsupportedOperationException.class) + public void testCreateSupportedAfterOperation_DetachAssociation() throws Exception { + createSupportedAfterOperation(TopiaTestEntityEnum.Person, person, DettachAssociation.class); } - @Test(expected = UnsupportedOperationException.class) - public void testCreateUnsupportedBeforeOperation_UncreatableOperation() throws Exception { - createUnsupportedBeforeOperation(TopiaTestEntityEnum.Person, person, UncreatableOperation.class); - } +// @Test(expected = UnsupportedOperationException.class) +// public void testCreateUnsupportedBeforeOperation_UncreatableOperation() throws Exception { +// createUnsupportedBeforeOperation(TopiaTestEntityEnum.Person, person, UncreatableOperation.class); +// } - @Test(expected = UnsupportedOperationException.class) - public void testCreateUnsupportedAfterOperation_UncreatableOperation() throws Exception { - createUnsupportedAfterOperation(TopiaTestEntityEnum.Person, person, UncreatableOperation.class); - } +// @Test(expected = UnsupportedOperationException.class) +// public void testCreateUnsupportedAfterOperation_UncreatableOperation() throws Exception { +// createUnsupportedAfterOperation(TopiaTestEntityEnum.Person, person, UncreatableOperation.class); +// } @Test(expected = IllegalArgumentException.class) public void testCreateOperation_wrongParameterNumber() throws Exception {