X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=yang%2Fyang-parser-impl%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fyangtools%2Fyang%2Fparser%2Fspi%2Fmeta%2FStmtContextUtils.java;h=eccbaca07d4bc14093b6a60b8b17f76e9c4280a5;hb=30c67c4d780e897d972d60bb79d546b512516f90;hp=a410c197d9fae6d06bf63124117e2fd9a2ad8e3a;hpb=1f53275ab208027b01a60c697f576ce9fca7db22;p=yangtools.git diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/StmtContextUtils.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/StmtContextUtils.java index a410c197d9..eccbaca07d 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/StmtContextUtils.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/StmtContextUtils.java @@ -8,26 +8,47 @@ package org.opendaylight.yangtools.yang.parser.spi.meta; import com.google.common.base.Function; +import com.google.common.base.Predicate; +import com.google.common.base.Splitter; import java.util.Collection; +import java.util.HashSet; +import java.util.List; +import java.util.Set; +import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.common.QNameModule; import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.KeyStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext.TypeOfCopy; +import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.UnknownStatementImpl; public final class StmtContextUtils { - private static final Function, DeclaredStatement> BUILD_DECLARED = new Function, DeclaredStatement>() { + public static final char LIST_KEY_SEPARATOR = ' '; + private static final Splitter KEY_SPLITTER = Splitter.on(LIST_KEY_SEPARATOR).omitEmptyStrings().trimResults(); + + private static final Function, DeclaredStatement> BUILD_DECLARED = new Function, DeclaredStatement>() { @Override public DeclaredStatement apply(final StmtContext input) { return input.buildDeclared(); } }; - private static final Function, EffectiveStatement> BUILD_EFFECTIVE = new Function, EffectiveStatement>() { + private static final Function, EffectiveStatement> BUILD_EFFECTIVE = new Function, EffectiveStatement>() { @Override public EffectiveStatement apply(final StmtContext input) { return input.buildEffective(); } }; + public static final Predicate> IS_SUPPORTED_TO_BUILD_EFFECTIVE = new Predicate>() { + @Override + public boolean apply(StmtContext input) { + return input.isSupportedToBuildEffective(); + } + }; + private StmtContextUtils() { throw new UnsupportedOperationException("Utility class"); } @@ -38,14 +59,13 @@ public final class StmtContextUtils { } @SuppressWarnings("unchecked") - public static > Function, E> buildEffective() { + public static final > Function, E> buildEffective() { return Function.class.cast(BUILD_EFFECTIVE); } @SuppressWarnings("unchecked") - public static > AT firstAttributeOf( - final Iterable> contexts, - final Class
declaredType) { + public static final > AT firstAttributeOf( + final Iterable> contexts, final Class
declaredType) { for (StmtContext ctx : contexts) { if (producesDeclared(ctx, declaredType)) { return (AT) ctx.getStatementArgument(); @@ -55,8 +75,8 @@ public final class StmtContextUtils { } @SuppressWarnings("unchecked") - public static > AT firstAttributeOf( - final StmtContext ctx, final Class
declaredType) { + public static final > AT firstAttributeOf(final StmtContext ctx, + final Class
declaredType) { if (producesDeclared(ctx, declaredType)) { return (AT) ctx.getStatementArgument(); @@ -65,52 +85,48 @@ public final class StmtContextUtils { return null; } - public static
> StmtContext findFirstDeclaredSubstatement( - final StmtContext stmtContext, final Class
declaredType) { - Collection> declaredSubstatements = stmtContext - .declaredSubstatements(); + @SuppressWarnings("unchecked") + public static final > StmtContext findFirstDeclaredSubstatement( + StmtContext stmtContext, Class
declaredType) { + Collection> declaredSubstatements = stmtContext.declaredSubstatements(); for (StmtContext subStmtContext : declaredSubstatements) { - if (producesDeclared(subStmtContext,declaredType)) { - return subStmtContext; + if (producesDeclared(subStmtContext, declaredType)) { + return (StmtContext) subStmtContext; } } return null; } - public static StmtContext findFirstDeclaredSubstatement( - final StmtContext stmtContext, int startIndex, final Class>... types) { + public static final StmtContext findFirstDeclaredSubstatement(final StmtContext stmtContext, + int startIndex, final Class>... types) { if (startIndex >= types.length) { return null; } - Collection> declaredSubstatements = stmtContext - .declaredSubstatements(); + Collection> declaredSubstatements = stmtContext.declaredSubstatements(); for (StmtContext subStmtContext : declaredSubstatements) { - if (producesDeclared(subStmtContext,types[startIndex])) { + if (producesDeclared(subStmtContext, types[startIndex])) { if (startIndex + 1 == types.length) { return subStmtContext; } else { - return findFirstDeclaredSubstatement(subStmtContext, - ++startIndex, types); + return findFirstDeclaredSubstatement(subStmtContext, ++startIndex, types); } } } return null; } - public static
> StmtContext findFirstDeclaredSubstatementOnSublevel( - final StmtContext stmtContext, final Class
declaredType, - int sublevel) { - Collection> declaredSubstatements = stmtContext - .declaredSubstatements(); + public static final
> StmtContext findFirstDeclaredSubstatementOnSublevel( + final StmtContext stmtContext, final Class
declaredType, int sublevel) { + Collection> declaredSubstatements = stmtContext.declaredSubstatements(); for (StmtContext subStmtContext : declaredSubstatements) { - if (sublevel == 1 && producesDeclared(subStmtContext,declaredType)) { + if (sublevel == 1 && producesDeclared(subStmtContext, declaredType)) { return subStmtContext; } else { if (sublevel > 1) { - StmtContext result = findFirstDeclaredSubstatementOnSublevel( - subStmtContext, declaredType, --sublevel); + StmtContext result = findFirstDeclaredSubstatementOnSublevel(subStmtContext, declaredType, + --sublevel); if (result != null) { return result; } @@ -120,18 +136,16 @@ public final class StmtContextUtils { return null; } - public static
> StmtContext findDeepFirstDeclaredSubstatement( + public static final
> StmtContext findDeepFirstDeclaredSubstatement( final StmtContext stmtContext, final Class
declaredType) { - Collection> declaredSubstatements = stmtContext - .declaredSubstatements(); + Collection> declaredSubstatements = stmtContext.declaredSubstatements(); for (StmtContext subStmtContext : declaredSubstatements) { - if (producesDeclared(subStmtContext,declaredType)) { + if (producesDeclared(subStmtContext, declaredType)) { return subStmtContext; } else { - StmtContext result = findDeepFirstDeclaredSubstatement( - subStmtContext, declaredType); + StmtContext result = findDeepFirstDeclaredSubstatement(subStmtContext, declaredType); if (result != null) { return result; } @@ -141,9 +155,54 @@ public final class StmtContextUtils { return null; } - public static boolean producesDeclared(final StmtContext ctx, + public static final boolean producesDeclared(final StmtContext ctx, final Class> type) { - return type.isAssignableFrom(ctx.getPublicDefinition() - .getDeclaredRepresentationClass()); + return type.isAssignableFrom(ctx.getPublicDefinition().getDeclaredRepresentationClass()); + } + + public static boolean isInExtensionBody(StmtContext stmtCtx) { + + StmtContext current = stmtCtx; + while (!current.getParentContext().isRootContext()) { + current = current.getParentContext(); + if (producesDeclared(current, UnknownStatementImpl.class)) { + return true; + } + } + + return false; + } + + public static boolean isUnknownStatement(StmtContext stmtCtx) { + return producesDeclared(stmtCtx, UnknownStatementImpl.class); + } + + public static Set getCopyTypesFromOriginal(StmtContext ctx) { + + Set copyTypesFromOriginal = new HashSet<>(); + StmtContext current = ctx; + + while (current.getOriginalCtx() != null) { + copyTypesFromOriginal.add(current.getTypeOfCopy()); + current = current.getOriginalCtx(); + } + + return copyTypesFromOriginal; + } + + public static Collection replaceModuleQNameForKey( + StmtContext, KeyStatement, ?> keyStmtCtx, QNameModule newQNameModule) { + + List keyTokens = KEY_SPLITTER.splitToList(keyStmtCtx.rawStatementArgument()); + + Set newKeys = new HashSet<>(); + + for (String keyToken : keyTokens) { + QName keyQName = QName.create(newQNameModule, keyToken); + SchemaNodeIdentifier keyIdentifier = SchemaNodeIdentifier.create(false, keyQName); + newKeys.add(keyIdentifier); + } + + return newKeys; } }