import java.util.Collections\rimport java.util.Arrays
import org.opendaylight.yangtools.sal.binding.model.api.Restrictions
import com.google.common.collect.Range
+import java.util.regex.Pattern
+import com.google.common.io.BaseEncoding
+import java.beans.ConstructorProperties
+import com.google.common.collect.Lists
/**\r
* Template for generating JAVA class. \r
«enumDeclarations»\r
«constantsDeclarations»\r
«generateFields»\r
+\r
«constructors»\r
+ \r
+ «defaultInstance»\r
+\r
«FOR field : properties SEPARATOR "\n"»\r
«field.getterMethod»\r
«IF !field.readOnly»\r
\r
«generateEquals»\r
\r
- «generateToString»\r
+ «generateToString(genTO.toStringIdentifiers)»\r
\r
«generateGetLength»\r
\r
'''\r
\r
def protected allValuesConstructor() '''\r
+ «IF genTO.typedef && !allProperties.empty && allProperties.size == 1 && allProperties.get(0).name.equals("value")»\r
+ @«ConstructorProperties.importedName»("value")\r
+ «ENDIF»\r
public «type.name»(«allProperties.asArgumentsDeclaration») {\r
«IF false == parentProperties.empty»\r
super(«parentProperties.asArguments»);\r
«ENDIF»\r
«FOR p : allProperties» \r
- «generateLengthRestrictions(type, p.fieldName.toString, p.returnType)»\r
+ «generateRestrictions(type, p.fieldName.toString, p.returnType)»\r
«ENDFOR»\r
«FOR p : properties» \r
this.«p.fieldName» = «p.fieldName»;\r
«IF false == parentProperties.empty»\r
super(«parentProperties.asArguments»);\r
«ENDIF»\r
- «generateLengthRestrictions(type, property.fieldName.toString, property.returnType)»\r
+ «generateRestrictions(type, property.fieldName.toString, property.returnType)»\r
this.«property.fieldName» = «property.name»;\r
«FOR p : other»\r
this.«p.fieldName» = null;\r
«ENDFOR»\r
}\r
'''\r
- \r
+\r
def protected parentConstructor() '''\r
/**\r
* Creates a new instance from «genTO.superType.importedName»\r
super(source);\r
}\r
'''\r
- \r
\r
- \r
+ def protected defaultInstance() '''\r
+ «IF genTO.typedef && !allProperties.empty && !genTO.unionType»\r
+ «val prop = allProperties.get(0)»\r
+ «IF !("org.opendaylight.yangtools.yang.binding.InstanceIdentifier".equals(prop.returnType.fullyQualifiedName))»\r
+ public static «genTO.name» getDefaultInstance(String defaultValue) {\r
+ «IF "byte[]".equals(prop.returnType.name)»\r
+ «BaseEncoding.importedName» baseEncoding = «BaseEncoding.importedName».base64(); \r
+ return new «genTO.name»(baseEncoding.decode(defaultValue));\r
+ «ELSEIF "java.lang.String".equals(prop.returnType.fullyQualifiedName)»\r
+ return new «genTO.name»(defaultValue);\r
+ «ELSEIF allProperties.size > 1»\r
+ «bitsArgs»\r
+ «ELSE»\r
+ return new «genTO.name»(new «prop.returnType.importedName»(defaultValue));\r
+ «ENDIF»\r
+ }\r
+ «ENDIF»\r
+ «ENDIF»\r
+ '''\r
+\r
+ def protected bitsArgs() '''\r
+ «List.importedName»<«String.importedName»> properties = «Lists.importedName».newArrayList(«allProperties.propsAsArgs»);\r
+ if (!properties.contains(defaultValue)) {\r
+ throw new «IllegalArgumentException.importedName»("invalid default parameter");\r
+ }\r
+ int i = 0;\r
+ return new «genTO.name»(\r
+ «FOR prop : allProperties SEPARATOR ","»\r
+ properties.get(i++).equals(defaultValue) ? new «Boolean.importedName»("true") : null\r
+ «ENDFOR»\r
+ );\r
+ '''\r
+\r
+ def protected propsAsArgs(Iterable<GeneratedProperty> properties) '''\r
+ «FOR prop : properties SEPARATOR ","»\r
+ "«prop.name»"\r
+ «ENDFOR»\r
+ '''\r
+\r
/**\r
* Template method which generates JAVA class declaration.\r
* \r
«val cValue = c.value»\r
«IF cValue instanceof List<?>»\r
«val cValues = cValue as List<?>»\r
- private static final List<Pattern> «Constants.MEMBER_PATTERN_LIST» = new ArrayList<Pattern>();\r
- public static final List<String> «TypeConstants.PATTERN_CONSTANT_NAME» = «Arrays.importedName».asList(«\r
+ private static final «List.importedName»<«Pattern.importedName»> «Constants.MEMBER_PATTERN_LIST» = new «ArrayList.importedName»<«Pattern.importedName»>();\r
+ public static final «List.importedName»<String> «TypeConstants.PATTERN_CONSTANT_NAME» = «Arrays.importedName».asList(«\r
FOR v : cValues SEPARATOR ", "»«\r
IF v instanceof String»"«\r
v as String»"«\r
«ENDIF»\r
'''\r
\r
- /**\r
- * Template method which generates the method <code>toString()</code>.\r
- *\r
- * @return string with the <code>toString()</code> method definition in JAVA format\r
- */\r
- def protected generateToString() '''\r
- «IF !genTO.toStringIdentifiers.empty»\r
- @Override\r
- public String toString() {\r
- StringBuilder builder = new StringBuilder();\r
- «val properties = genTO.toStringIdentifiers»\r
- builder.append("«type.name» [«properties.get(0).fieldName»=");\r
- «IF properties.get(0).returnType.name.contains("[")»\r
- builder.append(«Arrays.importedName».toString(«properties.get(0).fieldName»));\r
- «ELSE»\r
- builder.append(«properties.get(0).fieldName»);\r
- «ENDIF»\r
- «FOR i : 1..<genTO.toStringIdentifiers.size»\r
- builder.append(", «properties.get(i).fieldName»=");\r
- «IF properties.get(i).returnType.name.contains("[")»\r
- builder.append(«Arrays.importedName».toString(«properties.get(i).fieldName»));\r
- «ELSE»\r
- builder.append(«properties.get(i).fieldName»);\r
- «ENDIF»\r
+ def private generateGetLength() '''\r
+ «IF restrictions != null && !(restrictions.lengthConstraints.empty)»\r
+ public static «List.importedName»<«Range.importedName»<Integer>> getLength() {\r
+ final «List.importedName»<«Range.importedName»<Integer>> result = new «ArrayList.importedName»<>();\r
+ «List.importedName»<«Range.importedName»<«Integer.importedName»>> lengthConstraints = new «ArrayList.importedName»<>(); \r
+ «FOR r : restrictions.lengthConstraints»\r
+ result.add(«Range.importedName».closed(«r.min», «r.max»));\r
«ENDFOR»\r
- builder.append("]");\r
- return builder.toString();\r
+ return result;\r
}\r
«ENDIF»\r
'''\r
\r
- def private generateGetLength() '''\r
+ def private generateGetRange() '''\r
«IF restrictions != null && !(restrictions.lengthConstraints.empty)»\r
public static «List.importedName»<«Range.importedName»<Integer>> getLength() {\r
final «List.importedName»<«Range.importedName»<Integer>> result = new «ArrayList.importedName»<>();\r