EventDispatcher: Remove db parameter from event firing methods
The EventBroker now gets the db injected via a provider. Change-Id: I7a4c8757f522e79a658384bdacf3104a916cfa21
This commit is contained in:
committed by
Hugo Arès
parent
38f96373e0
commit
0b0d627d98
@@ -33,6 +33,7 @@ import com.google.gerrit.server.project.ProjectControl;
|
||||
import com.google.gerrit.server.project.ProjectState;
|
||||
import com.google.gwtorm.server.OrmException;
|
||||
import com.google.inject.Inject;
|
||||
import com.google.inject.Provider;
|
||||
import com.google.inject.Singleton;
|
||||
|
||||
/** Distributes Events to listeners if they are allowed to see them */
|
||||
@@ -60,21 +61,25 @@ public class EventBroker implements EventDispatcher {
|
||||
|
||||
protected final ChangeNotes.Factory notesFactory;
|
||||
|
||||
protected final Provider<ReviewDb> dbProvider;
|
||||
|
||||
@Inject
|
||||
public EventBroker(DynamicSet<UserScopedEventListener> listeners,
|
||||
DynamicSet<EventListener> unrestrictedListeners,
|
||||
ProjectCache projectCache,
|
||||
ChangeNotes.Factory notesFactory) {
|
||||
ChangeNotes.Factory notesFactory,
|
||||
Provider<ReviewDb> dbProvider) {
|
||||
this.listeners = listeners;
|
||||
this.unrestrictedListeners = unrestrictedListeners;
|
||||
this.projectCache = projectCache;
|
||||
this.notesFactory = notesFactory;
|
||||
this.dbProvider = dbProvider;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void postEvent(Change change, ChangeEvent event, ReviewDb db)
|
||||
public void postEvent(Change change, ChangeEvent event)
|
||||
throws OrmException {
|
||||
fireEvent(change, event, db);
|
||||
fireEvent(change, event);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -88,8 +93,8 @@ public class EventBroker implements EventDispatcher {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void postEvent(Event event, ReviewDb db) throws OrmException {
|
||||
fireEvent(event, db);
|
||||
public void postEvent(Event event) throws OrmException {
|
||||
fireEvent(event);
|
||||
}
|
||||
|
||||
protected void fireEventForUnrestrictedListeners(Event event) {
|
||||
@@ -98,10 +103,10 @@ public class EventBroker implements EventDispatcher {
|
||||
}
|
||||
}
|
||||
|
||||
protected void fireEvent(Change change, ChangeEvent event, ReviewDb db)
|
||||
protected void fireEvent(Change change, ChangeEvent event)
|
||||
throws OrmException {
|
||||
for (UserScopedEventListener listener : listeners) {
|
||||
if (isVisibleTo(change, listener.getUser(), db)) {
|
||||
if (isVisibleTo(change, listener.getUser())) {
|
||||
listener.onEvent(event);
|
||||
}
|
||||
}
|
||||
@@ -126,9 +131,9 @@ public class EventBroker implements EventDispatcher {
|
||||
fireEventForUnrestrictedListeners(event);
|
||||
}
|
||||
|
||||
protected void fireEvent(Event event, ReviewDb db) throws OrmException {
|
||||
protected void fireEvent(Event event) throws OrmException {
|
||||
for (UserScopedEventListener listener : listeners) {
|
||||
if (isVisibleTo(event, listener.getUser(), db)) {
|
||||
if (isVisibleTo(event, listener.getUser())) {
|
||||
listener.onEvent(event);
|
||||
}
|
||||
}
|
||||
@@ -143,7 +148,7 @@ public class EventBroker implements EventDispatcher {
|
||||
return pe.controlFor(user).isVisible();
|
||||
}
|
||||
|
||||
protected boolean isVisibleTo(Change change, CurrentUser user, ReviewDb db)
|
||||
protected boolean isVisibleTo(Change change, CurrentUser user)
|
||||
throws OrmException {
|
||||
if (change == null) {
|
||||
return false;
|
||||
@@ -153,6 +158,7 @@ public class EventBroker implements EventDispatcher {
|
||||
return false;
|
||||
}
|
||||
ProjectControl pc = pe.controlFor(user);
|
||||
ReviewDb db = dbProvider.get();
|
||||
return pc.controlFor(db, change).isVisible(db);
|
||||
}
|
||||
|
||||
@@ -165,16 +171,16 @@ public class EventBroker implements EventDispatcher {
|
||||
return pc.controlForRef(branchName).isVisible();
|
||||
}
|
||||
|
||||
protected boolean isVisibleTo(Event event, CurrentUser user, ReviewDb db)
|
||||
protected boolean isVisibleTo(Event event, CurrentUser user)
|
||||
throws OrmException {
|
||||
if (event instanceof RefEvent) {
|
||||
RefEvent refEvent = (RefEvent) event;
|
||||
String ref = refEvent.getRefName();
|
||||
if (PatchSet.isChangeRef(ref)) {
|
||||
Change.Id cid = PatchSet.Id.fromRef(ref).getParentKey();
|
||||
Change change = notesFactory
|
||||
.create(db, refEvent.getProjectNameKey(), cid).getChange();
|
||||
return isVisibleTo(change, user, db);
|
||||
Change change = notesFactory.create(
|
||||
dbProvider.get(), refEvent.getProjectNameKey(), cid).getChange();
|
||||
return isVisibleTo(change, user);
|
||||
}
|
||||
return isVisibleTo(refEvent.getBranchNameKey(), user);
|
||||
} else if (event instanceof ProjectEvent) {
|
||||
|
||||
@@ -17,7 +17,6 @@ package com.google.gerrit.common;
|
||||
import com.google.gerrit.reviewdb.client.Branch;
|
||||
import com.google.gerrit.reviewdb.client.Change;
|
||||
import com.google.gerrit.reviewdb.client.Project;
|
||||
import com.google.gerrit.reviewdb.server.ReviewDb;
|
||||
import com.google.gerrit.server.events.ChangeEvent;
|
||||
import com.google.gerrit.server.events.Event;
|
||||
import com.google.gerrit.server.events.ProjectEvent;
|
||||
@@ -32,10 +31,9 @@ public interface EventDispatcher {
|
||||
*
|
||||
* @param change The change that the event is related to
|
||||
* @param event The event to post
|
||||
* @param db The database
|
||||
* @throws OrmException
|
||||
*/
|
||||
void postEvent(Change change, ChangeEvent event, ReviewDb db)
|
||||
void postEvent(Change change, ChangeEvent event)
|
||||
throws OrmException;
|
||||
|
||||
/**
|
||||
@@ -62,7 +60,6 @@ public interface EventDispatcher {
|
||||
* for those use cases.
|
||||
*
|
||||
* @param event The event to post.
|
||||
* @param db The database.
|
||||
*/
|
||||
void postEvent(Event event, ReviewDb db) throws OrmException;
|
||||
void postEvent(Event event) throws OrmException;
|
||||
}
|
||||
|
||||
@@ -287,7 +287,7 @@ public class StreamEventsApiListener implements
|
||||
event.changer = accountAttributeSupplier(ev.getEditor());
|
||||
event.oldTopic = ev.getOldTopic();
|
||||
|
||||
dispatcher.get().postEvent(change, event, db.get());
|
||||
dispatcher.get().postEvent(change, event);
|
||||
} catch (OrmException e) {
|
||||
log.error("Failed to dispatch event", e);
|
||||
}
|
||||
@@ -305,7 +305,7 @@ public class StreamEventsApiListener implements
|
||||
event.patchSet = patchSetAttributeSupplier(change, patchSet);
|
||||
event.uploader = accountAttributeSupplier(ev.getUploader());
|
||||
|
||||
dispatcher.get().postEvent(change, event, db.get());
|
||||
dispatcher.get().postEvent(change, event);
|
||||
} catch (OrmException e) {
|
||||
log.error("Failed to dispatch event", e);
|
||||
}
|
||||
@@ -325,7 +325,7 @@ public class StreamEventsApiListener implements
|
||||
event.approvals = approvalsAttributeSupplier(change,
|
||||
ev.getNewApprovals(), ev.getOldApprovals());
|
||||
|
||||
dispatcher.get().postEvent(change, event, db.get());
|
||||
dispatcher.get().postEvent(change, event);
|
||||
} catch (OrmException e) {
|
||||
log.error("Failed to dispatch event", e);
|
||||
}
|
||||
@@ -344,7 +344,7 @@ public class StreamEventsApiListener implements
|
||||
psUtil.current(db.get(), notes));
|
||||
event.reviewer = accountAttributeSupplier(ev.getReviewer());
|
||||
|
||||
dispatcher.get().postEvent(change, event, db.get());
|
||||
dispatcher.get().postEvent(change, event);
|
||||
} catch (OrmException e) {
|
||||
log.error("Failed to dispatch event", e);
|
||||
}
|
||||
@@ -371,7 +371,7 @@ public class StreamEventsApiListener implements
|
||||
event.added = hashtagArray(ev.getAddedHashtags());
|
||||
event.removed = hashtagArray(ev.getRemovedHashtags());
|
||||
|
||||
dispatcher.get().postEvent(change, event, db.get());
|
||||
dispatcher.get().postEvent(change, event);
|
||||
} catch (OrmException e) {
|
||||
log.error("Failed to dispatch event", e);
|
||||
}
|
||||
@@ -410,7 +410,7 @@ public class StreamEventsApiListener implements
|
||||
event.patchSet = patchSetAttributeSupplier(change, ps);
|
||||
event.uploader = accountAttributeSupplier(ev.getPublisher());
|
||||
|
||||
dispatcher.get().postEvent(change, event, db.get());
|
||||
dispatcher.get().postEvent(change, event);
|
||||
} catch (OrmException e) {
|
||||
log.error("Failed to dispatch event", e);
|
||||
}
|
||||
@@ -431,7 +431,7 @@ public class StreamEventsApiListener implements
|
||||
event.approvals = approvalsAttributeSupplier(
|
||||
change, ev.getApprovals(), ev.getOldApprovals());
|
||||
|
||||
dispatcher.get().postEvent(change, event, db.get());
|
||||
dispatcher.get().postEvent(change, event);
|
||||
} catch (OrmException e) {
|
||||
log.error("Failed to dispatch event", e);
|
||||
}
|
||||
@@ -450,7 +450,7 @@ public class StreamEventsApiListener implements
|
||||
psUtil.current(db.get(), notes));
|
||||
event.reason = ev.getReason();
|
||||
|
||||
dispatcher.get().postEvent(change, event, db.get());
|
||||
dispatcher.get().postEvent(change, event);
|
||||
} catch (OrmException e) {
|
||||
log.error("Failed to dispatch event", e);
|
||||
}
|
||||
@@ -469,7 +469,7 @@ public class StreamEventsApiListener implements
|
||||
psUtil.current(db.get(), notes));
|
||||
event.newRev = ev.getNewRevisionId();
|
||||
|
||||
dispatcher.get().postEvent(change, event, db.get());
|
||||
dispatcher.get().postEvent(change, event);
|
||||
} catch (OrmException e) {
|
||||
log.error("Failed to dispatch event", e);
|
||||
}
|
||||
@@ -488,7 +488,7 @@ public class StreamEventsApiListener implements
|
||||
psUtil.current(db.get(), notes));
|
||||
event.reason = ev.getReason();
|
||||
|
||||
dispatcher.get().postEvent(change, event, db.get());
|
||||
dispatcher.get().postEvent(change, event);
|
||||
} catch (OrmException e) {
|
||||
log.error("Failed to dispatch event", e);
|
||||
}
|
||||
|
||||
Submodule plugins/replication updated: a0cf9a2919...b9c11b4d4e
Reference in New Issue
Block a user