The following document contains the results of PMD's CPD 4.2.5.
File | Line |
---|---|
cz/cuni/amis/pogamut/base/component/bus/ComponentBus.java | 275 |
cz/cuni/amis/pogamut/base/component/lifecyclebus/LifecycleBus.java | 302 |
if (log.isLoggable(Level.INFO)) log.info(component + " registered under id " + component.getComponentId().getToken()); } @Override public IComponent getComponent(IToken name) { return componentsByToken.get(name); } // // // EVENTS LISTENER // // @Override public void addEventListener(Class<?> event, IComponentEventListener<?> listener) { NullCheck.check(event, "event"); NullCheck.check(listener, "listener"); eventListeners.get(event).add(listener); } @Override public void addEventListener(Class<?> event, Class<?> component, IComponentEventListener<?> listener) { NullCheck.check(event, "event"); NullCheck.check(component, "comopnent"); NullCheck.check(listener, "listener"); componentEventListeners.get(component).get(event).add(listener); } @Override public void addEventListener(Class<?> event, IToken componentName, IComponentEventListener<?> listener) { NullCheck.check(event, "event"); NullCheck.check(componentName, "componentName"); NullCheck.check(listener, "listener"); componentNameEventListeners.get(componentName).get(event).add(listener); } @Override public void addEventListener(Class<?> event, IComponent component, IComponentEventListener<?> listener) { NullCheck.check(component, "component"); addEventListener(event, component.getComponentId(), listener); } @Override public boolean isListening(Class<?> event, IComponentEventListener<?> listener) { NullCheck.check(event, "event"); NullCheck.check(listener, "listener"); if (!eventListeners.containsKey(event)) return false; return eventListeners.get(event).contains(listener); } @Override public boolean isListening(Class<?> event, Class<?> component, IComponentEventListener<?> listener) { NullCheck.check(event, "event"); NullCheck.check(component, "component"); NullCheck.check(listener, "listener"); if (!componentEventListeners.containsKey(component)) return false; Map<Class, Set<IComponentEventListener>> listeners = componentEventListeners.get(component); if (!listeners.containsKey(event)) return false; return listeners.get(event).contains(listener); } @Override public boolean isListening(Class<?> event, IToken componentId, IComponentEventListener<?> listener) { NullCheck.check(event, "event"); NullCheck.check(componentId, "componentId"); NullCheck.check(listener, "listener"); if (!componentNameEventListeners.containsKey(componentId)) return false; Map<Class, Set<IComponentEventListener>> listeners = componentNameEventListeners.get(componentId); if (!listeners.containsKey(event)) return false; return listeners.get(event).contains(listener); } @Override public boolean isListening(Class<?> event, IComponent component, IComponentEventListener<?> listener) { NullCheck.check(component, "component"); return isListening(event, component.getComponentId(), listener); } @Override public void removeEventListener(Class<?> event, IComponentEventListener<?> listener) { NullCheck.check(event, "event"); NullCheck.check(listener, "listener"); if (!eventListeners.containsKey(event)) return; eventListeners.get(event).remove(listener); } @Override public void removeEventListener(Class<?> event, Class<?> component, IComponentEventListener<?> listener) { NullCheck.check(event, "event"); NullCheck.check(component, "component"); NullCheck.check(listener, "listener"); if (!componentEventListeners.containsKey(component)) return; Map<Class, Set<IComponentEventListener>> listeners = componentEventListeners.get(component); if (!listeners.containsKey(event)) return; listeners.get(event).remove(listener); } @Override public void removeEventListener(Class<?> event, IToken componentId, IComponentEventListener<?> listener) { NullCheck.check(event, "event"); NullCheck.check(componentId, "componentId"); NullCheck.check(listener, "listener"); if (!componentNameEventListeners.containsKey(componentId)) return; Map<Class, Set<IComponentEventListener>> listeners = componentNameEventListeners.get(componentId); if (!listeners.containsKey(event)) return; listeners.get(event).remove(listener); } @Override public void removeEventListener(Class<?> event, IComponent component, IComponentEventListener<?> listener) { NullCheck.check(component, "component"); removeEventListener(event, component.getComponentId(), listener); } // // // EVENT PROCESSING // // /** * Helper method used ONLY FROM innerRaiseEvent. DO NOT USE OUTSIDE THAT METHOD! * <p><p> * Notifies only if isRunning(). * * @param event */ private void notifyListenersA(IComponentEvent event) { Collection<Class> eventClasses = ClassUtils.getSubclasses(event.getClass()); for (Class eventClass : eventClasses) { if (!eventListeners.containsKey(eventClass)) continue; for (IComponentEventListener listener : eventListeners.get(eventClass)) { if (!isRunning()) return; listener.notify(event); } } } /** * Helper method used ONLY FROM innerRaiseEvent. DO NOT USE OUTSIDE THAT METHOD! * <p><p> * Notifies only if isRunning(). * * @param event */ private void notifyListenersB(IComponentEvent event) { Collection<Class> componentClasses = ClassUtils.getSubclasses(event.getSource().getClass()); Collection<Class> eventClasses = ClassUtils.getSubclasses(event.getClass()); for (Class componentClass : componentClasses) { if (!componentEventListeners.containsKey(componentClass)) continue; Map<Class, Set<IComponentEventListener>> listeners = componentEventListeners.get(componentClass); for (Class eventClass : eventClasses) { if (!listeners.containsKey(eventClass)) continue; for (IComponentEventListener listener : listeners.get(eventClass)) { if (!isRunning()) return; listener.notify(event); } } } } /** * Helper method used ONLY FROM innerRaiseEvent. DO NOT USE OUTSIDE THAT METHOD! * <p><p> * Notifies only if isRunning(). * * @param event */ private void notifyListenersC(IComponentEvent event) { if (!componentNameEventListeners.containsKey(event.getSource().getComponentId())) return; Map<Class, Set<IComponentEventListener>> listeners = componentNameEventListeners.get(event.getSource().getComponentId()); Collection<Class> eventClasses = ClassUtils.getSubclasses(event.getClass()); for (Class eventClass : eventClasses) { if (!listeners.containsKey(eventClass)) continue; for (IComponentEventListener listener : listeners.get(eventClass)) { if (!isRunning()) return; listener.notify(event); } } } /** * Helper method used ONLY FROM innerRaiseEvent. DO NOT USE OUTSIDE THAT METHOD! * <p><p> * Notification is done safe-way ... every listener is notified even if an exception happens in one of them. * <p><p> * Notifies also if is not running (used for propagation of {@link IFatalErrorEvent}. * * @param event */ private void notifyListenersA_Safe(IComponentEvent event) { Collection<Class> eventClasses = ClassUtils.getSubclasses(event.getClass()); for (Class eventClass : eventClasses) { if (!eventListeners.containsKey(eventClass)) continue; for (IComponentEventListener listener : eventListeners.get(eventClass)) { try { listener.notify(event); } catch (Exception e) { if (log.isLoggable(Level.WARNING)) log.warning(ExceptionToString.process("Exception happened during notification of event " + event + " on listener " + listener + ".", e)); } } } } /** * Helper method used ONLY FROM innerRaiseEvent. DO NOT USE OUTSIDE THAT METHOD! * <p><p> * Notification is done safe-way ... every listener is notified even if an exception happens in one of them. * <p><p> * Notifies also if is not running (used for propagation of {@link IFatalErrorEvent}. * * @param event */ private void notifyListenersB_Safe(IComponentEvent event) { Collection<Class> componentClasses = ClassUtils.getSubclasses(event.getSource().getClass()); Collection<Class> eventClasses = ClassUtils.getSubclasses(event.getClass()); for (Class componentClass : componentClasses) { if (!componentEventListeners.containsKey(componentClass)) continue; Map<Class, Set<IComponentEventListener>> listeners = componentEventListeners.get(componentClass); for (Class eventClass : eventClasses) { if (!listeners.containsKey(eventClass)) continue; for (IComponentEventListener listener : listeners.get(eventClass)) { try { listener.notify(event); } catch (Exception e) { if (log.isLoggable(Level.WARNING)) log.warning(ExceptionToString.process("Exception happened during notification of event " + event + " on listener " + listener + ".", e)); } } } } } /** * Helper method used ONLY FROM innerRaiseEvent. DO NOT USE OUTSIDE THAT METHOD! * <p><p> * Notification is done safe-way ... every listener is notified even if an exception happens in one of them. * <p><p> * Notifies also if is not running (used for propagation of {@link IFatalErrorEvent}. * * @param event */ private void notifyListenersC_Safe(IComponentEvent event) { if (!componentNameEventListeners.containsKey(event.getSource().getComponentId())) return; Map<Class, Set<IComponentEventListener>> listeners = componentNameEventListeners.get(event.getSource().getComponentId()); Collection<Class> eventClasses = ClassUtils.getSubclasses(event.getClass()); for (Class eventClass : eventClasses) { if (!listeners.containsKey(eventClass)) continue; for (IComponentEventListener listener : listeners.get(eventClass)) { try { listener.notify(event); } catch (Exception e) { if (log.isLoggable(Level.WARNING)) log.warning(ExceptionToString.process("Exception happened during notification of event " + event + " on listener " + listener + ".", e)); } } } } /** * Process new IWorldEvent - DO NOT CALL SEPARATELY - must be called only from raiseEvent(), * that forbids recursion of its calls. * <p><p> * Contains the sequence in which the listeners are informed about the event. * @param event */ private void innerRaiseEvent(IComponentEvent event) { if (event instanceof IFatalErrorEvent) { if (log.isLoggable(Level.SEVERE)) log.severe("Fatal error happenned - component bus is stopping." + Const.NEW_LINE + ((IFatalErrorEvent)event).getSummary()); queue.clear(); running = false; notifyListenersA_Safe(event); notifyListenersB_Safe(event); notifyListenersC_Safe(event); return; } else { if (log.isLoggable(Level.FINE)) log.fine("Notifying " + event); } if (!isRunning()) return; notifyListenersA(event); if (!isRunning()) return; notifyListenersB(event); if (!isRunning()) return; notifyListenersC(event); } /** * Process new IWorldEvent - DO NOT CALL SEPARATELY - must be called only from raiseEvent(), * that forbids recursion of its calls. * <p><p> * Contains the sequence in which the listeners are informed about the event. * <p><p> * Notification is done safe-way ... every listener is notified even if an exception happens in one of them. * * @param event */ private void innerRaiseEvent_Safe(IComponentEvent event) { if (event instanceof IFatalErrorEvent) { if (log.isLoggable(Level.SEVERE)) log.severe("Fatal error happenned - component bus is stopping." + Const.NEW_LINE + ((IFatalErrorEvent)event).getSummary()); queue.clear(); running = false; } else { if (log.isLoggable(Level.FINE)) log.fine("Notifying (safe) " + event); } notifyListenersA_Safe(event); notifyListenersB_Safe(event); notifyListenersC_Safe(event); } @Override public synchronized boolean event(IComponentEvent event) throws ComponentBusNotRunningException, ComponentBusErrorException, FatalErrorPropagatingEventException { // method is synchronized - only one thread inside at given time NullCheck.check(event, "event"); if (event instanceof IResetEvent) throw new IllegalArgumentException("you can't broadcast reset event this way, use reset() instead"); if (!isRunning()) { |
File | Line |
---|---|
cz/cuni/amis/pogamut/multi/communication/worldview/impl/AbstractLocalWorldView.java | 753 |
cz/cuni/amis/pogamut/multi/communication/worldview/impl/AbstractSharedWorldView.java | 576 |
} ///////////// //LISTENERS// //////////// @Override public void addEventListener(Class<?> event, IWorldEventListener<?> listener) { eventListeners.add(event, listener); } @Override public void addObjectListener(Class<?> objectClass, IWorldObjectEventListener<?, ?> listener) { objectsListeners.add(objectClass, listener); } @Override public void addObjectListener(Class<?> objectClass, Class<?> eventClass, IWorldObjectEventListener<?,?> listener) { ListenersMap<Class> listeners = objectEventListeners.get(eventClass); listeners.add(objectClass, listener); } @Override public void addObjectListener(WorldObjectId objectId, IWorldObjectEventListener<?, ?> listener) { specificObjectListeners.add(objectId, listener); } @Override public void addObjectListener(WorldObjectId objectId, Class<?> eventClass, IWorldObjectEventListener<?, ?> listener) { ListenersMap<Class> listeners = specificObjectEventListeners.get(objectId); listeners.add(eventClass, listener); } @Override public boolean isListening(Class<?> eventClass, IWorldEventListener<?> listener) { return eventListeners.isListening(eventClass, listener); } @Override public boolean isListening(Class<?> objectClass, IWorldObjectEventListener<?, ?> listener) { return objectsListeners.isListening(listener); } @Override public boolean isListening(Class<?> objectClass, Class<?> eventClass, IWorldObjectEventListener<?, ?> listener) { if (objectEventListeners.containsKey(objectClass)) { // be careful not to create unnecessary ListenersMap return objectEventListeners.get(eventClass).isListening(objectClass, listener); } else { return false; } } @Override public boolean isListening(WorldObjectId objectId, IWorldObjectEventListener<?, ?> listener) { return specificObjectListeners.isListening(objectId, listener); } @Override public boolean isListening(WorldObjectId objectId, Class<?> eventClass, IWorldObjectEventListener<?, ?> listener) { if (specificObjectEventListeners.containsKey(objectId)) { // be careful not to create unnecessary ListenersMap return specificObjectEventListeners.get(objectId).isListening(eventClass, listener); } else { return false; } } @Override public boolean isListening(IWorldEventListener<?> listener) { if (eventListeners.isListening(listener) || specificObjectListeners.isListening(listener)) { return true; } synchronized(objectEventListeners) { for (ListenersMap<Class> listeners : objectEventListeners.values()) { if (listeners.isListening(listener)) return true; } } synchronized(specificObjectEventListeners) { for (ListenersMap<Class> listeners : specificObjectEventListeners.values()) { if (listeners.isListening(listener)) return true; } } return false; } @Override public void removeEventListener(Class<?> eventClass, IWorldEventListener<?> listener) { eventListeners.remove(eventClass, listener); } @Override public void removeObjectListener(Class<?> objectClass, IWorldObjectEventListener<?, ?> listener) { objectsListeners.remove(objectClass, listener); } @Override public void removeObjectListener(Class<?> objectClass, Class<?> eventClass, IWorldObjectEventListener<?, ?> listener) { if (objectEventListeners.containsKey(eventClass)) { // be careful not to create unnecessary ListenersMap objectEventListeners.get(eventClass).remove(objectClass, listener); } } @Override public void removeObjectListener(WorldObjectId objectId, IWorldObjectEventListener<?, ?> listener) { specificObjectListeners.remove(objectId, listener); } @Override public void removeObjectListener(WorldObjectId objectId, Class<?> eventClass, IWorldObjectEventListener<?, ?> listener) { if (specificObjectEventListeners.containsKey(objectId)) { // be careful not to create unnecessary ListenersMap specificObjectEventListeners.get(objectId).remove(eventClass, listener); } } @Override public void removeListener(IWorldEventListener<?> listener) { eventListeners.remove(listener); synchronized(objectEventListeners) { for (ListenersMap<Class> listeners : objectEventListeners.values()) { listeners.remove(listener); } } specificObjectListeners.remove(listener); specificObjectEventListeners.remove(listener); } // EVENT PROCESSING /** * Process new IWorldEvent - notify all the listeners about it. Forbids recursion. * <p><p> * Use in the descendants to process new IWorldChangeEvent. * <p><p> * Does not catch any exceptions! * <p><p> * Synchronized! * * @param event */ protected synchronized void raiseEvent(IWorldEvent event) { // method is synchronized - only one thread inside at given time // is this method recursively called? if (raiseEventProcessing) { // yes it is -> that means the previous event has not been // processed! ... store this event and allows the previous one // to be fully processed (e.g. postpone raising this event) raiseEventsList.add(event); return; } else { // no it is not ... so raise the flag that we're inside the method raiseEventProcessing = true; } // process event innerRaiseEvent(event); // check the events list size, do we have more events to process? while(raiseEventsList.size() != 0) { // yes we do -> do it! innerRaiseEvent(raiseEventsList.poll()); } // all events has been processed, drop the flag that we're inside the method raiseEventProcessing = false; } // // // EVENT PROCESSING // // /** * Helper method used ONLY FROM innerRaiseEvent. DO NOT USE OUTSIDE THAT METHOD! * @param event */ private void notifyLevelAListeners(IWorldEvent event) { Collection<Class> eventClasses = ClassUtils.getSubclasses(event.getClass()); notifier.setEvent(event); for (Class eventClass : eventClasses) { eventListeners.notify(eventClass, notifier); } } /** * Helper method used ONLY FROM innerRaiseEvent. DO NOT USE OUTSIDE THAT METHOD! * @param event */ private void notifyLevelBListeners(IWorldObjectEvent event) { IWorldObject object = event.getObject(); Collection<Class> objectClasses = ClassUtils.getSubclasses(object.getClass()); notifier.setEvent(event); for (Class objectClass : objectClasses) { objectsListeners.notify(objectClass, notifier); } } /** * Helper method used ONLY FROM innerRaiseEvent. DO NOT USE OUTSIDE THAT METHOD! * @param event */ private void notifyLevelCListeners(IWorldObjectEvent event) { Collection<Class> eventClasses = ClassUtils.getSubclasses(event.getClass()); Collection<Class> objectClasses = ClassUtils.getSubclasses(event.getObject().getClass()); notifier.setEvent(event); for (Class eventClass : eventClasses) { ListenersMap<Class> listeners = objectEventListeners.get(eventClass); if (listeners == null) continue; if (!listeners.hasListeners()) continue; for (Class objectClass : objectClasses) { listeners.notify(objectClass, notifier); } } } /** * Helper method used ONLY FROM innerRaiseEvent. DO NOT USE OUTSIDE THAT METHOD! * @param event */ private void notifyLevelDListeners(IWorldObjectEvent event) { notifier.setEvent(event); specificObjectListeners.notify(event.getId(), notifier); } /** * Helper method used ONLY FROM innerRaiseEvent. DO NOT USE OUTSIDE THAT METHOD! * @param event */ private void notifyLevelEListeners(IWorldObjectEvent event) { notifier.setEvent(event); WorldObjectId objectId = event.getId(); ListenersMap<Class> listeners = specificObjectEventListeners.get(objectId); if (listeners.hasListeners()) { Collection<Class> eventClasses = ClassUtils.getSubclasses(event.getClass()); notifier.setEvent(event); for (Class eventClass : eventClasses) { listeners.notify(eventClass, notifier); } } } /** * Process new IWorldEvent - DO NOT CALL SEPARATELY - must be called only from raiseEvent(), * that forbids recursion of its calls. * <p><p> * Contains the sequence in which the listeners are informed about the event. * @param event */ private void innerRaiseEvent(IWorldEvent event) { if (log.isLoggable(Level.FINEST)) log.finest("notifying " + event); notifyLevelAListeners(event); if (event instanceof IWorldObjectEvent) { // now we may notify other listeners as well IWorldObjectEvent objectEvent = (IWorldObjectEvent)event; notifyLevelBListeners(objectEvent); notifyLevelCListeners(objectEvent); notifyLevelDListeners(objectEvent); notifyLevelEListeners(objectEvent); } } |
File | Line |
---|---|
cz/cuni/amis/pogamut/base/communication/worldview/impl/AbstractWorldView.java | 391 |
cz/cuni/amis/pogamut/multi/communication/worldview/impl/AbstractLocalWorldView.java | 753 |
} ///////////// //LISTENERS// //////////// @Override public void addEventListener(Class<?> event, IWorldEventListener<?> listener) { eventListeners.add(event, listener); } @Override public void addObjectListener(Class<?> objectClass, IWorldObjectEventListener<?, ?> listener) { objectsListeners.add(objectClass, listener); } @Override public void addObjectListener(Class<?> objectClass, Class<?> eventClass, IWorldObjectEventListener<?,?> listener) { ListenersMap<Class> listeners = objectEventListeners.get(eventClass); listeners.add(objectClass, listener); } @Override public void addObjectListener(WorldObjectId objectId, IWorldObjectEventListener<?, ?> listener) { specificObjectListeners.add(objectId, listener); } @Override public void addObjectListener(WorldObjectId objectId, Class<?> eventClass, IWorldObjectEventListener<?, ?> listener) { ListenersMap<Class> listeners = specificObjectEventListeners.get(objectId); listeners.add(eventClass, listener); } @Override public boolean isListening(Class<?> eventClass, IWorldEventListener<?> listener) { return eventListeners.isListening(eventClass, listener); } @Override public boolean isListening(Class<?> objectClass, IWorldObjectEventListener<?, ?> listener) { return objectsListeners.isListening(listener); } @Override public boolean isListening(Class<?> objectClass, Class<?> eventClass, IWorldObjectEventListener<?, ?> listener) { if (objectEventListeners.containsKey(objectClass)) { // be careful not to create unnecessary ListenersMap return objectEventListeners.get(eventClass).isListening(objectClass, listener); } else { return false; } } @Override public boolean isListening(WorldObjectId objectId, IWorldObjectEventListener<?, ?> listener) { return specificObjectListeners.isListening(objectId, listener); } @Override public boolean isListening(WorldObjectId objectId, Class<?> eventClass, IWorldObjectEventListener<?, ?> listener) { if (specificObjectEventListeners.containsKey(objectId)) { // be careful not to create unnecessary ListenersMap return specificObjectEventListeners.get(objectId).isListening(eventClass, listener); } else { return false; } } @Override public boolean isListening(IWorldEventListener<?> listener) { if (eventListeners.isListening(listener) || specificObjectListeners.isListening(listener)) { return true; } synchronized(objectEventListeners) { for (ListenersMap<Class> listeners : objectEventListeners.values()) { if (listeners.isListening(listener)) return true; } } synchronized(specificObjectEventListeners) { for (ListenersMap<Class> listeners : specificObjectEventListeners.values()) { if (listeners.isListening(listener)) return true; } } return false; } @Override public void removeEventListener(Class<?> eventClass, IWorldEventListener<?> listener) { eventListeners.remove(eventClass, listener); } @Override public void removeObjectListener(Class<?> objectClass, IWorldObjectEventListener<?, ?> listener) { objectsListeners.remove(objectClass, listener); } @Override public void removeObjectListener(Class<?> objectClass, Class<?> eventClass, IWorldObjectEventListener<?, ?> listener) { if (objectEventListeners.containsKey(eventClass)) { // be careful not to create unnecessary ListenersMap objectEventListeners.get(eventClass).remove(objectClass, listener); } } @Override public void removeObjectListener(WorldObjectId objectId, IWorldObjectEventListener<?, ?> listener) { specificObjectListeners.remove(objectId, listener); } @Override public void removeObjectListener(WorldObjectId objectId, Class<?> eventClass, IWorldObjectEventListener<?, ?> listener) { if (specificObjectEventListeners.containsKey(objectId)) { // be careful not to create unnecessary ListenersMap specificObjectEventListeners.get(objectId).remove(eventClass, listener); } } @Override public void removeListener(IWorldEventListener<?> listener) { eventListeners.remove(listener); synchronized(objectEventListeners) { for (ListenersMap<Class> listeners : objectEventListeners.values()) { listeners.remove(listener); } } specificObjectListeners.remove(listener); specificObjectEventListeners.remove(listener); } |
File | Line |
---|---|
cz/cuni/amis/pogamut/base/communication/worldview/impl/AbstractWorldView.java | 608 |
cz/cuni/amis/pogamut/multi/communication/worldview/impl/AbstractLocalWorldView.java | 881 |
} // EVENT PROCESSING /** * Process new IWorldEvent - notify all the listeners about it. Forbids recursion. * <p><p> * Use in the descendants to process new IWorldChangeEvent. * <p><p> * Does not catch any exceptions! * <p><p> * Synchronized! * * @param event */ protected synchronized void raiseEvent(IWorldEvent event) { // method is synchronized - only one thread inside at given time // is this method recursively called? if (raiseEventProcessing) { // yes it is -> that means the previous event has not been // processed! ... store this event and allows the previous one // to be fully processed (e.g. postpone raising this event) raiseEventsList.add(event); return; } else { // no it is not ... so raise the flag that we're inside the method raiseEventProcessing = true; } // process event innerRaiseEvent(event); // check the events list size, do we have more events to process? while(raiseEventsList.size() != 0) { // yes we do -> do it! innerRaiseEvent(raiseEventsList.poll()); } // all events has been processed, drop the flag that we're inside the method raiseEventProcessing = false; } // // // EVENT PROCESSING // // /** * Helper method used ONLY FROM innerRaiseEvent. DO NOT USE OUTSIDE THAT METHOD! * @param event */ private void notifyLevelAListeners(IWorldEvent event) { Collection<Class> eventClasses = ClassUtils.getSubclasses(event.getClass()); notifier.setEvent(event); for (Class eventClass : eventClasses) { eventListeners.notify(eventClass, notifier); } } /** * Helper method used ONLY FROM innerRaiseEvent. DO NOT USE OUTSIDE THAT METHOD! * @param event */ private void notifyLevelBListeners(IWorldObjectEvent event) { IWorldObject object = event.getObject(); Collection<Class> objectClasses = ClassUtils.getSubclasses(object.getClass()); notifier.setEvent(event); for (Class objectClass : objectClasses) { objectsListeners.notify(objectClass, notifier); } } /** * Helper method used ONLY FROM innerRaiseEvent. DO NOT USE OUTSIDE THAT METHOD! * @param event */ private void notifyLevelCListeners(IWorldObjectEvent event) { Collection<Class> eventClasses = ClassUtils.getSubclasses(event.getClass()); Collection<Class> objectClasses = ClassUtils.getSubclasses(event.getObject().getClass()); notifier.setEvent(event); for (Class eventClass : eventClasses) { ListenersMap<Class> listeners = objectEventListeners.get(eventClass); if (listeners == null) continue; if (!listeners.hasListeners()) continue; for (Class objectClass : objectClasses) { listeners.notify(objectClass, notifier); } } } /** * Helper method used ONLY FROM innerRaiseEvent. DO NOT USE OUTSIDE THAT METHOD! * @param event */ private void notifyLevelDListeners(IWorldObjectEvent event) { notifier.setEvent(event); specificObjectListeners.notify(event.getId(), notifier); } /** * Helper method used ONLY FROM innerRaiseEvent. DO NOT USE OUTSIDE THAT METHOD! * @param event */ private void notifyLevelEListeners(IWorldObjectEvent event) { notifier.setEvent(event); WorldObjectId objectId = event.getId(); ListenersMap<Class> listeners = specificObjectEventListeners.get(objectId); if (listeners.hasListeners()) { Collection<Class> eventClasses = ClassUtils.getSubclasses(event.getClass()); notifier.setEvent(event); for (Class eventClass : eventClasses) { listeners.notify(eventClass, notifier); } } } /** * Process new IWorldEvent - DO NOT CALL SEPARATELY - must be called only from raiseEvent(), * that forbids recursion of its calls. * <p><p> * Contains the sequence in which the listeners are informed about the event. * @param event */ private void innerRaiseEvent(IWorldEvent event) { if (log.isLoggable(Level.FINEST)) log.finest("notifying " + event); notifyLevelAListeners(event); if (event instanceof IWorldObjectEvent) { // now we may notify other listeners as well IWorldObjectEvent objectEvent = (IWorldObjectEvent)event; notifyLevelBListeners(objectEvent); notifyLevelCListeners(objectEvent); notifyLevelDListeners(objectEvent); notifyLevelEListeners(objectEvent); } } @Override public ILifecycleBus getEventBus() { |
File | Line |
---|---|
cz/cuni/amis/pogamut/base/communication/worldview/impl/AbstractWorldView.java | 608 |
cz/cuni/amis/pogamut/multi/communication/worldview/impl/AbstractSharedWorldView.java | 703 |
} // EVENT PROCESSING /** * Process new IWorldEvent - notify all the listeners about it. Forbids recursion. * <p><p> * Use in the descendants to process new IWorldChangeEvent. * <p><p> * Does not catch any exceptions! * <p><p> * Synchronized! * * @param event */ protected synchronized void raiseEvent(IWorldEvent event) { // method is synchronized - only one thread inside at given time // is this method recursively called? if (raiseEventProcessing) { // yes it is -> that means the previous event has not been // processed! ... store this event and allows the previous one // to be fully processed (e.g. postpone raising this event) raiseEventsList.add(event); return; } else { // no it is not ... so raise the flag that we're inside the method raiseEventProcessing = true; } // process event innerRaiseEvent(event); // check the events list size, do we have more events to process? while(raiseEventsList.size() != 0) { // yes we do -> do it! innerRaiseEvent(raiseEventsList.poll()); } // all events has been processed, drop the flag that we're inside the method raiseEventProcessing = false; } // // // EVENT PROCESSING // // /** * Helper method used ONLY FROM innerRaiseEvent. DO NOT USE OUTSIDE THAT METHOD! * @param event */ private void notifyLevelAListeners(IWorldEvent event) { Collection<Class> eventClasses = ClassUtils.getSubclasses(event.getClass()); notifier.setEvent(event); for (Class eventClass : eventClasses) { eventListeners.notify(eventClass, notifier); } } /** * Helper method used ONLY FROM innerRaiseEvent. DO NOT USE OUTSIDE THAT METHOD! * @param event */ private void notifyLevelBListeners(IWorldObjectEvent event) { IWorldObject object = event.getObject(); Collection<Class> objectClasses = ClassUtils.getSubclasses(object.getClass()); notifier.setEvent(event); for (Class objectClass : objectClasses) { objectsListeners.notify(objectClass, notifier); } } /** * Helper method used ONLY FROM innerRaiseEvent. DO NOT USE OUTSIDE THAT METHOD! * @param event */ private void notifyLevelCListeners(IWorldObjectEvent event) { Collection<Class> eventClasses = ClassUtils.getSubclasses(event.getClass()); Collection<Class> objectClasses = ClassUtils.getSubclasses(event.getObject().getClass()); notifier.setEvent(event); for (Class eventClass : eventClasses) { ListenersMap<Class> listeners = objectEventListeners.get(eventClass); if (listeners == null) continue; if (!listeners.hasListeners()) continue; for (Class objectClass : objectClasses) { listeners.notify(objectClass, notifier); } } } /** * Helper method used ONLY FROM innerRaiseEvent. DO NOT USE OUTSIDE THAT METHOD! * @param event */ private void notifyLevelDListeners(IWorldObjectEvent event) { notifier.setEvent(event); specificObjectListeners.notify(event.getId(), notifier); } /** * Helper method used ONLY FROM innerRaiseEvent. DO NOT USE OUTSIDE THAT METHOD! * @param event */ private void notifyLevelEListeners(IWorldObjectEvent event) { notifier.setEvent(event); WorldObjectId objectId = event.getId(); ListenersMap<Class> listeners = specificObjectEventListeners.get(objectId); if (listeners.hasListeners()) { Collection<Class> eventClasses = ClassUtils.getSubclasses(event.getClass()); notifier.setEvent(event); for (Class eventClass : eventClasses) { listeners.notify(eventClass, notifier); } } } /** * Process new IWorldEvent - DO NOT CALL SEPARATELY - must be called only from raiseEvent(), * that forbids recursion of its calls. * <p><p> * Contains the sequence in which the listeners are informed about the event. * @param event */ private void innerRaiseEvent(IWorldEvent event) { if (log.isLoggable(Level.FINEST)) log.finest("notifying " + event); notifyLevelAListeners(event); if (event instanceof IWorldObjectEvent) { // now we may notify other listeners as well IWorldObjectEvent objectEvent = (IWorldObjectEvent)event; notifyLevelBListeners(objectEvent); notifyLevelCListeners(objectEvent); notifyLevelDListeners(objectEvent); notifyLevelEListeners(objectEvent); } } |
File | Line |
---|---|
cz/cuni/amis/pogamut/base/component/bus/ComponentBus.java | 58 |
cz/cuni/amis/pogamut/base/component/lifecyclebus/LifecycleBus.java | 91 |
public static final IToken COMPONENT_ID = Tokens.get("LifecycleBus"); private Map<IToken, IComponent> componentsByToken = new ConcurrentHashMap<IToken, IComponent>(); private Map<Class, Set<IComponent>> componentsByClass = new LazyMap<Class, Set<IComponent>>(new ConcurrentHashMap<Class, Set<IComponent>>()) { @Override protected Set<IComponent> create(Class key) { return new ConcurrentHashSet<IComponent>(); } }; private Map<Class, Set<IComponentEventListener>> eventListeners = new LazyMap<Class, Set<IComponentEventListener>>(new ConcurrentHashMap<Class, Set<IComponentEventListener>>()) { @Override protected Set<IComponentEventListener> create(Class key) { return new ConcurrentLinkedHashSet<IComponentEventListener>(); } }; private Map<Class, Map<Class, Set<IComponentEventListener>>> componentEventListeners = new LazyMap<Class, Map<Class, Set<IComponentEventListener>>>(new ConcurrentHashMap<Class, Map<Class, Set<IComponentEventListener>>>()) { @Override protected Map<Class, Set<IComponentEventListener>> create(Class key) { return new LazyMap<Class, Set<IComponentEventListener>>(new ConcurrentHashMap<Class, Set<IComponentEventListener>>()) { @Override protected Set<IComponentEventListener> create(Class key) { return new ConcurrentLinkedHashSet<IComponentEventListener>(); } }; } }; private Map<IToken, Map<Class, Set<IComponentEventListener>>> componentNameEventListeners = new LazyMap<IToken, Map<Class, Set<IComponentEventListener>>>() { @Override protected Map<Class, Set<IComponentEventListener>> create(IToken key) { return new LazyMap<Class, Set<IComponentEventListener>>(new ConcurrentHashMap<Class, Set<IComponentEventListener>>()) { @Override protected Set<IComponentEventListener> create(Class key) { return new ConcurrentLinkedHashSet<IComponentEventListener>(); } }; } }; /** * Whether the bus is running. Dropped after IFatalError event. */ private boolean running = true; /** * List of events we have to process. * <p><p> * It is managed only by raiseEvent() method - DO NOT MODIFY OUTSIDE IT! */ private Queue<IComponentEvent> queue = new ConcurrentLinkedQueue(); /** * Flag that is telling us whether there is an event being processed or not. * <p><p> * It is managed only by raiseEvent() method - DO NOT MODIFY IT FROM OUTSIDE THAT METHOD! */ private boolean queueProcessing = false; /** * Used by processQueue() for the sync. */ private Object queueProcessingMutex = new Object(); |
File | Line |
---|---|
cz/cuni/amis/pogamut/base/component/bus/ComponentBus.java | 206 |
cz/cuni/amis/pogamut/base/component/lifecyclebus/LifecycleBus.java | 232 |
queueProcessing = false; } // // // COMPONENTS // // @Override public <T> T getComponent(Class<T> cls) throws MoreComponentsForClassException { Set<T> components = (Set<T>) componentsByClass.get(cls); if (components.size() > 0) throw new MoreComponentsForClassException(cls, components, this); return components.iterator().next(); } @Override public <T> Set<T> getComponents(Class<T> cls) { return (Set<T>) Collections.unmodifiableSet(componentsByClass.get(cls)); } @Override public void register(IComponent component) throws ComponentIdClashException { synchronized(componentsByToken) { NullCheck.check(component.getComponentId(), "component's id is null ("+ component + ")"); if (componentsByToken.get(component.getComponentId()) != null) { if (componentsByToken.get(component.getComponentId()) == component) { return; } else { ComponentIdClashException e = new ComponentIdClashException(component.getComponentId(), log, this); try { event(new FatalErrorEvent(this, e)); } catch (Exception e1) { } throw e; } } registerComponent(component); } } @Override public void remove(IComponent component) { synchronized(componentsByToken) { componentsByToken.remove(component.getComponentId()); Collection<Class> componentClasses = ClassUtils.getSubclasses(component.getClass()); for (Class cls : componentClasses) { componentsByClass.get(cls).remove(component); } if (log.isLoggable(Level.INFO)) log.info(component + " of the id " + component.getComponentId().getToken() + " removed from the bus."); } } /** * Called whenever new component is being registered. * <p><p> * Method assumes it is "synchronized" by caller. * <p><p> * This method also assumes there is no component-id clash with existing components! Checks * has been done already inside register() method. * * @param component */ private void registerComponent(IComponent component) { componentsByToken.put(component.getComponentId(), component); Collection<Class> componentClasses = ClassUtils.getSubclasses(component.getClass()); for (Class cls : componentClasses) { componentsByClass.get(cls).add(component); } |
File | Line |
---|---|
cz/cuni/amis/pogamut/base/communication/worldview/IWorldView.java | 89 |
cz/cuni/amis/pogamut/multi/communication/worldview/ILocalWorldView.java | 142 |
TimeKey getCurrentTimeKey(); //=========// //LISTENERS// //=========// /** * Adds listener to a specific event (Level A listeners). Note that the event listener must be able * to handle events of the class 'event'. * <p><p> * It is the most general type of listener-registration allowing you to sniff any type of events. * <p><p> * Events passed to the listener are filtered only according to the 'event' class. * <p><p> * <b>WARNING:</b> even though the method does not require templated class and listener, you must be sure * that 'listener' can accept 'eventClass'. * * @param eventClass which event types you want to receive * @param listener where you want to handle these events */ public void addEventListener(Class<?> eventClass, IWorldEventListener<?> listener); /** * Adds listener to all events that happens on any object of the 'objectClass' (Level B listeners). * <p><p> * Events passed to the listener are filtered according to the 'objectClass'. * <p><p> * <b>WARNING:</b> even though the method does not require templated classes and listener, you must be sure * that 'listener' accepts all events (IWorldObjectEvent) for objects of 'objectClass'. * * @param objectClass which object class you want to listen at * @param eventClass which event class you want to receive * @param listener where you want to handle these events */ public void addObjectListener(Class<?> objectClass, IWorldObjectEventListener<?, ?> listener); /** * Adds listener to a specified 'event' that occurs on the specific 'objectClass' (Level C listeners). * <p><p> * Events passed to the listener are filtered according to the 'event' and 'objectClass' of the object the event happened upon. * <p><p> * <b>WARNING:</b> even though the method does not require templated classes and listener, you must be sure * that 'listener' accepts 'eventClass' for objects of 'objectClass'. * * <p> * eventClass can be any implementor of {@link IWorldObjectEvent}. E.g. * {@link WorldObjectAppearedEvent}, {@link WorldObjectDestroyedEvent}, {@link WorldObjectDisappearedEvent}, * {@link WorldObjectFirstEncounteredEvent} or {@link WorldObjectUpdatedEvent}. * </p> * * @param objectClass which object class you want to listen at * @param eventClass which event class you want to receive * @param listener where you want to handle these events */ public void addObjectListener(Class<?> objectClass, Class<?> eventClass, IWorldObjectEventListener<?,?> listener); /** * Adds listener to all events that happens on object with specific 'objectId' (Level D listeners). * <p><p> * Events passed to the listener are filtered according to the 'objectId' of the object. * <p><p> * <b>WARNING:</b> you must ensure that 'listener' can accept the event raised on object of specified 'objectId'. * * @param objectId which object you want to listen at * @param listener where you want to handle events */ public void addObjectListener(WorldObjectId objectId, IWorldObjectEventListener<?, ?> listener); /** * Adds listener to a specified 'event' that occurs on the specific object with 'objectId' (Level E listeners). * <p><p> * Events passed to the listener are filtered according to the 'event' and 'objectId' of the object. * <p><p> * <b>WARNING:</b> even though the method does not require templated classes and listener, you must be sure * that 'listener' accepts 'eventClass' for objects of specified 'objectId'. * * @param objectId which object you want to listen at * @param eventClass which event classes you want to receive * @param listener where you want to handle these events */ public void addObjectListener(WorldObjectId objectId, Class<?> eventClass, IWorldObjectEventListener<?, ?> listener); /** * Removes listener from a specific event (Level A listeners). * * @param eventClass which events class you want to remove the listener from * @param listener you want to remove */ public void removeEventListener(Class<?> eventClass, IWorldEventListener<?> listener); /** * Removes listener from specific 'objectClass' listening for specified 'event' (Level B listeners). * * @param objectClass class of objects you want the listener to remove from * @param eventClass which events class you want to remove the listener from * @param listener you want to remove */ public void removeObjectListener(Class<?> objectClass, IWorldObjectEventListener<?,?> listener); /** * Removes listener from specific 'objectClass' listening for specified 'event' (Level C listeners). * * @param objectClass class of objects you want the listener to remove from * @param eventClass which events class you want to remove the listener from * @param listener you want to remove */ public void removeObjectListener(Class<?> objectClass, Class<?> eventClass, IWorldObjectEventListener<?,?> listener); /** * Removes listener from objects with specified 'objectId' (Level D Listeners). * * @param objectId id of object you want the listener to remove from * @param listener you want to remove */ public void removeObjectListener(WorldObjectId objectId, IWorldObjectEventListener<?, ?> listener); /** * Removes listener to a specified 'event' that occurs on the specific object with 'objectId' (Level E listeners). * * @param objectId id of object you want the listener to remove from * @param eventClass event class you want to stop receiving in the listener * @param listener you want to remove */ public void removeObjectListener(WorldObjectId objectId, Class<?> eventClass, IWorldObjectEventListener<?, ?> listener); /** * Removes listener from every listeners category (from every listener level). * <p><p> * <b>WARNING:</b> Can be time consuming! (Iterating through all levels of listeners.) * * @param listener you want to remove from all listener levels */ public void removeListener(IWorldEventListener<?> listener); /** * Tests whether the 'listener' is listening to a specific event (Level A listeners). * * @param eventClass which events you want to receive * @param listener that is tested * @return whether the listener is listening */ public boolean isListening(Class<?> eventClass, IWorldEventListener<?> listener); /** * Tests whether the 'listener' is listening at specified 'objectClass' (Level B listeners). * * @param objectClass where the listener is tested * @param listener that is tested * @return whether the listener is listening */ public boolean isListening(Class<?> objectClass, IWorldObjectEventListener<?,?> listener); /** * Tests whether the 'listener' is listening at specified 'objectClass' for specified 'event' (Level C listeners). * * @param objectClass where the listener is tested * @param eventClass where the listener is tested * @param listener that is tested * @return whether the listener is listening */ public boolean isListening(Class<?> objectClass, Class<?> eventClass, IWorldObjectEventListener<?,?> listener); /** * Tests whether the 'listener' is listening at specified 'objectId' (Level D Listeners). * * @param objectId where the listener is tested * @param listener that is tested * @return whether the listener is listening */ public boolean isListening(WorldObjectId objectId, IWorldObjectEventListener<?, ?> listener); /** * Tests whether the 'listener' is listening to a specified 'event' that occurs on the specific object with 'objectId' (Level E listeners). * * @param objectId where the listener is tested * @param eventClass what class is tested * @param listener that is tested * @return whether the listener is listening */ public boolean isListening(WorldObjectId objectId, Class<?> eventClass, IWorldObjectEventListener<?, ?> listener); /** * Checks whether this listener is hooked to the world view (at any listener level). * <p><p> * <b>WARNING:</b> Can be time consuming! (Iterating through all levels of listeners.) * * @param listener * @return */ public boolean isListening(IWorldEventListener<?> listener); |
File | Line |
---|---|
cz/cuni/amis/pogamut/base/communication/worldview/IWorldView.java | 89 |
cz/cuni/amis/pogamut/multi/communication/worldview/ISharedWorldView.java | 35 |
public void registerLocalWorldView( ILocalWorldView localWV, ILifecycleBus bus); // ====== // EVENTS // ====== //TODO think about adding 1 listener level (specific agent) /** * Adds listener to a specific event (Level A listeners). Note that the event listener must be able * to handle events of the class 'event'. * <p><p> * It is the most general type of listener-registration allowing you to sniff any type of events. * <p><p> * Events passed to the listener are filtered only according to the 'event' class. * <p><p> * <b>WARNING:</b> even though the method does not require templated class and listener, you must be sure * that 'listener' can accept 'eventClass'. * * @param eventClass which event types you want to receive * @param listener where you want to handle these events */ public void addEventListener(Class<?> eventClass, IWorldEventListener<?> listener); /** * Adds listener to all events that happens on any object of the 'objectClass' (Level B listeners). * <p><p> * Events passed to the listener are filtered according to the 'objectClass'. * <p><p> * <b>WARNING:</b> even though the method does not require templated classes and listener, you must be sure * that 'listener' accepts all events (IWorldObjectEvent) for objects of 'objectClass'. * * @param objectClass which object class you want to listen at * @param eventClass which event class you want to receive * @param listener where you want to handle these events */ public void addObjectListener(Class<?> objectClass, IWorldObjectEventListener<?, ?> listener); /** * Adds listener to a specified 'event' that occurs on the specific 'objectClass' (Level C listeners). * <p><p> * Events passed to the listener are filtered according to the 'event' and 'objectClass' of the object the event happened upon. * <p><p> * <b>WARNING:</b> even though the method does not require templated classes and listener, you must be sure * that 'listener' accepts 'eventClass' for objects of 'objectClass'. * * <p> * eventClass can be any implementor of {@link IWorldObjectEvent}. E.g. * {@link WorldObjectAppearedEvent}, {@link WorldObjectDestroyedEvent}, {@link WorldObjectDisappearedEvent}, * {@link WorldObjectFirstEncounteredEvent} or {@link WorldObjectUpdatedEvent}. * </p> * * @param objectClass which object class you want to listen at * @param eventClass which event class you want to receive * @param listener where you want to handle these events */ public void addObjectListener(Class<?> objectClass, Class<?> eventClass, IWorldObjectEventListener<?,?> listener); /** * Adds listener to all events that happens on object with specific 'objectId' (Level D listeners). * <p><p> * Events passed to the listener are filtered according to the 'objectId' of the object. * <p><p> * <b>WARNING:</b> you must ensure that 'listener' can accept the event raised on object of specified 'objectId'. * * @param objectId which object you want to listen at * @param listener where you want to handle events */ public void addObjectListener(WorldObjectId objectId, IWorldObjectEventListener<?, ?> listener); /** * Adds listener to a specified 'event' that occurs on the specific object with 'objectId' (Level E listeners). * <p><p> * Events passed to the listener are filtered according to the 'event' and 'objectId' of the object. * <p><p> * <b>WARNING:</b> even though the method does not require templated classes and listener, you must be sure * that 'listener' accepts 'eventClass' for objects of specified 'objectId'. * * @param objectId which object you want to listen at * @param eventClass which event classes you want to receive * @param listener where you want to handle these events */ public void addObjectListener(WorldObjectId objectId, Class<?> eventClass, IWorldObjectEventListener<?, ?> listener); /** * Removes listener from a specific event (Level A listeners). * * @param eventClass which events class you want to remove the listener from * @param listener you want to remove */ public void removeEventListener(Class<?> eventClass, IWorldEventListener<?> listener); /** * Removes listener from specific 'objectClass' listening for specified 'event' (Level B listeners). * * @param objectClass class of objects you want the listener to remove from * @param eventClass which events class you want to remove the listener from * @param listener you want to remove */ public void removeObjectListener(Class<?> objectClass, IWorldObjectEventListener<?,?> listener); /** * Removes listener from specific 'objectClass' listening for specified 'event' (Level C listeners). * * @param objectClass class of objects you want the listener to remove from * @param eventClass which events class you want to remove the listener from * @param listener you want to remove */ public void removeObjectListener(Class<?> objectClass, Class<?> eventClass, IWorldObjectEventListener<?,?> listener); /** * Removes listener from objects with specified 'objectId' (Level D Listeners). * * @param objectId id of object you want the listener to remove from * @param listener you want to remove */ public void removeObjectListener(WorldObjectId objectId, IWorldObjectEventListener<?, ?> listener); /** * Removes listener to a specified 'event' that occurs on the specific object with 'objectId' (Level E listeners). * * @param objectId id of object you want the listener to remove from * @param eventClass event class you want to stop receiving in the listener * @param listener you want to remove */ public void removeObjectListener(WorldObjectId objectId, Class<?> eventClass, IWorldObjectEventListener<?, ?> listener); /** * Removes listener from every listeners category (from every listener level). * <p><p> * <b>WARNING:</b> Can be time consuming! (Iterating through all levels of listeners.) * * @param listener you want to remove from all listener levels */ public void removeListener(IWorldEventListener<?> listener); /** * Tests whether the 'listener' is listening to a specific event (Level A listeners). * * @param eventClass which events you want to receive * @param listener that is tested * @return whether the listener is listening */ public boolean isListening(Class<?> eventClass, IWorldEventListener<?> listener); /** * Tests whether the 'listener' is listening at specified 'objectClass' (Level B listeners). * * @param objectClass where the listener is tested * @param listener that is tested * @return whether the listener is listening */ public boolean isListening(Class<?> objectClass, IWorldObjectEventListener<?,?> listener); /** * Tests whether the 'listener' is listening at specified 'objectClass' for specified 'event' (Level C listeners). * * @param objectClass where the listener is tested * @param eventClass where the listener is tested * @param listener that is tested * @return whether the listener is listening */ public boolean isListening(Class<?> objectClass, Class<?> eventClass, IWorldObjectEventListener<?,?> listener); /** * Tests whether the 'listener' is listening at specified 'objectId' (Level D Listeners). * * @param objectId where the listener is tested * @param listener that is tested * @return whether the listener is listening */ public boolean isListening(WorldObjectId objectId, IWorldObjectEventListener<?, ?> listener); /** * Tests whether the 'listener' is listening to a specified 'event' that occurs on the specific object with 'objectId' (Level E listeners). * * @param objectId where the listener is tested * @param eventClass what class is tested * @param listener that is tested * @return whether the listener is listening */ public boolean isListening(WorldObjectId objectId, Class<?> eventClass, IWorldObjectEventListener<?, ?> listener); /** * Checks whether this listener is hooked to the world view (at any listener level). * <p><p> * <b>WARNING:</b> Can be time consuming! (Iterating through all levels of listeners.) * * @param listener * @return */ public boolean isListening(IWorldEventListener<?> listener); |
File | Line |
---|---|
cz/cuni/amis/pogamut/multi/communication/worldview/impl/EventDrivenLocalWorldView.java | 63 |
cz/cuni/amis/pogamut/multi/communication/worldview/impl/EventDrivenLocalWorldView.java | 134 |
if (isPaused()) { throw new ComponentPausedException(controller.getState().getFlag(), this); } if (!isRunning()) { throw new ComponentNotRunningException(controller.getState().getFlag(), this); } if (!( event instanceof ILocalWorldObjectUpdatedEvent)) { if ( event instanceof ICompositeWorldObjectUpdatedEvent) { IWorldChangeEvent partEvent = ((ICompositeWorldObjectUpdatedEvent)event).getSharedEvent(); if (partEvent != null) //shared part { log.finest("Notyfying sharedWV " + event.toString() + ")"); sharedWorldView.notify(partEvent); } partEvent = ((ICompositeWorldObjectUpdatedEvent)event).getStaticEvent(); if ( partEvent != null) //static part { log.finest("Notyfying sharedWV " + event.toString() + ")"); sharedWorldView.notify(partEvent); } } //shared or static event will not modify LocalObjects, no need to process it beyond notifying sharedWorldView else if ( (event instanceof ISharedWorldObjectUpdatedEvent) || (event instanceof IStaticWorldObjectUpdatedEvent) ) { log.finest("Notyfying sharedWV " + event.toString() + ")"); sharedWorldView.notify(event); return; } } // process event // is this method recursively called? if (receiveEventProcessing) { // yes it is -> that means the previous event has not been // processed! ... store this event and allows the previous one // to be fully processed (e.g. postpone raising this event) notifyEventsList.add(event); return; } else { // no it is not ... so raise the flag that we're inside the method receiveEventProcessing = true; } try { innerNotify(event); // check the events list size, do we have more events to process? while (notifyEventsList.size() != 0) { // yes -> do it! innerNotify(notifyEventsList.poll()); } } finally { // all events has been processed, drop the flag that we're inside the method receiveEventProcessing = false; } } /** * Catches exceptions. If exception is caught, it calls {@link ComponentController}.fatalError() and this.kill(). */ @Override |
File | Line |
---|---|
cz/cuni/amis/pogamut/base/component/controller/SharedComponentController.java | 531 |
cz/cuni/amis/pogamut/base/component/controller/SharedComponentController.java | 566 |
if (log != null && log.isLoggable(Level.FINER)) log.finer(id(component) + "[" + getState().getFlag() + "] processing localStartPaused(" + agentId + ")"); switch(getState().getFlag()) { case INSTANTIATED: case STOPPED: case RESETED: if (log != null && log.isLoggable(Level.FINER)) log.finer(id(component) + "[" + getState().getFlag() + "] must start-paused!"); startPaused(); break; case RUNNING: case PAUSED: // nothing to do break; case STARTING: case STARTING_PAUSED: case PAUSING: case RESUMING: case STOPPING: case KILLING: case RESETTING: // can't happen ... throw new ComponentCantStartException(id(component) + "[" + getState().getFlag() + "] STATE INVALID AT THIS POINT!", this); case KILLED: if (log != null && log.isLoggable(Level.FINER)) log.finer(id(component) + "[" + getState().getFlag() + "] must start-paused! But is in killed state, must be reset()ed first in order to start-paused!"); reset(); // reset the component first if (notInState(ComponentState.RESETED)) throw new PogamutException(id(component) + "[" + getState().getFlag() + "] reset has failed, could not resolve the state change.", this); startPaused(); // start the component break; } if (log != null && log.isLoggable(Level.FINER)) log.finer(id(component) + "[" + getState().getFlag() + "] calling componentControlHelper.localStartPaused(" + agentId + ")"); |
File | Line |
---|---|
cz/cuni/amis/pogamut/base/utils/guice/AgentScope.java | 26 |
cz/cuni/amis/pogamut/base/utils/guice/AgentTeamScope.java | 17 |
public class AgentTeamScope implements IAgentScope { public static class SingletonProvider<T> implements Provider<T> { private Provider<T> creator; private T singleton = null; public SingletonProvider(Provider<T> creator) { this.creator = creator; } @Override public T get() { if (singleton != null) { return singleton; } singleton = creator.get(); return singleton; } public void clear() { singleton = null; } } @SuppressWarnings("unchecked") private Map<Key, Provider> providers = new HashMap<Key, Provider>(); @SuppressWarnings("unchecked") @Override public <T> Provider scope(Key<T> key, Provider<T> creator) { synchronized(providers) { Provider p = providers.get(key); if (p != null) { return p; } SingletonProvider<T> provider = new SingletonProvider<T>(creator); providers.put(key, provider); return provider; } } @SuppressWarnings("unchecked") public void clearScope() { synchronized(providers) { for (Provider provider : providers.values()) { ((SingletonProvider)provider).clear(); } } } } |
File | Line |
---|---|
cz/cuni/amis/pogamut/base/communication/worldview/impl/AbstractWorldView.java | 131 |
cz/cuni/amis/pogamut/multi/communication/worldview/impl/AbstractLocalWorldView.java | 137 |
private ListenerNotifier notifier = new ListenerNotifier(); /** * Level A Listeners * <p><p> * Map of the event listeners, key is the event class where the listener is hooked to. */ private ListenersMap<Class> eventListeners = new ListenersMap<Class>(); /** * Level B Listeners * <p><p> * Map of the object class to the object listeners. */ private ListenersMap<Class> objectsListeners = new ListenersMap<Class>(); /** * Level C listeners * <p><p> * Map of event listeners on some object class. * <p><p> * First key is eventClass, second key is objectClass. */ private Map<Class, ListenersMap<Class>> objectEventListeners = Collections.synchronizedMap( new LazyMap<Class, ListenersMap<Class>>(){ @Override protected ListenersMap<Class> create(Class key) { ListenersMap<Class> listeners = new ListenersMap<Class>(); listeners.setLog(log, "LevelC-" + key.getSimpleName()); return listeners; } } ); /** * Level D Listeners * <p><p> * Listeners listening on all events on a specific object. */ private ListenersMap<WorldObjectId> specificObjectListeners = new ListenersMap<WorldObjectId>(); /** * Level E Listeners * <p><p> * Listeners listening for some specific event on some specific object. * <p><p> * Map of (IWorldObjectId, class of IWorldEvent or desc.). */ private Map<WorldObjectId, ListenersMap<Class>> specificObjectEventListeners = Collections.synchronizedMap( new LazyMap<WorldObjectId, ListenersMap<Class>>() { @Override protected ListenersMap<Class> create(WorldObjectId key) { ListenersMap<Class> listeners = new ListenersMap<Class>(); listeners.setLog(log, "LevelE-" + key.getStringId()); return listeners; } } ); /** * Flag that is telling us whether there is an event being processed or not. * <p><p> * It is managed only by raiseEvent() method - DO NOT MODIFY OUTSIDE IT! */ private boolean raiseEventProcessing = false; /** * List of events we have to process. * <p><p> * It is managed only by raiseEvent() method - DO NOT MODIFY THIS OUTSIDE THAT METHOD! */ private Queue<IWorldEvent> raiseEventsList = new ConcurrentLinkedQueue<IWorldEvent>(); protected LogCategory log; protected ILifecycleBus eventBus; |
File | Line |
---|---|
cz/cuni/amis/pogamut/base/component/controller/SharedComponentController.java | 680 |
cz/cuni/amis/pogamut/base/component/controller/SharedComponentController.java | 718 |
if (log != null && log.isLoggable(Level.FINER)) log.finer(id(component) + "[" + getState().getFlag() + "] processing localResume(" + agentId + ")"); switch(getState().getFlag()) { case INSTANTIATED: case STOPPED: case RESETED: if (log != null && log.isLoggable(Level.FINER)) log.finer(id(component) + "[" + getState().getFlag() + "] must start!"); start(); break; case RUNNING: // nothing to do break; case PAUSED: if (log != null && log.isLoggable(Level.FINER)) log.finer(id(component) + "[" + getState().getFlag() + "] must resume!"); resume(); break; case STARTING: case STARTING_PAUSED: case PAUSING: case RESUMING: case STOPPING: case KILLING: case RESETTING: // can't happen ... throw new ComponentCantResumeException(id(component) + "[" + getState().getFlag() + "] STATE INVALID AT THIS POINT!", this); case KILLED: if (log != null && log.isLoggable(Level.FINER)) log.finer(id(component) + "[" + getState().getFlag() + "] must start! But is in killed state, must be reset()ed first in order to evaluate the state!"); |
File | Line |
---|---|
cz/cuni/amis/pogamut/base/agent/utils/runner/impl/AgentRunner.java | 550 |
cz/cuni/amis/pogamut/base/agent/utils/runner/impl/MultipleAgentRunner.java | 514 |
} } /** * Kills a single agent instance, called during clean up when start/pause/resume of the agent fails. * @param agent */ protected void killAgent(AGENT agent) { if (agent == null) return; synchronized(mutex) { if (main) { agent.getState().removeListener(listener); } if (!(agent.getState().getFlag() instanceof IAgentStateDown)) { if (log != null && log.isLoggable(Level.WARNING)) log.warning("Killing agent with id '" + agent.getComponentId().getToken() + "'"); try { agent.kill(); } catch (Exception e) { } } } } /** * Custom hook called before all the agents are going to be instantiated. */ protected void preInitHook() throws PogamutException { } /** * Custom hook called after the agent is instantiated and before * the {@link IAgent#start()} is called. * @param agent */ protected void preStartHook(AGENT agent) throws PogamutException { } /** * Custom hook called after the agent is instantiated and * started with {@link IAgent#start()}. * @param agent * @throws PogamutException */ protected void postStartHook(AGENT agent) throws PogamutException { } /** * Custom hook called only iff {@link MultipleAgentRunner#isPausing()}. * This method is called after all the agents have been instantiated by the {@link MultipleAgentRunner#factory} * and resumed with {@link IAgent#resume()}. * @param agents */ protected void preResumeHook(List<AGENT> agents) { } /** * Custom hook called after all the agents have been instantiated by the {@link MultipleAgentRunner#factory} * and started with {@link IAgent#start()}. * @param agents */ protected void postStartedHook(List<AGENT> agents) { } } |
File | Line |
---|---|
cz/cuni/amis/pogamut/base/component/controller/SharedComponentController.java | 758 |
cz/cuni/amis/pogamut/base/component/controller/SharedComponentController.java | 793 |
getComponentControl().localStop(agentId); switch(getState().getFlag()) { case INSTANTIATED: case STOPPED: case RESETED: // nothing to do break; case RUNNING: case PAUSED: if (getStateCount(ComponentState.STARTING, ComponentState.STARTING_PAUSED, ComponentState.RUNNING, ComponentState.PAUSING, ComponentState.PAUSED, ComponentState.RESUMING, ComponentState.STOPPING) == 0) { if (log != null && log.isLoggable(Level.FINER)) log.finer(id(component) + "[" + getState().getFlag() + "] there are no more running/paused/... local component states, must stop!"); // there is not a single agent that would need to utilize the component stop(); } break; case STARTING: case STARTING_PAUSED: case PAUSING: case RESUMING: case STOPPING: case KILLING: case RESETTING: // can't happen ... throw new ComponentCantStartException(id(component) + "[" + getState().getFlag() + "] STATE INVALID AT THIS POINT!", this); case KILLED: // nothing to do break; } } } protected void localKill(IAgentId agentId) { |
File | Line |
---|---|
cz/cuni/amis/pogamut/multi/communication/worldview/impl/AbstractLocalWorldView.java | 108 |
cz/cuni/amis/pogamut/multi/communication/worldview/impl/AbstractSharedWorldView.java | 294 |
private static class ListenerNotifier<T> implements Listeners.ListenerNotifier<IListener> { /** * Event that is being processed. */ private T event = null; @Override public T getEvent() { return event; } public void setEvent(T event) { this.event = event; } /** * Method that is used to notify the listener. */ @Override public void notify(IListener listener) { listener.notify(event); } } /** * Notifier object - preallocated, this will raise events on the listeners. */ private ListenerNotifier notifier = new ListenerNotifier(); /** * Level A Listeners * <p><p> * Map of the event listeners, key is the event class where the listener is hooked to. */ private ListenersMap<Class> eventListeners = new ListenersMap<Class>(); /** * Level B Listeners * <p><p> * Map of the object class to the object listeners. */ private ListenersMap<Class> objectsListeners = new ListenersMap<Class>(); /** * Level C listeners * <p><p> * Map of event listeners on some object class. * <p><p> * First key is eventClass, second key is objectClass. */ private Map<Class, ListenersMap<Class>> objectEventListeners = Collections.synchronizedMap( new LazyMap<Class, ListenersMap<Class>>(){ @Override protected ListenersMap<Class> create(Class key) { |
File | Line |
---|---|
cz/cuni/amis/pogamut/base3d/worldview/object/Location.java | 706 |
cz/cuni/amis/pogamut/base3d/worldview/object/Velocity.java | 589 |
public Velocity(double x, double y, double z) { this.x = x; this.y = y; this.z = z; } private int computeHashCode() { final int prime = 31; int result = 1; long temp; temp = Double.doubleToLongBits(x); result = prime * result + (int) (temp ^ (temp >>> 32)); temp = Double.doubleToLongBits(y); result = prime * result + (int) (temp ^ (temp >>> 32)); temp = Double.doubleToLongBits(z); result = prime * result + (int) (temp ^ (temp >>> 32)); return result; } /** * Creates velocity with specified planar coordinates. Sets z to zero. * * @param x * X coordinate. * @param y * Y coordinate. */ public Velocity(double x, double y) { |
File | Line |
---|---|
cz/cuni/amis/pogamut/base/component/controller/SharedComponentController.java | 614 |
cz/cuni/amis/pogamut/base/component/controller/SharedComponentController.java | 655 |
break; case PAUSED: // nothing to do break; case STARTING: case STARTING_PAUSED: case PAUSING: case RESUMING: case STOPPING: case KILLING: case RESETTING: // can't happen ... throw new ComponentCantPauseException(id(component) + "[" + getState().getFlag() + "] STATE INVALID AT THIS POINT!", this); case KILLED: if (log != null && log.isLoggable(Level.FINER)) log.finer(id(component) + "[" + getState().getFlag() + "] must start-paused! But is in killed state, must be reset()ed first in order to start-paused!"); reset(); // reset the component first if (notInState(ComponentState.RESETED)) throw new PogamutException(id(component) + "[" + getState().getFlag() + "] reset has failed, could not resolve the state change.", this); startPaused(); // start the component break; } } } protected void localPreResume(IAgentId agentId) { |
File | Line |
---|---|
cz/cuni/amis/pogamut/base/component/bus/ComponentBus.java | 655 |
cz/cuni/amis/pogamut/base/component/lifecyclebus/LifecycleBus.java | 685 |
} if (!queueProcessing) { // the method is not being called in the context of another event, redirect event(event); return; } // process event - we're in transactional mode == immediately propagate the event innerRaiseEvent(event); } /** * Must be synchronized beforehand! */ private void processQueue() throws FatalErrorPropagatingEventException, ComponentBusErrorException { // save the 'queueProcessing' state (whether we should drop the queue processing flag or not at the end of this method) boolean dropQueueProcessing = !queueProcessing; queueProcessing = true; IComponentEvent event = null; while(queue.size() != 0) { // yes we do -> do it! try { event = queue.poll(); } catch (Exception e) { ComponentBusErrorException e1 = new ComponentBusErrorException("Can't poll next event.", e, this); innerRaiseEvent_Safe( new ComponentBusErrorEvent(this, e) ); throw e1; } try { innerRaiseEvent(event); } catch (FatalErrorPropagatingEventException e1) { throw e1; } catch (ComponentBusErrorException e2) { throw e2; } catch (Exception e3) { innerRaiseEvent_Safe( new FatalErrorPropagatingEvent<LifecycleBus>(this, "Exception happened during the event propagation.", e3, event) |
File | Line |
---|---|
cz/cuni/amis/pogamut/base/component/bus/ComponentBus.java | 157 |
cz/cuni/amis/pogamut/base/component/lifecyclebus/LifecycleBus.java | 184 |
return "LifecycleBus[" + agentId.getToken() + ", running=" + running + ", queue length=" + (this.queue == null ? "null" : this.queue.size()) + "]"; } @Override public IComponentBus getEventBus() { return this; } @Override public IToken getComponentId() { return COMPONENT_ID; } public Logger getLog() { return log; } @Override public boolean isRunning() { return running; } @Override public synchronized void reset() throws ResetFailedException { if (log.isLoggable(Level.WARNING)) log.warning("reset() called."); try { if (running) { if (log.isLoggable(Level.WARNING)) log.warning(LifecycleBus.COMPONENT_ID.getToken() + " is still running, broadcasting fatal error to stop all components."); |
File | Line |
---|---|
cz/cuni/amis/pogamut/multi/communication/worldview/impl/AbstractLocalWorldView.java | 299 |
cz/cuni/amis/pogamut/multi/communication/worldview/impl/AbstractSharedWorldView.java | 490 |
sharedWorldObjects.clear(); } synchronized(raiseEventsList) { raiseEventsList.clear(); } } /** * Starts the world view. * <p><p> * If you override this method, do not forget to call super.start(). */ protected void start() { cleanUp(); } /** * Pre-pauses the world view. * <p><p> * If you override this method, do not forget to call super.preStop(). */ protected void prePause() { } /** * Pauses the world view. * <p><p> * If you override this method, do not forget to call super.start(). */ protected void pause() { } /** * Resumes the world view. * <p><p> * If you override this method, do not forget to call super.start(). */ protected void resume() { } /** * Pre-stops the world view. * <p><p> * If you override this method, do not forget to call super.preStop(). */ protected void preStop() { } /** * Stops the world view. * <p><p> * If you override this method, do not forget to call super.stop(). */ protected void stop() { cleanUp(); } /** * Kills the world view. * <p><p> * If you override this method, do not forget to call super.stop(). */ protected void kill() { cleanUp(); } /** * Resets the world view so it is start()able again. * <p><p> * If you override this method, do not forget to call super.reset(). */ protected void reset() { cleanUp(); } protected boolean isRunning() { return controller.isRunning(); } protected boolean isPaused() { return controller.isPaused(); } @Override public Token getComponentId() { return COMPONENT_ID; } |
File | Line |
---|---|
cz/cuni/amis/pogamut/base/component/controller/SharedComponentController.java | 478 |
cz/cuni/amis/pogamut/base/component/controller/SharedComponentController.java | 517 |
case KILLED: if (log != null && log.isLoggable(Level.FINER)) log.finer(id(component) + "[" + getState().getFlag() + "] must start! But is in killed state, must be reset()ed first in order to start!"); reset(); // first reset the component if (notInState(ComponentState.RESETED)) throw new PogamutException(id(component) + "[" + getState().getFlag() + "] reset has failed, could not resolve the state change.", this); start(); // start it break; } if (log != null && log.isLoggable(Level.FINER)) log.finer(id(component) + "[" + getState().getFlag() + "] calling componentControlHelper.localStart(" + agentId + ")"); |
File | Line |
---|---|
cz/cuni/amis/pogamut/base/component/lifecyclebus/LifecycleBus.java | 448 |
cz/cuni/amis/pogamut/base/component/lifecyclebus/LifecycleBus.java | 516 |
private void notifyListenersB_Safe(IComponentEvent event) { Collection<Class> componentClasses = ClassUtils.getSubclasses(event.getSource().getClass()); Collection<Class> eventClasses = ClassUtils.getSubclasses(event.getClass()); for (Class componentClass : componentClasses) { if (!componentEventListeners.containsKey(componentClass)) continue; Map<Class, Set<IComponentEventListener>> listeners = componentEventListeners.get(componentClass); for (Class eventClass : eventClasses) { if (!listeners.containsKey(eventClass)) continue; for (IComponentEventListener listener : listeners.get(eventClass)) { |
File | Line |
---|---|
cz/cuni/amis/pogamut/base/component/controller/SharedComponentController.java | 454 |
cz/cuni/amis/pogamut/base/component/controller/SharedComponentController.java | 492 |
if (log != null && log.isLoggable(Level.FINER)) log.finer(id(component) + "[" + getState().getFlag() + "] processing localStart(" + agentId + ")"); switch(getState().getFlag()) { case INSTANTIATED: case STOPPED: case RESETED: if (log != null && log.isLoggable(Level.FINER)) log.finer(id(component) + "[" + getState().getFlag() + "] must start!"); start(); break; case PAUSED: if (log != null && log.isLoggable(Level.FINER)) log.finer(id(component) + "[" + getState().getFlag() + "] must resume!"); resume(); break; case RUNNING: |
File | Line |
---|---|
cz/cuni/amis/pogamut/base/component/bus/ComponentBus.java | 421 |
cz/cuni/amis/pogamut/base/component/bus/ComponentBus.java | 489 |
private void notifyListenersB_Safe(IComponentEvent event) { Collection<Class> componentClasses = ClassUtils.getSubclasses(event.getSource().getClass()); Collection<Class> eventClasses = ClassUtils.getSubclasses(event.getClass()); for (Class componentClass : componentClasses) { if (!componentEventListeners.containsKey(componentClass)) continue; Map<Class, Set<IComponentEventListener>> listeners = componentEventListeners.get(componentClass); for (Class eventClass : eventClasses) { if (!listeners.containsKey(eventClass)) continue; for (IComponentEventListener listener : listeners.get(eventClass)) { |
File | Line |
---|---|
cz/cuni/amis/pogamut/base3d/worldview/object/Location.java | 51 |
cz/cuni/amis/pogamut/base3d/worldview/object/Velocity.java | 32 |
PropertyEditorManager.registerEditor(Velocity.class, Velocity.PropertyEditor.class); } /** * Property editor for Velocity. Accepts same format as Location. */ public static class PropertyEditor extends PropertyEditorSupport { @Override public String getAsText() { if (getValue() != null) { return getValue().toString(); } else { return "null"; } } @Override public void setAsText(String s) { if ("null".equals(s.trim())) { setValue(null); } else { double[] d = Location.PropertyEditor.parseNumberArray(s); if (d.length != 3) { throw new IllegalArgumentException(); } setValue(new Velocity(d)); |
File | Line |
---|---|
cz/cuni/amis/pogamut/base/utils/jmx/PogamutMBeanServer.java | 86 |
cz/cuni/amis/pogamut/base/utils/jmx/PogamutMBeanServer.java | 139 |
Listener2 l = (Listener2)o; return SafeEquals.equals(name, l.name) && SafeEquals.equals(listener, l.listener) && SafeEquals.equals(filter, l.filter) && SafeEquals.equals(handback, l.handback); } @Override public void unregister() { try { innerRemoveNotificationListener(name, listener, filter, handback); } catch (Exception e) { } } public void register() throws InstanceNotFoundException { innerAddNotificationListener(name, listener, filter, handback); } @Override public String toString() { return "Listener2[name=" + name + ", listener=" + listener + "]"; |
File | Line |
---|---|
cz/cuni/amis/pogamut/base/utils/jmx/PogamutMBeanServer.java | 65 |
cz/cuni/amis/pogamut/base/utils/jmx/PogamutMBeanServer.java | 118 |
public Listener2(ObjectName name, NotificationListener listener, NotificationFilter filter, Object handback) { this.name = name; this.listener = listener; this.filter = filter; this.handback = handback; HashCode hc = new HashCode(); hc.add(name); hc.add(listener); hc.add(filter); hc.add(handback); this.hashCode = hc.getHash(); } @Override public int hashCode() { return hashCode; } public boolean equals(Object o) { if (o == null) return false; if (!(o instanceof Listener2)) return false; |
File | Line |
---|---|
cz/cuni/amis/pogamut/base/component/bus/ComponentBus.java | 607 |
cz/cuni/amis/pogamut/base/component/lifecyclebus/LifecycleBus.java | 640 |
} // is this method recursively called? if (queueProcessing) { // yes it is -> that means the previous event has not been // processed! ... store this event and allows the previous one // to be fully processed (e.g. postpone raising this event) queue.add(event); return false; } // check the queue consistency if (queue.size() > 0) { ComponentBusErrorException e = new ComponentBusErrorException("Previous events has not been fully processed! ComponenBus fatal error.", event, this); innerRaiseEvent_Safe( new ComponentBusErrorEvent(this, e) ); throw e; } // add the event to the queue queue.add(event); // start processing the event processQueue(); // event has been processed return true; } @Override public synchronized void eventTransactional(IComponentEvent event) throws ComponentBusNotRunningException, ComponentBusErrorException, FatalErrorPropagatingEventException { // method is synchronized - only one thread inside at given time NullCheck.check(event, "event"); if (event instanceof IResetEvent) throw new IllegalArgumentException("you can't broadcast reset event this way, use reset() instead"); if (!isRunning()) { |
File | Line |
---|---|
cz/cuni/amis/pogamut/base/communication/worldview/impl/AbstractWorldView.java | 302 |
cz/cuni/amis/pogamut/multi/communication/worldview/impl/AbstractLocalWorldView.java | 311 |
protected void start() { cleanUp(); } /** * Pre-pauses the world view. * <p><p> * If you override this method, do not forget to call super.preStop(). */ protected void prePause() { } /** * Pauses the world view. * <p><p> * If you override this method, do not forget to call super.start(). */ protected void pause() { } /** * Resumes the world view. * <p><p> * If you override this method, do not forget to call super.start(). */ protected void resume() { } /** * Pre-stops the world view. * <p><p> * If you override this method, do not forget to call super.preStop(). */ protected void preStop() { } /** * Stops the world view. * <p><p> * If you override this method, do not forget to call super.stop(). */ protected void stop() { cleanUp(); } /** * Kills the world view. * <p><p> * If you override this method, do not forget to call super.stop(). */ protected void kill() { cleanUp(); } /** * Resets the world view so it is start()able again. * <p><p> * If you override this method, do not forget to call super.reset(). */ protected void reset() { cleanUp(); } protected boolean isRunning() { return controller.isRunning(); } protected boolean isPaused() { return controller.isPaused(); } @Override public Token getComponentId() { return COMPONENT_ID; } |
File | Line |
---|---|
cz/cuni/amis/pogamut/base/component/controller/SharedComponentController.java | 1028 |
cz/cuni/amis/pogamut/base/component/controller/SharedComponentController.java | 1133 |
if (log != null && log.isLoggable(Level.FINER)) log.finer(id(component) + "[" + getState().getFlag() + "] number of running/paused of local component states is 0, must stop!"); // nobody is actively using the component nor is paused stop(); } } } // else, there are still somebody who wants to use the component, keep it running! break; case PAUSED: if (getStateCount(ComponentState.STARTING, ComponentState.RUNNING, ComponentState.RESUMING) == 0) { // there is nobody that wants to activelly use the agent if (getStateCount(ComponentState.STARTING_PAUSED, ComponentState.PAUSING, ComponentState.PAUSED) > 0) { // nothing to do! } else { if (getStateCount(ComponentState.STOPPING) == 0) { if (log != null && log.isLoggable(Level.FINER)) log.finer(id(component) + "[" + getState().getFlag() + "] number of running/paused of local component states is 0, must stop!"); |