/* * 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.placement.VirtualPoolUtil; 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.SupportedDriveTypes; import com.emc.storageos.model.vpool.BlockVirtualPoolParam; import com.emc.storageos.model.vpool.BlockVirtualPoolUpdateParam; import com.emc.storageos.svcs.errorhandling.resources.APIException; import com.emc.storageos.volumecontroller.impl.utils.VirtualPoolCapabilityValuesWrapper; public class DriveTypeValidator extends VirtualPoolValidator<BlockVirtualPoolParam, BlockVirtualPoolUpdateParam> { @Override public void setNextValidator(VirtualPoolValidator validator) { _nextValidator = validator; } @Override protected void validateVirtualPoolUpdateAttributeValue( VirtualPool vPool, BlockVirtualPoolUpdateParam updateParam, DbClient dbClient) { StringSet systemType = new StringSet(); if (vPool.getArrayInfo() != null) { if (vPool.getArrayInfo().get(VirtualPoolCapabilityValuesWrapper.SYSTEM_TYPE) != null) { systemType.addAll(vPool.getArrayInfo().get(VirtualPoolCapabilityValuesWrapper.SYSTEM_TYPE)); } } if (VirtualPoolUtil.validateNullDriveTypeForHDSSystems(vPool.getAutoTierPolicyName(), systemType, vPool.getDriveType())) { throw APIException.badRequests.invalidDriveType(systemType.toString()); } if (null != updateParam.getDriveType() && !updateParam.getDriveType().equalsIgnoreCase(NONE) && null == SupportedDriveTypes.lookup(updateParam.getDriveType())) { throw APIException.badRequests.invalidParameter("driveType", updateParam.getDriveType()); } } @Override protected boolean isUpdateAttributeOn(BlockVirtualPoolUpdateParam updateParam) { // validate DriveType always. return true; } @Override protected void validateVirtualPoolCreateAttributeValue( BlockVirtualPoolParam createParam, DbClient dbClient) { if (null == SupportedDriveTypes.lookup(createParam.getDriveType())) { throw APIException.badRequests.invalidParameter("driveType", createParam.getDriveType()); } } @Override protected boolean isCreateAttributeOn(BlockVirtualPoolParam createParam) { if (null != createParam.getDriveType() && !createParam.getDriveType().equalsIgnoreCase(NONE)) { return true; } return false; } }