import com.google.common.annotations.Beta;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSet;
+import java.util.Set;
import org.eclipse.jdt.annotation.NonNullByDefault;
import org.eclipse.jdt.annotation.Nullable;
import org.opendaylight.yangtools.concepts.Immutable;
+import org.opendaylight.yangtools.yang.common.QName;
import org.opendaylight.yangtools.yang.common.QNameModule;
import org.opendaylight.yangtools.yang.model.api.AnydataSchemaNode;
import org.opendaylight.yangtools.yang.model.api.AnyxmlSchemaNode;
import org.opendaylight.yangtools.yang.model.api.stmt.IncludeStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.InputEffectiveStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.InputStatement;
+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.LeafStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.LengthEffectiveStatement;
import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyErrorAppTagEffectiveStatement;
import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyErrorMessageEffectiveStatement;
import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyFeatureEffectiveStatement;
+import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyForeignKeyEffectiveStatement;
import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyFractionDigitsEffectiveStatement;
import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyIdentityEffectiveStatement;
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.EmptyLengthEffectiveStatement;
+import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyLocalKeyEffectiveStatement;
import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyMandatoryEffectiveStatement;
import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyMaxElementsEffectiveStatement;
import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyMinElementsEffectiveStatement;
import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularErrorAppTagEffectiveStatement;
import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularErrorMessageEffectiveStatement;
import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularFeatureEffectiveStatement;
+import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularForeignKeyEffectiveStatement;
import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularFractionDigitsEffectiveStatement;
import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularIdentityEffectiveStatement;
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.RegularLengthEffectiveStatement;
+import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularLocalKeyEffectiveStatement;
import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularMandatoryEffectiveStatement;
import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularMaxElementsEffectiveStatement;
import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularMinElementsEffectiveStatement;
return new DeclaredInputEffectiveStatement(declared, substatements, path, flags);
}
+ public static KeyEffectiveStatement createKey(final KeyStatement declared, final Set<QName> argument,
+ final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
+ if (substatements.isEmpty()) {
+ return argument.equals(declared.argument()) ? new EmptyLocalKeyEffectiveStatement(declared)
+ : new EmptyForeignKeyEffectiveStatement(declared, argument);
+ }
+ return argument.equals(declared.argument()) ? new RegularLocalKeyEffectiveStatement(declared, substatements)
+ : new RegularForeignKeyEffectiveStatement(declared, argument, substatements);
+ }
+
public static LeafEffectiveStatement copyLeaf(final LeafEffectiveStatement original, final Immutable path,
final int flags, final @Nullable LeafSchemaNode newOriginal) {
checkArgument(original instanceof AbstractLeafEffectiveStatement, "Unsupported original %s", original);
* 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.key;
+package org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff;
+import static com.google.common.base.Verify.verify;
+
+import com.google.common.collect.ImmutableSet;
import java.util.Set;
+import org.eclipse.jdt.annotation.NonNull;
import org.opendaylight.yangtools.yang.common.QName;
import org.opendaylight.yangtools.yang.model.api.stmt.KeyEffectiveStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.KeyStatement;
Foreign(final KeyStatement declared, final Set<QName> argument) {
super(declared);
- this.argument = KeyStatementSupport.maskSet(argument);
+ this.argument = maskSet(argument);
}
@Override
public final Set<QName> argument() {
- return KeyStatementSupport.unmaskSet(argument);
+ return unmaskSet(argument);
+ }
+
+ private static @NonNull Object maskSet(final @NonNull Set<QName> set) {
+ return set.size() == 1 ? set.iterator().next() : set;
+ }
+
+ @SuppressWarnings("unchecked")
+ private static @NonNull Set<QName> unmaskSet(final @NonNull Object masked) {
+ if (masked instanceof Set) {
+ return (Set<QName>) masked;
+ }
+ verify(masked instanceof QName, "Unexpected argument %s", masked);
+ return ImmutableSet.of((QName) masked);
}
}
* 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.key;
+package org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff;
import java.util.Set;
import org.opendaylight.yangtools.yang.common.QName;
import org.opendaylight.yangtools.yang.model.api.stmt.KeyStatement;
-final class EmptyForeignKeyEffectiveStatement extends AbstractKeyEffectiveStatement.Foreign {
- EmptyForeignKeyEffectiveStatement(final KeyStatement declared, final Set<QName> argument) {
+public final class EmptyForeignKeyEffectiveStatement extends AbstractKeyEffectiveStatement.Foreign {
+ public EmptyForeignKeyEffectiveStatement(final KeyStatement declared, final Set<QName> argument) {
super(declared, argument);
}
}
* 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.key;
+package org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff;
import org.opendaylight.yangtools.yang.model.api.stmt.KeyStatement;
-final class EmptyLocalKeyEffectiveStatement extends AbstractKeyEffectiveStatement.Local {
- EmptyLocalKeyEffectiveStatement(final KeyStatement declared) {
+public final class EmptyLocalKeyEffectiveStatement extends AbstractKeyEffectiveStatement.Local {
+ public EmptyLocalKeyEffectiveStatement(final KeyStatement declared) {
super(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.key;
+package org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff;
import com.google.common.collect.ImmutableList;
import java.util.Set;
import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.KeyStatement;
-final class RegularForeignKeyEffectiveStatement extends AbstractKeyEffectiveStatement.Foreign {
+public final class RegularForeignKeyEffectiveStatement extends AbstractKeyEffectiveStatement.Foreign {
private final @NonNull Object substatements;
- RegularForeignKeyEffectiveStatement(final KeyStatement declared, final Set<QName> argument,
+ public RegularForeignKeyEffectiveStatement(final KeyStatement declared, final Set<QName> argument,
final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
super(declared, argument);
this.substatements = maskList(substatements);
* 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.key;
+package org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff;
import com.google.common.collect.ImmutableList;
import org.eclipse.jdt.annotation.NonNull;
import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.KeyStatement;
-final class RegularLocalKeyEffectiveStatement extends AbstractKeyEffectiveStatement.Local {
+public final class RegularLocalKeyEffectiveStatement extends AbstractKeyEffectiveStatement.Local {
private final @NonNull Object substatements;
- RegularLocalKeyEffectiveStatement(final KeyStatement declared,
+ public RegularLocalKeyEffectiveStatement(final KeyStatement declared,
final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
super(declared);
this.substatements = maskList(substatements);
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.key.KeyStatementSupport;
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.IdentityStatementSupport;
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.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.key;
-
-import static com.google.common.base.Verify.verify;
+package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.meta;
import com.google.common.base.CharMatcher;
import com.google.common.base.Splitter;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.ImmutableSet.Builder;
import java.util.Set;
-import org.eclipse.jdt.annotation.NonNull;
import org.opendaylight.yangtools.yang.common.QName;
import org.opendaylight.yangtools.yang.common.QNameModule;
import org.opendaylight.yangtools.yang.model.api.YangStmtMapping;
import org.opendaylight.yangtools.yang.model.api.stmt.KeyEffectiveStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.KeyStatement;
import org.opendaylight.yangtools.yang.model.ri.stmt.DeclaredStatements;
+import org.opendaylight.yangtools.yang.model.ri.stmt.EffectiveStatements;
import org.opendaylight.yangtools.yang.parser.antlr.YangStatementLexer;
import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport;
import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStmtCtx.Current;
@Override
protected KeyEffectiveStatement createEffective(final Current<Set<QName>, KeyStatement> stmt,
final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
- final Set<QName> arg = stmt.getArgument();
- final KeyStatement declared = stmt.declared();
- if (substatements.isEmpty()) {
- return arg.equals(declared.argument()) ? new EmptyLocalKeyEffectiveStatement(declared)
- : new EmptyForeignKeyEffectiveStatement(declared, arg);
- }
-
- return arg.equals(declared.argument()) ? new RegularLocalKeyEffectiveStatement(declared, substatements)
- : new RegularForeignKeyEffectiveStatement(declared, arg, substatements);
- }
-
- static @NonNull Object maskSet(final @NonNull Set<QName> set) {
- return set.size() == 1 ? set.iterator().next() : set;
- }
-
- @SuppressWarnings("unchecked")
- static @NonNull Set<QName> unmaskSet(final @NonNull Object masked) {
- if (masked instanceof Set) {
- return (Set<QName>) masked;
- }
- verify(masked instanceof QName, "Unexpected argument %s", masked);
- return ImmutableSet.of((QName) masked);
+ return EffectiveStatements.createKey(stmt.declared(), stmt.getArgument(), substatements);
}
}