Make getOriginalCtx() give out an Optional
[yangtools.git] / yang / yang-parser-impl / src / main / java / org / opendaylight / yangtools / yang / parser / stmt / rfc6020 / effective / AugmentEffectiveStatementImpl.java
index 837f179180bf71c88e6d89939896ea24a4cb249e..18c64e9e16756b751499bafbcbea5a531ba2a939 100644 (file)
@@ -11,16 +11,20 @@ import static com.google.common.base.Preconditions.checkNotNull;
 
 import com.google.common.base.Optional;
 import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableSet;
 import java.net.URI;
-import java.util.Collection;
 import java.util.Date;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Objects;
+import java.util.Set;
+import javax.annotation.Nonnull;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.common.QNameModule;
+import org.opendaylight.yangtools.yang.model.api.ActionDefinition;
 import org.opendaylight.yangtools.yang.model.api.AugmentationSchema;
 import org.opendaylight.yangtools.yang.model.api.NamespaceRevisionAware;
+import org.opendaylight.yangtools.yang.model.api.NotificationDefinition;
 import org.opendaylight.yangtools.yang.model.api.RevisionAwareXPath;
 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
 import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode;
@@ -28,7 +32,7 @@ import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.AugmentStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
-import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.Utils;
+import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils;
 
 public final class AugmentEffectiveStatementImpl extends
         AbstractEffectiveDocumentedDataNodeContainer<SchemaNodeIdentifier, AugmentStatement> implements
@@ -37,6 +41,8 @@ public final class AugmentEffectiveStatementImpl extends
     private final URI namespace;
     private final Date revision;
     private final int order;
+    private final Set<ActionDefinition> actions;
+    private final Set<NotificationDefinition> notifications;
     private final List<UnknownSchemaNode> unknownNodes;
     private final RevisionAwareXPath whenCondition;
     private final AugmentationSchema copyOf;
@@ -47,24 +53,32 @@ public final class AugmentEffectiveStatementImpl extends
 
         this.targetPath = ctx.getStatementArgument().asSchemaPath();
 
-        QNameModule rootModuleQName = Utils.getRootModuleQName(ctx);
+        final QNameModule rootModuleQName = StmtContextUtils.getRootModuleQName(ctx);
         this.namespace = rootModuleQName.getNamespace();
         this.revision = rootModuleQName.getRevision();
 
         this.order = ctx.getOrder();
-        this.copyOf = ctx.getOriginalCtx() == null ? null : (AugmentationSchema) ctx.getOriginalCtx().buildEffective();
+        this.copyOf = (AugmentationSchema) ctx.getOriginalCtx().map(StmtContext::buildEffective).orElse(null);
 
-        WhenEffectiveStatementImpl whenStmt = firstEffective(WhenEffectiveStatementImpl.class);
-        this.whenCondition = (whenStmt == null) ? null : whenStmt.argument();
+        final WhenEffectiveStatementImpl whenStmt = firstEffective(WhenEffectiveStatementImpl.class);
+        this.whenCondition = whenStmt == null ? null : whenStmt.argument();
 
         // initSubstatementCollections
-        Collection<? extends EffectiveStatement<?, ?>> effectiveSubstatements = effectiveSubstatements();
-        ImmutableList.Builder<UnknownSchemaNode> listBuilder = new ImmutableList.Builder<>();
-        for (EffectiveStatement<?, ?> effectiveStatement : effectiveSubstatements) {
-            if (effectiveStatement instanceof UnknownSchemaNode) {
+        final ImmutableSet.Builder<ActionDefinition> actionsBuilder = ImmutableSet.builder();
+        final ImmutableSet.Builder<NotificationDefinition> notificationsBuilder = ImmutableSet.builder();
+        final ImmutableList.Builder<UnknownSchemaNode> listBuilder = new ImmutableList.Builder<>();
+        for (final EffectiveStatement<?, ?> effectiveStatement : effectiveSubstatements()) {
+            if (effectiveStatement instanceof ActionDefinition) {
+                actionsBuilder.add((ActionDefinition) effectiveStatement);
+            } else if (effectiveStatement instanceof NotificationDefinition) {
+                notificationsBuilder.add((NotificationDefinition) effectiveStatement);
+            } else if (effectiveStatement instanceof UnknownSchemaNode) {
                 listBuilder.add((UnknownSchemaNode) effectiveStatement);
             }
         }
+
+        this.actions = actionsBuilder.build();
+        this.notifications = notificationsBuilder.build();
         this.unknownNodes = listBuilder.build();
     }
 
@@ -83,6 +97,7 @@ public final class AugmentEffectiveStatementImpl extends
         return whenCondition;
     }
 
+    @Nonnull
     @Override
     public List<UnknownSchemaNode> getUnknownSchemaNodes() {
         return unknownNodes;
@@ -93,6 +108,16 @@ public final class AugmentEffectiveStatementImpl extends
         return namespace;
     }
 
+    @Override
+    public Set<ActionDefinition> getActions() {
+        return actions;
+    }
+
+    @Override
+    public Set<NotificationDefinition> getNotifications() {
+        return notifications;
+    }
+
     @Override
     public Date getRevision() {
         return revision;
@@ -119,7 +144,7 @@ public final class AugmentEffectiveStatementImpl extends
         if (getClass() != obj.getClass()) {
             return false;
         }
-        AugmentEffectiveStatementImpl other = (AugmentEffectiveStatementImpl) obj;
+        final AugmentEffectiveStatementImpl other = (AugmentEffectiveStatementImpl) obj;
         if (!Objects.equals(targetPath, other.targetPath)) {
             return false;
         }
@@ -134,22 +159,18 @@ public final class AugmentEffectiveStatementImpl extends
 
     @Override
     public String toString() {
-        StringBuilder sb = new StringBuilder(AugmentEffectiveStatementImpl.class.getSimpleName());
-        sb.append("[");
-        sb.append("targetPath=").append(targetPath);
-        sb.append(", when=").append(whenCondition);
-        sb.append("]");
-        return sb.toString();
+        return AugmentEffectiveStatementImpl.class.getSimpleName() + "[" + "targetPath=" + targetPath + ", when="
+                + whenCondition + "]";
     }
 
     @Override
-    public int compareTo(final AugmentEffectiveStatementImpl o) {
+    public int compareTo(@Nonnull final AugmentEffectiveStatementImpl o) {
         checkNotNull(o);
-        Iterator<QName> thisIt = this.targetPath.getPathFromRoot().iterator();
-        Iterator<QName> otherIt = o.getTargetPath().getPathFromRoot().iterator();
+        final Iterator<QName> thisIt = this.targetPath.getPathFromRoot().iterator();
+        final Iterator<QName> otherIt = o.getTargetPath().getPathFromRoot().iterator();
         while (thisIt.hasNext()) {
             if (otherIt.hasNext()) {
-                int comp = thisIt.next().compareTo(otherIt.next());
+                final int comp = thisIt.next().compareTo(otherIt.next());
                 if (comp != 0) {
                     return comp;
                 }