Move stream-event JSON objects to a common package
This way they aren't so tied up with the ChangeHookRunner itself, and we can start to reuse them for a gerrit query implementation. Change-Id: If531bc193e3569f7df626c303cc8dc54be237ee0 Signed-off-by: Shawn O. Pearce <sop@google.com>
This commit is contained in:
@@ -24,18 +24,22 @@ import com.google.gerrit.reviewdb.PatchSet;
|
|||||||
import com.google.gerrit.server.IdentifiedUser;
|
import com.google.gerrit.server.IdentifiedUser;
|
||||||
import com.google.gerrit.server.account.AccountCache;
|
import com.google.gerrit.server.account.AccountCache;
|
||||||
import com.google.gerrit.server.account.AccountState;
|
import com.google.gerrit.server.account.AccountState;
|
||||||
import com.google.gerrit.server.config.CanonicalWebUrl;
|
|
||||||
import com.google.gerrit.server.config.GerritServerConfig;
|
import com.google.gerrit.server.config.GerritServerConfig;
|
||||||
import com.google.gerrit.server.config.SitePaths;
|
import com.google.gerrit.server.config.SitePaths;
|
||||||
|
import com.google.gerrit.server.events.ApprovalAttribute;
|
||||||
|
import com.google.gerrit.server.events.ChangeAbandonedEvent;
|
||||||
|
import com.google.gerrit.server.events.ChangeEvent;
|
||||||
|
import com.google.gerrit.server.events.ChangeMergedEvent;
|
||||||
|
import com.google.gerrit.server.events.CommentAddedEvent;
|
||||||
|
import com.google.gerrit.server.events.EventFactory;
|
||||||
|
import com.google.gerrit.server.events.PatchSetCreatedEvent;
|
||||||
import com.google.gerrit.server.git.GitRepositoryManager;
|
import com.google.gerrit.server.git.GitRepositoryManager;
|
||||||
import com.google.gerrit.server.git.WorkQueue;
|
import com.google.gerrit.server.git.WorkQueue;
|
||||||
import com.google.gerrit.server.project.ProjectCache;
|
import com.google.gerrit.server.project.ProjectCache;
|
||||||
import com.google.gerrit.server.project.ProjectControl;
|
import com.google.gerrit.server.project.ProjectControl;
|
||||||
import com.google.gerrit.server.project.ProjectState;
|
import com.google.gerrit.server.project.ProjectState;
|
||||||
import com.google.inject.Inject;
|
import com.google.inject.Inject;
|
||||||
import com.google.inject.Provider;
|
|
||||||
import com.google.inject.Singleton;
|
import com.google.inject.Singleton;
|
||||||
import com.google.inject.internal.Nullable;
|
|
||||||
|
|
||||||
import org.eclipse.jgit.lib.Config;
|
import org.eclipse.jgit.lib.Config;
|
||||||
import org.eclipse.jgit.lib.Repository;
|
import org.eclipse.jgit.lib.Repository;
|
||||||
@@ -60,68 +64,6 @@ public class ChangeHookRunner {
|
|||||||
/** A logger for this class. */
|
/** A logger for this class. */
|
||||||
private static final Logger log = LoggerFactory.getLogger(ChangeHookRunner.class);
|
private static final Logger log = LoggerFactory.getLogger(ChangeHookRunner.class);
|
||||||
|
|
||||||
public static abstract class ChangeEvent {
|
|
||||||
}
|
|
||||||
|
|
||||||
public static class ApprovalAttribute {
|
|
||||||
public String type;
|
|
||||||
public String description;
|
|
||||||
public String value;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static class AuthorAttribute {
|
|
||||||
public String name;
|
|
||||||
public String email;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static class ChangeAttribute {
|
|
||||||
public String project;
|
|
||||||
public String branch;
|
|
||||||
public String id;
|
|
||||||
public String number;
|
|
||||||
public String subject;
|
|
||||||
public AuthorAttribute owner;
|
|
||||||
public String url;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static class PatchSetAttribute {
|
|
||||||
public String number;
|
|
||||||
public String revision;
|
|
||||||
public String ref;
|
|
||||||
public AuthorAttribute uploader;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static class CommentAddedEvent extends ChangeEvent {
|
|
||||||
public final String type = "comment-added";
|
|
||||||
public ChangeAttribute change;
|
|
||||||
public PatchSetAttribute patchSet;
|
|
||||||
public AuthorAttribute author;
|
|
||||||
public ApprovalAttribute[] approvals;
|
|
||||||
public String comment;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static class ChangeMergedEvent extends ChangeEvent {
|
|
||||||
public final String type = "change-merged";
|
|
||||||
public ChangeAttribute change;
|
|
||||||
public PatchSetAttribute patchSet;
|
|
||||||
public AuthorAttribute submitter;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static class ChangeAbandonedEvent extends ChangeEvent {
|
|
||||||
public final String type = "change-abandoned";
|
|
||||||
public ChangeAttribute change;
|
|
||||||
public PatchSetAttribute patchSet;
|
|
||||||
public AuthorAttribute abandoner;
|
|
||||||
public String reason;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static class PatchSetCreatedEvent extends ChangeEvent {
|
|
||||||
public final String type = "patchset-created";
|
|
||||||
public ChangeAttribute change;
|
|
||||||
public PatchSetAttribute patchSet;
|
|
||||||
public AuthorAttribute uploader;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static class ChangeListenerHolder {
|
private static class ChangeListenerHolder {
|
||||||
final ChangeListener listener;
|
final ChangeListener listener;
|
||||||
final IdentifiedUser user;
|
final IdentifiedUser user;
|
||||||
@@ -160,8 +102,7 @@ public class ChangeHookRunner {
|
|||||||
|
|
||||||
private final ApprovalTypes approvalTypes;
|
private final ApprovalTypes approvalTypes;
|
||||||
|
|
||||||
private final Provider<String> urlProvider;
|
private final EventFactory eventFactory;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create a new ChangeHookRunner.
|
* Create a new ChangeHookRunner.
|
||||||
@@ -179,13 +120,13 @@ public class ChangeHookRunner {
|
|||||||
final ProjectCache projectCache,
|
final ProjectCache projectCache,
|
||||||
final AccountCache accountCache,
|
final AccountCache accountCache,
|
||||||
final ApprovalTypes approvalTypes,
|
final ApprovalTypes approvalTypes,
|
||||||
@CanonicalWebUrl @Nullable final Provider<String> cwu) {
|
final EventFactory eventFactory) {
|
||||||
this.repoManager = repoManager;
|
this.repoManager = repoManager;
|
||||||
this.hookQueue = queue.createQueue(1, "hook");
|
this.hookQueue = queue.createQueue(1, "hook");
|
||||||
this.projectCache = projectCache;
|
this.projectCache = projectCache;
|
||||||
this.accountCache = accountCache;
|
this.accountCache = accountCache;
|
||||||
this.approvalTypes = approvalTypes;
|
this.approvalTypes = approvalTypes;
|
||||||
this.urlProvider = cwu;
|
this.eventFactory = eventFactory;
|
||||||
|
|
||||||
final File hooksPath = sitePath.resolve(getValue(config, "hooks", "path", sitePath.hooks_dir.getAbsolutePath()));
|
final File hooksPath = sitePath.resolve(getValue(config, "hooks", "path", sitePath.hooks_dir.getAbsolutePath()));
|
||||||
|
|
||||||
@@ -241,9 +182,9 @@ public class ChangeHookRunner {
|
|||||||
final PatchSetCreatedEvent event = new PatchSetCreatedEvent();
|
final PatchSetCreatedEvent event = new PatchSetCreatedEvent();
|
||||||
final AccountState uploader = accountCache.get(patchSet.getUploader());
|
final AccountState uploader = accountCache.get(patchSet.getUploader());
|
||||||
|
|
||||||
event.change = getChangeAttribute(change);
|
event.change = eventFactory.asChangeAttribute(change);
|
||||||
event.patchSet = getPatchSetAttribute(patchSet);
|
event.patchSet = eventFactory.asPatchSetAttribute(patchSet);
|
||||||
event.uploader = getAccountAttribute(uploader.getAccount());
|
event.uploader = eventFactory.asAccountAttribute(uploader.getAccount());
|
||||||
fireEvent(change, event);
|
fireEvent(change, event);
|
||||||
|
|
||||||
final List<String> args = new ArrayList<String>();
|
final List<String> args = new ArrayList<String>();
|
||||||
@@ -279,9 +220,9 @@ public class ChangeHookRunner {
|
|||||||
public void doCommentAddedHook(final Change change, final Account account, final PatchSet patchSet, final String comment, final Map<ApprovalCategory.Id, ApprovalCategoryValue.Id> approvals) {
|
public void doCommentAddedHook(final Change change, final Account account, final PatchSet patchSet, final String comment, final Map<ApprovalCategory.Id, ApprovalCategoryValue.Id> approvals) {
|
||||||
final CommentAddedEvent event = new CommentAddedEvent();
|
final CommentAddedEvent event = new CommentAddedEvent();
|
||||||
|
|
||||||
event.change = getChangeAttribute(change);
|
event.change = eventFactory.asChangeAttribute(change);
|
||||||
event.author = getAccountAttribute(account);
|
event.author = eventFactory.asAccountAttribute(account);
|
||||||
event.patchSet = getPatchSetAttribute(patchSet);
|
event.patchSet = eventFactory.asPatchSetAttribute(patchSet);
|
||||||
event.comment = comment;
|
event.comment = comment;
|
||||||
|
|
||||||
if (approvals.size() > 0) {
|
if (approvals.size() > 0) {
|
||||||
@@ -329,9 +270,9 @@ public class ChangeHookRunner {
|
|||||||
public void doChangeMergedHook(final Change change, final Account account, final PatchSet patchSet) {
|
public void doChangeMergedHook(final Change change, final Account account, final PatchSet patchSet) {
|
||||||
final ChangeMergedEvent event = new ChangeMergedEvent();
|
final ChangeMergedEvent event = new ChangeMergedEvent();
|
||||||
|
|
||||||
event.change = getChangeAttribute(change);
|
event.change = eventFactory.asChangeAttribute(change);
|
||||||
event.submitter = getAccountAttribute(account);
|
event.submitter = eventFactory.asAccountAttribute(account);
|
||||||
event.patchSet = getPatchSetAttribute(patchSet);
|
event.patchSet = eventFactory.asPatchSetAttribute(patchSet);
|
||||||
fireEvent(change, event);
|
fireEvent(change, event);
|
||||||
|
|
||||||
final List<String> args = new ArrayList<String>();
|
final List<String> args = new ArrayList<String>();
|
||||||
@@ -363,8 +304,8 @@ public class ChangeHookRunner {
|
|||||||
public void doChangeAbandonedHook(final Change change, final Account account, final String reason) {
|
public void doChangeAbandonedHook(final Change change, final Account account, final String reason) {
|
||||||
final ChangeAbandonedEvent event = new ChangeAbandonedEvent();
|
final ChangeAbandonedEvent event = new ChangeAbandonedEvent();
|
||||||
|
|
||||||
event.change = getChangeAttribute(change);
|
event.change = eventFactory.asChangeAttribute(change);
|
||||||
event.abandoner = getAccountAttribute(account);
|
event.abandoner = eventFactory.asAccountAttribute(account);
|
||||||
event.reason = reason;
|
event.reason = reason;
|
||||||
fireEvent(change, event);
|
fireEvent(change, event);
|
||||||
|
|
||||||
@@ -404,22 +345,6 @@ public class ChangeHookRunner {
|
|||||||
return pc.controlFor(change).isVisible();
|
return pc.controlFor(change).isVisible();
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Get a link to the change; null if the server doesn't know its own address. */
|
|
||||||
private String getChangeUrl(final Change change) {
|
|
||||||
if (change != null && getGerritUrl() != null) {
|
|
||||||
final StringBuilder r = new StringBuilder();
|
|
||||||
r.append(getGerritUrl());
|
|
||||||
r.append(change.getChangeId());
|
|
||||||
return r.toString();
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
private String getGerritUrl() {
|
|
||||||
return urlProvider.get();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create an ApprovalAttribute for the given approval suitable for serialization to JSON.
|
* Create an ApprovalAttribute for the given approval suitable for serialization to JSON.
|
||||||
* @param approval
|
* @param approval
|
||||||
@@ -435,54 +360,6 @@ public class ChangeHookRunner {
|
|||||||
return a;
|
return a;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Create an AuthorAttribute for the given account suitable for serialization to JSON.
|
|
||||||
*
|
|
||||||
* @param account
|
|
||||||
* @return object suitable for serialization to JSON
|
|
||||||
*/
|
|
||||||
private AuthorAttribute getAccountAttribute(final Account account) {
|
|
||||||
AuthorAttribute author = new AuthorAttribute();
|
|
||||||
author.name = account.getFullName();
|
|
||||||
author.email = account.getPreferredEmail();
|
|
||||||
return author;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Create a ChangeAttribute for the given change suitable for serialization to JSON.
|
|
||||||
*
|
|
||||||
* @param change
|
|
||||||
* @return object suitable for serialization to JSON
|
|
||||||
*/
|
|
||||||
private ChangeAttribute getChangeAttribute(final Change change) {
|
|
||||||
ChangeAttribute a = new ChangeAttribute();
|
|
||||||
a.project = change.getProject().get();
|
|
||||||
a.branch = change.getDest().getShortName();
|
|
||||||
a.id = change.getKey().get();
|
|
||||||
a.number = change.getId().toString();
|
|
||||||
a.subject = change.getSubject();
|
|
||||||
final AccountState owner = accountCache.get(change.getOwner());
|
|
||||||
a.owner = getAccountAttribute(owner.getAccount());
|
|
||||||
a.url = getChangeUrl(change);
|
|
||||||
return a;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Create an PatchSetAttribute for the given patchset suitable for serialization to JSON.
|
|
||||||
*
|
|
||||||
* @param patchSet
|
|
||||||
* @return object suitable for serialization to JSON
|
|
||||||
*/
|
|
||||||
private PatchSetAttribute getPatchSetAttribute(final PatchSet patchSet) {
|
|
||||||
PatchSetAttribute p = new PatchSetAttribute();
|
|
||||||
p.revision = patchSet.getRevision().get();
|
|
||||||
p.number = Integer.toString(patchSet.getPatchSetId());
|
|
||||||
p.ref = patchSet.getRefName();
|
|
||||||
final AccountState uploader = accountCache.get(patchSet.getUploader());
|
|
||||||
p.uploader = getAccountAttribute(uploader.getAccount());
|
|
||||||
return p;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the display name for the given account.
|
* Get the display name for the given account.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -14,7 +14,8 @@
|
|||||||
|
|
||||||
package com.google.gerrit.common;
|
package com.google.gerrit.common;
|
||||||
|
|
||||||
import com.google.gerrit.common.ChangeHookRunner.ChangeEvent;
|
import com.google.gerrit.server.events.ChangeEvent;
|
||||||
|
|
||||||
|
|
||||||
public interface ChangeListener {
|
public interface ChangeListener {
|
||||||
public void onChangeEvent(ChangeEvent event);
|
public void onChangeEvent(ChangeEvent event);
|
||||||
|
|||||||
@@ -37,6 +37,7 @@ import com.google.gerrit.server.account.GroupCacheImpl;
|
|||||||
import com.google.gerrit.server.account.Realm;
|
import com.google.gerrit.server.account.Realm;
|
||||||
import com.google.gerrit.server.auth.ldap.LdapModule;
|
import com.google.gerrit.server.auth.ldap.LdapModule;
|
||||||
import com.google.gerrit.server.cache.CachePool;
|
import com.google.gerrit.server.cache.CachePool;
|
||||||
|
import com.google.gerrit.server.events.EventFactory;
|
||||||
import com.google.gerrit.server.git.ChangeMergeQueue;
|
import com.google.gerrit.server.git.ChangeMergeQueue;
|
||||||
import com.google.gerrit.server.git.GitRepositoryManager;
|
import com.google.gerrit.server.git.GitRepositoryManager;
|
||||||
import com.google.gerrit.server.git.LocalDiskRepositoryManager;
|
import com.google.gerrit.server.git.LocalDiskRepositoryManager;
|
||||||
@@ -64,8 +65,8 @@ import com.google.gerrit.server.tools.ToolsCatalog;
|
|||||||
import com.google.gerrit.server.util.IdGenerator;
|
import com.google.gerrit.server.util.IdGenerator;
|
||||||
import com.google.gerrit.server.workflow.FunctionState;
|
import com.google.gerrit.server.workflow.FunctionState;
|
||||||
import com.google.inject.Inject;
|
import com.google.inject.Inject;
|
||||||
|
|
||||||
import com.google.inject.TypeLiteral;
|
import com.google.inject.TypeLiteral;
|
||||||
|
|
||||||
import org.eclipse.jgit.lib.Config;
|
import org.eclipse.jgit.lib.Config;
|
||||||
import org.eclipse.jgit.lib.PersonIdent;
|
import org.eclipse.jgit.lib.PersonIdent;
|
||||||
|
|
||||||
@@ -125,6 +126,7 @@ public class GerritGlobalModule extends FactoryModule {
|
|||||||
bind(FileTypeRegistry.class).to(MimeUtilFileTypeRegistry.class);
|
bind(FileTypeRegistry.class).to(MimeUtilFileTypeRegistry.class);
|
||||||
bind(WorkQueue.class);
|
bind(WorkQueue.class);
|
||||||
bind(ToolsCatalog.class);
|
bind(ToolsCatalog.class);
|
||||||
|
bind(EventFactory.class);
|
||||||
|
|
||||||
bind(ReplicationQueue.class).to(PushReplication.class).in(SINGLETON);
|
bind(ReplicationQueue.class).to(PushReplication.class).in(SINGLETON);
|
||||||
factory(PushAllProjectsOp.Factory.class);
|
factory(PushAllProjectsOp.Factory.class);
|
||||||
|
|||||||
@@ -0,0 +1,20 @@
|
|||||||
|
// Copyright (C) 2010 The Android Open Source Project
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
package com.google.gerrit.server.events;
|
||||||
|
|
||||||
|
public class AccountAttribute {
|
||||||
|
public String name;
|
||||||
|
public String email;
|
||||||
|
}
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
// Copyright (C) 2010 The Android Open Source Project
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
package com.google.gerrit.server.events;
|
||||||
|
|
||||||
|
public class ApprovalAttribute {
|
||||||
|
public String type;
|
||||||
|
public String description;
|
||||||
|
public String value;
|
||||||
|
}
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
// Copyright (C) 2010 The Android Open Source Project
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
package com.google.gerrit.server.events;
|
||||||
|
|
||||||
|
public class ChangeAbandonedEvent extends ChangeEvent {
|
||||||
|
public final String type = "change-abandoned";
|
||||||
|
public ChangeAttribute change;
|
||||||
|
public PatchSetAttribute patchSet;
|
||||||
|
public AccountAttribute abandoner;
|
||||||
|
public String reason;
|
||||||
|
}
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
// Copyright (C) 2010 The Android Open Source Project
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
package com.google.gerrit.server.events;
|
||||||
|
|
||||||
|
public class ChangeAttribute {
|
||||||
|
public String project;
|
||||||
|
public String branch;
|
||||||
|
public String id;
|
||||||
|
public String number;
|
||||||
|
public String subject;
|
||||||
|
public AccountAttribute owner;
|
||||||
|
public String url;
|
||||||
|
}
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
// Copyright (C) 2010 The Android Open Source Project
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
package com.google.gerrit.server.events;
|
||||||
|
|
||||||
|
public abstract class ChangeEvent {
|
||||||
|
}
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
// Copyright (C) 2010 The Android Open Source Project
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
package com.google.gerrit.server.events;
|
||||||
|
|
||||||
|
public class ChangeMergedEvent extends ChangeEvent {
|
||||||
|
public final String type = "change-merged";
|
||||||
|
public ChangeAttribute change;
|
||||||
|
public PatchSetAttribute patchSet;
|
||||||
|
public AccountAttribute submitter;
|
||||||
|
}
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
// Copyright (C) 2010 The Android Open Source Project
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
package com.google.gerrit.server.events;
|
||||||
|
|
||||||
|
public class CommentAddedEvent extends ChangeEvent {
|
||||||
|
public final String type = "comment-added";
|
||||||
|
public ChangeAttribute change;
|
||||||
|
public PatchSetAttribute patchSet;
|
||||||
|
public AccountAttribute author;
|
||||||
|
public ApprovalAttribute[] approvals;
|
||||||
|
public String comment;
|
||||||
|
}
|
||||||
@@ -0,0 +1,103 @@
|
|||||||
|
// Copyright (C) 2010 The Android Open Source Project
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
package com.google.gerrit.server.events;
|
||||||
|
|
||||||
|
import com.google.gerrit.reviewdb.Account;
|
||||||
|
import com.google.gerrit.reviewdb.Change;
|
||||||
|
import com.google.gerrit.reviewdb.PatchSet;
|
||||||
|
import com.google.gerrit.server.account.AccountCache;
|
||||||
|
import com.google.gerrit.server.account.AccountState;
|
||||||
|
import com.google.gerrit.server.config.CanonicalWebUrl;
|
||||||
|
import com.google.inject.Inject;
|
||||||
|
import com.google.inject.Provider;
|
||||||
|
import com.google.inject.Singleton;
|
||||||
|
import com.google.inject.internal.Nullable;
|
||||||
|
|
||||||
|
@Singleton
|
||||||
|
public class EventFactory {
|
||||||
|
private final AccountCache accountCache;
|
||||||
|
private final Provider<String> urlProvider;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
EventFactory(AccountCache accountCache,
|
||||||
|
@CanonicalWebUrl @Nullable Provider<String> urlProvider) {
|
||||||
|
this.accountCache = accountCache;
|
||||||
|
this.urlProvider = urlProvider;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a ChangeAttribute for the given change suitable for serialization to
|
||||||
|
* JSON.
|
||||||
|
*
|
||||||
|
* @param change
|
||||||
|
* @return object suitable for serialization to JSON
|
||||||
|
*/
|
||||||
|
public ChangeAttribute asChangeAttribute(final Change change) {
|
||||||
|
ChangeAttribute a = new ChangeAttribute();
|
||||||
|
a.project = change.getProject().get();
|
||||||
|
a.branch = change.getDest().getShortName();
|
||||||
|
a.id = change.getKey().get();
|
||||||
|
a.number = change.getId().toString();
|
||||||
|
a.subject = change.getSubject();
|
||||||
|
a.url = getChangeUrl(change);
|
||||||
|
|
||||||
|
final AccountState owner = accountCache.get(change.getOwner());
|
||||||
|
a.owner = asAccountAttribute(owner.getAccount());
|
||||||
|
return a;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a PatchSetAttribute for the given patchset suitable for
|
||||||
|
* serialization to JSON.
|
||||||
|
*
|
||||||
|
* @param patchSet
|
||||||
|
* @return object suitable for serialization to JSON
|
||||||
|
*/
|
||||||
|
public PatchSetAttribute asPatchSetAttribute(final PatchSet patchSet) {
|
||||||
|
PatchSetAttribute p = new PatchSetAttribute();
|
||||||
|
p.revision = patchSet.getRevision().get();
|
||||||
|
p.number = Integer.toString(patchSet.getPatchSetId());
|
||||||
|
p.ref = patchSet.getRefName();
|
||||||
|
|
||||||
|
final AccountState uploader = accountCache.get(patchSet.getUploader());
|
||||||
|
p.uploader = asAccountAttribute(uploader.getAccount());
|
||||||
|
return p;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create an AuthorAttribute for the given account suitable for serialization
|
||||||
|
* to JSON.
|
||||||
|
*
|
||||||
|
* @param account
|
||||||
|
* @return object suitable for serialization to JSON
|
||||||
|
*/
|
||||||
|
public AccountAttribute asAccountAttribute(final Account account) {
|
||||||
|
AccountAttribute who = new AccountAttribute();
|
||||||
|
who.name = account.getFullName();
|
||||||
|
who.email = account.getPreferredEmail();
|
||||||
|
return who;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Get a link to the change; null if the server doesn't know its own address. */
|
||||||
|
private String getChangeUrl(final Change change) {
|
||||||
|
if (change != null && urlProvider.get() != null) {
|
||||||
|
final StringBuilder r = new StringBuilder();
|
||||||
|
r.append(urlProvider.get());
|
||||||
|
r.append(change.getChangeId());
|
||||||
|
return r.toString();
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
// Copyright (C) 2010 The Android Open Source Project
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
package com.google.gerrit.server.events;
|
||||||
|
|
||||||
|
public class PatchSetAttribute {
|
||||||
|
public String number;
|
||||||
|
public String revision;
|
||||||
|
public String ref;
|
||||||
|
public AccountAttribute uploader;
|
||||||
|
}
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
// Copyright (C) 2010 The Android Open Source Project
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
package com.google.gerrit.server.events;
|
||||||
|
|
||||||
|
public class PatchSetCreatedEvent extends ChangeEvent {
|
||||||
|
public final String type = "patchset-created";
|
||||||
|
public ChangeAttribute change;
|
||||||
|
public PatchSetAttribute patchSet;
|
||||||
|
public AccountAttribute uploader;
|
||||||
|
}
|
||||||
@@ -16,8 +16,8 @@ package com.google.gerrit.sshd.commands;
|
|||||||
|
|
||||||
import com.google.gerrit.common.ChangeHookRunner;
|
import com.google.gerrit.common.ChangeHookRunner;
|
||||||
import com.google.gerrit.common.ChangeListener;
|
import com.google.gerrit.common.ChangeListener;
|
||||||
import com.google.gerrit.common.ChangeHookRunner.ChangeEvent;
|
|
||||||
import com.google.gerrit.server.IdentifiedUser;
|
import com.google.gerrit.server.IdentifiedUser;
|
||||||
|
import com.google.gerrit.server.events.ChangeEvent;
|
||||||
import com.google.gerrit.server.git.WorkQueue;
|
import com.google.gerrit.server.git.WorkQueue;
|
||||||
import com.google.gerrit.server.git.WorkQueue.CancelableRunnable;
|
import com.google.gerrit.server.git.WorkQueue.CancelableRunnable;
|
||||||
import com.google.gerrit.sshd.BaseCommand;
|
import com.google.gerrit.sshd.BaseCommand;
|
||||||
|
|||||||
Reference in New Issue
Block a user