/**
* generated by Xtext
*/
package com.robotoworks.mechanoid.db.generator;
import com.google.inject.Inject;
import com.google.inject.Provider;
import com.robotoworks.mechanoid.db.generator.ActiveRecordGenerator;
import com.robotoworks.mechanoid.db.generator.ContentProviderContractGenerator;
import com.robotoworks.mechanoid.db.generator.ContentProviderGenerator;
import com.robotoworks.mechanoid.db.generator.SqliteDatabaseSnapshot;
import com.robotoworks.mechanoid.db.generator.SqliteMigrationGenerator;
import com.robotoworks.mechanoid.db.generator.SqliteOpenHelperGenerator;
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.MigrationBlock;
import com.robotoworks.mechanoid.db.sqliteModel.Model;
import com.robotoworks.mechanoid.db.util.ModelUtil;
import com.robotoworks.mechanoid.generator.MechanoidOutputConfigurationProvider;
import com.robotoworks.mechanoid.text.Strings;
import java.util.Collection;
import java.util.function.Consumer;
import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.xtext.generator.IFileSystemAccess;
import org.eclipse.xtext.generator.IGenerator;
import org.eclipse.xtext.xbase.lib.IterableExtensions;
import org.eclipse.xtext.xbase.lib.Procedures.Procedure2;
@SuppressWarnings("all")
public class SqliteModelGenerator implements IGenerator {
@Inject
private SqliteOpenHelperGenerator mOpenHelperGenerator;
@Inject
private ContentProviderContractGenerator mContentProviderContractGenerator;
@Inject
private Provider<SqliteDatabaseSnapshot.Builder> mDbSnapshotBuilderProvider;
@Inject
private ContentProviderGenerator mContentProviderGenerator;
@Inject
private Provider<SqliteMigrationGenerator> mMigrationGenerator;
@Inject
private ActiveRecordGenerator mActiveRecordGenerator;
public void doGenerate(final Resource resource, final IFileSystemAccess fsa) {
EList<EObject> _contents = resource.getContents();
EObject _head = IterableExtensions.<EObject>head(_contents);
Model model = ((Model) _head);
SqliteDatabaseSnapshot.Builder _get = this.mDbSnapshotBuilderProvider.get();
final SqliteDatabaseSnapshot snapshot = _get.build(model);
String _packageName = model.getPackageName();
DatabaseBlock _database = model.getDatabase();
String _name = _database.getName();
String _pascalize = Strings.pascalize(_name);
String _concat = "Abstract".concat(_pascalize);
String _concat_1 = _concat.concat("OpenHelper");
String _resolveFileName = Strings.resolveFileName(_packageName, _concat_1);
CharSequence _generate = this.mOpenHelperGenerator.generate(model, snapshot);
fsa.generateFile(_resolveFileName, _generate);
String _packageName_1 = model.getPackageName();
DatabaseBlock _database_1 = model.getDatabase();
String _name_1 = _database_1.getName();
String _pascalize_1 = Strings.pascalize(_name_1);
String _concat_2 = _pascalize_1.concat("OpenHelper");
String _resolveFileName_1 = Strings.resolveFileName(_packageName_1, _concat_2);
CharSequence _generateStub = this.mOpenHelperGenerator.generateStub(model, snapshot);
fsa.generateFile(_resolveFileName_1,
MechanoidOutputConfigurationProvider.DEFAULT_STUB_OUTPUT, _generateStub);
String _packageName_2 = model.getPackageName();
DatabaseBlock _database_2 = model.getDatabase();
String _name_2 = _database_2.getName();
String _pascalize_2 = Strings.pascalize(_name_2);
String _concat_3 = _pascalize_2.concat("Contract");
String _resolveFileName_2 = Strings.resolveFileName(_packageName_2, _concat_3);
CharSequence _generate_1 = this.mContentProviderContractGenerator.generate(model, snapshot);
fsa.generateFile(_resolveFileName_2, _generate_1);
String _packageName_3 = model.getPackageName();
DatabaseBlock _database_3 = model.getDatabase();
String _name_3 = _database_3.getName();
String _pascalize_3 = Strings.pascalize(_name_3);
String _concat_4 = "Abstract".concat(_pascalize_3);
String _concat_5 = _concat_4.concat("ContentProvider");
String _resolveFileName_3 = Strings.resolveFileName(_packageName_3, _concat_5);
CharSequence _generate_2 = this.mContentProviderGenerator.generate(model, snapshot);
fsa.generateFile(_resolveFileName_3, _generate_2);
String _packageName_4 = model.getPackageName();
DatabaseBlock _database_4 = model.getDatabase();
String _name_4 = _database_4.getName();
String _pascalize_4 = Strings.pascalize(_name_4);
String _concat_6 = _pascalize_4.concat("ContentProvider");
String _resolveFileName_4 = Strings.resolveFileName(_packageName_4, _concat_6);
CharSequence _generateStub_1 = this.mContentProviderGenerator.generateStub(model, snapshot);
fsa.generateFile(_resolveFileName_4,
MechanoidOutputConfigurationProvider.DEFAULT_STUB_OUTPUT, _generateStub_1);
Collection<CreateTableStatement> _tables = snapshot.getTables();
final Consumer<CreateTableStatement> _function = new Consumer<CreateTableStatement>() {
public void accept(final CreateTableStatement statement) {
SqliteModelGenerator.this.generateActiveRecordEntity(resource, fsa, ((CreateTableStatement) statement));
}
};
_tables.forEach(_function);
Collection<CreateViewStatement> _views = snapshot.getViews();
final Consumer<CreateViewStatement> _function_1 = new Consumer<CreateViewStatement>() {
public void accept(final CreateViewStatement statement) {
SqliteModelGenerator.this.generateActiveRecordEntity(resource, fsa, ((CreateViewStatement) statement));
}
};
_views.forEach(_function_1);
Collection<CreateTableStatement> _configInitTables = ModelUtil.getConfigInitTables(model);
final Consumer<CreateTableStatement> _function_2 = new Consumer<CreateTableStatement>() {
public void accept(final CreateTableStatement statement) {
SqliteModelGenerator.this.generateActiveRecordEntity(resource, fsa, ((CreateTableStatement) statement));
}
};
_configInitTables.forEach(_function_2);
Collection<CreateViewStatement> _configInitViews = ModelUtil.getConfigInitViews(model);
final Consumer<CreateViewStatement> _function_3 = new Consumer<CreateViewStatement>() {
public void accept(final CreateViewStatement statement) {
SqliteModelGenerator.this.generateActiveRecordEntity(resource, fsa, ((CreateViewStatement) statement));
}
};
_configInitViews.forEach(_function_3);
DatabaseBlock _database_5 = model.getDatabase();
EList<MigrationBlock> _migrations = _database_5.getMigrations();
final Procedure2<MigrationBlock, Integer> _function_4 = new Procedure2<MigrationBlock, Integer>() {
public void apply(final MigrationBlock item, final Integer index) {
SqliteModelGenerator.this.generateMigration(resource, fsa, item, ((index).intValue() + 1));
}
};
IterableExtensions.<MigrationBlock>forEach(_migrations, _function_4);
}
public void generateActiveRecordEntity(final Resource resource, final IFileSystemAccess fsa, final CreateTableStatement statement) {
boolean _hasAndroidPrimaryKey = ModelUtil.hasAndroidPrimaryKey(statement);
if (_hasAndroidPrimaryKey) {
EList<EObject> _contents = resource.getContents();
EObject _head = IterableExtensions.<EObject>head(_contents);
Model model = ((Model) _head);
String _packageName = model.getPackageName();
String _name = statement.getName();
String _pascalize = Strings.pascalize(_name);
String _concat = _pascalize.concat("Record");
String genFileName = Strings.resolveFileName(_packageName, _concat);
CharSequence _generate = this.mActiveRecordGenerator.generate(model, statement);
fsa.generateFile(genFileName, _generate);
}
}
public void generateActiveRecordEntity(final Resource resource, final IFileSystemAccess fsa, final CreateViewStatement statement) {
boolean _hasAndroidPrimaryKey = ModelUtil.hasAndroidPrimaryKey(statement);
if (_hasAndroidPrimaryKey) {
EList<EObject> _contents = resource.getContents();
EObject _head = IterableExtensions.<EObject>head(_contents);
Model model = ((Model) _head);
String _packageName = model.getPackageName();
String _name = statement.getName();
String _pascalize = Strings.pascalize(_name);
String _concat = _pascalize.concat("Record");
String genFileName = Strings.resolveFileName(_packageName, _concat);
CharSequence _generate = this.mActiveRecordGenerator.generate(model, statement);
fsa.generateFile(genFileName, _generate);
}
}
public void generateMigration(final Resource resource, final IFileSystemAccess fsa, final MigrationBlock migration, final int version) {
EList<EObject> _contents = resource.getContents();
EObject _head = IterableExtensions.<EObject>head(_contents);
Model model = ((Model) _head);
String _packageName = model.getPackageName();
String _concat = _packageName.concat(".migrations");
DatabaseBlock _database = model.getDatabase();
String _name = _database.getName();
String _pascalize = Strings.pascalize(_name);
String _concat_1 = "Default".concat(_pascalize);
String _concat_2 = _concat_1.concat("MigrationV");
String _valueOf = String.valueOf(version);
String _concat_3 = _concat_2.concat(_valueOf);
String genFileName = Strings.resolveFileName(_concat, _concat_3);
SqliteMigrationGenerator generator = this.mMigrationGenerator.get();
CharSequence _generate = generator.generate(model, migration, version);
fsa.generateFile(genFileName, _generate);
}
}