package scrum.server.release;
import ilarkesto.base.time.Date;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import scrum.client.common.ReferenceSupport;
import scrum.server.admin.User;
import scrum.server.common.Numbered;
import scrum.server.issues.Issue;
import scrum.server.issues.IssueDao;
public class Release extends GRelease implements Numbered, ReferenceSupport {
// --- dependencies ---
private static IssueDao issueDao;
public static void setIssueDao(IssueDao issueDao) {
Release.issueDao = issueDao;
}
// --- ---
public boolean isMajor() {
return !isBugfix();
}
public boolean isBugfix() {
return isParentReleaseSet();
}
public List<Issue> getIssues() {
List<Issue> ret = new ArrayList<Issue>();
ret.addAll(issueDao.getIssuesByAffectedRelease(this));
ret.addAll(issueDao.getIssuesByFixRelease(this));
return ret;
}
@Override
public void updateNumber() {
if (getNumber() == 0) setNumber(getProject().generateReleaseNumber());
}
@Override
public String getReference() {
return scrum.client.release.Release.REFERENCE_PREFIX + getNumber();
}
public String getReferenceAndLabel() {
return getReference() + " " + getLabel();
}
@Override
public boolean isVisibleFor(User user) {
return getProject().isVisibleFor(user);
}
public boolean isEditableBy(User user) {
return getProject().isEditableBy(user);
}
@Override
public String toString() {
return getReferenceAndLabel();
}
@Override
public void ensureIntegrity() {
super.ensureIntegrity();
updateNumber();
}
public static final Comparator<Release> DATE_COMPARATOR = new Comparator<Release>() {
@Override
public int compare(Release ra, Release rb) {
Date a = ra.getReleaseDate();
Date b = rb.getReleaseDate();
if (a == null && b == null) return 0;
if (a == null) return 1;
if (b == null) return -1;
return a.compareTo(b);
}
};
public static final Comparator<Release> DATE_REVERSE_COMPARATOR = new Comparator<Release>() {
@Override
public int compare(Release ra, Release rb) {
return -DATE_COMPARATOR.compare(ra, rb);
}
};
}