eu.europa.esig.dss.validation.process.Chain Maven / Gradle / Ivy
package eu.europa.esig.dss.validation.process;
import eu.europa.esig.dss.jaxb.detailedreport.XmlConclusion;
import eu.europa.esig.dss.jaxb.detailedreport.XmlConstraintsConclusion;
import eu.europa.esig.dss.validation.policy.rules.Indication;
import eu.europa.esig.jaxb.policy.Level;
import eu.europa.esig.jaxb.policy.LevelConstraint;
/**
* This class is part of the design pattern "Chain of responsibility".
*
* All sub-classes need to implement the method initChain() which will define the {@code ChainItem} (constraints) to
* execute.
*
* The chain is builded as follow with the method {@link eu.europa.esig.dss.validation.process.ChainItem#setNextItem}.
*
* @param
* the class used as result. The selected class must extend {@code XmlConstraintsConclusion} which contains
* some constraints and a conclusion.
*
* @see ChainItem
*/
public abstract class Chain {
/**
* The result object : a sub-class of {@code XmlConstraintsConclusion}
*/
protected final T result;
/**
* The first item to execute the chain
*/
protected ChainItem firstItem;
/**
* Common constructor
*
* @param newInstance
* a new instance of the result object
*/
protected Chain(T newInstance) {
this.result = newInstance;
}
/**
* This method allows to initialize and execute the complete chain until the first failure.
*
* @return the complete result with constraints and final conclusion for the chain
*/
public T execute() {
initChain();
if (firstItem != null) {
firstItem.execute();
}
if (result.getConclusion() == null) {
XmlConclusion conclusion = new XmlConclusion();
conclusion.setIndication(Indication.PASSED);
result.setConclusion(conclusion);
}
addAdditionalInfo();
return result;
}
protected void addAdditionalInfo() {
// default is empty
}
protected abstract void initChain();
// TODO uses validation policy
protected LevelConstraint getFailLevelConstraint() {
LevelConstraint constraint = new LevelConstraint();
constraint.setLevel(Level.FAIL);
return constraint;
}
}