/* * Copyright (c) 2015 EMC Corporation * All Rights Reserved */ package util.builders; import static com.emc.vipr.client.core.util.ResourceUtils.stringRefIds; import java.net.URI; import java.util.Collection; import java.util.List; import java.util.Set; import models.PoolAssignmentTypes; import models.StorageSystemTypes; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang.ObjectUtils; import org.apache.commons.lang.StringUtils; import com.emc.storageos.model.pools.VirtualArrayAssignmentChanges; import com.emc.storageos.model.pools.VirtualArrayAssignments; import com.emc.storageos.model.vpool.ProtocolAssignments; import com.emc.storageos.model.vpool.ProtocolChanges; import com.emc.storageos.model.vpool.VirtualPoolCommonRestRep; import com.emc.storageos.model.vpool.VirtualPoolUpdateParam; import com.google.common.collect.Sets; public class VirtualPoolUpdateBuilder { private VirtualPoolCommonRestRep oldVirtualPool; private VirtualPoolUpdateParam virtualPool; public VirtualPoolUpdateBuilder(VirtualPoolCommonRestRep oldVirtualPool, VirtualPoolUpdateParam virtualPool) { this.oldVirtualPool = oldVirtualPool; this.virtualPool = virtualPool; } public VirtualPoolCommonRestRep getOldVirtualPool() { return oldVirtualPool; } public VirtualPoolUpdateParam getVirtualPoolUpdate() { return virtualPool; } public VirtualPoolUpdateBuilder setName(String name) { if (!StringUtils.equals(name, oldVirtualPool.getName())) { virtualPool.setName(name); } return this; } public VirtualPoolUpdateBuilder setDescription(String description) { if (!StringUtils.equals(description, oldVirtualPool.getDescription())) { virtualPool.setDescription(description); } return this; } public VirtualPoolUpdateBuilder setProvisioningType(String provisioningType) { if (!StringUtils.equals(provisioningType, oldVirtualPool.getProvisioningType())) { virtualPool.setProvisionType(provisioningType); } return this; } public VirtualPoolUpdateBuilder setSystemType(String systemType) { if (!StringUtils.equals(systemType, oldVirtualPool.getSystemType())) { virtualPool.setSystemType(StringUtils.defaultIfEmpty(systemType, StorageSystemTypes.NONE)); } return this; } public VirtualPoolUpdateBuilder setUseMatchedPools(boolean useMatchedPools) { if (!ObjectUtils.equals(useMatchedPools, oldVirtualPool.getUseMatchedPools())) { virtualPool.setUseMatchedPools(useMatchedPools); } return this; } public VirtualPoolUpdateBuilder setPoolAssignmentType(String poolAssignmentType) { return setUseMatchedPools(PoolAssignmentTypes.isAutomatic(poolAssignmentType)); } public VirtualPoolUpdateBuilder setVirtualArrays(Collection<String> virtualArrays) { List<String> oldVirtualArrays = stringRefIds(oldVirtualPool.getVirtualArrays()); Set<String> add = Sets.newHashSet(CollectionUtils.subtract(virtualArrays, oldVirtualArrays)); Set<String> remove = Sets.newHashSet(CollectionUtils.subtract(oldVirtualArrays, virtualArrays)); VirtualArrayAssignmentChanges changes = new VirtualArrayAssignmentChanges(); if (!add.isEmpty()) { changes.setAdd(new VirtualArrayAssignments(add)); } if (!remove.isEmpty()) { changes.setRemove(new VirtualArrayAssignments(remove)); } virtualPool.setVarrayChanges(changes); return this; } public VirtualPoolUpdateBuilder setProtocols(Collection<String> protocols) { Set<String> oldProtocols = oldVirtualPool.getProtocols(); Set<String> add = Sets.newHashSet(CollectionUtils.subtract(protocols, oldProtocols)); Set<String> remove = Sets.newHashSet(CollectionUtils.subtract(oldProtocols, protocols)); ProtocolChanges changes = new ProtocolChanges(); if (!add.isEmpty()) { changes.setAdd(new ProtocolAssignments(add)); } if (!remove.isEmpty()) { changes.setRemove(new ProtocolAssignments(remove)); } virtualPool.setProtocolChanges(changes); return this; } protected URI defaultURI(URI uri) { if (uri != null) { return uri; } return URI.create(""); } }