package com.robotoworks.mechanoid.db.generator; import com.google.common.base.Objects; import com.google.common.collect.Iterables; import com.robotoworks.mechanoid.db.generator.SqliteDatabaseSnapshot; import com.robotoworks.mechanoid.db.sqliteModel.ActionStatement; import com.robotoworks.mechanoid.db.sqliteModel.ColumnDef; import com.robotoworks.mechanoid.db.sqliteModel.ColumnSource; import com.robotoworks.mechanoid.db.sqliteModel.ColumnType; import com.robotoworks.mechanoid.db.sqliteModel.ConfigBlock; import com.robotoworks.mechanoid.db.sqliteModel.ConfigurationStatement; import com.robotoworks.mechanoid.db.sqliteModel.ContentUri; import com.robotoworks.mechanoid.db.sqliteModel.ContentUriParamSegment; import com.robotoworks.mechanoid.db.sqliteModel.ContentUriSegment; import com.robotoworks.mechanoid.db.sqliteModel.CreateTableStatement; import com.robotoworks.mechanoid.db.sqliteModel.CreateViewStatement; import com.robotoworks.mechanoid.db.sqliteModel.DatabaseBlock; import com.robotoworks.mechanoid.db.sqliteModel.Model; import com.robotoworks.mechanoid.db.sqliteModel.ResultColumn; import com.robotoworks.mechanoid.db.sqliteModel.TableDefinition; import com.robotoworks.mechanoid.db.util.ModelUtil; import com.robotoworks.mechanoid.text.Strings; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.HashSet; import java.util.List; import org.eclipse.emf.common.util.EList; import org.eclipse.xtend2.lib.StringConcatenation; import org.eclipse.xtext.xbase.lib.Functions.Function1; import org.eclipse.xtext.xbase.lib.IterableExtensions; @SuppressWarnings("all") public class ContentProviderContractGenerator { public CharSequence generate(final Model model, final SqliteDatabaseSnapshot snapshot) { StringConcatenation _builder = new StringConcatenation(); _builder.append("/*"); _builder.newLine(); _builder.append(" "); _builder.append("* Generated by Robotoworks Mechanoid"); _builder.newLine(); _builder.append(" "); _builder.append("*/"); _builder.newLine(); _builder.append("package "); String _packageName = model.getPackageName(); _builder.append(_packageName, ""); _builder.append(";"); _builder.newLineIfNotEmpty(); _builder.newLine(); _builder.append("import android.net.Uri;"); _builder.newLine(); _builder.append("import android.provider.BaseColumns;"); _builder.newLine(); _builder.append("import com.robotoworks.mechanoid.Mechanoid;"); _builder.newLine(); _builder.append("import com.robotoworks.mechanoid.db.AbstractValuesBuilder;"); _builder.newLine(); _builder.append("import java.lang.reflect.Field;\t\t\t"); _builder.newLine(); _builder.append("import java.util.Collections;"); _builder.newLine(); _builder.append("import java.util.HashSet;"); _builder.newLine(); _builder.append("import java.util.HashMap;"); _builder.newLine(); _builder.append("import java.util.Set;"); _builder.newLine(); _builder.append("import java.util.Map;"); _builder.newLine(); _builder.newLine(); _builder.append("public class "); DatabaseBlock _database = model.getDatabase(); String _name = _database.getName(); String _pascalize = Strings.pascalize(_name); _builder.append(_pascalize, ""); _builder.append("Contract {"); _builder.newLineIfNotEmpty(); _builder.append(" "); _builder.append("public static final String CONTENT_AUTHORITY = initAuthority();"); _builder.newLine(); _builder.newLine(); _builder.append("\t"); _builder.append("private static String initAuthority() {"); _builder.newLine(); _builder.append("\t\t"); _builder.append("String authority = \""); String _packageName_1 = model.getPackageName(); _builder.append(_packageName_1, "\t\t"); _builder.append("."); DatabaseBlock _database_1 = model.getDatabase(); String _name_1 = _database_1.getName(); String _lowerCase = _name_1.toLowerCase(); _builder.append(_lowerCase, "\t\t"); _builder.append("\";"); _builder.newLineIfNotEmpty(); _builder.newLine(); _builder.append("\t\t"); _builder.append("try {"); _builder.newLine(); _builder.append(" \t\t"); _builder.newLine(); _builder.append(" \t\t"); _builder.append("ClassLoader loader = "); DatabaseBlock _database_2 = model.getDatabase(); String _name_2 = _database_2.getName(); String _pascalize_1 = Strings.pascalize(_name_2); _builder.append(_pascalize_1, " \t\t"); _builder.append("Contract.class.getClassLoader();"); _builder.newLineIfNotEmpty(); _builder.append(" \t\t"); _builder.newLine(); _builder.append("\t\t\t"); _builder.append("Class<?> clz = loader.loadClass(\""); String _packageName_2 = model.getPackageName(); _builder.append(_packageName_2, "\t\t\t"); _builder.append("."); DatabaseBlock _database_3 = model.getDatabase(); String _name_3 = _database_3.getName(); String _pascalize_2 = Strings.pascalize(_name_3); _builder.append(_pascalize_2, "\t\t\t"); _builder.append("ContentProviderAuthority\");"); _builder.newLineIfNotEmpty(); _builder.append("\t\t\t"); _builder.append("Field declaredField = clz.getDeclaredField(\"CONTENT_AUTHORITY\");"); _builder.newLine(); _builder.append("\t\t\t"); _builder.newLine(); _builder.append("\t\t\t"); _builder.append("authority = declaredField.get(null).toString();"); _builder.newLine(); _builder.append("\t\t"); _builder.append("} catch (ClassNotFoundException e) {} "); _builder.newLine(); _builder.append(" \t"); _builder.append("catch (NoSuchFieldException e) {} "); _builder.newLine(); _builder.append(" \t"); _builder.append("catch (IllegalArgumentException e) {"); _builder.newLine(); _builder.append("\t\t"); _builder.append("} catch (IllegalAccessException e) {"); _builder.newLine(); _builder.append("\t\t"); _builder.append("}"); _builder.newLine(); _builder.append("\t\t"); _builder.newLine(); _builder.append("\t\t"); _builder.append("return authority;"); _builder.newLine(); _builder.append("\t"); _builder.append("}"); _builder.newLine(); _builder.append("\t"); _builder.newLine(); _builder.append(" "); _builder.append("private static final Uri BASE_CONTENT_URI = Uri.parse(\"content://\" + CONTENT_AUTHORITY);"); _builder.newLine(); _builder.newLine(); { Collection<CreateTableStatement> _tables = snapshot.getTables(); final Function1<CreateTableStatement, String> _function = new Function1<CreateTableStatement, String>() { public String apply(final CreateTableStatement x) { return x.getName(); } }; List<CreateTableStatement> _sortBy = IterableExtensions.<CreateTableStatement, String>sortBy(_tables, _function); for(final CreateTableStatement tbl : _sortBy) { _builder.append("\t"); _builder.append("interface "); String _name_4 = tbl.getName(); String _pascalize_3 = Strings.pascalize(_name_4); _builder.append(_pascalize_3, "\t"); _builder.append("Columns {"); _builder.newLineIfNotEmpty(); { EList<ColumnSource> _columnDefs = tbl.getColumnDefs(); final Function1<ColumnSource, Boolean> _function_1 = new Function1<ColumnSource, Boolean>() { public Boolean apply(final ColumnSource it) { String _name = it.getName(); boolean _equals = _name.equals("_id"); return Boolean.valueOf((!_equals)); } }; Iterable<ColumnSource> _filter = IterableExtensions.<ColumnSource>filter(_columnDefs, _function_1); for(final ColumnSource col : _filter) { _builder.append("\t"); _builder.append("\t"); _builder.append("String "); String _name_5 = col.getName(); String _underscore = Strings.underscore(_name_5); String _upperCase = _underscore.toUpperCase(); _builder.append(_upperCase, "\t\t"); _builder.append(" = \""); String _name_6 = col.getName(); _builder.append(_name_6, "\t\t"); _builder.append("\";"); _builder.newLineIfNotEmpty(); } } _builder.append("\t"); _builder.append("}"); _builder.newLine(); _builder.append("\t"); _builder.newLine(); } } { Collection<CreateViewStatement> _views = snapshot.getViews(); final Function1<CreateViewStatement, String> _function_2 = new Function1<CreateViewStatement, String>() { public String apply(final CreateViewStatement x) { return x.getName(); } }; List<CreateViewStatement> _sortBy_1 = IterableExtensions.<CreateViewStatement, String>sortBy(_views, _function_2); for(final CreateViewStatement vw : _sortBy_1) { _builder.append("\t"); _builder.append("interface "); String _name_7 = vw.getName(); String _pascalize_4 = Strings.pascalize(_name_7); _builder.append(_pascalize_4, "\t"); _builder.append("Columns {"); _builder.newLineIfNotEmpty(); { ArrayList<ColumnSource> _viewResultColumns = ModelUtil.getViewResultColumns(vw); final Function1<ColumnSource, Boolean> _function_3 = new Function1<ColumnSource, Boolean>() { public Boolean apply(final ColumnSource it) { String _name = it.getName(); boolean _equals = _name.equals("_id"); return Boolean.valueOf((!_equals)); } }; Iterable<ColumnSource> _filter_1 = IterableExtensions.<ColumnSource>filter(_viewResultColumns, _function_3); for(final ColumnSource col_1 : _filter_1) { _builder.append("\t"); _builder.append("\t"); CharSequence _generateInterfaceMemberForResultColumn = this.generateInterfaceMemberForResultColumn(col_1); _builder.append(_generateInterfaceMemberForResultColumn, "\t\t"); _builder.newLineIfNotEmpty(); } } _builder.append("\t"); _builder.append("}"); _builder.newLine(); } } { Collection<CreateTableStatement> _configInitTables = ModelUtil.getConfigInitTables(model); final Function1<CreateTableStatement, String> _function_4 = new Function1<CreateTableStatement, String>() { public String apply(final CreateTableStatement x) { return x.getName(); } }; List<CreateTableStatement> _sortBy_2 = IterableExtensions.<CreateTableStatement, String>sortBy(_configInitTables, _function_4); for(final CreateTableStatement tbl_1 : _sortBy_2) { _builder.append("\t"); _builder.append("interface "); String _name_8 = tbl_1.getName(); String _pascalize_5 = Strings.pascalize(_name_8); _builder.append(_pascalize_5, "\t"); _builder.append("Columns {"); _builder.newLineIfNotEmpty(); { EList<ColumnSource> _columnDefs_1 = tbl_1.getColumnDefs(); final Function1<ColumnSource, Boolean> _function_5 = new Function1<ColumnSource, Boolean>() { public Boolean apply(final ColumnSource it) { String _name = it.getName(); boolean _equals = _name.equals("_id"); return Boolean.valueOf((!_equals)); } }; Iterable<ColumnSource> _filter_2 = IterableExtensions.<ColumnSource>filter(_columnDefs_1, _function_5); for(final ColumnSource col_2 : _filter_2) { _builder.append("\t"); _builder.append("\t"); _builder.append("String "); String _name_9 = col_2.getName(); String _underscore_1 = Strings.underscore(_name_9); String _upperCase_1 = _underscore_1.toUpperCase(); _builder.append(_upperCase_1, "\t\t"); _builder.append(" = \""); String _name_10 = col_2.getName(); _builder.append(_name_10, "\t\t"); _builder.append("\";"); _builder.newLineIfNotEmpty(); } } _builder.append("\t"); _builder.append("}"); _builder.newLine(); _builder.append("\t"); _builder.newLine(); } } { Collection<CreateViewStatement> _configInitViews = ModelUtil.getConfigInitViews(model); final Function1<CreateViewStatement, String> _function_6 = new Function1<CreateViewStatement, String>() { public String apply(final CreateViewStatement x) { return x.getName(); } }; List<CreateViewStatement> _sortBy_3 = IterableExtensions.<CreateViewStatement, String>sortBy(_configInitViews, _function_6); for(final CreateViewStatement vw_1 : _sortBy_3) { _builder.append("\t"); _builder.append("interface "); String _name_11 = vw_1.getName(); String _pascalize_6 = Strings.pascalize(_name_11); _builder.append(_pascalize_6, "\t"); _builder.append("Columns {"); _builder.newLineIfNotEmpty(); { ArrayList<ColumnSource> _viewResultColumns_1 = ModelUtil.getViewResultColumns(vw_1); final Function1<ColumnSource, Boolean> _function_7 = new Function1<ColumnSource, Boolean>() { public Boolean apply(final ColumnSource it) { String _name = it.getName(); boolean _equals = _name.equals("_id"); return Boolean.valueOf((!_equals)); } }; Iterable<ColumnSource> _filter_3 = IterableExtensions.<ColumnSource>filter(_viewResultColumns_1, _function_7); for(final ColumnSource col_3 : _filter_3) { _builder.append("\t"); _builder.append("\t"); CharSequence _generateInterfaceMemberForResultColumn_1 = this.generateInterfaceMemberForResultColumn(col_3); _builder.append(_generateInterfaceMemberForResultColumn_1, "\t\t"); _builder.newLineIfNotEmpty(); } } _builder.append("\t"); _builder.append("}"); _builder.newLine(); _builder.append("\t"); _builder.newLine(); } } _builder.append("\t\t\t"); _builder.newLine(); { Collection<CreateTableStatement> _tables_1 = snapshot.getTables(); final Function1<CreateTableStatement, String> _function_8 = new Function1<CreateTableStatement, String>() { public String apply(final CreateTableStatement x) { return x.getName(); } }; List<CreateTableStatement> _sortBy_4 = IterableExtensions.<CreateTableStatement, String>sortBy(_tables_1, _function_8); for(final CreateTableStatement tbl_2 : _sortBy_4) { _builder.append("\t"); CharSequence _generateContractItem = this.generateContractItem(model, snapshot, tbl_2); _builder.append(_generateContractItem, "\t"); _builder.newLineIfNotEmpty(); } } _builder.newLine(); { Collection<CreateViewStatement> _views_1 = snapshot.getViews(); final Function1<CreateViewStatement, String> _function_9 = new Function1<CreateViewStatement, String>() { public String apply(final CreateViewStatement x) { return x.getName(); } }; List<CreateViewStatement> _sortBy_5 = IterableExtensions.<CreateViewStatement, String>sortBy(_views_1, _function_9); for(final CreateViewStatement vw_2 : _sortBy_5) { _builder.append("\t"); CharSequence _generateContractItem_1 = this.generateContractItem(model, snapshot, vw_2); _builder.append(_generateContractItem_1, "\t"); _builder.newLineIfNotEmpty(); } } _builder.append("\t"); _builder.newLine(); { Collection<CreateTableStatement> _configInitTables_1 = ModelUtil.getConfigInitTables(model); final Function1<CreateTableStatement, String> _function_10 = new Function1<CreateTableStatement, String>() { public String apply(final CreateTableStatement x) { return x.getName(); } }; List<CreateTableStatement> _sortBy_6 = IterableExtensions.<CreateTableStatement, String>sortBy(_configInitTables_1, _function_10); for(final CreateTableStatement tbl_3 : _sortBy_6) { _builder.append("\t"); CharSequence _generateContractItem_2 = this.generateContractItem(model, snapshot, tbl_3); _builder.append(_generateContractItem_2, "\t"); _builder.newLineIfNotEmpty(); } } _builder.newLine(); { Collection<CreateViewStatement> _configInitViews_1 = ModelUtil.getConfigInitViews(model); final Function1<CreateViewStatement, String> _function_11 = new Function1<CreateViewStatement, String>() { public String apply(final CreateViewStatement x) { return x.getName(); } }; List<CreateViewStatement> _sortBy_7 = IterableExtensions.<CreateViewStatement, String>sortBy(_configInitViews_1, _function_11); for(final CreateViewStatement vw_3 : _sortBy_7) { _builder.append("\t"); CharSequence _generateContractItem_3 = this.generateContractItem(model, snapshot, vw_3); _builder.append(_generateContractItem_3, "\t"); _builder.newLineIfNotEmpty(); } } _builder.append("\t"); _builder.newLine(); _builder.append("\t"); _builder.append("static Map<Uri, Set<Uri>> REFERENCING_VIEWS;"); _builder.newLine(); _builder.append("\t"); _builder.newLine(); _builder.append("\t"); _builder.append("static {"); _builder.newLine(); _builder.append("\t\t"); _builder.append("Map<Uri, Set<Uri>> map = new HashMap<Uri, Set<Uri>>();"); _builder.newLine(); _builder.append("\t\t"); _builder.newLine(); { Collection<CreateTableStatement> _tables_2 = snapshot.getTables(); final Function1<CreateTableStatement, String> _function_12 = new Function1<CreateTableStatement, String>() { public String apply(final CreateTableStatement x) { return x.getName(); } }; List<CreateTableStatement> _sortBy_8 = IterableExtensions.<CreateTableStatement, String>sortBy(_tables_2, _function_12); for(final CreateTableStatement tbl_4 : _sortBy_8) { _builder.append("\t\t"); _builder.append("map.put("); String _name_12 = tbl_4.getName(); String _pascalize_7 = Strings.pascalize(_name_12); _builder.append(_pascalize_7, "\t\t"); _builder.append(".CONTENT_URI, "); String _name_13 = tbl_4.getName(); String _pascalize_8 = Strings.pascalize(_name_13); _builder.append(_pascalize_8, "\t\t"); _builder.append(".VIEW_URIS);"); _builder.newLineIfNotEmpty(); } } { Collection<CreateViewStatement> _views_2 = snapshot.getViews(); final Function1<CreateViewStatement, String> _function_13 = new Function1<CreateViewStatement, String>() { public String apply(final CreateViewStatement x) { return x.getName(); } }; List<CreateViewStatement> _sortBy_9 = IterableExtensions.<CreateViewStatement, String>sortBy(_views_2, _function_13); for(final CreateViewStatement vw_4 : _sortBy_9) { _builder.append("\t\t"); _builder.append("map.put("); String _name_14 = vw_4.getName(); String _pascalize_9 = Strings.pascalize(_name_14); _builder.append(_pascalize_9, "\t\t"); _builder.append(".CONTENT_URI, "); String _name_15 = vw_4.getName(); String _pascalize_10 = Strings.pascalize(_name_15); _builder.append(_pascalize_10, "\t\t"); _builder.append(".VIEW_URIS);"); _builder.newLineIfNotEmpty(); } } { Collection<CreateTableStatement> _configInitTables_2 = ModelUtil.getConfigInitTables(model); final Function1<CreateTableStatement, String> _function_14 = new Function1<CreateTableStatement, String>() { public String apply(final CreateTableStatement x) { return x.getName(); } }; List<CreateTableStatement> _sortBy_10 = IterableExtensions.<CreateTableStatement, String>sortBy(_configInitTables_2, _function_14); for(final CreateTableStatement tbl_5 : _sortBy_10) { _builder.append("\t\t"); _builder.append("map.put("); String _name_16 = tbl_5.getName(); String _pascalize_11 = Strings.pascalize(_name_16); _builder.append(_pascalize_11, "\t\t"); _builder.append(".CONTENT_URI, "); String _name_17 = tbl_5.getName(); String _pascalize_12 = Strings.pascalize(_name_17); _builder.append(_pascalize_12, "\t\t"); _builder.append(".VIEW_URIS);"); _builder.newLineIfNotEmpty(); } } { Collection<CreateViewStatement> _configInitViews_2 = ModelUtil.getConfigInitViews(model); final Function1<CreateViewStatement, String> _function_15 = new Function1<CreateViewStatement, String>() { public String apply(final CreateViewStatement x) { return x.getName(); } }; List<CreateViewStatement> _sortBy_11 = IterableExtensions.<CreateViewStatement, String>sortBy(_configInitViews_2, _function_15); for(final CreateViewStatement vw_5 : _sortBy_11) { _builder.append("\t\t"); _builder.append("map.put("); String _name_18 = vw_5.getName(); String _pascalize_13 = Strings.pascalize(_name_18); _builder.append(_pascalize_13, "\t\t"); _builder.append(".CONTENT_URI, "); String _name_19 = vw_5.getName(); String _pascalize_14 = Strings.pascalize(_name_19); _builder.append(_pascalize_14, "\t\t"); _builder.append(".VIEW_URIS);"); _builder.newLineIfNotEmpty(); } } _builder.append("\t\t"); _builder.newLine(); _builder.append("\t\t"); _builder.append("REFERENCING_VIEWS = Collections.unmodifiableMap(map);"); _builder.newLine(); _builder.append("\t\t"); _builder.newLine(); _builder.append("\t"); _builder.append("}"); _builder.newLine(); _builder.append("\t"); _builder.newLine(); _builder.append("\t"); CharSequence _generateContractItemsForActions = this.generateContractItemsForActions(model, snapshot); _builder.append(_generateContractItemsForActions, "\t"); _builder.newLineIfNotEmpty(); _builder.append("\t"); _builder.append("private "); DatabaseBlock _database_4 = model.getDatabase(); String _name_20 = _database_4.getName(); String _pascalize_15 = Strings.pascalize(_name_20); _builder.append(_pascalize_15, "\t"); _builder.append("Contract(){}"); _builder.newLineIfNotEmpty(); _builder.append("\t"); _builder.newLine(); _builder.append("\t"); _builder.append("/**"); _builder.newLine(); _builder.append("\t "); _builder.append("* <p>Delete all rows from all tables</p>"); _builder.newLine(); _builder.append("\t "); _builder.append("*/\t\t\t\t\t\t"); _builder.newLine(); _builder.append("\t"); _builder.append("public static void deleteAll() {"); _builder.newLine(); { Collection<CreateTableStatement> _tables_3 = snapshot.getTables(); final Function1<CreateTableStatement, String> _function_16 = new Function1<CreateTableStatement, String>() { public String apply(final CreateTableStatement x) { return x.getName(); } }; List<CreateTableStatement> _sortBy_12 = IterableExtensions.<CreateTableStatement, String>sortBy(_tables_3, _function_16); for(final CreateTableStatement tbl_6 : _sortBy_12) { _builder.append("\t\t"); String _name_21 = tbl_6.getName(); String _pascalize_16 = Strings.pascalize(_name_21); _builder.append(_pascalize_16, "\t\t"); _builder.append(".delete();"); _builder.newLineIfNotEmpty(); } } { Collection<CreateTableStatement> _configInitTables_3 = ModelUtil.getConfigInitTables(model); final Function1<CreateTableStatement, String> _function_17 = new Function1<CreateTableStatement, String>() { public String apply(final CreateTableStatement x) { return x.getName(); } }; List<CreateTableStatement> _sortBy_13 = IterableExtensions.<CreateTableStatement, String>sortBy(_configInitTables_3, _function_17); for(final CreateTableStatement tbl_7 : _sortBy_13) { _builder.append("\t\t"); String _name_22 = tbl_7.getName(); String _pascalize_17 = Strings.pascalize(_name_22); _builder.append(_pascalize_17, "\t\t"); _builder.append(".delete();"); _builder.newLineIfNotEmpty(); } } _builder.append("\t"); _builder.append("}"); _builder.newLine(); _builder.append("}"); _builder.newLine(); return _builder; } public CharSequence generateContractItemsForActions(final Model model, final SqliteDatabaseSnapshot snapshot) { StringConcatenation _builder = new StringConcatenation(); { DatabaseBlock _database = model.getDatabase(); ConfigBlock _config = _database.getConfig(); boolean _notEquals = (!Objects.equal(_config, null)); if (_notEquals) { { DatabaseBlock _database_1 = model.getDatabase(); ConfigBlock _config_1 = _database_1.getConfig(); EList<ConfigurationStatement> _statements = _config_1.getStatements(); Iterable<ActionStatement> _filter = Iterables.<ActionStatement>filter(_statements, ActionStatement.class); final Function1<ActionStatement, Boolean> _function = new Function1<ActionStatement, Boolean>() { public Boolean apply(final ActionStatement it) { ContentUri _uri = it.getUri(); String _type = _uri.getType(); boolean _containsDefinition = snapshot.containsDefinition(_type); return Boolean.valueOf((!_containsDefinition)); } }; Iterable<ActionStatement> _filter_1 = IterableExtensions.<ActionStatement>filter(_filter, _function); for(final ActionStatement action : _filter_1) { _builder.append("public static class "); ContentUri _uri = action.getUri(); String _type = _uri.getType(); String _pascalize = Strings.pascalize(_type); _builder.append(_pascalize, ""); _builder.append(" {"); _builder.newLineIfNotEmpty(); _builder.append("\t"); CharSequence _createActionUriBuilderMethod = this.createActionUriBuilderMethod(action); _builder.append(_createActionUriBuilderMethod, "\t"); _builder.newLineIfNotEmpty(); _builder.append("\t"); _builder.append("public static final String CONTENT_TYPE ="); _builder.newLine(); _builder.append("\t "); _builder.append("\"vnd.android.cursor.dir/vnd."); DatabaseBlock _database_2 = model.getDatabase(); String _name = _database_2.getName(); String _lowerCase = _name.toLowerCase(); _builder.append(_lowerCase, "\t "); _builder.append("."); ContentUri _uri_1 = action.getUri(); String _type_1 = _uri_1.getType(); _builder.append(_type_1, "\t "); _builder.append("\";"); _builder.newLineIfNotEmpty(); _builder.append("}"); _builder.newLine(); _builder.newLine(); } } } } return _builder; } public CharSequence createActionUriBuilderMethod(final ActionStatement action) { StringConcatenation _builder = new StringConcatenation(); _builder.append("public static Uri build"); String _name = action.getName(); String _pascalize = Strings.pascalize(_name); _builder.append(_pascalize, ""); _builder.append("Uri("); ContentUri _uri = action.getUri(); String _methodArgs = this.toMethodArgs(_uri); _builder.append(_methodArgs, ""); _builder.append(") {"); _builder.newLineIfNotEmpty(); _builder.append("\t"); _builder.append("return BASE_CONTENT_URI"); _builder.newLine(); _builder.append("\t\t"); _builder.append(".buildUpon()"); _builder.newLine(); _builder.append("\t\t"); _builder.append(".appendPath(\""); ContentUri _uri_1 = action.getUri(); String _type = _uri_1.getType(); _builder.append(_type, "\t\t"); _builder.append("\")"); _builder.newLineIfNotEmpty(); { ContentUri _uri_2 = action.getUri(); EList<ContentUriSegment> _segments = _uri_2.getSegments(); for(final ContentUriSegment seg : _segments) { { if ((seg instanceof ContentUriParamSegment)) { { boolean _isNum = ((ContentUriParamSegment) seg).isNum(); if (_isNum) { _builder.append("\t\t"); _builder.append(".appendPath(String.valueOf("); String _name_1 = ((ContentUriParamSegment)seg).getName(); String _camelize = Strings.camelize(_name_1); _builder.append(_camelize, "\t\t"); _builder.append("))"); _builder.newLineIfNotEmpty(); } else { _builder.append("\t\t"); _builder.append(".appendPath("); String _name_2 = ((ContentUriParamSegment)seg).getName(); String _camelize_1 = Strings.camelize(_name_2); _builder.append(_camelize_1, "\t\t"); _builder.append(")"); _builder.newLineIfNotEmpty(); } } } else { _builder.append("\t\t"); _builder.append(".appendPath(\""); String _name_3 = seg.getName(); _builder.append(_name_3, "\t\t"); _builder.append("\")"); _builder.newLineIfNotEmpty(); } } } } _builder.append("\t\t"); _builder.append(".build();"); _builder.newLine(); _builder.append("}"); _builder.newLine(); _builder.newLine(); return _builder; } /** * Find all actions associated to the given definition, * actions are associated to the definition via the first * part of an action uri, for instance /recipes/a/b/c is * associated to recipes */ public Iterable<ActionStatement> findActionsForDefinition(final Model model, final String defName) { DatabaseBlock _database = model.getDatabase(); ConfigBlock _config = _database.getConfig(); boolean _equals = Objects.equal(_config, null); if (_equals) { return new ArrayList<ActionStatement>(); } DatabaseBlock _database_1 = model.getDatabase(); ConfigBlock _config_1 = _database_1.getConfig(); EList<ConfigurationStatement> _statements = _config_1.getStatements(); Iterable<ActionStatement> _filter = Iterables.<ActionStatement>filter(_statements, ActionStatement.class); final Function1<ActionStatement, Boolean> _function = new Function1<ActionStatement, Boolean>() { public Boolean apply(final ActionStatement action) { ContentUri _uri = action.getUri(); String _type = _uri.getType(); return Boolean.valueOf(_type.equals(defName)); } }; return IterableExtensions.<ActionStatement>filter(_filter, _function); } public String toMethodArgs(final ContentUri uri) { EList<ContentUriSegment> _segments = uri.getSegments(); Iterable<ContentUriParamSegment> _filter = Iterables.<ContentUriParamSegment>filter(_segments, ContentUriParamSegment.class); final Function1<ContentUriParamSegment, CharSequence> _function = new Function1<ContentUriParamSegment, CharSequence>() { public CharSequence apply(final ContentUriParamSegment seg) { boolean _isNum = seg.isNum(); if (_isNum) { String _name = seg.getName(); String _camelize = Strings.camelize(_name); return ("long " + _camelize); } else { String _name_1 = seg.getName(); String _camelize_1 = Strings.camelize(_name_1); return ("String " + _camelize_1); } } }; return IterableExtensions.<ContentUriParamSegment>join(_filter, ", ", _function); } public boolean hasMethodArgs(final ContentUri uri) { EList<ContentUriSegment> _segments = uri.getSegments(); Iterable<ContentUriParamSegment> _filter = Iterables.<ContentUriParamSegment>filter(_segments, ContentUriParamSegment.class); int _size = IterableExtensions.size(_filter); return (_size > 0); } public CharSequence generateContractItem(final Model model, final SqliteDatabaseSnapshot snapshot, final TableDefinition stmt) { StringConcatenation _builder = new StringConcatenation(); _builder.append("/**"); _builder.newLine(); _builder.append(" "); _builder.append("* <p>Column definitions and helper methods to work with the "); String _name = stmt.getName(); String _pascalize = Strings.pascalize(_name); _builder.append(_pascalize, " "); _builder.append(".</p>"); _builder.newLineIfNotEmpty(); _builder.append(" "); _builder.append("*/"); _builder.newLine(); _builder.append("public static class "); String _name_1 = stmt.getName(); String _pascalize_1 = Strings.pascalize(_name_1); _builder.append(_pascalize_1, ""); _builder.append(" implements "); String _name_2 = stmt.getName(); String _pascalize_2 = Strings.pascalize(_name_2); _builder.append(_pascalize_2, ""); _builder.append("Columns"); { boolean _hasAndroidPrimaryKey = this.hasAndroidPrimaryKey(stmt); if (_hasAndroidPrimaryKey) { _builder.append(", BaseColumns"); } } _builder.append(" {"); _builder.newLineIfNotEmpty(); _builder.append(" "); _builder.append("public static final Uri CONTENT_URI = "); _builder.newLine(); _builder.append("\t\t\t"); _builder.append("BASE_CONTENT_URI.buildUpon().appendPath(\""); String _name_3 = stmt.getName(); _builder.append(_name_3, "\t\t\t"); _builder.append("\").build();"); _builder.newLineIfNotEmpty(); _builder.newLine(); _builder.append("\t"); _builder.append("/**"); _builder.newLine(); _builder.append("\t "); _builder.append("* <p>The content type for a cursor that contains many "); String _name_4 = stmt.getName(); String _pascalize_3 = Strings.pascalize(_name_4); _builder.append(_pascalize_3, "\t "); _builder.append(" rows.</p>"); _builder.newLineIfNotEmpty(); _builder.append("\t "); _builder.append("*/"); _builder.newLine(); _builder.append(" "); _builder.append("public static final String CONTENT_TYPE ="); _builder.newLine(); _builder.append(" "); _builder.append("\"vnd.android.cursor.dir/vnd."); DatabaseBlock _database = model.getDatabase(); String _name_5 = _database.getName(); String _lowerCase = _name_5.toLowerCase(); _builder.append(_lowerCase, " "); _builder.append("."); String _name_6 = stmt.getName(); _builder.append(_name_6, " "); _builder.append("\";"); _builder.newLineIfNotEmpty(); _builder.newLine(); { boolean _hasAndroidPrimaryKey_1 = this.hasAndroidPrimaryKey(stmt); if (_hasAndroidPrimaryKey_1) { _builder.append("\t"); _builder.append("/**"); _builder.newLine(); _builder.append("\t"); _builder.append(" "); _builder.append("* <p>The content type for a cursor that contains a single "); String _name_7 = stmt.getName(); String _pascalize_4 = Strings.pascalize(_name_7); _builder.append(_pascalize_4, "\t "); _builder.append(" row.</p>"); _builder.newLineIfNotEmpty(); _builder.append("\t"); _builder.append(" "); _builder.append("*/"); _builder.newLine(); _builder.append("\t"); _builder.append("public static final String ITEM_CONTENT_TYPE ="); _builder.newLine(); _builder.append("\t"); _builder.append("\t"); _builder.append("\"vnd.android.cursor.item/vnd."); DatabaseBlock _database_1 = model.getDatabase(); String _name_8 = _database_1.getName(); String _lowerCase_1 = _name_8.toLowerCase(); _builder.append(_lowerCase_1, "\t\t"); _builder.append("."); String _name_9 = stmt.getName(); _builder.append(_name_9, "\t\t"); _builder.append("\";"); _builder.newLineIfNotEmpty(); } } _builder.newLine(); _builder.append("\t"); _builder.append("/**"); _builder.newLine(); _builder.append("\t "); _builder.append("* <p>Builds a Uri with appended id for a row in "); String _name_10 = stmt.getName(); String _pascalize_5 = Strings.pascalize(_name_10); _builder.append(_pascalize_5, "\t "); _builder.append(", "); _builder.newLineIfNotEmpty(); _builder.append("\t "); _builder.append("* eg:- content://"); String _packageName = model.getPackageName(); _builder.append(_packageName, "\t "); _builder.append("."); DatabaseBlock _database_2 = model.getDatabase(); String _name_11 = _database_2.getName(); String _lowerCase_2 = _name_11.toLowerCase(); _builder.append(_lowerCase_2, "\t "); _builder.append("/"); String _name_12 = stmt.getName(); String _lowerCase_3 = _name_12.toLowerCase(); _builder.append(_lowerCase_3, "\t "); _builder.append("/123.</p>"); _builder.newLineIfNotEmpty(); _builder.append("\t "); _builder.append("*/"); _builder.newLine(); _builder.append(" "); _builder.append("public static Uri buildUriWithId(long id) {"); _builder.newLine(); _builder.append(" "); _builder.append("return CONTENT_URI.buildUpon().appendPath(String.valueOf(id)).build();"); _builder.newLine(); _builder.append(" "); _builder.append("}"); _builder.newLine(); _builder.append(" "); String _name_13 = stmt.getName(); Iterable<ActionStatement> actions = this.findActionsForDefinition(model, _name_13); _builder.newLineIfNotEmpty(); { boolean _notEquals = (!Objects.equal(actions, null)); if (_notEquals) { { for(final ActionStatement action : actions) { _builder.append("\t"); CharSequence _createActionUriBuilderMethod = this.createActionUriBuilderMethod(action); _builder.append(_createActionUriBuilderMethod, "\t"); _builder.newLineIfNotEmpty(); _builder.append("\t"); _builder.newLine(); } } } } _builder.append("\t"); _builder.append("public static int delete() {"); _builder.newLine(); _builder.append("\t\t"); _builder.append("return Mechanoid.getContentResolver().delete("); String _name_14 = stmt.getName(); String _pascalize_6 = Strings.pascalize(_name_14); _builder.append(_pascalize_6, "\t\t"); _builder.append(".CONTENT_URI, null, null);"); _builder.newLineIfNotEmpty(); _builder.append("\t"); _builder.append("}"); _builder.newLine(); _builder.append("\t"); _builder.newLine(); _builder.append("\t"); _builder.append("public static int delete(String where, String[] selectionArgs) {"); _builder.newLine(); _builder.append("\t\t"); _builder.append("return Mechanoid.getContentResolver().delete("); String _name_15 = stmt.getName(); String _pascalize_7 = Strings.pascalize(_name_15); _builder.append(_pascalize_7, "\t\t"); _builder.append(".CONTENT_URI, where, selectionArgs);"); _builder.newLineIfNotEmpty(); _builder.append("\t"); _builder.append("}"); _builder.newLine(); _builder.append("\t"); _builder.newLine(); _builder.append("\t"); _builder.append("/**"); _builder.newLine(); _builder.append("\t "); _builder.append("* <p>Create a new Builder for "); String _name_16 = stmt.getName(); String _pascalize_8 = Strings.pascalize(_name_16); _builder.append(_pascalize_8, "\t "); _builder.append("</p>"); _builder.newLineIfNotEmpty(); _builder.append("\t "); _builder.append("*/"); _builder.newLine(); _builder.append("\t"); _builder.append("public static Builder newBuilder() {"); _builder.newLine(); _builder.append("\t\t"); _builder.append("return new Builder();"); _builder.newLine(); _builder.append("\t"); _builder.append("}"); _builder.newLine(); _builder.append("\t"); _builder.newLine(); _builder.append("\t"); _builder.append("/**"); _builder.newLine(); _builder.append("\t "); _builder.append("* <p>Build and execute insert or update statements for "); String _name_17 = stmt.getName(); String _pascalize_9 = Strings.pascalize(_name_17); _builder.append(_pascalize_9, "\t "); _builder.append(".</p>"); _builder.newLineIfNotEmpty(); _builder.append("\t "); _builder.append("*"); _builder.newLine(); _builder.append("\t "); _builder.append("* <p>Use {@link "); String _name_18 = stmt.getName(); String _pascalize_10 = Strings.pascalize(_name_18); _builder.append(_pascalize_10, "\t "); _builder.append("#newBuilder()} to create new builder</p>"); _builder.newLineIfNotEmpty(); _builder.append("\t "); _builder.append("*/"); _builder.newLine(); _builder.append("\t"); _builder.append("public static class Builder extends AbstractValuesBuilder {"); _builder.newLine(); _builder.append("\t\t"); _builder.append("private Builder() {"); _builder.newLine(); _builder.append("\t\t\t"); _builder.append("super(Mechanoid.getApplicationContext(), "); String _name_19 = stmt.getName(); String _pascalize_11 = Strings.pascalize(_name_19); _builder.append(_pascalize_11, "\t\t\t"); _builder.append(".CONTENT_URI);"); _builder.newLineIfNotEmpty(); _builder.append("\t\t"); _builder.append("}"); _builder.newLine(); _builder.append("\t\t"); _builder.newLine(); _builder.append("\t\t"); CharSequence _generateBuilderSetters = this.generateBuilderSetters(stmt); _builder.append(_generateBuilderSetters, "\t\t"); _builder.newLineIfNotEmpty(); _builder.append("\t"); _builder.append("}"); _builder.newLine(); _builder.append("\t"); _builder.newLine(); _builder.append("\t"); _builder.append("static final Set<Uri> VIEW_URIS;"); _builder.newLine(); _builder.append("\t"); _builder.newLine(); _builder.append("\t"); _builder.append("static {"); _builder.newLine(); _builder.append("\t\t"); _builder.append("HashSet<Uri> viewUris = new HashSet<Uri>();"); _builder.newLine(); _builder.newLine(); { HashSet<CreateViewStatement> _allViewsReferencingTable = ModelUtil.getAllViewsReferencingTable(snapshot, stmt); final Function1<CreateViewStatement, String> _function = new Function1<CreateViewStatement, String>() { public String apply(final CreateViewStatement x) { return x.getName(); } }; List<CreateViewStatement> _sortBy = IterableExtensions.<CreateViewStatement, String>sortBy(_allViewsReferencingTable, _function); for(final CreateViewStatement ref : _sortBy) { _builder.append("\t\t"); _builder.append("viewUris.add("); String _name_20 = ref.getName(); String _pascalize_12 = Strings.pascalize(_name_20); _builder.append(_pascalize_12, "\t\t"); _builder.append(".CONTENT_URI);"); _builder.newLineIfNotEmpty(); } } { HashSet<CreateViewStatement> _allViewsInConfigInitReferencingTable = ModelUtil.getAllViewsInConfigInitReferencingTable(model, stmt); final Function1<CreateViewStatement, String> _function_1 = new Function1<CreateViewStatement, String>() { public String apply(final CreateViewStatement x) { return x.getName(); } }; List<CreateViewStatement> _sortBy_1 = IterableExtensions.<CreateViewStatement, String>sortBy(_allViewsInConfigInitReferencingTable, _function_1); for(final CreateViewStatement ref_1 : _sortBy_1) { _builder.append("\t\t"); _builder.append("viewUris.add("); String _name_21 = ref_1.getName(); String _pascalize_13 = Strings.pascalize(_name_21); _builder.append(_pascalize_13, "\t\t"); _builder.append(".CONTENT_URI);"); _builder.newLineIfNotEmpty(); } } _builder.append("\t\t"); _builder.newLine(); _builder.append("\t\t"); _builder.append("VIEW_URIS = Collections.unmodifiableSet(viewUris);"); _builder.newLine(); _builder.append("\t"); _builder.append("}"); _builder.newLine(); _builder.append("}"); _builder.newLine(); return _builder; } protected CharSequence _generateBuilderSetters(final CreateTableStatement stmt) { StringConcatenation _builder = new StringConcatenation(); { EList<ColumnSource> _columnDefs = stmt.getColumnDefs(); final Function1<ColumnSource, Boolean> _function = new Function1<ColumnSource, Boolean>() { public Boolean apply(final ColumnSource it) { String _name = it.getName(); boolean _equals = _name.equals("_id"); return Boolean.valueOf((!_equals)); } }; Iterable<ColumnSource> _filter = IterableExtensions.<ColumnSource>filter(_columnDefs, _function); for(final ColumnSource item : _filter) { ColumnDef col = ((ColumnDef) item); _builder.newLineIfNotEmpty(); _builder.append("public Builder set"); String _name = col.getName(); String _pascalize = Strings.pascalize(_name); _builder.append(_pascalize, ""); _builder.append("("); ColumnType _type = col.getType(); String _javaTypeName = ModelUtil.toJavaTypeName(_type); _builder.append(_javaTypeName, ""); _builder.append(" value) {"); _builder.newLineIfNotEmpty(); _builder.append("\t"); _builder.append("mValues.put("); String _name_1 = stmt.getName(); String _pascalize_1 = Strings.pascalize(_name_1); _builder.append(_pascalize_1, "\t"); _builder.append("."); String _name_2 = col.getName(); String _underscore = Strings.underscore(_name_2); String _upperCase = _underscore.toUpperCase(); _builder.append(_upperCase, "\t"); _builder.append(", value);"); _builder.newLineIfNotEmpty(); _builder.append("\t"); _builder.append("return this;"); _builder.newLine(); _builder.append("}"); _builder.newLine(); } } return _builder; } protected CharSequence _generateBuilderSetters(final CreateViewStatement stmt) { StringConcatenation _builder = new StringConcatenation(); ArrayList<ColumnSource> cols = ModelUtil.getViewResultColumns(stmt); _builder.newLineIfNotEmpty(); { final Function1<ColumnSource, Boolean> _function = new Function1<ColumnSource, Boolean>() { public Boolean apply(final ColumnSource it) { String _name = it.getName(); boolean _equals = _name.equals("_id"); return Boolean.valueOf((!_equals)); } }; Iterable<ColumnSource> _filter = IterableExtensions.<ColumnSource>filter(cols, _function); for(final ColumnSource item : _filter) { ResultColumn col = ((ResultColumn) item); _builder.newLineIfNotEmpty(); ColumnType type = ModelUtil.getInferredColumnType(col); _builder.newLineIfNotEmpty(); _builder.append("public Builder set"); String _name = col.getName(); String _pascalize = Strings.pascalize(_name); _builder.append(_pascalize, ""); _builder.append("("); String _javaTypeName = ModelUtil.toJavaTypeName(type); _builder.append(_javaTypeName, ""); _builder.append(" value) {"); _builder.newLineIfNotEmpty(); _builder.append("\t"); _builder.append("mValues.put("); String _name_1 = stmt.getName(); String _pascalize_1 = Strings.pascalize(_name_1); _builder.append(_pascalize_1, "\t"); _builder.append("."); String _name_2 = col.getName(); String _underscore = Strings.underscore(_name_2); String _upperCase = _underscore.toUpperCase(); _builder.append(_upperCase, "\t"); _builder.append(", value);"); _builder.newLineIfNotEmpty(); _builder.append("\t"); _builder.append("return this;"); _builder.newLine(); _builder.append("}"); _builder.newLine(); } } return _builder; } protected String _getName(final CreateTableStatement stmt) { return stmt.getName(); } protected String _getName(final CreateViewStatement stmt) { return stmt.getName(); } protected boolean _hasAndroidPrimaryKey(final CreateTableStatement stmt) { return ModelUtil.hasAndroidPrimaryKey(stmt); } protected boolean _hasAndroidPrimaryKey(final CreateViewStatement stmt) { return ModelUtil.hasAndroidPrimaryKey(stmt); } public CharSequence createMethodArgsFromColumns(final CreateTableStatement tbl) { StringConcatenation _builder = new StringConcatenation(); { EList<ColumnSource> _columnDefs = tbl.getColumnDefs(); final Function1<ColumnSource, Boolean> _function = new Function1<ColumnSource, Boolean>() { public Boolean apply(final ColumnSource it) { String _name = it.getName(); boolean _equals = _name.equals("_id"); return Boolean.valueOf((!_equals)); } }; Iterable<ColumnSource> _filter = IterableExtensions.<ColumnSource>filter(_columnDefs, _function); boolean _hasElements = false; for(final ColumnSource item : _filter) { if (!_hasElements) { _hasElements = true; } else { _builder.appendImmediate(", ", ""); } ColumnDef col = ((ColumnDef) item); ColumnType _type = col.getType(); String _javaTypeName = ModelUtil.toJavaTypeName(_type); _builder.append(_javaTypeName, ""); _builder.append(" "); String _name = col.getName(); String _camelize = Strings.camelize(_name); _builder.append(_camelize, ""); } } return _builder; } public CharSequence generateInterfaceMemberForResultColumn(final ColumnSource expr) { StringConcatenation _builder = new StringConcatenation(); { boolean _and = false; boolean _and_1 = false; String _name = expr.getName(); boolean _notEquals = (!Objects.equal(_name, null)); if (!_notEquals) { _and_1 = false; } else { String _name_1 = expr.getName(); boolean _equals = _name_1.equals(""); boolean _not = (!_equals); _and_1 = _not; } if (!_and_1) { _and = false; } else { String _name_2 = expr.getName(); boolean _equals_1 = _name_2.equals("_id"); boolean _not_1 = (!_equals_1); _and = _not_1; } if (_and) { _builder.append("String "); String _name_3 = expr.getName(); String _underscore = Strings.underscore(_name_3); String _upperCase = _underscore.toUpperCase(); _builder.append(_upperCase, ""); _builder.append(" = \""); String _name_4 = expr.getName(); _builder.append(_name_4, ""); _builder.append("\";"); _builder.newLineIfNotEmpty(); } } return _builder; } public CharSequence generateBuilderSetters(final TableDefinition stmt) { if (stmt instanceof CreateTableStatement) { return _generateBuilderSetters((CreateTableStatement)stmt); } else if (stmt instanceof CreateViewStatement) { return _generateBuilderSetters((CreateViewStatement)stmt); } else { throw new IllegalArgumentException("Unhandled parameter types: " + Arrays.<Object>asList(stmt).toString()); } } public String getName(final TableDefinition stmt) { if (stmt instanceof CreateTableStatement) { return _getName((CreateTableStatement)stmt); } else if (stmt instanceof CreateViewStatement) { return _getName((CreateViewStatement)stmt); } else { throw new IllegalArgumentException("Unhandled parameter types: " + Arrays.<Object>asList(stmt).toString()); } } public boolean hasAndroidPrimaryKey(final TableDefinition stmt) { if (stmt instanceof CreateTableStatement) { return _hasAndroidPrimaryKey((CreateTableStatement)stmt); } else if (stmt instanceof CreateViewStatement) { return _hasAndroidPrimaryKey((CreateViewStatement)stmt); } else { throw new IllegalArgumentException("Unhandled parameter types: " + Arrays.<Object>asList(stmt).toString()); } } }