--- /dev/null
+/*
+ * 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();
+}