blob: 764546aa8c8c6f0eccfbf7135e569d6ba5d62418 [file] [log] [blame]
/**
* Copyright (c) 2011-2013 EclipseSource Muenchen GmbH and others.
*
* 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:
* Edgar Mueller - initial API and implementation
*/
package org.eclipse.emf.ecp.view.dynamictree.model.test;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import java.util.Arrays;
import java.util.List;
import org.eclipse.emf.common.util.Diagnostic;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EReference;
import org.eclipse.emf.ecore.EStructuralFeature;
import org.eclipse.emf.ecore.util.EcoreUtil;
import org.eclipse.emf.ecp.test.common.DefaultRealm;
import org.eclipse.emf.ecp.view.dynamictree.model.DomainIntermediate;
import org.eclipse.emf.ecp.view.dynamictree.model.DomainRoot;
import org.eclipse.emf.ecp.view.dynamictree.model.DynamicContainmentItem;
import org.eclipse.emf.ecp.view.dynamictree.model.DynamicContainmentTree;
import org.eclipse.emf.ecp.view.dynamictree.model.DynamicContainmentTreeDomainModelReference;
import org.eclipse.emf.ecp.view.dynamictree.model.ModelFactory;
import org.eclipse.emf.ecp.view.dynamictree.model.ModelPackage;
import org.eclipse.emf.ecp.view.dynamictree.model.TestElement;
import org.eclipse.emf.ecp.view.dynamictree.model.TestElementContainer;
import org.eclipse.emf.ecp.view.spi.categorization.model.VAction;
import org.eclipse.emf.ecp.view.spi.context.ViewModelContext;
import org.eclipse.emf.ecp.view.spi.context.ViewModelContextFactory;
import org.eclipse.emf.ecp.view.spi.model.VContainedElement;
import org.eclipse.emf.ecp.view.spi.model.VControl;
import org.eclipse.emf.ecp.view.spi.model.VElement;
import org.eclipse.emf.ecp.view.spi.model.VFeaturePathDomainModelReference;
import org.eclipse.emf.ecp.view.spi.model.VViewFactory;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
public class DynamicContainmentTree_PTest {
private DomainRoot root;
// private Node<DynamicContainmentTree> node;
private DynamicContainmentTree tree;
private static final String ELEMENT_CONTAINER_ID = "111";
private static final String ELEMENT_ID = "222";
private DefaultRealm realm;
@Before
public void setUp() throws Exception {
realm = new DefaultRealm();
root = ModelFactory.eINSTANCE.createDomainRoot();
final DomainIntermediate intermediate = ModelFactory.eINSTANCE.createDomainIntermediate();
root.setIntermediate(intermediate);
final TestElementContainer elementContainer = ModelFactory.eINSTANCE.createTestElementContainer();
elementContainer.setId(ELEMENT_CONTAINER_ID);
intermediate.setTestElementContainer(elementContainer);
final TestElement testElement = ModelFactory.eINSTANCE.createTestElement();
testElement.setId(ELEMENT_ID);
testElement.setParentId(ELEMENT_CONTAINER_ID);
elementContainer.getTestElements().add(testElement);
tree = ModelFactory.eINSTANCE.createDynamicContainmentTree();
tree.getPathToRoot().add(ModelPackage.eINSTANCE.getDomainRoot_Intermediate());
tree.getPathToRoot().add(ModelPackage.eINSTANCE.getDomainIntermediate_TestElementContainer());
tree.setChildReference(ModelPackage.eINSTANCE.getTestElementContainer_TestElements());
// used for validation
final VControl childNameControl = VViewFactory.eINSTANCE.createControl();
childNameControl.setDomainModelReference(
createDynamicContainmentTreeDomainModelReferences(
ModelPackage.eINSTANCE.getTestElement_Name(),
ModelPackage.eINSTANCE.getTestElementContainer_TestElements(),
ModelPackage.eINSTANCE.getDomainRoot_Intermediate(),
ModelPackage.eINSTANCE.getDomainIntermediate_TestElementContainer()));
tree.setChildComposite(childNameControl);
// set up scoping
final VControl viewControl = VViewFactory.eINSTANCE.createControl();
final VFeaturePathDomainModelReference createFeaturePathDomainModelReference = createFeaturePathDomainModelReference(
ModelPackage.eINSTANCE.getTestElementContainer_Id(),
ModelPackage.eINSTANCE.getDomainRoot_Intermediate(),
ModelPackage.eINSTANCE.getDomainIntermediate_TestElementContainer());
viewControl.setDomainModelReference(createFeaturePathDomainModelReference);
tree.setComposite(viewControl);
final ViewModelContext viewModelContext = ViewModelContextFactory.INSTANCE.createViewModelContext(tree, root);
}
@After
public void tearDown() throws Exception {
realm.dispose();
}
private VFeaturePathDomainModelReference createFeaturePathDomainModelReference(
EStructuralFeature feature,
EReference... references) {
final VFeaturePathDomainModelReference result = VViewFactory.eINSTANCE.createFeaturePathDomainModelReference();
result.setDomainModelEFeature(feature);
result.getDomainModelEReferencePath().addAll(Arrays.asList(references));
return result;
}
private DynamicContainmentTreeDomainModelReference createDynamicContainmentTreeDomainModelReferences(
EStructuralFeature base, EStructuralFeature rootFeature, EReference... toRoot) {
final DynamicContainmentTreeDomainModelReference reference = ModelFactory.eINSTANCE
.createDynamicContainmentTreeDomainModelReference();
final VFeaturePathDomainModelReference rootRef = VViewFactory.eINSTANCE.createFeaturePathDomainModelReference();
final VFeaturePathDomainModelReference baseRef = VViewFactory.eINSTANCE.createFeaturePathDomainModelReference();
rootRef.getDomainModelEReferencePath().addAll(Arrays.asList(toRoot));
rootRef.setDomainModelEFeature(rootFeature);
baseRef.setDomainModelEFeature(base);
reference.setPathFromRoot(rootRef);
reference.setPathFromBase(baseRef);
return reference;
}
// @Test
// public void testFilter() {
//
// final List<Node<?>> filterVisibleNodes = CategorizationFilterHelper
// .filterNodes(node);
//
// assertEquals(1, filterVisibleNodes.size());
// }
@Test
public void testAddNodeToDomainNode() {
final String id = "123";
addItem(id, tree, tree.getDomainModel());
// final List<Node<?>> children = node.getChildren();
// final Node<?> lastChild = children.get(children.size() - 1);
final Object labelObjectOfLastChild = tree.getItems().get(tree.getItems().size() - 1).getDomainModel();
assertTrue(TestElement.class.isInstance(labelObjectOfLastChild));
final TestElement testElement = (TestElement) labelObjectOfLastChild;
assertEquals(id, testElement.getId());
assertEquals(ELEMENT_CONTAINER_ID, testElement.getParentId());
}
@Test
public void testValidationErrorInit() {
final String id = "123";
addItem(id, tree, tree.getDomainModel());
assertEquals("Severity must be error", Diagnostic.ERROR,
tree.getDiagnostic().getHighestSeverity());
}
@Test
public void testValidationErrorToError() {
final String id = "123";
addItem(id, tree, tree.getDomainModel());
// final List<Node<?>> children = node.getChildren();
// final Node<?> lastChild = children.get(children.size() - 1);
final Object labelObjectOfLastChild = tree.getItems().get(tree.getItems().size() - 1).getDomainModel();
assertTrue(TestElement.class.isInstance(labelObjectOfLastChild));
final TestElement testElement = (TestElement) labelObjectOfLastChild;
testElement.setName("foo");
assertEquals("Severity must be error", Diagnostic.ERROR,
tree.getDiagnostic().getHighestSeverity());
}
@Test
public void testValidationErrorToOkByRemove() {
assertEquals("Severity must be error", Diagnostic.ERROR,
tree.getDiagnostic().getHighestSeverity());
// final String id = "123";
// addItem(id, tree, tree.getDomainModel());
final Object labelObjectOfLastChild = tree.getItems().get(tree.getItems().size() - 1).getDomainModel();
assertTrue(TestElement.class.isInstance(labelObjectOfLastChild));
final TestElement testElement = (TestElement) labelObjectOfLastChild;
final TestElementContainer container = (TestElementContainer) testElement.eContainer();
container.getTestElements().clear();
// TODO remove must be somewhere else
tree.getItems().remove(tree.getItems().size() - 1);
assertEquals("Severity must be ok", Diagnostic.OK,
tree.getDiagnostic().getHighestSeverity());
}
@Test
public void testValidationErrorToOk() {
final String id = "123";
addItem(id, tree, tree.getDomainModel());
final Object labelObjectOfLastChild = tree.getItems().get(tree.getItems().size() - 1).getDomainModel();
assertTrue(TestElement.class.isInstance(labelObjectOfLastChild));
final TestElement testElement = (TestElement) labelObjectOfLastChild;
for (final TestElement el : ((TestElementContainer) testElement.eContainer()).getTestElements()) {
el.setName("bar");
}
assertEquals("Severity must be ok", Diagnostic.OK,
tree.getDiagnostic().getHighestSeverity());
}
@Test
public void testAddNodeToTestElement() {
final String id = "123456789012";
final DynamicContainmentItem dynamicContainmentItem = tree.getItems().get(tree.getItems().size() - 1);
addItem(id, dynamicContainmentItem, dynamicContainmentItem.getDomainModel());
final Object labelObject = dynamicContainmentItem.getItems().get(dynamicContainmentItem.getItems().size() - 1)
.getDomainModel();
assertTrue(TestElement.class.isInstance(labelObject));
final TestElement testElement = (TestElement) labelObject;
assertEquals(id, testElement.getId());
assertEquals(ELEMENT_ID, testElement.getParentId());
}
@Test
public void testRemoveNodeFromTestElement() {
final DynamicContainmentItem dynamicContainmentItem = tree.getItems().get(tree.getItems().size() - 1);
removeItem(dynamicContainmentItem, dynamicContainmentItem.getDomainModel());
assertEquals(0, tree.getItems().size());
}
private void removeItem(VElement treeItem, EObject treeItemDomain) {
final EObject eObject = treeItemDomain.eContainer();
if (TestElementContainer.class.isInstance(eObject)) {
TestElementContainer.class.cast(eObject).getTestElements().remove(treeItemDomain);
} else if (TestElement.class.isInstance(eObject)) {
TestElement.class.cast(eObject).getElements().remove(treeItemDomain);
}
final EObject treeItemParent = treeItem.eContainer();
if (DynamicContainmentTree.class.isInstance(treeItemParent)) {
DynamicContainmentTree.class.cast(treeItemParent).getItems().remove(treeItem);
} else if (DynamicContainmentItem.class.isInstance(treeItemParent)) {
DynamicContainmentItem.class.cast(treeItemParent).getItems().remove(treeItem);
}
}
public static DynamicContainmentItem addItem(String id, VElement viewModelParent, EObject virtualParent) {
final TestElement newValue = ModelFactory.eINSTANCE.createTestElement();
newValue.setParentId((String) virtualParent.eGet(virtualParent
.eClass().getEStructuralFeature("id")));
newValue.setId(id);
VElement renderable = null;
DynamicContainmentTree tree = null;
List<VAction> actions = null;
if (!TestElementContainer.class.isInstance(virtualParent)) {
virtualParent = virtualParent.eContainer();
final DynamicContainmentItem item = (DynamicContainmentItem) viewModelParent;
EObject parent = item.eContainer();
while (!DynamicContainmentTree.class.isInstance(parent)) {
parent = parent.eContainer();
}
tree = (DynamicContainmentTree) parent;
}
if (tree == null) {
tree = (DynamicContainmentTree) viewModelParent;
}
actions = tree.getActions();
renderable = tree.getChildComposite();
final DynamicContainmentItem pi = ModelFactory.eINSTANCE.createDynamicContainmentItem();
pi.setComposite((VContainedElement) EcoreUtil.copy(renderable));
pi.setDomainModel(newValue);
if (DynamicContainmentItem.class.isInstance(viewModelParent)) {
final DynamicContainmentItem parent = (DynamicContainmentItem) viewModelParent;
parent.getItems().add(pi);
} else {
tree.getItems().add(pi);
}
((TestElementContainer) virtualParent).getTestElements().add(newValue);
return pi;
}
}