@Override public <P extends PortType> Positive<P> getPositive(Class<P> portType) { return ComponentDefinition.this.getComponentCore().getPositive(portType); }
@Override public <P extends PortType> Negative<P> getNegative(Class<P> portType) { return ComponentDefinition.this.getComponentCore().getNegative(portType); }
@Override public void handle(Stopped event) { logger().debug("Got Stopped event from {}", event.component); activeSet.remove(event.component); logger().debug("Active set has {} members", activeSet.size()); if (activeSet.isEmpty() && (state == Component.State.STOPPING)) { logger().debug("Stopped!"); state = Component.State.PASSIVE; component.tearDown(); if (parent != null) { ((PortCore<ControlPort>) parent.getControl()).doTrigger(new Stopped(component.getComponentCore()), wid, component.getComponentCore()); } else { synchronized (component.getComponentCore()) { component.getComponentCore().notifyAll(); } } } }
@Override public void handle(Started event) { logger().debug("Got Started event from {}", event.component); activeSet.add(event.component); logger().debug("Active set has {} members", activeSet.size()); try { childrenLock.readLock().lock(); if ((activeSet.size() == children.size()) && (state == Component.State.STARTING)) { logger().debug("Started!"); state = Component.State.ACTIVE; if (parent != null) { ((PortCore<ControlPort>) parent.getControl()).doTrigger(new Started(component.getComponentCore()), wid, component.getComponentCore()); } } } finally { childrenLock.readLock().unlock(); } }
@Override public <T extends ComponentDefinition> Component doCreate(Class<T> definition, Optional<Init<T>> initEvent, Optional<ConfigUpdate> update) { // create an instance of the implementing component type ComponentDefinition component; childrenLock.writeLock().lock(); try { parentThreadLocal.set(this); childUpdate.set(update); component = createInstance(definition, initEvent); ComponentCore child = component.getComponentCore(); //child.workCount.incrementAndGet(); child.setScheduler(scheduler); children.add(child); return child; } catch (InstantiationException e) { throw new RuntimeException("Cannot create component " + definition.getCanonicalName(), e); } catch (IllegalAccessException e) { throw new RuntimeException("Cannot create component " + definition.getCanonicalName(), e); } catch (NoSuchMethodException e) { throw new RuntimeException("Cannot create component " + definition.getCanonicalName(), e); } catch (InvocationTargetException e) { throw new RuntimeException("Cannot create component " + definition.getCanonicalName(), e); } finally { childrenLock.writeLock().unlock(); } }
@Override public void handle(Killed event) { logger().debug("Got Killed event from {}", event.component); activeSet.remove(event.component); doDestroy(event.component); logger().debug("Active set has {} members", activeSet.size()); if (activeSet.isEmpty() && (state == Component.State.STOPPING)) { logger().debug("Stopped!"); state = Component.State.PASSIVE; component.tearDown(); if (parent != null) { ((PortCore<ControlPort>) parent.getControl()).doTrigger(new Killed(component.getComponentCore()), wid, component.getComponentCore()); } else { synchronized (component.getComponentCore()) { component.getComponentCore().notifyAll(); } } } }
Stop.event, wid, component.getComponentCore()); component.tearDown(); if (parent != null) { ((PortCore<ControlPort>) parent.getControl()).doTrigger(new Stopped(component.getComponentCore()), wid, component.getComponentCore()); } else { synchronized (component.getComponentCore()) { component.getComponentCore().notifyAll();
@Override public void handle(Start event) { if (state != Component.State.PASSIVE) { throw new KompicsException(JavaComponent.this + " received a Start event while in " + state + " state. " + "Duplicate Start events are not allowed!"); } try { childrenLock.readLock().lock(); if (!children.isEmpty()) { logger().debug("Starting..."); state = Component.State.STARTING; for (ComponentCore child : children) { logger().debug("Sending Start to child: {}", child); // start child ((PortCore<ControlPort>) child.getControl()).doTrigger( Start.event, wid, component.getComponentCore()); } } else { logger().debug("Started!"); state = Component.State.ACTIVE; if (parent != null) { ((PortCore<ControlPort>) parent.getControl()).doTrigger(new Started(component.getComponentCore()), wid, component.getComponentCore()); } } } finally { childrenLock.readLock().unlock(); } }
Kill.event, wid, component.getComponentCore()); ((PortCore<ControlPort>) parent.getControl()).doTrigger(new Killed(component.getComponentCore()), wid, component.getComponentCore()); } else { synchronized (component.getComponentCore()) { component.getComponentCore().notifyAll();
mainComponent = constr.newInstance(initEvent); mainCore = mainComponent.getComponentCore(); mainCore.setScheduler(scheduler);
for (Component child : children) { ((PortCore<ControlPort>) child.getControl()).doTrigger( forwardedEvent, wid, component.getComponentCore()); for (Component child : children) { ((PortCore<ControlPort>) child.getControl()).doTrigger( forwardedEvent, wid, component.getComponentCore()); if (child.id() != event.forwarder) { ((PortCore<ControlPort>) child.getControl()).doTrigger( forwardedEvent, wid, component.getComponentCore()); if (child.id() != event.forwarder) { ((PortCore<ControlPort>) child.getControl()).doTrigger( forwardedEvent, wid, component.getComponentCore()); Update forwardedEvent = new Update(event.update, id()); ((PortCore<ControlPort>) parent.getControl()).doTrigger( forwardedEvent, wid, component.getComponentCore()); Update forwardedEvent = new Update(mappedUpdate, id()); ((PortCore<ControlPort>) parent.getControl()).doTrigger( forwardedEvent, wid, component.getComponentCore());