-
-
Save ryanamaral/7f70bbae2c13ee4ac5af4a07559fd811 to your computer and use it in GitHub Desktop.
This file contains hidden or 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