/*
* Copyright (c) 2015 EMC Corporation
* All Rights Reserved
*/
package com.emc.storageos.api.mapper.functions;
import static com.emc.storageos.api.mapper.BlockMapper.map;
import static com.emc.storageos.db.client.constraint.ContainmentConstraint.Factory.getVolumesByConsistencyGroup;
import java.net.URI;
import java.util.HashSet;
import java.util.Set;
import com.emc.storageos.api.mapper.BlockMapper;
import com.emc.storageos.db.client.DbClient;
import com.emc.storageos.db.client.constraint.URIQueryResultList;
import com.emc.storageos.db.client.model.BlockConsistencyGroup;
import com.emc.storageos.model.block.BlockConsistencyGroupRestRep;
import com.google.common.base.Function;
public class MapBlockConsistencyGroup implements Function<BlockConsistencyGroup, BlockConsistencyGroupRestRep> {
public static final MapBlockConsistencyGroup instance = new MapBlockConsistencyGroup();
// The DB client is required to query the list of volumes within a consistency group
private DbClient dbClient;
public static MapBlockConsistencyGroup getInstance(DbClient dbClient) {
instance.setDBClient(dbClient);
return instance;
}
private MapBlockConsistencyGroup() {
}
private void setDBClient(DbClient dbClient) {
this.dbClient = dbClient;
}
@Override
public BlockConsistencyGroupRestRep apply(BlockConsistencyGroup consistencyGroup) {
// If no db client, we are unable to query for the volumes
if (dbClient == null) {
return BlockMapper.map(consistencyGroup, null, null);
}
// Find all volumes assigned to the group
final URIQueryResultList cgVolumesResults = new URIQueryResultList();
dbClient.queryByConstraint(getVolumesByConsistencyGroup(consistencyGroup.getId()), cgVolumesResults);
// If no volumes, just return the consistency group
if (!cgVolumesResults.iterator().hasNext()) {
return map(consistencyGroup, null, dbClient);
}
final Set<URI> volumes = new HashSet<URI>();
while (cgVolumesResults.iterator().hasNext()) {
volumes.add(cgVolumesResults.iterator().next());
}
return BlockMapper.map(consistencyGroup, volumes, dbClient);
}
}