From 966a02b45a734d025f0d19564d51b032e93483ba Mon Sep 17 00:00:00 2001
From: srosse <none@none>
Date: Mon, 21 Mar 2016 13:42:09 +0100
Subject: [PATCH] OO-1946: fire event per type, use the official method to
 check if we are on the "cluster" node which send the event

---
 .../core/util/event/AbstractEventBus.java     | 69 ++++++++++---------
 .../course/assessment/AssessmentModule.java   |  5 +-
 .../scorm/_i18n/LocalStrings_fr.properties    |  2 +-
 3 files changed, 41 insertions(+), 35 deletions(-)

diff --git a/src/main/java/org/olat/core/util/event/AbstractEventBus.java b/src/main/java/org/olat/core/util/event/AbstractEventBus.java
index 9d92297a63e..7bcf58d191e 100644
--- a/src/main/java/org/olat/core/util/event/AbstractEventBus.java
+++ b/src/main/java/org/olat/core/util/event/AbstractEventBus.java
@@ -122,51 +122,58 @@ public abstract class AbstractEventBus implements EventBus {
 		final Long oresId = ores.getResourceableId();
 		final String typeName = ores.getResourceableTypeName();
 
-		GenericEventListener[] liArr = null;
+		GenericEventListener[] listenersArr = null;
+		GenericEventListener[] listenersTypeArr = null;
 		synchronized (infocenter) {  
-			if (oresId == null) {
-				EventAgency ea = typeInfocenter.get(typeName);
-				if (ea != null) { // we are the first listener -> create an agency
-					liArr = ea.getListeners();
-				}
-			} else {
+			if (oresId != null) {
 				String oresStr = typeName + "::" + oresId;
 				EventAgency ea = infocenter.get(oresStr);
 				if (ea != null) {
-					liArr = ea.getListeners();
+					listenersArr = ea.getListeners();
 				}
 			}
+			EventAgency ea = typeInfocenter.get(typeName);
+			if (ea != null) {
+				listenersTypeArr = ea.getListeners();
+			}
 		}
+
+		doFire(event, listenersArr);
+		doFire(event, listenersTypeArr);
+	}
+	
+	private final void doFire(final MultiUserEvent event, final GenericEventListener[] liArr) {
+		if(liArr == null) return;
 		
-		if(liArr != null) {
-			for (int i = 0; i < liArr.length; i++) {
-				try {
-					final GenericEventListener listener = liArr[i];
-					
-					//make sure GenericEvents are only sent when controller is not yet disposed
-					if (listener instanceof Controller) {
-						Controller dCtrl = (Controller)listener;
-						if (!dCtrl.isDisposed()) {
-							ThreadLocalUserActivityLoggerInstaller.runWithUserActivityLogger(new Runnable() {
-								public void run() {
-									listener.event(event);
-								}
-							}, UserActivityLoggerImpl.newLoggerForEventBus(dCtrl));
-						}
-					} else if(listener != null) {
-						if(log.isDebug()){
-							log.debug("fireEvent: Non-Controller: "+listener);
-						}
-						//is there a need to differ the events sent on one VM and in cluster mode?
+		for (int i = 0; i < liArr.length; i++) {
+			try {
+				final GenericEventListener listener = liArr[i];
+				
+				//make sure GenericEvents are only sent when controller is not yet disposed
+				if (listener instanceof Controller) {
+					Controller dCtrl = (Controller)listener;
+					if (!dCtrl.isDisposed()) {
 						ThreadLocalUserActivityLoggerInstaller.runWithUserActivityLogger(new Runnable() {
+							@Override
 							public void run() {
 								listener.event(event);
 							}
-						}, ThreadLocalUserActivityLoggerInstaller.createEmptyUserActivityLogger());
+						}, UserActivityLoggerImpl.newLoggerForEventBus(dCtrl));
+					}
+				} else if(listener != null) {
+					if(log.isDebug()){
+						log.debug("fireEvent: Non-Controller: "+listener);
 					}
-				} catch (RuntimeException e) {
-					log.error("Error while sending generic event: "+liArr[i], e);
+					//is there a need to differ the events sent on one VM and in cluster mode?
+					ThreadLocalUserActivityLoggerInstaller.runWithUserActivityLogger(new Runnable() {
+						@Override
+						public void run() {
+							listener.event(event);
+						}
+					}, ThreadLocalUserActivityLoggerInstaller.createEmptyUserActivityLogger());
 				}
+			} catch (RuntimeException e) {
+				log.error("Error while sending generic event: "+liArr[i], e);
 			}
 		}
 	}
diff --git a/src/main/java/org/olat/course/assessment/AssessmentModule.java b/src/main/java/org/olat/course/assessment/AssessmentModule.java
index c6a0cb84ced..2554cc640b5 100644
--- a/src/main/java/org/olat/course/assessment/AssessmentModule.java
+++ b/src/main/java/org/olat/course/assessment/AssessmentModule.java
@@ -130,12 +130,11 @@ public class AssessmentModule extends AbstractSpringModule implements GenericEve
 	public void event(Event event) {
 		if (event instanceof PublishEvent) {
 			PublishEvent pe = (PublishEvent) event;
-			//FIXME: LD: temporary introduced the (pe.getCommand() == PublishEvent.EVENT_IDENTIFIER) to filter the events from the same VM
-			if (pe.getState() == PublishEvent.PRE_PUBLISH && pe.getEventIdentifier() == PublishEvent.EVENT_IDENTIFIER) {
+			if (pe.getState() == PublishEvent.PRE_PUBLISH && pe.isEventOnThisNode()) {
 				// PRE PUBLISH -> check node for changes
 				addToUpcomingWork(pe);
 				return;
-			} else if (pe.getState() == PublishEvent.PUBLISH && pe.getEventIdentifier() == PublishEvent.EVENT_IDENTIFIER) {
+			} else if (pe.getState() == PublishEvent.PUBLISH && pe.isEventOnThisNode()) {
 				// a publish event, check if it matches a previous checked
 				prepareUpdate(pe.getPublishedCourseResId());
 			}
diff --git a/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_fr.properties b/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_fr.properties
index ed612baa992..d4d6f38d67a 100644
--- a/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_fr.properties
+++ b/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_fr.properties
@@ -38,7 +38,7 @@ pane.tab.delivery=$org.olat.core.gui.control.generic.iframe\:option.delivery
 passed.no=Pas r\u00E9ussi
 passed.yes=R\u00E9ussi
 passed.yourpassed=Statut
-score.noscoreinfoyet=Il n'y a pas d'indications de poinst pour cet objet SCORM, car vous ne l'avez encore jamais effectu\u00E9.
+score.noscoreinfoyet=Il n'y a pas d'indications de points pour cet objet SCORM, car vous ne l'avez encore jamais effectu\u00E9.
 score.title=Points
 score.yourscore=Nombre de points obtenus
 showmenu.label=Afficher le menu
-- 
GitLab