/*
* Copyright (c) 2015 EMC Corporation
* All Rights Reserved
*/
package models.virtualpool;
import static com.emc.vipr.client.core.util.ResourceUtils.uris;
import static util.BourneUtil.getViprClient;
import java.util.List;
import java.util.Set;
import jobs.vipr.ConnectedFileVirtualPoolsCall;
import jobs.vipr.MatchingFileStoragePoolsCall;
import jobs.vipr.MatchingObjectStoragePoolsCall;
import play.Logger;
import play.data.validation.Min;
import play.data.validation.Required;
import util.VirtualPoolUtils;
import util.builders.ObjectVirtualPoolBuilder;
import util.builders.ObjectVirtualPoolUpdateBuilder;
import com.emc.storageos.model.NamedRelatedResourceRep;
import com.emc.storageos.model.vpool.ObjectVirtualPoolRestRep;
import com.emc.vipr.client.core.ObjectVirtualPools;
import com.emc.vipr.client.core.util.ResourceUtils;
import com.google.common.collect.Sets;
public class ObjectVirtualPoolForm extends VirtualPoolCommonForm<ObjectVirtualPoolRestRep> {
@Min(0)
public Integer maxRetention;
@Min(0)
public Integer minDataCenters;
@Required
public Set<String> objectProtocols;
@Override
public void load(ObjectVirtualPoolRestRep virtualPool) {
doLoad(virtualPool);
ObjectVirtualPools vpools = getViprClient().objectVpools();
loadTenantACLs(vpools);
}
protected void doLoad(ObjectVirtualPoolRestRep virtualPool) {
loadCommon(virtualPool);
maxRetention = virtualPool.getMaxRetention();
minDataCenters = virtualPool.getMinDataCenters();
objectProtocols = Sets.newHashSet(virtualPool.getProtocols());
}
@Override
public ObjectVirtualPoolRestRep save() {
ObjectVirtualPoolRestRep virtualPool = doSave();
ObjectVirtualPools vpools = getViprClient().objectVpools();
saveTenantACLs(vpools);
return virtualPool;
}
protected ObjectVirtualPoolRestRep doSave() {
ObjectVirtualPoolRestRep virtualPool;
if (isNew()) {
ObjectVirtualPoolBuilder builder = apply(new ObjectVirtualPoolBuilder());
virtualPool = VirtualPoolUtils.create(builder.getVirtualPool());
this.id = ResourceUtils.stringId(virtualPool);
}
else {
ObjectVirtualPoolRestRep oldVirtualPool = VirtualPoolUtils.getObjectVirtualPool(id);
ObjectVirtualPoolUpdateBuilder builder = apply(new ObjectVirtualPoolUpdateBuilder(oldVirtualPool));
virtualPool = VirtualPoolUtils.update(id, builder.getVirtualPoolUpdate());
List<NamedRelatedResourceRep> matchingPools = VirtualPoolUtils.refreshMatchingPools(virtualPool);
Logger.info("Refreshed File Virtual Pool '%s' matching pools: %d", virtualPool.getName(), matchingPools.size());
}
virtualPool = saveStoragePools(virtualPool);
return virtualPool;
}
private ObjectVirtualPoolBuilder apply(ObjectVirtualPoolBuilder builder) {
applyCommon(builder);
builder.setMaxRetention(maxRetention);
builder.setMinDataCenters(minDataCenters);
return builder;
}
private ObjectVirtualPoolUpdateBuilder apply(ObjectVirtualPoolUpdateBuilder builder) {
applyCommon(builder);
builder.setMaxRetention(maxRetention);
builder.setMinDataCenters(minDataCenters);
return builder;
}
@Override
protected ObjectVirtualPoolRestRep updateStoragePools(Set<String> add, Set<String> remove) {
return VirtualPoolUtils.updateAssignedObjectPools(id, add, remove);
}
public MatchingObjectStoragePoolsCall matchingStoragePools() {
ObjectVirtualPoolBuilder builder = new ObjectVirtualPoolBuilder();
apply(builder);
builder.setUseMatchedPools(true);
return new MatchingObjectStoragePoolsCall(builder.getVirtualPool());
}
public ConnectedFileVirtualPoolsCall connectedVirtualPools() {
return new ConnectedFileVirtualPoolsCall(uris(virtualArrays));
}
}