Skip to content

Commit 9523aad

Browse files
DaanHooglandclaude
andcommitted
storage: remove raw types and unchecked casts
Part of #12316 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
1 parent fb4c916 commit 9523aad

7 files changed

Lines changed: 36 additions & 57 deletions

File tree

‎api/src/main/java/org/apache/cloudstack/api/command/admin/host/AddSecondaryStorageCmd.java‎

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@
3030
import com.cloud.user.Account;
3131
import org.apache.commons.collections.MapUtils;
3232

33-
import java.util.Collection;
3433
import java.util.HashMap;
3534
import java.util.Map;
3635

@@ -49,7 +48,7 @@ public class AddSecondaryStorageCmd extends BaseCmd {
4948
protected Long zoneId;
5049

5150
@Parameter(name = ApiConstants.DETAILS, type = CommandType.MAP, description = "Details in key/value pairs using format details[i].keyname=keyvalue. Example: details[0].copytemplatesfromothersecondarystorages=true")
52-
protected Map details;
51+
protected Map<String, ? extends Map<String, String>> details;
5352

5453
/////////////////////////////////////////////////////
5554
/////////////////// Accessors ///////////////////////
@@ -66,12 +65,8 @@ public Long getZoneId() {
6665
public Map<String, String> getDetails() {
6766
Map<String, String> detailsMap = new HashMap<>();
6867
if (MapUtils.isNotEmpty(details)) {
69-
Collection<?> props = details.values();
70-
for (Object prop : props) {
71-
HashMap<String, String> detail = (HashMap<String, String>) prop;
72-
for (Map.Entry<String, String> entry: detail.entrySet()) {
73-
detailsMap.put(entry.getKey(),entry.getValue());
74-
}
68+
for (Map<String, String> detail : details.values()) {
69+
detailsMap.putAll(detail);
7570
}
7671
}
7772
return detailsMap;

‎api/src/main/java/org/apache/cloudstack/api/command/admin/storage/AddImageStoreCmd.java‎

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,7 @@
1616
// under the License.
1717
package org.apache.cloudstack.api.command.admin.storage;
1818

19-
import java.util.Collection;
2019
import java.util.HashMap;
21-
import java.util.Iterator;
2220
import java.util.Map;
2321

2422

@@ -57,7 +55,7 @@ public class AddImageStoreCmd extends BaseCmd {
5755
@Parameter(name = ApiConstants.DETAILS,
5856
type = CommandType.MAP,
5957
description = "The details for the image store. Example: details[0].key=accesskey&details[0].value=s389ddssaa&details[1].key=secretkey&details[1].value=8dshfsss")
60-
private Map details;
58+
private Map<String, ? extends Map<String, String>> details;
6159

6260
/////////////////////////////////////////////////////
6361
/////////////////// Accessors ///////////////////////
@@ -78,11 +76,8 @@ public Long getZoneId() {
7876
public Map<String, String> getDetails() {
7977
Map<String, String> detailsMap = null;
8078
if (details != null && !details.isEmpty()) {
81-
detailsMap = new HashMap<String, String>();
82-
Collection<?> props = details.values();
83-
Iterator<?> iter = props.iterator();
84-
while (iter.hasNext()) {
85-
HashMap<String, String> detail = (HashMap<String, String>)iter.next();
79+
detailsMap = new HashMap<>();
80+
for (Map<String, String> detail : details.values()) {
8681
String key = detail.get("key");
8782
String value = detail.get("value");
8883
detailsMap.put(key, value);
@@ -107,7 +102,7 @@ public void setProviderName(String providerName) {
107102
this.providerName = providerName;
108103
}
109104

110-
public void setDetails(Map<String, String> details) {
105+
public void setDetails(Map<String, ? extends Map<String, String>> details) {
111106
this.details = details;
112107
}
113108

‎api/src/main/java/org/apache/cloudstack/api/command/admin/storage/AddImageStoreS3CMD.java‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ public final class AddImageStoreS3CMD extends BaseCmd implements ClientOptions {
9797
public void execute() throws ResourceUnavailableException, InsufficientCapacityException, ServerApiException, ConcurrentOperationException,
9898
ResourceAllocationException, NetworkRuleConflictException {
9999

100-
Map<String, String> dm = new HashMap();
100+
Map<String, String> dm = new HashMap<>();
101101

102102
dm.put(ApiConstants.S3_ACCESS_KEY, getAccessKey());
103103
dm.put(ApiConstants.SECRET_KEY, getSecretKey());

‎api/src/main/java/org/apache/cloudstack/api/command/admin/storage/CreateStoragePoolCmd.java‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ public class CreateStoragePoolCmd extends BaseCmd {
4747
private Long clusterId;
4848

4949
@Parameter(name = ApiConstants.DETAILS, type = CommandType.MAP, description = "The details for the storage pool")
50-
private Map details;
50+
private Map<String, ? extends Map<String, String>> details;
5151

5252
@Parameter(name = ApiConstants.NAME, type = CommandType.STRING, required = true, description = "The name for the storage pool")
5353
private String storagePoolName;
@@ -100,7 +100,7 @@ public Long getClusterId() {
100100
return clusterId;
101101
}
102102

103-
public Map getDetails() {
103+
public Map<String, ? extends Map<String, String>> getDetails() {
104104
return details;
105105
}
106106

‎api/src/main/java/org/apache/cloudstack/api/command/admin/storage/UpdateStoragePoolCmd.java‎

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ public class UpdateStoragePoolCmd extends BaseCmd {
6868
required = false,
6969
description = "the details for the storage pool",
7070
since = "4.19.0")
71-
private Map details;
71+
private Map<String, ? extends Map<String, String>> details;
7272

7373
@Parameter(name = ApiConstants.URL,
7474
type = CommandType.STRING,
@@ -131,13 +131,10 @@ public ApiCommandResourceType getApiResourceType() {
131131
return ApiCommandResourceType.StoragePool;
132132
}
133133

134-
public Map<String,String> getDetails() {
134+
public Map<String, ? extends Map<String, String>> getDetails() {
135135
return details;
136136
}
137137

138-
public void setDetails(Map<String,String> details) {
139-
this.details = details;
140-
}
141138

142139
public String getUrl() {
143140
return url;

‎api/src/main/java/org/apache/cloudstack/api/command/admin/swift/AddSwiftCmd.java‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ public long getEntityOwnerId() {
8282

8383
@Override
8484
public void execute() {
85-
Map<String, String> dm = new HashMap<String, String>();
85+
Map<String, String> dm = new HashMap<>();
8686
dm.put(ApiConstants.ACCOUNT, getAccount());
8787
dm.put(ApiConstants.USERNAME, getUsername());
8888
dm.put(ApiConstants.KEY, getKey());

‎server/src/main/java/com/cloud/storage/StorageManagerImpl.java‎

Lines changed: 23 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -143,8 +143,8 @@
143143
import org.apache.cloudstack.storage.object.ObjectStore;
144144
import org.apache.cloudstack.storage.object.ObjectStoreEntity;
145145
import org.apache.cloudstack.storage.to.VolumeObjectTO;
146-
import org.apache.commons.collections.CollectionUtils;
147-
import org.apache.commons.collections.MapUtils;
146+
import org.apache.commons.collections4.CollectionUtils;
147+
import org.apache.commons.collections4.MapUtils;
148148
import org.apache.commons.lang.time.DateUtils;
149149
import org.apache.commons.lang3.ArrayUtils;
150150
import org.apache.commons.lang3.BooleanUtils;
@@ -670,14 +670,16 @@ protected DataStore createLocalStorage(Map<String, Object> poolInfos) throws Con
670670

671671
long capacityBytes = poolInfos.get("capacityBytes") != null ? Long.parseLong(poolInfos.get("capacityBytes").toString()) : 0;
672672

673+
@SuppressWarnings("unchecked") // the local storage configuration is parsed into untyped maps
674+
Map<String, String> poolDetails = (Map<String, String>) poolInfos.get("details");
673675
StoragePoolInfo pInfo = new StoragePoolInfo(poolInfos.get("uuid").toString(),
674676
host.getPrivateIpAddress(),
675677
hostPath,
676678
hostPath,
677679
StoragePoolType.Filesystem,
678680
capacityBytes,
679681
0,
680-
(Map<String,String>)poolInfos.get("details"),
682+
poolDetails,
681683
poolInfos.get("name").toString());
682684

683685
return createLocalStorage(host, pInfo);
@@ -1030,18 +1032,11 @@ protected Map<String,String> extractUriParamsAsMap(String url) {
10301032
return uriParams;
10311033
}
10321034

1033-
private Map<String, String> extractApiParamAsMap(Map ds) {
1035+
private Map<String, String> extractApiParamAsMap(Map<String, ? extends Map<String, String>> ds) {
10341036
Map<String, String> details = new HashMap<>();
10351037
if (ds != null) {
1036-
Collection detailsCollection = ds.values();
1037-
Iterator it = detailsCollection.iterator();
1038-
while (it.hasNext()) {
1039-
HashMap d = (HashMap)it.next();
1040-
Iterator it2 = d.entrySet().iterator();
1041-
while (it2.hasNext()) {
1042-
Map.Entry entry = (Map.Entry)it2.next();
1043-
details.put((String)entry.getKey(), (String)entry.getValue());
1044-
}
1038+
for (Map<String, String> d : ds.values()) {
1039+
details.putAll(d);
10451040
}
10461041
}
10471042
return details;
@@ -1421,9 +1416,8 @@ protected void checkIfStorageAccessGroupsExistsOnZone(long zoneId, List<String>
14211416

14221417
String storageAccessGroupsOnZone = zoneVO.getStorageAccessGroups();
14231418
List<String> zoneTagsList = parseTags(storageAccessGroupsOnZone);
1424-
List<String> newTags = storageAccessGroups;
14251419

1426-
List<String> existingTagsOnZone = (List<String>) CollectionUtils.intersection(newTags, zoneTagsList);
1420+
List<String> existingTagsOnZone = new ArrayList<>(CollectionUtils.intersection(storageAccessGroups, zoneTagsList));
14271421

14281422
if (CollectionUtils.isNotEmpty(existingTagsOnZone)) {
14291423
throw new CloudRuntimeException(String.format("access groups already exist on the zone: %s", existingTagsOnZone));
@@ -1439,10 +1433,9 @@ protected void checkIfStorageAccessGroupsExistsOnPod(long podId, List<String> st
14391433

14401434
List<String> podTagsList = parseTags(storageAccessGroupsOnPod);
14411435
List<String> zoneTagsList = parseTags(storageAccessGroupsOnZone);
1442-
List<String> newTags = storageAccessGroups;
14431436

1444-
List<String> existingTagsOnPod = (List<String>) CollectionUtils.intersection(newTags, podTagsList);
1445-
List<String> existingTagsOnZone = (List<String>) CollectionUtils.intersection(newTags, zoneTagsList);
1437+
List<String> existingTagsOnPod = new ArrayList<>(CollectionUtils.intersection(storageAccessGroups, podTagsList));
1438+
List<String> existingTagsOnZone = new ArrayList<>(CollectionUtils.intersection(storageAccessGroups, zoneTagsList));
14461439

14471440
if (CollectionUtils.isNotEmpty(existingTagsOnPod) || CollectionUtils.isNotEmpty(existingTagsOnZone)) {
14481441
String message = "access groups already exist ";
@@ -1473,11 +1466,10 @@ protected void checkIfStorageAccessGroupsExistsOnCluster(long clusterId, List<St
14731466
List<String> podTagsList = parseTags(storageAccessGroupsOnPod);
14741467
List<String> zoneTagsList = parseTags(storageAccessGroupsOnZone);
14751468
List<String> clusterTagsList = parseTags(storageAccessGroupsOnCluster);
1476-
List<String> newTags = storageAccessGroups;
14771469

1478-
List<String> existingTagsOnCluster = (List<String>) CollectionUtils.intersection(newTags, clusterTagsList);
1479-
List<String> existingTagsOnPod = (List<String>) CollectionUtils.intersection(newTags, podTagsList);
1480-
List<String> existingTagsOnZone = (List<String>) CollectionUtils.intersection(newTags, zoneTagsList);
1470+
List<String> existingTagsOnCluster = new ArrayList<>(CollectionUtils.intersection(storageAccessGroups, clusterTagsList));
1471+
List<String> existingTagsOnPod = new ArrayList<>(CollectionUtils.intersection(storageAccessGroups, podTagsList));
1472+
List<String> existingTagsOnZone = new ArrayList<>(CollectionUtils.intersection(storageAccessGroups, zoneTagsList));
14811473

14821474
if (CollectionUtils.isNotEmpty(existingTagsOnCluster) || CollectionUtils.isNotEmpty(existingTagsOnPod) || CollectionUtils.isNotEmpty(existingTagsOnZone)) {
14831475
String message = "access groups already exist ";
@@ -1573,14 +1565,14 @@ public void doInTransactionWithoutResult(TransactionStatus status) {
15731565
@Override
15741566
public Pair<Map<String, String>, Boolean> getStoragePoolNFSMountOpts(StoragePool pool, Map<String, String> details) {
15751567
boolean details_added = false;
1576-
if (!pool.getPoolType().equals(Storage.StoragePoolType.NetworkFilesystem)) {
1577-
return new Pair<>(details, details_added);
1578-
}
1579-
1580-
StoragePoolDetailVO nfsMountOpts = _storagePoolDetailsDao.findDetail(pool.getId(), ApiConstants.NFS_MOUNT_OPTIONS);
1581-
if (nfsMountOpts != null) {
1582-
if (details == null) {
1583-
details = new HashMap<>();
1568+
if (pool.getPoolType().equals(Storage.StoragePoolType.NetworkFilesystem)) {
1569+
StoragePoolDetailVO nfsMountOpts = _storagePoolDetailsDao.findDetail(pool.getId(), ApiConstants.NFS_MOUNT_OPTIONS);
1570+
if (nfsMountOpts != null) {
1571+
if (details == null) {
1572+
details = new HashMap<>();
1573+
}
1574+
details.put(ApiConstants.NFS_MOUNT_OPTIONS, nfsMountOpts.getValue());
1575+
details_added = true;
15841576
}
15851577
details.put(ApiConstants.NFS_MOUNT_OPTIONS, nfsMountOpts.getValue());
15861578
details_added = true;
@@ -4483,7 +4475,7 @@ private void setVolumeObjectTOThrottling(VolumeObjectTO volumeTO, final ServiceO
44834475

44844476
@Override
44854477
@ActionEvent(eventType = EventTypes.EVENT_OBJECT_STORE_CREATE, eventDescription = "creating object storage")
4486-
public ObjectStore discoverObjectStore(String name, String url, Long size, String providerName, Map details)
4478+
public ObjectStore discoverObjectStore(String name, String url, Long size, String providerName, Map<String, String> details)
44874479
throws IllegalArgumentException, InvalidParameterValueException {
44884480
DataStoreProvider storeProvider = _dataStoreProviderMgr.getDataStoreProvider(providerName);
44894481

0 commit comments

Comments
 (0)