in src/com/intellij/idea/plugin/hybris/system/type/model/generator/JetBrainsEmitter.java [541:663]
private void generateHelper(final FileManager fileManager, final NamespaceDesc nsd, final ModelDesc model, final File outDir) {
final Map<String, TypeDesc> jtMap = model.jtMap;
final Map<String, NamespaceDesc> nsdMap = model.nsdMap;
if (nsd.helperClass == null || nsd.helperClass.length() == 0) {
return;
}
final ArrayList<TypeDesc> jtList = new ArrayList<>();
for (TypeDesc td : jtMap.values()) {
if (td.type != TypeDesc.TypeEnum.CLASS) {
continue;
}
// if (!nsd.name.equals(td.xsNamespace)) {
// continue;
// }
jtList.add(td);
}
if (jtList.size() == 0) {
return;
}
final String stringClass = getStringClassName();
final String typeName = nsd.helperClass.substring(nsd.helperClass.lastIndexOf(".") + 1);
final String typeQName = model.toJavaQualifiedTypeName("", nsd.helperClass, false);
final String pkgName = typeQName.substring(0, typeQName.lastIndexOf('.'));
File outFile = new File(outDir, toJavaFileName(typeQName));
outFile = fileManager.getOutputFile(outFile);
PrintWriter out = null;
try {
Util.log("Generating type: " + typeName + "");
out = new PrintWriter(new FileWriter(outFile));
out.println("// Generated on " + new Date());
out.println("// DTD/Schema : " + nsd.name);
out.println("");
if (pkgName != null) {
out.println("package " + pkgName + ';');
}
out.println("");
out.println("");
out.println(JDOC_OPEN);
out.println(JDOC_CONT + nsd.name + " helper class.");
if (AUTHOR != null) {
out.println(JDOC_CONT + AUTHOR);
}
out.println(JDOC_CLOSE);
out.print("public class " + typeName + ' ');
out.println('{');
out.println("");
out.println("\tprivate interface GetName { " + stringClass + " getName(Object o); }");
out.println("\tprivate static java.util.HashMap<Class, GetName> nameMap = new java.util.HashMap();");
out.println("\tstatic {");
for (TypeDesc td : jtList) {
final ArrayList<FieldDesc> fields = new ArrayList<>(td.fdMap.values());
Collections.sort(fields, (o1, o2) -> o1.realIndex - o2.realIndex);
int guessPriority = 0;
FieldDesc guessedField = null;
for (FieldDesc fd : fields) {
if (fd.clType == FieldDesc.STR || fd.clType == FieldDesc.SIMPLE || fd.clType == FieldDesc.ATTR) {
if (fd.name.equals("name") && guessPriority < 10) {
guessPriority = 10;
guessedField = fd;
} else if (fd.name.endsWith("Name")) {
if ((fd.name.endsWith(Util.decapitalize(td.name + "Name")) || fd.realIndex < 2) && guessPriority < 10) {
guessPriority = 10;
guessedField = fd;
} else if (fd.name.endsWith(Util.decapitalize("DisplayName")) && guessPriority < 5) {
guessPriority = 5;
guessedField = fd;
} else if (guessPriority < 3) {
guessPriority = 3;
guessedField = fd;
}
} else if (fd.name.equals("value") && guessPriority < 1) {
guessPriority = 1;
guessedField = fd;
}
} else if ((fd.clType == -FieldDesc.OBJ || fd.clType == -FieldDesc.STR) && fd.name.endsWith(
"displayNames") && guessPriority < 5) {
guessPriority = 5;
guessedField = fd;
}
}
out.println();
final String qname = model.getNSDPrefix(td) + td.name;
final String tdNameString = '"' + toPresentationName(td.name) + '"';
out.println("\t\tnameMap.put(" + qname + ".class, new GetName() {");
out.println("\t\t\tpublic " + stringClass + " getName(Object o) {");
if (guessedField != null) {
out.println("\t\t\t\t" + qname + " my = (" + qname + ") o;");
final String getter = "my.get" + Util.capitalize(guessedField.name) + "()";
if (guessedField.clType > 0) {
out.println("\t\t\t\t" + stringClass + " s = o==null? null:" + getter +
(guessedField.clType == FieldDesc.STR || guessedField.clType == FieldDesc.ATTR
? ".getValue();"
: ";"));
out.println("\t\t\t\treturn s==null?" + tdNameString + ":s;");
} else {
out.println("\t\t\t\treturn (o!=null && " + getter + "!=null && " + getter + ".size()>0)?");
out.println("\t\t\t\t\tgetPresentationName(" + getter + ".get(0), null):" + tdNameString + ';');
}
} else {
out.println("\t\t\t\treturn " + tdNameString + ';');
}
out.println("\t\t\t}");
out.println("\t\t});");
}
out.println("\t}");
out.println("\tpublic static " + stringClass + " getPresentationName(Object o, " + stringClass + " def) {");
out.println("\t\tGetName g = o!=null? nameMap.get(o.getClass().getInterfaces()[0]):null;");
out.println("\t\treturn g != null?g.getName(o):def;");
out.println("\t}");
out.println('}');
} catch (IOException ex) {
ex.printStackTrace();
} finally {
try {
out.close();
} catch (Exception ex) {
}
fileManager.releaseOutputFile(outFile);
}
}