/*
* Copyright (c) 2008-2013 EMC Corporation
* All Rights Reserved
*/
package com.emc.storageos.api.service.impl.resource.utils;
import com.emc.storageos.services.util.StorageDriverManager;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.emc.storageos.db.client.DbClient;
import com.emc.storageos.db.client.model.StringSet;
import com.emc.storageos.db.client.model.StringSetMap;
import com.emc.storageos.db.client.model.VirtualPool;
import com.emc.storageos.db.exceptions.DatabaseException;
import com.emc.storageos.model.vpool.VirtualPoolCommonParam;
import com.emc.storageos.model.vpool.VirtualPoolUpdateParam;
/**
* Simple Validator framework built around CoS Attributes, using Chain Of Responsibility technique
*
*/
public abstract class VirtualPoolValidator<C extends VirtualPoolCommonParam, U extends VirtualPoolUpdateParam> {
private StorageDriverManager storageDriverManager = (StorageDriverManager)StorageDriverManager.
getApplicationContext().getBean(StorageDriverManager.STORAGE_DRIVER_MANAGER);
protected Logger _logger = LoggerFactory.getLogger(VirtualPoolValidator.class);
public static final String NONE = "NONE";
protected VirtualPoolValidator _nextValidator;
public abstract void setNextValidator(VirtualPoolValidator validator);
/**
* extract value from a String Set
* This method is used, to get value from a StringSet of size 1.
*
* @param key
* @param volumeInformation
* @return String
*/
protected String extractValueFromStringSet(String key, StringSetMap volumeInformation) {
try {
StringSet availableValueSet = volumeInformation.get(key);
if (null != availableValueSet) {
for (String value : availableValueSet) {
return value;
}
}
} catch (Exception e) {
_logger.error(e.getMessage(), e);
}
return null;
}
/**
* get Value from String Set
*
* @param key
* @param volumeInformation
* @return
*/
protected StringSet getVolumeInformation(String key, StringSetMap volumeInformation) {
try {
StringSet availableValueSet = volumeInformation.get(key);
return availableValueSet;
} catch (Exception e) {
_logger.error(e.getMessage(), e);
}
return null;
}
/**
* validate CoS Update parameters
*
* @param cos
* @param updateParam
* @param dbClient
* @throws DatabaseException
*/
public void validateVirtualPoolUpdateParam(VirtualPool cos, U updateParam, DbClient dbClient)
throws DatabaseException {
if (isUpdateAttributeOn(updateParam)) {
validateVirtualPoolUpdateAttributeValue(cos, updateParam, dbClient);
}
if (null != _nextValidator) {
_nextValidator.validateVirtualPoolUpdateParam(cos, updateParam, dbClient);
}
}
protected abstract void validateVirtualPoolUpdateAttributeValue(VirtualPool cos, U updateParam, DbClient dbClient);
protected abstract boolean isCreateAttributeOn(C createParam);
/**
* validate CoS Create parameters
*
* @param createParam
* @param dbClient
* @throws DatabaseException
*/
public void validateVirtualPoolCreateParam(C createParam, DbClient dbClient)
throws DatabaseException {
if (isCreateAttributeOn(createParam)) {
validateVirtualPoolCreateAttributeValue(createParam, dbClient);
}
if (null != _nextValidator) {
_nextValidator.validateVirtualPoolCreateParam(createParam, dbClient);
}
}
protected abstract void validateVirtualPoolCreateAttributeValue(
C createParam, DbClient dbClient);
protected abstract boolean isUpdateAttributeOn(U updateParam);
protected StorageDriverManager getStorageDriverManager() {
return storageDriverManager;
}
}