Skip to content

Commit b838436

Browse files
K0zkapdion891
authored andcommitted
cleanup around seemingly impossible cast
- changed type parameters on details map in CreateSecondaryStagingStoreCmd - <String, String> was misleading since it can not work with a string value and it is never a string - introducing the type parameters allowed some simplifications in getDetails() - added unit test Signed-off-by: Laszlo Hornyak <laszlo.hornyak@gmail.com> Signed-off-by: Pierre-Luc Dion <pdion891@apache.org>
1 parent 463a102 commit b838436

2 files changed

Lines changed: 62 additions & 10 deletions

File tree

api/src/org/apache/cloudstack/api/command/admin/storage/CreateSecondaryStagingStoreCmd.java

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,7 @@
1818
*/
1919
package org.apache.cloudstack.api.command.admin.storage;
2020

21-
import java.util.Collection;
2221
import java.util.HashMap;
23-
import java.util.Iterator;
2422
import java.util.Map;
2523

2624
import org.apache.log4j.Logger;
@@ -54,7 +52,7 @@ public class CreateSecondaryStagingStoreCmd extends BaseCmd {
5452
private Long zoneId;
5553

5654
@Parameter(name = ApiConstants.DETAILS, type = CommandType.MAP, description = "the details for the staging store")
57-
private Map<String, String> details;
55+
private Map<String, ? extends Map<String, String>> details;
5856

5957
@Parameter(name = ApiConstants.SCOPE, type = CommandType.STRING, required = false, description = "the scope of the staging store: zone only for now")
6058
private String scope;
@@ -78,13 +76,8 @@ public Map<String, String> getDetails() {
7876
Map<String, String> detailsMap = null;
7977
if (details != null && !details.isEmpty()) {
8078
detailsMap = new HashMap<String, String>();
81-
Collection<?> props = details.values();
82-
Iterator<?> iter = props.iterator();
83-
while (iter.hasNext()) {
84-
HashMap<String, String> detail = (HashMap<String, String>)iter.next();
85-
String key = detail.get("key");
86-
String value = detail.get("value");
87-
detailsMap.put(key, value);
79+
for (Map<String, String> detail : details.values()) {
80+
detailsMap.put(detail.get("key"), detail.get("value"));
8881
}
8982
}
9083
return detailsMap;
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
package org.apache.cloudstack.api.command.admin.storage;
2+
3+
import java.lang.reflect.Field;
4+
import java.util.HashMap;
5+
import java.util.Map;
6+
7+
import junit.framework.Assert;
8+
9+
import org.apache.cloudstack.api.BaseCmd;
10+
import org.apache.cloudstack.api.Parameter;
11+
import org.junit.Test;
12+
13+
public class CreateSecondaryStagingStoreCmdTest {
14+
15+
static void set(BaseCmd cmd, String fieldName, Object value)
16+
throws IllegalArgumentException, IllegalAccessException {
17+
for (Field field : cmd.getClass().getDeclaredFields()) {
18+
Parameter parameter = field.getAnnotation(Parameter.class);
19+
if (parameter != null && fieldName.equals(parameter.name())) {
20+
field.setAccessible(true);
21+
field.set(cmd, value);
22+
}
23+
}
24+
}
25+
26+
@Test
27+
public void getDetails() throws IllegalArgumentException,
28+
IllegalAccessException {
29+
CreateSecondaryStagingStoreCmd cmd = new CreateSecondaryStagingStoreCmd();
30+
HashMap<String, Map<String, String>> details = new HashMap<String, Map<String, String>>();
31+
HashMap<String, String> kv = new HashMap<String, String>();
32+
kv.put("key", "TEST-KEY");
33+
kv.put("value", "TEST-VALUE");
34+
details.put("does not matter", kv);
35+
set(cmd, "details", details);
36+
Map<String, String> detailsMap = cmd.getDetails();
37+
Assert.assertNotNull(detailsMap);
38+
Assert.assertEquals(1, detailsMap.size());
39+
Assert.assertTrue(detailsMap.containsKey("TEST-KEY"));
40+
Assert.assertEquals("TEST-VALUE", detailsMap.get("TEST-KEY"));
41+
}
42+
43+
@Test
44+
public void getDetailsEmpty() throws IllegalArgumentException,
45+
IllegalAccessException {
46+
CreateSecondaryStagingStoreCmd cmd = new CreateSecondaryStagingStoreCmd();
47+
set(cmd, "details", new HashMap<String, Map<String, String>>());
48+
Assert.assertNull(cmd.getDetails());
49+
}
50+
51+
@Test
52+
public void getDetailsNull() throws IllegalArgumentException,
53+
IllegalAccessException {
54+
CreateSecondaryStagingStoreCmd cmd = new CreateSecondaryStagingStoreCmd();
55+
set(cmd, "details", null);
56+
Assert.assertNull(cmd.getDetails());
57+
}
58+
59+
}

0 commit comments

Comments
 (0)