package eu.europa.esig.dss.validation.process.qmatrix.tl;
import java.util.Date;
import eu.europa.esig.dss.jaxb.detailedreport.XmlTLAnalysis;
import eu.europa.esig.dss.jaxb.diagnostic.XmlTrustedList;
import eu.europa.esig.dss.validation.policy.ValidationPolicy;
import eu.europa.esig.dss.validation.process.Chain;
import eu.europa.esig.dss.validation.process.ChainItem;
import eu.europa.esig.dss.validation.process.qmatrix.tl.checks.TLFreshnessCheck;
import eu.europa.esig.dss.validation.process.qmatrix.tl.checks.TLNotExpiredCheck;
import eu.europa.esig.dss.validation.process.qmatrix.tl.checks.TLVersionCheck;
import eu.europa.esig.dss.validation.process.qmatrix.tl.checks.TLWellSignedCheck;
import eu.europa.esig.jaxb.policy.LevelConstraint;
import eu.europa.esig.jaxb.policy.TimeConstraint;
import eu.europa.esig.jaxb.policy.ValueConstraint;
public class TLValidationBlock extends Chain<XmlTLAnalysis> {
private final XmlTrustedList currentTL;
private final Date currentTime;
private final ValidationPolicy policy;
public TLValidationBlock(XmlTrustedList currentTL, Date currentTime, ValidationPolicy policy) {
super(new XmlTLAnalysis());
result.setCountryCode(currentTL.getCountryCode());
this.currentTL = currentTL;
this.currentTime = currentTime;
this.policy = policy;
}
@Override
protected void initChain() {
ChainItem<XmlTLAnalysis> item = firstItem = tlFreshness();
item = item.setNextItem(tlNotExpired());
item = item.setNextItem(tlVersion());
item = item.setNextItem(tlWellSigned());
}
@Override
protected void addAdditionalInfo() {
collectErrorsWarnsInfos();
}
private ChainItem<XmlTLAnalysis> tlFreshness() {
TimeConstraint constraint = policy.getTLFreshnessConstraint();
return new TLFreshnessCheck(result, currentTL, currentTime, constraint);
}
private ChainItem<XmlTLAnalysis> tlNotExpired() {
LevelConstraint constraint = policy.getTLNotExpiredConstraint();
return new TLNotExpiredCheck(result, currentTL, currentTime, constraint);
}
private ChainItem<XmlTLAnalysis> tlVersion() {
ValueConstraint constraint = policy.getTLVersionConstraint();
return new TLVersionCheck(result, currentTL, currentTime, constraint);
}
private ChainItem<XmlTLAnalysis> tlWellSigned() {
LevelConstraint constraint = policy.getTLWellSignedConstraint();
return new TLWellSignedCheck(result, currentTL, constraint);
}
}