/*
* Copyright (c) 2013 Cisco Systems, Inc. and others. All rights reserved.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v1.0 which accompanies this distribution,
* and is available at http://www.eclipse.org/legal/epl-v10.html
*/
package org.opendaylight.yangtools.yang.model.util;
import com.google.common.base.Optional;
import org.opendaylight.yangtools.yang.model.api.type.LengthConstraint;
import org.opendaylight.yangtools.yang.model.api.type.ModifierKind;
import org.opendaylight.yangtools.yang.model.api.type.PatternConstraint;
import org.opendaylight.yangtools.yang.model.api.type.RangeConstraint;
/**
* Utility class which provides factory methods to construct Constraints.
*
* Provides static factory methods which constructs instances of
* <ul>
* <li>{@link LengthConstraint} - {@link #newLengthConstraint(Number, Number, Optional, Optional)}
* <li>{@link RangeConstraint} - {@link #newRangeConstraint(Number, Number, Optional, Optional)}
* <li>{@link PatternConstraint} - {@link #newPatternConstraint(String, Optional, Optional)}
* </ul>
*/
public final class BaseConstraints {
private BaseConstraints() {
throw new UnsupportedOperationException();
}
/**
* Creates a {@link LengthConstraint}.
*
* Creates an instance of Length constraint based on supplied parameters
* with additional behaviour:
*
* <ul>
* <li>{@link LengthConstraint#getErrorAppTag()} returns <code>length-out-of-specified-bounds</code>
* <li>{@link LengthConstraint#getErrorMessage()} returns <code>The argument is out of bounds <<i>min</i>, <i>max</i> ></code>
* </ul>
*
* @see LengthConstraint
*
* @param min length-restricting lower bound value. The value MUST NOT be negative.
* @param max length-restricting upper bound value. The value MUST NOT be negative.
* @param description Description associated with constraint. {@link Optional#absent()} if description is undefined.
* @param reference Reference associated with constraint. {@link Optional#absent()} if reference is undefined.
* @return Instance of {@link LengthConstraint}
*/
public static LengthConstraint newLengthConstraint(final Number min, final Number max, final Optional<String> description,
final Optional<String> reference) {
return new LengthConstraintImpl(min, max, description, reference);
}
/**
* Creates a {@link LengthConstraint}.
*
* Creates an instance of Length constraint based on supplied parameters
* with additional behaviour:
*
* <ul>
* <li>{@link LengthConstraint#getErrorAppTag()} returns <code>length-out-of-specified-bounds</code>
* <li>{@link LengthConstraint#getErrorMessage()} returns <code>The argument is out of bounds <<i>min</i>, <i>max</i> ></code>
* </ul>
*
* @see LengthConstraint
*
* @param min length-restricting lower bound value. The value MUST NOT be negative.
* @param max length-restricting upper bound value. The value MUST NOT be negative.
* @param description Description associated with constraint. {@link Optional#absent()} if description is undefined.
* @param reference Reference associated with constraint. {@link Optional#absent()} if reference is undefined.
* @param errorAppTag error-app-tag associated with constraint.
* @param errorMessage error message associated with constraint.
* @return Instance of {@link LengthConstraint}
*/
public static LengthConstraint newLengthConstraint(final Number min, final Number max,
final Optional<String> description, final Optional<String> reference, final String errorAppTag,
final String errorMessage) {
return new LengthConstraintImpl(min, max, description, reference, errorAppTag, errorMessage);
}
/**
* Creates a {@link RangeConstraint}.
*
* Creates an instance of Range constraint based on supplied parameters
* with additional behaviour:
*
* <ul>
* <li>{@link RangeConstraint#getErrorAppTag()} returns <code>range-out-of-specified-bounds</code>
* <li>{@link RangeConstraint#getErrorMessage()} returns <code>The argument is out of bounds <<i>min</i>, <i>max</i> ></code>
* </ul>
*
*
* @see RangeConstraint
*
* @param <T> Type of constraint
* @param min value-restricting lower bound value. The value MUST NOT Be null.
* @param max value-restricting upper bound value. The value MUST NOT Be null.
* @param description Description associated with constraint. {@link Optional#absent()} if description is undefined.
* @param reference Reference associated with constraint. {@link Optional#absent()} if reference is undefined.
* @return Instance of {@link RangeConstraint}
*/
public static <T extends Number> RangeConstraint newRangeConstraint(final T min, final T max, final Optional<String> description,
final Optional<String> reference) {
return new RangeConstraintImpl(min, max, description, reference);
}
/**
* Creates a {@link RangeConstraint}.
*
* Creates an instance of Range constraint based on supplied parameters
* with additional behaviour:
*
* <ul>
* <li>{@link RangeConstraint#getErrorAppTag()} returns <code>range-out-of-specified-bounds</code>
* <li>{@link RangeConstraint#getErrorMessage()} returns <code>The argument is out of bounds <<i>min</i>, <i>max</i> ></code>
* </ul>
*
*
* @see RangeConstraint
*
* @param <T> Type of constraint
* @param min value-restricting lower bound value. The value MUST NOT Be null.
* @param max value-restricting upper bound value. The value MUST NOT Be null.
* @param description Description associated with constraint. {@link Optional#absent()} if description is undefined.
* @param reference Reference associated with constraint. {@link Optional#absent()} if reference is undefined.
* @param errorAppTag error-app-tag associated with constraint.
* @param errorMessage error message associated with constraint.
* @return Instance of {@link RangeConstraint}
*/
public static <T extends Number> RangeConstraint newRangeConstraint(final T min, final T max,
final Optional<String> description, final Optional<String> reference, final String errorAppTag,
final String errorMessage) {
return new RangeConstraintImpl(min, max, description, reference, errorAppTag, errorMessage);
}
/**
* Creates a {@link PatternConstraint}.
*
* Creates an instance of Pattern constraint based on supplied parameters
* with additional behaviour:
*
* <ul>
* <li>{@link PatternConstraint#getErrorAppTag()} returns
* <code>invalid-regular-expression</code>
* </ul>
*
* @see PatternConstraint
*
* @param pattern
* Regular expression, MUST NOT BE null.
* @param description
* Description associated with constraint.
* @param reference
* Reference associated with constraint.
* @return Instance of {@link PatternConstraint}
*/
public static PatternConstraint newPatternConstraint(final String pattern, final Optional<String> description,
final Optional<String> reference) {
return new PatternConstraintImpl(pattern, description, reference);
}
/**
* Creates a {@link PatternConstraint}.
*
* Creates an instance of Pattern constraint based on supplied parameters
* with additional behaviour:
*
* <ul>
* <li>{@link PatternConstraint#getErrorAppTag()} returns
* <code>invalid-regular-expression</code>
* </ul>
*
* @see PatternConstraint
*
* @param pattern
* Regular expression, MUST NOT BE null.
* @param description
* Description associated with constraint.
* @param reference
* Reference associated with constraint.
* @param errorAppTag
* error-app-tag associated with constraint.
* @param errorMessage
* error message associated with constraint.
* @param modifier
* Modifier of pattern constraint.
* @return Instance of {@link PatternConstraint}
*/
public static PatternConstraint newPatternConstraint(final String pattern, final Optional<String> description,
final Optional<String> reference, final String errorAppTag, final String errorMessage,
final Optional<ModifierKind> modifier) {
return new PatternConstraintImpl(pattern, description, reference, errorAppTag, errorMessage, modifier);
}
}