Bug 6183 - Shorthand case should create case node in schema tree
[yangtools.git] / yang / yang-parser-impl / src / main / java / org / opendaylight / yangtools / yang / parser / stmt / reactor / StatementDefinitionContext.java
index bf99398bd80c3639124686eeab6236d92139d7b1..c1a1d2581aab85209b5184e6c2ddf742c42c8e2b 100644 (file)
@@ -7,36 +7,38 @@
  */
 package org.opendaylight.yangtools.yang.parser.stmt.reactor;
 
+import com.google.common.base.MoreObjects;
+import com.google.common.base.MoreObjects.ToStringHelper;
+import com.google.common.base.Preconditions;
+import java.util.Optional;
 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.IdentifierNamespace;
 import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition;
 import org.opendaylight.yangtools.yang.parser.spi.meta.ModelProcessingPhase;
-import org.opendaylight.yangtools.yang.parser.spi.meta.NamespaceNotAvailableException;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StatementFactory;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StatementSupport;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext.Mutable;
-import org.opendaylight.yangtools.yang.parser.spi.source.SourceException;
+import org.opendaylight.yangtools.yang.parser.spi.source.StatementSourceReference;
 
-class StatementDefinitionContext<A,D extends DeclaredStatement<A>,E extends EffectiveStatement<A,D>> {
-    private final StatementSupport<A,D,E> support;
-    public StatementDefinitionContext(StatementSupport<A,D,E> support) {
-        this.support= support;
-    }
+public class StatementDefinitionContext<A, D extends DeclaredStatement<A>, E extends EffectiveStatement<A, D>> {
+    private final StatementSupport<A, D, E> support;
 
+    public StatementDefinitionContext(final StatementSupport<A, D, E> support) {
+        this.support = Preconditions.checkNotNull(support);
+    }
 
     public StatementFactory<A,D,E> getFactory() {
         return support;
     }
 
-    public A parseArgumentValue(StmtContext<A,D,E> context, String value) throws SourceException {
+    public A parseArgumentValue(final StmtContext<A, D, E> context, final String value) {
         return support.parseArgumentValue(context,value);
     }
 
-
-    public void checkNamespaceAllowed(Class<? extends IdentifierNamespace<?,?>> namespace) throws NamespaceNotAvailableException {
+    public void checkNamespaceAllowed(final Class<? extends IdentifierNamespace<?,?>> namespace) {
         // Noop
     }
 
@@ -44,39 +46,54 @@ class StatementDefinitionContext<A,D extends DeclaredStatement<A>,E extends Effe
         return support.getPublicView();
     }
 
-    public boolean onStatementAdded(Mutable<A,D,E> stmt) {
+    public Optional<StatementContextBase<?, ?, ?>> beforeSubStatementCreated(final Mutable<?, ?, ?> stmt, final int offset, final StatementDefinitionContext<?, ?, ?> def, final StatementSourceReference ref,
+            final String argument) {
+        return support.beforeSubStatementCreated(stmt, offset, def, ref, argument);
+    }
+
+    public boolean onStatementAdded(final Mutable<A, D, E> stmt) {
+        support.onStatementAdded(stmt);
         return false;
     }
 
 
-    public void onDeclarationFinished(Mutable<A,D,E> statement, ModelProcessingPhase phase) throws SourceException {
+    public void onDeclarationFinished(final Mutable<A, D, E> statement, final ModelProcessingPhase phase) {
         switch (phase) {
-        case SourceLinkage:
+        case SOURCE_PRE_LINKAGE:
+            support.onPreLinkageDeclared(statement);
+            break;
+        case SOURCE_LINKAGE:
             support.onLinkageDeclared(statement);
             break;
-        case StatementDefinition:
+        case STATEMENT_DEFINITION:
             support.onStatementDefinitionDeclared(statement);
-        case FullDeclaration:
+            break;
+        case FULL_DECLARATION:
             support.onFullDefinitionDeclared(statement);
+            break;
         default:
             break;
         }
     }
 
-
-
     public Class<?> getRepresentingClass() {
         return support.getDeclaredRepresentationClass();
     }
 
-
     public boolean hasArgument() {
         return support.getArgumentName() != null;
     }
 
-
     public QName getStatementName() {
         return support.getStatementName();
     }
 
+    @Override
+    public final String toString() {
+        return addToStringAttributes(MoreObjects.toStringHelper(this).omitNullValues()).toString();
+    }
+
+    protected ToStringHelper addToStringAttributes(final ToStringHelper toStringHelper) {
+        return toStringHelper.add("statement", getStatementName());
+    }
 }