package com.stxnext.management.android.storage.sqlite; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.List; import android.app.Application; import android.database.SQLException; import android.database.sqlite.SQLiteDatabase; import com.google.common.base.Function; import com.google.common.base.Predicate; import com.google.common.base.Strings; import com.google.common.collect.Iterables; import com.google.common.collect.Lists; public class DatabaseSchemaPopulator { private final static String assetFileName = "database_schema"; private final static String updateAssetFileName = "database_updates"; private final Application app; public DatabaseSchemaPopulator(Application app) { this.app = app; } private List<String> getSchema(String scriptFileName) throws IOException { InputStream input = app.getAssets().open(scriptFileName); BufferedReader reader = new BufferedReader(new InputStreamReader(input)); List<String> commands = new ArrayList<String>(); StringBuilder command = new StringBuilder(); String line; while ((line = reader.readLine()) != null) { command.append(line); if (line.contains(";")) { commands.add(command.toString()); command = new StringBuilder(); } } Iterable<String> iterable = Iterables.transform(commands, new Function<String, String>() { @Override public String apply(String input) { return input.trim(); } }); return Lists.newArrayList(Iterables.filter(iterable, new Predicate<String>() { @Override public boolean apply(String input) { if (Strings.isNullOrEmpty(input)) return false; if (input.startsWith("#")) return false; return true; } })); } public void populate(SQLiteDatabase database) throws SQLException, IOException { for (String command : getSchema(assetFileName)) { database.execSQL(command); } } public void update(SQLiteDatabase database, int version) throws SQLException, IOException { for (String command : getSchema(updateAssetFileName + version)) { database.execSQL(command); } } }