/** * Validate {@code candidate} checking if its value is present in the array supplied. */ @Override public void validate(Metadata<Enum> metadata, Object candidate) throws AssertionError { throwExceptionOnEmptyArray(metadata); boolean valid = false; String[] values = metadata.getAnnotation().value(); for (String value : values) { if (candidate == null) break; if (value.equals(candidate.toString())) { valid = true; break; } } String input = String.valueOf(candidate); if (input.isEmpty()) input = "empty"; String errorMessage = input + " not matches with any of specified values: " + Arrays.toString(values); if (!valid) throw new AssertionError(errorMessage); }
/** * Return as legal value a random one from the array supplied, or if legal value was set then return that. */ @Override public Object legal(Metadata<Enum> metadata) { throwExceptionOnEmptyArray(metadata); Enum enumAnnotation = metadata.getAnnotation(); String defaultLegal = enumAnnotation.legal(); if (!defaultLegal.isEmpty()) { return safetyCast.with(defaultLegal, metadata.getType()); } int length = enumAnnotation.value().length; int randomIndex = new Random().nextInt(length); String result = enumAnnotation.value()[randomIndex]; return safetyCast.with(result, metadata.getType()); }
/** * Return empty if type is string, otherwise return 0. */ @Override public Object illegal(Metadata<Enum> metadata) { throwExceptionOnEmptyArray(metadata); String defaultOptional = metadata.getAnnotation().illegal(); Type type = metadata.getType(); if (!defaultOptional.isEmpty()) { return safetyCast.with(defaultOptional, metadata.getType()); } else if (type.equals(String.class)) { return safetyCast.with("", type); } else { return safetyCast.with(0, type); } }