1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 """ Implements few eclipse ecore XML parser helpers. """
21 import re
22
24 """ Reference to real instance. """
25
27 """ The constructor. """
28 self.reference = reference
29 self.node = node
30
32 """ Delegate to the reference object.
33 So the reference object can behave the
34 same way as the real object.
35 """
36 return getattr(self.instance(), name)
37
39 """ Retrieve the real object instance from the object hierarchy. """
40 ref = self.reference
41 cnode = self.node
42 if ref.startswith("//"):
43 cnode = self.node.get_root()
44 ref = ref[2:]
45 for pel in ref.split("/"):
46 res = re.match(r"@([^.]+)(?:\.(\d+))?", pel)
47 if res != None:
48 name = res.group(1)
49
50 if res.group(2) != None:
51 cnode = getattr(cnode, name)[int(res.group(2))]
52 else:
53 cnode = getattr(cnode, name)
54 else:
55 raise Exception("Invalid reference %s" % ref)
56 return cnode
57
58
60 """ Container class that implements a parent relationship. """
63
65 """ Retrieving the root container. """
66 if self.parent == None:
67 return self
68 else:
69 return self.parent.get_root()
70