package azkaban.project.validator;
import java.util.HashSet;
import java.util.Set;
/**
* The result of a project validation generated by a {@link ProjectValidator}. It contains
* an enum of type {@link ValidationStatus} representing whether the validation passes,
* generates warnings, or generates errors. Accordingly, three sets of String are also
* maintained, storing the messages generated by the {@link ProjectValidator} at both
* {@link ValidationStatus#WARN} and {@link ValidationStatus#ERROR} level, as well as
* information messages associated with both levels.
*/
public class ValidationReport {
protected ValidationStatus _status;
protected Set<String> _infoMsgs;
protected Set<String> _warningMsgs;
protected Set<String> _errorMsgs;
public ValidationReport() {
_status = ValidationStatus.PASS;
_infoMsgs = new HashSet<String>();
_warningMsgs = new HashSet<String>();
_errorMsgs = new HashSet<String>();
}
/**
* Add an information message associated with warning messages
*
* @param msgs
*/
public void addWarnLevelInfoMsg(String msg) {
if (msg != null) {
_infoMsgs.add("WARN" + msg);
}
}
/**
* Add an information message associated with error messages
*
* @param msgs
*/
public void addErrorLevelInfoMsg(String msg) {
if (msg != null) {
_infoMsgs.add("ERROR" + msg);
}
}
/**
* Add a message with status level being {@link ValidationStatus#WARN}
*
* @param msgs
*/
public void addWarningMsgs(Set<String> msgs) {
if (msgs != null) {
_warningMsgs.addAll(msgs);
if (!msgs.isEmpty() && _errorMsgs.isEmpty()) {
_status = ValidationStatus.WARN;
}
}
}
/**
* Add a message with status level being {@link ValidationStatus#ERROR}
*
* @param msgs
*/
public void addErrorMsgs(Set<String> msgs) {
if (msgs != null) {
_errorMsgs.addAll(msgs);
if (!msgs.isEmpty()) {
_status = ValidationStatus.ERROR;
}
}
}
/**
* Retrieve the status of the report.
*
* @return
*/
public ValidationStatus getStatus() {
return _status;
}
/**
* Retrieve the list of information messages.
*
* @return
*/
public Set<String> getInfoMsgs() {
return _infoMsgs;
}
/**
* Retrieve the messages associated with status level {@link ValidationStatus#WARN}
*
* @return
*/
public Set<String> getWarningMsgs() {
return _warningMsgs;
}
/**
* Retrieve the messages associated with status level {@link ValidationStatus#ERROR}
*
* @return
*/
public Set<String> getErrorMsgs() {
return _errorMsgs;
}
/**
* Return the severity level this information message is associated with.
*
* @param msg
* @return
*/
public static ValidationStatus getInfoMsgLevel(String msg) {
if (msg.startsWith("ERROR")) {
return ValidationStatus.ERROR;
}
if (msg.startsWith("WARN")) {
return ValidationStatus.WARN;
}
return ValidationStatus.PASS;
}
/**
* Get the raw information message.
*
* @param msg
* @return
*/
public static String getInfoMsg(String msg) {
if (msg.startsWith("ERROR")) {
return msg.replaceFirst("ERROR", "");
}
if (msg.startsWith("WARN")) {
return msg.replaceFirst("WARN", "");
}
return msg;
}
}