blob: ae2f194864165c9b8cbc5797fafd511badc2a6da [file] [log] [blame]
digraph G {
graph[splines=ortho]
node[fontname=Arial, fontsize=10, shape=record]
edge[fontname=Arial, fontsize=10]
[%var entities = getVisibleEntities();%]
[%for (e in entities){%]
[%=e.getNodeName()%][shape=none, margin=0, label=<[%=e.getLabel()%]>]
[%}%]
[%for (f in e.features.flatten().select(f|f.type.isTypeOf(Entity) and f.type <> e)){%]
[%=f.eContainer.getNodeName()%]->[%=f.type.getNodeName()%][arrowhead=[%=f.getArrow()%],arrowtail=none,tooltip="[%=f.name%]"];
[%}%]
[%if (e.superType.isDefined()){%]
[%=e.superType.getNodeName()%]->[%=e.getNodeName()%][arrowhead=none,arrowtail=empty,dir=back];
[%}%]
[%for (s in Entity.all.select(en|en.superType = e)){%]
[%=e.getNodeName()%]->[%=s.getNodeName()%][arrowhead=none,arrowtail=empty,dir=back];
[%}%]
}
[%
operation Entity getLabel() {
var onClick = "top.showView(['Model','" + self.name + "'])";
if (self == e) {
onClick = "top.showElement('" + self.id + "', '" + self.eResource.uri + "')";
}
var label = "<table cellspacing='0' cellborder='0' cellpadding='1' bgcolor='" + self.getColour() + "'>";
label += "<tr><td sides='B' colspan='2' border='1' cellpadding='0'>" +
"<table border='0' cellspacing='0' cellborder='0'>" +
"<tr><td align='right' valign='middle'><img src='" + self.getIcon()+ "'></img></td>" +
"<td align='left' valign='middle' href=\"javascript:" + onClick + "\" tooltip='Go'>" + self.name + " </td></tr></table></td></tr>";
label += "<tr><td></td><td></td></tr>";
for (f in self.features.sortBy(a|a.name.toLowerCase())) {
label += "<tr>";
label += "<td><img src='" + f.getIcon() + "'></img></td><td align='left'>" + f.getLabel() + "</td>";
label += "</tr>";
}
if (self.features.isEmpty()){
label += "<tr>";
label += "<td> </td><td> </td>";
label += "</tr>";
}
label += "</table>";
return label;
}
operation Entity getIcon() {
return getImage("icons/entity.gif");
}
operation Feature getLabel() {
return self.name + " : " + self.type?.name + (self.many ? "["+"*"+"]" : "") ;
}
operation Feature getIcon() {
return getImage("icons/attribute.gif");
}
operation Entity getNodeName() {
return "_Entity" + Entity.all.indexOf(self);
}
operation Feature getArrow() {
if (self.many) {
return "crow";
}
else {
return "open";
}
}
operation getVisibleEntities() {
var visibleEntities : Set;
visibleEntities.add(e);
visibleEntities.addAll(e.features.select(f|f.type.isTypeOf(Entity)).collect(f|f.type));
if (e.superType.isDefined()) visibleEntities.add(e.superType);
visibleEntities.addAll(Entity.all.select(en|en.superType = e));
return visibleEntities;
}
operation Entity getColour() {
if (self == e) return "#fff2d2";
else return "#fffcdc";
}
%]