/*
* Copyright (c) 2005, 2009 Borland Software Corporation
*
* 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:
* Artem Tikhomirov (Borland) - initial API and implementation
*/
package org.eclipse.gmf.tests.setup;
import java.util.Calendar;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.EAttribute;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EPackage;
import org.eclipse.emf.ecore.EReference;
import org.eclipse.emf.ecore.ETypedElement;
import org.eclipse.emf.ecore.EcoreFactory;
import org.eclipse.emf.ecore.EcorePackage;
import org.eclipse.emf.ecore.resource.impl.ResourceImpl;
/**
* TODO:
* ADD:
* - link label feature
* - more nodes
* - child nodes
*/
public class DomainModelSetup implements DomainModelSource {
private EPackage myModelPackage;
private NodeData myNodeA;
private LinkData myLinkA2C;
private EReference myLinkAsRef;
private EClass myDiagramElement;
private NodeData myNodeB;
private NodeData myChild1OfA;
private NodeData myChildOfB;
private NodeData myChildOfChildOfB;
private NodeData myChild2OfA;
private NodeData myNodeD;
private LinkData myLinkA2C_Cardinalyty2;
private LinkData myLinkA2C_Cardinality1;
private EReference myLinkAsRef_Cardinality2;
private EReference myLinkAsRef_Cardinality1;
private LinkData mySelfLinkAsClass;
private EReference mySelfLinkAsRef;
private EReference myLink2LinkRef;
private EReference myLinkFromLinkRef;
private EReference myLinkCrossLinkRef;
private LinkData myLink2Link;
private LinkData myLinkFromLink;
private LinkData myLinkCrossLink;
public DomainModelSetup() {
}
/**
* @return <code>this</code> for convenience
*/
public DomainModelSetup init() {
EPackage p = EcoreFactory.eINSTANCE.createEPackage();
p.setName("samplemodel");
p.setNsPrefix("gmftest");
Calendar c = Calendar.getInstance();
p.setNsURI("uri://eclipse/gmf/tests/sample/" + c.get(Calendar.HOUR_OF_DAY) + '/' + c.get(Calendar.MINUTE) + '/');
EClass superNode = EcoreFactory.eINSTANCE.createEClass();
superNode.setName("CommonBaseClass");
superNode.setAbstract(true);
EClass containmentNode = EcoreFactory.eINSTANCE.createEClass();
containmentNode.setName("UltimateContainer");
EReference r0 = EcoreFactory.eINSTANCE.createEReference();
r0.setContainment(true);
r0.setName("all");
r0.setEType(superNode);
r0.setUpperBound(-1);
containmentNode.getEStructuralFeatures().add(r0);
final EAttribute da1 = EcoreFactory.eINSTANCE.createEAttribute();
da1.setName("diagramAttribute");
da1.setEType(EcorePackage.eINSTANCE.getEString());
containmentNode.getEStructuralFeatures().add(da1);
EClass nodeA = EcoreFactory.eINSTANCE.createEClass();
nodeA.setName("NodeSrcA");
nodeA.getESuperTypes().add(superNode);
EClass nodeB = EcoreFactory.eINSTANCE.createEClass();
nodeB.setName("NodeTargetB");
nodeB.getESuperTypes().add(superNode);
EClass nodeC = EcoreFactory.eINSTANCE.createEClass();
nodeC.setName("NodeTargetC");
EClass nodeD = EcoreFactory.eINSTANCE.createEClass();
nodeD.setName("NodeTargetD");
EClass nodeLinkA2C = EcoreFactory.eINSTANCE.createEClass();
nodeLinkA2C.setName("LinkAtoC");
EClass nodeLinkA2C2 = EcoreFactory.eINSTANCE.createEClass();
nodeLinkA2C2.setName("LinkAtoC_Cardinality2");
EClass nodeLinkA2C3 = EcoreFactory.eINSTANCE.createEClass();
nodeLinkA2C3.setName("LinkAtoC_Cardinality1");
EClass nodeLinkA2A = EcoreFactory.eINSTANCE.createEClass();
nodeLinkA2A.setName("LinkAtoA");
EClass childNode = EcoreFactory.eINSTANCE.createEClass();
childNode.setName("Child");
EClass childNode2 = EcoreFactory.eINSTANCE.createEClass();
childNode2.setName("Child2");
EClass link2Link = EcoreFactory.eINSTANCE.createEClass();
link2Link.setName("Link2Link");
EClass linkFromLink = EcoreFactory.eINSTANCE.createEClass();
linkFromLink.setName("LinkFromLink");
EClass linkCrossLink = EcoreFactory.eINSTANCE.createEClass();
linkCrossLink.setName("LinkCrossLink");
final EAttribute a1 = EcoreFactory.eINSTANCE.createEAttribute();
a1.setName("label");
a1.setEType(EcorePackage.eINSTANCE.getEString());
nodeA.getEStructuralFeatures().add(a1);
final EAttribute a2 = EcoreFactory.eINSTANCE.createEAttribute();
a2.setName("title");
a2.setEType(EcorePackage.eINSTANCE.getEString());
nodeB.getEStructuralFeatures().add(a2);
nodeC.getESuperTypes().add(nodeB);
nodeD.getESuperTypes().add(nodeB);
final EAttribute childLabel = EcoreFactory.eINSTANCE.createEAttribute();
childLabel.setName("childLabel");
childLabel.setEType(EcorePackage.eINSTANCE.getEString());
childNode.getEStructuralFeatures().add(childLabel);
final EAttribute childLabel2 = EcoreFactory.eINSTANCE.createEAttribute();
childLabel2.setName("childLabel");
childLabel2.setEType(EcorePackage.eINSTANCE.getEString());
childNode2.getEStructuralFeatures().add(childLabel2);
EReference linkToB = EcoreFactory.eINSTANCE.createEReference();
linkToB.setName("refLinkToB");
linkToB.setEType(nodeB);
linkToB.setUpperBound(-1);
nodeA.getEStructuralFeatures().add(linkToB);
EReference linkToB2 = EcoreFactory.eINSTANCE.createEReference();
linkToB2.setName("refLinkToB_Cardinality2");
linkToB2.setEType(nodeB);
linkToB2.setUpperBound(2);
nodeA.getEStructuralFeatures().add(linkToB2);
EReference linkToB3 = EcoreFactory.eINSTANCE.createEReference();
linkToB3.setName("refLinkToB_Cardinality1");
linkToB3.setEType(nodeB);
linkToB3.setUpperBound(1);
nodeA.getEStructuralFeatures().add(linkToB3);
EReference link2LinkRef = EcoreFactory.eINSTANCE.createEReference();
link2LinkRef.setName("refLinkToLink");
link2LinkRef.setEType(nodeLinkA2C);
link2LinkRef.setUpperBound(3);
nodeD.getEStructuralFeatures().add(link2LinkRef);
EReference linkFromLinkRef = EcoreFactory.eINSTANCE.createEReference();
linkFromLinkRef.setName("refLinkFromLink");
linkFromLinkRef.setEType(nodeD);
linkFromLinkRef.setUpperBound(4);
nodeLinkA2C.getEStructuralFeatures().add(linkFromLinkRef);
EReference linkCrossLinkRef = EcoreFactory.eINSTANCE.createEReference();
linkCrossLinkRef.setName("refLinkCrossLink");
linkCrossLinkRef.setEType(nodeLinkA2C);
linkCrossLinkRef.setUpperBound(5);
nodeLinkA2C.getEStructuralFeatures().add(linkCrossLinkRef);
EReference linkToARef = EcoreFactory.eINSTANCE.createEReference();
linkToARef.setName("refLinkToA");
linkToARef.setEType(nodeA);
linkToARef.setUpperBound(-1);
nodeA.getEStructuralFeatures().add(linkToARef);
EReference linkToC = EcoreFactory.eINSTANCE.createEReference();
linkToC.setName("classLinkToC");
linkToC.setEType(nodeLinkA2C);
linkToC.setUpperBound(-1);
linkToC.setContainment(true);
nodeA.getEStructuralFeatures().add(linkToC);
EReference refCfromLink = EcoreFactory.eINSTANCE.createEReference();
refCfromLink.setName("trg");
refCfromLink.setEType(nodeC);
refCfromLink.setUpperBound(1);
refCfromLink.setUnique(false);
nodeLinkA2C.getEStructuralFeatures().add(refCfromLink);
EReference linkToC2 = EcoreFactory.eINSTANCE.createEReference();
linkToC2.setName("classLinkToC_Cardinality2");
linkToC2.setEType(nodeLinkA2C2);
linkToC2.setUpperBound(2);
linkToC2.setContainment(true);
nodeA.getEStructuralFeatures().add(linkToC2);
EReference refCfromLink2 = EcoreFactory.eINSTANCE.createEReference();
refCfromLink2.setName("trg");
refCfromLink2.setEType(nodeC);
refCfromLink2.setUpperBound(-1);
refCfromLink2.setUnique(true);
nodeLinkA2C2.getEStructuralFeatures().add(refCfromLink2);
EReference linkToC3 = EcoreFactory.eINSTANCE.createEReference();
linkToC3.setName("classLinkToC_Cardinality1");
linkToC3.setEType(nodeLinkA2C3);
linkToC3.setUpperBound(1);
linkToC3.setContainment(true);
nodeA.getEStructuralFeatures().add(linkToC3);
EReference refCfromLink3 = EcoreFactory.eINSTANCE.createEReference();
refCfromLink3.setName("trg");
refCfromLink3.setEType(nodeC);
refCfromLink3.setUpperBound(1);
refCfromLink3.setUnique(false);
nodeLinkA2C3.getEStructuralFeatures().add(refCfromLink3);
EReference linkToAClass = EcoreFactory.eINSTANCE.createEReference();
linkToAClass.setName("classLinkToA");
linkToAClass.setEType(nodeLinkA2A);
linkToAClass.setUpperBound(-1);
linkToAClass.setContainment(true);
nodeA.getEStructuralFeatures().add(linkToAClass);
EReference refAfromLink = EcoreFactory.eINSTANCE.createEReference();
refAfromLink.setName("trg");
refAfromLink.setEType(nodeA);
refAfromLink.setUpperBound(1);
refAfromLink.setUnique(false);
nodeLinkA2A.getEStructuralFeatures().add(refAfromLink);
EReference containment1ForA = EcoreFactory.eINSTANCE.createEReference();
containment1ForA.setContainment(true);
containment1ForA.setName("children1OfA");
containment1ForA.setEType(childNode);
containment1ForA.setUpperBound(ETypedElement.UNBOUNDED_MULTIPLICITY);
nodeA.getEStructuralFeatures().add(containment1ForA);
EReference containment2ForA = EcoreFactory.eINSTANCE.createEReference();
containment2ForA.setContainment(true);
containment2ForA.setName("children2OfA");
containment2ForA.setEType(childNode2);
containment2ForA.setUpperBound(ETypedElement.UNBOUNDED_MULTIPLICITY);
nodeA.getEStructuralFeatures().add(containment2ForA);
EReference containmentForB = EcoreFactory.eINSTANCE.createEReference();
containmentForB.setContainment(true);
containmentForB.setName("childrenOfB");
containmentForB.setEType(childNode);
containmentForB.setUpperBound(ETypedElement.UNBOUNDED_MULTIPLICITY);
nodeB.getEStructuralFeatures().add(containmentForB);
EReference selfContainment = EcoreFactory.eINSTANCE.createEReference();
selfContainment.setContainment(true);
selfContainment.setName("innerChildrenOfBChild");
selfContainment.setEType(childNode);
selfContainment.setUpperBound(ETypedElement.UNBOUNDED_MULTIPLICITY);
childNode.getEStructuralFeatures().add(selfContainment);
EReference linkToLink2Link = EcoreFactory.eINSTANCE.createEReference();
linkToLink2Link.setName("classLinkToLink");
linkToLink2Link.setEType(link2Link);
linkToLink2Link.setUpperBound(3);
linkToLink2Link.setContainment(true);
nodeD.getEStructuralFeatures().add(linkToLink2Link);
EReference refLinkFromLink2Link = EcoreFactory.eINSTANCE.createEReference();
refLinkFromLink2Link.setName("trg");
refLinkFromLink2Link.setEType(nodeLinkA2C);
refLinkFromLink2Link.setUpperBound(1);
refLinkFromLink2Link.setUnique(false);
link2Link.getEStructuralFeatures().add(refLinkFromLink2Link);
EReference linkToLinkFromLink = EcoreFactory.eINSTANCE.createEReference();
linkToLinkFromLink.setName("classLinkFromLink");
linkToLinkFromLink.setEType(linkFromLink);
linkToLinkFromLink.setUpperBound(4);
linkToLinkFromLink.setContainment(true);
nodeLinkA2C.getEStructuralFeatures().add(linkToLinkFromLink);
EReference refLinkFromLinkFromLink = EcoreFactory.eINSTANCE.createEReference();
refLinkFromLinkFromLink.setName("trg");
refLinkFromLinkFromLink.setEType(nodeD);
refLinkFromLinkFromLink.setUpperBound(1);
refLinkFromLinkFromLink.setUnique(false);
linkFromLink.getEStructuralFeatures().add(refLinkFromLinkFromLink);
EReference linkToLinkCrossLink = EcoreFactory.eINSTANCE.createEReference();
linkToLinkCrossLink.setName("classLinkCrossLink");
linkToLinkCrossLink.setEType(linkCrossLink);
linkToLinkCrossLink.setUpperBound(5);
linkToLinkCrossLink.setContainment(true);
nodeLinkA2C.getEStructuralFeatures().add(linkToLinkCrossLink);
EReference refLinkFromLinkCorssLink = EcoreFactory.eINSTANCE.createEReference();
refLinkFromLinkCorssLink.setName("trg");
refLinkFromLinkCorssLink.setEType(nodeLinkA2C);
refLinkFromLinkCorssLink.setUpperBound(1);
refLinkFromLinkCorssLink.setUnique(false);
linkCrossLink.getEStructuralFeatures().add(refLinkFromLinkCorssLink);
p.getEClassifiers().add(superNode);
p.getEClassifiers().add(containmentNode);
p.getEClassifiers().add(nodeA);
p.getEClassifiers().add(nodeB);
p.getEClassifiers().add(nodeC);
p.getEClassifiers().add(nodeD);
p.getEClassifiers().add(nodeLinkA2C);
p.getEClassifiers().add(nodeLinkA2C2);
p.getEClassifiers().add(nodeLinkA2C3);
p.getEClassifiers().add(nodeLinkA2A);
p.getEClassifiers().add(childNode);
p.getEClassifiers().add(childNode2);
p.getEClassifiers().add(link2Link);
p.getEClassifiers().add(linkFromLink);
p.getEClassifiers().add(linkCrossLink);
confineInResource(p);
myModelPackage = p;
myNodeA = new NodeData(nodeA, a1, r0);
myChild1OfA = new NodeData(childNode, childLabel, containment1ForA);
myChild2OfA = new NodeData(childNode2, childLabel2, containment2ForA);
myLinkA2C = new LinkData(nodeLinkA2C, refCfromLink, linkToC);
myLinkA2C_Cardinalyty2 = new LinkData(nodeLinkA2C2, refCfromLink2, linkToC2);
myLinkA2C_Cardinality1 = new LinkData(nodeLinkA2C3, refCfromLink3, linkToC3);
mySelfLinkAsClass = new LinkData(nodeLinkA2A, refAfromLink, linkToAClass);
myNodeB = new NodeData(nodeC, a2, r0);
myNodeD = new NodeData(nodeD, a2, r0);
myChildOfB = new NodeData(childNode, childLabel, containmentForB);
myChildOfChildOfB = new NodeData(childNode, childLabel, selfContainment);
myLinkAsRef = linkToB;
myLinkAsRef_Cardinality2 = linkToB2;
myLinkAsRef_Cardinality1 = linkToB3;
myLink2Link = new LinkData(link2Link, refLinkFromLink2Link, linkToLink2Link);
myLinkFromLink = new LinkData(linkFromLink, refLinkFromLinkFromLink, linkToLinkFromLink);
myLinkCrossLink = new LinkData(linkCrossLink, refLinkFromLinkCorssLink, linkToLinkCrossLink);
myLink2LinkRef = link2LinkRef;
myLinkFromLinkRef = linkFromLinkRef;
myLinkCrossLinkRef = linkCrossLinkRef;
mySelfLinkAsRef = linkToARef;
myDiagramElement = containmentNode;
return this;
}
private void confineInResource(EObject p) {
new ResourceImpl(URI.createURI("uri://org.eclipse.gmf/tests/DomainModelSetup")).getContents().add(p);
}
public final EPackage getModel() {
return myModelPackage;
}
public final NodeData getNodeA() {
return myNodeA;
}
public final NodeData getChildOfA() {
return myChild1OfA;
}
public final NodeData getSecondChildOfA() {
return myChild2OfA;
}
public NodeData getNodeB() {
return myNodeB;
}
public NodeData getNodeD() {
return myNodeD;
}
public final NodeData getChildOfB() {
return myChildOfB;
}
/*
* This is a recursive child node (able to contains itself)
*/
public final NodeData getChildOfChildOfB() {
return myChildOfChildOfB;
}
public final LinkData getLinkAsClass() {
return myLinkA2C;
}
public final LinkData getLinkAsClass_Cardinality2() {
return myLinkA2C_Cardinalyty2;
}
public final LinkData getLinkAsClass_Cardinality1() {
return myLinkA2C_Cardinality1;
}
public final LinkData getSelfLinkAsClass() {
return mySelfLinkAsClass;
}
public final EReference getLinkAsRef() {
return myLinkAsRef;
}
public final EReference getLinkAsRef_Cardinality2() {
return myLinkAsRef_Cardinality2;
}
public final EReference getLinkAsRef_Cardinality1() {
return myLinkAsRef_Cardinality1;
}
public final LinkData getLink2Link() {
return myLink2Link;
}
public final LinkData getLinkFromLink() {
return myLinkFromLink;
}
public final LinkData getLinkCrossLink() {
return myLinkCrossLink;
}
public final EReference getLink2LinkRef() {
return myLink2LinkRef;
}
public final EReference getLinkFromLinkRef() {
return myLinkFromLinkRef;
}
public final EReference getLinkCrossLinkRef() {
return myLinkCrossLinkRef;
}
public final EReference getSelfLinkAsRef() {
return mySelfLinkAsRef;
}
public EClass getDiagramElement() {
return myDiagramElement;
}
}