import org.opendaylight.controller.sal.binding.model.api.MethodSignature.Parameter;
import org.opendaylight.controller.sal.binding.model.api.ParameterizedType;
import org.opendaylight.controller.sal.binding.model.api.Type;
+import org.opendaylight.controller.sal.binding.model.api.WildcardType;
-public class GeneratorUtil {
+public final class GeneratorUtil {
private GeneratorUtil() {
}
public static String createIfcDeclaration(final GeneratedType genType,
final String indent,
final Map<String, LinkedHashMap<String, Integer>> availableImports) {
- return createFileDeclaration(IFC, genType, indent, availableImports);
+ return createFileDeclaration(IFC, genType, indent, availableImports,
+ false);
}
public static String createClassDeclaration(
final GeneratedTransferObject genTransferObject,
final String indent,
- final Map<String, LinkedHashMap<String, Integer>> availableImports) {
+ final Map<String, LinkedHashMap<String, Integer>> availableImports,
+ boolean isIdentity) {
return createFileDeclaration(CLASS, genTransferObject, indent,
- availableImports);
+ availableImports, isIdentity);
}
public static String createPackageDeclaration(final String packageName) {
private static String createFileDeclaration(final String type,
final GeneratedType genType, final String indent,
- final Map<String, LinkedHashMap<String, Integer>> availableImports) {
+ final Map<String, LinkedHashMap<String, Integer>> availableImports,
+ boolean isIdentity) {
final StringBuilder builder = new StringBuilder();
final String currentPkg = genType.getPackageName();
appendAnnotations(builder, annotations);
builder.append(NL);
}
- builder.append(PUBLIC + GAP + type + GAP + genType.getName() + GAP);
+
+ if (isIdentity) {
+ if (!(CLASS.equals(type))) {
+ throw new IllegalArgumentException(
+ "'identity' has to be generated as a class");
+ }
+ builder.append(PUBLIC + GAP + ABSTRACT + GAP + type + GAP
+ + genType.getName() + GAP);
+ } else {
+ builder.append(PUBLIC + GAP + type + GAP + genType.getName() + GAP);
+ }
if (genType instanceof GeneratedTransferObject) {
GeneratedTransferObject genTO = (GeneratedTransferObject) genType;
if (genTO.getExtends() != null) {
builder.append(EXTENDS + GAP);
- builder.append(genTO.getExtends() + GAP);
+ String gtoString = getExplicitType(genTO.getExtends(), availableImports, currentPkg);
+ builder.append(gtoString + GAP);
}
}
Map<String, LinkedHashMap<String, Integer>> availableImports,
final String currentPkg) {
final StringBuilder builder = new StringBuilder();
- builder.append(indent);
if (!property.getAnnotations().isEmpty()) {
final List<AnnotationType> annotations = property.getAnnotations();
appendAnnotations(builder, annotations);
/**
* Create method declaration in interface.
- *
+ *
* @param method
* @param indent
* @return
public static String createConstructor(
GeneratedTransferObject genTransferObject, final String indent,
- Map<String, LinkedHashMap<String, Integer>> availableImports) {
+ Map<String, LinkedHashMap<String, Integer>> availableImports,
+ boolean isIdentity) {
final StringBuilder builder = new StringBuilder();
final String currentPkg = genTransferObject.getPackageName();
}
builder.append(indent);
- builder.append(PUBLIC);
+ builder.append(isIdentity ? PROTECTED : PUBLIC);
builder.append(GAP);
builder.append(genTransferObject.getName());
builder.append(LB);
builder.append(NL);
builder.append(indent);
builder.append(TAB);
- builder.append("builder.append(\", ");
+ builder.append("builder.append(");
builder.append(property.getName());
builder.append(");");
}
public static String createEnum(final Enumeration enumeration,
final String indent) {
- final StringBuilder builder = new StringBuilder(indent + ENUM + GAP
- + enumeration.getName() + GAP + LCB + NL);
+ if (enumeration == null || indent == null)
+ throw new IllegalArgumentException();
+ final StringBuilder builder = new StringBuilder(indent + PUBLIC + GAP
+ + ENUM + GAP + enumeration.getName() + GAP + LCB + NL);
- String separator = COMMA;
+ String separator = COMMA + NL;
final List<Pair> values = enumeration.getValues();
- builder.append(indent + TAB);
+
for (int i = 0; i < values.size(); i++) {
if (i + 1 == values.size()) {
separator = SC;
}
- builder.append(values.get(i).getName() + separator);
+ builder.append(indent + TAB + values.get(i).getName() + LB
+ + values.get(i).getValue() + RB + separator);
}
builder.append(NL);
+ builder.append(NL);
+ final String ENUMERATION_NAME = "value";
+ final String ENUMERATION_TYPE = "int";
+ builder.append(indent + TAB + ENUMERATION_TYPE + GAP + ENUMERATION_NAME
+ + SC);
+ builder.append(NL);
+ builder.append(indent + TAB + PRIVATE + GAP + enumeration.getName()
+ + LB + ENUMERATION_TYPE + GAP + ENUMERATION_NAME + RB + GAP
+ + LCB + NL);
+ builder.append(indent + TAB + TAB + "this." + ENUMERATION_NAME + GAP
+ + "=" + GAP + ENUMERATION_NAME + SC + NL);
+ builder.append(indent + TAB + RCB + NL);
+
builder.append(indent + RCB);
+ builder.append(NL);
return builder.toString();
}
if (packageName.startsWith("java.lang")) {
builder.append(type.getName());
} else {
- builder.append(packageName + "." + type.getName());
+ if (!packageName.isEmpty()) {
+ builder.append(packageName + "." + type.getName());
+ } else {
+ builder.append(type.getName());
+ }
+
}
if (type instanceof ParameterizedType) {
ParameterizedType pType = (ParameterizedType) type;
if (i + 1 == pTypes.length) {
separator = "";
}
- builder.append(getExplicitType(t, availableImports, currentPkg)
+
+ String wildcardParam = "";
+ if(t instanceof WildcardType) {
+ wildcardParam = "? extends ";
+ }
+
+ builder.append(wildcardParam + getExplicitType(t, availableImports, currentPkg)
+ separator);
}
return builder.toString();
if (currentValue > maxValue) {
result.clear();
result.add(entry.getKey());
+ maxValue = currentValue;
} else if (currentValue == maxValue) {
result.add(entry.getKey());
}
String genTypePkg) {
String typeName = type.getName();
String typePkg = type.getPackageName();
- if (typePkg.startsWith("java.lang") || typePkg.equals(genTypePkg)) {
+ if (typePkg.startsWith("java.lang") || typePkg.equals(genTypePkg) ||
+ typePkg.isEmpty()) {
return;
}
LinkedHashMap<String, Integer> packages = importedTypes.get(typeName);