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:
David Pursehouse
2016-06-22 18:30:42 +09:00
committed by Hugo Arès
parent 38f96373e0
commit 0b0d627d98
4 changed files with 33 additions and 30 deletions

View File

@@ -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) {

View File

@@ -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;
}

View File

@@ -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);
}