import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
import org.opendaylight.yangtools.yang.model.api.ElementCountConstraint;
import org.opendaylight.yangtools.yang.model.api.IdentitySchemaNode;
+import org.opendaylight.yangtools.yang.model.api.LeafListSchemaNode;
import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode;
import org.opendaylight.yangtools.yang.model.api.ListSchemaNode;
import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.KeyEffectiveStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.KeyStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.LeafEffectiveStatement;
+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.LeafStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.LengthEffectiveStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.LengthStatement;
import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyIfFeatureEffectiveStatement;
import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyIncludeEffectiveStatement;
import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyLeafEffectiveStatement;
+import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyLeafListEffectiveStatement;
import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyLengthEffectiveStatement;
import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyListEffectiveStatement;
import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyLocalKeyEffectiveStatement;
import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularIfFeatureEffectiveStatement;
import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularIncludeEffectiveStatement;
import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularLeafEffectiveStatement;
+import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularLeafListEffectiveStatement;
import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularLengthEffectiveStatement;
import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularListEffectiveStatement;
import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularLocalKeyEffectiveStatement;
import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularYangVersionEffectiveStatement;
import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularYinElementEffectiveStatement;
import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RpcEffectiveStatementImpl;
+import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.SlimLeafListEffectiveStatement;
import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.TypedefEffectiveStatementImpl;
import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.UndeclaredCaseEffectiveStatement;
import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.UndeclaredInputEffectiveStatement;
: new RegularLeafEffectiveStatement(declared, argument, flags, substatements, original);
}
+ public static LeafListEffectiveStatement copyLeafList(final LeafListEffectiveStatement original,
+ final QName argument, final int flags, final @Nullable LeafListSchemaNode newOriginal) {
+ if (original instanceof RegularLeafListEffectiveStatement) {
+ return new RegularLeafListEffectiveStatement((RegularLeafListEffectiveStatement) original, newOriginal,
+ argument, flags);
+ } else if (original instanceof SlimLeafListEffectiveStatement) {
+ return new SlimLeafListEffectiveStatement((SlimLeafListEffectiveStatement) original, newOriginal, argument,
+ flags);
+ } else if (original instanceof EmptyLeafListEffectiveStatement) {
+ // Promote to slim
+ return new SlimLeafListEffectiveStatement((EmptyLeafListEffectiveStatement) original, newOriginal, argument,
+ flags);
+ } else {
+ throw new IllegalArgumentException("Unsupported original " + original);
+ }
+ }
+
+ public static LeafListEffectiveStatement createLeafList(final LeafListStatement declared, final QName argument,
+ final int flags, final ImmutableList<? extends EffectiveStatement<?, ?>> substatements,
+ final ImmutableSet<String> defaultValues, final @Nullable ElementCountConstraint elementCountConstraint,
+ final @Nullable LeafListSchemaNode original)
+ throws SubstatementIndexingException {
+ if (defaultValues.isEmpty()) {
+ return original == null && elementCountConstraint == null
+ ? new EmptyLeafListEffectiveStatement(declared, argument, flags, substatements)
+ : new SlimLeafListEffectiveStatement(declared, argument, flags, substatements, original,
+ elementCountConstraint);
+ }
+
+ return new RegularLeafListEffectiveStatement(declared, argument, flags, substatements, original, defaultValues,
+ elementCountConstraint);
+ }
+
public static LengthEffectiveStatement createLength(final LengthStatement declared,
final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
return substatements.isEmpty() ? new EmptyLengthEffectiveStatement(declared)
* 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.parser.rfc7950.stmt.leaf_list;
+package org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff;
import static java.util.Objects.requireNonNull;
* 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.parser.rfc7950.stmt.leaf_list;
+package org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff;
import com.google.common.collect.ImmutableList;
import java.util.Optional;
* 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.parser.rfc7950.stmt.leaf_list;
+package org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSet;
import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.LeafListStatement;
-final class EmptyLeafListEffectiveStatement extends AbstractLeafListEffectiveStatement {
- EmptyLeafListEffectiveStatement(final LeafListStatement declared, final QName argument, final int flags,
+public final class EmptyLeafListEffectiveStatement extends AbstractLeafListEffectiveStatement {
+ public EmptyLeafListEffectiveStatement(final LeafListStatement declared, final QName argument, final int flags,
final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
super(declared, argument, flags, substatements);
}
- EmptyLeafListEffectiveStatement(final EmptyLeafListEffectiveStatement original, final QName argument,
+ public EmptyLeafListEffectiveStatement(final EmptyLeafListEffectiveStatement original, final QName argument,
final int flags) {
super(original, argument, flags);
}
* 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.parser.rfc7950.stmt.leaf_list;
+package org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff;
import static java.util.Objects.requireNonNull;
import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.LeafListStatement;
-final class RegularLeafListEffectiveStatement extends AbstractNonEmptyLeafListEffectiveStatement {
+public final class RegularLeafListEffectiveStatement extends AbstractNonEmptyLeafListEffectiveStatement {
private final @NonNull ImmutableSet<String> defaults;
- RegularLeafListEffectiveStatement(final LeafListStatement declared, final QName argument, final int flags,
+ public RegularLeafListEffectiveStatement(final LeafListStatement declared, final QName argument, final int flags,
final ImmutableList<? extends EffectiveStatement<?, ?>> substatements, final LeafListSchemaNode original,
final ImmutableSet<String> defaults, final ElementCountConstraint elementCountConstraint) {
super(declared, argument, flags, substatements, original, elementCountConstraint);
this.defaults = requireNonNull(defaults);
}
- RegularLeafListEffectiveStatement(final RegularLeafListEffectiveStatement originalEffective,
+ public RegularLeafListEffectiveStatement(final RegularLeafListEffectiveStatement originalEffective,
final LeafListSchemaNode original, final QName argument, final int flags) {
super(originalEffective, original, argument, flags);
this.defaults = originalEffective.defaults;
* 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.parser.rfc7950.stmt.leaf_list;
+package org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSet;
import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.LeafListStatement;
-final class SlimLeafListEffectiveStatement extends AbstractNonEmptyLeafListEffectiveStatement {
- SlimLeafListEffectiveStatement(final LeafListStatement declared, final QName argument, final int flags,
+public final class SlimLeafListEffectiveStatement extends AbstractNonEmptyLeafListEffectiveStatement {
+ public SlimLeafListEffectiveStatement(final LeafListStatement declared, final QName argument, final int flags,
final ImmutableList<? extends EffectiveStatement<?, ?>> substatements,
final LeafListSchemaNode original, final ElementCountConstraint elementCountConstraint) {
super(declared, argument, flags, substatements, original, elementCountConstraint);
}
- SlimLeafListEffectiveStatement(final SlimLeafListEffectiveStatement originalEffective,
+ public SlimLeafListEffectiveStatement(final SlimLeafListEffectiveStatement originalEffective,
final LeafListSchemaNode original, final QName argument, final int flags) {
super(originalEffective, original, argument, flags);
}
- SlimLeafListEffectiveStatement(final EmptyLeafListEffectiveStatement originalEffective,
+ public SlimLeafListEffectiveStatement(final EmptyLeafListEffectiveStatement originalEffective,
final LeafListSchemaNode original, final QName argument, final int flags) {
super(originalEffective, original, argument, flags);
}
import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.if_feature.IfFeatureStatementRFC7950Support;
import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.import_.ImportStatementSupport;
import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.import_.ImportedVersionNamespace;
-import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.leaf_list.LeafListStatementSupport;
import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.list.ConfigListWarningNamespace;
import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.list.ListStatementSupport;
import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.meta.ActionStatementSupport;
import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.meta.IncludeStatementSupport;
import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.meta.InputStatementSupport;
import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.meta.KeyStatementSupport;
+import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.meta.LeafListStatementSupport;
import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.meta.LeafStatementSupport;
import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.meta.LengthStatementSupport;
import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.meta.MandatoryStatementSupport;
* 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.parser.rfc7950.stmt.leaf_list;
+package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.meta;
import com.google.common.annotations.Beta;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSet;
import java.util.Collection;
-import java.util.Optional;
import org.eclipse.jdt.annotation.NonNull;
import org.opendaylight.yangtools.yang.common.Ordering;
import org.opendaylight.yangtools.yang.common.QName;
-import org.opendaylight.yangtools.yang.model.api.ElementCountConstraint;
import org.opendaylight.yangtools.yang.model.api.LeafListSchemaNode;
import org.opendaylight.yangtools.yang.model.api.Status;
import org.opendaylight.yangtools.yang.model.api.YangStmtMapping;
import org.opendaylight.yangtools.yang.model.api.stmt.TypeEffectiveStatement;
import org.opendaylight.yangtools.yang.model.ri.stmt.DeclaredStatementDecorators;
import org.opendaylight.yangtools.yang.model.ri.stmt.DeclaredStatements;
+import org.opendaylight.yangtools.yang.model.ri.stmt.EffectiveStatements;
import org.opendaylight.yangtools.yang.model.spi.meta.EffectiveStatementMixins.EffectiveStatementWithFlags.FlagsBuilder;
import org.opendaylight.yangtools.yang.parser.api.YangParserConfiguration;
import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.EffectiveStmtUtils;
@Override
public LeafListEffectiveStatement copyEffective(final Current<QName, LeafListStatement> stmt,
final LeafListEffectiveStatement original) {
- final int flags = computeFlags(stmt, original.effectiveSubstatements());
- if (original instanceof RegularLeafListEffectiveStatement) {
- return new RegularLeafListEffectiveStatement((RegularLeafListEffectiveStatement) original,
- stmt.original(LeafListSchemaNode.class), stmt.getArgument(), flags);
- } else if (original instanceof SlimLeafListEffectiveStatement) {
- return new SlimLeafListEffectiveStatement((SlimLeafListEffectiveStatement) original,
- stmt.original(LeafListSchemaNode.class), stmt.getArgument(), flags);
- } else if (original instanceof EmptyLeafListEffectiveStatement) {
- // Promote to slim
- return new SlimLeafListEffectiveStatement((EmptyLeafListEffectiveStatement) original,
- stmt.original(LeafListSchemaNode.class), stmt.getArgument(), flags);
- } else {
- // Safe fallback
- return super.copyEffective(stmt, original);
- }
+ return EffectiveStatements.copyLeafList(original, stmt.getArgument(),
+ computeFlags(stmt, original.effectiveSubstatements()), stmt.original(LeafListSchemaNode.class));
}
@Override
findFirstStatement(substatements, TypeEffectiveStatement.class), stmt,
"Leaf-list is missing a 'type' statement");
- final int flags = computeFlags(stmt, substatements);
final ImmutableSet<String> defaultValues = substatements.stream()
.filter(DefaultEffectiveStatement.class::isInstance)
.map(DefaultEffectiveStatement.class::cast)
// FIXME: RFC7950 section 7.7.4: we need to check for min-elements and defaultValues conflict
- final Optional<ElementCountConstraint> elementCountConstraint =
- EffectiveStmtUtils.createElementCountConstraint(substatements);
-
- final LeafListSchemaNode original = stmt.original(LeafListSchemaNode.class);
- final LeafListStatement declared = stmt.declared();
- if (defaultValues.isEmpty()) {
- return original == null && !elementCountConstraint.isPresent()
- ? new EmptyLeafListEffectiveStatement(declared, stmt.getArgument(), flags, substatements)
- : new SlimLeafListEffectiveStatement(declared, stmt.getArgument(), flags, substatements, original,
- elementCountConstraint.orElse(null));
- }
-
- return new RegularLeafListEffectiveStatement(declared, stmt.getArgument(), flags, substatements, original,
- defaultValues, elementCountConstraint.orElse(null));
+ return EffectiveStatements.createLeafList(stmt.declared(), stmt.getArgument(),
+ computeFlags(stmt, substatements), substatements, defaultValues,
+ EffectiveStmtUtils.createElementCountConstraint(substatements).orElse(null),
+ stmt.original(LeafListSchemaNode.class));
}
private static int computeFlags(final Current<?, ?> stmt,