in json/src/main/java/org/netbeans/html/json/impl/ModelProcessor.java [643:757]
private boolean generateProperties(
Element where, String builderPrefix,
Writer w, String className, Prprt[] properties,
List<GetSet> props,
Map<String,Collection<String[]>> deps,
Map<String,Collection<String>> functionDeps,
Set<String> propertyFqns
) throws IOException {
boolean ok = true;
for (Prprt p : properties) {
final String tn;
tn = typeName(p);
if (tn.contains(".")){
propertyFqns.add(tn);
}
String[] gs = toGetSet(p.name(), tn, p.array());
String castTo;
if (p.array()) {
w.write(" private final java.util.List<" + tn + "> prop_" + p.name() + ";\n");
castTo = "java.util.List";
w.write(" public java.util.List<" + tn + "> " + gs[0] + "() {\n");
w.write(" proto.accessProperty(\"" + p.name() + "\");\n");
w.write(" return prop_" + p.name() + ";\n");
w.write(" }\n");
if (builderPrefix != null) {
boolean[] isModel = {false};
boolean[] isEnum = {false};
boolean isPrimitive[] = {false};
String ret = checkType(p, isModel, isEnum, isPrimitive);
w.write(" public " + className + " " + builderMethod(builderPrefix, p) + "(" + ret + "... v) {\n");
w.write(" proto.accessProperty(\"" + p.name() + "\");\n");
w.append(" TYPE.replaceValue(prop_").append(p.name()).append(", " + tn + ".class, v);\n");
w.write(" return this;\n");
w.write(" }\n");
}
} else {
castTo = tn;
boolean isModel[] = { false };
boolean isEnum[] = { false };
boolean isPrimitive[] = { false };
checkType(p, isModel, isEnum, isPrimitive);
if (isModel[0]) {
w.write(" private /*" + tn + "*/Object prop_" + p.name() + ";\n");
} else {
w.write(" private " + tn + " prop_" + p.name() + ";\n");
}
w.write(" public " + tn + " " + gs[0] + "() {\n");
w.write(" proto.accessProperty(\"" + p.name() + "\");\n");
if (isModel[0]) {
w.write(" if (prop_" + p.name() + " == TYPE) prop_" + p.name() + " = net.java.html.json.Models.bind(new " + tn +"(), proto.getContext());\n");
}
w.write(" return (" + tn + ")prop_" + p.name() + ";\n");
w.write(" }\n");
w.write(" public void " + gs[1] + "(" + tn + " v) {\n");
if (!p.mutable()) {
w.write(" proto.initTo(null, null);\n");
}
w.write(" proto.verifyUnlocked();\n");
w.write(" Object o = prop_" + p.name() + ";\n");
if (isModel[0]) {
w.write(" if (o == v) return;\n");
w.write(" prop_" + p.name() + " = v;\n");
} else {
w.write(" if (TYPE.isSame(o , v)) return;\n");
w.write(" prop_" + p.name() + " = v;\n");
}
w.write(" proto.valueHasMutated(\"" + p.name() + "\", o, v);\n");
{
Collection<String[]> dependants = deps.get(p.name());
if (dependants != null) {
for (String[] pair : dependants) {
w.write(" proto.valueHasMutated(\"" + pair[0] + "\", null, " + pair[1] + "());\n");
}
}
}
{
Collection<String> dependants = functionDeps.get(p.name());
if (dependants != null) {
w.append(" ");
w.append(className).append(" model = ").append(className).append(".this;\n");
for (String call : dependants) {
w.append(" ").append(call);
}
}
}
w.write(" }\n");
if (builderPrefix != null) {
w.write(" public " + className + " " + builderMethod(builderPrefix, p) + "(" + tn + " v) {\n");
w.write(" " + gs[1] + "(v);\n");
w.write(" return this;\n");
w.write(" }\n");
}
}
for (int i = 0; i < props.size(); i++) {
if (props.get(i).name.equals(p.name())) {
error("Cannot have the property " + p.name() + " defined twice", where);
ok = false;
}
}
props.add(new GetSet(
p.name(),
gs[0],
gs[1],
tn,
gs[3] == null && !p.array(),
!p.mutable()
));
}
return ok;
}