Ich habe ein Jira-Plugin, das auf IssueEvent
s hören und auf verschiedene Statusübergänge reagieren muss (wie in "Zu erledigen -> In Bearbeitung", "In Bearbeitung -> Fertig "usw.). In den meisten Fällen müssen dazu sowohl der aktuelle als auch der vorherige Ausgabestatus bekannt sein. Allerdings gibt es keine offensichtliche API, um das letzte bisschen Information von der IssueEvent
zu bekommen.Erhalte den vorherigen Ausgabestatus im Event-Handler (Jira 7.x)
Mein Setup ist ziemlich einfach:
@Named("myEventListener")
public class JiraChangeListener implements InitializingBean, DisposableBean {
@ComponentImport
private final EventPublisher eventPublisher;
@ComponentImport
private final CustomFieldManager fieldManager;
@ComponentImport
private final IssueManager issueManager;
@Inject
public JiraChangeListener(EventPublisher publisher, CustomFieldManager fieldManager, IssueManager issueManager) {
this.eventPublisher = publisher;
this.fieldManager = fieldManager;
this.issueManager = issueManager;
}
@EventListener
public void onIssueEvent(IssueEvent event) {
Issue issue = event.getIssue();
long eventType = event.getEventTypeId();
String issueStatus = issue.getStatusId(); //the *current* issue status
//[read various internal plugin settings]
//now handle the event
if (eventType == EventType.ISSUE_CREATED_ID) {
//triggered upon creation; we don't need the old status here
if (apiAvailable && issueStatus.equals(triggerStatus)) {
//we can do stuff (apiAvailable) and we should do stuff (issueStatus == triggerStatus)
doStuff(issue);
}
}
else if (eventType == EventType.ISSUE_GENERICEVENT_ID) {
//triggered upon any status transition (and possibly other actions);
//need to see if the status has actually been modified
String oldStatus = [???]; //FIXME: need to get the previous status here
boolean statusChanged = ! issueStatus.equals(oldStatus);
if (apiAvailable && statusChanged && issueStatus.equals(triggerStatus)) {
//we can do stuff (apiAvailable && statusChanged) and we should do stuff (issueStatus == triggerStatus)
doStuff(issue);
}
}
}
}
So ist der einzige Haken ist, mit der Zeile, die sagt:
String oldStatus = [???];
Was die richtige Art und Weise ist programmatisch die Ausgabe der vorherigen Status zu erhalten, oder auf andere Weise identifizieren, dass das Ereignis empfangen wurde weil der Status des Problems geändert hat?
Beachten Sie, dass ich mit Jira 7.x arbeite. Die Unterstützung für frühere Jira-Versionen ist kein Problem.