/*
* Copyright (c) 2016 EMC Corporation
* All Rights Reserved
*/
package com.emc.storageos.volumecontroller.impl.validators.smis.vmax;
import com.emc.storageos.volumecontroller.impl.validators.ChainingValidator;
import com.emc.storageos.volumecontroller.impl.validators.DefaultValidator;
import com.emc.storageos.volumecontroller.impl.validators.Validator;
import com.emc.storageos.volumecontroller.impl.validators.ValidatorLogger;
import com.emc.storageos.volumecontroller.impl.validators.contexts.ExportMaskValidationContext;
import com.emc.storageos.volumecontroller.impl.validators.smis.AbstractSMISValidator;
import com.emc.storageos.volumecontroller.impl.validators.smis.AbstractSMISValidatorFactory;
import com.emc.storageos.volumecontroller.impl.validators.smis.common.ExportMaskInitiatorsValidator;
import com.emc.storageos.volumecontroller.impl.validators.smis.common.ExportMaskVolumesValidator;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* Factory class for creating Vmax-specific validators. The theme for each factory method is
* to create a {@link ValidatorLogger} instance to share with any new {@link Validator}
* instances. Each validator can use this logger to report validation failures.
* {@link DefaultValidator} and {@link ChainingValidator} will throw an exception if the logger
* holds any errors.
*/
public class VmaxSystemValidatorFactory extends AbstractSMISValidatorFactory {
private static final Logger log = LoggerFactory.getLogger(VmaxSystemValidatorFactory.class);
@Override
public AbstractSMISValidator createExportMaskVolumesValidator(ExportMaskValidationContext ctx) {
return new ExportMaskVolumesValidator(ctx.getStorage(), ctx.getExportMask(), ctx.getBlockObjects());
}
@Override
public AbstractSMISValidator createExportMaskInitiatorValidator(ExportMaskValidationContext ctx) {
// Check to see if validation makes sense to perform for this export mask
if (performInitiatorValidation(ctx.getExportMask())) {
return new ExportMaskInitiatorsValidator(ctx.getStorage(), ctx.getExportMask(), ctx.getInitiators());
}
return truthyValidator;
}
@Override
public AbstractSMISValidator createMultipleExportMasksForBlockObjectsValidator(ExportMaskValidationContext ctx) {
return new MultipleVmaxMaskForVolumesValidator(ctx.getStorage(), ctx.getExportMask(), ctx.getBlockObjects());
}
@Override
public AbstractSMISValidator createMultipleExportMasksForInitiatorsValidator(ExportMaskValidationContext ctx) {
return new MultipleVmaxMaskForInitiatorsValidator(ctx.getStorage(), ctx.getExportMask(), ctx.getInitiators());
}
@Override
public ValidatorLogger createValidatorLogger(String validatedObjectName, String storageSystemName) {
return new ValidatorLogger(log, validatedObjectName, storageSystemName);
}
}