From 8410d5b55f566ba2c5d69f5b3dad0f33f8a51030 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pierre=20Rossin=C3=A8s?= Date: Thu, 3 Nov 2016 11:07:57 +0100 Subject: [PATCH 1/3] * Add a way to manually initialize the SugarRecord classes list during init --- library/src/main/java/com/orm/SchemaGenerator.java | 8 ++++---- library/src/main/java/com/orm/SugarApp.java | 6 ++++++ library/src/main/java/com/orm/SugarContext.java | 13 ++++++++++--- library/src/main/java/com/orm/SugarDb.java | 12 ++++++++---- 4 files changed, 28 insertions(+), 11 deletions(-) diff --git a/library/src/main/java/com/orm/SchemaGenerator.java b/library/src/main/java/com/orm/SchemaGenerator.java index c25407fc..cbcd7ec1 100644 --- a/library/src/main/java/com/orm/SchemaGenerator.java +++ b/library/src/main/java/com/orm/SchemaGenerator.java @@ -44,8 +44,8 @@ public static SchemaGenerator getInstance() { return new SchemaGenerator(); } - public void createDatabase(SQLiteDatabase sqLiteDatabase) { - List domainClasses = getDomainClasses(); + public void createDatabase(SQLiteDatabase sqLiteDatabase, List modelsClasses) { + List domainClasses = modelsClasses == null ? getDomainClasses() : modelsClasses; for (Class domain : domainClasses) { createTable(domain, sqLiteDatabase); afterTableCreated(domain,sqLiteDatabase); @@ -59,8 +59,8 @@ public void afterTableCreated(Class table, SQLiteDatabase sqLiteDatabase) { } - public void doUpgrade(SQLiteDatabase sqLiteDatabase, int oldVersion, int newVersion) { - List domainClasses = getDomainClasses(); + public void doUpgrade(SQLiteDatabase sqLiteDatabase, int oldVersion, int newVersion, List modelsClasses) { + List domainClasses = modelsClasses == null ? getDomainClasses() : modelsClasses; String sql = "select count(*) from sqlite_master where type='table' and name='%s';"; for (Class domain : domainClasses) { diff --git a/library/src/main/java/com/orm/SugarApp.java b/library/src/main/java/com/orm/SugarApp.java index cab35ca7..b3cb6e4d 100644 --- a/library/src/main/java/com/orm/SugarApp.java +++ b/library/src/main/java/com/orm/SugarApp.java @@ -2,6 +2,8 @@ import android.app.Application; +import java.util.List; + public class SugarApp extends Application { @Override @@ -16,4 +18,8 @@ public void onTerminate() { SugarContext.terminate(); } + public List getModelsClassesList() { + return null; + } + } diff --git a/library/src/main/java/com/orm/SugarContext.java b/library/src/main/java/com/orm/SugarContext.java index 61609986..ca16f9e0 100644 --- a/library/src/main/java/com/orm/SugarContext.java +++ b/library/src/main/java/com/orm/SugarContext.java @@ -5,6 +5,7 @@ import com.orm.util.ContextUtil; import java.util.Collections; +import java.util.List; import java.util.Map; import java.util.WeakHashMap; @@ -15,8 +16,8 @@ public class SugarContext { private SugarDb sugarDb; private Map entitiesMap; - private SugarContext() { - this.sugarDb = SugarDb.getInstance(); + private SugarContext(List modelsClasses) { + this.sugarDb = SugarDb.getInstance(modelsClasses); this.entitiesMap = Collections.synchronizedMap(new WeakHashMap()); } @@ -29,7 +30,13 @@ public static SugarContext getSugarContext() { public static void init(Context context) { ContextUtil.init(context); - instance = new SugarContext(); + instance = new SugarContext(null); + dbConfiguration = null; + } + + public static void init(Context context, List modelsClasses) { + ContextUtil.init(context); + instance = new SugarContext(modelsClasses); dbConfiguration = null; } diff --git a/library/src/main/java/com/orm/SugarDb.java b/library/src/main/java/com/orm/SugarDb.java index bc71ba23..1312d274 100644 --- a/library/src/main/java/com/orm/SugarDb.java +++ b/library/src/main/java/com/orm/SugarDb.java @@ -8,6 +8,8 @@ import com.orm.helper.ManifestHelper; import com.orm.util.SugarCursorFactory; +import java.util.List; + import static com.orm.util.ContextUtil.getContext; import static com.orm.helper.ManifestHelper.getDatabaseVersion; import static com.orm.helper.ManifestHelper.getDbName; @@ -19,15 +21,17 @@ public class SugarDb extends SQLiteOpenHelper { private final SchemaGenerator schemaGenerator; private SQLiteDatabase sqLiteDatabase; private int openedConnections = 0; + private List classes; //Prevent instantiation - private SugarDb() { + private SugarDb(List modelsClasses) { super(getContext(), getDbName(), new SugarCursorFactory(ManifestHelper.isDebugEnabled()), getDatabaseVersion()); + this.classes = modelsClasses; schemaGenerator = SchemaGenerator.getInstance(); } - public static SugarDb getInstance() { - return new SugarDb(); + public static SugarDb getInstance(List modelsClasses) { + return new SugarDb(modelsClasses); } @Override @@ -50,7 +54,7 @@ public void onConfigure(SQLiteDatabase db) { @Override public void onUpgrade(SQLiteDatabase sqLiteDatabase, int oldVersion, int newVersion) { - schemaGenerator.doUpgrade(sqLiteDatabase, oldVersion, newVersion); + schemaGenerator.doUpgrade(sqLiteDatabase, oldVersion, newVersion, classes); } public synchronized SQLiteDatabase getDB() { From 82805d0454e489d692938e997649f15a3e1bcc53 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pierre=20Rossin=C3=A8s?= Date: Thu, 3 Nov 2016 11:23:23 +0100 Subject: [PATCH 2/3] * Fixed build --- library/src/main/java/com/orm/SugarDb.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/library/src/main/java/com/orm/SugarDb.java b/library/src/main/java/com/orm/SugarDb.java index 1312d274..2824adcb 100644 --- a/library/src/main/java/com/orm/SugarDb.java +++ b/library/src/main/java/com/orm/SugarDb.java @@ -36,7 +36,7 @@ public static SugarDb getInstance(List modelsClasses) { @Override public void onCreate(SQLiteDatabase sqLiteDatabase) { - schemaGenerator.createDatabase(sqLiteDatabase); + schemaGenerator.createDatabase(sqLiteDatabase, classes); } @Override From d55f9155db0827e2c0c63272a11613a5ce8362a4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pierre=20Rossin=C3=A8s?= Date: Thu, 3 Nov 2016 11:33:44 +0100 Subject: [PATCH 3/3] * Fixed tests --- library/src/main/java/com/orm/SugarDb.java | 4 ++++ library/src/test/java/com/orm/SchemaGeneratorTest.java | 4 ++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/library/src/main/java/com/orm/SugarDb.java b/library/src/main/java/com/orm/SugarDb.java index 2824adcb..82356ebb 100644 --- a/library/src/main/java/com/orm/SugarDb.java +++ b/library/src/main/java/com/orm/SugarDb.java @@ -30,6 +30,10 @@ private SugarDb(List modelsClasses) { schemaGenerator = SchemaGenerator.getInstance(); } + public static SugarDb getInstance() { + return new SugarDb(null); + } + public static SugarDb getInstance(List modelsClasses) { return new SugarDb(modelsClasses); } diff --git a/library/src/test/java/com/orm/SchemaGeneratorTest.java b/library/src/test/java/com/orm/SchemaGeneratorTest.java index 90f35c07..9d54f648 100644 --- a/library/src/test/java/com/orm/SchemaGeneratorTest.java +++ b/library/src/test/java/com/orm/SchemaGeneratorTest.java @@ -131,7 +131,7 @@ public void testAllTableCreation() { SQLiteDatabase sqLiteDatabase = SugarContext.getSugarContext().getSugarDb().getDB(); SchemaGenerator schemaGenerator = SchemaGenerator.getInstance(); - schemaGenerator.createDatabase(sqLiteDatabase); + schemaGenerator.createDatabase(sqLiteDatabase, null); String sql = "select count(*) from sqlite_master where type='table';"; Cursor c = sqLiteDatabase.rawQuery(sql, null); @@ -150,7 +150,7 @@ public void testDeleteAllTables() { SQLiteDatabase sqLiteDatabase = SugarContext.getSugarContext().getSugarDb().getDB(); SchemaGenerator schemaGenerator = SchemaGenerator.getInstance(); - schemaGenerator.createDatabase(sqLiteDatabase); + schemaGenerator.createDatabase(sqLiteDatabase, null); schemaGenerator.deleteTables(sqLiteDatabase); String sql = "select count(*) from sqlite_master where type='table';";