Introduce UnresolvedNumber 54/28554/3
authorRobert Varga <rovarga@cisco.com>
Mon, 19 Oct 2015 13:11:02 +0000 (15:11 +0200)
committerGerrit Code Review <gerrit@opendaylight.org>
Tue, 20 Oct 2015 08:23:12 +0000 (08:23 +0000)
UnresolvedNumber is a better-designed replacement for
UnknownBoundaryNumber.

Change-Id: Id603529d9469684d853080d702db50637afe67b3
Signed-off-by: Robert Varga <rovarga@cisco.com>
yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/UnresolvedNumber.java [new file with mode: 0644]
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/util/UnknownBoundaryNumber.java

diff --git a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/UnresolvedNumber.java b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/UnresolvedNumber.java
new file mode 100644 (file)
index 0000000..6c9bad2
--- /dev/null
@@ -0,0 +1,90 @@
+/*
+ * Copyright (c) 2015 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.model.util;
+
+import com.google.common.annotations.Beta;
+import com.google.common.base.Preconditions;
+import java.util.List;
+import org.opendaylight.yangtools.concepts.Immutable;
+import org.opendaylight.yangtools.yang.model.api.type.RangeConstraint;
+
+@Beta
+public abstract class UnresolvedNumber extends Number implements Immutable {
+    private static final long serialVersionUID = 1L;
+    private static final UnresolvedNumber MAX = new UnresolvedNumber() {
+        private static final long serialVersionUID = 1L;
+
+        @Override
+        public Number resolve(final List<RangeConstraint> constraints) {
+            final Number ret = constraints.get(constraints.size() - 1).getMax();
+            Preconditions.checkArgument(!(ret instanceof UnresolvedNumber));
+            return ret;
+        }
+
+        @Override
+        public String toString() {
+            return "max";
+        }
+
+        private Object readResolve() {
+            return MAX;
+        }
+    };
+    private static final UnresolvedNumber MIN = new UnresolvedNumber() {
+        private static final long serialVersionUID = 1L;
+
+        @Override
+        public Number resolve(final List<RangeConstraint> constraints) {
+            final Number ret = constraints.get(0).getMin();
+            Preconditions.checkArgument(!(ret instanceof UnresolvedNumber));
+            return ret;
+        }
+
+        @Override
+        public String toString() {
+            return "min";
+        }
+
+        private Object readResolve() {
+            return MIN;
+        }
+    };
+
+    public static UnresolvedNumber min() {
+        return MIN;
+    }
+
+    public static UnresolvedNumber max() {
+        return MAX;
+    }
+
+    @Override
+    public final int intValue() {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public final long longValue() {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public final float floatValue() {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public final double doubleValue() {
+        throw new UnsupportedOperationException();
+    }
+
+    public abstract Number resolve(List<RangeConstraint> constraints);
+
+    @Override
+    public abstract String toString();
+}
index 5e3538646cd0ef548aaae9dc753e1675bfbd18c1..11dcbdf85610636e5c35478d84f3f74de670043d 100644 (file)
@@ -9,7 +9,10 @@ package org.opendaylight.yangtools.yang.parser.util;
 
 /**
  * Marker object representing special 'min' or 'max' values in YANG.
+ *
+ * @deprecated Use {@link org.opendaylight.yangtools.yang.model.util.UnresolvedNumber} instead.
  */
+@Deprecated
 public final class UnknownBoundaryNumber extends Number {
     private static final long serialVersionUID = 1464861684686434869L;