package eu.europa.esig.dss.validation.process.vpfswatsp.checks.vts.checks;
import java.text.MessageFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import eu.europa.esig.dss.DSSException;
import eu.europa.esig.dss.jaxb.detailedreport.XmlVTS;
import eu.europa.esig.dss.validation.TimestampReferenceCategory;
import eu.europa.esig.dss.validation.policy.rules.Indication;
import eu.europa.esig.dss.validation.policy.rules.SubIndication;
import eu.europa.esig.dss.validation.process.AdditionalInfo;
import eu.europa.esig.dss.validation.process.ChainItem;
import eu.europa.esig.dss.validation.process.MessageTag;
import eu.europa.esig.dss.validation.process.vpfswatsp.POEExtraction;
import eu.europa.esig.dss.validation.reports.wrapper.TokenProxy;
import eu.europa.esig.jaxb.policy.LevelConstraint;
public class POEExistsAtOrBeforeControlTimeCheck extends ChainItem<XmlVTS> {
private final TokenProxy token;
private final TimestampReferenceCategory referenceCategory;
private final Date controlTime;
private final POEExtraction poe;
public POEExistsAtOrBeforeControlTimeCheck(XmlVTS result, TokenProxy token, TimestampReferenceCategory referenceCategory, Date controlTime,
POEExtraction poe, LevelConstraint constraint) {
super(result, constraint);
this.token = token;
this.referenceCategory = referenceCategory;
this.controlTime = controlTime;
this.poe = poe;
}
@Override
protected boolean process() {
return poe.isPOEExists(token.getId(), controlTime);
}
@Override
protected String getAdditionalInfo() {
SimpleDateFormat sdf = new SimpleDateFormat(AdditionalInfo.DATE_FORMAT);
Object[] params = new Object[] { sdf.format(controlTime) };
return MessageFormat.format(AdditionalInfo.CONTROL_TIME, params);
}
@Override
protected MessageTag getMessageTag() {
if (TimestampReferenceCategory.CERTIFICATE.equals(referenceCategory)) {
return MessageTag.PSV_ITPOCOBCT;
} else if (TimestampReferenceCategory.REVOCATION.equals(referenceCategory)) {
return MessageTag.PSV_ITPORDAOBCT;
}
throw new DSSException("Probleme VTS");
}
@Override
protected MessageTag getErrorMessageTag() {
return MessageTag.PSV_ITPOOBCT_ANS;
}
@Override
protected Indication getFailedIndicationForConclusion() {
return Indication.INDETERMINATE;
}
@Override
protected SubIndication getFailedSubIndicationForConclusion() {
return SubIndication.NO_POE;
}
}