Browse Source

Add TicketHook extension

tags/v1.5.0
James Moger 10 years ago
parent
commit
ba56706954

+ 9
- 0
src/main/java/com/gitblit/GitBlit.java View File

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

+ 3
- 3
src/main/java/com/gitblit/ReindexTickets.java View File

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

+ 46
- 0
src/main/java/com/gitblit/extensions/TicketHook.java View File

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

+ 3
- 0
src/main/java/com/gitblit/tickets/BranchTicketService.java View File

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

+ 3
- 0
src/main/java/com/gitblit/tickets/FileTicketService.java View File

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

+ 28
- 0
src/main/java/com/gitblit/tickets/ITicketService.java View File

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

+ 3
- 0
src/main/java/com/gitblit/tickets/NullTicketService.java View File

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

+ 3
- 0
src/main/java/com/gitblit/tickets/RedisTicketService.java View File

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

+ 23
- 0
src/site/setup_plugins.mkd View File

@@ -111,6 +111,29 @@ public class MyPatchsetHook extends PatchsetHook {
}
```

### Extension Point: Ticket Hook

You can provide your own custom ticket hook by extending the *TicketHook* class.

```java
import com.gitblit.extensions.TicketHook;
import com.gitblit.models.TicketModel;
import com.gitblit.models.TicketModel.Change;
import ro.fortsoft.pf4j.Extension;

@Extension
public class MyTicketHook extends TicketHook {

@Override
public void onNewTicket(TicketModel ticket) {
}

@Override
public void onUpdateTicket(TicketModel ticket, Change change) {
}
}
```

### Mac OSX Fonts

Gitblit's core SSH commands and those in the *powertools* plugin rely on use of ANSI border characters to provide a pretty presentation of data. Unfortunately, the fonts provided by Apple - while very nice - don't work well with ANSI border characters. The following public domain fixed-width, fixed-point, bitmapped fonts work very nicely. I find the 6x12 font with a line spacing of ~0.8 to be quite acceptable.

+ 4
- 0
src/test/java/com/gitblit/tests/BranchTicketServiceTest.java View File

@@ -17,10 +17,12 @@ package com.gitblit.tests;

import com.gitblit.IStoredSettings;
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;
import com.gitblit.manager.NotificationManager;
import com.gitblit.manager.PluginManager;
import com.gitblit.manager.RepositoryManager;
import com.gitblit.manager.RuntimeManager;
import com.gitblit.manager.UserManager;
@@ -50,12 +52,14 @@ public class BranchTicketServiceTest extends TicketServiceTest {
IStoredSettings settings = getSettings(deleteAll);

IRuntimeManager runtimeManager = new RuntimeManager(settings).start();
IPluginManager pluginManager = new PluginManager(runtimeManager).start();
INotificationManager notificationManager = new NotificationManager(settings).start();
IUserManager userManager = new UserManager(runtimeManager).start();
IRepositoryManager repositoryManager = new RepositoryManager(runtimeManager, userManager).start();

BranchTicketService service = new BranchTicketService(
runtimeManager,
pluginManager,
notificationManager,
userManager,
repositoryManager).start();

+ 4
- 0
src/test/java/com/gitblit/tests/FileTicketServiceTest.java View File

@@ -17,10 +17,12 @@ package com.gitblit.tests;

import com.gitblit.IStoredSettings;
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;
import com.gitblit.manager.NotificationManager;
import com.gitblit.manager.PluginManager;
import com.gitblit.manager.RepositoryManager;
import com.gitblit.manager.RuntimeManager;
import com.gitblit.manager.UserManager;
@@ -49,12 +51,14 @@ public class FileTicketServiceTest extends TicketServiceTest {
IStoredSettings settings = getSettings(deleteAll);

IRuntimeManager runtimeManager = new RuntimeManager(settings).start();
IPluginManager pluginManager = new PluginManager(runtimeManager).start();
INotificationManager notificationManager = new NotificationManager(settings).start();
IUserManager userManager = new UserManager(runtimeManager).start();
IRepositoryManager repositoryManager = new RepositoryManager(runtimeManager, userManager).start();

FileTicketService service = new FileTicketService(
runtimeManager,
pluginManager,
notificationManager,
userManager,
repositoryManager).start();

+ 4
- 0
src/test/java/com/gitblit/tests/RedisTicketServiceTest.java View File

@@ -18,10 +18,12 @@ package com.gitblit.tests;
import com.gitblit.IStoredSettings;
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;
import com.gitblit.manager.NotificationManager;
import com.gitblit.manager.PluginManager;
import com.gitblit.manager.RepositoryManager;
import com.gitblit.manager.RuntimeManager;
import com.gitblit.manager.UserManager;
@@ -57,12 +59,14 @@ public class RedisTicketServiceTest extends TicketServiceTest {
IStoredSettings settings = getSettings(deleteAll);

IRuntimeManager runtimeManager = new RuntimeManager(settings).start();
IPluginManager pluginManager = new PluginManager(runtimeManager).start();
INotificationManager notificationManager = new NotificationManager(settings).start();
IUserManager userManager = new UserManager(runtimeManager).start();
IRepositoryManager repositoryManager = new RepositoryManager(runtimeManager, userManager).start();

RedisTicketService service = new RedisTicketService(
runtimeManager,
pluginManager,
notificationManager,
userManager,
repositoryManager).start();

Loading…
Cancel
Save