package net.miz_hi.smileessence.cache; import net.miz_hi.smileessence.model.status.tweet.TweetModel; import net.miz_hi.smileessence.task.impl.ShowTweetTask; import net.miz_hi.smileessence.twitter.ResponseConverter; import twitter4j.Status; import java.util.ArrayList; import java.util.List; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.CopyOnWriteArrayList; public class TweetCache { private static TweetCache instance = new TweetCache(); private ConcurrentHashMap<Long, TweetModel> statusesMap = new ConcurrentHashMap<Long, TweetModel>(); private CopyOnWriteArrayList<Long> readRetweetList = new CopyOnWriteArrayList<Long>(); public static TweetModel put(Status status) { TweetModel model; if (instance.statusesMap.containsKey(status.getId())) { model = instance.statusesMap.get(status.getId()); model.updateData(status); } else { model = new TweetModel(status); instance.statusesMap.put(status.getId(), model); } if (status.isRetweet()) { instance.readRetweetList.add(status.getId()); new ShowTweetTask(status.getRetweetedStatus().getId()) { @Override public void onPostExecute(Status result) { if (result != null) { ResponseConverter.convert(result); } } }.callAsync(); } return model; } public static List<TweetModel> getList() { return new ArrayList<TweetModel>(instance.statusesMap.values()); } public static TweetModel get(long id) { return instance.statusesMap.get(id); } public static TweetModel remove(long id) { return instance.statusesMap.remove(id); } public static boolean isNotRead(long id) { int count = 0; for (Long l : instance.readRetweetList) { if (id == l) { count++; } } return count <= 1; } public static void clearCache() { instance.statusesMap.clear(); instance.readRetweetList.clear(); } }