blob: 5c689f43b9ad472799f6d1549713c4a60fcbaa45 [file] [log] [blame]
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;
}