Last active
December 28, 2016 19:13
-
-
Save daolq/dfe77581294fd070eba0ad7369ce0c89 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import java.util.HashMap; | |
import java.util.Map; | |
import java.util.concurrent.atomic.AtomicInteger; | |
import io.realm.Realm; | |
import io.realm.RealmObject; | |
/** | |
* RealmAutoIncrement. | |
* | |
* @author DaoLQ | |
*/ | |
public final class RealmAutoIncrement { | |
private Map<Class<? extends RealmObject>, AtomicInteger> modelMap = new HashMap<>(); | |
private static RealmAutoIncrement autoIncrementMap; | |
private Class<? extends RealmObject> mObj; | |
private RealmAutoIncrement(Class<? extends RealmObject> obj) { | |
mObj = obj; | |
modelMap.put(obj, new AtomicInteger(getLastIdFromModel(mObj))); | |
} | |
private int getLastIdFromModel(Class<? extends RealmObject> clazz) { | |
String primaryKeyColumnName = "id"; | |
Number lastId = Realm.getDefaultInstance().where(clazz).max(primaryKeyColumnName); | |
return lastId == null ? 0 : lastId.intValue(); | |
} | |
public Integer getNextIdFromModel() { | |
if (isValidMethodCall()) { | |
AtomicInteger modelId = modelMap.get(mObj); | |
if (modelId == null) { | |
return 0; | |
} | |
return modelId.incrementAndGet(); | |
} | |
return 0; | |
} | |
private boolean isValidMethodCall() { | |
StackTraceElement[] stackTraceElements = Thread.currentThread().getStackTrace(); | |
for (StackTraceElement stackTraceElement : stackTraceElements) { | |
if (stackTraceElement.getMethodName().equals("newInstance")) { | |
return false; | |
} | |
} | |
return true; | |
} | |
public static RealmAutoIncrement getInstance(Class<? extends RealmObject> obj) { | |
if (autoIncrementMap == null) { | |
autoIncrementMap = new RealmAutoIncrement(obj); | |
} | |
return autoIncrementMap; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Thanks for your code.
I simplified it for my purposes to: