import com.google.common.base.CharMatcher
import com.google.common.base.MoreObjects
import com.google.common.base.Splitter
+import com.google.common.collect.ImmutableMap
import com.google.common.collect.Iterables
+import java.math.BigInteger
import java.util.Collection
import java.util.List
import java.util.Locale
import org.opendaylight.mdsal.binding.model.util.Types
import org.opendaylight.mdsal.binding.spec.naming.BindingMapping
import org.opendaylight.yangtools.yang.common.QName
+import org.opendaylight.yangtools.yang.common.Uint8
+import org.opendaylight.yangtools.yang.common.Uint16
+import org.opendaylight.yangtools.yang.common.Uint32
+import org.opendaylight.yangtools.yang.common.Uint64
import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode
import org.opendaylight.yangtools.yang.model.api.ListSchemaNode
import org.opendaylight.yangtools.yang.model.api.NotificationDefinition
.addIgnoredStatement(YangStmtMapping.ORGANIZATION)
.build();
+ protected static val UINT_TYPES = ImmutableMap.of(
+ Types.typeForClass(Uint8), Types.typeForClass(Short),
+ Types.typeForClass(Uint16), Types.typeForClass(Integer),
+ Types.typeForClass(Uint32), Types.typeForClass(Long),
+ Types.typeForClass(Uint64), Types.typeForClass(BigInteger)
+ );
+
new(GeneratedType type) {
super(type)
}
this.«field.fieldName» = value;
return this;
}
+ «val uintType = UINT_TYPES.get(field.returnType)»
+ «IF uintType !== null»
+
+ /**
+ * Utility migration setter.
+ *
+ * @param value field value in legacy type
+ * @return this builder
+ * @deprecated Use {#link «setterName»(«field.returnType.importedJavadocName»)} instead.
+ */
+ @Deprecated(forRemoval = true)
+ public «type.getName» «setterName»(final «uintType.importedName» value) {
+ return «setterName»(«CODEHELPERS.importedName».compatUint(value));
+ }
+ «ENDIF»
'''
/**
«genUnionConstructor»
«ELSEIF genTO.typedef && allProperties.size == 1 && allProperties.get(0).name.equals(TypeConstants.VALUE_PROP)»
«typedefConstructor»
+ «legacyConstructor»
«ELSE»
«allValuesConstructor»
+ «legacyConstructor»
«ENDIF»
«IF !allProperties.empty»
}
'''
+ def private legacyConstructor() {
+ if (!hasUintProperties) {
+ return ""
+ }
+
+ val compatUint = CODEHELPERS.importedName + ".compatUint("
+ return '''
+
+ /**
+ * Utility migration constructor.
+ *
+ «FOR prop : allProperties»
+ * @param «prop.fieldName» «prop.name»«IF prop.isUintType» in legacy Java type«ENDIF»
+ «ENDFOR»
+ * @deprecated Use {#link «type.name»(«FOR prop : allProperties SEPARATOR ", "»«prop.returnType.importedJavadocName»«ENDFOR»)} instead.
+ */
+ @Deprecated(forRemoval = true)
+ public «type.getName»(«FOR prop : allProperties SEPARATOR ", "»«prop.legacyType.importedName» «prop.fieldName»«ENDFOR») {
+ this(«FOR prop : allProperties SEPARATOR ", "»«IF prop.isUintType»«compatUint»«prop.fieldName»)«ELSE»«prop.fieldName»«ENDIF»«ENDFOR»);
+ }
+ '''
+ }
+
def protected genUnionConstructor() '''
«FOR p : allProperties»
«val List<GeneratedProperty> other = new ArrayList(properties)»
}
return null
}
+
+ def private hasUintProperties() {
+ for (GeneratedProperty prop : allProperties) {
+ if (prop.isUintType) {
+ return true
+ }
+ }
+ return false
+ }
+
+ def private static isUintType(GeneratedProperty prop) {
+ UINT_TYPES.containsKey(prop.returnType)
+ }
+
+ def private static legacyType(GeneratedProperty prop) {
+ val type = prop.returnType
+ val uint = UINT_TYPES.get(type)
+ if (uint !== null) {
+ return uint
+ }
+ return type
+ }
}
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Maps;
+import java.math.BigInteger;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.regex.Pattern;
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.jdt.annotation.Nullable;
+import org.opendaylight.yangtools.yang.common.Uint16;
+import org.opendaylight.yangtools.yang.common.Uint32;
+import org.opendaylight.yangtools.yang.common.Uint64;
+import org.opendaylight.yangtools.yang.common.Uint8;
/**
* Helper methods for generated binding code. This class concentrates useful primitives generated code may call
return wrapHashCode(Arrays.hashCode(obj));
}
+ /**
+ * Compatibility utility for converting a legacy {@link Short} {@code uint8} value to its {@link Uint8}
+ * counterpart.
+ *
+ * @param value Legacy value
+ * @return Converted value
+ * @throws IllegalArgumentException if the value does not fit an Uint8
+ * @deprecated This method is provided for migration purposes only, do not use it outside of deprecated
+ * compatibility methods.
+ */
+ @Deprecated
+ public static @Nullable Uint8 compatUint(final @Nullable Short value) {
+ return value == null ? null : Uint8.valueOf(value.shortValue());
+ }
+
+ /**
+ * Compatibility utility for converting a legacy {@link Integer} {@code uint16} value to its {@link Uint16}
+ * counterpart.
+ *
+ * @param value Legacy value
+ * @return Converted value
+ * @throws IllegalArgumentException if the value does not fit an Uint16
+ * @deprecated This method is provided for migration purposes only, do not use it outside of deprecated
+ * compatibility methods.
+ */
+ @Deprecated
+ public static @Nullable Uint16 compatUint(final @Nullable Integer value) {
+ return value == null ? null : Uint16.valueOf(value.intValue());
+ }
+
+ /**
+ * Compatibility utility for converting a legacy {@link Long} {@code uint32} value to its {@link Uint32}
+ * counterpart.
+ *
+ * @param value Legacy value
+ * @return Converted value
+ * @throws IllegalArgumentException if the value does not fit an Uint32
+ * @deprecated This method is provided for migration purposes only, do not use it outside of deprecated
+ * compatibility methods.
+ */
+ @Deprecated
+ public static @Nullable Uint32 compatUint(final @Nullable Long value) {
+ return value == null ? null : Uint32.valueOf(value.longValue());
+ }
+
+ /**
+ * Compatibility utility for converting a legacy {@link BigInteger} {@code uint64} value to its {@link Uint64}
+ * counterpart.
+ *
+ * @param value Legacy value
+ * @return Converted value
+ * @throws IllegalArgumentException if the value does not fit an Uint64
+ * @deprecated This method is provided for migration purposes only, do not use it outside of deprecated
+ * compatibility methods.
+ */
+ @Deprecated
+ public static @Nullable Uint64 compatUint(final @Nullable BigInteger value) {
+ return value == null ? null : Uint64.valueOf(value);
+ }
+
/**
* The constant '31' is the result of folding this code:
* <pre>