BUG-1485: make AbstractRangeGenerator deal with GTOs
[yangtools.git] / code-generator / binding-java-api-generator / src / main / java / org / opendaylight / yangtools / sal / java / api / generator / AbstractBigRangeGenerator.java
index dce97a271afd2db3c681d8948eb573ac004a8260..737aadf805725f7d0a4c46521dc18a6acd9d919e 100644 (file)
@@ -7,60 +7,68 @@
  */
 package org.opendaylight.yangtools.sal.java.api.generator;
 
+import com.google.common.collect.Range;
 import java.util.Collection;
 import javax.annotation.Nonnull;
 import org.opendaylight.yangtools.yang.model.api.type.RangeConstraint;
 
+/**
+ * Abstract base for generators which require instantiation of boundary values
+ * to check. These are implemented by generating an array constant within the
+ * class, which contains {@link Range} instances, which hold pre-instantiated
+ * boundary values.
+ *
+ * @param <T> type of the class
+ */
 abstract class AbstractBigRangeGenerator<T extends Number & Comparable<T>> extends AbstractRangeGenerator<T> {
+    private static final String RANGE = Range.class.getName();
+
     protected AbstractBigRangeGenerator(final Class<T> typeClass) {
         super(typeClass);
     }
 
-    private String itemType() {
-        final StringBuilder sb = new StringBuilder("com.google.common.collect.Range<");
-        sb.append(getTypeName()).append('>');
-
-        return sb.toString();
+    private StringBuilder itemType() {
+        return new StringBuilder(RANGE).append('<').append(getTypeName()).append('>');
     }
 
-    private String arrayType() {
-        return new StringBuilder(itemType()).append("[]").toString();
+    private StringBuilder arrayType() {
+        return new StringBuilder(itemType()).append("[]");
     }
 
     @Override
-    protected final String generateRangeCheckerImplementation(final String checkerName, @Nonnull final Collection<RangeConstraint> restrictions) {
+    protected final String generateRangeCheckerImplementation(final String checkerName, @Nonnull final Collection<RangeConstraint> constraints) {
+        final String fieldName = checkerName.toUpperCase() + "_RANGES";
         final StringBuilder sb = new StringBuilder();
 
         // Field to hold the Range objects in an array
-        sb.append("private static final ").append(arrayType()).append(' ').append(checkerName).append(";\n");
+        sb.append("private static final ").append(arrayType()).append(' ').append(fieldName).append(";\n");
 
         // Static initializer block for the array
         sb.append("static {\n");
         sb.append("    @SuppressWarnings(\"unchecked\")\n");
         sb.append("    final ").append(arrayType()).append(" a = (").append(arrayType())
-        .append(") java.lang.reflect.Array.newInstance(com.google.common.collect.Range.class, ").append(restrictions.size()).append(");\n");
+        .append(") java.lang.reflect.Array.newInstance(").append(RANGE).append(".class, ").append(constraints.size()).append(");\n");
 
         int i = 0;
-        for (RangeConstraint r : restrictions) {
+        for (RangeConstraint r : constraints) {
             final String min = format(getValue(r.getMin()));
             final String max = format(getValue(r.getMax()));
 
-            sb.append("    a[").append(i++).append("] = com.google.common.collect.Range.closed(").append(min).append(", ").append(max).append(");\n");
+            sb.append("    a[").append(i++).append("] = ").append(RANGE).append(".closed(").append(min).append(", ").append(max).append(");\n");
         }
 
-        sb.append("    ").append(checkerName).append(" = a;\n");
-        sb.append("}\n\n");
+        sb.append("    ").append(fieldName).append(" = a;\n");
+        sb.append("}\n");
 
         // Static enforcement method
         sb.append("private static void ").append(checkerName).append("(final ").append(getTypeName()).append(" value) {\n");
-        sb.append("    for (").append(itemType()).append(" r : ").append(checkerName).append(") {\n");
+        sb.append("    for (").append(itemType()).append(" r : ").append(fieldName).append(") {\n");
         sb.append("        if (r.contains(value)) {\n");
         sb.append("            return;\n");
         sb.append("        }\n");
         sb.append("    }\n");
-        sb.append("\n");
-        sb.append("    throw new IllegalArgumentException(String.format(\"Invalid value %s, expected: %s.\", value, java.util.Arrays.asList(").append(checkerName).append(")));\n");
-        sb.append("}\n\n");
+        sb.append("    throw new IllegalArgumentException(String.format(\"Invalid range: %s, expected: %s.\", value, java.util.Arrays.asList(").append(fieldName).append(")));\n");
+        sb.append("}\n");
 
         return sb.toString();
     }