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%2FAbstractStatementSupport.java;h=d20181a021b52913d2fa9ee9616c4d2056fae041;hb=ff2e82f6d14803a316c81f0ebf980435eb330976;hp=b891518f71c3bf1c0077278964ff852559e8ac05;hpb=9e5540fb30986583d69e51f9290dbb651338f4b0;p=yangtools.git diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/AbstractStatementSupport.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/AbstractStatementSupport.java index b891518f71..d20181a021 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/AbstractStatementSupport.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/AbstractStatementSupport.java @@ -8,11 +8,16 @@ package org.opendaylight.yangtools.yang.parser.spi.meta; import com.google.common.base.Preconditions; +import java.util.Optional; +import javax.annotation.Nonnull; +import javax.annotation.Nullable; import org.opendaylight.yangtools.yang.common.QName; 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.meta.StatementDefinition; -import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; +import org.opendaylight.yangtools.yang.parser.spi.source.StatementSourceReference; +import org.opendaylight.yangtools.yang.parser.stmt.reactor.StatementContextBase; +import org.opendaylight.yangtools.yang.parser.stmt.reactor.StatementDefinitionContext; /** * @@ -33,11 +38,12 @@ public abstract class AbstractStatementSupport private final StatementDefinition type; - protected AbstractStatementSupport(StatementDefinition publicDefinition) { + protected AbstractStatementSupport(final StatementDefinition publicDefinition) { Preconditions.checkArgument(publicDefinition != this); this.type = Preconditions.checkNotNull(publicDefinition); } + @Nonnull @Override public final QName getStatementName() { return type.getStatementName(); @@ -48,13 +54,15 @@ public abstract class AbstractStatementSupport return type.getArgumentName(); } + @Nonnull @Override public final Class> getDeclaredRepresentationClass() { return type.getDeclaredRepresentationClass(); } + @Nonnull @Override - public final Class> getEffectiveRepresentationClass() { + public final Class> getEffectiveRepresentationClass() { return type.getEffectiveRepresentationClass(); } @@ -64,54 +72,94 @@ public abstract class AbstractStatementSupport } @Override - public abstract A parseArgumentValue(StmtContext ctx, String value) throws SourceException; + public Optional> beforeSubStatementCreated(final StmtContext.Mutable stmt, + final int offset, final StatementDefinitionContext def, final StatementSourceReference ref, + final String argument) { + // NOOP for most implementations and also no implicit statements + return Optional.empty(); + } @Override - public void onStatementAdded(StmtContext.Mutable stmt) { + public void onStatementAdded(final StmtContext.Mutable stmt) { // NOOP for most implementations - }; + } /** - * * {@inheritDoc} * * Subclasses of this class may override this method to perform actions on * this event or register modification action using * {@link StmtContext.Mutable#newInferenceAction(ModelProcessingPhase)}. - * */ @Override - public void onLinkageDeclared(StmtContext.Mutable stmt) throws InferenceException, SourceException { + public void onPreLinkageDeclared(final StmtContext.Mutable stmt) { // NOOP for most implementations } /** - * * {@inheritDoc} * * Subclasses of this class may override this method to perform actions on * this event or register modification action using * {@link StmtContext.Mutable#newInferenceAction(ModelProcessingPhase)}. - * */ @Override - public void onStatementDefinitionDeclared(StmtContext.Mutable stmt) throws InferenceException, - SourceException { + public void onLinkageDeclared(final StmtContext.Mutable stmt) { // NOOP for most implementations } /** - * * {@inheritDoc} * * Subclasses of this class may override this method to perform actions on * this event or register modification action using * {@link StmtContext.Mutable#newInferenceAction(ModelProcessingPhase)}. - * */ @Override - public void onFullDefinitionDeclared(StmtContext.Mutable stmt) throws InferenceException, SourceException { + public void onStatementDefinitionDeclared(final StmtContext.Mutable stmt) { // NOOP for most implementations } + /** + * {@inheritDoc} + * + * Subclasses of this class may override this method to perform actions on + * this event or register modification action using + * {@link StmtContext.Mutable#newInferenceAction(ModelProcessingPhase)}. + */ + @Override + public void onFullDefinitionDeclared(final StmtContext.Mutable stmt) { + final SubstatementValidator validator = getSubstatementValidator(); + if (validator != null) { + validator.validate(stmt); + } + } + + @Override + public boolean isArgumentYinElement() { + return getPublicView().isArgumentYinElement(); + } + + @Override + public boolean hasArgumentSpecificSupports() { + // Most of statement supports don't have any argument specific + // supports, so return 'false'. + return false; + } + + @Override + public StatementSupport getSupportSpecificForArgument(final String argument) { + // Most of statement supports don't have any argument specific + // supports, so return null. + return null; + } + + /** + * Returns corresponding substatement validator of a statement support + * + * @return substatement validator or null, if substatement validator is not + * defined + */ + @Nullable + protected abstract SubstatementValidator getSubstatementValidator(); }