class A(object): name = Ecore.EAttribute(eType=Ecore.EString) children = Ecore.EReference(upper=-1, containment=True) parent = Ecore.EReference(eOpposite=children) def __init__(self, name=None, children=None): if children: self.children.update(children) self.name = name def __repr__(self): return self.name
def test_xmi_save_none_value(tmpdir): f = tmpdir.mkdir('pyecore-tmp').join('default_none_value.xmi') # Build a simple metamodel Root = Ecore.EClass('Root') Root.eStructuralFeatures.append(Ecore.EReference('element', Ecore.EObject)) Root.eStructuralFeatures.append(Ecore.EAttribute('name', Ecore.EString)) Root.eStructuralFeatures.append( Ecore.EAttribute('ints', Ecore.EInt, upper=-1)) pack = Ecore.EPackage('mypack', nsURI='http://mypack/1.0', nsPrefix='mypack_pref') pack.eClassifiers.append(Root) r = Root() r.element = None r.name = None r.ints.extend([3, 4, 5]) rset = ResourceSet() resource = rset.create_resource(URI(str(f))) resource.append(r) resource.save(options={XMIOptions.SERIALIZE_DEFAULT_VALUES: True}) with open(str(f), 'r') as f: tree = etree.parse(f) xmlroot = tree.getroot() assert xmlroot[0].tag in ('name', 'element') assert xmlroot[1].tag in ('name', 'element') assert xmlroot[0].tag != xmlroot[1].tag
def test_xmi_ecore_save_heterogeneous_metamodel(tmpdir): f = tmpdir.mkdir('pyecore-tmp').join('heterogeneous.xmi') # Build a simple metamodel Root = Ecore.EClass('Root') Root.eStructuralFeatures.append(Ecore.EReference('element', Ecore.EObject)) pack = Ecore.EPackage('mypack', nsURI='http://mypack/1.0', nsPrefix='mypack_pref') pack.eClassifiers.append(Root) rset = ResourceSet() resource = rset.get_resource('tests/xmi/xmi-tests/My.ecore') root = resource.contents[0] rset.metamodel_registry[root.nsURI] = root # We open a first model with a special metamodel resource = rset.get_resource('tests/xmi/xmi-tests/MyRoot.xmi') root1 = resource.contents[0] r = Root(element=root1) resource = rset.create_resource(URI(str(f))) resource.append(r) resource.save() with open(str(f), 'r') as f: tree = etree.parse(f) xmlroot = tree.getroot() assert 'mypack_pref' in xmlroot.nsmap assert 'myprefix' in xmlroot.nsmap
def lib(): package = Ecore.EPackage('mypackage') package.nsURI = 'http://simplemetamodel/1.0' package.nsPrefix = 'simplemm' AbsA = Ecore.EClass('AbsA', abstract=True) AbsA.eStructuralFeatures.append(Ecore.EReference('toa', AbsA)) A = Ecore.EClass('A', superclass=(AbsA,)) SubA = Ecore.EClass('SubA', superclass=(A,)) MyRoot = Ecore.EClass('MyRoot') MyRoot.a_container = Ecore.EReference('a_container', eType=AbsA, upper=-1, containment=True) MyRoot.eStructuralFeatures.append(MyRoot.a_container) package.eClassifiers.extend([MyRoot, A, SubA, AbsA]) package.MyRoot = MyRoot package.SubA = SubA package.A = A # we register the metamodel first global_registry[package.nsURI] = package return package
def test_delete_resolved_proxy_with_childre(): A = Ecore.EClass('A') A.eStructuralFeatures.append( Ecore.EReference('children', A, containment=True, upper=-1)) a0, a1, a2, a3 = A(), A(), A(), A() a0.children.append(a1) a1.children.extend([a2, a3]) proxy = Ecore.EProxy(wrapped=a1) proxy.delete() assert a0.children == []
def test_load_multipleroot_with_refs(): rset = ResourceSet() multi_root = path.join('tests', 'xmi', 'xmi-tests', 'multiple_with_refs.xmi') package = Ecore.EPackage('amm', 'ammuri', 'amm') A = Ecore.EClass('A') A.eStructuralFeatures.append(Ecore.EAttribute('name', Ecore.EString)) A.eStructuralFeatures.append(Ecore.EReference('toa', A)) A.eStructuralFeatures.append(Ecore.EReference('contains', A, containment=True)) package.eClassifiers.append(A) rset.metamodel_registry[package.nsURI] = package resource = rset.get_resource(URI(str(multi_root))) root1, root2 = resource.contents assert root1.contains.toa is root2 assert root1.name == 'root1' assert root2.name == 'root2' assert root1.contains.name == 'inner'
def test_deserialize_href_uuid_ref(): Root = Ecore.EClass('Root') Root.eStructuralFeatures.append(Ecore.EReference('element', Ecore.EObject)) pack = Ecore.EPackage('mypack', nsURI='http://mypack/1.0', nsPrefix='mypack_pref') pack.eClassifiers.append(Root) rset = ResourceSet() resource = rset.get_resource('tests/xmi/xmi-tests/My.ecore') root = resource.contents[0] rset.metamodel_registry[root.nsURI] = root rset.metamodel_registry[pack.nsURI] = pack resource = rset.get_resource('tests/xmi/xmi-tests/encoded.xmi') root1 = resource.contents[0] resource = rset.get_resource('tests/xmi/xmi-tests/encoded2.xmi') root2 = resource.contents[0] assert root2.element.eClass is root1.eClass
def test_xmi_multiroot_save(tmpdir): # Define a simple model that will be split in many roots A = Ecore.EClass('A') A.eStructuralFeatures.append(Ecore.EAttribute('name', Ecore.EString)) pack1 = Ecore.EPackage('pack1', nsURI='http://pack1/1.0', nsPrefix='pack1') pack1.eClassifiers.append(A) B = Ecore.EClass('B') B.eStructuralFeatures.append(Ecore.EAttribute('age', Ecore.EInt)) B.eStructuralFeatures.append(Ecore.EReference('to_a', A)) pack2 = Ecore.EPackage('pack2', nsURI='http://pack2/1.0', nsPrefix='pack2') pack2.eClassifiers.append(B) f = tmpdir.mkdir('pyecore-tmp').join('multi_root.xmi') rset = ResourceSet() resource = rset.create_resource(URI(str(f))) resource.append(pack1) resource.append(pack2) resource.save() with open(str(f), 'r') as f: tree = etree.parse(f) xmlroot = tree.getroot() assert xmlroot.tag == '{{{0}}}XMI'.format(XMI_URL)
class A(object): child = Ecore.EReference(containment=True, upper=-1) imply = Ecore.EReference() ref_by = Ecore.EReference() distant = Ecore.EReference(eType=Ecore.EObject)
class Root(object): many_a = Ecore.EReference(eType=A, upper=-1, containment=True)
class Root(object): name = Ecore.EAttribute(eType=Ecore.EString) many_a = Ecore.EReference(eType=A, upper=-1, containment=True) eclasses = Ecore.EReference(eType=Ecore.EClass, upper=-1, containment=True)