public HollowObjectDelegateCachedImplGenerator(String packageName, HollowObjectSchema schema, HollowErgonomicAPIShortcuts ergonomicShortcuts, HollowDataset dataset, CodeGeneratorConfig config) { super(packageName, schema, ergonomicShortcuts, dataset, config); this.className = delegateCachedImplName(schema.getName()); }
public static String delegateInterfaceName(HollowSchema schema) { if(schema instanceof HollowObjectSchema) return delegateInterfaceName(schema.getName()); if(schema instanceof HollowListSchema) return HollowListDelegate.class.getSimpleName(); if(schema instanceof HollowSetSchema) return HollowSetDelegate.class.getSimpleName(); if(schema instanceof HollowMapSchema) return HollowMapDelegate.class.getSimpleName(); throw new UnsupportedOperationException("What kind of schema is a " + schema.getClass().getSimpleName() + "?"); }
public static String delegateLookupClassname(HollowSchema schema) { if(schema instanceof HollowObjectSchema) return delegateLookupImplName(schema.getName()); if(schema instanceof HollowListSchema) return HollowListLookupDelegate.class.getSimpleName(); if(schema instanceof HollowSetSchema) return HollowSetLookupDelegate.class.getSimpleName(); if(schema instanceof HollowMapSchema) return HollowMapLookupDelegate.class.getSimpleName(); throw new UnsupportedOperationException("What kind of schema is a " + schema.getClass().getSimpleName() + "?"); }
public static String generateBooleanAccessorMethodName(String fieldName, boolean useBooleanFieldErgonomics) { return useBooleanFieldErgonomics ? generateAccessortMethodName(fieldName, boolean.class) : "get" + uppercase(fieldName); }
private String generateBooleanFieldAccessor(int fieldNum) { StringBuilder builder = new StringBuilder(); String fieldName = schema.getFieldName(fieldNum); String methodName = generateBooleanAccessorMethodName(fieldName, useBooleanFieldErgonomics); builder.append(" public boolean ").append(getterPrefix).append(methodName).append("() {\n"); builder.append(" return delegate().get" + uppercase(fieldName) + "(ordinal);\n"); builder.append(" }\n\n"); if(!restrictApiToFieldType) { builder.append(" public Boolean ").append(getterPrefix).append(methodName).append("Boxed() {\n"); builder.append(" return delegate().get" + uppercase(fieldName) + "Boxed(ordinal);\n"); builder.append(" }"); } return builder.toString(); }
builder.append("public class ").append(className).append(" extends HollowObjectAbstractDelegate implements ").append(delegateInterfaceName(schema.getName())).append(" {\n\n"); builder.append(" private final ").append(typeAPIClassname(schema.getName())).append(" typeAPI;\n\n"); builder.append(" public ").append(className).append("(").append(typeAPIClassname(schema.getName())).append(" typeAPI) {\n"); builder.append(" this.typeAPI = typeAPI;\n"); builder.append(" }\n\n"); String methodFieldName = substituteInvalidChars(uppercase(schema.getFieldName(i))); builder.append(" public ").append(typeAPIClassname(schema.getName())).append(" getTypeAPI() {\n"); builder.append(" return typeAPI;\n"); builder.append(" }\n\n");
Set<String> primitiveTypes = HollowCodeGenerationUtils.getPrimitiveTypes(schemaList); // Implement Primitive Type Retriever(s) if (config.isUseHollowPrimitiveTypes() && !primitiveTypes.isEmpty()) { builder.append("implements "); builder.append(" HollowConsumerAPI.").append(HollowCodeGenerationUtils.upperFirstChar(pType)).append("Retriever"); builder.append(" private final " + typeAPIClassname(schema.getName())).append(" ").append(lowercase(typeAPIClassname(schema.getName()))).append(";\n"); builder.append(" private final HollowObjectProvider ").append(hollowObjectProviderName(schema.getName())).append(";\n"); builder.append(" typeDataAccess = dataAccess.getTypeDataAccess(\"").append(schema.getName()).append("\");\n"); builder.append(" if(typeDataAccess != null) {\n"); builder.append(" ").append(lowercase(typeAPIClassname(schema.getName()))).append(" = new ").append(typeAPIClassname(schema.getName())).append("(this, (Hollow").append(schemaType(schema)).append("TypeDataAccess)typeDataAccess);\n"); builder.append(" } else {\n"); builder.append(" ").append(lowercase(typeAPIClassname(schema.getName()))).append(" = new ").append(typeAPIClassname(schema.getName())).append("(this, new Hollow").append(schemaType(schema)).append("MissingDataAccess(dataAccess, \"").append(schema.getName()).append("\"));\n"); builder.append(" }\n"); builder.append(" addTypeAPI(").append(lowercase(typeAPIClassname(schema.getName()))).append(");\n"); builder.append(" factory = factoryOverrides.get(\"").append(schema.getName()).append("\");\n"); builder.append(" if(factory == null)\n"); builder.append(" factory = new ").append(hollowFactoryClassname(schema.getName())).append("();\n"); builder.append(" if(cachedTypes.contains(\"").append(schema.getName()).append("\")) {\n"); builder.append(" HollowObjectCacheProvider previousCacheProvider = null;\n"); builder.append(" if(previousCycleAPI != null && (previousCycleAPI.").append(hollowObjectProviderName(schema.getName())).append(" instanceof HollowObjectCacheProvider))\n"); builder.append(" previousCacheProvider = (HollowObjectCacheProvider) previousCycleAPI.").append(hollowObjectProviderName(schema.getName())).append(";\n"); builder.append(" ").append(hollowObjectProviderName(schema.getName())).append(" = new HollowObjectCacheProvider(typeDataAccess, ").append(lowercase(typeAPIClassname(schema.getName()))).append(", factory, previousCacheProvider);\n"); builder.append(" } else {\n"); builder.append(" ").append(hollowObjectProviderName(schema.getName())).append(" = new HollowObjectFactoryProvider(typeDataAccess, ").append(lowercase(typeAPIClassname(schema.getName()))).append(", factory);\n"); builder.append(" }\n\n");
private String generateReferenceFieldAccessor(int fieldNum) { Shortcut shortcut = ergonomicShortcuts == null ? null : ergonomicShortcuts.getShortcut(schema.getName() + "." + schema.getFieldName(fieldNum)); String fieldName = substituteInvalidChars(schema.getFieldName(fieldNum)); case INT: case LONG: String methodName = (shortcut.getType()==FieldType.BOOLEAN) ? generateBooleanAccessorMethodName(fieldName, useBooleanFieldErgonomics) : "get" + uppercase(fieldName); builder.append(" public ").append(HollowCodeGenerationUtils.getJavaBoxedType(shortcut.getType())).append(" ").append(getterPrefix).append(methodName); if(!restrictApiToFieldType) { builder.append("Boxed"); builder.append(" return delegate().get" + uppercase(fieldName) + "Boxed(ordinal);\n"); builder.append(" }\n\n"); if(!restrictApiToFieldType) { builder.append(" public ").append(HollowCodeGenerationUtils.getJavaScalarType(shortcut.getType())).append(" ").append(getterPrefix).append(methodName + "() {\n"); builder.append(" return delegate().get" + uppercase(fieldName) + "(ordinal);\n"); builder.append(" }\n\n"); builder.append(" public byte[] ").append(getterPrefix).append("get" + uppercase(fieldName) + "() {\n"); builder.append(" return delegate().get" + uppercase(fieldName) + "(ordinal);\n"); builder.append(" }\n\n"); break; case STRING: builder.append(" public String ").append(getterPrefix).append("get" + uppercase(fieldName) + "() {\n"); builder.append(" return delegate().get" + uppercase(fieldName) + "(ordinal);\n"); builder.append(" }\n\n"); builder.append(" public boolean ").append(getterPrefix).append("is" + uppercase(fieldName) + "Equal(String testValue) {\n"); builder.append(" return delegate().is" + uppercase(fieldName) + "Equal(ordinal, testValue);\n"); builder.append(" }\n\n"); break;
String methodFieldName = substituteInvalidChars(uppercase(schema.getFieldName(i))); switch(schema.getFieldType(i)) { case BOOLEAN: case INT: case LONG: classBuilder.append(" public " + HollowCodeGenerationUtils.getJavaScalarType(shortcut.getType()) + " get").append(methodFieldName).append("(int ordinal);\n\n"); classBuilder.append(" public " + HollowCodeGenerationUtils.getJavaBoxedType(shortcut.getType()) + " get").append(methodFieldName).append("Boxed(int ordinal);\n\n"); break; case BYTES: classBuilder.append(" public ").append(typeAPIClassname(schema.getName())).append(" getTypeAPI();\n\n");
@Override public String generate() { StringBuilder builder = new StringBuilder(); appendPackageAndCommonImports(builder, apiClassname); builder.append("import " + HollowListTypeAPI.class.getName() + ";\n\n"); builder.append("import " + HollowListTypeDataAccess.class.getName() + ";\n"); builder.append("import " + HollowListLookupDelegate.class.getName() + ";\n"); builder.append("\n@SuppressWarnings(\"all\")\n"); builder.append("public class ").append(className).append(" extends HollowListTypeAPI {\n\n"); builder.append(" private final ").append(delegateLookupClassname(schema)).append(" delegateLookupImpl;\n\n"); builder.append(" public ").append(className).append("(").append(apiClassname).append(" api, HollowListTypeDataAccess dataAccess) {\n"); builder.append(" super(api, dataAccess);\n"); builder.append(" this.delegateLookupImpl = new ").append(delegateLookupClassname(schema)).append("(this);\n"); builder.append(" }\n\n"); builder.append(" public ").append(typeAPIClassname(schema.getElementType())).append(" getElementAPI() {\n"); builder.append(" return getAPI().get").append(typeAPIClassname(schema.getElementType())).append("();\n"); builder.append(" }\n\n"); builder.append(" public ").append(delegateLookupClassname(schema)).append(" getDelegateLookupImpl() {\n"); builder.append(" return delegateLookupImpl;\n"); builder.append(" }\n\n"); builder.append(" public ").append(apiClassname).append(" getAPI() {\n"); builder.append(" return (").append(apiClassname).append(")api;\n"); builder.append(" }\n\n"); builder.append("}"); return builder.toString(); }
builder.append(" return (T)new " + objectClassName + "(((" + typeAPIClassname(schema.getName()) + ")typeAPI).getDelegateLookupImpl(), ordinal);\n"); builder.append(" }\n\n"); builder.append(" return (T)new " + objectClassName + "(new " + delegateCachedClassname(schema) + "((" + typeAPIClassname(schema.getName()) + ")typeAPI, ordinal), ordinal);\n"); builder.append(" }\n\n");
for (int i = 0; i < pk.numFields(); i++) { String fp = pk.getFieldPath(i); String fn = HollowCodeGenerationUtils.normalizeFieldPathToParamName(fp); fieldNames.add(fn); params.add(refSchema.getName() + " " + fn); } else { params.add(HollowCodeGenerationUtils.getJavaScalarType(ft) + " " + fn);
private String generateConstructor() { StringBuilder builder = new StringBuilder(); builder.append(" public " + className + "(" + apiClassname + " api, HollowObjectTypeDataAccess typeDataAccess) {\n"); builder.append(" super(api, typeDataAccess, new String[] {\n"); for(int i=0;i<objectSchema.numFields();i++) { builder.append(" \"" + objectSchema.getFieldName(i) + "\""); if(i < objectSchema.numFields() - 1) builder.append(","); builder.append("\n"); } builder.append(" });\n"); builder.append(" this.delegateLookupImpl = new ").append(delegateLookupClassname(objectSchema)).append("(this);\n"); builder.append(" }"); return builder.toString(); }
private String getKeyFieldType(String fieldPath) { try { HollowObjectSchema keySchema = (HollowObjectSchema)dataset.getSchema(schema.getKeyType()); String fieldPathElements[] = fieldPath.split("\\."); int idx = 0; while(idx < fieldPathElements.length-1) { keySchema = (HollowObjectSchema)dataset.getSchema(keySchema.getReferencedType(fieldPathElements[idx])); idx++; } FieldType fieldType = keySchema.getFieldType(keySchema.getPosition(fieldPathElements[idx])); return HollowCodeGenerationUtils.getJavaBoxedType(fieldType); } catch(Throwable th) { } throw new IllegalArgumentException("Field path '" + fieldPath + "' specified incorrectly for type: " + schema.getName()); }
private String fieldType(int i) { switch (schema.getFieldType(i)) { case BOOLEAN: case BYTES: case DOUBLE: case FLOAT: case INT: case LONG: case STRING: return getJavaScalarType(schema.getFieldType(i)); case REFERENCE: return buildFieldType(dataset.getSchema(schema.getReferencedType(i))); default: throw new IllegalArgumentException("Field type is unrecognized: " + schema.getFieldType(i)); } }
builder.append("public class ").append(className).append(" extends HollowObjectAbstractDelegate implements HollowCachedDelegate, ").append(delegateInterfaceName(schema.getName())).append(" {\n\n"); builder.append(" private final Boolean ").append(substituteInvalidChars(schema.getFieldName(i))).append(";\n"); break; case BYTES: builder.append(" private final byte[] ").append(substituteInvalidChars(schema.getFieldName(i))).append(";\n"); break; case DOUBLE: builder.append(" private final Double ").append(substituteInvalidChars(schema.getFieldName(i))).append(";\n"); break; case FLOAT: builder.append(" private final Float ").append(substituteInvalidChars(schema.getFieldName(i))).append(";\n"); break; case INT: builder.append(" private final Integer ").append(substituteInvalidChars(schema.getFieldName(i))).append(";\n"); break; case LONG: builder.append(" private final Long ").append(substituteInvalidChars(schema.getFieldName(i))).append(";\n"); break; case REFERENCE: Shortcut shortcut = ergonomicShortcuts.getShortcut(schema.getName() + "." + schema.getFieldName(i)); if(shortcut != null) builder.append(" private final ").append(HollowCodeGenerationUtils.getJavaBoxedType(shortcut.getType())).append(" ").append(substituteInvalidChars(schema.getFieldName(i))).append(";\n"); builder.append(" private final int ").append(substituteInvalidChars(schema.getFieldName(i))).append("Ordinal;\n"); break; case STRING: builder.append(" private final String ").append(substituteInvalidChars(schema.getFieldName(i))).append(";\n"); break;
builder.append("public class ").append(className).append(" extends HollowSetTypeAPI {\n\n"); builder.append(" private final ").append(delegateLookupClassname(schema)).append(" delegateLookupImpl;\n\n"); builder.append(" this.delegateLookupImpl = new ").append(delegateLookupClassname(schema)).append("(this);\n"); builder.append(" }\n\n"); builder.append(" public ").append(typeAPIClassname(schema.getElementType())).append(" getElementAPI() {\n"); builder.append(" return getAPI().get").append(typeAPIClassname(schema.getElementType())).append("();\n"); builder.append(" }\n\n"); builder.append(" }\n\n"); builder.append(" public ").append(delegateLookupClassname(schema)).append(" getDelegateLookupImpl() {\n"); builder.append(" return delegateLookupImpl;\n"); builder.append(" }\n\n");
classBodyBuilder.append("public class " + className + " extends HollowObjectTypeAPI {\n\n"); classBodyBuilder.append(" private final ").append(delegateLookupClassname(objectSchema)).append(" delegateLookupImpl;\n\n"); classBodyBuilder.append(" public ").append(delegateLookupClassname(objectSchema)).append(" getDelegateLookupImpl() {\n"); classBodyBuilder.append(" return delegateLookupImpl;\n"); classBodyBuilder.append(" }\n\n");
@Override public String generate() { StringBuilder builder = new StringBuilder(); appendPackageAndCommonImports(builder, apiClassname); builder.append("import " + HollowMapTypeAPI.class.getName() + ";\n\n"); builder.append("import " + HollowMapTypeDataAccess.class.getName() + ";\n"); builder.append("import " + HollowMapLookupDelegate.class.getName() + ";\n"); builder.append("\n@SuppressWarnings(\"all\")\n"); builder.append("public class ").append(className).append(" extends HollowMapTypeAPI {\n\n"); builder.append(" private final ").append(delegateLookupClassname(schema)).append(" delegateLookupImpl;\n\n"); builder.append(" public ").append(className).append("(").append(apiClassname).append(" api, HollowMapTypeDataAccess dataAccess) {\n"); builder.append(" super(api, dataAccess);\n"); builder.append(" this.delegateLookupImpl = new ").append(delegateLookupClassname(schema)).append("(this);\n"); builder.append(" }\n\n"); builder.append(" public ").append(typeAPIClassname(schema.getKeyType())).append(" getKeyAPI() {\n"); builder.append(" return getAPI().get").append(typeAPIClassname(schema.getKeyType())).append("();\n"); builder.append(" }\n\n"); builder.append(" public ").append(typeAPIClassname(schema.getValueType())).append(" getValueAPI() {\n"); builder.append(" return getAPI().get").append(typeAPIClassname(schema.getValueType())).append("();\n"); builder.append(" }\n\n"); builder.append(" public ").append(delegateLookupClassname(schema)).append(" getDelegateLookupImpl() {\n"); builder.append(" return delegateLookupImpl;\n"); builder.append(" }\n\n"); builder.append(" public ").append(apiClassname).append(" getAPI() {\n"); builder.append(" return (").append(apiClassname).append(")api;\n"); builder.append(" }\n\n"); builder.append("}"); return builder.toString(); }
private void appendDelegateAccessor(StringBuilder classBuilder) { classBuilder.append(" protected ").append(delegateInterfaceName(schema.getName())).append(" delegate() {\n"); classBuilder.append(" return (").append(delegateInterfaceName(schema.getName())).append(")delegate;\n"); classBuilder.append(" }\n\n"); }