public static String getSerializedFormTypeName(ValueType vt, boolean simple) { List<ExternalizationElement> extElems = vt.getExternalizationElements(); if (extElems.size() == 0) { // built-in type do not have externalizers return simple ? vt.getDomainName() : vt.getFullname(); } else if (extElems.size() == 1) { // It's just a wrapper. So, our serialized form is the same as our component's return getSerializedFormTypeName(extElems.get(0).getType(), simple); } else { // Alas, we need a full-blown SerializedForm for this one return simple ? JsonElement.class.getSimpleName() : JsonElement.class.getName(); } }
protected String applyExternalizerTo(ExternalizationElement extElem, String expr) { String extMethodName = extElem.getMethodName(); // parametric types require cast, so we always cast String cast = "(" + extElem.getType().getFullname() + ")"; return (extMethodName.contains(".")) ? cast + extMethodName + "(" + expr + ")" : cast + expr + "." + extMethodName + "()"; }
protected String makePrettySlotName(ExternalizationElement extElem) { String name = extElem.getMethodName().replace('.', '_'); if (name.startsWith("get")) { name = name.substring(3); } return Character.toLowerCase(name.charAt(0)) + name.substring(1); }
public final void externalizationElement(AST _t, DomainModel model, ValueType valueType ) throws RecognitionException { AST externalizationElement_AST_in = (_t == ASTNULL) ? null : (AST)_t; String methodName; ValueType elemType; AST __t49 = _t; AST tmp24_AST_in = (AST)_t; match(_t,EXTERNALIZATION_ELEMENT); _t = _t.getFirstChild(); elemType=typeSpec(_t,model, false); _t = _retTree; methodName=identifier(_t); _t = _retTree; ExternalizationElement elem = new ExternalizationElement(elemType, methodName); valueType.getBaseType().addExternalizationElement(elem); _t = __t49; _t = _t.getNextSibling(); _retTree = _t; }
protected ValueType getExternalizationType(ValueType vt) { while (!(vt.isBuiltin() || vt.isEnum())) { List<ExternalizationElement> extElems = vt.getExternalizationElements(); if (extElems.size() != 1) { // Value Types with more than one externalization element // are externalized to Json return jsonElementVt; } ExternalizationElement extElem = extElems.get(0); vt = extElem.getType(); } return vt; }
public static String getJdbcTypeFor(DomainModel model, String valueType) { ValueType vt = model.findValueType(valueType); String jdbcType = null; if (vt.isEnum()) { jdbcType = "VARCHAR"; } else if (vt.isBuiltin()) { jdbcType = BUILT_IN_JDBC_MAP.get(valueType); } else { List<ExternalizationElement> extElems = vt.getExternalizationElements(); if (extElems.size() != 1) { return BUILT_IN_JDBC_MAP.get("JsonElement"); } jdbcType = getJdbcTypeFor(model, extElems.get(0).getType().getDomainName()); } if (jdbcType == null) { throw new Error("Couldn't find a JDBC type for the value type " + valueType); } return jdbcType; } }
protected void generateValueTypeSerialization(ValueType vt) { onNewline(out); printMethod(out, "public static final", getSerializedFormTypeName(vt), SERIALIZATION_METHOD_PREFIX + makeSafeValueTypeName(vt), makeArg(vt.getFullname(), "obj")); startMethodBody(out); if (vt.getExternalizationElements().size() == 1) { print(out, "return (obj == null) ? null : "); ExternalizationElement extElem = vt.getExternalizationElements().get(0); ValueType extElemVt = extElem.getType(); print(out, applyExternalizationIfRequired(applyExternalizerTo(extElem, "obj"), extElemVt)); } else { println(out, "if (obj == null) return null;"); println(out, "JsonObject json = new JsonObject();"); for (ExternalizationElement extElem : vt.getExternalizationElements()) { print(out, "json.add(\""); print(out, makePrettySlotName(extElem)); print(out, "\", JsonConverter.getJsonFor("); print(out, applyExternalizationIfRequired(applyExternalizerTo(extElem, "obj"), extElem.getType())); print(out, "));"); newline(out); } print(out, "return json"); } print(out, ";"); endMethodBody(out); }
if (extElems.size() == 1) { ExternalizationElement extElem = extElems.get(0); ValueType extElemVt = extElem.getType(); if (extElemVt.isBuiltin() || extElemVt.isEnum()) { print(out, "obj"); ValueType extElemVt = extElem.getType(); if (extElemVt.isBuiltin() || extElemVt.isEnum()) { print(out, "JsonConverter.get"); print(out, capitalize(extElem.getType().getDomainName())); print(out, "FromJson(obj.getAsJsonObject().get(\"");; print(out, makePrettySlotName(extElem));