root/gaphor/tags/gaphor-0.12.0/gaphor/UML/uml2.override

Revision 2104, 7.3 kB (checked in by arj..@yirdis.nl, 1 year ago)

updated docs in uml2.override

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
Line 
1 comment
2   vim:sw=4:et:syntax=python
3
4   This is a file with custom definitions for Gaphors data model.
5
6   Parts are separated by '%%' (no training spaces) on a line.
7   Comment parts start with 'comment' on the line belowe the percentage
8   symbols, 'override' is used to define a overridden variable.
9
10 %%
11 override Element
12 from element import Element
13 %%
14 override Diagram
15 from diagram import Diagram
16 %%
17 override MultiplicityElement.lower
18 # Make it watch MultiplicityElement.lowerValue.value
19 def _get(self):
20     return self.lowerValue and self.lowerValue.value
21 def _set(self, value):
22     if not self.lowerValue:
23         self.lowerValue = self._factory.create(LiteralString)
24     self.lowerValue.value = value
25 def _del(self):
26     if self.lowerValue:
27         del self.lowerValue.value
28
29 MultiplicityElement.lower = property(_get, _set, _del)
30 del _get, _set, _del
31 %%
32 override MultiplicityElement.upper
33 # Make it watch MultiplicityElement.upperValue.value
34 def _get(self):
35     return self.upperValue and self.upperValue.value
36 def _set(self, value):
37     if not self.upperValue:
38         self.upperValue = self._factory.create(LiteralString)
39     self.upperValue.value = value
40 def _del(self):
41     if self.upperValue:
42         del self.upperValue.value
43
44 MultiplicityElement.upper = property(_get, _set, _del)
45 del _get, _set, _del
46 %%
47 override Class.extension
48 def class_extension(self):
49     extension = []
50     for e in self._factory.select(lambda e: e.isKindOf(Extension) and self in e.endType):
51
52         extension.append(e)
53     return extension
54
55 Class.extension = property(class_extension, doc="""
56     References the Extensions that specify additional properties of the
57     metaclass. The property is derived from the extensions whose memberEnds
58     are typed by the Class.""")
59 del class_extension
60 %%
61 override Extension.metaclass
62 def extension_metaclass(self):
63     ownedEnd = self.ownedEnd
64     return [c for c in self.memberEnd if c not in ownedEnd][0].type
65
66 Extension.metaclass = property(extension_metaclass, doc="""
67     References the Class that is extended through an Extension. The
68     property is derived from the type of the memberEnd that is not the
69     ownedEnd.""")
70 del extension_metaclass
71 %%
72 override Classifier.inheritedMember
73 Classifier.inheritedMember = derivedunion('inheritedMember', 0, '*')
74 %%
75 override Classifier.general
76 def classifier_general(self):
77     return [g.general for g in self.generalization]
78
79 Classifier.general = property(classifier_general, doc="""
80     Return a list of all superclasses for class (iterating the Generalizations.
81     """)
82 del classifier_general
83 %%
84 override Class.superClass
85 Class.superClass = Classifier.general
86 %%
87 override Namespace.importedMember
88 Namespace.importedMember = derivedunion('importedMember', 0, '*')
89 %%
90 override Property.opposite
91
92 def property_opposite(self):
93     """
94     In the case where the property is one navigable end of a binary
95     association with both ends navigable, this gives the other end.
96
97     For Gaphor the property on the other end is returned regardless the
98     navigability.
99     """
100     #if not self.owningAssociation and len(self.association.memberEnd) == 2:
101     #    other_end = self.association.memberEnd[0] is self \
102     #                and self.association.memberEnd[1] \
103     #                or self.association.memberEnd[0]
104     #    return other_end
105     if self.association is not None and len(self.association.memberEnd) == 2:
106         return self.association.memberEnd[0] is self \
107                and self.association.memberEnd[1] \
108                or self.association.memberEnd[0]
109     return None
110
111 Property.opposite = property(property_opposite, doc=property_opposite.__doc__)
112
113 del property_opposite
114
115 %%
116 override Property.isComposite
117 Property.isComposite = property(lambda self: self.aggregation == intern('composite'))
118 %%
119 override Constraint.context
120 Constraint.context = derivedunion('context', 0, 1)
121 %%
122 override Association.endType
123
124 Association.endType = property(lambda self: [end.type for end in self.memberEnd if end], doc="""
125     References the classifiers that are used as types of the ends of the
126     association.""")
127
128 %%
129 override Property.parse
130 from umllex import parse_property
131 Property.parse = parse_property
132 del parse_property
133 %%
134 override Property.render
135 from umllex import render_property
136 Property.render = render_property
137 del render_property
138 %%
139 override Operation.type
140 Operation.type = derivedunion('type', 0, 1)
141 %%
142 override Operation.parse
143 from umllex import parse_operation
144 Operation.parse = parse_operation
145 del parse_operation
146 %%
147 override Operation.render
148 from umllex import render_operation
149 Operation.render = render_operation
150 del render_operation
151 %%
152 override Lifeline.parse
153 from umllex import parse_lifeline
154 Lifeline.parse = parse_lifeline
155 del parse_lifeline
156 %%
157 override Lifeline.render
158 from umllex import render_lifeline
159 Lifeline.render = render_lifeline
160 del render_lifeline
161 %%
162 override Extenstion.metaclass
163
164 def extension_metaclass(self):
165     """
166     References the Class that is extended through an Extension. The
167     property is derived from the type of the memberEnd that is not the
168     ownedEnd.
169     """
170     for m in self.memberEnd:
171         if m not in self.ownedEnd:
172             return m
173     return None
174
175 Extenstion.metaclass = property(extension_metaclass, doc=extension_metaclass.__doc__)
176 del extension_metaclass
177 %%
178 override Component.provided
179 import itertools
180
181 def _pr_interface_deps(classifier, dep_type):
182     """
183     Return all interfaces, which are connected to a classifier with given
184     dependency type.
185     """
186     return (dep.supplier[0] for dep in classifier.clientDependency \
187         if dep.isKindOf(dep_type) and dep.supplier[0].isKindOf(UML.Interface))
188
189 def _pr_rc_interface_deps(component, dep_type):
190     """
191     Return all interfaces, which are connected to realizing classifiers of
192     specified component. Returned interfaces are connected to realizing
193     classifiers with given dependency type.
194
195     Generator of generators is returned. Do not forget to flat it later.
196     """
197     return (_pr_interface_deps(r.realizingClassifier, dep_type) for r in component.realization)
198
199 def component_provided(self):
200     implementations = (impl.contract[0] for impl in self.implementation if impl.isKindOf(Implementation))
201     realizations = _pr_interface_deps(self, Realization)
202
203     # realizing classifiers realizations
204     # this generator of generators, so flatten it later
205     rc_realizations = _pr_rc_interface_deps(self, Realization)
206
207     return tuple(set(itertools.chain(implementations, realizations, *rc_realizations)))
208
209 Component.provided = property(component_provided, doc="""
210     Interfaces provided to component environment.
211     """)
212 del component_provided
213 %%
214 override Component.required
215 def component_required(self):
216     usages = _pr_interface_deps(self, Usage)
217
218     # realizing classifiers usages
219     # this generator of generators, so flatten it later
220     rc_usages = _pr_rc_interface_deps(self, Usage)
221
222     return tuple(set(itertools.chain(usages, *rc_usages)))
223
224 Component.required = property(component_required, doc="""
225     Interfaces required by component.
226     """)
227 del component_required
228 %%
229 override Message.messageKind
230
231 def message_messageKind(self):
232     kind = 'unknown'
233     if self.sendEvent:
234         kind = 'lost'
235         if self.receiveEvent:
236             kind = 'complete'
237     elif self.receiveEvent:
238         kind = 'found'
239     return kind
240
241 Message.messageKind = property(message_messageKind, doc="""
242     MessageKind
243     """)
244 del message_messageKind
245
Note: See TracBrowser for help on using the browser.