Merge "Add hashtags to events and query results"

This commit is contained in:
David Pursehouse
2018-07-23 07:58:43 +00:00
committed by Gerrit Code Review
5 changed files with 49 additions and 23 deletions

View File

@@ -29,6 +29,8 @@ url:: Canonical URL to reach this change.
commitMessage:: The full commit message for the change's current patch commitMessage:: The full commit message for the change's current patch
set. set.
hashtags:: List of hashtags associated with this change.
createdOn:: Time in seconds since the UNIX epoch when this change createdOn:: Time in seconds since the UNIX epoch when this change
was created. was created.

View File

@@ -30,6 +30,7 @@ public class ChangeAttribute {
public AccountAttribute assignee; public AccountAttribute assignee;
public String url; public String url;
public String commitMessage; public String commitMessage;
public List<String> hashtags;
public Long createdOn; public Long createdOn;
public Long lastUpdated; public Long lastUpdated;

View File

@@ -130,9 +130,9 @@ public class EventFactory {
* @param change * @param change
* @return object suitable for serialization to JSON * @return object suitable for serialization to JSON
*/ */
public ChangeAttribute asChangeAttribute(Change change) { public ChangeAttribute asChangeAttribute(Change change, ChangeNotes notes) {
try (ReviewDb db = schema.open()) { try (ReviewDb db = schema.open()) {
return asChangeAttribute(db, change); return asChangeAttribute(db, change, notes);
} catch (OrmException e) { } catch (OrmException e) {
logger.atSevere().withCause(e).log("Cannot open database connection"); logger.atSevere().withCause(e).log("Cannot open database connection");
return new ChangeAttribute(); return new ChangeAttribute();
@@ -170,6 +170,24 @@ public class EventFactory {
return a; return a;
} }
/**
* Create a ChangeAttribute for the given change suitable for serialization to JSON.
*
* @param db Review database
* @param change
* @param notes
* @return object suitable for serialization to JSON
*/
public ChangeAttribute asChangeAttribute(ReviewDb db, Change change, ChangeNotes notes)
throws OrmException {
ChangeAttribute a = asChangeAttribute(db, change);
Set<String> hashtags = notes.load().getHashtags();
if (!hashtags.isEmpty()) {
a.hashtags = new ArrayList<String>(hashtags.size());
a.hashtags.addAll(hashtags);
}
return a;
}
/** /**
* Create a RefUpdateAttribute for the given old ObjectId, new ObjectId, and branch that is * Create a RefUpdateAttribute for the given old ObjectId, new ObjectId, and branch that is
* suitable for serialization to JSON. * suitable for serialization to JSON.

View File

@@ -156,12 +156,12 @@ public class StreamEventsApiListener
return psUtil.get(db.get(), notes, PatchSet.Id.fromRef(info.ref)); return psUtil.get(db.get(), notes, PatchSet.Id.fromRef(info.ref));
} }
private Supplier<ChangeAttribute> changeAttributeSupplier(Change change) { private Supplier<ChangeAttribute> changeAttributeSupplier(Change change, ChangeNotes notes) {
return Suppliers.memoize( return Suppliers.memoize(
new Supplier<ChangeAttribute>() { new Supplier<ChangeAttribute>() {
@Override @Override
public ChangeAttribute get() { public ChangeAttribute get() {
return eventFactory.asChangeAttribute(change); return eventFactory.asChangeAttribute(change, notes);
} }
}); });
} }
@@ -257,10 +257,11 @@ public class StreamEventsApiListener
@Override @Override
public void onAssigneeChanged(AssigneeChangedListener.Event ev) { public void onAssigneeChanged(AssigneeChangedListener.Event ev) {
try { try {
Change change = getChange(ev.getChange()); ChangeNotes notes = getNotes(ev.getChange());
Change change = notes.getChange();
AssigneeChangedEvent event = new AssigneeChangedEvent(change); AssigneeChangedEvent event = new AssigneeChangedEvent(change);
event.change = changeAttributeSupplier(change); event.change = changeAttributeSupplier(change, notes);
event.changer = accountAttributeSupplier(ev.getWho()); event.changer = accountAttributeSupplier(ev.getWho());
event.oldAssignee = accountAttributeSupplier(ev.getOldAssignee()); event.oldAssignee = accountAttributeSupplier(ev.getOldAssignee());
@@ -273,10 +274,11 @@ public class StreamEventsApiListener
@Override @Override
public void onTopicEdited(TopicEditedListener.Event ev) { public void onTopicEdited(TopicEditedListener.Event ev) {
try { try {
Change change = getChange(ev.getChange()); ChangeNotes notes = getNotes(ev.getChange());
Change change = notes.getChange();
TopicChangedEvent event = new TopicChangedEvent(change); TopicChangedEvent event = new TopicChangedEvent(change);
event.change = changeAttributeSupplier(change); event.change = changeAttributeSupplier(change, notes);
event.changer = accountAttributeSupplier(ev.getWho()); event.changer = accountAttributeSupplier(ev.getWho());
event.oldTopic = ev.getOldTopic(); event.oldTopic = ev.getOldTopic();
@@ -294,7 +296,7 @@ public class StreamEventsApiListener
PatchSet patchSet = getPatchSet(notes, ev.getRevision()); PatchSet patchSet = getPatchSet(notes, ev.getRevision());
PatchSetCreatedEvent event = new PatchSetCreatedEvent(change); PatchSetCreatedEvent event = new PatchSetCreatedEvent(change);
event.change = changeAttributeSupplier(change); event.change = changeAttributeSupplier(change, notes);
event.patchSet = patchSetAttributeSupplier(change, patchSet); event.patchSet = patchSetAttributeSupplier(change, patchSet);
event.uploader = accountAttributeSupplier(ev.getWho()); event.uploader = accountAttributeSupplier(ev.getWho());
@@ -310,7 +312,7 @@ public class StreamEventsApiListener
ChangeNotes notes = getNotes(ev.getChange()); ChangeNotes notes = getNotes(ev.getChange());
Change change = notes.getChange(); Change change = notes.getChange();
ReviewerDeletedEvent event = new ReviewerDeletedEvent(change); ReviewerDeletedEvent event = new ReviewerDeletedEvent(change);
event.change = changeAttributeSupplier(change); event.change = changeAttributeSupplier(change, notes);
event.patchSet = patchSetAttributeSupplier(change, psUtil.current(db.get(), notes)); event.patchSet = patchSetAttributeSupplier(change, psUtil.current(db.get(), notes));
event.reviewer = accountAttributeSupplier(ev.getReviewer()); event.reviewer = accountAttributeSupplier(ev.getReviewer());
event.remover = accountAttributeSupplier(ev.getWho()); event.remover = accountAttributeSupplier(ev.getWho());
@@ -331,7 +333,7 @@ public class StreamEventsApiListener
Change change = notes.getChange(); Change change = notes.getChange();
ReviewerAddedEvent event = new ReviewerAddedEvent(change); ReviewerAddedEvent event = new ReviewerAddedEvent(change);
event.change = changeAttributeSupplier(change); event.change = changeAttributeSupplier(change, notes);
event.patchSet = patchSetAttributeSupplier(change, psUtil.current(db.get(), notes)); event.patchSet = patchSetAttributeSupplier(change, psUtil.current(db.get(), notes));
for (AccountInfo reviewer : ev.getReviewers()) { for (AccountInfo reviewer : ev.getReviewers()) {
event.reviewer = accountAttributeSupplier(reviewer); event.reviewer = accountAttributeSupplier(reviewer);
@@ -354,10 +356,11 @@ public class StreamEventsApiListener
@Override @Override
public void onHashtagsEdited(HashtagsEditedListener.Event ev) { public void onHashtagsEdited(HashtagsEditedListener.Event ev) {
try { try {
Change change = getChange(ev.getChange()); ChangeNotes notes = getNotes(ev.getChange());
Change change = notes.getChange();
HashtagsChangedEvent event = new HashtagsChangedEvent(change); HashtagsChangedEvent event = new HashtagsChangedEvent(change);
event.change = changeAttributeSupplier(change); event.change = changeAttributeSupplier(change, notes);
event.editor = accountAttributeSupplier(ev.getWho()); event.editor = accountAttributeSupplier(ev.getWho());
event.hashtags = hashtagArray(ev.getHashtags()); event.hashtags = hashtagArray(ev.getHashtags());
event.added = hashtagArray(ev.getAddedHashtags()); event.added = hashtagArray(ev.getAddedHashtags());
@@ -402,7 +405,7 @@ public class StreamEventsApiListener
PatchSet ps = getPatchSet(notes, ev.getRevision()); PatchSet ps = getPatchSet(notes, ev.getRevision());
CommentAddedEvent event = new CommentAddedEvent(change); CommentAddedEvent event = new CommentAddedEvent(change);
event.change = changeAttributeSupplier(change); event.change = changeAttributeSupplier(change, notes);
event.author = accountAttributeSupplier(ev.getWho()); event.author = accountAttributeSupplier(ev.getWho());
event.patchSet = patchSetAttributeSupplier(change, ps); event.patchSet = patchSetAttributeSupplier(change, ps);
event.comment = ev.getComment(); event.comment = ev.getComment();
@@ -421,7 +424,7 @@ public class StreamEventsApiListener
Change change = notes.getChange(); Change change = notes.getChange();
ChangeRestoredEvent event = new ChangeRestoredEvent(change); ChangeRestoredEvent event = new ChangeRestoredEvent(change);
event.change = changeAttributeSupplier(change); event.change = changeAttributeSupplier(change, notes);
event.restorer = accountAttributeSupplier(ev.getWho()); event.restorer = accountAttributeSupplier(ev.getWho());
event.patchSet = patchSetAttributeSupplier(change, psUtil.current(db.get(), notes)); event.patchSet = patchSetAttributeSupplier(change, psUtil.current(db.get(), notes));
event.reason = ev.getReason(); event.reason = ev.getReason();
@@ -439,7 +442,7 @@ public class StreamEventsApiListener
Change change = notes.getChange(); Change change = notes.getChange();
ChangeMergedEvent event = new ChangeMergedEvent(change); ChangeMergedEvent event = new ChangeMergedEvent(change);
event.change = changeAttributeSupplier(change); event.change = changeAttributeSupplier(change, notes);
event.submitter = accountAttributeSupplier(ev.getWho()); event.submitter = accountAttributeSupplier(ev.getWho());
event.patchSet = patchSetAttributeSupplier(change, psUtil.current(db.get(), notes)); event.patchSet = patchSetAttributeSupplier(change, psUtil.current(db.get(), notes));
event.newRev = ev.getNewRevisionId(); event.newRev = ev.getNewRevisionId();
@@ -457,7 +460,7 @@ public class StreamEventsApiListener
Change change = notes.getChange(); Change change = notes.getChange();
ChangeAbandonedEvent event = new ChangeAbandonedEvent(change); ChangeAbandonedEvent event = new ChangeAbandonedEvent(change);
event.change = changeAttributeSupplier(change); event.change = changeAttributeSupplier(change, notes);
event.abandoner = accountAttributeSupplier(ev.getWho()); event.abandoner = accountAttributeSupplier(ev.getWho());
event.patchSet = patchSetAttributeSupplier(change, psUtil.current(db.get(), notes)); event.patchSet = patchSetAttributeSupplier(change, psUtil.current(db.get(), notes));
event.reason = ev.getReason(); event.reason = ev.getReason();
@@ -471,10 +474,11 @@ public class StreamEventsApiListener
@Override @Override
public void onWorkInProgressStateChanged(WorkInProgressStateChangedListener.Event ev) { public void onWorkInProgressStateChanged(WorkInProgressStateChangedListener.Event ev) {
try { try {
Change change = getChange(ev.getChange()); ChangeNotes notes = getNotes(ev.getChange());
Change change = notes.getChange();
WorkInProgressStateChangedEvent event = new WorkInProgressStateChangedEvent(change); WorkInProgressStateChangedEvent event = new WorkInProgressStateChangedEvent(change);
event.change = changeAttributeSupplier(change); event.change = changeAttributeSupplier(change, notes);
event.changer = accountAttributeSupplier(ev.getWho()); event.changer = accountAttributeSupplier(ev.getWho());
dispatcher.get().postEvent(change, event); dispatcher.get().postEvent(change, event);
@@ -486,10 +490,11 @@ public class StreamEventsApiListener
@Override @Override
public void onPrivateStateChanged(PrivateStateChangedListener.Event ev) { public void onPrivateStateChanged(PrivateStateChangedListener.Event ev) {
try { try {
Change change = getChange(ev.getChange()); ChangeNotes notes = getNotes(ev.getChange());
Change change = notes.getChange();
PrivateStateChangedEvent event = new PrivateStateChangedEvent(change); PrivateStateChangedEvent event = new PrivateStateChangedEvent(change);
event.change = changeAttributeSupplier(change); event.change = changeAttributeSupplier(change, notes);
event.changer = accountAttributeSupplier(ev.getWho()); event.changer = accountAttributeSupplier(ev.getWho());
dispatcher.get().postEvent(change, event); dispatcher.get().postEvent(change, event);
@@ -505,7 +510,7 @@ public class StreamEventsApiListener
Change change = notes.getChange(); Change change = notes.getChange();
VoteDeletedEvent event = new VoteDeletedEvent(change); VoteDeletedEvent event = new VoteDeletedEvent(change);
event.change = changeAttributeSupplier(change); event.change = changeAttributeSupplier(change, notes);
event.patchSet = patchSetAttributeSupplier(change, psUtil.current(db.get(), notes)); event.patchSet = patchSetAttributeSupplier(change, psUtil.current(db.get(), notes));
event.comment = ev.getMessage(); event.comment = ev.getMessage();
event.reviewer = accountAttributeSupplier(ev.getReviewer()); event.reviewer = accountAttributeSupplier(ev.getReviewer());

View File

@@ -237,7 +237,7 @@ public class OutputStreamQuery {
ChangeData d, Map<Project.NameKey, Repository> repos, Map<Project.NameKey, RevWalk> revWalks) ChangeData d, Map<Project.NameKey, Repository> repos, Map<Project.NameKey, RevWalk> revWalks)
throws OrmException, IOException { throws OrmException, IOException {
LabelTypes labelTypes = d.getLabelTypes(); LabelTypes labelTypes = d.getLabelTypes();
ChangeAttribute c = eventFactory.asChangeAttribute(db, d.change()); ChangeAttribute c = eventFactory.asChangeAttribute(db, d.change(), d.notes());
eventFactory.extend(c, d.change()); eventFactory.extend(c, d.change());
if (!trackingFooters.isEmpty()) { if (!trackingFooters.isEmpty()) {