import org.simantics.objmap.structural.IStructuralObject;\r
\r
@SuppressWarnings("rawtypes")\r
-public abstract class Connection <T extends IComponentNode> implements IStructuralObject{\r
+public abstract class Connection<T extends Connection<T, T2>, T2 extends IComponentNode<T, T2>> implements IStructuralObject{\r
\r
+ private List<T2> connects = new ArrayList<T2>();\r
\r
- private List<T> connects = new ArrayList<T>();\r
- \r
- \r
- public void addConnect(T node) {\r
+ public void addConnect(T2 node) {\r
if (!connects.contains(node))\r
connects.add(node);\r
fireChanged(node,true);\r
}\r
\r
- protected void fireChanged(T node, boolean add){\r
- for (IComponentNode n : connects) {\r
- n.connectionChanged(this,node,add);\r
+ @SuppressWarnings("unchecked")\r
+ protected void fireChanged(T2 node, boolean add){\r
+ for (T2 n : connects) {\r
+ n.connectionChanged((T) this,node,add);\r
}\r
}\r
\r
- public Collection<T> getConnected() {\r
+ public Collection<T2> getConnected() {\r
return connects;\r
}\r
\r
- public void removeConnect(T node) {\r
+ public void removeConnect(T2 node) {\r
connects.remove(node);\r
fireChanged(node,false);\r
}\r
\r
+ @SuppressWarnings("unchecked")\r
public void remove() {\r
- List<T> toRemove = new ArrayList<T>(connects.size());\r
+ List<T2> toRemove = new ArrayList<T2>(connects.size());\r
toRemove.addAll(connects);\r
for (IComponentNode node : toRemove) {\r
- node.removeConnection(this);\r
+ node.removeConnection((T) this);\r
}\r
}\r
\r
- public T getOther(T node) {\r
+ public T2 getOther(IComponentNode<T, T2> node) {\r
if (connects.size() != 2) \r
return null;\r
if (connects.get(0).equals(node))\r