public Builder fromChangeItemPreservingFromValues(ChangeHistoryItem changeItem) { this.fromChangeItemWithoutPreservingChanges(changeItem); this.fromValues = Maps.newHashMap(changeItem.getFroms()); return this; }
public Builder fromChangeItem(ChangeHistoryItem changeItem) { this.fromChangeItemWithoutPreservingChanges(changeItem); this.fromValues = Maps.newHashMap(changeItem.getFroms()); this.toValues = Maps.newHashMap(changeItem.getTos()); return this; }
@Override public int hashCode() { return new HashCodeBuilder() .append(getId()) .append(getChangeGroupId()) .append(getField()) .append(getUserKey()) .append(getProjectId()) .append(getIssueId()) .append(getIssueKey()) .append(getCreated()) .append(getNextChangeCreated()) .append(getFroms()) .append(getTos()) .toHashCode(); }
/** * * @param items The list of {@link com.atlassian.jira.issue.changehistory.ChangeHistoryItem}'s that represent all chnages in the current issue * @param initialChangeItem The synthetic ChangeHistoryItem previously built * @param created Timestamp of the first itrem in the list * @return The ChangeHistoryItem that accurately reflects the initial state of the issue * * The algorithm is pretty straightforward, revers the list and then iterate through reversing each change from the initial list. What is left is the * original state. */ private ChangeHistoryItem fixInitialChangeItemToValue(List <ChangeHistoryItem> items, ChangeHistoryItem initialChangeItem, Timestamp created) { Map<String, String> newToValues = Maps.newHashMap(initialChangeItem.getTos()); newToValues.remove(emptyValue); for (ChangeHistoryItem item : Lists.reverse(items)) { newToValues.putAll(item.getFroms()); for (String key: item.getTos().keySet()) { newToValues.remove(key); } } if (newToValues.isEmpty()) { newToValues.put(emptyValue, EMPTY_STRING); } return new ChangeHistoryItem.Builder().fromChangeItemWithoutPreservingChanges(initialChangeItem). withTos(newToValues).nextChangeOn(created).build(); }
@Override public boolean equals(Object o) { if(o == null || !(o instanceof ChangeHistoryItem)) { return false; } ChangeHistoryItem rhs = (ChangeHistoryItem)o; return new EqualsBuilder() .append(getId(), rhs.getId()) .append(getChangeGroupId(), rhs.getChangeGroupId()) .append(getField(), rhs.getField()) .append(getUserKey(), rhs.getUserKey()) .append(getProjectId(), rhs.getProjectId()) .append(getIssueId(), rhs.getIssueId()) .append(getIssueKey(), rhs.getIssueKey()) .append(getCreated(), rhs.getCreated()) .append(getNextChangeCreated(), rhs.getNextChangeCreated()) .append(getFroms(), rhs.getFroms()) .append(getTos(), rhs.getTos()) .isEquals(); }
protected ChangeHistoryItem createChangeItem(ChangeHistoryItem changeItem, Timestamp nextChange) { ChangeHistoryItem.Builder builder = new ChangeHistoryItem.Builder().fromChangeItem(changeItem). nextChangeOn(nextChange); if (changeItem.getTos().isEmpty()) { builder.to("", emptyValue); } if (changeItem.getFroms().isEmpty()) { builder.changedFrom("", emptyValue); } return builder.build(); }
changeItems.add(fixInitialChangeItem(initialChangeItem, items.get(0).getFroms(), items.get(0).getCreated())); PeekingIterator<ChangeHistoryItem> iterator = Iterators.peekingIterator(items.iterator()); while (iterator.hasNext())
Map<String, String> removals = nextItem.getFroms(); Map <String, String> additions = nextItem.getTos(); Map <String, String> effectiveTos = Maps.newHashMap();