Refactor typedef implementations
[yangtools.git] / yang / yang-model-api / src / main / java / org / opendaylight / yangtools / yang / model / api / stmt / RefineStatement.java
index 790fc87072fa3352de17529b74ef21174595f7dd..fb9afef39650e4760d5e206ed517fd7435c58644 100644 (file)
@@ -7,36 +7,38 @@
  */
 package org.opendaylight.yangtools.yang.model.api.stmt;
 
-import java.util.Collection;
-import javax.annotation.Nullable;
-import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
-
-
-public interface RefineStatement extends DeclaredStatement<SchemaNodeIdentifier>, DocumentationGroup {
-
-    String getTargetNode();
-
-    public interface RefineContainerStatement extends RefineStatement {
-
-        Collection<? extends MustStatement> getMusts();
-
-        @Nullable ConfigStatement getConfig();
-
-        @Nullable PresenceStatement getPresence();
+import static com.google.common.base.Verify.verifyNotNull;
 
+import java.util.Collection;
+import java.util.Optional;
+import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.jdt.annotation.Nullable;
+
+public interface RefineStatement extends ConfigStatementAwareDeclaredStatement<SchemaNodeIdentifier>,
+        DocumentedDeclaredStatement<SchemaNodeIdentifier>, IfFeatureAwareDeclaredStatement<SchemaNodeIdentifier>,
+        MandatoryStatementAwareDeclaredStatement<SchemaNodeIdentifier>,
+        MustStatementAwareDeclaredStatement<SchemaNodeIdentifier> {
+    default @NonNull String getTargetNode() {
+        // FIXME: YANGTOOLS-908: verifyNotNull() should not be needed here
+        return verifyNotNull(rawArgument());
     }
 
-    public interface RefineLeafStatement extends RefineStatement {
-
-        Collection<? extends MustStatement> getMusts();
-
-        @Nullable DefaultStatement getDefault();
-
-        @Nullable ConfigStatement getConfig();
+    default @NonNull Collection<? extends DefaultStatement> getDefaults() {
+        return declaredSubstatements(DefaultStatement.class);
+    }
 
-        @Nullable PresenceStatement getPresence();
+    default @Nullable PresenceStatement getPresence() {
+        final Optional<PresenceStatement> opt = findFirstDeclaredSubstatement(PresenceStatement.class);
+        return opt.isPresent() ? opt.get() : null;
+    }
 
+    default @Nullable MinElementsStatement getMinElements() {
+        final Optional<MinElementsStatement> opt = findFirstDeclaredSubstatement(MinElementsStatement.class);
+        return opt.isPresent() ? opt.get() : null;
     }
 
+    default @Nullable MaxElementsStatement getMaxElements() {
+        final Optional<MaxElementsStatement> opt = findFirstDeclaredSubstatement(MaxElementsStatement.class);
+        return opt.isPresent() ? opt.get() : null;
+    }
 }
-