/* * Copyright (c) 2008-2013 EMC Corporation * All Rights Reserved */ package com.emc.storageos.api.service.impl.resource.utils.vpoolvalidators; import com.emc.storageos.api.service.impl.resource.utils.VirtualPoolValidator; import com.emc.storageos.db.client.DbClient; import com.emc.storageos.db.client.model.StringSet; import com.emc.storageos.db.client.model.VirtualPool; import com.emc.storageos.db.client.model.VirtualPool.SystemType; import com.emc.storageos.model.vpool.VirtualPoolCommonParam; import com.emc.storageos.model.vpool.VirtualPoolUpdateParam; import com.emc.storageos.svcs.errorhandling.resources.APIException; import com.emc.storageos.volumecontroller.impl.utils.VirtualPoolCapabilityValuesWrapper; public class SystemTypeValidator extends VirtualPoolValidator<VirtualPoolCommonParam, VirtualPoolUpdateParam> { @Override public void setNextValidator(VirtualPoolValidator validator) { _nextValidator = validator; } @Override protected void validateVirtualPoolUpdateAttributeValue( VirtualPool vPool, VirtualPoolUpdateParam updateParam, DbClient dbClient) { if (!getStorageDriverManager().isDriverManaged(updateParam.getSystemType()) && null == SystemType.lookup(updateParam.getSystemType())) { throw APIException.badRequests.requiredParameterMissingOrEmpty("System Type"); } if (null != vPool.getAutoTierPolicyName() && !NONE.equalsIgnoreCase(vPool.getAutoTierPolicyName())) { if (!VirtualPool.SystemType.vmax.toString().equalsIgnoreCase(updateParam.getSystemType()) && !VirtualPool.SystemType.vnxblock.toString().equalsIgnoreCase( updateParam.getSystemType()) && !VirtualPool.SystemType.vnxe.toString().equalsIgnoreCase(updateParam.getSystemType()) && !VirtualPool.SystemType.unity.toString().equalsIgnoreCase(updateParam.getSystemType()) && !getStorageDriverManager().isDriverManaged(updateParam.getSystemType())) { throw APIException.badRequests.invalidParameterSystemTypeforAutoTiering(); } } if (isRaidLevelAvailable(vPool)) { if (!VirtualPool.SystemType.vmax.toString().equalsIgnoreCase(updateParam.getSystemType()) && !VirtualPool.SystemType.vnxblock.toString().equalsIgnoreCase( updateParam.getSystemType()) && !VirtualPool.SystemType.vnxe.toString().equalsIgnoreCase( updateParam.getSystemType()) && !VirtualPool.SystemType.unity.toString().equalsIgnoreCase( updateParam.getSystemType())) { throw APIException.badRequests.virtualPoolSupportsVmaxVnxblockWithRaid(); } } } private boolean isRaidLevelAvailable(VirtualPool virtualPool) { boolean status = false; if (virtualPool != null && virtualPool.getArrayInfo() != null) { StringSet raidLevelSet = virtualPool.getArrayInfo().get(VirtualPoolCapabilityValuesWrapper.RAID_LEVEL); if (raidLevelSet != null && !raidLevelSet.isEmpty()) { status = true; } } return status; } @Override protected boolean isUpdateAttributeOn(VirtualPoolUpdateParam updateParam) { return (null != updateParam.getSystemType()); } @Override protected void validateVirtualPoolCreateAttributeValue(VirtualPoolCommonParam createParam, DbClient dbClient) { if (!getStorageDriverManager().isDriverManaged(createParam.getSystemType()) && null == SystemType.lookup(createParam.getSystemType())) { throw APIException.badRequests.requiredParameterMissingOrEmpty("System Type"); } } @Override protected boolean isCreateAttributeOn(VirtualPoolCommonParam createParam) { if (null != createParam.getSystemType() && !createParam.getSystemType().equalsIgnoreCase(NONE)) { return true; } return false; } }