summaryrefslogtreecommitdiffstats
path: root/src/main/java
diff options
context:
space:
mode:
authorJames Moger <james.moger@gitblit.com>2014-04-12 10:00:12 -0400
committerJames Moger <james.moger@gitblit.com>2014-04-12 11:40:10 -0400
commitba567069542e1f6769097ff78cd9612a9f08eb83 (patch)
treecd87bc2dd205b5c346a35fecaf0f52fe6e00c416 /src/main/java
parentaa89bef3a9e06404afb268426cbab1ef20c3857c (diff)
downloadgitblit-ba567069542e1f6769097ff78cd9612a9f08eb83.tar.gz
gitblit-ba567069542e1f6769097ff78cd9612a9f08eb83.zip
Add TicketHook extension
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/com/gitblit/GitBlit.java9
-rw-r--r--src/main/java/com/gitblit/ReindexTickets.java6
-rw-r--r--src/main/java/com/gitblit/extensions/TicketHook.java46
-rw-r--r--src/main/java/com/gitblit/tickets/BranchTicketService.java3
-rw-r--r--src/main/java/com/gitblit/tickets/FileTicketService.java3
-rw-r--r--src/main/java/com/gitblit/tickets/ITicketService.java28
-rw-r--r--src/main/java/com/gitblit/tickets/NullTicketService.java3
-rw-r--r--src/main/java/com/gitblit/tickets/RedisTicketService.java3
8 files changed, 98 insertions, 3 deletions
diff --git a/src/main/java/com/gitblit/GitBlit.java b/src/main/java/com/gitblit/GitBlit.java
index 08342521..3db5f087 100644
--- a/src/main/java/com/gitblit/GitBlit.java
+++ b/src/main/java/com/gitblit/GitBlit.java
@@ -352,6 +352,7 @@ public class GitBlit extends GitblitManager {
// core managers
IRuntimeManager.class,
+ IPluginManager.class,
INotificationManager.class,
IUserManager.class,
IAuthenticationManager.class,
@@ -379,6 +380,10 @@ public class GitBlit extends GitblitManager {
return runtimeManager;
}
+ @Provides @Singleton IPluginManager providePluginManager() {
+ return pluginManager;
+ }
+
@Provides @Singleton INotificationManager provideNotificationManager() {
return notificationManager;
}
@@ -410,6 +415,7 @@ public class GitBlit extends GitblitManager {
@Provides @Singleton NullTicketService provideNullTicketService() {
return new NullTicketService(
runtimeManager,
+ pluginManager,
notificationManager,
userManager,
repositoryManager);
@@ -418,6 +424,7 @@ public class GitBlit extends GitblitManager {
@Provides @Singleton FileTicketService provideFileTicketService() {
return new FileTicketService(
runtimeManager,
+ pluginManager,
notificationManager,
userManager,
repositoryManager);
@@ -426,6 +433,7 @@ public class GitBlit extends GitblitManager {
@Provides @Singleton BranchTicketService provideBranchTicketService() {
return new BranchTicketService(
runtimeManager,
+ pluginManager,
notificationManager,
userManager,
repositoryManager);
@@ -434,6 +442,7 @@ public class GitBlit extends GitblitManager {
@Provides @Singleton RedisTicketService provideRedisTicketService() {
return new RedisTicketService(
runtimeManager,
+ pluginManager,
notificationManager,
userManager,
repositoryManager);
diff --git a/src/main/java/com/gitblit/ReindexTickets.java b/src/main/java/com/gitblit/ReindexTickets.java
index f3d6d266..51ca1657 100644
--- a/src/main/java/com/gitblit/ReindexTickets.java
+++ b/src/main/java/com/gitblit/ReindexTickets.java
@@ -139,13 +139,13 @@ public class ReindexTickets {
Class<?> serviceClass = Class.forName(serviceName);
if (RedisTicketService.class.isAssignableFrom(serviceClass)) {
// Redis ticket service
- ticketService = new RedisTicketService(runtimeManager, null, null, repositoryManager).start();
+ ticketService = new RedisTicketService(runtimeManager, null, null, null, repositoryManager).start();
} else if (BranchTicketService.class.isAssignableFrom(serviceClass)) {
// Branch ticket service
- ticketService = new BranchTicketService(runtimeManager, null, null, repositoryManager).start();
+ ticketService = new BranchTicketService(runtimeManager, null, null, null, repositoryManager).start();
} else if (FileTicketService.class.isAssignableFrom(serviceClass)) {
// File ticket service
- ticketService = new FileTicketService(runtimeManager, null, null, repositoryManager).start();
+ ticketService = new FileTicketService(runtimeManager, null, null, null, repositoryManager).start();
} else {
System.err.println("Unknown ticket service " + serviceName);
System.exit(1);
diff --git a/src/main/java/com/gitblit/extensions/TicketHook.java b/src/main/java/com/gitblit/extensions/TicketHook.java
new file mode 100644
index 00000000..3acbef30
--- /dev/null
+++ b/src/main/java/com/gitblit/extensions/TicketHook.java
@@ -0,0 +1,46 @@
+/*
+ * Copyright 2014 gitblit.com.
+ *
+ * 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.gitblit.extensions;
+
+import ro.fortsoft.pf4j.ExtensionPoint;
+
+import com.gitblit.models.TicketModel;
+import com.gitblit.models.TicketModel.Change;
+
+/**
+ * Extension point for plugins to respond to Ticket changes.
+ *
+ * @author James Moger
+ *
+ */
+public abstract class TicketHook implements ExtensionPoint {
+
+ /**
+ * Called when a new ticket is created.
+ *
+ * @param ticket
+ */
+ public abstract void onNewTicket(TicketModel ticket);
+
+ /**
+ * Called when an existing ticket is updated. Tickets can be updated for
+ * many, many reasons like state changes votes, watches, etc.
+ *
+ * @param ticket
+ * @param change
+ */
+ public abstract void onUpdateTicket(TicketModel ticket, Change change);
+}
diff --git a/src/main/java/com/gitblit/tickets/BranchTicketService.java b/src/main/java/com/gitblit/tickets/BranchTicketService.java
index 56055a4a..3a634e05 100644
--- a/src/main/java/com/gitblit/tickets/BranchTicketService.java
+++ b/src/main/java/com/gitblit/tickets/BranchTicketService.java
@@ -58,6 +58,7 @@ import org.eclipse.jgit.treewalk.TreeWalk;
import com.gitblit.Constants;
import com.gitblit.git.ReceiveCommandEvent;
import com.gitblit.manager.INotificationManager;
+import com.gitblit.manager.IPluginManager;
import com.gitblit.manager.IRepositoryManager;
import com.gitblit.manager.IRuntimeManager;
import com.gitblit.manager.IUserManager;
@@ -92,11 +93,13 @@ public class BranchTicketService extends ITicketService implements RefsChangedLi
public BranchTicketService(
IRuntimeManager runtimeManager,
+ IPluginManager pluginManager,
INotificationManager notificationManager,
IUserManager userManager,
IRepositoryManager repositoryManager) {
super(runtimeManager,
+ pluginManager,
notificationManager,
userManager,
repositoryManager);
diff --git a/src/main/java/com/gitblit/tickets/FileTicketService.java b/src/main/java/com/gitblit/tickets/FileTicketService.java
index 2247a66c..4386020f 100644
--- a/src/main/java/com/gitblit/tickets/FileTicketService.java
+++ b/src/main/java/com/gitblit/tickets/FileTicketService.java
@@ -29,6 +29,7 @@ import org.eclipse.jgit.lib.Repository;
import com.gitblit.Constants;
import com.gitblit.manager.INotificationManager;
+import com.gitblit.manager.IPluginManager;
import com.gitblit.manager.IRepositoryManager;
import com.gitblit.manager.IRuntimeManager;
import com.gitblit.manager.IUserManager;
@@ -58,11 +59,13 @@ public class FileTicketService extends ITicketService {
public FileTicketService(
IRuntimeManager runtimeManager,
+ IPluginManager pluginManager,
INotificationManager notificationManager,
IUserManager userManager,
IRepositoryManager repositoryManager) {
super(runtimeManager,
+ pluginManager,
notificationManager,
userManager,
repositoryManager);
diff --git a/src/main/java/com/gitblit/tickets/ITicketService.java b/src/main/java/com/gitblit/tickets/ITicketService.java
index 90f9c6dd..9522e420 100644
--- a/src/main/java/com/gitblit/tickets/ITicketService.java
+++ b/src/main/java/com/gitblit/tickets/ITicketService.java
@@ -35,7 +35,9 @@ import org.slf4j.LoggerFactory;
import com.gitblit.IStoredSettings;
import com.gitblit.Keys;
+import com.gitblit.extensions.TicketHook;
import com.gitblit.manager.INotificationManager;
+import com.gitblit.manager.IPluginManager;
import com.gitblit.manager.IRepositoryManager;
import com.gitblit.manager.IRuntimeManager;
import com.gitblit.manager.IUserManager;
@@ -94,6 +96,8 @@ public abstract class ITicketService {
protected final IRepositoryManager repositoryManager;
+ protected final IPluginManager pluginManager;
+
protected final TicketIndexer indexer;
private final Cache<TicketKey, TicketModel> ticketsCache;
@@ -136,6 +140,7 @@ public abstract class ITicketService {
*/
public ITicketService(
IRuntimeManager runtimeManager,
+ IPluginManager pluginManager,
INotificationManager notificationManager,
IUserManager userManager,
IRepositoryManager repositoryManager) {
@@ -143,6 +148,7 @@ public abstract class ITicketService {
this.log = LoggerFactory.getLogger(getClass());
this.settings = runtimeManager.getSettings();
this.runtimeManager = runtimeManager;
+ this.pluginManager = pluginManager;
this.notificationManager = notificationManager;
this.userManager = userManager;
this.repositoryManager = repositoryManager;
@@ -832,6 +838,17 @@ public abstract class ITicketService {
if (success) {
TicketModel ticket = getTicket(repository, ticketId);
indexer.index(ticket);
+
+ // call the ticket hooks
+ if (pluginManager != null) {
+ for (TicketHook hook : pluginManager.getExtensions(TicketHook.class)) {
+ try {
+ hook.onNewTicket(ticket);
+ } catch (Exception e) {
+ log.error("Failed to execute extension", e);
+ }
+ }
+ }
return ticket;
}
return null;
@@ -862,6 +879,17 @@ public abstract class ITicketService {
TicketModel ticket = getTicket(repository, ticketId);
ticketsCache.put(key, ticket);
indexer.index(ticket);
+
+ // call the ticket hooks
+ if (pluginManager != null) {
+ for (TicketHook hook : pluginManager.getExtensions(TicketHook.class)) {
+ try {
+ hook.onUpdateTicket(ticket, change);
+ } catch (Exception e) {
+ log.error("Failed to execute extension", e);
+ }
+ }
+ }
return ticket;
}
return null;
diff --git a/src/main/java/com/gitblit/tickets/NullTicketService.java b/src/main/java/com/gitblit/tickets/NullTicketService.java
index 0ff33176..749d8018 100644
--- a/src/main/java/com/gitblit/tickets/NullTicketService.java
+++ b/src/main/java/com/gitblit/tickets/NullTicketService.java
@@ -19,6 +19,7 @@ import java.util.Collections;
import java.util.List;
import com.gitblit.manager.INotificationManager;
+import com.gitblit.manager.IPluginManager;
import com.gitblit.manager.IRepositoryManager;
import com.gitblit.manager.IRuntimeManager;
import com.gitblit.manager.IUserManager;
@@ -37,11 +38,13 @@ public class NullTicketService extends ITicketService {
public NullTicketService(
IRuntimeManager runtimeManager,
+ IPluginManager pluginManager,
INotificationManager notificationManager,
IUserManager userManager,
IRepositoryManager repositoryManager) {
super(runtimeManager,
+ pluginManager,
notificationManager,
userManager,
repositoryManager);
diff --git a/src/main/java/com/gitblit/tickets/RedisTicketService.java b/src/main/java/com/gitblit/tickets/RedisTicketService.java
index 58f7243c..2c5b181f 100644
--- a/src/main/java/com/gitblit/tickets/RedisTicketService.java
+++ b/src/main/java/com/gitblit/tickets/RedisTicketService.java
@@ -32,6 +32,7 @@ import redis.clients.jedis.exceptions.JedisException;
import com.gitblit.Keys;
import com.gitblit.manager.INotificationManager;
+import com.gitblit.manager.IPluginManager;
import com.gitblit.manager.IRepositoryManager;
import com.gitblit.manager.IRuntimeManager;
import com.gitblit.manager.IUserManager;
@@ -61,11 +62,13 @@ public class RedisTicketService extends ITicketService {
public RedisTicketService(
IRuntimeManager runtimeManager,
+ IPluginManager pluginManager,
INotificationManager notificationManager,
IUserManager userManager,
IRepositoryManager repositoryManager) {
super(runtimeManager,
+ pluginManager,
notificationManager,
userManager,
repositoryManager);