Skip to content

Commit

Permalink
DataBase refactoring
Browse files Browse the repository at this point in the history
  • Loading branch information
wizmer committed Jun 19, 2016
1 parent 75496fc commit d244b12
Show file tree
Hide file tree
Showing 20 changed files with 379 additions and 195 deletions.
Expand Up @@ -172,7 +172,7 @@ private void createNewNode(ContentResolver resolver){
public void onOKPressed(){
ContentResolver resolver = getContext().getContentResolver();
String payload = "";
for(int i = 0;i<=node.level;++i) payload += ' ';

payload+=content.getText().toString();

node.name = title.getText().toString();
Expand Down
Expand Up @@ -74,7 +74,7 @@ public void onActivityResult(int requestCode, int resultCode, Intent intent) {

OrgDatabase db = OrgDatabase.getInstance(this);
OrgFileParser parser = new OrgFileParser(db, this);
parser.parse(new OrgFile(filename, name, checksum), reader, this);
parser.parse(new OrgFile(filename, name), reader, this);
break;
}
finish();
Expand Down
192 changes: 106 additions & 86 deletions MobileOrg/src/main/java/com/matburt/mobileorg2/OrgData/OrgDatabase.java
Expand Up @@ -5,9 +5,12 @@
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.database.sqlite.SQLiteStatement;
import android.util.Log;

import com.matburt.mobileorg2.OrgData.OrgContract.OrgData;

import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.HashMap;

public class OrgDatabase extends SQLiteOpenHelper {
Expand All @@ -21,22 +24,74 @@ public class OrgDatabase extends SQLiteOpenHelper {
private int orgdata_priorityColumn;
private int orgdata_parentidColumn;
private int orgdata_fileidColumn;
private int orgdata_levelColumn;
private int orgdata_positionColumn;
private int orgdata_levelColumn;
private int orgdata_positionColumn;

private InsertHelper orgdataInsertHelper;
private SQLiteStatement addPayloadStatement;
private SQLiteStatement addTimestampsStatement;

public interface Tables {
String EDITS = "edits";
String FILES = "files";
String PRIORITIES = "priorities";
String TAGS = "tags";
String TODOS = "todos";
String ORGDATA = "orgdata";



public interface PrioritiesTable{
String tableName = "priorities";
String[] id = {"_id", "integer primary key autoincrement"};
String[] name = {"name", "text"};
}

public interface FilesTable{
String tableName = "files";
String[] id = {"_id", "integer primary key autoincrement"};
String[] name = {"name", "text"};
String[] node_id = {"node_id", "integer"};
String[] filename = {"filename", "text"};
String[] comment = {"comment", "text)"};
}


public interface TodoTable{
String tableName = "todos";
String[] id = {"_id", "integer primary key autoincrement"};
String[] name = {"name", "text"};
String[] todogroup = {"todogroup", "integer"};
String[] isdone = {"isdone", "integer", "default 0"};
String[] todoConstrain = {"UNIQUE(todogroup, name) ON CONFLICT IGNORE"};
}

public interface TagsTable{
String tableName = "files";
String[] id = {"_id", "integer primary key autoincrement"};
String[] name = {"name", "text"};
String[] taggroup = {"taggroup", "integer"};
}

public interface EditsTable{
String tableName = "edits";
String[] id = {"_id", "integer primary key autoincrement"};
String[] type = {"type", "text"};
String[] title = {"title", "text"};
String[] data_id = {"data_id", "integer"};
String[] old_value = {"old_value", "text"};
String[] new_value = {"new_value", "text"};
String[] changed = {"changed", "integer)"};
}

public interface OrgDataTable{
String tableName = "orgdata";
String[] id = {"_id", "integer primary key autoincrement"};
String[] name = {"name", "text"};
String[] parent_id = {"parent_id", "integer", "default -1"};
String[] file_id = {"file_id", "integer"};
String[] level = {"level", "integer", "default 0"};
String[] priority = {"priority", "text"};
String[] todo = {"todo", "text"};
String[] tags = {"tags", "text"};
String[] tags_inherited = {"tags_inherited", "text"};
String[] payload = {"payload", "text"};
String[] position = {"position", "integer"};
String[] scheduled = {"scheduled", "integer", "default -1"};
String[] deadline = {"deadline", "integer", "default -1"};
}
private static OrgDatabase mInstance = null;

public static OrgDatabase getInstance(Context context){
Expand All @@ -47,84 +102,48 @@ public static OrgDatabase getInstance(Context context){
private OrgDatabase(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}

@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE IF NOT EXISTS files("
+ "_id integer primary key autoincrement,"
+ "node_id integer,"
+ "filename text,"
+ "name text,"
+ "checksum text)");
db.execSQL("CREATE TABLE IF NOT EXISTS todos("
+ "_id integer primary key autoincrement,"
+ "todogroup integer,"
+ "name text,"
+ "isdone integer default 0,"
+ "UNIQUE(todogroup, name) ON CONFLICT IGNORE)");
db.execSQL("CREATE TABLE IF NOT EXISTS priorities("
+ "_id integer primary key autoincrement,"
+ "name text)");
db.execSQL("CREATE TABLE IF NOT EXISTS tags("
+ "_id integer primary key autoincrement,"
+ "taggroup integer,"
+ "name text)");
db.execSQL("CREATE TABLE IF NOT EXISTS edits("
+ "_id integer primary key autoincrement,"
+ "type text,"
+ "title text,"
+ "data_id integer,"
+ "old_value text,"
+ "new_value text,"
+ "changed integer)");
db.execSQL("CREATE TABLE IF NOT EXISTS orgdata ("
+ "_id integer primary key autoincrement,"
+ "parent_id integer default -1,"
+ "file_id integer,"
+ "level integer default 0,"
+ "priority text,"
+ "todo text,"
+ "tags text,"
+ "tags_inherited text,"
+ "payload text,"
+ "name text,"
+ "position integer,"
+ "scheduled integer default -1,"
+ "deadline integer default -1)");
Log.v("swag","megaswag : " + new Table<OrgDatabase>().createDB());

}





@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
switch (newVersion) {
case 4:
db.execSQL("DROP TABLE IF EXISTS priorities");
db.execSQL("DROP TABLE IF EXISTS files");
db.execSQL("DROP TABLE IF EXISTS todos");
db.execSQL("DROP TABLE IF EXISTS edits");
db.execSQL("DROP TABLE IF EXISTS orgdata");
break;
case 5:
db.execSQL("alter table orgdata add tags_inherited text");
break;
case 4:
db.execSQL("DROP TABLE IF EXISTS priorities");
db.execSQL("DROP TABLE IF EXISTS files");
db.execSQL("DROP TABLE IF EXISTS todos");
db.execSQL("DROP TABLE IF EXISTS edits");
db.execSQL("DROP TABLE IF EXISTS orgdata");
break;

case 5:
db.execSQL("alter table orgdata add tags_inherited text");
break;
}
onCreate(db);
}

public long fastInsertNode(OrgNode node) {
prepareOrgdataInsert();
orgdataInsertHelper.bind(orgdata_parentidColumn, node.parentId);
orgdataInsertHelper.bind(orgdata_parentidColumn, node.parentId);
orgdataInsertHelper.bind(orgdata_nameColumn, node.name);
orgdataInsertHelper.bind(orgdata_todoColumn, node.todo);
orgdataInsertHelper.bind(orgdata_priorityColumn, node.priority);
orgdataInsertHelper.bind(orgdata_fileidColumn, node.fileId);
orgdataInsertHelper.bind(orgdata_tagsColumn, node.tags);
orgdataInsertHelper.bind(orgdata_tagsInheritedColumn, node.tags_inherited);
orgdataInsertHelper.bind(orgdata_levelColumn, node.level);
orgdataInsertHelper.bind(orgdata_positionColumn, node.position);
orgdataInsertHelper.bind(orgdata_levelColumn, node.level);
orgdataInsertHelper.bind(orgdata_positionColumn, node.position);
return orgdataInsertHelper.execute();
}

public void fastInsertNodePayload(Long id, final String payload, final HashMap<OrgNodeTimeDate.TYPE, Long> timestamps) {
if (addPayloadStatement == null)
addPayloadStatement = getWritableDatabase()
Expand All @@ -137,27 +156,28 @@ public void fastInsertNodePayload(Long id, final String payload, final HashMap<O
addPayloadStatement.execute();
}




private void prepareOrgdataInsert() {
if(this.orgdataInsertHelper == null) {
this.orgdataInsertHelper = new InsertHelper(getWritableDatabase(), Tables.ORGDATA);
this.orgdata_nameColumn = orgdataInsertHelper.getColumnIndex(OrgData.NAME);
this.orgdata_todoColumn = orgdataInsertHelper.getColumnIndex(OrgData.TODO);
this.orgdata_priorityColumn = orgdataInsertHelper.getColumnIndex(OrgData.PRIORITY);
this.orgdata_parentidColumn = orgdataInsertHelper.getColumnIndex(OrgData.PARENT_ID);
this.orgdata_fileidColumn = orgdataInsertHelper.getColumnIndex(OrgData.FILE_ID);
this.orgdata_tagsColumn = orgdataInsertHelper.getColumnIndex(OrgData.TAGS);
this.orgdata_tagsInheritedColumn = orgdataInsertHelper.getColumnIndex(OrgData.TAGS_INHERITED);
this.orgdata_levelColumn = orgdataInsertHelper.getColumnIndex(OrgData.LEVEL);
this.orgdata_positionColumn = orgdataInsertHelper.getColumnIndex(OrgData.POSITION);
}
orgdataInsertHelper.prepareForInsert();
// if(this.orgdataInsertHelper == null) {
// this.orgdataInsertHelper = new InsertHelper(getWritableDatabase(), Tables.ORGDATA);
// this.orgdata_nameColumn = orgdataInsertHelper.getColumnIndex(OrgData.NAME);
// this.orgdata_todoColumn = orgdataInsertHelper.getColumnIndex(OrgData.TODO);
// this.orgdata_priorityColumn = orgdataInsertHelper.getColumnIndex(OrgData.PRIORITY);
// this.orgdata_parentidColumn = orgdataInsertHelper.getColumnIndex(OrgData.PARENT_ID);
// this.orgdata_fileidColumn = orgdataInsertHelper.getColumnIndex(OrgData.FILE_ID);
// this.orgdata_tagsColumn = orgdataInsertHelper.getColumnIndex(OrgData.TAGS);
// this.orgdata_tagsInheritedColumn = orgdataInsertHelper.getColumnIndex(OrgData.TAGS_INHERITED);
// this.orgdata_levelColumn = orgdataInsertHelper.getColumnIndex(OrgData.LEVEL);
// this.orgdata_positionColumn = orgdataInsertHelper.getColumnIndex(OrgData.POSITION);
// }
// orgdataInsertHelper.prepareForInsert();
}

public void beginTransaction() {
getWritableDatabase().beginTransaction();
}

public void endTransaction() {
getWritableDatabase().setTransactionSuccessful();
getWritableDatabase().endTransaction();
Expand Down
Expand Up @@ -2,7 +2,9 @@

import android.content.ContentResolver;
import android.content.Context;
import android.util.Log;

import com.matburt.mobileorg2.util.FileUtils;
import com.matburt.mobileorg2.util.OrgFileNotFoundException;
import com.matburt.mobileorg2.util.OrgNodeNotFoundException;

Expand Down Expand Up @@ -60,7 +62,9 @@ static public void updateFile(OrgNode oldNode, OrgNode newNode, Context context)
OrgNodeTree tree = new OrgNodeTree(root, resolver);
ArrayList<OrgNode> res = OrgNodeTree.getFullNodeArray(tree, true);
for (OrgNode node : res) {
content += node.toString();
Log.v("content","content");
Log.v("content",node.toString());
content += FileUtils.stripLastNewLine(node.toString()) + "\n";
}

file.updateFile(content, context);
Expand Down
Expand Up @@ -121,6 +121,7 @@ public void addFile(Context context) {
SynchronizerManager.getInstance(null, null, null).getSyncher().addFile(filename);
}


/*
Insert a new file node in the database
*/
Expand Down Expand Up @@ -200,6 +201,17 @@ private long removeFileNode(ContentResolver resolver) {
+ Files.FILENAME + "=?", new String[]{name, filename});
}

/**
* Update this file in the DB
* @param resolver
* @param values
* @return
*/
private long updateFileNode(ContentResolver resolver, ContentValues values) {
return resolver.update(Files.buildIdUri(id), values, Files.NAME + "=? AND "
+ Files.FILENAME + "=?", new String[]{name, filename});
}

private long removeFileOrgDataNodes(ContentResolver resolver) {

int total = resolver.delete(OrgData.CONTENT_URI, OrgData.FILE_ID + "=?",
Expand Down
Expand Up @@ -497,7 +497,12 @@ public OrgEdit createParentNewheading(ContentResolver resolver) {
level = tempLevel;
return edit;
}



/**
* Build the the plain text string corresponding to this node
* @return the node in plain text
*/
public String toString() {
StringBuilder result = new StringBuilder();

Expand All @@ -517,12 +522,17 @@ public String toString() {
result.append(" ").append(":" + tags + ":");


if (payload != null && !TextUtils.isEmpty(payload))
result.append("\n").append(payload);
if (payload != null && !TextUtils.isEmpty(payload)){
result.append("\n");
if(level > 0) for(int i = 0;i<level+1; i++) result.append(" ");
result.append(payload.trim());
}

return result.toString();
}



public boolean equals(OrgNode node) {
return name.equals(node.name) && tags.equals(node.tags)
&& priority.equals(node.priority) && todo.equals(node.todo)
Expand Down

0 comments on commit d244b12

Please sign in to comment.