Skip to content

Commit 50fe0a0

Browse files
committed
Merge pull request #26 from brianjmiller/dacdave_map_improvements
Add iterator class in LanguageMap and a few convenience methods
2 parents eca9801 + 3923c40 commit 50fe0a0

File tree

2 files changed

+94
-1
lines changed

2 files changed

+94
-1
lines changed

src/main/java/com/rusticisoftware/tincan/LanguageMap.java

Lines changed: 54 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import java.util.HashMap;
2222
import java.util.Iterator;
2323
import java.util.Map;
24+
import java.util.Map.Entry;
2425

2526
import com.rusticisoftware.tincan.json.JSONBase;
2627
import com.rusticisoftware.tincan.json.Mapper;
@@ -29,9 +30,31 @@
2930
* Language map
3031
*/
3132
@NoArgsConstructor
32-
public class LanguageMap extends JSONBase {
33+
public class LanguageMap extends JSONBase implements Iterable<Map.Entry<String, String>> {
3334
private final HashMap<String,String> _map = new HashMap<String, String>();
3435

36+
private class LanguageMapIterator implements Iterator<Map.Entry<String, String>> {
37+
private Iterator<Map.Entry<String, String>> iterator;
38+
39+
public LanguageMapIterator() {
40+
iterator = _map.entrySet().iterator();
41+
}
42+
@Override
43+
public boolean hasNext() {
44+
return iterator.hasNext();
45+
}
46+
47+
@Override
48+
public Entry<String, String> next() {
49+
return iterator.next();
50+
}
51+
52+
@Override
53+
public void remove() throws UnsupportedOperationException {
54+
throw new UnsupportedOperationException(
55+
"LanguageMap iterator does not implement the remove method");
56+
}
57+
}
3558
public LanguageMap(JsonNode jsonNode) {
3659
this();
3760

@@ -56,8 +79,38 @@ public ObjectNode toJSONNode(TCAPIVersion version) {
5679
public String put(String key, String val) {
5780
return this._map.put(key, val);
5881
}
82+
83+
public String put(Map.Entry<String, String> entry) {
84+
return this.put(entry.getKey(), entry.getValue());
85+
}
5986

6087
public String get(String key) {
6188
return this._map.get(key);
6289
}
90+
91+
public boolean containsKey(String key) {
92+
return this._map.containsKey(key);
93+
}
94+
95+
public boolean containsValue(String value) {
96+
return this._map.containsValue(value);
97+
}
98+
99+
public Map.Entry<String, String> findFirstValue(String value) {
100+
Map.Entry<String, String> retVal = null;
101+
Iterator<Map.Entry<String,String>> it = this.iterator();
102+
while (it.hasNext()) {
103+
Map.Entry<String, String> n = it.next();
104+
if (n.getValue().equalsIgnoreCase(value)) {
105+
retVal = n;
106+
break;
107+
}
108+
}
109+
return retVal;
110+
}
111+
112+
@Override
113+
public Iterator<Entry<String, String>> iterator() {
114+
return new LanguageMapIterator();
115+
}
63116
}

src/test/java/com/rusticisoftware/tincan/LanguageMapTest.java

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,11 @@
1616
package com.rusticisoftware.tincan;
1717

1818
import static com.rusticisoftware.tincan.TestUtils.assertSerializeDeserialize;
19+
import static org.junit.Assert.assertEquals;
20+
import static org.junit.Assert.assertTrue;
21+
22+
import java.io.IOException;
23+
import java.util.Map;
1924

2025
import org.junit.Test;
2126

@@ -31,4 +36,39 @@ public void serializeDeserialize() throws Exception {
3136
lm.put("es-ES", "Some espanol");
3237
assertSerializeDeserialize(lm);
3338
}
39+
40+
@Test
41+
public void fillAndIterate() {
42+
LanguageMap lm = new LanguageMap();
43+
LanguageMap lmCopy = new LanguageMap();
44+
lm.put("und", "Some text");
45+
lm.put("en-US", "Some english");
46+
lm.put("es-ES", "Some espanol");
47+
48+
for (Map.Entry<String, String> entry : lm) {
49+
lmCopy.put(entry);
50+
}
51+
52+
String lmContent = "";
53+
try {
54+
lmContent = lm.toJSON();
55+
} catch (IOException e) {
56+
lmContent = "";
57+
}
58+
String lmCopyContent = "";
59+
try {
60+
lmCopyContent = lmCopy.toJSON();
61+
} catch (IOException e) {
62+
lmCopyContent = "";
63+
}
64+
assertEquals(lmContent, lmCopyContent);
65+
66+
boolean hasKey = lm.containsKey("und");
67+
boolean hasValue = lm.containsValue("Some english");
68+
Map.Entry<String, String> entry = lm.findFirstValue("Some espanol");
69+
70+
assertTrue(hasKey);
71+
assertTrue(hasValue);
72+
assertEquals(entry.getKey(), "es-ES");
73+
}
3474
}

0 commit comments

Comments
 (0)