Skip to content

Commit e543af1

Browse files
committed
Refactor cache map
1 parent 757c1d1 commit e543af1

File tree

9 files changed

+369
-157
lines changed

9 files changed

+369
-157
lines changed

gradle.properties

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,9 @@ MIN_SDK_VERSION=14
66
SUPPORT_LIBRARY_VERSION=25.1.0
77
JUNIT_VERSION=4.12
88

9-
VERSION_NAME=1.0.1
10-
VERSION_CODE=2
11-
RELEASE_VERSION_NAME = 1.0.0
9+
VERSION_NAME=1.1.0
10+
VERSION_CODE=3
11+
RELEASE_VERSION_NAME = 1.0.2
1212

1313
USER_ORG=kimkevin
1414
GROUP=com.github.kimkevin

library/build.gradle

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,9 @@ dependencies {
4444

4545
compile "com.android.support:appcompat-v7:${SUPPORT_LIBRARY_VERSION}"
4646
testCompile "junit:junit:${JUNIT_VERSION}"
47+
testCompile 'org.mockito:mockito-all:1.10.19'
48+
testCompile "org.hamcrest:hamcrest-all:1.3"
49+
4750
}
4851

4952
publish {

library/src/main/java/com/github/kimkevin/cachepot/CachePot.java

Lines changed: 79 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -17,39 +17,101 @@ public static CachePot getInstance() {
1717
return instance;
1818
}
1919

20-
private Map<Class<?>, Object> dataMap;
21-
private Map<Integer, Object> dataListMap;
20+
private Map<Object, Object> cacheMap;
2221

23-
public <T> void push(T data) {
24-
if (dataMap == null) {
25-
dataMap = new HashMap<>();
22+
public void push(Object data) {
23+
if (cacheMap == null) {
24+
cacheMap = new HashMap<>();
2625
}
2726

28-
dataMap.put(data.getClass(), data);
27+
cacheMap.put(data.getClass(), data);
2928
}
3029

3130
public <T> T pop(Class classType) {
32-
T value = (T) dataMap.get(classType);
33-
dataMap.remove(classType);
31+
T value;
32+
try {
33+
value = (T) cacheMap.get(classType);
34+
cacheMap.remove(classType);
35+
} catch (NullPointerException exception) {
36+
return null;
37+
}
38+
3439
return value;
3540
}
3641

37-
public <T> void push(int position, T data) {
38-
if (dataListMap == null) {
39-
dataListMap = new HashMap<>();
42+
public void push(long id, Object data) {
43+
if (cacheMap == null) {
44+
cacheMap = new HashMap<>();
4045
}
4146

42-
dataListMap.put(position, data);
47+
cacheMap.put(id, data);
4348
}
4449

45-
public <T> T pop(int position) {
46-
T value = (T) dataListMap.get(position);
47-
dataListMap.remove(position);
50+
public <T> T pop(long id) {
51+
T value;
52+
try {
53+
value = (T) cacheMap.get(id);
54+
cacheMap.remove(id);
55+
} catch (NullPointerException exception) {
56+
return null;
57+
}
58+
4859
return value;
4960
}
5061

62+
public void push(String TAG, int id, Object data) {
63+
if (cacheMap == null) {
64+
cacheMap = new HashMap<>();
65+
}
66+
67+
Map<Integer, Object> valueMap;
68+
if (cacheMap.containsKey(TAG) && cacheMap.get(TAG) instanceof HashMap) {
69+
valueMap = (HashMap<Integer, Object>) cacheMap.get(TAG);
70+
} else {
71+
valueMap = new HashMap<>();
72+
}
73+
74+
valueMap.put(id, data);
75+
cacheMap.put(TAG, valueMap);
76+
}
77+
78+
public <T> T pop(String TAG, int id) {
79+
T value;
80+
81+
try {
82+
value = (T) ((HashMap<Integer, Object>) cacheMap.get(TAG)).get(id);
83+
cacheMap.remove(id);
84+
} catch (NullPointerException exception) {
85+
return null;
86+
}
87+
return value;
88+
}
89+
90+
public int size() {
91+
try {
92+
return cacheMap.size();
93+
} catch (NullPointerException exception) {
94+
return 0;
95+
}
96+
}
97+
98+
public int size(String TAG) {
99+
try {
100+
return ((HashMap) cacheMap.get(TAG)).size();
101+
} catch (ClassCastException | NullPointerException exception) {
102+
return 0;
103+
}
104+
}
105+
51106
public void clear() {
52-
dataMap.clear();
53-
dataListMap.clear();
107+
if (cacheMap != null) {
108+
cacheMap.clear();
109+
}
110+
}
111+
112+
public void clear(String TAG) {
113+
if (cacheMap != null && cacheMap.get(TAG) != null) {
114+
((HashMap) cacheMap.get(TAG)).clear();
115+
}
54116
}
55117
}

library/src/test/java/com/github/kimkevin/cachepot/CachePotTest.java

Lines changed: 175 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,22 +3,189 @@
33

44
import org.junit.Test;
55

6+
import static org.hamcrest.Matchers.equalTo;
7+
import static org.hamcrest.Matchers.greaterThan;
8+
import static org.hamcrest.core.Is.is;
9+
import static org.junit.Assert.assertEquals;
10+
import static org.junit.Assert.assertThat;
11+
import static org.mockito.Mockito.mock;
12+
613
public class CachePotTest {
14+
private class User {
15+
int id;
16+
String name;
17+
18+
User(int id, String name) {
19+
this.id = id;
20+
this.name = name;
21+
}
22+
}
723

824
@Test
925
public void PushTest() throws Exception {
10-
User user = new User(0, "Double K");
26+
User user = mock(User.class);
1127

1228
CachePot.getInstance().push(user);
29+
30+
assertEquals(1, CachePot.getInstance().size());
31+
assertThat(CachePot.getInstance().size(), is(greaterThan(0)));
32+
33+
CachePot.getInstance().clear();
1334
}
1435

15-
private class User {
16-
public long id;
17-
public String name;
36+
@Test
37+
public void MultiplePushTest() throws Exception {
38+
User user1 = new User(0, "Mike");
39+
User user2 = new User(1, "Kevin");
40+
User user3 = new User(2, "Jassi");
1841

19-
public User(long id, String name) {
20-
this.id = id;
21-
this.name = name;
22-
}
42+
CachePot.getInstance().push(user1);
43+
CachePot.getInstance().push(user2);
44+
CachePot.getInstance().push(user3);
45+
46+
assertThat(1, is(CachePot.getInstance().size()));
47+
assertThat(user3.id, is(user3.id));
48+
assertThat(user3.name, is(user3.name));
49+
50+
CachePot.getInstance().clear();
51+
}
52+
53+
@Test
54+
public void PopTest() throws Exception {
55+
User user = new User(0, "Mike");
56+
CachePot.getInstance().push(user);
57+
58+
User cachedUser = CachePot.getInstance().pop(User.class);
59+
60+
assertEquals(CachePot.getInstance().size(), 0);
61+
assertThat(user.id, is(cachedUser.id));
62+
assertThat(user.name, is(cachedUser.name));
63+
64+
CachePot.getInstance().clear();
65+
}
66+
67+
@Test
68+
public void PushIdTest() throws Exception {
69+
User user1 = new User(0, "Mike");
70+
User user2 = new User(1, "Kevin");
71+
User user3 = new User(2, "Jassi");
72+
73+
CachePot.getInstance().push(user1.id, user1);
74+
CachePot.getInstance().push(user2.id, user2);
75+
CachePot.getInstance().push(user3.id, user3);
76+
77+
assertEquals(3, CachePot.getInstance().size());
78+
79+
CachePot.getInstance().clear();
80+
}
81+
82+
@Test
83+
public void PopPositionTest() throws Exception {
84+
User user1 = new User(0, "Mike");
85+
User user2 = new User(1, "Kevin");
86+
User user3 = new User(2, "Jassi");
87+
88+
CachePot.getInstance().push(2, user1);
89+
CachePot.getInstance().push(3, user2);
90+
CachePot.getInstance().push(4, user3);
91+
92+
assertEquals(3, CachePot.getInstance().size());
93+
94+
User cachedUser2 = CachePot.getInstance().pop(3);
95+
assertThat(user2.name, is(cachedUser2.name));
96+
assertThat(user2.id, is(cachedUser2.id));
97+
98+
CachePot.getInstance().clear();
99+
}
100+
101+
@Test
102+
public void PopIdTest() throws Exception {
103+
User user1 = new User(0, "Mike");
104+
User user2 = new User(1, "Kevin");
105+
User user3 = new User(2, "Jassi");
106+
107+
CachePot.getInstance().push(user1.id, user1);
108+
CachePot.getInstance().push(user2.id, user2);
109+
CachePot.getInstance().push(user3.id, user3);
110+
111+
assertEquals(3, CachePot.getInstance().size());
112+
113+
User cachedUser2 = CachePot.getInstance().pop(user2.id);
114+
assertThat(user2.name, is(cachedUser2.name));
115+
assertThat(user2.id, is(cachedUser2.id));
116+
117+
CachePot.getInstance().clear();
118+
}
119+
120+
@Test
121+
public void PushTagTest() throws Exception {
122+
User user1 = new User(0, "Mike");
123+
User user2 = new User(1, "Kevin");
124+
User user3 = new User(2, "Jassi");
125+
126+
CachePot.getInstance().push("Adapter", 0, user1);
127+
CachePot.getInstance().push("Adapter", 1, user2);
128+
CachePot.getInstance().push("Adapter", 2, user3);
129+
130+
assertEquals(1, CachePot.getInstance().size());
131+
132+
CachePot.getInstance().clear();
133+
}
134+
135+
@Test
136+
public void PopTagTest() throws Exception {
137+
final String TAG = "Adapter";
138+
139+
User user1 = new User(0, "Mike");
140+
User user2 = new User(1, "Kevin");
141+
User user3 = new User(2, "Jassi");
142+
143+
CachePot.getInstance().push(TAG, 2, user1);
144+
CachePot.getInstance().push(TAG, 3, user2);
145+
CachePot.getInstance().push(TAG, 4, user3);
146+
147+
assertEquals(1, CachePot.getInstance().size());
148+
assertEquals(3, CachePot.getInstance().size(TAG));
149+
150+
User cachedUser2 = CachePot.getInstance().pop(TAG, 3);
151+
assertThat(user2.name, is(cachedUser2.name));
152+
assertThat(user2.id, is(cachedUser2.id));
153+
154+
CachePot.getInstance().clear();
155+
}
156+
157+
@Test
158+
public void ClearTest() throws Exception {
159+
User user = mock(User.class);
160+
161+
CachePot.getInstance().push(user);
162+
163+
assertThat(CachePot.getInstance().size(), is(greaterThan(0)));
164+
165+
CachePot.getInstance().clear();
166+
167+
assertThat(CachePot.getInstance().size(), is(equalTo(0)));
168+
}
169+
170+
@Test
171+
public void ClearTagTest() throws Exception {
172+
final String TAG = "Adapter";
173+
174+
User user1 = new User(0, "Mike");
175+
User user2 = new User(1, "Kevin");
176+
User user3 = new User(2, "Jassi");
177+
178+
CachePot.getInstance().push(TAG, 2, user1);
179+
CachePot.getInstance().push(TAG, 3, user2);
180+
CachePot.getInstance().push(TAG, 4, user3);
181+
182+
assertThat(CachePot.getInstance().size(TAG), is(greaterThan(0)));
183+
assertThat(CachePot.getInstance().size(TAG), is(equalTo(3)));
184+
185+
CachePot.getInstance().clear(TAG);
186+
187+
assertThat(CachePot.getInstance().size(TAG), is(equalTo(0)));
188+
189+
CachePot.getInstance().clear();
23190
}
24191
}

sample/build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,6 @@ dependencies {
5151
testCompile "junit:junit:${JUNIT_VERSION}"
5252

5353
compile project(path: ':library')
54-
// debugCompile project(path: ':library')
55-
// releaseCompile "com.github.kimkevin:cachepot:${RELEASE_VERSION_NAME}"
54+
debugCompile project(path: ':library')
55+
releaseCompile "com.github.kimkevin:cachepot:${RELEASE_VERSION_NAME}"
5656
}

0 commit comments

Comments
 (0)