diff options
Diffstat (limited to 'runtime/org.eclipse.etrice.runtime.java/src/org/eclipse/etrice/runtime/java/modelbase/InterfaceItemBase.java')
-rw-r--r-- | runtime/org.eclipse.etrice.runtime.java/src/org/eclipse/etrice/runtime/java/modelbase/InterfaceItemBase.java | 55 |
1 files changed, 26 insertions, 29 deletions
diff --git a/runtime/org.eclipse.etrice.runtime.java/src/org/eclipse/etrice/runtime/java/modelbase/InterfaceItemBase.java b/runtime/org.eclipse.etrice.runtime.java/src/org/eclipse/etrice/runtime/java/modelbase/InterfaceItemBase.java index b05d3b820..df4441621 100644 --- a/runtime/org.eclipse.etrice.runtime.java/src/org/eclipse/etrice/runtime/java/modelbase/InterfaceItemBase.java +++ b/runtime/org.eclipse.etrice.runtime.java/src/org/eclipse/etrice/runtime/java/modelbase/InterfaceItemBase.java @@ -8,8 +8,6 @@ package org.eclipse.etrice.runtime.java.modelbase; -import java.util.List; - import org.eclipse.etrice.runtime.java.messaging.AbstractMessageReceiver; import org.eclipse.etrice.runtime.java.messaging.Address; import org.eclipse.etrice.runtime.java.messaging.IMessageReceiver; @@ -23,7 +21,7 @@ import org.eclipse.etrice.runtime.java.messaging.RTServices; * * @author Henrik Rentz-Reichert */ -public abstract class InterfaceItemBase extends AbstractMessageReceiver { +public abstract class InterfaceItemBase extends AbstractMessageReceiver implements IInterfaceItem { /** * If this is part of an {@link IReplicatedInterfaceItem} then the @@ -38,7 +36,7 @@ public abstract class InterfaceItemBase extends AbstractMessageReceiver { private int localId; private int idx; protected Address peerAddress = null; - private InterfaceItemBase peer; + private IInterfaceItem peer; /** @@ -67,27 +65,9 @@ public abstract class InterfaceItemBase extends AbstractMessageReceiver { this.ownMsgReceiver = msgSvc; } - - if (replicator==null) - connectWithPeer(); - } - - protected void connectWithPeer() { - List<String> peerPaths = getParent().getPeersForPath(getInstancePath()); - if (peerPaths!=null && !peerPaths.isEmpty()) { - IRTObject object = getObject(peerPaths.get(0)); - InterfaceItemBase peer = null; - if (object instanceof InterfaceItemBase) { - peer = ((InterfaceItemBase) object); - } - else if (object instanceof IReplicatedInterfaceItem) { - peer = ((IReplicatedInterfaceItem) object).createSubInterfaceItem(); - } - connectWith(peer); - } } - protected synchronized InterfaceItemBase connectWith(InterfaceItemBase peer) { + public synchronized IInterfaceItem connectWith(IInterfaceItem peer) { if (peer!=null) { this.peer = peer; @@ -96,11 +76,18 @@ public abstract class InterfaceItemBase extends AbstractMessageReceiver { return this.peer; } - // connect with each other - peerAddress = peer.getAddress(); - peer.peerAddress = getAddress(); - this.peerMsgReceiver = peer.ownMsgReceiver; - peer.peerMsgReceiver = ownMsgReceiver; + if (peer instanceof IReplicatedInterfaceItem) + peer = ((IReplicatedInterfaceItem) peer).createSubInterfaceItem(); + + if (peer instanceof InterfaceItemBase) { + InterfaceItemBase thePeer = (InterfaceItemBase) peer; + + // connect with each other + peerAddress = thePeer.getAddress(); + thePeer.peerAddress = getAddress(); + this.peerMsgReceiver = thePeer.ownMsgReceiver; + thePeer.peerMsgReceiver = ownMsgReceiver; + } } @@ -110,7 +97,8 @@ public abstract class InterfaceItemBase extends AbstractMessageReceiver { protected synchronized void disconnect() { disconnectInternal(); if (peer!=null) { - peer.disconnectInternal(); + if (peer instanceof InterfaceItemBase) + ((InterfaceItemBase)peer).disconnectInternal(); peer = null; } } @@ -170,4 +158,13 @@ public abstract class InterfaceItemBase extends AbstractMessageReceiver { public String toString() { return ((replicator!=null)?"sub ":"")+"port "+getName()+" "+getAddress()+" <-> "+getPeerAddress(); } + + public static void connect(IRTObject obj, String path1, String path2) { + IRTObject obj1 = obj.getObject(path1); + IRTObject obj2 = obj.getObject(path2); + + if (obj1 instanceof IInterfaceItem && obj2 instanceof IInterfaceItem) { + ((IInterfaceItem)obj1).connectWith((IInterfaceItem) obj2); + } + } } |