diff options
Diffstat (limited to 'runtime/org.eclipse.etrice.runtime.java/src/org/eclipse/etrice/runtime/java/modelbase/SubSystemClassBase.java')
-rw-r--r-- | runtime/org.eclipse.etrice.runtime.java/src/org/eclipse/etrice/runtime/java/modelbase/SubSystemClassBase.java | 108 |
1 files changed, 100 insertions, 8 deletions
diff --git a/runtime/org.eclipse.etrice.runtime.java/src/org/eclipse/etrice/runtime/java/modelbase/SubSystemClassBase.java b/runtime/org.eclipse.etrice.runtime.java/src/org/eclipse/etrice/runtime/java/modelbase/SubSystemClassBase.java index 3219c7fda..498f6732e 100644 --- a/runtime/org.eclipse.etrice.runtime.java/src/org/eclipse/etrice/runtime/java/modelbase/SubSystemClassBase.java +++ b/runtime/org.eclipse.etrice.runtime.java/src/org/eclipse/etrice/runtime/java/modelbase/SubSystemClassBase.java @@ -8,11 +8,14 @@ package org.eclipse.etrice.runtime.java.modelbase; +import java.util.Collection; +import java.util.List; + import org.eclipse.etrice.runtime.java.config.IVariableService; import org.eclipse.etrice.runtime.java.debugging.DebuggingService; import org.eclipse.etrice.runtime.java.messaging.Address; +import org.eclipse.etrice.runtime.java.messaging.IMessageService; import org.eclipse.etrice.runtime.java.messaging.IRTObject; -import org.eclipse.etrice.runtime.java.messaging.MessageService; import org.eclipse.etrice.runtime.java.messaging.RTObject; import org.eclipse.etrice.runtime.java.messaging.RTServices; import org.eclipse.etrice.runtime.java.modelbase.RTSystemProtocol.RTSystemConjPort; @@ -24,7 +27,7 @@ import org.eclipse.etrice.runtime.java.modelbase.RTSystemProtocol.RTSystemConjPo * @author Henrik Rentz-Reichert * */ -public abstract class SubSystemClassBase extends RTObject implements IEventReceiver{ +public abstract class SubSystemClassBase extends RTObject implements IEventReceiver, IInterfaceItemOwner { // variable service (is only instantiated if needed) protected IVariableService variableService = null; @@ -35,6 +38,9 @@ public abstract class SubSystemClassBase extends RTObject implements IEventRecei //--------------------- interface item IDs protected static final int IFITEM_RTSystemPort = 0; + private PathToThread path2thread = new PathToThread(); + private PathToPeers path2peers = new PathToPeers(); + // for tests only private TestSemaphore terminateSem=null; private int terminateCode; @@ -105,10 +111,7 @@ public abstract class SubSystemClassBase extends RTObject implements IEventRecei public void destroy() { System.out.println("*** MainComponent "+getInstancePath()+"::destroy ***"); - for (IRTObject child : getChildren()) { - if (child instanceof ActorClassBase) - ((ActorClassBase) child).destroy(); - } + super.destroy(); System.out.println("=== done destroy actor instances"); DebuggingService.getInstance().getAsyncLogger().close(); @@ -116,10 +119,10 @@ public abstract class SubSystemClassBase extends RTObject implements IEventRecei System.out.println("=== done close loggers"); RTServices.getInstance().destroy(); - System.out.println("=== done destroy RTServices"); + System.out.println("=== done destroy RTServices\n\n\n"); } - public MessageService getMsgService(int idx) { + public IMessageService getMsgService(int idx) { return RTServices.getInstance().getMsgSvcCtrl().getMsgSvc(idx); } @@ -163,4 +166,93 @@ public abstract class SubSystemClassBase extends RTObject implements IEventRecei public IVariableService getVariableService() { return variableService; } + + /** + * map a path to a thread id + * @param path + * @param thread + */ + public void addPathToThread(String path, int thread) { + path2thread.put(path, thread); + } + + /** + * get thread for path + * @param path + * @return + */ + public int getThreadForPath(String path) { + Integer thread = path2thread.get(path); + if (thread==null) + return -1; + + return thread; + } + + /** + * add a peer for the given path + * @param path + * @param peer + */ + public void addPathToPeer(String path, String peer) { + path2peers.put(path, peer); + } + + /** + * add a collection of peers to the given path + * @param path + * @param peers + */ + public void addPathToPeers(String path, Collection<String> peers) { + path2peers.put(path, peers); + } + + /** + * add several peers to the given path + * @param path + * @param peers + */ + public void addPathToPeers(String path, String... peers) { + path2peers.put(path, peers); + } + + /** + * @param path + * @return list of peer paths + */ + public List<String> getPeersForPath(String path) { + return path2peers.get(path); + } + + /** + * Clears thread and peer mappings. + */ + public void resetAll() { + path2peers.clear(); + path2thread.clear(); + } + /** + * @param optionalActorClass + * @param instanceActorClass + * @return + */ + abstract public IOptionalActorFactory getFactory(String optionalActorClass, String instanceActorClass); + + /* (non-Javadoc) + * @see org.eclipse.etrice.runtime.java.modelbase.IInterfaceItemOwner#getEventReceiver() + */ + @Override + public IEventReceiver getEventReceiver() { + return this; + } + + @Override + public int getThread() { + return 0; + } + + @Override + public IReplicatedInterfaceItem getSystemPort() { + return RTSystemPort; + } } |