Once you have a Jira issue, you can obtain it's change log, for instance to find it's resolved date.
A given change entry has a map, much like JiraIssueProperties:
[GenericEntity:ChangeItem][oldvalue,null][group,11438][newvalue,null] [field,Assignee][oldstring,tchiverton][newstring,rfry][id,12159] [fieldtype,jira]
and a datestamp, .getTimePerformed().
Each instance of a change entry may have a different value for field, such as status, and a corresponding set of newvalues, such as 'Resolved'.
You can obtain the changes for an issue thus:
private Date findResolvedDate(GenericValue issue,User remoteUser) throws GenericEntityException {
DefaultActionManager am = new DefaultActionManager();
List changes = am.getChangeHistory(issue,remoteUser);
Iterator it = changes.iterator();
while (it.hasNext()) {
ChangeHistory change = (ChangeHistory) it.next();
List chng = change.getChangeItems();
Date chgTime = change.getTimePerformed();
// -- get last status change - it is the most recent ---
for (int i = chng.size()-1 ; i>=0 ; i--) {
GenericEntity chgItem = (GenericEntity) chng.get(i);
//log.debug(" change items ="+chgItem +", date="+chgTime);
if (chgItem.getString("field").equalsIgnoreCase("status") &&
chgItem.getString("newstring").equalsIgnoreCase("resolved")
) {
log.debug(" resolved @"+chgTime);
return chgTime;
}
}
}
Labels:

1 Comment
Hide/Show CommentsJun 23, 2005
E Joseph Guay
Please note that if you want to find the last change date, you need to iterate over the changes. (This was a mistake in the original code that I shared earlier.
Here is a snippet to find the date stamp for the last status change:
lastStatusChange = issue.getTimestamp("created");
try {
changes = am.getChangeHistory(issue,user);
} catch (GenericEntityException e) {
//throw new DataAccessException(e);
changes = null;
}
if (changes!=null) {
// – get last status change - it is the most recent —
getlastchange: for (int k = changes.size()1; k>=0; k-) {
ChangeHistory change = (ChangeHistory) changes.get(k);
List chng = change.getChangeItems();
Date chgTime = change.getTimePerformed();
for (int i = 0 ; i<chng.size() ; i++) {
;
GenericEntity chgItem = (GenericEntity) chng.get
if (chgItem.getString("field").equalsIgnoreCase("status"))
}
}
}