blob: 71dd541ddc1c823bdb1bfa72175ebbcfbebde909 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2008-2011 Chair for Applied Software Engineering,
* Technische Universitaet Muenchen.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* koegel
******************************************************************************/
package org.eclipse.emf.emfstore.client.recording.test;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import java.io.IOException;
import java.util.List;
import java.util.Set;
import java.util.concurrent.Callable;
import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.common.util.EMap;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EStructuralFeature;
import org.eclipse.emf.ecore.EcoreFactory;
import org.eclipse.emf.ecore.util.EcoreUtil;
import org.eclipse.emf.edit.command.RemoveCommand;
import org.eclipse.emf.edit.domain.AdapterFactoryEditingDomain;
import org.eclipse.emf.emfstore.client.observer.ESPostCreationObserver;
import org.eclipse.emf.emfstore.client.test.common.cases.ESTest;
import org.eclipse.emf.emfstore.client.test.common.dsl.Add;
import org.eclipse.emf.emfstore.client.test.common.dsl.Create;
import org.eclipse.emf.emfstore.client.test.common.dsl.Delete;
import org.eclipse.emf.emfstore.client.test.common.dsl.TestElementFeatures;
import org.eclipse.emf.emfstore.client.util.RunESCommand;
import org.eclipse.emf.emfstore.internal.client.model.ESWorkspaceProviderImpl;
import org.eclipse.emf.emfstore.internal.client.model.ModelPackage;
import org.eclipse.emf.emfstore.internal.client.model.ProjectSpace;
import org.eclipse.emf.emfstore.internal.client.model.exceptions.UnsupportedNotificationException;
import org.eclipse.emf.emfstore.internal.client.model.impl.ProjectSpaceImpl;
import org.eclipse.emf.emfstore.internal.client.model.util.EMFStoreCommand;
import org.eclipse.emf.emfstore.internal.common.CommonUtil;
import org.eclipse.emf.emfstore.internal.common.model.ModelElementId;
import org.eclipse.emf.emfstore.internal.common.model.Project;
import org.eclipse.emf.emfstore.internal.common.model.impl.IdEObjectCollectionImpl;
import org.eclipse.emf.emfstore.internal.common.model.impl.ProjectImpl;
import org.eclipse.emf.emfstore.internal.common.model.util.ModelUtil;
import org.eclipse.emf.emfstore.internal.server.model.versioning.operations.AbstractOperation;
import org.eclipse.emf.emfstore.internal.server.model.versioning.operations.CreateDeleteOperation;
import org.eclipse.emf.emfstore.internal.server.model.versioning.operations.MultiReferenceOperation;
import org.eclipse.emf.emfstore.internal.server.model.versioning.operations.ReferenceOperation;
import org.eclipse.emf.emfstore.internal.server.model.versioning.operations.SingleReferenceOperation;
import org.eclipse.emf.emfstore.test.model.TestElement;
import org.junit.Test;
/**
* Test creating an deleting elements.
*
* @author koegel
*/
public class CreateDeleteOperationTest extends ESTest {
private static final String POST_CREATION_CHANGED_NAME = "postCreationChangedName"; //$NON-NLS-1$
private static final String OLD_NAME = "oldName"; //$NON-NLS-1$
private static final String REF_TEST_ELEMENT = "refTestElement"; //$NON-NLS-1$
private static final String TEST_ELEMENT3 = "TestElement3"; //$NON-NLS-1$
private static final String TEST_ELEMENT2 = "TestElement2"; //$NON-NLS-1$
private static final String TEST_ELEMENT1 = "TestElement1"; //$NON-NLS-1$
private static final String HELLO = "Hello"; //$NON-NLS-1$
private static final String HALLO = "Hallo"; //$NON-NLS-1$
private static final String TAG = "Tag"; //$NON-NLS-1$
private static final String DAY = "Day"; //$NON-NLS-1$
private static final String REFERENCED_TEST_ELEMENT = "referencedTestElement"; //$NON-NLS-1$
private static final String KEY_REFEFERENCE_TEST_ELEMENT = "keyRefeferenceTestElement"; //$NON-NLS-1$
private static final String SUB_TEST_ELEMENT = "subTestElement"; //$NON-NLS-1$
private static final String REFERENCES = "references"; //$NON-NLS-1$
private static final String NEW_CHILD_ELEMENT3 = "newChildElement3"; //$NON-NLS-1$
private static final String NEW_CHILD_ELEMENT2 = "newChildElement2"; //$NON-NLS-1$
private static final String NEW_CHILD_ELEMENT1 = "newChildElement1"; //$NON-NLS-1$
private static final String NEW_TEST_ELEMENT = "newTestElement"; //$NON-NLS-1$
private static final String TEST1 = "test1"; //$NON-NLS-1$
private static final String PARENT = "parent"; //$NON-NLS-1$
private static final String TEST2 = "test2"; //$NON-NLS-1$
private static final String CLAZZ2 = "clazz"; //$NON-NLS-1$
private static final String ATTRIBUTE22 = "attribute2"; //$NON-NLS-1$
private static final String ATTRIBUTE1 = "attribute1"; //$NON-NLS-1$
private static final String MAX_TU_DIES = "Max tu dies"; //$NON-NLS-1$
private static final String HELMUT = "Helmut"; //$NON-NLS-1$
private static final String REFERENCE_TEST_ELEMENT = "referenceTestElement"; //$NON-NLS-1$
private static final String SECOND_TEST_ELEMENT = "secondTestElement"; //$NON-NLS-1$
private static final String TEST_ELEMENT = "testElement"; //$NON-NLS-1$
private static final String PARENT_TEST_ELEMENT = "parentTestElement"; //$NON-NLS-1$
private static final String LEAF_SECTION = "container"; //$NON-NLS-1$
private static final String MODEL_ELEMENTS = TestElementFeatures.containedElements().getName();
private static final String PARTICIPATING_ACTORS = "nonContained_NToM"; //$NON-NLS-1$
private static final String PARTICIPATED_USE_CASES = "nonContained_MToN"; //$NON-NLS-1$
private static final String INITIATING_ACTOR = "nonContained_NTo1"; //$NON-NLS-1$
private static final String INITIATED_USE_CASES = "nonContained_1ToN"; //$NON-NLS-1$
/**
* Test element creation tracking.
*
* @throws UnsupportedOperationException on test fail
* @throws UnsupportedNotificationException on test fail
*/
@Test
public void createElementTest() throws UnsupportedOperationException, UnsupportedNotificationException {
final TestElement useCase = Create.testElement();
new EMFStoreCommand() {
@Override
protected void doRun() {
getProject().addModelElement(useCase);
}
}.run(false);
final List<AbstractOperation> operations = getProjectSpace().getOperations();
assertEquals(1, operations.size());
final AbstractOperation operation = operations.get(0);
assertTrue(operation instanceof CreateDeleteOperation);
final CreateDeleteOperation createDeleteOperation = (CreateDeleteOperation) operation;
final ModelElementId useCaseId = ModelUtil.getProject(useCase).getModelElementId(useCase);
assertEquals(useCaseId, createDeleteOperation.getModelElementId());
assertEquals(0, createDeleteOperation.getSubOperations().size());
assertFalse(createDeleteOperation.isDelete());
}
/**
* Test element creation tracking.
*
* @throws UnsupportedOperationException on test fail
* @throws UnsupportedNotificationException on test fail
*/
@Test
public void createElementWithPostCreationObserverTest() throws UnsupportedOperationException,
UnsupportedNotificationException {
final TestElement useCase = Create.testElement();
useCase.setName(OLD_NAME);
final ESPostCreationObserver observer = new ESPostCreationObserver() {
public void onCreation(EObject modelElement) {
if (modelElement instanceof TestElement) {
final TestElement useCase = (TestElement) modelElement;
useCase.setName(POST_CREATION_CHANGED_NAME);
}
}
};
ESWorkspaceProviderImpl.getObserverBus().register(observer);
new EMFStoreCommand() {
@Override
protected void doRun() {
getProject().addModelElement(useCase);
}
}.run(false);
ESWorkspaceProviderImpl.getObserverBus().unregister(observer);
final List<AbstractOperation> operations = getProjectSpace().getOperations();
assertEquals(1, operations.size());
final AbstractOperation operation = operations.get(0);
assertTrue(operation instanceof CreateDeleteOperation);
final CreateDeleteOperation createDeleteOperation = (CreateDeleteOperation) operation;
final ModelElementId useCaseId = ModelUtil.getProject(useCase).getModelElementId(useCase);
assertEquals(useCaseId, createDeleteOperation.getModelElementId());
assertEquals(POST_CREATION_CHANGED_NAME, ((TestElement) createDeleteOperation.getModelElement()).getName());
assertEquals(0, createDeleteOperation.getSubOperations().size());
assertFalse(createDeleteOperation.isDelete());
}
/**
* Test adding an element with cross references to an existing element.
*
* @throws UnsupportedOperationException on test fail
* @throws UnsupportedNotificationException on test fail
*/
@Test
public void createElementwithCrossreferencesTest() throws UnsupportedOperationException,
UnsupportedNotificationException {
final TestElement useCase = Create.testElement();
new EMFStoreCommand() {
@Override
protected void doRun() {
getProject().addModelElement(useCase);
}
}.run(false);
assertTrue(getProject().contains(useCase));
assertEquals(getProject(), ModelUtil.getProject(useCase));
final TestElement functionalRequirement = Create.testElement();
new EMFStoreCommand() {
@Override
protected void doRun() {
clearOperations();
useCase.getNonContained_NToM().add(functionalRequirement);
}
}.run(false);
assertEquals(functionalRequirement, useCase.getNonContained_NToM().get(0));
assertEquals(useCase, functionalRequirement.getNonContained_MToN().get(0));
assertTrue(getProject().contains(functionalRequirement));
assertEquals(getProject(), ModelUtil.getProject(functionalRequirement));
final List<AbstractOperation> operations = getProjectSpace().getOperations();
assertEquals(2, operations.size());
final AbstractOperation operation = operations.get(0);
assertTrue(operation instanceof CreateDeleteOperation);
final CreateDeleteOperation createDeleteOperation = (CreateDeleteOperation) operation;
final ModelElementId funtionalRQID = ModelUtil.getProject(useCase).getModelElementId(functionalRequirement);
assertEquals(funtionalRQID, createDeleteOperation.getModelElementId());
assertEquals(2, createDeleteOperation.getSubOperations().size());
assertFalse(createDeleteOperation.isDelete());
final MultiReferenceOperation subOperation1 = (MultiReferenceOperation) createDeleteOperation
.getSubOperations().get(
0);
assertEquals(functionalRequirement, getProject().getModelElement(subOperation1.getModelElementId()));
assertEquals(useCase, getProject().getModelElement(subOperation1.getReferencedModelElements().get(0)));
final MultiReferenceOperation subOperation2 = (MultiReferenceOperation) createDeleteOperation
.getSubOperations().get(
1);
assertEquals(useCase, getProject().getModelElement(subOperation2.getModelElementId()));
assertEquals(functionalRequirement,
getProject().getModelElement(subOperation2.getReferencedModelElements().get(0)));
}
/**
* check element deletion tracking.
*
* @throws UnsupportedOperationException on test fail
* @throws UnsupportedNotificationException on test fail
*/
@Test
public void deleteElementTest() throws UnsupportedOperationException, UnsupportedNotificationException {
final TestElement useCase = Create.testElement();
new EMFStoreCommand() {
@Override
protected void doRun() {
getProject().addModelElement(useCase);
clearOperations();
}
}.run(false);
final ModelElementId useCaseId = ModelUtil.getProject(useCase).getModelElementId(useCase);
new EMFStoreCommand() {
@Override
protected void doRun() {
getProject().deleteModelElement(useCase);
}
}.run(false);
final List<AbstractOperation> operations = getProjectSpace().getLocalChangePackage().getOperations();
assertEquals(1, operations.size());
final AbstractOperation operation = operations.get(0);
assertTrue(operation instanceof CreateDeleteOperation);
final CreateDeleteOperation createDeleteOperation = (CreateDeleteOperation) operation;
assertEquals(useCaseId, createDeleteOperation.getModelElementId());
assertEquals(0, createDeleteOperation.getSubOperations().size());
assertTrue(createDeleteOperation.isDelete());
}
/**
* check complex element deletion tracking.
*
* @throws UnsupportedOperationException on test fail
* @throws UnsupportedNotificationException on test fail
* @throws IOException
*/
@Test
// BEGIN COMPLEX CODE
public void complexDeleteElementTest() throws UnsupportedOperationException, UnsupportedNotificationException,
IOException {
final TestElement section = Create.testElement();
final TestElement useCase = Create.testElement();
final TestElement oldTestElement = Create.testElement();
final TestElement newTestElement = Create.testElement();
final TestElement otherTestElement = Create.testElement();
new EMFStoreCommand() {
@Override
protected void doRun() {
getProject().addModelElement(section);
section.getContainedElements().add(useCase);
section.getContainedElements().add(oldTestElement);
getProject().addModelElement(newTestElement);
getProject().addModelElement(otherTestElement);
useCase.setNonContained_NTo1(oldTestElement);
useCase.getNonContained_NToM().add(newTestElement);
useCase.getNonContained_NToM().add(otherTestElement);
assertTrue(getProject().contains(useCase));
assertEquals(getProject(), ModelUtil.getProject(useCase));
clearOperations();
}
}.run(false);
final ModelElementId useCaseId = getProject().getModelElementId(useCase);
Delete.fromProject(getLocalProject(), useCase);
assertFalse(getProject().contains(useCase));
List<AbstractOperation> operations = getProjectSpace().getOperations();
assertEquals(1, operations.size());
EList<ReferenceOperation> subOperations = checkAndCast(operations.get(0), CreateDeleteOperation.class)
.getSubOperations();
assertEquals(8, subOperations.size());
MultiReferenceOperation mrSubOperation0 = checkAndCast(subOperations.get(0), MultiReferenceOperation.class);
SingleReferenceOperation srSubOperation1 = checkAndCast(subOperations.get(1), SingleReferenceOperation.class);
MultiReferenceOperation mrSubOperation2 = checkAndCast(subOperations.get(2), MultiReferenceOperation.class);
MultiReferenceOperation mrSubOperation3 = checkAndCast(subOperations.get(3), MultiReferenceOperation.class);
MultiReferenceOperation mrSubOperation4 = checkAndCast(subOperations.get(4), MultiReferenceOperation.class);
MultiReferenceOperation mrSubOperation5 = checkAndCast(subOperations.get(5), MultiReferenceOperation.class);
SingleReferenceOperation srSubOperation6 = checkAndCast(subOperations.get(6), SingleReferenceOperation.class);
MultiReferenceOperation mrSubOperation7 = checkAndCast(subOperations.get(7), MultiReferenceOperation.class);
assertEquals(INITIATED_USE_CASES, mrSubOperation0.getFeatureName());
assertEquals(0, mrSubOperation0.getIndex());
final ModelElementId oldTestElementId = ModelUtil.getProject(oldTestElement).getModelElementId(oldTestElement);
final ModelElementId otherTestElementId = ModelUtil.getProject(otherTestElement).getModelElementId(
otherTestElement);
final ModelElementId newTestElementId = ModelUtil.getProject(newTestElement).getModelElementId(newTestElement);
final ModelElementId sectionId = ModelUtil.getProject(section).getModelElementId(section);
assertEquals(oldTestElementId, mrSubOperation0.getModelElementId());
assertEquals(INITIATING_ACTOR, mrSubOperation0.getOppositeFeatureName());
assertFalse(mrSubOperation0.isAdd());
assertTrue(mrSubOperation0.isBidirectional());
Set<ModelElementId> otherInvolvedModelElements0 = mrSubOperation0.getOtherInvolvedModelElements();
assertEquals(1, otherInvolvedModelElements0.size());
EList<ModelElementId> referencedModelElements0 = mrSubOperation0.getReferencedModelElements();
assertEquals(1, referencedModelElements0.size());
assertEquals(useCaseId, referencedModelElements0.get(0));
assertEquals(oldTestElementId, srSubOperation1.getOldValue());
assertEquals(null, srSubOperation1.getNewValue());
assertEquals(INITIATING_ACTOR, srSubOperation1.getFeatureName());
assertEquals(useCaseId, srSubOperation1.getModelElementId());
assertEquals(INITIATED_USE_CASES, srSubOperation1.getOppositeFeatureName());
assertTrue(srSubOperation1.isBidirectional());
Set<ModelElementId> otherInvolvedModelElements = srSubOperation1.getOtherInvolvedModelElements();
assertEquals(1, otherInvolvedModelElements.size());
assertEquals(oldTestElementId, otherInvolvedModelElements.iterator().next());
assertEquals(newTestElementId, mrSubOperation2.getModelElementId());
assertEquals(PARTICIPATED_USE_CASES, mrSubOperation2.getFeatureName());
assertFalse(mrSubOperation2.isAdd());
assertEquals(1, mrSubOperation2.getReferencedModelElements().size());
assertEquals(useCaseId, mrSubOperation2.getReferencedModelElements().get(0));
assertEquals(useCaseId, mrSubOperation3.getModelElementId());
assertEquals(PARTICIPATING_ACTORS, mrSubOperation3.getFeatureName());
assertFalse(mrSubOperation3.isAdd());
assertEquals(1, mrSubOperation3.getReferencedModelElements().size());
assertEquals(newTestElementId, mrSubOperation3.getReferencedModelElements().get(0));
assertEquals(otherTestElementId, mrSubOperation4.getModelElementId());
assertEquals(PARTICIPATED_USE_CASES, mrSubOperation4.getFeatureName());
assertFalse(mrSubOperation4.isAdd());
assertEquals(1, mrSubOperation4.getReferencedModelElements().size());
assertEquals(useCaseId, mrSubOperation4.getReferencedModelElements().get(0));
assertEquals(PARTICIPATING_ACTORS, mrSubOperation5.getFeatureName());
assertEquals(0, mrSubOperation5.getIndex());
assertEquals(useCaseId, mrSubOperation5.getModelElementId());
assertEquals(PARTICIPATED_USE_CASES, mrSubOperation5.getOppositeFeatureName());
assertFalse(mrSubOperation5.isAdd());
assertTrue(mrSubOperation5.isBidirectional());
Set<ModelElementId> otherInvolvedModelElements2 = mrSubOperation5.getOtherInvolvedModelElements();
assertEquals(1, otherInvolvedModelElements2.size());
EList<ModelElementId> referencedModelElements = mrSubOperation5.getReferencedModelElements();
assertEquals(1, referencedModelElements.size());
assertEquals(otherTestElementId, referencedModelElements.get(0));
assertEquals(useCaseId, srSubOperation6.getModelElementId());
assertEquals(LEAF_SECTION, srSubOperation6.getFeatureName());
assertEquals(sectionId, srSubOperation6.getOldValue());
assertEquals(null, srSubOperation6.getNewValue());
assertEquals(MODEL_ELEMENTS, mrSubOperation7.getFeatureName());
assertEquals(0, mrSubOperation7.getIndex());
assertEquals(sectionId, mrSubOperation7.getModelElementId());
assertEquals(LEAF_SECTION, mrSubOperation7.getOppositeFeatureName());
assertFalse(mrSubOperation7.isAdd());
assertTrue(mrSubOperation7.isBidirectional());
Set<ModelElementId> otherInvolvedModelElements3 = mrSubOperation7.getOtherInvolvedModelElements();
assertEquals(1, otherInvolvedModelElements3.size());
EList<ModelElementId> referencedModelElements3 = mrSubOperation7.getReferencedModelElements();
assertEquals(1, referencedModelElements3.size());
assertEquals(useCaseId, referencedModelElements3.get(0));
getProjectSpace().save();
final ProjectSpace loadedProjectSpace = ModelUtil.loadEObjectFromResource(
ModelPackage.eINSTANCE.getProjectSpace(),
getProjectSpace().eResource().getURI(), false);
final Project loadedProject = loadedProjectSpace.getProject();
assertFalse(loadedProject.contains(useCase));
operations = loadedProjectSpace.getLocalChangePackage().getOperations();
assertEquals(1, operations.size());
final CreateDeleteOperation createDeleteOperation = checkAndCast(operations.get(0), CreateDeleteOperation.class);
assertTrue(createDeleteOperation.isDelete());
assertEquals(useCaseId, createDeleteOperation.getModelElementId());
subOperations = createDeleteOperation.getSubOperations();
mrSubOperation0 = checkAndCast(subOperations.get(0), MultiReferenceOperation.class);
srSubOperation1 = checkAndCast(subOperations.get(1), SingleReferenceOperation.class);
mrSubOperation2 = checkAndCast(subOperations.get(2), MultiReferenceOperation.class);
mrSubOperation3 = checkAndCast(subOperations.get(3), MultiReferenceOperation.class);
mrSubOperation4 = checkAndCast(subOperations.get(4), MultiReferenceOperation.class);
mrSubOperation5 = checkAndCast(subOperations.get(5), MultiReferenceOperation.class);
srSubOperation6 = checkAndCast(subOperations.get(6), SingleReferenceOperation.class);
mrSubOperation7 = checkAndCast(subOperations.get(7), MultiReferenceOperation.class);
assertEquals(INITIATED_USE_CASES, mrSubOperation0.getFeatureName());
assertEquals(0, mrSubOperation0.getIndex());
assertEquals(oldTestElementId, mrSubOperation0.getModelElementId());
assertEquals(INITIATING_ACTOR, mrSubOperation0.getOppositeFeatureName());
assertFalse(mrSubOperation0.isAdd());
assertTrue(mrSubOperation0.isBidirectional());
otherInvolvedModelElements0 = mrSubOperation0.getOtherInvolvedModelElements();
assertEquals(1, otherInvolvedModelElements0.size());
referencedModelElements0 = mrSubOperation0.getReferencedModelElements();
assertEquals(1, referencedModelElements0.size());
assertEquals(useCaseId, referencedModelElements0.get(0));
assertEquals(oldTestElementId, srSubOperation1.getOldValue());
assertEquals(null, srSubOperation1.getNewValue());
assertEquals(INITIATING_ACTOR, srSubOperation1.getFeatureName());
assertEquals(useCaseId, srSubOperation1.getModelElementId());
assertEquals(INITIATED_USE_CASES, srSubOperation1.getOppositeFeatureName());
assertTrue(srSubOperation1.isBidirectional());
otherInvolvedModelElements = srSubOperation1.getOtherInvolvedModelElements();
assertEquals(1, otherInvolvedModelElements.size());
assertEquals(oldTestElementId, otherInvolvedModelElements.iterator().next());
assertEquals(newTestElementId, mrSubOperation2.getModelElementId());
assertEquals(PARTICIPATED_USE_CASES, mrSubOperation2.getFeatureName());
assertFalse(mrSubOperation2.isAdd());
assertEquals(1, mrSubOperation2.getReferencedModelElements().size());
assertEquals(useCaseId, mrSubOperation2.getReferencedModelElements().get(0));
assertEquals(useCaseId, mrSubOperation3.getModelElementId());
assertEquals(PARTICIPATING_ACTORS, mrSubOperation3.getFeatureName());
assertFalse(mrSubOperation3.isAdd());
assertEquals(1, mrSubOperation3.getReferencedModelElements().size());
assertEquals(newTestElementId, mrSubOperation3.getReferencedModelElements().get(0));
assertEquals(PARTICIPATED_USE_CASES, mrSubOperation4.getFeatureName());
assertEquals(0, mrSubOperation4.getIndex());
assertEquals(otherTestElementId, mrSubOperation4.getModelElementId());
assertEquals(PARTICIPATING_ACTORS, mrSubOperation4.getOppositeFeatureName());
assertFalse(mrSubOperation4.isAdd());
assertTrue(mrSubOperation4.isBidirectional());
otherInvolvedModelElements2 = mrSubOperation4.getOtherInvolvedModelElements();
assertEquals(1, otherInvolvedModelElements2.size());
referencedModelElements = mrSubOperation4.getReferencedModelElements();
assertEquals(1, referencedModelElements.size());
assertEquals(useCaseId, referencedModelElements.get(0));
assertEquals(PARTICIPATING_ACTORS, mrSubOperation5.getFeatureName());
assertEquals(0, mrSubOperation5.getIndex());
assertEquals(useCaseId, mrSubOperation5.getModelElementId());
assertEquals(PARTICIPATED_USE_CASES, mrSubOperation5.getOppositeFeatureName());
assertFalse(mrSubOperation5.isAdd());
assertTrue(mrSubOperation5.isBidirectional());
otherInvolvedModelElements2 = mrSubOperation5.getOtherInvolvedModelElements();
assertEquals(1, otherInvolvedModelElements2.size());
referencedModelElements = mrSubOperation5.getReferencedModelElements();
assertEquals(1, referencedModelElements.size());
assertEquals(otherTestElementId, referencedModelElements.get(0));
assertEquals(useCaseId, srSubOperation6.getModelElementId());
assertEquals(LEAF_SECTION, srSubOperation6.getFeatureName());
assertEquals(sectionId, srSubOperation6.getOldValue());
assertNull(srSubOperation6.getNewValue());
assertEquals(MODEL_ELEMENTS, mrSubOperation7.getFeatureName());
assertEquals(0, mrSubOperation7.getIndex());
assertEquals(sectionId, mrSubOperation7.getModelElementId());
assertEquals(LEAF_SECTION, mrSubOperation7.getOppositeFeatureName());
assertFalse(mrSubOperation7.isAdd());
assertTrue(mrSubOperation7.isBidirectional());
otherInvolvedModelElements3 = mrSubOperation7.getOtherInvolvedModelElements();
assertEquals(1, otherInvolvedModelElements3.size());
referencedModelElements3 = mrSubOperation7.getReferencedModelElements();
assertEquals(1, referencedModelElements3.size());
assertEquals(useCaseId, referencedModelElements3.get(0));
}
/**
* check complex element deletion tracking.
*
* @throws UnsupportedOperationException on test fail
* @throws UnsupportedNotificationException on test fail
* @throws IOException
*/
@Test
public void complexDeleteElementReverseTest() throws UnsupportedOperationException,
UnsupportedNotificationException, IOException {
final TestElement section = Create.testElement();
final TestElement useCase = Create.testElement();
final TestElement oldTestElement = Create.testElement();
final TestElement newTestElement = Create.testElement();
final TestElement otherTestElement = Create.testElement();
new EMFStoreCommand() {
@Override
protected void doRun() {
getProject().addModelElement(section);
section.getContainedElements().add(useCase);
section.getContainedElements().add(oldTestElement);
getProject().addModelElement(newTestElement);
getProject().addModelElement(otherTestElement);
useCase.setNonContained_NTo1(oldTestElement);
useCase.getNonContained_NToM().add(newTestElement);
useCase.getNonContained_NToM().add(otherTestElement);
assertTrue(getProject().contains(useCase));
assertTrue(getProject().contains(oldTestElement));
assertTrue(getProject().contains(newTestElement));
assertTrue(getProject().contains(otherTestElement));
assertEquals(1, oldTestElement.getNonContained_1ToN().size());
assertEquals(1, newTestElement.getNonContained_MToN().size());
assertEquals(1, otherTestElement.getNonContained_MToN().size());
assertEquals(useCase, oldTestElement.getNonContained_1ToN().get(0));
assertEquals(useCase, newTestElement.getNonContained_MToN().get(0));
assertEquals(useCase, otherTestElement.getNonContained_MToN().get(0));
clearOperations();
}
}.run(false);
final ModelElementId useCaseId = getProject().getModelElementId(useCase);
new EMFStoreCommand() {
@Override
protected void doRun() {
getProject().deleteModelElement(useCase);
}
}.run(false);
assertFalse(getProject().contains(useCase));
assertEquals(0, oldTestElement.getNonContained_1ToN().size());
assertEquals(0, newTestElement.getNonContained_MToN().size());
assertEquals(0, otherTestElement.getNonContained_MToN().size());
final List<AbstractOperation> operations = getProjectSpace().getOperations();
assertEquals(1, operations.size());
final AbstractOperation operation = operations.get(0);
final AbstractOperation reverse = operation.reverse();
assertTrue(reverse instanceof CreateDeleteOperation);
final CreateDeleteOperation createDeleteOperation = (CreateDeleteOperation) reverse;
assertFalse(createDeleteOperation.isDelete());
assertEquals(useCaseId, createDeleteOperation.getModelElementId());
final EList<ReferenceOperation> subOperations = createDeleteOperation.getSubOperations();
assertEquals(8, subOperations.size());
final AbstractOperation subOperation0 = subOperations.get(7);
final AbstractOperation subOperation1 = subOperations.get(6);
final AbstractOperation subOperation2 = subOperations.get(5);
final AbstractOperation subOperation3 = subOperations.get(4);
final AbstractOperation subOperation4 = subOperations.get(3);
final AbstractOperation subOperation5 = subOperations.get(2);
final AbstractOperation subOperation6 = subOperations.get(1);
final AbstractOperation subOperation7 = subOperations.get(0);
assertTrue(subOperation0 instanceof MultiReferenceOperation);
assertTrue(subOperation1 instanceof SingleReferenceOperation);
assertTrue(subOperation2 instanceof MultiReferenceOperation);
assertTrue(subOperation3 instanceof MultiReferenceOperation);
assertTrue(subOperation4 instanceof MultiReferenceOperation);
assertTrue(subOperation5 instanceof MultiReferenceOperation);
assertTrue(subOperation6 instanceof SingleReferenceOperation);
assertTrue(subOperation7 instanceof MultiReferenceOperation);
final MultiReferenceOperation mrSubOperation0 = (MultiReferenceOperation) subOperation0;
final SingleReferenceOperation mrSubOperation1 = (SingleReferenceOperation) subOperation1;
final MultiReferenceOperation mrSubOperation2 = (MultiReferenceOperation) subOperation2;
final MultiReferenceOperation mrSubOperation3 = (MultiReferenceOperation) subOperation3;
final MultiReferenceOperation mrSubOperation4 = (MultiReferenceOperation) subOperation4;
final MultiReferenceOperation mrSubOperation5 = (MultiReferenceOperation) subOperation5;
final SingleReferenceOperation mrSubOperation6 = (SingleReferenceOperation) subOperation6;
final MultiReferenceOperation mrSubOperation7 = (MultiReferenceOperation) subOperation7;
final ModelElementId oldTestElementId = ModelUtil.getProject(oldTestElement).getModelElementId(oldTestElement);
final ModelElementId newTestElementId = ModelUtil.getProject(newTestElement).getModelElementId(newTestElement);
final ModelElementId otherTestElementId = ModelUtil.getProject(otherTestElement).getModelElementId(
otherTestElement);
final ModelElementId sectionId = ModelUtil.getProject(section).getModelElementId(section);
assertEquals(INITIATED_USE_CASES, mrSubOperation0.getFeatureName());
assertEquals(0, mrSubOperation0.getIndex());
assertEquals(oldTestElementId, mrSubOperation0.getModelElementId());
assertEquals(INITIATING_ACTOR, mrSubOperation0.getOppositeFeatureName());
assertTrue(mrSubOperation0.isAdd());
assertTrue(mrSubOperation0.isBidirectional());
final Set<ModelElementId> otherInvolvedModelElements0 = mrSubOperation0.getOtherInvolvedModelElements();
assertEquals(1, otherInvolvedModelElements0.size());
final EList<ModelElementId> referencedModelElements0 = mrSubOperation0.getReferencedModelElements();
assertEquals(1, referencedModelElements0.size());
assertEquals(useCaseId, referencedModelElements0.get(0));
assertEquals(oldTestElementId, mrSubOperation1.getNewValue());
assertEquals(null, mrSubOperation1.getOldValue());
assertEquals(INITIATING_ACTOR, mrSubOperation1.getFeatureName());
assertEquals(useCaseId, mrSubOperation1.getModelElementId());
assertEquals(INITIATED_USE_CASES, mrSubOperation1.getOppositeFeatureName());
assertTrue(mrSubOperation1.isBidirectional());
final Set<ModelElementId> otherInvolvedModelElements = mrSubOperation1.getOtherInvolvedModelElements();
assertEquals(1, otherInvolvedModelElements.size());
assertEquals(oldTestElementId, otherInvolvedModelElements.iterator().next());
assertEquals(newTestElementId, mrSubOperation2.getModelElementId());
assertEquals(PARTICIPATED_USE_CASES, mrSubOperation2.getFeatureName());
assertTrue(mrSubOperation2.isAdd());
assertEquals(1, mrSubOperation2.getReferencedModelElements().size());
assertEquals(useCaseId, mrSubOperation2.getReferencedModelElements().get(0));
assertEquals(useCaseId, mrSubOperation3.getModelElementId());
assertEquals(PARTICIPATING_ACTORS, mrSubOperation3.getFeatureName());
assertTrue(mrSubOperation3.isAdd());
assertEquals(1, mrSubOperation3.getReferencedModelElements().size());
assertEquals(newTestElementId, mrSubOperation3.getReferencedModelElements().get(0));
assertEquals(PARTICIPATED_USE_CASES, mrSubOperation4.getFeatureName());
assertEquals(0, mrSubOperation4.getIndex());
assertEquals(otherTestElementId, mrSubOperation4.getModelElementId());
assertEquals(PARTICIPATING_ACTORS, mrSubOperation4.getOppositeFeatureName());
assertTrue(mrSubOperation4.isAdd());
assertTrue(mrSubOperation4.isBidirectional());
final Set<ModelElementId> otherInvolvedModelElements2 = mrSubOperation4.getOtherInvolvedModelElements();
assertEquals(1, otherInvolvedModelElements2.size());
final EList<ModelElementId> referencedModelElements = mrSubOperation4.getReferencedModelElements();
assertEquals(1, referencedModelElements.size());
assertEquals(useCaseId, referencedModelElements.get(0));
assertEquals(PARTICIPATING_ACTORS, mrSubOperation5.getFeatureName());
assertEquals(0, mrSubOperation5.getIndex());
assertEquals(useCaseId, mrSubOperation5.getModelElementId());
assertEquals(PARTICIPATED_USE_CASES, mrSubOperation5.getOppositeFeatureName());
assertTrue(mrSubOperation5.isAdd());
assertTrue(mrSubOperation5.isBidirectional());
final Set<ModelElementId> otherInvolvedModelElements3 = mrSubOperation5.getOtherInvolvedModelElements();
assertEquals(1, otherInvolvedModelElements3.size());
final EList<ModelElementId> referencedModelElements2 = mrSubOperation5.getReferencedModelElements();
assertEquals(1, referencedModelElements2.size());
assertEquals(otherTestElementId, referencedModelElements2.get(0));
assertEquals(useCaseId, mrSubOperation6.getModelElementId());
assertEquals(LEAF_SECTION, mrSubOperation6.getFeatureName());
assertEquals(sectionId, mrSubOperation6.getNewValue());
assertEquals(null, mrSubOperation6.getOldValue());
assertEquals(MODEL_ELEMENTS, mrSubOperation7.getFeatureName());
assertEquals(0, mrSubOperation7.getIndex());
assertEquals(sectionId, mrSubOperation7.getModelElementId());
assertEquals(LEAF_SECTION, mrSubOperation7.getOppositeFeatureName());
assertTrue(mrSubOperation7.isAdd());
assertTrue(mrSubOperation7.isBidirectional());
final Set<ModelElementId> otherInvolvedModelElements4 = mrSubOperation7.getOtherInvolvedModelElements();
assertEquals(1, otherInvolvedModelElements4.size());
final EList<ModelElementId> referencedModelElements3 = mrSubOperation7.getReferencedModelElements();
assertEquals(1, referencedModelElements3.size());
assertEquals(useCaseId, referencedModelElements3.get(0));
new EMFStoreCommand() {
@Override
protected void doRun() {
reverse.apply(getProject());
}
}.run(false);
assertTrue(getProject().contains(useCaseId));
assertTrue(getProject().contains(oldTestElement));
assertTrue(getProject().contains(newTestElement));
assertTrue(getProject().contains(otherTestElement));
assertEquals(1, oldTestElement.getNonContained_1ToN().size());
assertEquals(1, newTestElement.getNonContained_MToN().size());
assertEquals(1, otherTestElement.getNonContained_MToN().size());
final EObject useCaseClone = getProject().getModelElement(useCaseId);
assertEquals(useCaseClone, oldTestElement.getNonContained_1ToN().get(0));
assertEquals(useCaseClone, newTestElement.getNonContained_MToN().get(0));
assertEquals(useCaseClone, otherTestElement.getNonContained_MToN().get(0));
getProjectSpace().save();
final Project loadedProject = ModelUtil.loadEObjectFromResource(
org.eclipse.emf.emfstore.internal.common.model.ModelFactory.eINSTANCE.getModelPackage().getProject(),
getProject()
.eResource().getURI(), false);
assertTrue(ModelUtil.areEqual(loadedProject, getProject()));
assertTrue(loadedProject.contains(useCaseId));
assertTrue(loadedProject.contains(oldTestElementId));
assertTrue(loadedProject.contains(newTestElementId));
assertTrue(loadedProject.contains(otherTestElementId));
}
/**
* check complex element deletion tracking.
*
* @throws UnsupportedOperationException on test fail
* @throws UnsupportedNotificationException on test fail
* @throws IOException
*/
@Test
public void complexCreateTest() throws UnsupportedOperationException, UnsupportedNotificationException, IOException {
for (int i = 0; i < 10; i++) {
final TestElement createCompositeSection = Create.testElement();
createCompositeSection.setName(HELMUT + i);
new EMFStoreCommand() {
@Override
protected void doRun() {
getProject().addModelElement(createCompositeSection);
final TestElement createLeafSection = Create.testElement();
createCompositeSection.getContainedElements().add(createLeafSection);
for (int j = 0; j < 10; j++) {
final TestElement createActionItem = Create.testElement();
createActionItem.setName(MAX_TU_DIES + j);
createLeafSection.getContainedElements().add(createActionItem);
}
}
}.run(false);
}
assertEquals(230, getProjectSpace().getOperations().size());
getProjectSpace().save();
final ProjectSpace loadedProjectSpace = ModelUtil.loadEObjectFromResource(
ModelPackage.eINSTANCE.getProjectSpace(),
getProjectSpace().eResource().getURI(), false);
assertTrue(ModelUtil.areEqual(getProjectSpace().getProject(), loadedProjectSpace.getProject()));
}
/**
* Delete a parent with a child contained in a single reference.
*
* @throws IOException
*/
@Test
public void deleteWithSingleReferenceChildTest() throws IOException {
final TestElement issue = Create.testElement();
final TestElement solution = Create.testElement();
new EMFStoreCommand() {
@Override
protected void doRun() {
issue.setContainedElement(solution);
getProject().addModelElement(issue);
assertTrue(getProject().contains(issue));
assertTrue(getProject().contains(solution));
assertEquals(solution, issue.getContainedElement());
assertEquals(issue, solution.getSrefContainer());
clearOperations();
}
}.run(false);
final ModelElementId solutionId = ModelUtil.getProject(solution).getModelElementId(solution);
new EMFStoreCommand() {
@Override
protected void doRun() {
getProject().deleteModelElement(solution);
}
}.run(false);
assertTrue(getProject().contains(issue));
assertFalse(getProject().contains(solution));
assertEquals(null, issue.getContainedElement());
assertEquals(null, solution.getSrefContainer());
List<AbstractOperation> operations = getProjectSpace().getOperations();
assertEquals(1, operations.size());
AbstractOperation operation = operations.get(0);
assertTrue(operation instanceof CreateDeleteOperation);
CreateDeleteOperation createDeleteOperation = (CreateDeleteOperation) operation;
assertTrue(createDeleteOperation.isDelete());
assertEquals(solutionId, createDeleteOperation.getModelElementId());
final EList<ReferenceOperation> subOperations = createDeleteOperation.getSubOperations();
assertEquals(2, subOperations.size());
getProjectSpace().save();
final ProjectSpace loadedProjectSpace = ModelUtil.loadEObjectFromResource(
ModelPackage.eINSTANCE.getProjectSpace(),
getProjectSpace().eResource().getURI(), false);
// perform asserts with loaded projects
assertTrue(ModelUtil.areEqual(getProjectSpace().getProject(), loadedProjectSpace.getProject()));
operations = loadedProjectSpace.getOperations();
assertEquals(1, operations.size());
operation = operations.get(0);
assertTrue(operation instanceof CreateDeleteOperation);
createDeleteOperation = (CreateDeleteOperation) operation;
assertTrue(createDeleteOperation.isDelete());
}
/**
* Test creation of element with cross references.
*
* @throws UnsupportedOperationException on test fail
* @throws UnsupportedNotificationException on test fail
*/
public void createWithCrossReferencesTest() throws UnsupportedOperationException, UnsupportedNotificationException {
final TestElement useCase = Create.testElement();
final TestElement useCase2 = Create.testElement();
new EMFStoreCommand() {
@Override
protected void doRun() {
getProject().addModelElement(useCase2);
useCase.getReferences().add(useCase2);
clearOperations();
}
}.run(false);
new EMFStoreCommand() {
@Override
protected void doRun() {
getProject().addModelElement(useCase);
assertTrue(getProject().contains(useCase));
assertTrue(getProject().contains(useCase2));
assertEquals(1, getProjectSpace().getOperations().size());
assertTrue(getProjectSpace().getOperations().get(0) instanceof CreateDeleteOperation);
final CreateDeleteOperation operation = (CreateDeleteOperation) getProjectSpace().getOperations()
.get(0);
assertEquals(getProject().getModelElementId(useCase), operation.getModelElementId());
assertEquals(2, operation.getSubOperations().size());
assertTrue(operation.getSubOperations().get(0) instanceof MultiReferenceOperation);
}
}.run(false);
}
/**
* Test creating an element in a non project containment.
*
* @throws IOException
*/
@Test
public void createInNonProjectContainmentTest() throws IOException {
final TestElement section = Create.testElement();
final TestElement useCase = Create.testElement();
new EMFStoreCommand() {
@Override
protected void doRun() {
getProject().addModelElement(section);
assertTrue(getProject().contains(section));
clearOperations();
section.getContainedElements().add(useCase);
}
}.run(false);
assertTrue(getProject().contains(useCase));
assertTrue(getProject().contains(section));
assertEquals(1, section.getContainedElements().size());
assertEquals(section, useCase.getContainer());
assertEquals(useCase, section.getContainedElements().iterator().next());
List<AbstractOperation> operations = getProjectSpace().getOperations();
assertEquals(2, operations.size());
AbstractOperation operation1 = operations.get(0);
AbstractOperation operation2 = operations.get(1);
assertTrue(operation1 instanceof CreateDeleteOperation);
assertTrue(operation2 instanceof MultiReferenceOperation);
CreateDeleteOperation createOperation = (CreateDeleteOperation) operation1;
MultiReferenceOperation multiReferenceOperation = (MultiReferenceOperation) operation2;
assertFalse(createOperation.isDelete());
final ModelElementId useCaseId = ModelUtil.getProject(useCase).getModelElementId(useCase);
final ModelElementId sectionId = ModelUtil.getProject(section).getModelElementId(section);
assertEquals(useCaseId, createOperation.getModelElementId());
assertEquals(sectionId, multiReferenceOperation.getModelElementId());
getProjectSpace().save();
final ProjectSpace loadedProjectSpace = ModelUtil.loadEObjectFromResource(
ModelPackage.eINSTANCE.getProjectSpace(),
getProjectSpace().eResource().getURI(), false);
// perform asserts with loaded project
assertTrue(ModelUtil.areEqual(getProjectSpace().getProject(), loadedProjectSpace.getProject()));
operations = loadedProjectSpace.getOperations();
assertEquals(2, operations.size());
operation1 = operations.get(0);
operation2 = operations.get(1);
assertTrue(operation1 instanceof CreateDeleteOperation);
assertTrue(operation2 instanceof MultiReferenceOperation);
createOperation = (CreateDeleteOperation) operation1;
multiReferenceOperation = (MultiReferenceOperation) operation2;
assertFalse(createOperation.isDelete());
}
@Test
public void createEAttributes() throws IOException {
final EClass clazz = EcoreFactory.eINSTANCE.createEClass();
final EStructuralFeature attribute = EcoreFactory.eINSTANCE.createEAttribute();
final EStructuralFeature attribute2 = EcoreFactory.eINSTANCE.createEAttribute();
attribute.setName(ATTRIBUTE1);
attribute2.setName(ATTRIBUTE22);
clazz.getEStructuralFeatures().add(attribute);
clazz.getEStructuralFeatures().add(attribute2);
assertEquals(2, clazz.eContents().size());
new EMFStoreCommand() {
@Override
protected void doRun() {
getProject().addModelElement(clazz);
}
}.run(false);
getProjectSpace().save();
final ProjectSpace loadedProjectSpace = ModelUtil.loadEObjectFromResource(
ModelPackage.eINSTANCE.getProjectSpace(),
getProjectSpace().eResource().getURI(), false);
// perform asserts with loaded project space
assertTrue(ModelUtil.areEqual(getProjectSpace().getProject(), loadedProjectSpace.getProject()));
}
@Test
public void checkPersistentModelElementDeletion() throws IOException {
final EClass clazz = EcoreFactory.eINSTANCE.createEClass();
clazz.setName(CLAZZ2);
final EStructuralFeature attribute = EcoreFactory.eINSTANCE.createEAttribute();
final EStructuralFeature attribute2 = EcoreFactory.eINSTANCE.createEAttribute();
attribute.setName(ATTRIBUTE1);
attribute2.setName(ATTRIBUTE22);
clazz.getEStructuralFeatures().add(attribute2);
Add.toProject(getLocalProject(), attribute);
Add.toProject(getLocalProject(), clazz);
assertEquals(2, getProject().getModelElements().size()); // clazz, attribute
assertEquals(attribute, getProject().getModelElements().get(0));
assertEquals(clazz, getProject().getModelElements().get(1));
assertEquals(3, getProject().getAllModelElements().size()); // clazz, attribute, attribute2
new EMFStoreCommand() {
@Override
protected void doRun() {
clearOperations();
}
}.run(false);
// delete one ModelElement
new EMFStoreCommand() {
@Override
protected void doRun() {
EcoreUtil.delete(attribute);
}
}.run(false);
final List<AbstractOperation> operations = getProjectSpace().getOperations();
assertEquals(1, operations.size()); // one delete operation
assertTrue(operations.get(0) instanceof CreateDeleteOperation);
final CreateDeleteOperation operation = (CreateDeleteOperation) operations.get(0);
assertTrue(operation.isDelete());
// assertEquals(getProject().getDeletedModelElementId(attribute), operation.getModelElementId());
assertEquals(1, getProject().getModelElements().size()); // clazz
assertEquals(clazz, getProject().getModelElements().get(0));
assertEquals(2, getProject().getAllModelElements().size()); // clazz, attribute2
// load ProjectSpace from Resource and initialize
((ProjectSpaceImpl) getProjectSpace()).save();
final ProjectSpace loadedProjectSpace = ModelUtil.loadEObjectFromResource(
ModelPackage.eINSTANCE.getProjectSpace(),
getProjectSpace().eResource().getURI(), false);
loadedProjectSpace.init();
// perform asserts with loaded project space
assertTrue(ModelUtil.areEqual(getProjectSpace().getProject(), loadedProjectSpace.getProject()));
final Project loadedProject = loadedProjectSpace.getProject();
assertEquals(1, loadedProject.getModelElements().size()); // clazz
assertEquals(getProject().getModelElementId(clazz),
loadedProject.getModelElementId(loadedProject.getModelElements().get(0)));
assertEquals(2, loadedProject.getAllModelElements().size()); // clazz, attribute2
}
@Test
public void testECoreUtilCopyWithMeetings() {
// create a meeting with composite and subsections including intra - cross references
final TestElement compMeetingSection = Create.testElement();
final TestElement issueMeeting = Create.testElement();
final TestElement workItemMeetingSecion = Create.testElement();
compMeetingSection.getContainedElements().add(issueMeeting);
compMeetingSection.getContainedElements().add(workItemMeetingSecion);
final TestElement meeting = Create.testElement();
meeting.getContainedElements().add(compMeetingSection);
meeting.setReference(issueMeeting);
meeting.setOtherReference(workItemMeetingSecion);
// copy meeting and check if the intra cross references were actually copied
final TestElement copiedMeeting = ModelUtil.clone(meeting);
assertFalse(copiedMeeting.getReference() == meeting.getReference());
assertFalse(copiedMeeting.getOtherReference() == meeting.getOtherReference());
// add original element to project
new EMFStoreCommand() {
@Override
protected void doRun() {
getProject().addModelElement(meeting);
}
}.run(false);
final List<AbstractOperation> operations = getProjectSpace().getOperations();
assertEquals(1, operations.size());
final AbstractOperation operation1 = operations.get(0);
assertTrue(operation1 instanceof CreateDeleteOperation);
final CreateDeleteOperation createDeleteOperation = (CreateDeleteOperation) operation1;
assertFalse(createDeleteOperation.isDelete());
final TestElement meetingSection = (TestElement) createDeleteOperation.getModelElement();
assertFalse(meeting.getReference() == meetingSection.getReference());
}
@Test
public void testCopyProject() {
final TestElement compMeetingSection = Create.testElement();
final TestElement issueMeeting = Create.testElement();
final TestElement workItemMeetingSecion = Create.testElement();
compMeetingSection.getContainedElements().add(issueMeeting);
compMeetingSection.getContainedElements().add(workItemMeetingSecion);
new EMFStoreCommand() {
@Override
protected void doRun() {
getProject().addModelElement(compMeetingSection);
}
}.run(false);
final ModelElementId compMeetingSectionId = getProject().getModelElementId(compMeetingSection);
final Project copiedProject = ((ProjectImpl) getProject()).copy();
final EObject copiedMeetingSection = copiedProject.getModelElement(compMeetingSectionId);
assertNotNull(copiedMeetingSection);
}
@Test
public void testCreateWithOneIngoingReference() {
final TestElement parentTestElement = Create.testElement(PARENT);
final TestElement testElement = Create.testElement(TEST1);
final TestElement testElement2 = Create.testElement(TEST2);
new EMFStoreCommand() {
@Override
protected void doRun() {
getProject().addModelElement(parentTestElement);
testElement.getReferences().add(testElement2);
parentTestElement.getContainedElements().add(testElement);
}
}.run(false);
assertTrue(getProject().contains(parentTestElement));
assertEquals(getProject(), ModelUtil.getProject(parentTestElement));
assertTrue(getProject().contains(testElement));
assertEquals(getProject(), ModelUtil.getProject(testElement));
assertEquals(testElement, parentTestElement.getContainedElements().get(0));
assertEquals(testElement2, testElement.getReferences().get(0));
new EMFStoreCommand() {
@Override
protected void doRun() {
clearOperations();
}
}.run(false);
new EMFStoreCommand() {
@Override
protected void doRun() {
parentTestElement.getContainedElements().add(testElement2);
}
}.run(false);
assertTrue(getProject().contains(parentTestElement));
assertEquals(getProject(), ModelUtil.getProject(parentTestElement));
assertTrue(getProject().contains(testElement));
assertEquals(getProject(), ModelUtil.getProject(testElement));
assertEquals(testElement, parentTestElement.getContainedElements().get(0));
assertEquals(testElement2, testElement.getReferences().get(0));
assertTrue(getProject().contains(testElement2));
assertEquals(getProject(), ModelUtil.getProject(testElement2));
assertEquals(testElement2, parentTestElement.getContainedElements().get(1));
final List<AbstractOperation> operations = getProjectSpace().getOperations();
assertEquals(2, operations.size());
final AbstractOperation operation = operations.get(0);
assertTrue(operation instanceof CreateDeleteOperation);
final CreateDeleteOperation createDeleteOperation = (CreateDeleteOperation) operation;
// ModelElementId testElementId = ModelUtil.getProject(testElement).getModelElementId(testElement);
final ModelElementId testElement2Id = ModelUtil.getProject(testElement2).getModelElementId(testElement2);
// ModelElementId parentTestElementId = ModelUtil.getProject(parentTestElement).getModelElementId(
// parentTestElement);
assertEquals(testElement2Id, createDeleteOperation.getModelElementId());
assertEquals(1, createDeleteOperation.getSubOperations().size());
assertFalse(createDeleteOperation.isDelete());
assertTrue(CommonUtil.isSelfContained(createDeleteOperation, true));
final MultiReferenceOperation subOperation1 = (MultiReferenceOperation) createDeleteOperation
.getSubOperations().get(
0);
assertEquals(testElement, getProject().getModelElement(subOperation1.getModelElementId()));
assertEquals(testElement2, getProject().getModelElement(subOperation1.getReferencedModelElements().get(0)));
final MultiReferenceOperation operation2 = (MultiReferenceOperation) operations.get(1);
assertEquals(parentTestElement, getProject().getModelElement(operation2.getModelElementId()));
assertEquals(testElement2, getProject().getModelElement(operation2.getReferencedModelElements().get(0)));
}
@Test
public void testCreateWithReferencesAndChildrenComplex() {
final TestElement parentTestElement = Create.testElement(PARENT_TEST_ELEMENT);
final TestElement testElement = Create.testElement(TEST_ELEMENT);
final TestElement newTestElement = Create.testElement(NEW_TEST_ELEMENT);
final TestElement newChildElement1 = Create.testElement(NEW_CHILD_ELEMENT1);
final TestElement newChildElement2 = Create.testElement(NEW_CHILD_ELEMENT2);
final TestElement newChildElement3 = Create.testElement(NEW_CHILD_ELEMENT3);
new EMFStoreCommand() {
@Override
protected void doRun() {
getProject().addModelElement(parentTestElement);
parentTestElement.getContainedElements().add(testElement);
newTestElement.getContainedElements().add(newChildElement1);
newTestElement.getContainedElements().add(newChildElement2);
newTestElement.getContainedElements().add(newChildElement3);
newChildElement1.getReferences().add(newTestElement);
newChildElement2.getReferences().add(newChildElement1);
newChildElement2.getReferences().add(testElement);
testElement.getReferences().add(newChildElement3);
}
}.run(false);
assertTrue(getProject().contains(parentTestElement));
assertEquals(getProject(), ModelUtil.getProject(parentTestElement));
assertTrue(getProject().contains(testElement));
assertEquals(getProject(), ModelUtil.getProject(testElement));
assertFalse(getProject().contains(newTestElement));
assertFalse(getProject().contains(newChildElement1));
assertFalse(getProject().contains(newChildElement2));
assertTrue(getProject().contains(newChildElement3));
assertEquals(2, newTestElement.getContainedElements().size());
assertEquals(newChildElement1, newTestElement.getContainedElements().get(0));
assertEquals(newChildElement2, newTestElement.getContainedElements().get(1));
assertEquals(newTestElement, newChildElement1.getReferences().get(0));
assertEquals(newChildElement1, newChildElement2.getReferences().get(0));
assertEquals(testElement, newChildElement2.getReferences().get(1));
assertEquals(newChildElement3, testElement.getReferences().get(0));
new EMFStoreCommand() {
@Override
protected void doRun() {
clearOperations();
}
}.run(false);
new EMFStoreCommand() {
@Override
protected void doRun() {
parentTestElement.getContainedElements().add(newTestElement);
}
}.run(false);
assertTrue(getProject().contains(parentTestElement));
assertEquals(getProject(), ModelUtil.getProject(parentTestElement));
assertTrue(getProject().contains(testElement));
assertEquals(getProject(), ModelUtil.getProject(testElement));
assertTrue(getProject().contains(newTestElement));
assertTrue(getProject().contains(newChildElement1));
assertTrue(getProject().contains(newChildElement2));
assertTrue(getProject().contains(newChildElement3));
assertEquals(2, newTestElement.getContainedElements().size());
assertEquals(newChildElement1, newTestElement.getContainedElements().get(0));
assertEquals(newChildElement2, newTestElement.getContainedElements().get(1));
assertEquals(newTestElement, newChildElement1.getReferences().get(0));
assertEquals(newChildElement1, newChildElement2.getReferences().get(0));
assertEquals(testElement, newChildElement2.getReferences().get(1));
assertEquals(newChildElement3, testElement.getReferences().get(0));
final List<AbstractOperation> operations = getProjectSpace().getOperations();
assertEquals(2, operations.size());
final AbstractOperation operation = operations.get(0);
assertTrue(operation instanceof CreateDeleteOperation);
final CreateDeleteOperation createDeleteOperation = (CreateDeleteOperation) operation;
final ModelElementId newTestElementId = ModelUtil.getProject(newTestElement).getModelElementId(newTestElement);
final TestElement copiedNewTestElement = (TestElement) createDeleteOperation.getModelElement();
final TestElement copiedNewChildElement1 = copiedNewTestElement.getContainedElements().get(0);
final TestElement copiedNewChildElement2 = copiedNewTestElement.getContainedElements().get(1);
assertEquals(2, copiedNewTestElement.getContainedElements().size());
assertEquals(copiedNewTestElement, copiedNewChildElement1.getReferences().get(0));
assertEquals(copiedNewChildElement1, copiedNewChildElement2.getReferences().get(0));
assertEquals(1, copiedNewChildElement2.getReferences().size());
assertEquals(newTestElementId, createDeleteOperation.getModelElementId());
assertEquals(1, createDeleteOperation.getSubOperations().size());
assertFalse(createDeleteOperation.isDelete());
assertTrue(CommonUtil.isSelfContained(createDeleteOperation, true));
// check sub-operations of 1st operation
final MultiReferenceOperation subOperation1 = (MultiReferenceOperation) createDeleteOperation
.getSubOperations().get(
0);
// sub-operation 1
assertEquals(newChildElement2, getProject().getModelElement(subOperation1.getModelElementId()));
assertEquals(REFERENCES, subOperation1.getFeatureName());
assertEquals(testElement, getProject().getModelElement(subOperation1.getReferencedModelElements().get(0)));
// check 2nd operation
final MultiReferenceOperation operation2 = (MultiReferenceOperation) operations.get(1);
assertEquals(parentTestElement, getProject().getModelElement(operation2.getModelElementId()));
assertEquals(newTestElement, getProject().getModelElement(operation2.getReferencedModelElements().get(0)));
assertTrue(operations.get(1) instanceof MultiReferenceOperation);
final MultiReferenceOperation multiRefOp = (MultiReferenceOperation) operations.get(1);
assertEquals(parentTestElement, getProject().getModelElement(multiRefOp.getModelElementId()));
assertEquals(TestElementFeatures.containedElements().getName(), multiRefOp.getFeatureName());
assertEquals(newTestElement, getProject().getModelElement(multiRefOp.getReferencedModelElements().get(0)));
assertTrue(multiRefOp.isAdd());
}
@Test
public void testClearContainmentTree() {
final TestElement parentTestElement = Create.testElement(PARENT_TEST_ELEMENT);
final TestElement testElement = Create.testElement(TEST_ELEMENT);
final TestElement subTestElement = Create.testElement(SUB_TEST_ELEMENT);
new EMFStoreCommand() {
@Override
protected void doRun() {
getProject().addModelElement(parentTestElement);
parentTestElement.getContainedElements_NoOpposite().add(testElement);
testElement.getContainedElements_NoOpposite().add(subTestElement);
clearOperations();
}
}.run(false);
final ModelElementId parentElementId = getProject().getModelElementId(parentTestElement);
final ModelElementId elementId = getProject().getModelElementId(testElement);
final ModelElementId subElementId = getProject().getModelElementId(subTestElement);
assertNotNull(parentElementId);
assertNotNull(elementId);
assertNotNull(subElementId);
assertEquals(1, getProject().getModelElements().size());
assertEquals(parentTestElement, getProject().getModelElements().get(0));
assertEquals(1, parentTestElement.getContainedElements_NoOpposite().size());
assertEquals(testElement, parentTestElement.getContainedElements_NoOpposite().get(0));
assertEquals(1, testElement.getContainedElements_NoOpposite().size());
assertEquals(subTestElement, testElement.getContainedElements_NoOpposite().get(0));
assertEquals(getProject(), ModelUtil.getProject(parentTestElement));
assertEquals(getProject(), ModelUtil.getProject(testElement));
assertEquals(getProject(), ModelUtil.getProject(subTestElement));
assertTrue(getProject().contains(parentTestElement));
assertTrue(getProject().contains(testElement));
assertTrue(getProject().contains(subTestElement));
new EMFStoreCommand() {
@Override
protected void doRun() {
testElement.getContainedElements_NoOpposite().clear();
parentTestElement.getContainedElements_NoOpposite().clear();
}
}.run(false);
final List<AbstractOperation> operations = getProjectSpace().getOperations();
assertEquals(4, operations.size());
new EMFStoreCommand() {
@Override
protected void doRun() {
getProjectSpace().revert();
}
}.run(false);
assertEquals(1, getProject().getModelElements().size());
assertEquals(parentTestElement, getProject().getModelElements().get(0));
assertEquals(1, parentTestElement.getContainedElements_NoOpposite().size());
final TestElement copiedTestElement = parentTestElement.getContainedElements_NoOpposite().get(0);
assertEquals(1, copiedTestElement.getContainedElements_NoOpposite().size());
final TestElement copiedSubTestElement = copiedTestElement.getContainedElements_NoOpposite().get(0);
assertEquals(getProject(), ModelUtil.getProject(parentTestElement));
assertEquals(getProject(), ModelUtil.getProject(copiedTestElement));
assertEquals(getProject(), ModelUtil.getProject(copiedSubTestElement));
assertTrue(getProject().contains(parentTestElement));
assertTrue(getProject().contains(copiedTestElement));
assertTrue(getProject().contains(copiedSubTestElement));
assertEquals(parentElementId, getProject().getModelElementId(parentTestElement));
assertEquals(elementId, getProject().getModelElementId(copiedTestElement));
assertEquals(subElementId, getProject().getModelElementId(copiedSubTestElement));
}
@Test
public void testClearContainmentTreeReverse() {
final TestElement parentTestElement = Create.testElement(PARENT_TEST_ELEMENT);
final TestElement testElement = Create.testElement(TEST_ELEMENT);
final TestElement subTestElement = Create.testElement(SUB_TEST_ELEMENT);
new EMFStoreCommand() {
@Override
protected void doRun() {
getProject().addModelElement(parentTestElement);
parentTestElement.getContainedElements().add(testElement);
testElement.getContainedElements().add(subTestElement);
clearOperations();
}
}.run(false);
final ModelElementId parentElementId = getProject().getModelElementId(parentTestElement);
final ModelElementId elementId = getProject().getModelElementId(testElement);
final ModelElementId subElementId = getProject().getModelElementId(subTestElement);
assertNotNull(parentElementId);
assertNotNull(elementId);
assertNotNull(subElementId);
assertEquals(1, getProject().getModelElements().size());
assertEquals(parentTestElement, getProject().getModelElements().get(0));
assertEquals(1, parentTestElement.getContainedElements().size());
assertEquals(testElement, parentTestElement.getContainedElements().get(0));
assertEquals(1, testElement.getContainedElements().size());
assertEquals(subTestElement, testElement.getContainedElements().get(0));
assertEquals(getProject(), ModelUtil.getProject(parentTestElement));
assertEquals(getProject(), ModelUtil.getProject(testElement));
assertEquals(getProject(), ModelUtil.getProject(subTestElement));
assertTrue(getProject().contains(parentTestElement));
assertTrue(getProject().contains(testElement));
assertTrue(getProject().contains(subTestElement));
new EMFStoreCommand() {
@Override
protected void doRun() {
parentTestElement.getContainedElements().clear();
testElement.getContainedElements().clear();
}
}.run(false);
new EMFStoreCommand() {
@Override
protected void doRun() {
getProjectSpace().revert();
}
}.run(false);
assertEquals(1, getProject().getModelElements().size());
assertEquals(parentTestElement, getProject().getModelElements().get(0));
assertEquals(1, parentTestElement.getContainedElements().size());
final TestElement copiedTestElement = parentTestElement.getContainedElements().get(0);
assertEquals(1, copiedTestElement.getContainedElements().size());
final TestElement copiedSubTestElement = copiedTestElement.getContainedElements().get(0);
assertEquals(getProject(), ModelUtil.getProject(parentTestElement));
assertEquals(getProject(), ModelUtil.getProject(copiedTestElement));
assertEquals(getProject(), ModelUtil.getProject(copiedSubTestElement));
assertTrue(getProject().contains(parentTestElement));
assertTrue(getProject().contains(copiedTestElement));
assertTrue(getProject().contains(copiedSubTestElement));
assertEquals(parentElementId, getProject().getModelElementId(parentTestElement));
assertEquals(elementId, getProject().getModelElementId(copiedTestElement));
assertEquals(subElementId, getProject().getModelElementId(copiedSubTestElement));
}
@Test
public void testCreateReverse() {
final TestElement useCase = Create.testElement();
new EMFStoreCommand() {
@Override
protected void doRun() {
getProject().addModelElement(useCase);
}
}.run(false);
final List<AbstractOperation> operations = getProjectSpace().getOperations();
assertEquals(1, operations.size());
final CreateDeleteOperation createDeleteOperation = checkAndCast(operations.get(0), CreateDeleteOperation.class);
final ModelElementId useCaseId = getProject().getModelElementId(useCase);
assertEquals(useCaseId, createDeleteOperation.getModelElementId());
assertEquals(0, createDeleteOperation.getSubOperations().size());
assertFalse(createDeleteOperation.isDelete());
new EMFStoreCommand() {
@Override
protected void doRun() {
createDeleteOperation.reverse().apply(getProject());
}
}.run(false);
assertNull(useCase.eContainer());
assertNull(((IdEObjectCollectionImpl) getProject()).getDeletedModelElement(useCaseId));
}
@Test
public void testDeleteReverse() {
final TestElement section = Create.testElement();
final TestElement useCase = Create.testElement();
final TestElement oldTestElement = Create.testElement();
final TestElement newTestElement = Create.testElement();
final TestElement otherTestElement = Create.testElement();
new EMFStoreCommand() {
@Override
protected void doRun() {
getProject().addModelElement(section);
section.getContainedElements().add(useCase);
section.getContainedElements().add(oldTestElement);
getProject().addModelElement(newTestElement);
getProject().addModelElement(otherTestElement);
useCase.setNonContained_NTo1(oldTestElement);
useCase.getNonContained_NToM().add(newTestElement);
useCase.getNonContained_NToM().add(otherTestElement);
assertTrue(getProject().contains(useCase));
assertEquals(getProject(), ModelUtil.getProject(useCase));
clearOperations();
}
}.run(false);
final ModelElementId useCaseId = ModelUtil.getProject(useCase).getModelElementId(useCase);
assertNotNull(useCaseId);
new EMFStoreCommand() {
@Override
protected void doRun() {
getProject().deleteModelElement(useCase);
}
}.run(false);
final List<AbstractOperation> operations = getProjectSpace().getOperations();
assertEquals(1, operations.size());
final AbstractOperation operation = operations.get(0);
assertTrue(operation instanceof CreateDeleteOperation);
final CreateDeleteOperation createDeleteOperation = (CreateDeleteOperation) operation;
assertTrue(createDeleteOperation.isDelete());
new EMFStoreCommand() {
@Override
protected void doRun() {
createDeleteOperation.reverse().apply(getProject());
}
}.run(false);
final EObject modelElement = getProject().getModelElement(useCaseId);
final ModelElementId modelElementId = getProject().getModelElementId(modelElement);
assertNotNull(modelElement);
assertEquals(useCaseId, modelElementId);
}
@Test
public void testReferenceMapDeletion() {
final TestElement testElement = Create.testElement(TEST_ELEMENT);
final TestElement secondTestElement = Create.testElement(SECOND_TEST_ELEMENT);
final TestElement parentTestElement = Create.testElement(PARENT_TEST_ELEMENT);
final TestElement keyRefeferenceTestElement = Create.testElement(KEY_REFEFERENCE_TEST_ELEMENT);
final TestElement referenceTestElement = Create.testElement(REFERENCE_TEST_ELEMENT);
new EMFStoreCommand() {
@Override
protected void doRun() {
getProject().addModelElement(testElement);
getProject().addModelElement(secondTestElement);
getProject().addModelElement(parentTestElement);
parentTestElement.setContainedElement(secondTestElement);
testElement.getElementMap().put(parentTestElement, secondTestElement);
testElement.getElementMap().put(keyRefeferenceTestElement, referenceTestElement);
}
}.run(false);
assertTrue(getProject().contains(testElement));
assertTrue(getProject().contains(secondTestElement));
assertTrue(getProject().contains(parentTestElement));
assertTrue(getProject().contains(keyRefeferenceTestElement));
assertTrue(getProject().contains(referenceTestElement));
new EMFStoreCommand() {
@Override
protected void doRun() {
getProject().deleteModelElement(secondTestElement);
}
}.run(false);
assertTrue(getProject().contains(testElement));
assertFalse(getProject().contains(secondTestElement));
assertNull(testElement.getElementMap().get(parentTestElement));
assertTrue(getProject().contains(parentTestElement));
new EMFStoreCommand() {
@Override
protected void doRun() {
// delete value reference
getProject().deleteModelElement(referenceTestElement);
}
}.run(false);
assertNull(testElement.getElementMap().get(referenceTestElement));
assertTrue(testElement.getElementMap().containsKey(keyRefeferenceTestElement));
new EMFStoreCommand() {
@Override
protected void doRun() {
// delete key reference
getProject().deleteModelElement(keyRefeferenceTestElement);
}
}.run(false);
assertFalse(testElement.getElementMap().containsKey(keyRefeferenceTestElement));
new EMFStoreCommand() {
@Override
protected void doRun() {
getProject().deleteModelElement(testElement);
}
}.run(false);
assertFalse(getProject().contains(testElement));
assertTrue(getProject().contains(parentTestElement));
assertNull(testElement.getElementMap().get(parentTestElement));
}
@Test
public void testAttributeToReferenceMapDeletion() {
final TestElement testElement = Create.testElement(TEST_ELEMENT);
final TestElement secondTestElement = Create.testElement(SECOND_TEST_ELEMENT);
final TestElement parentTestElement = Create.testElement(PARENT_TEST_ELEMENT);
final TestElement referenceTestElement = Create.testElement(REFERENCE_TEST_ELEMENT);
new EMFStoreCommand() {
@Override
protected void doRun() {
getProject().addModelElement(testElement);
getProject().addModelElement(secondTestElement);
getProject().addModelElement(parentTestElement);
parentTestElement.setContainedElement(secondTestElement);
testElement.getStringToElementMap().put(SECOND_TEST_ELEMENT, secondTestElement);
testElement.getStringToElementMap().put(REFERENCED_TEST_ELEMENT, referenceTestElement);
}
}.run(false);
assertTrue(getProject().contains(testElement));
assertTrue(getProject().contains(secondTestElement));
assertTrue(getProject().contains(parentTestElement));
assertTrue(getProject().contains(referenceTestElement));
new EMFStoreCommand() {
@Override
protected void doRun() {
getProject().deleteModelElement(secondTestElement);
}
}.run(false);
assertTrue(getProject().contains(testElement));
assertFalse(getProject().contains(secondTestElement));
assertNull(testElement.getStringToElementMap().get(SECOND_TEST_ELEMENT));
assertTrue(testElement.getStringToElementMap().containsKey(SECOND_TEST_ELEMENT));
assertTrue(getProject().contains(parentTestElement));
new EMFStoreCommand() {
@Override
protected void doRun() {
// delete value reference
getProject().deleteModelElement(referenceTestElement);
}
}.run(false);
assertNull(testElement.getStringToElementMap().get(REFERENCED_TEST_ELEMENT));
assertTrue(testElement.getStringToElementMap().containsKey(REFERENCED_TEST_ELEMENT));
new EMFStoreCommand() {
@Override
protected void doRun() {
getProject().deleteModelElement(testElement);
}
}.run(false);
assertFalse(getProject().contains(testElement));
assertTrue(getProject().contains(parentTestElement));
}
@Test
public void testReferenceToAttributeMapDeletion() {
final TestElement testElement = Create.testElement(TEST_ELEMENT);
final TestElement secondTestElement = Create.testElement(SECOND_TEST_ELEMENT);
final TestElement parentTestElement = Create.testElement(PARENT_TEST_ELEMENT);
final TestElement referenceKeyTestElement = Create.testElement(REFERENCE_TEST_ELEMENT);
new EMFStoreCommand() {
@Override
protected void doRun() {
getProject().addModelElement(testElement);
getProject().addModelElement(secondTestElement);
getProject().addModelElement(parentTestElement);
parentTestElement.setContainedElement(secondTestElement);
testElement.getElementToStringMap().put(secondTestElement, SECOND_TEST_ELEMENT);
testElement.getElementToStringMap().put(referenceKeyTestElement, REFERENCED_TEST_ELEMENT);
}
}.run(false);
assertTrue(getProject().contains(testElement));
assertTrue(getProject().contains(secondTestElement));
assertTrue(getProject().contains(parentTestElement));
assertTrue(getProject().contains(referenceKeyTestElement));
new EMFStoreCommand() {
@Override
protected void doRun() {
// delete keys
getProject().deleteModelElement(secondTestElement);
getProject().deleteModelElement(referenceKeyTestElement);
}
}.run(false);
assertFalse(getProject().contains(referenceKeyTestElement));
assertFalse(getProject().contains(secondTestElement));
assertFalse(testElement.getElementToStringMap().containsKey(secondTestElement));
assertFalse(testElement.getElementToStringMap().containsKey(referenceKeyTestElement));
}
@Test
public void testAttributeMapDeletion() {
final TestElement testElement = Create.testElement(TEST_ELEMENT);
new EMFStoreCommand() {
@Override
protected void doRun() {
getProject().addModelElement(testElement);
testElement.getStringToStringMap().put(DAY, TAG);
testElement.getStringToStringMap().put(HELLO, HALLO);
}
}.run(false);
assertTrue(getProject().contains(testElement));
assertEquals(testElement.getStringToStringMap().get(DAY), TAG);
assertEquals(testElement.getStringToStringMap().get(HELLO), HALLO);
clearOperations();
new EMFStoreCommand() {
@Override
protected void doRun() {
getProject().deleteModelElement(testElement);
}
}.run(false);
final CreateDeleteOperation createDeleteOperation = (CreateDeleteOperation) getProjectSpace().getOperations()
.get(0);
final EMap<EObject, ModelElementId> eObjectToIdMap = createDeleteOperation.getEObjectToIdMap();
for (final ModelElementId id : eObjectToIdMap.values()) {
assertNotNull(id);
}
assertFalse(getProject().contains(testElement));
}
@Test
public void testRemoveAndAddElementWithSavedSettingsInOneCommand() {
final TestElement testElement1 = Create.testElement(TEST_ELEMENT1);
final TestElement testElement2 = Create.testElement(TEST_ELEMENT2);
final TestElement testElement3 = Create.testElement(TEST_ELEMENT3);
RunESCommand.run(new Callable<Void>() {
public Void call() throws Exception {
getProject().addModelElement(testElement1);
getProject().addModelElement(testElement2);
getProject().addModelElement(testElement3);
assertTrue(getProject().contains(testElement1));
assertTrue(getProject().contains(testElement2));
assertTrue(getProject().contains(testElement3));
// test with reference as setting
testElement2.setReference(testElement1);
assertEquals(testElement1, testElement2.getReference());
RemoveCommand.create(
AdapterFactoryEditingDomain.getEditingDomainFor(getProject()),
getProject(),
org.eclipse.emf.emfstore.internal.common.model.ModelPackage.eINSTANCE.getProject_ModelElements(),
testElement2).execute();
assertFalse(getProject().contains(testElement2));
assertEquals(testElement1, testElement2.getReference());
getProject().addModelElement(testElement2);
assertTrue(getProject().contains(testElement2));
assertEquals(testElement1, testElement2.getReference());
return null;
}
});
}
@Test
public void testRemoveAndAddElementWithSavedButChangedSettingsInOneCommand() {
final TestElement useCase1 = Create.testElement();
final TestElement useCase2 = Create.testElement();
final TestElement actor = Create.testElement();
RunESCommand.run(new Callable<Void>() {
public Void call() throws Exception {
getProject().addModelElement(useCase1);
getProject().addModelElement(useCase2);
getProject().addModelElement(actor);
assertTrue(getProject().contains(useCase1));
assertTrue(getProject().contains(useCase2));
assertTrue(getProject().contains(actor));
// test with attribute as setting
useCase1.setNonContained_NTo1(actor);
assertEquals(actor, useCase1.getNonContained_NTo1());
assertTrue(actor.getNonContained_1ToN().contains(useCase1));
RemoveCommand.create(AdapterFactoryEditingDomain.getEditingDomainFor(
getProject()),
getProject(),
org.eclipse.emf.emfstore.internal.common.model.ModelPackage.eINSTANCE.getProject_ModelElements(),
actor).execute();
assertFalse(getProject().contains(actor));
assertEquals(actor, useCase1.getNonContained_NTo1());
assertTrue(actor.getNonContained_1ToN().contains(useCase1));
useCase2.setNonContained_NTo1(actor);
getProject().addModelElement(actor);
assertEquals(actor, useCase1.getNonContained_NTo1());
assertEquals(actor, useCase2.getNonContained_NTo1());
assertTrue(actor.getNonContained_1ToN().contains(useCase1));
assertTrue(actor.getNonContained_1ToN().contains(useCase2));
assertTrue(getProject().contains(actor));
return null;
}
});
}
@Test
public void testRemoveAndAddModelElementWithSavedSettingsInTwoCommands() {
final TestElement testElement1 = Create.testElement(TEST_ELEMENT1);
final TestElement testElement2 = Create.testElement(TEST_ELEMENT2);
final TestElement referencedTestElement = Create.testElement(REF_TEST_ELEMENT);
RunESCommand.run(new Callable<Void>() {
public Void call() throws Exception {
getProject().addModelElement(testElement1);
getProject().addModelElement(testElement2);
getProject().addModelElement(referencedTestElement);
testElement1.setReference(referencedTestElement);
testElement2.setReference(referencedTestElement);
referencedTestElement.setReference(testElement2);
return null;
}
});
assertTrue(getProject().contains(testElement1));
assertTrue(getProject().contains(testElement2));
assertTrue(getProject().contains(referencedTestElement));
assertEquals(referencedTestElement, testElement1.getReference());
assertEquals(referencedTestElement, testElement2.getReference());
assertEquals(testElement2, referencedTestElement.getReference());
AdapterFactoryEditingDomain
.getEditingDomainFor(getProject())
.getCommandStack()
.execute(
RemoveCommand.create(
AdapterFactoryEditingDomain.getEditingDomainFor(getProject()),
getProject(),
org.eclipse.emf.emfstore.internal.common.model.ModelPackage.eINSTANCE.getProject_ModelElements(),
testElement2));
assertTrue(getProject().contains(testElement1));
assertFalse(getProject().contains(testElement2));
assertTrue(getProject().contains(referencedTestElement));
assertEquals(referencedTestElement, testElement1.getReference());
assertNull(testElement2.getReference());
assertNull(referencedTestElement.getReference());
RunESCommand.run(new Callable<Void>() {
public Void call() throws Exception {
testElement2.setReference(referencedTestElement);
getProject().addModelElement(testElement2);
return null;
}
});
assertTrue(getProject().contains(testElement1));
assertTrue(getProject().contains(testElement2));
assertTrue(getProject().contains(referencedTestElement));
assertEquals(referencedTestElement, testElement1.getReference());
assertEquals(referencedTestElement, testElement2.getReference());
assertNull(referencedTestElement.getReference());
}
// commenting out, too exotic to happen
/*
* @Test public void createTreeAndAddNonRootToProject() { WorkPackage root =
* TaskFactory.eINSTANCE.createWorkPackage(); WorkPackage child = TaskFactory.eINSTANCE.createWorkPackage();
* WorkPackage existing = TaskFactory.eINSTANCE.createWorkPackage(); root.getContainedWorkItems().add(child);
* getProject().getModelElements().add(existing); child.getContainedWorkItems().add(existing);
* getProject().getModelElements().add(root); assertTrue(getProject().contains(child));
* assertTrue(getProject().contains(root)); assertTrue(getProject().contains(existing)); assertSame(root,
* child.getContainingWorkpackage()); assertSame(child, existing.getContainingWorkpackage());
* assertEquals(getProject().getAllModelElements().size(), 3); }
*/
}