/*
* Copyright (c) 2016 EMC Corporation
* All Rights Reserved
*/
package com.emc.sa.service.vmware;
import static com.emc.sa.service.ServiceParams.CONSISTENCY_GROUP;
import static com.emc.sa.service.ServiceParams.DATASTORE_NAME;
import static com.emc.sa.service.ServiceParams.HLU;
import static com.emc.sa.service.ServiceParams.HOST;
import static com.emc.sa.service.ServiceParams.NAME;
import static com.emc.sa.service.ServiceParams.NUMBER_OF_VOLUMES;
import static com.emc.sa.service.ServiceParams.PROJECT;
import static com.emc.sa.service.ServiceParams.SIZE_IN_GB;
import static com.emc.sa.service.ServiceParams.VIRTUAL_ARRAY;
import static com.emc.sa.service.ServiceParams.VIRTUAL_POOL;
import java.net.URI;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.emc.sa.engine.bind.Param;
public class VMwareBinding {
/**
* Class that holds all params for volume creation. These params will be added
* to the createBlockVolumeHelper for each pair of Datastore / volumes. This class
* is needed since all params listed are single instance on the form while the
* Datastore / Volume can have multiple.
*
* @author cormij4
*
*/
public static class DatastoreToVolumeParams {
@Param(VIRTUAL_POOL)
protected URI virtualPool;
@Param(VIRTUAL_ARRAY)
protected URI virtualArray;
@Param(PROJECT)
protected URI project;
@Param(HOST)
protected URI hostId;
@Param(value = NUMBER_OF_VOLUMES, required = false)
protected Integer count;
@Param(value = CONSISTENCY_GROUP, required = false)
protected URI consistencyGroup;
@Param(value = HLU, required = false)
protected Integer hlu;
@Override
public String toString() {
return "Virtual Pool=" + virtualPool + ", Virtual Array=" + virtualArray + ", Project=" + project
+ ", Host Id=" + hostId + ", Volume Count=" + count + ", Consistency Group=" + consistencyGroup
+ ", HLU=" + hlu;
}
public Map<String, Object> getParams(int hluInc) {
Map<String, Object> map = new HashMap<String, Object>();
map.put(VIRTUAL_POOL, virtualPool);
map.put(VIRTUAL_ARRAY, virtualArray);
map.put(PROJECT, project);
map.put(HOST, hostId);
map.put(NUMBER_OF_VOLUMES, count);
map.put(CONSISTENCY_GROUP, consistencyGroup);
if (hlu == -1) {
map.put(HLU, hlu);
} else {
map.put(HLU, hlu + hluInc);
}
return map;
}
}
/**
* Class to hold params of all pair of Datastore / Volume.
*
* @author cormij4
*
*/
public static class DatastoreToVolumeTable {
@Param(DATASTORE_NAME)
protected String datastoreName;
@Param(NAME)
protected String nameParam;
@Param(SIZE_IN_GB)
protected Double sizeInGb;
@Override
public String toString() {
return "Datastore Name=" + datastoreName + ", Volume=" + nameParam + ", size=" + sizeInGb;
}
public Map<String, Object> getParams() {
Map<String, Object> map = new HashMap<String, Object>();
map.put(DATASTORE_NAME, datastoreName);
map.put(NAME, nameParam);
map.put(SIZE_IN_GB, sizeInGb);
return map;
}
}
/**
* Helper method for creating a list of all the params for the createBlockVolumesHelper.
*
* @param table of Datastore to Volumes
* @param params for volume creation
* @return Map of all params
*/
public static Map<String, Object> createDatastoreVolumeParam(DatastoreToVolumeTable table, DatastoreToVolumeParams params, int hluInc) {
Map<String, Object> map = new HashMap<String, Object>();
map.putAll(table.getParams());
map.putAll(params.getParams(hluInc));
return map;
}
/**
* Loop through all the Datastore / Volumes pair and return all the Datastore names.
*
* @param datastoreToVolume list
* @return list of datastore names
*/
public static List<String> getDatastoreNamesFromDatastoreToVolume(DatastoreToVolumeTable[] datastoreToVolume) {
List<String> dataStoreNames = new ArrayList<String>();
for (DatastoreToVolumeTable value : datastoreToVolume) {
dataStoreNames.add(value.datastoreName);
}
return dataStoreNames;
}
/**
* Loop through all the Datastore / Volumes pair and return all the Volume names.
*
* @param datastoreToVolume list
* @return list of volume names
*/
public static List<String> getVolumeNamesFromDatastoreToVolume(DatastoreToVolumeTable[] datastoreToVolume) {
List<String> volumeNames = new ArrayList<String>();
for (DatastoreToVolumeTable value : datastoreToVolume) {
volumeNames.add(value.nameParam);
}
return volumeNames;
}
}