@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 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(); } }
@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(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(); } } } }
((PortCore<ControlPort>) mainCore.getControl()).doTrigger( Start.event, 0, mainCore); } catch (InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException | NoSuchMethodException | SecurityException e) {
((PortCore<ControlPort>) child.getControl()).doTrigger( 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()) {
((PortCore<ControlPort>) child.getControl()).doTrigger( Kill.event, wid, component.getComponentCore()); ((PortCore<ControlPort>) parent.getControl()).doTrigger(new Killed(component.getComponentCore()), wid, component.getComponentCore()); } else { synchronized (component.getComponentCore()) {
@Override void doConfigUpdate(ConfigUpdate update) { Config.Impl impl = (Config.Impl) conf; impl.apply(update, ValueMerger.NONE); Update forwardedEvent = new Update(update, id()); // forward down for (Component child : children) { ((PortCore<ControlPort>) child.getControl()).doTrigger( forwardedEvent, wid, this); } // forward up if (parent != null) { ((PortCore<ControlPort>) parent.getControl()).doTrigger( forwardedEvent, wid, this); } component.postUpdate(); }
case ORIGINAL: { Update forwardedEvent = new Update(event.update, id()); ((PortCore<ControlPort>) parent.getControl()).doTrigger( forwardedEvent, wid, component.getComponentCore()); ConfigUpdate mappedUpdate = action.upMapper.map(event.update, event.update.modify(id())); Update forwardedEvent = new Update(mappedUpdate, id()); ((PortCore<ControlPort>) parent.getControl()).doTrigger( forwardedEvent, wid, component.getComponentCore());