import static java.util.Objects.requireNonNull;
import com.google.common.annotations.Beta;
-import javax.annotation.concurrent.ThreadSafe;
import org.eclipse.jdt.annotation.NonNullByDefault;
+import org.opendaylight.yangtools.concepts.Variant;
/**
* Abstract base class for implementing validators.
*/
@Beta
@NonNullByDefault
-@ThreadSafe
public abstract class AbstractCanonicalValueValidator<T extends DerivedString<T>, V extends T>
implements CanonicalValueValidator<T, V> {
private static final ClassValue<Boolean> IMPLEMENTATIONS = new AbstractCanonicalValueImplementationValidator() {
}
@Override
- public final V validateRepresentation(final T value) {
+ public final Variant<T, CanonicalValueViolation> validateRepresentation(final T value) {
return validatedClass.isAssignableFrom(value.validator().getValidatedRepresentationClass())
- ? validatedClass.cast(value) : validate(value);
+ ? Variant.ofFirst(validatedClass.cast(value)) : validate(value);
}
@Override
- public final V validateRepresentation(final T value, final String canonicalString) {
+ public final Variant<T, CanonicalValueViolation> validateRepresentation(final T value,
+ final String canonicalString) {
return validatedClass.isAssignableFrom(value.validator().getValidatedRepresentationClass())
- ? validatedClass.cast(value) : validate(value, requireNonNull(canonicalString));
+ ? Variant.ofFirst(validatedClass.cast(value)) : validate(value, requireNonNull(canonicalString));
}
/**
* provide a validation algorithm which does not rely on canonical strings but works on representation state only.
*
* @param value Representation value
- * @return Validated representation
+ * @return Validated representation or CanonicalValueViolation
* @throws NullPointerException if {@code value} is null
- * @throws IllegalArgumentException if the value does not meet validation criteria.
*/
- protected V validate(final T value) {
+ protected Variant<T, CanonicalValueViolation> validate(final T value) {
return validate(value, value.toCanonicalString());
}
* @param canonicalString Canonical string matching the representation value
* @return Validated representation
* @throws NullPointerException if {@code value} or {@code canonicalString} is null.
- * @throws IllegalArgumentException if the value does not meet validation criteria.
*/
- protected abstract V validate(T value, String canonicalString);
+ protected abstract Variant<T, CanonicalValueViolation> validate(T value, String canonicalString);
}