import com.google.common.annotations.Beta;
import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
+import org.opendaylight.yangtools.yang.model.api.stmt.OrderedByStatement.Ordering;
@Beta
-public interface OrderedByEffectiveStatement extends EffectiveStatement<String, OrderedByStatement> {
+public interface OrderedByEffectiveStatement extends EffectiveStatement<Ordering, OrderedByStatement> {
}
import static com.google.common.base.Verify.verifyNotNull;
import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.jdt.annotation.NonNullByDefault;
import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
-public interface OrderedByStatement extends DeclaredStatement<String> {
- default @NonNull String getValue() {
+public interface OrderedByStatement extends DeclaredStatement<OrderedByStatement.Ordering> {
+ @NonNullByDefault
+ enum Ordering {
+ SYSTEM("system"),
+ USER("user");
+
+ private final String argumentString;
+
+ Ordering(final String argumentString) {
+ this.argumentString = argumentString;
+ }
+
+ public String getArgumentString() {
+ return argumentString;
+ }
+
+ public static Ordering forArgumentString(final String argumentString) {
+ switch (argumentString) {
+ case "system":
+ return SYSTEM;
+ case "user":
+ return USER;
+ default:
+ throw new IllegalArgumentException("Invalid ordering string '" + argumentString + "'");
+ }
+ }
+ }
+
+ default @NonNull Ordering getValue() {
// FIXME: YANGTOOLS-908: verifyNotNull() should not be needed here
return verifyNotNull(argument());
}
import org.opendaylight.yangtools.yang.model.api.stmt.LeafListEffectiveStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.LeafListStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.OrderedByEffectiveStatement;
+import org.opendaylight.yangtools.yang.model.api.stmt.OrderedByStatement.Ordering;
import org.opendaylight.yangtools.yang.model.api.stmt.StatusEffectiveStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.TypeEffectiveStatement;
import org.opendaylight.yangtools.yang.parser.rfc7950.namespace.ChildSchemaNodeNamespace;
.setHistory(ctx.getCopyHistory())
.setStatus(findFirstArgument(substatements, StatusEffectiveStatement.class, Status.CURRENT))
.setConfiguration(ctx.isConfiguration())
- .setUserOrdered(findFirstArgument(substatements, OrderedByEffectiveStatement.class, "system")
- .equals("user"))
+ .setUserOrdered(findFirstArgument(substatements, OrderedByEffectiveStatement.class, Ordering.SYSTEM)
+ .equals(Ordering.USER))
.toFlags();
final ImmutableSet<String> defaultValues = substatements.stream()
.filter(DefaultEffectiveStatement.class::isInstance)
import org.opendaylight.yangtools.yang.model.api.stmt.ListEffectiveStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.ListStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.OrderedByEffectiveStatement;
+import org.opendaylight.yangtools.yang.model.api.stmt.OrderedByStatement.Ordering;
import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier;
import org.opendaylight.yangtools.yang.model.api.stmt.StatusEffectiveStatement;
import org.opendaylight.yangtools.yang.parser.rfc7950.namespace.ChildSchemaNodeNamespace;
.setHistory(ctx.getCopyHistory())
.setStatus(findFirstArgument(substatements, StatusEffectiveStatement.class, Status.CURRENT))
.setConfiguration(configuration)
- .setUserOrdered(findFirstArgument(substatements, OrderedByEffectiveStatement.class, "system")
- .equals("user"))
+ .setUserOrdered(findFirstArgument(substatements, OrderedByEffectiveStatement.class, Ordering.SYSTEM)
+ .equals(Ordering.USER))
.toFlags();
if (configuration && keyDefinition.isEmpty() && !inGrouping(ctx)) {
LOG.info("Configuration list {} does not define any keys in violation of RFC7950 section 7.8.2. While "
import org.opendaylight.yangtools.yang.model.api.stmt.OrderedByEffectiveStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.OrderedByStatement;
+import org.opendaylight.yangtools.yang.model.api.stmt.OrderedByStatement.Ordering;
import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractDeclaredEffectiveStatement;
abstract class AbstractOrderedByEffectiveStatement
- extends AbstractDeclaredEffectiveStatement.DefaultArgument<String, OrderedByStatement>
+ extends AbstractDeclaredEffectiveStatement.DefaultArgument<Ordering, OrderedByStatement>
implements OrderedByEffectiveStatement {
AbstractOrderedByEffectiveStatement(final OrderedByStatement declared) {
super(declared);
package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.ordered_by;
import org.opendaylight.yangtools.yang.model.api.stmt.OrderedByStatement;
+import org.opendaylight.yangtools.yang.model.api.stmt.OrderedByStatement.Ordering;
import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement;
import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
-final class OrderedByStatementImpl extends AbstractDeclaredStatement<String> implements OrderedByStatement {
- OrderedByStatementImpl(final StmtContext<String, OrderedByStatement, ?> context) {
+final class OrderedByStatementImpl extends AbstractDeclaredStatement<Ordering> implements OrderedByStatement {
+ OrderedByStatementImpl(final StmtContext<Ordering, OrderedByStatement, ?> context) {
super(context);
}
}
import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.OrderedByEffectiveStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.OrderedByStatement;
-import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.BaseStringStatementSupport;
+import org.opendaylight.yangtools.yang.model.api.stmt.OrderedByStatement.Ordering;
+import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.BaseStatementSupport;
import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator;
+import org.opendaylight.yangtools.yang.parser.spi.source.SourceException;
public final class OrderedByStatementSupport
- extends BaseStringStatementSupport<OrderedByStatement, OrderedByEffectiveStatement> {
+ extends BaseStatementSupport<Ordering, OrderedByStatement, OrderedByEffectiveStatement> {
private static final SubstatementValidator SUBSTATEMENT_VALIDATOR =
SubstatementValidator.builder(YangStmtMapping.ORDERED_BY).build();
private static final OrderedByStatementSupport INSTANCE = new OrderedByStatementSupport();
}
@Override
- public String parseArgumentValue(final StmtContext<?, ?, ?> ctx, final String value) {
- return value;
+ public Ordering parseArgumentValue(final StmtContext<?, ?, ?> ctx, final String value) {
+ try {
+ return Ordering.forArgumentString(value);
+ } catch (IllegalArgumentException e) {
+ throw new SourceException(ctx.getStatementSourceReference(), e, "Invalid ordered-by argument '%s'", value);
+ }
}
@Override
- public OrderedByStatement createDeclared(final StmtContext<String, OrderedByStatement, ?> ctx) {
+ public OrderedByStatement createDeclared(final StmtContext<Ordering, OrderedByStatement, ?> ctx) {
return new OrderedByStatementImpl(ctx);
}
@Override
protected OrderedByEffectiveStatement createEffective(
- final StmtContext<String, OrderedByStatement, OrderedByEffectiveStatement> ctx,
+ final StmtContext<Ordering, OrderedByStatement, OrderedByEffectiveStatement> ctx,
final OrderedByStatement declared,
final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
return new RegularOrderedByEffectiveStatement(declared, substatements);
@Override
protected OrderedByEffectiveStatement createEmptyEffective(
- final StmtContext<String, OrderedByStatement, OrderedByEffectiveStatement> ctx,
+ final StmtContext<Ordering, OrderedByStatement, OrderedByEffectiveStatement> ctx,
final OrderedByStatement declared) {
return new EmptyOrderedByEffectiveStatement(declared);
}