package eu.europa.esig.dss.validation.process.qmatrix.qualification.checks.qscd.tl;
import java.util.List;
import eu.europa.esig.dss.utils.Utils;
import eu.europa.esig.dss.validation.process.Condition;
import eu.europa.esig.dss.validation.process.qmatrix.qualification.checks.ServiceQualification;
import eu.europa.esig.dss.validation.process.qmatrix.qualification.checks.qscd.AbstractQSCDCondition;
import eu.europa.esig.dss.validation.reports.wrapper.TrustedServiceWrapper;
public class QSCDByTL extends AbstractQSCDCondition {
private final List<TrustedServiceWrapper> trustedServices;
private final Condition qualified;
private final Condition qscdFromCertificate;
public QSCDByTL(List<TrustedServiceWrapper> trustedServices, Condition qualified, Condition qscdFromCertificate) {
this.trustedServices = trustedServices;
this.qualified = qualified;
this.qscdFromCertificate = qscdFromCertificate;
}
@Override
public boolean check() {
if (Utils.isCollectionEmpty(trustedServices) || !qualified.check()) {
return false;
} else {
for (TrustedServiceWrapper trustedService : trustedServices) {
List<String> capturedQualifiers = trustedService.getCapturedQualifiers();
// If overrules
if (Utils.isCollectionNotEmpty(capturedQualifiers)) {
if (ServiceQualification.isQcNoQSCD(capturedQualifiers)) {
return false;
}
if (ServiceQualification.isQcWithQSCD(capturedQualifiers) || ServiceQualification.isQcQSCDManagedOnBehalf(capturedQualifiers)) {
return true;
}
}
}
return qscdFromCertificate.check();
}
}
}