| | |
| | | |
| | | 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; |
| | |
| | | |
| | | protected final IRepositoryManager repositoryManager; |
| | | |
| | | protected final IPluginManager pluginManager; |
| | | |
| | | protected final TicketIndexer indexer; |
| | | |
| | | private final Cache<TicketKey, TicketModel> ticketsCache; |
| | |
| | | */ |
| | | public ITicketService( |
| | | IRuntimeManager runtimeManager, |
| | | IPluginManager pluginManager, |
| | | INotificationManager notificationManager, |
| | | IUserManager userManager, |
| | | IRepositoryManager repositoryManager) { |
| | |
| | | this.log = LoggerFactory.getLogger(getClass()); |
| | | this.settings = runtimeManager.getSettings(); |
| | | this.runtimeManager = runtimeManager; |
| | | this.pluginManager = pluginManager; |
| | | this.notificationManager = notificationManager; |
| | | this.userManager = userManager; |
| | | this.repositoryManager = repositoryManager; |
| | |
| | | public final TicketModel getTicket(RepositoryModel repository, long ticketId) { |
| | | TicketKey key = new TicketKey(repository, ticketId); |
| | | TicketModel ticket = ticketsCache.getIfPresent(key); |
| | | |
| | | |
| | | // if ticket not cached |
| | | if (ticket == null) { |
| | | // load & cache ticket |
| | | //load ticket |
| | | ticket = getTicketImpl(repository, ticketId); |
| | | if (ticket.hasPatchsets()) { |
| | | Repository r = repositoryManager.getRepository(repository.name); |
| | | try { |
| | | Patchset patchset = ticket.getCurrentPatchset(); |
| | | DiffStat diffStat = DiffUtils.getDiffStat(r, patchset.base, patchset.tip); |
| | | // diffstat could be null if we have ticket data without the |
| | | // commit objects. e.g. ticket replication without repo |
| | | // mirroring |
| | | if (diffStat != null) { |
| | | ticket.insertions = diffStat.getInsertions(); |
| | | ticket.deletions = diffStat.getDeletions(); |
| | | } |
| | | } finally { |
| | | r.close(); |
| | | } |
| | | } |
| | | // if ticket exists |
| | | if (ticket != null) { |
| | | if (ticket.hasPatchsets()) { |
| | | Repository r = repositoryManager.getRepository(repository.name); |
| | | try { |
| | | Patchset patchset = ticket.getCurrentPatchset(); |
| | | DiffStat diffStat = DiffUtils.getDiffStat(r, patchset.base, patchset.tip); |
| | | // diffstat could be null if we have ticket data without the |
| | | // commit objects. e.g. ticket replication without repo |
| | | // mirroring |
| | | if (diffStat != null) { |
| | | ticket.insertions = diffStat.getInsertions(); |
| | | ticket.deletions = diffStat.getDeletions(); |
| | | } |
| | | } finally { |
| | | r.close(); |
| | | } |
| | | } |
| | | //cache ticket |
| | | ticketsCache.put(key, ticket); |
| | | } |
| | | } |
| | |
| | | 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; |
| | |
| | | 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; |