Remove AlwaysFailOperation 83/80283/1
authorRobert Varga <robert.varga@pantheon.tech>
Tue, 12 Feb 2019 12:39:25 +0000 (13:39 +0100)
committerRobert Varga <robert.varga@pantheon.tech>
Tue, 12 Feb 2019 12:50:23 +0000 (13:50 +0100)
AlwaysFailOperation guards the case when we do not have a schema
context, which is exceeding rare and there is exactly one place
where we can check for null to detect non-presence of an operation.

Remove this implementation along with
NonApplyDelegatedModificationApplyOperation, making
MinMaxElementsValidation the only delegating implementation.

JIRA: YANGTOOLS-955
Change-Id: Id70814eced80dd80948a1a5601287977fa77cf12
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/AlwaysFailOperation.java [deleted file]
yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/InMemoryDataTreeModification.java
yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/LatestOperationHolder.java
yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/NonApplyDelegatedModificationApplyOperation.java [deleted file]
yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/RootApplyStrategy.java
yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/UpgradableRootApplyStrategy.java

diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/AlwaysFailOperation.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/AlwaysFailOperation.java
deleted file mode 100644 (file)
index 18dae27..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright (c) 2014 Cisco Systems, Inc. and others.  All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-package org.opendaylight.yangtools.yang.data.impl.schema.tree;
-
-import java.util.Optional;
-import org.opendaylight.yangtools.yang.data.api.schema.tree.DataValidationFailedException;
-import org.opendaylight.yangtools.yang.data.api.schema.tree.spi.TreeNode;
-import org.opendaylight.yangtools.yang.data.api.schema.tree.spi.Version;
-
-/**
- * An implementation of apply operation which fails to do anything, consistently. An instance of this class is used by
- * the data tree if it does not have a SchemaContext attached and hence cannot perform anything meaningful.
- */
-final class AlwaysFailOperation extends NonApplyDelegatedModificationApplyOperation {
-    static final ModificationApplyOperation INSTANCE = new AlwaysFailOperation();
-
-    private AlwaysFailOperation() {
-
-    }
-
-    @Override
-    ModificationApplyOperation delegate() {
-        throw ise();
-    }
-
-    @Override
-    Optional<TreeNode> apply(final ModifiedNode modification, final Optional<TreeNode> currentMeta,
-            final Version version) {
-        throw ise();
-    }
-
-    @Override
-    void checkApplicable(final ModificationPath path, final NodeModification modification,
-            final Optional<TreeNode> current, final Version version) throws DataValidationFailedException {
-        throw ise();
-    }
-
-    private static IllegalStateException ise() {
-        return new IllegalStateException("Schema Context is not available.");
-    }
-}
index 23f44d56a88f0a97524b696301480391f34d2546..51475968201a6928a06b70861c4294b6497df8a1 100644 (file)
@@ -65,7 +65,11 @@ final class InMemoryDataTreeModification extends AbstractCursorAware implements
     }
 
     ModificationApplyOperation getStrategy() {
-        return strategyTree.delegate();
+        final ModificationApplyOperation ret = strategyTree.delegate();
+        if (ret == null) {
+            throw new IllegalStateException("Schema Context is not available.");
+        }
+        return ret;
     }
 
     @Override
index 8a31f092c6365e3992a5b82c73ec39f63114316b..d7c9738c21354e3049bb1ef106026b8e9183ed38 100644 (file)
@@ -7,6 +7,8 @@
  */
 package org.opendaylight.yangtools.yang.data.impl.schema.tree;
 
+import static java.util.Objects.requireNonNull;
+
 /**
  * Holder and factory for upgradable root modifications.
  *
@@ -15,7 +17,7 @@ package org.opendaylight.yangtools.yang.data.impl.schema.tree;
  */
 final class LatestOperationHolder {
 
-    private ModificationApplyOperation current = AlwaysFailOperation.INSTANCE;
+    private ModificationApplyOperation current;
 
     /**
      * Return latest backing implementation.
@@ -39,7 +41,7 @@ final class LatestOperationHolder {
      * @param newApplyOper New backing implementation
      */
     void setCurrent(final ModificationApplyOperation newApplyOper) {
-        current = newApplyOper;
+        current = requireNonNull(newApplyOper);
     }
 
     /**
diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/NonApplyDelegatedModificationApplyOperation.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/schema/tree/NonApplyDelegatedModificationApplyOperation.java
deleted file mode 100644 (file)
index 82d42ac..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
- * Copyright (c) 2019 Pantheon Technologies, s.r.o. and others.  All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-package org.opendaylight.yangtools.yang.data.impl.schema.tree;
-
-import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
-
-/**
- * A {@link ModificationApplyOperation} which delegates all invocations except checkApplicable()/apply() to a delegate
- * instance.
- */
-abstract class NonApplyDelegatedModificationApplyOperation extends DelegatingModificationApplyOperation {
-    @Override
-    final void fullVerifyStructure(final NormalizedNode<?, ?> modification) {
-        delegate().fullVerifyStructure(modification);
-    }
-}
index a6b2cdac4167fe1c0c4b1d6a1948b096944d932d..3ea98265863a87cffac426249e02843d07897999 100644 (file)
@@ -8,6 +8,7 @@
 package org.opendaylight.yangtools.yang.data.impl.schema.tree;
 
 import com.google.common.collect.ForwardingObject;
+import java.util.Objects;
 
 /**
  * Represents a {@link ModificationApplyOperation} which is rooted at conceptual
@@ -64,17 +65,17 @@ abstract class RootApplyStrategy extends ForwardingObject {
 
     @Override
     public final boolean equals(final Object obj) {
-        return delegate().equals(obj);
+        return Objects.equals(delegate(), obj);
     }
 
     @Override
     public final int hashCode() {
-        return delegate().hashCode();
+        return Objects.hashCode(delegate());
     }
 
     @Override
     public final String toString() {
-        return delegate().toString();
+        return Objects.toString(delegate());
     }
 
     /**
index dc3c060b5333532d2363465e0075530982a77cb0..6ebef35db79f45d95ec95aabbecbf19796c1d6cc 100644 (file)
@@ -33,7 +33,7 @@ final class UpgradableRootApplyStrategy extends RootApplyStrategy {
     @Override
     void upgradeIfPossible() {
         ModificationApplyOperation holderCurrent = holder.getCurrent();
-        if (holderCurrent != delegate) {
+        if (holderCurrent != null && holderCurrent != delegate) {
             // FIXME: Allow update only if there is addition of models, not
             // removals.
             delegate = holderCurrent;