*/
package org.opendaylight.yangtools.yang.parser.stmt.reactor;
+import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
+
import com.google.common.base.Preconditions;
import com.google.common.collect.HashMultimap;
+import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Multimap;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
+import java.util.Map;
import java.util.Objects;
import javax.annotation.Nullable;
import org.opendaylight.yangtools.concepts.Mutable;
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.parser.spi.meta.ImportedNamespaceContext;
import org.opendaylight.yangtools.yang.parser.spi.meta.InferenceException;
import org.opendaylight.yangtools.yang.parser.spi.meta.NamespaceBehaviour;
import org.opendaylight.yangtools.yang.parser.spi.meta.NamespaceBehaviour.NamespaceStorageNode;
import org.opendaylight.yangtools.yang.parser.spi.meta.NamespaceBehaviour.StorageNodeType;
+import org.opendaylight.yangtools.yang.parser.spi.meta.StatementSupport;
import org.opendaylight.yangtools.yang.parser.spi.source.PrefixToModule;
import org.opendaylight.yangtools.yang.parser.spi.source.QNameToStatementDefinition;
+import org.opendaylight.yangtools.yang.parser.spi.source.QNameToStatementDefinitionMap;
import org.opendaylight.yangtools.yang.parser.spi.source.SourceException;
import org.opendaylight.yangtools.yang.parser.spi.source.StatementSourceReference;
import org.opendaylight.yangtools.yang.parser.spi.source.StatementStreamSource;
private ModelProcessingPhase inProgressPhase;
private ModelProcessingPhase finishedPhase;
+ private QNameToStatementDefinitionMap qNameToStmtDefMap = new QNameToStatementDefinitionMap();
SourceSpecificContext(BuildGlobalContext currentContext,StatementStreamSource source) {
if(current == null) {
return createDeclaredRoot(def,ref);
}
- return current.substatementBuilder(def,ref);
+ return current.substatementBuilder(def, ref);
}
@SuppressWarnings({ "rawtypes", "unchecked" })
if(root == null) {
root = new RootStatementContext(this, SourceSpecificContext.this);
} else {
- Preconditions.checkState(root.getIdentifier().equals(getIdentifier()), "Root statement was already defined.");
+ Preconditions.checkState(root.getIdentifier().equals(getIdentifier()), "Root statement was already defined as %s.", root.getIdentifier());
}
root.resetLists();
return root;
return root.buildDeclared();
}
- EffectiveStatement<?,?> build() {
+ EffectiveStatement<?,?> buildEffective() {
return root.buildEffective();
}
@Override
public StorageNodeType getStorageNodeType() {
- return StorageNodeType.SourceLocalSpecial;
+ return StorageNodeType.SOURCE_LOCAL_SPECIAL;
}
@Override
PhaseCompletionProgress tryToCompletePhase(ModelProcessingPhase phase) throws SourceException {
Collection<ModifierImpl> currentPhaseModifiers = modifiers.get(phase);
+
+ boolean hasProgressed = hasProgress(currentPhaseModifiers);
+
+ boolean phaseCompleted = root.tryToCompletePhase(phase);
+
+ hasProgressed = hasProgress(currentPhaseModifiers);
+
+ if(phaseCompleted && (currentPhaseModifiers.isEmpty())) {
+ finishedPhase = phase;
+ return PhaseCompletionProgress.FINISHED;
+
+ }
+ if(hasProgressed) {
+ return PhaseCompletionProgress.PROGRESS;
+ }
+ return PhaseCompletionProgress.NO_PROGRESS;
+ }
+
+
+ private boolean hasProgress(Collection<ModifierImpl> currentPhaseModifiers) {
+
Iterator<ModifierImpl> modifier = currentPhaseModifiers.iterator();
boolean hasProgressed = false;
while(modifier.hasNext()) {
hasProgressed = true;
}
}
- if(root.tryToCompletePhase(phase) && currentPhaseModifiers.isEmpty()) {
- finishedPhase = phase;
- return PhaseCompletionProgress.FINISHED;
- }
- if(hasProgressed) {
- return PhaseCompletionProgress.PROGRESS;
- }
- return PhaseCompletionProgress.NO_PROGRESS;
+ return hasProgressed;
+
}
ModelActionBuilder newInferenceAction(ModelProcessingPhase phase) {
void loadStatements() throws SourceException {
switch (inProgressPhase) {
- case SourceLinkage:
+ case SOURCE_LINKAGE:
source.writeLinkage(new StatementContextWriter(this, inProgressPhase),stmtDef());
break;
- case StatementDefinition:
+ case STATEMENT_DEFINITION:
source.writeLinkageAndStatementDefinitions(new StatementContextWriter(this, inProgressPhase), stmtDef(), prefixes());
- case FullDeclaration:
+ break;
+ case FULL_DECLARATION:
source.writeFull(new StatementContextWriter(this, inProgressPhase), stmtDef(), prefixes());
-
+ break;
default:
break;
}
}
private QNameToStatementDefinition stmtDef() {
- // TODO Auto-generated method stub
- return null;
+ ImmutableMap<QName, StatementSupport<?, ?, ?>> definitions = currentContext.getSupportsForPhase(
+ inProgressPhase).getDefinitions();
+ for (Map.Entry<QName, StatementSupport<?,?,?>> entry : definitions.entrySet()) {
+ qNameToStmtDefMap.put(entry.getKey(), entry.getValue());
+ }
+ return qNameToStmtDefMap;
}
-
}