import nl.strohalm.cyclos.entities.accounts.guarantees.Certification; //导入方法依赖的package包/类
private void processCertifications(Calendar time, Certification.Status newStatus) {
time = DateHelper.truncate(time);
final Set fetch = new HashSet();
fetch.add(Certification.Relationships.BUYER);
fetch.add(Certification.Relationships.ISSUER);
fetch.add(Certification.Relationships.LOGS);
final CertificationQuery query = new CertificationQuery();
query.setResultType(ResultType.ITERATOR);
query.setFetch(fetch);
if (newStatus == Certification.Status.ACTIVE) {
query.setStartIn(Period.endingAt(time));
query.setStatusList(Collections.singletonList(Certification.Status.SCHEDULED));
} else {
time.add(Calendar.DATE, -1); // this is to discard the certifications expiring today
query.setEndIn(Period.endingAt(time));
query.setStatusList(Arrays.asList(Certification.Status.ACTIVE, Certification.Status.SUSPENDED));
}
final List certifications = search(query);
for (final Certification certification : certifications) {
if (newStatus == Certification.Status.ACTIVE) { // we must search for an already active certification
final Certification alreadyActiveCertification = getActiveCertification(certification.getGuaranteeType(), certification.getBuyer(), certification.getIssuer());
if (alreadyActiveCertification != null) {
newStatus = Certification.Status.SUSPENDED;
}
}
certification.setStatus(newStatus);
final CertificationLog log = certification.changeStatus(newStatus, null);
saveLog(log);
save(certification, false);
// Notify
memberNotificationHandler.certificationStatusChangedNotification(certification);
}
}