/*
* Copyright (c) 2016 EMC Corporation
* All Rights Reserved
*/
package com.emc.storageos.volumecontroller.impl.validators.xtremio;
import com.emc.storageos.db.client.DbClient;
import com.emc.storageos.db.client.model.ExportMask;
import com.emc.storageos.db.client.model.StorageSystem;
import com.emc.storageos.exceptions.DeviceControllerException;
import com.emc.storageos.volumecontroller.impl.validators.Validator;
import com.emc.storageos.volumecontroller.impl.validators.ValidatorConfig;
import com.emc.storageos.volumecontroller.impl.validators.ValidatorLogger;
import com.emc.storageos.volumecontroller.impl.validators.contexts.ExceptionContext;
import com.emc.storageos.xtremio.restapi.XtremIOClientFactory;
/**
* Abstract super-class for XtremIO validators, providing convenience
* methods for external dependencies set on the factory.
*/
public abstract class AbstractXtremIOValidator implements Validator {
public static final String NO_MATCH = "<no match>";
private XtremioSystemValidatorFactory factory;
private ValidatorLogger logger;
protected final StorageSystem storage;
protected final ExportMask exportMask;
protected boolean errorOnMismatch = true;
protected String id = null; // identifying string for ExportMask
private ExceptionContext exceptionContext;
public AbstractXtremIOValidator(StorageSystem storage, ExportMask exportMask) {
this.storage = storage;
this.exportMask = exportMask;
id = String.format("%s (%s)(%s)", exportMask.getMaskName(), exportMask.getNativeId(), exportMask.getId().toString());
}
public void setFactory(XtremioSystemValidatorFactory factory) {
this.factory = factory;
}
public ValidatorLogger getLogger() {
return logger;
}
public void setLogger(ValidatorLogger logger) {
this.logger = logger;
}
public DbClient getDbClient() {
return factory.getDbClient();
}
public ValidatorConfig getConfig() {
return factory.getConfig();
}
public XtremIOClientFactory getClientFactory() {
return factory.getClientFactory();
}
public void setErrorOnMismatch(boolean errorOnMismatch) {
this.errorOnMismatch = errorOnMismatch;
}
public void setExceptionContext(ExceptionContext exceptionContext) {
this.exceptionContext = exceptionContext;
}
public void checkForErrors() {
if (errorOnMismatch && getLogger().hasErrors() && shouldThrowException()) {
throw DeviceControllerException.exceptions.validationError(
"Export Mask", getLogger().getMsgs().toString(), ValidatorLogger.CONTACT_EMC_SUPPORT);
}
}
private boolean shouldThrowException() {
return getConfig().isValidationEnabled() && (exceptionContext == null || exceptionContext.isAllowExceptions());
}
}