/** * */ package org.commcare.android.db.legacy; import java.util.Collection; import java.util.HashSet; import java.util.Vector; import org.commcare.android.database.DbUtil; import org.commcare.android.database.EncryptedModel; import org.javarosa.core.services.storage.IMetaData; import org.javarosa.core.services.storage.Persistable; import android.util.Pair; /** * @author ctsims * */ public class LegacyTableBuilder { private String name; private Vector<String> cols; private Vector<String> rawCols; public LegacyTableBuilder(String name) { this.name = name; cols = new Vector<String>(); rawCols = new Vector<String>(); } public void addData(Persistable p) { cols.add(DbUtil.ID_COL + " INTEGER PRIMARY KEY"); rawCols.add(DbUtil.ID_COL); if(p instanceof IMetaData) { String[] keys = ((IMetaData)p).getMetaDataFields(); for(String key : keys) { String columnName = scrubName(key); rawCols.add(columnName); String columnDef; if(p instanceof EncryptedModel && ((EncryptedModel)p).isEncrypted(key)) { columnDef = columnName + " BLOB"; } else { columnDef = columnName; } //Modifiers if(unique.contains(columnName)) { columnDef += " UNIQUE"; } cols.add(columnDef); } } cols.add(DbUtil.DATA_COL + " BLOB"); rawCols.add(DbUtil.DATA_COL); } HashSet<String> unique = new HashSet<String>(); public void setUnique(String columnName) { unique.add(scrubName(columnName)); } public String getTableCreateString() { String built = "CREATE TABLE " + scrubName(name) + " ("; for(int i = 0 ; i < cols.size() ; ++i) { built += cols.elementAt(i); if(i < cols.size() - 1) { built += ","; } } built += ");"; return built; } public static String scrubName(String input) { //Scrub return input.replace("-", "_"); } public static Pair<String, String[]> sqlList(Collection<Integer> input) { //I want list comprehensions so bad right now. String ret = "("; for(int i : input) { ret += "?" + ","; } String[] array = new String[input.size()]; int count = 0 ; for(Integer i : input) { array[count++] = String.valueOf(i); } return new Pair<String, String[]>(ret.substring(0, ret.length()-1) + ")", array); } public String getColumns() { String columns = ""; for(int i = 0 ; i < rawCols.size() ; ++i) { columns += rawCols.elementAt(i); if(i < rawCols.size() - 1) { columns += ","; } } return columns; } }