blob: 737fef480a4fc34cfd08e11176b6f804c52b28ee [file] [log] [blame]
[%import "comps.eol";%]
digraph G {
node[fontname=Tahoma, fontsize=10]
edge[fontname=Tahoma, fontsize=10]
rankdir=LR
[%if (r.components.notEmpty()){%]
{rank = same [%=r.inPorts.name.concat(" ")%]}
{rank = same [%=r.outPorts.name.concat(" ")%]}
[%for (p in r.inPorts){%]
[%=p.name%] [shape=none, margin=0, label=<<table cellspacing='1' cellborder='0' border="0" cellpadding="0"><tr><td align="right"><img src="[%=getIcon("port")%]"/></td><td align="left" valign="middle">[%=p.name%]</td></tr></table>>];
[%}%]
[%for (p in r.outPorts){%]
[%=p.name%] [shape=none, margin=0, label=<<table cellspacing='1' cellborder='0' border="0" cellpadding="0"><tr><td align="right" valign="middle">[%=p.name%]</td><td align="left"><img src="[%=getIcon("port")%]"/></td></tr></table>>];
[%}%]
[%for (g in r.groups){%]
subgraph cluster_c[%=loopCount%] {
style=filled;
fontname="Tahoma";
fontsize=9;
color="#c2e3ae";
labeljust="r";
label = <<b>[%=g.name%] </b>>;
[%for (c in g.components){%]
[%=c.toDot()%]
[%}%]
}
[%}%]
[%for (c in r.components.excludingAll(r.groups.components.flatten())){%]
[%=c.toDot()%]
[%}%]
[%for (c in r.components.inPorts.flatten().incoming.flatten().
includingAll(r.components.outPorts.flatten().outgoing.flatten()).asSet()){%]
[%=c.from.getDotID()%] -> [%=c.to.getDotID()%]
[%}%]
[%}else{%]
[%=r.toDot()%]
[%}%]
}
[%
@template
operation comps::Component toDot() {
%]
[%=self.name%] [shape=plaintext, label=<
<table border="0" cellspacing="0" cellpadding="0">
<tr>
<td border="1">
<table border="0" cellspacing="0" cellpadding="0" bgcolor="#fffcdc:#ffffff" gradientangle="270">
<tr>
<td>&nbsp;</td><td>&nbsp;</td><td cellpadding="2" align="right"><img src="[%=getIcon("component")%]"></img></td>
</tr>
[%if(self.maxPorts() > 0){%]
[%for (i in 0.to(self.maxPorts()-1)){%]
<tr>
[%=getPortCell(self.inPorts, i)%]
<td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td>
[%=getPortCell(self.outPorts, i)%]
</tr>
<tr>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
[%}%]
[%}%]
</table>
</td>
</tr>
<tr>
<td cellpadding="5" href="javascript:top.showView('/[%=self.getPath().concat("/")%]')">[%=self.name%]</td>
</tr>
</table>
>];
[%
}
operation comps::Port getDotID(){
if (self.eContainer() == r) {
return self.name;
}
else {
return self.eContainer().name + ":" + self.name;
}
}
operation getPortCell(ports : Collection, index : Integer) {
var cell = "<td cellpadding='2' ";
if (ports.size > index) {
cell += " port='" + ports.at(index).name +
"'><font color1='#727372' point-size='9'>"
+ ports.at(index).name + "</font>";
}
else {
cell += ">";
}
cell += "</td>";
return cell;
}
operation comps::Component maxPorts() {
return Sequence{self.inPorts.size(), self.outPorts.size()}.max();
}
operation comps::Connector belongsToDiagram() {
return Sequence{self.from, self.to}.forAll(p|
r.inPorts.includes(p) or
r.outPorts.includes(p) or
r.components.inPorts.flatten().includes(p) or
r.components.outPorts.flatten().includes(p));
}
operation getIcon(name : String) {
return new Native("java.io.File")
(System.context.module.file.parent, "icons/" + name + ".png").absolutePath;
}
%]