*/
package org.opendaylight.yangtools.yang.parser.rfc7950.reactor;
+import static com.google.common.base.Verify.verifyNotNull;
+
import com.google.common.annotations.Beta;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Table;
import java.util.Map.Entry;
import java.util.Set;
import org.eclipse.jdt.annotation.NonNull;
-import org.opendaylight.yangtools.concepts.Builder;
+import org.opendaylight.yangtools.concepts.Mutable;
import org.opendaylight.yangtools.yang.common.QName;
import org.opendaylight.yangtools.yang.common.YangVersion;
import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition;
import org.opendaylight.yangtools.yang.parser.spi.meta.NamespaceBehaviour;
import org.opendaylight.yangtools.yang.parser.spi.meta.StatementSupport;
import org.opendaylight.yangtools.yang.parser.spi.meta.StatementSupportBundle;
-import org.opendaylight.yangtools.yang.parser.spi.validation.ValidationBundlesNamespace.ValidationBundleType;
+import org.opendaylight.yangtools.yang.parser.spi.validation.ValidationBundles.ValidationBundleType;
import org.opendaylight.yangtools.yang.parser.stmt.reactor.CrossSourceStatementReactor;
@Beta
-public class CustomCrossSourceStatementReactorBuilder implements Builder<CrossSourceStatementReactor> {
+public class CustomCrossSourceStatementReactorBuilder implements Mutable {
private final ImmutableMap<ModelProcessingPhase, StatementSupportBundle.Builder> reactorSupportBundles;
private final Map<ValidationBundleType, Collection<StatementDefinition>> reactorValidationBundles = new HashMap<>();
public @NonNull CustomCrossSourceStatementReactorBuilder addStatementSupport(final ModelProcessingPhase phase,
final StatementSupport<?, ?, ?> stmtSupport) {
- reactorSupportBundles.get(phase).addSupport(stmtSupport);
+ getBuilder(phase).addSupport(stmtSupport);
return this;
}
public @NonNull CustomCrossSourceStatementReactorBuilder overrideStatementSupport(final ModelProcessingPhase phase,
final StatementSupport<?, ?, ?> stmtSupport) {
- reactorSupportBundles.get(phase).overrideSupport(stmtSupport);
+ getBuilder(phase).overrideSupport(stmtSupport);
return this;
}
public @NonNull CustomCrossSourceStatementReactorBuilder addNamespaceSupport(final ModelProcessingPhase phase,
final NamespaceBehaviour<?, ?, ?> namespaceSupport) {
- reactorSupportBundles.get(phase).addSupport(namespaceSupport);
+ getBuilder(phase).addSupport(namespaceSupport);
return this;
}
return this;
}
- @Override
+ /**
+ * Return a new {@link CrossSourceStatementReactor}.
+ *
+ * @return A CrossSourceStatementReactor
+ */
public @NonNull CrossSourceStatementReactor build() {
- final StatementSupportBundle initBundle = reactorSupportBundles.get(ModelProcessingPhase.INIT).build();
- final StatementSupportBundle preLinkageBundle = reactorSupportBundles
- .get(ModelProcessingPhase.SOURCE_PRE_LINKAGE).setParent(initBundle).build();
- final StatementSupportBundle linkageBundle = reactorSupportBundles.get(ModelProcessingPhase.SOURCE_LINKAGE)
- .setParent(preLinkageBundle).build();
- final StatementSupportBundle stmtDefBundle = reactorSupportBundles
- .get(ModelProcessingPhase.STATEMENT_DEFINITION).setParent(linkageBundle).build();
- final StatementSupportBundle fullDeclBundle = reactorSupportBundles.get(ModelProcessingPhase.FULL_DECLARATION)
- .setParent(stmtDefBundle).build();
- final StatementSupportBundle effectiveBundle = reactorSupportBundles.get(ModelProcessingPhase.EFFECTIVE_MODEL)
- .setParent(fullDeclBundle).build();
+ final StatementSupportBundle initBundle = getBuilder(ModelProcessingPhase.INIT).build();
+ final StatementSupportBundle preLinkageBundle = getBuilder(ModelProcessingPhase.SOURCE_PRE_LINKAGE)
+ .setParent(initBundle).build();
+ final StatementSupportBundle linkageBundle = getBuilder(ModelProcessingPhase.SOURCE_LINKAGE)
+ .setParent(preLinkageBundle).build();
+ final StatementSupportBundle stmtDefBundle = getBuilder(ModelProcessingPhase.STATEMENT_DEFINITION)
+ .setParent(linkageBundle).build();
+ final StatementSupportBundle fullDeclBundle = getBuilder(ModelProcessingPhase.FULL_DECLARATION)
+ .setParent(stmtDefBundle).build();
+ final StatementSupportBundle effectiveBundle = getBuilder(ModelProcessingPhase.EFFECTIVE_MODEL)
+ .setParent(fullDeclBundle).build();
final CrossSourceStatementReactor.Builder reactorBuilder = CrossSourceStatementReactor.builder()
.setBundle(ModelProcessingPhase.INIT, initBundle)
.setBundle(ModelProcessingPhase.FULL_DECLARATION, fullDeclBundle)
.setBundle(ModelProcessingPhase.EFFECTIVE_MODEL, effectiveBundle);
- for (final Entry<ValidationBundleType, Collection<StatementDefinition>> entry : reactorValidationBundles
- .entrySet()) {
+ for (Entry<ValidationBundleType, Collection<StatementDefinition>> entry : reactorValidationBundles.entrySet()) {
reactorBuilder.setValidationBundle(entry.getKey(), entry.getValue());
}
return reactorBuilder.build();
}
+
+ private StatementSupportBundle.@NonNull Builder getBuilder(final ModelProcessingPhase phase) {
+ return verifyNotNull(reactorSupportBundles.get(phase));
+ }
}