@Override void validate(final byte[] value) { // FIXME: throw an exception capturing the constraint violation checkArgument(lengthConstraint.getAllowedRanges().contains(value.length), "Value length %s does not match constraint %s", value.length, lengthConstraint); } }
void validate(final String str) { if (lengthConstraint != null) { checkArgument(lengthConstraint.getAllowedRanges().contains(str.length()), "String '%s' does not match allowed length constraint %s", lengthConstraint); } } }
@Override void validate(final byte[] value) { // FIXME: throw an exception capturing the constraint violation checkArgument(lengthConstraint.getAllowedRanges().contains(value.length), "Value length %s does not match constraint %s", value.length, lengthConstraint); } }
void validate(final String str) { if (lengthConstraint != null) { checkArgument(lengthConstraint.getAllowedRanges().contains(str.length()), "String '%s' does not match allowed length constraint %s", lengthConstraint); } } }
private static String createLengthString(final LengthConstraint constraint) { return new ArrayList<>(constraint.getAllowedRanges().asRanges()).toString(); }
private static String createLengthString(final LengthConstraint constraint) { return new ArrayList<>(constraint.getAllowedRanges().asRanges()).toString(); }
private static Collection<String> createExpressions(final LengthConstraint constraint) { final Set<Range<Integer>> constraints = constraint.getAllowedRanges().asRanges(); final Collection<String> ret = new ArrayList<>(constraints.size()); for (Range<Integer> l : constraints) { final StringBuilder sb = new StringBuilder("length >"); // We have to deal with restrictions being out of integer's range if (l.lowerEndpoint() <= Integer.MAX_VALUE) { sb.append('='); } sb.append(' ').append(l.lowerEndpoint()); final int max = l.upperEndpoint(); if (max < Integer.MAX_VALUE) { sb.append(" && length <= ").append(max); } ret.add(sb.toString()); } return ret; }
private static Collection<String> createExpressions(final LengthConstraint constraint) { final Set<Range<Integer>> constraints = constraint.getAllowedRanges().asRanges(); final Collection<String> ret = new ArrayList<>(constraints.size()); for (Range<Integer> l : constraints) { // We have to deal with restrictions being out of integer's range final int min = l.lowerEndpoint().intValue(); final int max = l.upperEndpoint().intValue(); if (min > 0 || max < Integer.MAX_VALUE) { final StringBuilder sb = new StringBuilder().append("length "); if (min != max) { sb.append('>'); if (min <= Integer.MAX_VALUE) { sb.append('='); } sb.append(' ').append(min); if (max < Integer.MAX_VALUE) { sb.append(" && length <= ").append(max); } } else { // Single-value, use a direct comparison sb.append("== ").append(min); } ret.add(sb.toString()); } else { // This range is implicitly capped by String/byte[] length returns LOG.debug("Constraint {} implied by int type value domain, skipping", l); } } return ret; }
private void emitLength(final LengthConstraint constraint) { super.writer.startLengthNode(toLengthString(constraint.getAllowedRanges())); constraint.getErrorMessage().ifPresent(this::emitErrorMessageNode); constraint.getErrorAppTag().ifPresent(this::emitErrorAppTagNode); emitDocumentedNode(constraint); super.writer.endNode(); }
final Range<Integer> span = baseLengths.getAllowedRanges().span(); final RangeSet<Integer> baseRanges = baseLengths.getAllowedRanges(); for (Range<Integer> range : allowed.asRanges()) { if (!baseRanges.encloses(range)) {
final Range<Integer> span = baseLengths.getAllowedRanges().span(); final RangeSet<Integer> baseRanges = baseLengths.getAllowedRanges(); for (Range<Integer> range : allowed.asRanges()) { if (!baseRanges.encloses(range)) {