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%2Fstmt%2Freactor%2FBuildGlobalContext.java;h=cb0dd2c3437cf505d86b9ad120de14603bd7be09;hb=481a692d463636bbcf75f023da71703913e1b605;hp=7bfee3471b203a750190448748300b2269dcc31b;hpb=c7c67c1ad9fbd77e2705345400f1db5b3d46e200;p=yangtools.git diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/BuildGlobalContext.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/BuildGlobalContext.java index 7bfee3471b..cb0dd2c343 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/BuildGlobalContext.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/BuildGlobalContext.java @@ -7,6 +7,9 @@ */ package org.opendaylight.yangtools.yang.parser.stmt.reactor; +import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.EffectiveSchemaContext; + +import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import com.google.common.base.Preconditions; import com.google.common.base.Throwables; import com.google.common.collect.ImmutableList; @@ -60,6 +63,10 @@ class BuildGlobalContext extends NamespaceStorageSupport implements NamespaceBeh this.supports = supports; } + public StatementSupportBundle getSupportsForPhase(ModelProcessingPhase currentPhase) { + return supports.get(currentPhase); + } + public void addSource(@Nonnull StatementStreamSource source) { sources.add(new SourceSpecificContext(this,source)); } @@ -135,6 +142,32 @@ class BuildGlobalContext extends NamespaceStorageSupport implements NamespaceBeh return new EffectiveModelContext(rootStatements); } + public EffectiveSchemaContext buildEffective() throws SourceException, ReactorException { + for(ModelProcessingPhase phase : PHASE_EXECUTION_ORDER) { + startPhase(phase); + loadPhaseStatements(); + completePhaseActions(); + endPhase(phase); + } + return transformEffective(); + } + + private EffectiveSchemaContext transformEffective() { + Preconditions.checkState(finishedPhase == ModelProcessingPhase.EFFECTIVE_MODEL); + List> rootStatements = new ArrayList<>(); + List> rootEffectiveStatements = new ArrayList<>(); + + for(SourceSpecificContext source : sources) { + DeclaredStatement root = source.getRoot().buildDeclared(); + rootStatements.add(root); + + EffectiveStatement rootEffective = source.getRoot().buildEffective(); + rootEffectiveStatements.add(rootEffective); + } + + return new EffectiveSchemaContext(rootStatements,rootEffectiveStatements); + } + private void startPhase(ModelProcessingPhase phase) { Preconditions.checkState(Objects.equals(finishedPhase, phase.getPreviousPhase())); for(SourceSpecificContext source : sources) {