*/
package org.opendaylight.yangtools.yang.data.impl.codec;
-import static com.google.common.base.Preconditions.checkArgument;
-
-import com.google.common.base.Strings;
import java.util.regex.Pattern;
import org.opendaylight.yangtools.yang.model.api.type.PatternConstraint;
CompiledPatternContext(final PatternConstraint yangConstraint) {
pattern = Pattern.compile("^" + yangConstraint.getRegularExpression() + "$");
- final String yangMessage = yangConstraint.getErrorMessage();
- if (Strings.isNullOrEmpty(yangMessage)) {
- errorMessage = "Value %s does not match regular expression <" + pattern.pattern() + ">";
- } else {
- errorMessage = yangMessage;
- }
+ errorMessage = yangConstraint.getErrorMessage().orElse(null);
}
- public void validate(final String str) {
- checkArgument(pattern.matcher(str).matches(), errorMessage, str);
+ void validate(final String str) {
+ if (!pattern.matcher(str).matches()) {
+ if (errorMessage != null) {
+ throw new IllegalArgumentException(errorMessage);
+ }
+
+ throw new IllegalArgumentException("Value " + str + "does not match regular expression '"
+ + pattern.pattern() + "'");
+ }
}
}
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import static org.opendaylight.yangtools.yang.data.impl.codecs.TypeDefinitionAwareCodecTestHelper.getCodec;
fail("Exception should have been thrown.");
} catch (final IllegalArgumentException ex) {
LOG.debug("IllegalArgumentException was thrown as expected: {}", ex);
- assertTrue(ex.getMessage().contains(
- "Supplied value does not match the regular expression ^[A-Z]+$. [abcd]"));
+ assertEquals("Supplied value does not match the regular expression ^[A-Z]+$.", ex.getMessage());
}
}
}
*/
package org.opendaylight.yangtools.yang.model.api;
+import java.util.Optional;
+
/**
* Contains methods which retrieve values for description, error message, error app tag and reference (to some external
* definition, resource or similar).
public interface ConstraintMetaDefinition extends DocumentedNode {
/**
- * Returns the value of the argument of YANG <code>error-app-tag</code>
- * keyword.
+ * Returns the value of the argument of YANG <code>error-app-tag</code> keyword.
*
- * @return string with the application tag
+ * @return string with the application tag, or empty if it was not provided.
*/
- String getErrorAppTag();
+ Optional<String> getErrorAppTag();
/**
- * Returns the value of the argument of YANG <code>error-message</code>
- * keyword.
+ * Returns the value of the argument of YANG <code>error-message</code> keyword.
*
- * @return string with the error message
+ * @return string with the error message, or empty if it was not provided.
*/
- String getErrorMessage();
+ Optional<String> getErrorMessage();
}
if (!list.isEmpty()) {
super.writer.startRangeNode(toRangeString(list));
final RangeConstraint first = list.iterator().next();
- emitErrorMessageNode(first.getErrorMessage());
- emitErrorAppTagNode(first.getErrorAppTag());
+ first.getErrorMessage().ifPresent(this::emitErrorMessageNode);
+ first.getErrorAppTag().ifPresent(this::emitErrorAppTagNode);
emitDescriptionNode(first.getDescription());
emitReferenceNode(first.getReference());
super.writer.endNode();
private void emitLength(final LengthConstraint constraint) {
super.writer.startLengthNode(toLengthString(constraint.getAllowedRanges()));
- emitErrorMessageNode(constraint.getErrorMessage());
- emitErrorAppTagNode(constraint.getErrorAppTag());
+ constraint.getErrorMessage().ifPresent(this::emitErrorMessageNode);
+ constraint.getErrorAppTag().ifPresent(this::emitErrorAppTagNode);
emitDescriptionNode(constraint.getDescription());
emitReferenceNode(constraint.getReference());
super.writer.endNode();
private void emitPatternNode(final PatternConstraint pattern) {
super.writer.startPatternNode(pattern.getRawRegularExpression());
- // FIXME: BUG-2444: Optional
- emitErrorMessageNode(pattern.getErrorMessage());
- // FIXME: BUG-2444: Optional
- emitErrorAppTagNode(pattern.getErrorAppTag());
+ pattern.getErrorMessage().ifPresent(this::emitErrorMessageNode);
+ pattern.getErrorAppTag().ifPresent(this::emitErrorAppTagNode);
emitDescriptionNode(pattern.getDescription());
emitModifier(pattern.getModifier());
super.writer.endNode();
private void emitMust(@Nullable final MustDefinition mustCondition) {
if (mustCondition != null && mustCondition.getXpath() != null) {
super.writer.startMustNode(mustCondition.getXpath());
- emitErrorMessageNode(mustCondition.getErrorMessage());
- emitErrorAppTagNode(mustCondition.getErrorAppTag());
+ mustCondition.getErrorMessage().ifPresent(this::emitErrorMessageNode);
+ mustCondition.getErrorAppTag().ifPresent(this::emitErrorAppTagNode);
emitDescriptionNode(mustCondition.getDescription());
emitReferenceNode(mustCondition.getReference());
super.writer.endNode();
}
private void emitErrorMessageNode(@Nullable final String input) {
- if (input != null && !input.isEmpty()) {
- super.writer.startErrorMessageNode(input);
- super.writer.endNode();
- }
+ super.writer.startErrorMessageNode(input);
+ super.writer.endNode();
}
private void emitErrorAppTagNode(final String input) {
- if (input != null && !input.isEmpty()) {
- super.writer.startErrorAppTagNode(input);
- super.writer.endNode();
- }
+ super.writer.startErrorAppTagNode(input);
+ super.writer.endNode();
}
private void emitMinElementsNode(final Integer min) {
}
@Override
- public String getErrorAppTag() {
- return errorAppTag;
+ public Optional<String> getErrorAppTag() {
+ return Optional.ofNullable(errorAppTag);
}
@Override
- public String getErrorMessage() {
- return errorMessage;
+ public Optional<String> getErrorMessage() {
+ return Optional.ofNullable(errorMessage);
}
@Override
}
@Override
- public String getErrorAppTag() {
- return errorAppTag;
+ public Optional<String> getErrorAppTag() {
+ return Optional.ofNullable(errorAppTag);
}
@Override
- public String getErrorMessage() {
- return errorMessage;
+ public Optional<String> getErrorMessage() {
+ return Optional.ofNullable(errorMessage);
}
@Override
import com.google.common.collect.ImmutableRangeSet;
import com.google.common.collect.Range;
import com.google.common.collect.RangeSet;
+import java.util.Optional;
import org.opendaylight.yangtools.yang.model.api.type.LengthConstraint;
final class JavaLengthConstraints {
}
@Override
- public String getErrorMessage() {
- return null;
+ public Optional<String> getErrorMessage() {
+ return Optional.empty();
}
@Override
- public String getErrorAppTag() {
- return null;
+ public Optional<String> getErrorAppTag() {
+ return Optional.empty();
}
@Override
? ((UnresolvedNumber)min).resolveRange(baseRangeConstraints) : min;
builder.add(BaseConstraints.newRangeConstraint(rMin, rMax, Optional.ofNullable(c.getDescription()),
- Optional.ofNullable(c.getReference()), c.getErrorAppTag(), c.getErrorMessage()));
+ Optional.ofNullable(c.getReference()), c.getErrorAppTag().orElse(null),
+ c.getErrorMessage().orElse(null)));
} else {
builder.add(c);
}
c, clazz.getSimpleName()), e);
}
builder.add(BaseConstraints.newRangeConstraint(min, max, Optional.ofNullable(c.getDescription()),
- Optional.ofNullable(c.getReference()), c.getErrorAppTag(), c.getErrorMessage()));
+ Optional.ofNullable(c.getReference()), c.getErrorAppTag().orElse(null),
+ c.getErrorMessage().orElse(null)));
} else {
builder.add(c);
}
import com.google.common.collect.ImmutableRangeSet;
import com.google.common.collect.RangeSet;
+import java.util.Optional;
import org.opendaylight.yangtools.yang.model.api.ConstraintMetaDefinition;
import org.opendaylight.yangtools.yang.model.api.type.LengthConstraint;
}
@Override
- public String getErrorAppTag() {
+ public Optional<String> getErrorAppTag() {
return meta.getErrorAppTag();
}
@Override
- public String getErrorMessage() {
+ public Optional<String> getErrorMessage() {
return meta.getErrorMessage();
}
assertNotNull("Object of PatternConstraintImpl shouldn't be null.", patternConstraint);
assertEquals("Description should be 'test description'.", "test description",
patternConstraint.getDescription());
- assertEquals("Error app tag shouldn't be null.", "invalid-regular-expression",
- patternConstraint.getErrorAppTag());
- assertNotNull(patternConstraint.getErrorMessage());
+ assertEquals(Optional.of("invalid-regular-expression"), patternConstraint.getErrorAppTag());
+ assertTrue(patternConstraint.getErrorMessage().isPresent());
assertEquals("Reference should be equals 'RFC 6020'.", "RFC 6020", patternConstraint.getReference());
assertEquals("Regular expression should be equls '\\D'.", "\\D", patternConstraint.getRegularExpression());
assertNotEquals("Hash codes shouldn't be equals.", patternConstraint.hashCode(), patternConstraint2.hashCode());
package org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective;
import java.util.Objects;
+import java.util.Optional;
import org.opendaylight.yangtools.yang.model.api.MustDefinition;
import org.opendaylight.yangtools.yang.model.api.RevisionAwareXPath;
import org.opendaylight.yangtools.yang.model.api.stmt.MustStatement;
}
@Override
- public String getErrorAppTag() {
- return errorAppTag;
+ public Optional<String> getErrorAppTag() {
+ return Optional.ofNullable(errorAppTag);
}
@Override
- public String getErrorMessage() {
- return errorMessage;
+ public Optional<String> getErrorMessage() {
+ return Optional.ofNullable(errorMessage);
}
@Override
*/
package org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.type;
+import java.util.Optional;
import org.opendaylight.yangtools.yang.model.api.ConstraintMetaDefinition;
import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
}
@Override
- public final String getErrorAppTag() {
- return errorAppTag;
+ public final Optional<String> getErrorAppTag() {
+ return Optional.ofNullable(errorAppTag);
}
@Override
- public final String getErrorMessage() {
- return errorMessage;
+ public final Optional<String> getErrorMessage() {
+ return Optional.ofNullable(errorMessage);
}
abstract A createConstraints(A argument);
}
@Override
- public String getErrorAppTag() {
- return errorAppTag;
+ public Optional<String> getErrorAppTag() {
+ return Optional.ofNullable(errorAppTag);
}
@Override
- public String getErrorMessage() {
- return errorMessage;
+ public Optional<String> getErrorMessage() {
+ return Optional.ofNullable(errorMessage);
}
@Override
}
return new PatternConstraintEffectiveImpl(argument.getRegularExpression(), argument.getRawRegularExpression(),
- getDescription(), getReference(), getErrorAppTag(), getErrorMessage(), getModifier());
+ getDescription(), getReference(), getErrorAppTag().orElse(null), getErrorMessage().orElse(null),
+ getModifier());
}
}
}
@Override
- public String getErrorAppTag() {
- return errorAppTag;
+ public Optional<String> getErrorAppTag() {
+ return Optional.ofNullable(errorAppTag);
}
@Override
- public String getErrorMessage() {
- return errorMessage;
+ public Optional<String> getErrorMessage() {
+ return Optional.ofNullable(errorMessage);
}
@Override
@Override
final RangeConstraint createCustomizedConstraint(final RangeConstraint rangeConstraint) {
return new RangeConstraintEffectiveImpl(rangeConstraint.getMin(), rangeConstraint.getMax(),
- getDescription(), getReference(), getErrorAppTag(), getErrorMessage());
+ getDescription(), getReference(), getErrorAppTag().orElse(null), getErrorMessage().orElse(null));
}
}
import com.google.common.collect.Range;
import java.util.List;
+import java.util.Optional;
import org.junit.BeforeClass;
import org.junit.Test;
import org.opendaylight.yangtools.yang.common.QName;
assertEquals(255, span.upperEndpoint().intValue());
assertNull(lengthConstraint.getReference());
assertNull(lengthConstraint.getDescription());
- assertNull(lengthConstraint.getErrorMessage());
- assertNull(lengthConstraint.getErrorAppTag());
+ assertFalse(lengthConstraint.getErrorMessage().isPresent());
+ assertFalse(lengthConstraint.getErrorAppTag().isPresent());
assertNotNull(lengthConstraint.toString());
assertNotNull(lengthConstraint.hashCode());
assertFalse(lengthConstraint.equals(null));
assertEquals("^[0-9a-fA-F]*$", patternConstraint.getRegularExpression());
assertNull(patternConstraint.getReference());
assertNull(patternConstraint.getDescription());
- assertEquals("Supplied value does not match the regular expression ^[0-9a-fA-F]*$.",
+ assertEquals(Optional.of("Supplied value does not match the regular expression ^[0-9a-fA-F]*$."),
patternConstraint.getErrorMessage());
- assertEquals("invalid-regular-expression", patternConstraint.getErrorAppTag());
+ assertEquals(Optional.of("invalid-regular-expression"), patternConstraint.getErrorAppTag());
assertNotNull(patternConstraint.toString());
assertNotNull(patternConstraint.hashCode());
assertFalse(patternConstraint.equals(null));
import static org.opendaylight.yangtools.yang.stmt.StmtTestUtils.sourceForResource;
import java.util.Iterator;
+import java.util.Optional;
import java.util.Set;
import org.junit.Test;
import org.opendaylight.yangtools.yang.common.QName;
MustDefinition mustStmt = mustsIterator.next();
assertThat(mustStmt.getXpath().toString(), anyOf(is("ifType != 'ethernet' or (ifType = 'ethernet' and "
+ "ifMTU = 1500)"), is("ifType != 'atm' or (ifType = 'atm' and ifMTU <= 17966 and ifMTU >= 64)")));
- assertThat(mustStmt.getErrorMessage(), anyOf(is("An ethernet MTU must be 1500"), is("An atm MTU must be 64 "
- + ".. 17966")));
- assertThat(mustStmt.getErrorAppTag(), anyOf(is("An ethernet error"), is("An atm error")));
+ assertThat(mustStmt.getErrorMessage(), anyOf(is(Optional.of("An ethernet MTU must be 1500")),
+ is(Optional.of("An atm MTU must be 64 .. 17966"))));
+ assertThat(mustStmt.getErrorAppTag(), anyOf(is(Optional.of("An ethernet error")),
+ is(Optional.of("An atm error"))));
mustStmt = mustsIterator.next();
- assertThat(mustStmt.getXpath().toString(), anyOf(is("ifType != 'ethernet' or (ifType = 'ethernet' and "
- + "ifMTU = 1500)"), is("ifType != 'atm' or (ifType = 'atm' and ifMTU <= 17966 and ifMTU >= 64)")));
- assertThat(mustStmt.getErrorMessage(), anyOf(is("An ethernet MTU must be 1500"), is("An atm MTU must be 64 "
- + ".. 17966")));
- assertThat(mustStmt.getErrorAppTag(), anyOf(is("An ethernet error"), is("An atm error")));
+ assertThat(mustStmt.getXpath().toString(), anyOf(
+ is("ifType != 'ethernet' or (ifType = 'ethernet' and ifMTU = 1500)"),
+ is("ifType != 'atm' or (ifType = 'atm' and ifMTU <= 17966 and ifMTU >= 64)")));
+ assertThat(mustStmt.getErrorMessage(), anyOf(is(Optional.of("An ethernet MTU must be 1500")),
+ is(Optional.of("An atm MTU must be 64 .. 17966"))));
+ assertThat(mustStmt.getErrorAppTag(), anyOf(is(Optional.of("An ethernet error")),
+ is(Optional.of("An atm error"))));
}
@Test
import java.net.URI;
import java.util.ArrayList;
import java.util.List;
+import java.util.Optional;
import java.util.Set;
import org.junit.Before;
import org.junit.Test;
assertEquals(2, constraints.getMustConstraints().size());
final String must1 = "ifType != 'ethernet' or (ifType = 'ethernet' and ifMTU = 1500)";
- final String errMsg1 = "An ethernet MTU must be 1500";
final String must2 = "ifType != 'atm' or (ifType = 'atm' and ifMTU <= 17966 and ifMTU >= 64)";
- final String errMsg2 = "An atm MTU must be 64 .. 17966";
boolean found1 = false;
boolean found2 = false;
for (final MustDefinition must : mustConstraints) {
if (must1.equals(must.toString())) {
found1 = true;
- assertEquals(errMsg1, must.getErrorMessage());
+ assertEquals(Optional.of("An ethernet MTU must be 1500"), must.getErrorMessage());
} else if (must2.equals(must.toString())) {
found2 = true;
- assertEquals(errMsg2, must.getErrorMessage());
- assertEquals("anyxml data error-app-tag", must.getErrorAppTag());
+ assertEquals(Optional.of("An atm MTU must be 64 .. 17966"), must.getErrorMessage());
+ assertEquals(Optional.of("anyxml data error-app-tag"), must.getErrorAppTag());
assertEquals("an error occured in data", must.getDescription());
assertEquals("data must ref", must.getReference());
}
for (final MustDefinition must : mustConstraints) {
if (must1.equals(must.toString())) {
found1 = true;
- assertEquals(errMsg1, must.getErrorMessage());
+ assertEquals(Optional.of(errMsg1), must.getErrorMessage());
} else if (must2.equals(must.toString())) {
found2 = true;
- assertNull(must.getErrorMessage());
- assertNull(must.getErrorAppTag());
+ assertFalse(must.getErrorMessage().isPresent());
+ assertFalse(must.getErrorAppTag().isPresent());
assertNull(must.getDescription());
assertNull(must.getReference());
}
import static org.junit.Assert.assertTrue;
import java.util.List;
+import java.util.Optional;
import org.junit.Test;
import org.opendaylight.yangtools.yang.common.QName;
import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode;
assertEquals(1, lengthConstraint.getAllowedRanges().asRanges().size());
assertEquals(1, patternConstraints.size());
- assertEquals("lenght constraint error-app-tag", lengthConstraint.getErrorAppTag());
- assertEquals("lenght constraint error-app-message", lengthConstraint.getErrorMessage());
+ assertEquals(Optional.of("lenght constraint error-app-tag"), lengthConstraint.getErrorAppTag());
+ assertEquals(Optional.of("lenght constraint error-app-message"), lengthConstraint.getErrorMessage());
PatternConstraint patternConstraint = patternConstraints.iterator().next();
- assertEquals("pattern constraint error-app-tag", patternConstraint.getErrorAppTag());
- assertEquals("pattern constraint error-app-message", patternConstraint.getErrorMessage());
+ assertEquals(Optional.of("pattern constraint error-app-tag"), patternConstraint.getErrorAppTag());
+ assertEquals(Optional.of("pattern constraint error-app-message"), patternConstraint.getErrorMessage());
List<RangeConstraint> rangeConstraints = ((IntegerTypeDefinition) myLeaf2Type).getRangeConstraints();
assertEquals(1, rangeConstraints.size());
RangeConstraint rangeConstraint = rangeConstraints.iterator().next();
- assertEquals("range constraint error-app-tag", rangeConstraint.getErrorAppTag());
- assertEquals("range constraint error-app-message", rangeConstraint.getErrorMessage());
+ assertEquals(Optional.of("range constraint error-app-tag"), rangeConstraint.getErrorAppTag());
+ assertEquals(Optional.of("range constraint error-app-message"), rangeConstraint.getErrorMessage());
}
}