diff --git a/src/com/activeandroid/Model.java b/src/com/activeandroid/Model.java index 421426ea3..e7f8106ba 100644 --- a/src/com/activeandroid/Model.java +++ b/src/com/activeandroid/Model.java @@ -72,6 +72,17 @@ public final void delete() { } public final Long save() { + if(!validate()) + return null; + + if(mId==null) { + if(!beforeCreate()) + return null; + } + + if(!beforeSave()) + return null; + final SQLiteDatabase db = Cache.openDatabase(); final ContentValues values = new ContentValues(); @@ -153,6 +164,7 @@ else if (ReflectionUtils.isSubclassOf(fieldType, Enum.class)) { if (mId == null) { mId = db.insert(mTableInfo.getTableName(), null, values); + afterCreate(); } else { db.update(mTableInfo.getTableName(), values, idName+"=" + mId, null); @@ -160,9 +172,18 @@ else if (ReflectionUtils.isSubclassOf(fieldType, Enum.class)) { Cache.getContext().getContentResolver() .notifyChange(ContentProvider.createUri(mTableInfo.getType(), mId), null); + + afterSave(); + return mId; } + public boolean validate() { return true; } + public boolean beforeCreate() { return true; } + public void afterCreate() {} + public boolean beforeSave() { return true; } + public void afterSave() {} + // Convenience methods public static void delete(Class type, long id) {