Bump odlparent/yangtools/mdsal
[controller.git] / opendaylight / md-sal / cds-access-api / src / main / java / org / opendaylight / controller / cluster / access / ABIVersion.java
index 3eddf3eb564f29c7b20b7ae06cec560793dc6144..cfaf477f8fc8da8c4f3e06f79e3b25840112a003 100644 (file)
@@ -16,6 +16,7 @@ import java.io.DataOutput;
 import java.io.IOException;
 import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.yangtools.concepts.WritableObject;
+import org.opendaylight.yangtools.yang.data.codec.binfmt.NormalizedNodeStreamVersion;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -32,19 +33,64 @@ public enum ABIVersion implements WritableObject {
      * Version which is older than any other version. This version exists purely for testing purposes.
      */
     @VisibleForTesting
-    TEST_PAST_VERSION(0),
+    TEST_PAST_VERSION(0) {
+        @Override
+        public NormalizedNodeStreamVersion getStreamVersion() {
+            throw new UnsupportedOperationException();
+        }
+    },
 
     /**
      * Initial ABI version, as shipped with Boron Simultaneous release.
      */
     // We seed the initial version to be the same as DataStoreVersions.BORON-VERSION for compatibility reasons.
-    BORON(5),
+    BORON(5) {
+        @Override
+        public NormalizedNodeStreamVersion getStreamVersion() {
+            return NormalizedNodeStreamVersion.LITHIUM;
+        }
+    },
+    /**
+     * Revised ABI version. The messages remain the same as {@link #BORON}, but messages bearing QNames in any shape
+     * are using {@link NormalizedNodeStreamVersion#NEON_SR2}, which improves encoding.
+     */
+    NEON_SR2(6) {
+        @Override
+        public NormalizedNodeStreamVersion getStreamVersion() {
+            return NormalizedNodeStreamVersion.NEON_SR2;
+        }
+    },
+    /**
+     * Revised ABI version. The messages remain the same as {@link #BORON}, but messages bearing QNames in any shape
+     * are using {@link NormalizedNodeStreamVersion#SODIUM_SR1}, which improves encoding.
+     */
+    SODIUM_SR1(7) {
+        @Override
+        public NormalizedNodeStreamVersion getStreamVersion() {
+            return NormalizedNodeStreamVersion.SODIUM_SR1;
+        }
+    },
+    /**
+     * Revised ABI version. The messages remain the same as {@link #BORON}, but messages bearing QNames in any shape
+     * are using {@link NormalizedNodeStreamVersion#MAGNESIUM}, which improves encoding.
+     */
+    MAGNESIUM(8) {
+        @Override
+        public NormalizedNodeStreamVersion getStreamVersion() {
+            return NormalizedNodeStreamVersion.MAGNESIUM;
+        }
+    },
 
     /**
      * Version which is newer than any other version. This version exists purely for testing purposes.
      */
     @VisibleForTesting
-    TEST_FUTURE_VERSION(65535);
+    TEST_FUTURE_VERSION(65535) {
+        @Override
+        public NormalizedNodeStreamVersion getStreamVersion() {
+            throw new UnsupportedOperationException();
+        }
+    };
 
     private static final Logger LOG = LoggerFactory.getLogger(ABIVersion.class);
 
@@ -71,7 +117,7 @@ public enum ABIVersion implements WritableObject {
      * @return Current {@link ABIVersion}
      */
     public static @NonNull ABIVersion current() {
-        return BORON;
+        return SODIUM_SR1;
     }
 
     /**
@@ -93,8 +139,14 @@ public enum ABIVersion implements WritableObject {
                 throw new PastVersionException(value, BORON);
             case 5:
                 return BORON;
+            case 6:
+                return NEON_SR2;
+            case 7:
+                return SODIUM_SR1;
+            case 8:
+                return MAGNESIUM;
             default:
-                throw new FutureVersionException(value, BORON);
+                throw new FutureVersionException(value, MAGNESIUM);
         }
     }
 
@@ -103,6 +155,13 @@ public enum ABIVersion implements WritableObject {
         out.writeShort(value);
     }
 
+    /**
+     * Return the NormalizedNode stream version corresponding to this particular ABI.
+     *
+     * @return Stream Version to use for this ABI version
+     */
+    public abstract @NonNull NormalizedNodeStreamVersion getStreamVersion();
+
     /**
      * Read an {@link ABIVersion} from a {@link DataInput}. This method is provided for callers which do not have
      * a recovery strategy for dealing with unsupported versions.