@namespace(uri="comps", prefix="comps")
package comps;

class Component {
	attr String name;
	val Port[*] inPorts;
	val Port[*] outPorts;
	val Component[*]#parent components;
	ref Component#components parent;
	val Connector[*] connectors;
	attr String action;
	val Group[*] groups;
}

class Group {
	attr String name;
	attr String color;
	ref Component[*] components;
}

class Port {
	attr String name;
	ref Connector[*]#from outgoing;
	ref Connector[*]#to incoming;
	ref Type type;
}

class Connector {
	ref Port#outgoing from;
	ref Port#incoming to;
}
	
class Type {
	attr String name;
}