| operation Any isDiagram() { |
| return self.eClass().isAnnotatedAs("picto.diagram"); |
| } |
| |
| operation Any isNode() { |
| return self.eClass().isAnnotatedAs("picto.node"); |
| } |
| |
| operation Any isLink() { |
| return self.eClass().isAnnotatedAs("picto.link"); |
| } |
| |
| operation Any getTitle() { |
| var attr = self.eClass().getAnnotationValue("picto.diagram", "title"); |
| return self.eGet(self.eClass().getEStructuralFeature(attr)); |
| } |
| |
| operation Any getLabel() { |
| var ann = self.isNode() ? "picto.node" : "picto.link"; |
| var attr = self.eClass().getAnnotationValue(ann, "label"); |
| return self.eGet(self.eClass().getEStructuralFeature(attr)); |
| } |
| |
| operation Any getSource() { |
| var ref = self.eClass().getAnnotationValue("picto.link", "source"); |
| return self.eGet(self.eClass().getEStructuralFeature(ref)); |
| } |
| |
| operation Any getTarget() { |
| var ref = self.eClass().getAnnotationValue("picto.link", "target"); |
| return self.eGet(self.eClass().getEStructuralFeature(ref)); |
| } |
| |
| operation Any getColor() { |
| var ann = self.isNode() ? "picto.node" : "picto.link"; |
| return self.eClass().getAnnotationValue(ann, "color"); |
| } |
| |
| operation Any getShape() { |
| return self.eClass().getAnnotationValue("picto.node", "shape"); |
| } |
| |
| operation Any isAnnotatedAs(name: String) : Boolean { |
| return self.getAnnotation(name).isDefined(); |
| } |
| |
| operation Any getAnnotationValue(name: String, detail: String) : Any { |
| var ann = self.eAnnotations.selectOne(a|a.source = name); |
| var det; |
| |
| if (ann.isDefined()) { |
| det = ann.details.selectOne(d|d.key = detail); |
| } |
| |
| if (det.isDefined()) { |
| return det.value; |
| } |
| else if (self.eClass().name = "EClass") { |
| for (s in self.eSuperTypes) { |
| var sann = s.getAnnotationValue(name, detail); |
| if (sann.isDefined()) { |
| return sann; |
| } |
| } |
| } |
| return det; |
| } |
| |
| operation Any getAnnotation(name : String) : Any { |
| var ann = self.eAnnotations.selectOne(a|a.source = name); |
| |
| if (self.eClass().name = "EClass" and ann.isUndefined()) { |
| for (s in self.eSuperTypes) { |
| var sann = s.getAnnotation(name); |
| if (sann.isDefined()) return sann; |
| } |
| } |
| |
| return ann; |
| } |