import java.util.Collections;
import java.util.EnumMap;
import java.util.EventListener;
+import java.util.HashMap;
import java.util.Iterator;
-import java.util.LinkedHashMap;
import java.util.Map;
import javax.annotation.Nonnull;
import org.opendaylight.yangtools.concepts.Identifiable;
public abstract class StatementContextBase<A, D extends DeclaredStatement<A>, E extends EffectiveStatement<A, D>>
extends NamespaceStorageSupport implements StmtContext.Mutable<A, D, E>, Identifiable<StatementIdentifier> {
+ @SuppressWarnings({ "rawtypes", "unchecked" })
+ private final class SubContextBuilder extends ContextBuilder {
+ SubContextBuilder(final StatementDefinitionContext def, final StatementSourceReference sourceRef) {
+ super(def, sourceRef);
+ }
+
+ @Override
+ public StatementContextBase build() {
+ StatementContextBase<?, ?, ?> potential = null;
+
+ final StatementDefinition stmtDef = getDefinition().getPublicView();
+ // FIXME: this is rather ugly. Rather than having an explicit blacklist, StatementDefinitionContext should
+ // give us information whether we should really bother with the substatements map.
+ if (stmtDef != Rfc6020Mapping.AUGMENT && stmtDef != Rfc6020Mapping.DEVIATION
+ && stmtDef != Rfc6020Mapping.IMPORT && stmtDef != Rfc6020Mapping.TYPE) {
+ potential = substatements.get(createIdentifier());
+ }
+ if (potential == null) {
+ potential = new SubstatementContext(StatementContextBase.this, this);
+ if (substatements.isEmpty()) {
+ substatements = new HashMap<>(1);
+ }
+ substatements.put(createIdentifier(), potential);
+ getDefinition().onStatementAdded(potential);
+ }
+ potential.resetLists();
+ switch (this.getStamementSource().getStatementSource()) {
+ case DECLARATION:
+ addDeclaredSubstatement(potential);
+ break;
+ case CONTEXT:
+ addEffectiveSubstatement(potential);
+ break;
+ }
+ return potential;
+ }
+ }
+
/**
* event listener when an item is added to model namespace
*/
return maybeWrap(declared);
}
- /**
- * @return collection of all substatements
- */
- @Override
- public Collection<StatementContextBase<?, ?, ?>> substatements() {
- return maybeWrap(substatements.values());
- }
-
@Override
public Collection<StatementContextBase<?, ?, ?>> effectiveSubstatements() {
return maybeWrap(effective);
*
* @return instance of ContextBuilder
*/
- @SuppressWarnings({ "rawtypes", "unchecked" })
public ContextBuilder<?, ?, ?> substatementBuilder(final StatementDefinitionContext<?, ?, ?> def,
final StatementSourceReference ref) {
- return new ContextBuilder(def, ref) {
-
- @Override
- public StatementContextBase build() throws SourceException {
- StatementContextBase<?, ?, ?> potential = null;
-
- final StatementDefinition stmtDef = getDefinition().getPublicView();
- if (stmtDef != Rfc6020Mapping.AUGMENT && stmtDef != Rfc6020Mapping.DEVIATION
- && stmtDef != Rfc6020Mapping.TYPE) {
- potential = substatements.get(createIdentifier());
- }
- if (potential == null) {
- potential = new SubstatementContext(StatementContextBase.this, this);
- if (substatements.isEmpty()) {
- substatements = new LinkedHashMap<>(1);
- }
- substatements.put(createIdentifier(), potential);
- getDefinition().onStatementAdded(potential);
- }
- potential.resetLists();
- switch (this.getStamementSource().getStatementSource()) {
- case DECLARATION:
- addDeclaredSubstatement(potential);
- break;
- case CONTEXT:
- addEffectiveSubstatement(potential);
- break;
- }
- return potential;
- }
- };
+ return new SubContextBuilder(def, ref);
}
/**