package com.robotoworks.mechanoid.db.generator; import com.google.inject.Inject; import com.robotoworks.mechanoid.db.sqliteModel.CreateIndexStatement; import com.robotoworks.mechanoid.db.sqliteModel.CreateTableStatement; import com.robotoworks.mechanoid.db.sqliteModel.CreateTriggerStatement; import com.robotoworks.mechanoid.db.sqliteModel.CreateViewStatement; import com.robotoworks.mechanoid.db.sqliteModel.DDLStatement; import java.util.Collection; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.eclipse.xtend2.lib.StringConcatenation; import org.eclipse.xtext.resource.SaveOptions; import org.eclipse.xtext.serializer.ISerializer; import org.eclipse.xtext.xbase.lib.Extension; @SuppressWarnings("all") public class SqliteDatabaseStatementGenerator { @Inject @Extension private ISerializer _iSerializer; private SaveOptions saveOptions; private final Pattern stripCommentsExpr = Pattern.compile("\\/\\/[^\\r\\n]+|\\/\\*.*?\\*\\/", Pattern.DOTALL); public SqliteDatabaseStatementGenerator() { SaveOptions.Builder _newBuilder = SaveOptions.newBuilder(); SaveOptions.Builder _noValidation = _newBuilder.noValidation(); SaveOptions _options = _noValidation.getOptions(); this.saveOptions = _options; } public CharSequence generateStatements(final Collection<DDLStatement> statements) { StringConcatenation _builder = new StringConcatenation(); { for(final DDLStatement stmt : statements) { CharSequence _generateStatement = this.generateStatement(stmt); _builder.append(_generateStatement, ""); _builder.newLineIfNotEmpty(); } } return _builder; } public CharSequence generateTableStatements(final Collection<CreateTableStatement> statements) { StringConcatenation _builder = new StringConcatenation(); { for(final CreateTableStatement stmt : statements) { CharSequence _generateStatement = this.generateStatement(stmt); _builder.append(_generateStatement, ""); _builder.newLineIfNotEmpty(); } } return _builder; } public CharSequence generateViewStatements(final Collection<CreateViewStatement> statements) { StringConcatenation _builder = new StringConcatenation(); { for(final CreateViewStatement stmt : statements) { CharSequence _generateStatement = this.generateStatement(stmt); _builder.append(_generateStatement, ""); _builder.newLineIfNotEmpty(); } } return _builder; } public CharSequence generateTriggerStatements(final Collection<CreateTriggerStatement> statements) { StringConcatenation _builder = new StringConcatenation(); { for(final CreateTriggerStatement stmt : statements) { CharSequence _generateStatement = this.generateStatement(stmt); _builder.append(_generateStatement, ""); _builder.newLineIfNotEmpty(); } } return _builder; } public CharSequence generateIndexStatements(final Collection<CreateIndexStatement> statements) { StringConcatenation _builder = new StringConcatenation(); { for(final CreateIndexStatement stmt : statements) { CharSequence _generateStatement = this.generateStatement(stmt); _builder.append(_generateStatement, ""); _builder.newLineIfNotEmpty(); } } return _builder; } public CharSequence generateStatement(final DDLStatement stmt) { StringConcatenation _builder = new StringConcatenation(); _builder.append("db.execSQL("); _builder.newLine(); { String _serialize = this._iSerializer.serialize(stmt, this.saveOptions); String _stripComments = this.stripComments(_serialize); String _trim = _stripComments.trim(); String[] _split = _trim.split("\\r?\\n"); boolean _hasElements = false; for(final String line : _split) { if (!_hasElements) { _hasElements = true; } else { _builder.appendImmediate(" +", "\t"); } _builder.append("\t"); _builder.append("\""); String _trim_1 = line.trim(); String _replaceAll = _trim_1.replaceAll("\\\"", "\\\\\""); _builder.append(_replaceAll, "\t"); _builder.append(" \""); _builder.newLineIfNotEmpty(); } } _builder.append(");\t"); _builder.newLine(); return _builder; } public String stripComments(final String s) { Matcher _matcher = this.stripCommentsExpr.matcher(s); return _matcher.replaceAll(""); } }