/*
* Copyright (C) 2006-2016 DLR, Germany
*
* All rights reserved
*
* http://www.rcenvironment.de/
*/
package de.rcenvironment.core.component.validation.api;
import de.rcenvironment.core.utils.common.StringUtils;
/**
* Messages to inform about validation results of a {@link WorkflowNodeValidator}.
*
* @author Christian Weiss
* @author Jascha Riedel
*/
public class ComponentValidationMessage {
/**
* The type of {@link ComponentValidationMessage}.
*
* @author Christian Weiss
*/
public enum Type {
/** Warning message type. */
WARNING,
/** ERROR message type. */
ERROR;
}
private final Type type;
private final String property;
private final String relativeMessage;
private final String absoluteMessage;
private final boolean revalidateOnWorkflowStart;
public ComponentValidationMessage(Type type, final String property, final String relativeMessage, final String absoluteMessage) {
this(type, property, relativeMessage, absoluteMessage, false);
}
public ComponentValidationMessage(Type type, final String property, final String relativeMessage, final String absoluteMessage,
boolean revalidateOnWorkflowStart) {
this.type = type;
this.property = property;
this.relativeMessage = relativeMessage;
this.absoluteMessage = absoluteMessage;
this.revalidateOnWorkflowStart = revalidateOnWorkflowStart;
}
public Type getType() {
return type;
}
public String getProperty() {
return property;
}
public String getRelativeMessage() {
return relativeMessage;
}
public String getAbsoluteMessage() {
return absoluteMessage;
}
public boolean isRevalidateOnWorkflowStart() {
return revalidateOnWorkflowStart;
}
@Override
public boolean equals(final Object obj) {
boolean result = super.equals(obj);
if (obj instanceof ComponentValidationMessage) {
final ComponentValidationMessage other = (ComponentValidationMessage) obj;
final String thisString = "" + property + relativeMessage + absoluteMessage;
final String otherString = "" + other.property + other.relativeMessage + other.absoluteMessage;
result = thisString.equals(otherString);
}
return result;
}
@Override
public int hashCode() {
// TODO (p3) review: this doesn't make much sense; concatenating first, then applying nullSafe()? - misc_ro
return StringUtils.nullSafe(property + relativeMessage + absoluteMessage).hashCode();
}
@Override
public String toString() {
if (property != null && !property.isEmpty()
&& relativeMessage != null && !relativeMessage.isEmpty()) {
return StringUtils.format("%s: %s", property, relativeMessage);
} else {
return absoluteMessage;
}
}
}