/* * Copyright (c) 2016 EMC Corporation * All Rights Reserved */ package com.emc.storageos.volumecontroller.impl.validators; import java.net.URI; import java.util.Collection; import java.util.List; import com.emc.storageos.db.client.model.BlockObject; import com.emc.storageos.db.client.model.BlockSnapshot; import com.emc.storageos.db.client.model.ExportMask; import com.emc.storageos.db.client.model.Initiator; import com.emc.storageos.db.client.model.StorageSystem; import com.emc.storageos.db.client.model.Volume; import com.emc.storageos.volumecontroller.impl.validators.contexts.ExportMaskValidationContext; /** * Abstract factory interface containing methods for building validators across various storage systems. */ public interface StorageSystemValidatorFactory { /** * Create an {@link Validator} instance for validating an export mask delete operation. * * @param ctx ExportMaskValidationContext * @return Validator */ Validator exportMaskDelete(ExportMaskValidationContext ctx); /** * Create an {@link Validator} instance for validating removal of a volume from an * export group. * * @param ctx ExportMaskValidationContext * @return */ Validator removeVolumes(ExportMaskValidationContext ctx); /** * Create an {@link Validator} instance for validating addition of initiators to an * export group. * * @param storage * @param exportMaskURI * @param initiators * @return */ Validator addVolumes(StorageSystem storage, URI exportMaskURI, Collection<Initiator> initiators); /** * Create an {@link Validator} instance for validating an export mask remove initiators operation * * @param ctx ExportMaskValidationContext * @return Validator */ Validator removeInitiators(ExportMaskValidationContext ctx); /** * Create an {@link Validator} instance for validating an export mask add initiators operation * * @param storage * @param exportMask * @param volumeURIList * @return */ Validator addInitiators(StorageSystem storage, ExportMask exportMask, Collection<URI> volumeURIList); /** * Create an {@link Validator} instance for validating a delete volumes operation. * * @param storage * @param volumes * @return */ Validator deleteVolumes(StorageSystem storage, Collection<Volume> volumes); /** * Validates the volumes for a single storage system. * * @param storageSystem * -- Storage System object * @param volumes * -- list of Volume objects belonging to that StorageSystem * @param delete * -- if true we are deleting, don't flag errors where entity is missing * @param remediate * -- if true, attempt remediation * @param checks * -- checks to be performed * @return -- list of any Volumes that were remediated */ List<Volume> volumes(StorageSystem storageSystem, List<Volume> volumes, boolean delete, boolean remediate, ValCk[] checks); /** * Create an {@link Validator} instance for validating an expand volume operation. * * @param storageSystem * @param volume * @return */ Validator expandVolumes(StorageSystem storageSystem, Volume volume); /** * Create an {@link Validator} instance for validating a create snapshot operation. * * @param storage * @param snapshot * @param volume * @return */ Validator createSnapshot(StorageSystem storage, BlockSnapshot snapshot, Volume volume); }