@Override protected String getGeneratedClassNameString() { return modelSpecAnnotation.className(); }
@Override protected void addModelSpecificImports(Set<DeclaredTypeName> imports) { if (hasMetadata(METADATA_KEY_QUERY_ELEMENT)) { if (modelSpecAnnotation.isSubquery()) { imports.add(TypeConstants.SUBQUERY_TABLE); } else { imports.add(TypeConstants.VIEW); } imports.add(TypeConstants.QUERY); } } }
private void checkViewName() { String viewName = getSpecAnnotation().viewName().trim(); if (viewName.toLowerCase().startsWith("sqlite_")) { logError("View names cannot start with 'sqlite_'; such names are reserved for internal use", getModelSpecElement()); } else { SqlUtils.checkIdentifier(viewName, "view", this, getModelSpecElement(), utils); } }
@ViewModelSpec(className = "ViewlessViewModel", viewName = "viewlessViewModel") public class ViewlessViewModelSpec { public static final LongProperty TEST_MODEL_ID = TestModel.ID; public static final LongProperty EMPLOYEE_MODEL_ID = Employee.ID; public static final StringProperty TEST_NAME = TestModel.FIRST_NAME; public static final StringProperty EMPLOYEE_NAME = Employee.NAME; public static final StringProperty UPPERCASE_NAME = StringProperty .fromFunction(Function.upper(EMPLOYEE_NAME), "uppercase_name"); }
@ViewModelSpec(className = "TestViewModel", viewName = "testView") public class TestViewModelSpec {
private void emitQueryAndTableDeclaration() throws IOException { emitSqlTableDeclaration(!modelSpec.getSpecAnnotation().isSubquery()); }
private void emitSqlTableDeclaration(boolean view) throws IOException { writer.writeComment("--- " + (view ? "view" : "subquery") + " declaration"); String name = "\"" + modelSpec.getSpecAnnotation().viewName().trim() + "\""; if (modelSpec.getQueryElement() != null) { Expression queryReference = Expressions.staticReference(modelSpec.getModelSpecName(), modelSpec.getQueryElement().getSimpleName().toString()) .callMethod("selectMore", ALIASED_PROPERTY_ARRAY_NAME); if (modelSpec.getViewQueryAnnotation().freeze()) { queryReference = queryReference.callMethod("freeze"); } writer.writeFieldDeclaration(TypeConstants.QUERY, QUERY_NAME, queryReference, TypeConstants.PUBLIC_STATIC_FINAL); Expression initializer = constructInitializer(name, view); writer.writeFieldDeclaration(view ? TypeConstants.VIEW : TypeConstants.SUBQUERY_TABLE, view ? VIEW_NAME : SUBQUERY_NAME, initializer, TypeConstants.PUBLIC_STATIC_FINAL); } else { writer.writeFieldDeclaration(CoreTypes.JAVA_STRING, view ? "VIEW_NAME" : "SUBQUERY_NAME", Expressions.fromString(name), TypeConstants.PUBLIC_STATIC_FINAL); } writer.writeNewline(); }
@Override protected String getGeneratedClassNameString() { return modelSpecAnnotation.className(); }
@ViewModelSpec(className = "ThingJoin", viewName = "thingJoin", isSubquery = true) public class ThingJoinSpec {
private void emitSinglePropertyDeclaration(PropertyGenerator generator, int index) throws IOException { modelSpec.getPluginBundle().beforeEmitPropertyDeclaration(writer, generator); DeclaredTypeName type = generator.getPropertyType(); String fieldToQualify = ALIASED_PROPERTY_ARRAY_NAME + "[" + index + "]"; Expression expressionToCast; if (modelSpec.getQueryElement() != null) { String callOn = modelSpec.getSpecAnnotation().isSubquery() ? SUBQUERY_NAME : VIEW_NAME; expressionToCast = Expressions.callMethodOn(callOn, "qualifyField", fieldToQualify); } else { expressionToCast = Expressions.reference(fieldToQualify); } writer.writeFieldDeclaration(type, generator.getPropertyName(), expressionToCast.cast(type), TypeConstants.PUBLIC_STATIC_FINAL) .writeNewline(); modelSpec.getPluginBundle().afterEmitPropertyDeclaration(writer, generator); }
private void checkViewName() { String viewName = getSpecAnnotation().viewName().trim(); if (viewName.toLowerCase().startsWith("sqlite_")) { logError("View names cannot start with 'sqlite_'; such names are reserved for internal use", getModelSpecElement()); } else { SqlUtils.checkIdentifier(viewName, "view", this, getModelSpecElement(), utils); } }
@ViewModelSpec(className = "TestSubqueryModel", viewName = "subquery", isSubquery = true) public class TestSubqueryModelSpec {
@Override protected void addModelSpecificImports(Set<DeclaredTypeName> imports) { if (hasMetadata(METADATA_KEY_QUERY_ELEMENT)) { if (modelSpecAnnotation.isSubquery()) { imports.add(TypeConstants.SUBQUERY_TABLE); } else { imports.add(TypeConstants.VIEW); } imports.add(TypeConstants.QUERY); } } }
private void emitSqlTableDeclaration(boolean view) throws IOException { writer.writeComment("--- " + (view ? "view" : "subquery") + " declaration"); String name = "\"" + modelSpec.getSpecAnnotation().viewName().trim() + "\""; if (modelSpec.getQueryElement() != null) { Expression queryReference = Expressions.staticReference(modelSpec.getModelSpecName(), modelSpec.getQueryElement().getSimpleName().toString()) .callMethod("selectMore", ALIASED_PROPERTY_ARRAY_NAME); if (modelSpec.getViewQueryAnnotation().freeze()) { queryReference = queryReference.callMethod("freeze"); } writer.writeFieldDeclaration(TypeConstants.QUERY, QUERY_NAME, queryReference, TypeConstants.PUBLIC_STATIC_FINAL); Expression initializer = constructInitializer(name, view); writer.writeFieldDeclaration(view ? TypeConstants.VIEW : TypeConstants.SUBQUERY_TABLE, view ? VIEW_NAME : SUBQUERY_NAME, initializer, TypeConstants.PUBLIC_STATIC_FINAL); } else { writer.writeFieldDeclaration(CoreTypes.JAVA_STRING, view ? "VIEW_NAME" : "SUBQUERY_NAME", Expressions.fromString(name), TypeConstants.PUBLIC_STATIC_FINAL); } writer.writeNewline(); }
private void emitQueryAndTableDeclaration() throws IOException { emitSqlTableDeclaration(!modelSpec.getSpecAnnotation().isSubquery()); }
private void emitSinglePropertyDeclaration(PropertyGenerator generator, int index) throws IOException { modelSpec.getPluginBundle().beforeEmitPropertyDeclaration(writer, generator); DeclaredTypeName type = generator.getPropertyType(); String fieldToQualify = ALIASED_PROPERTY_ARRAY_NAME + "[" + index + "]"; Expression expressionToCast; if (modelSpec.getQueryElement() != null) { String callOn = modelSpec.getSpecAnnotation().isSubquery() ? SUBQUERY_NAME : VIEW_NAME; expressionToCast = Expressions.callMethodOn(callOn, "qualifyField", fieldToQualify); } else { expressionToCast = Expressions.reference(fieldToQualify); } writer.writeFieldDeclaration(type, generator.getPropertyName(), expressionToCast.cast(type), TypeConstants.PUBLIC_STATIC_FINAL) .writeNewline(); modelSpec.getPluginBundle().afterEmitPropertyDeclaration(writer, generator); }