/* * Copyright (c) 2016 EMC Corporation * All Rights Reserved */ package com.emc.storageos.volumecontroller.impl.validators.smis.common; import static com.emc.storageos.db.client.util.CommonTransformerFunctions.fctnInitiatorToPortName; import static com.emc.storageos.volumecontroller.impl.smis.SmisConstants.CP_SE_STORAGE_HARDWARE_ID; import static com.emc.storageos.volumecontroller.impl.smis.SmisConstants.CP_STORAGE_ID; import java.util.Collection; import java.util.Set; 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.google.common.base.Function; import com.google.common.collect.Collections2; import com.google.common.collect.Sets; /** * This subclass of {@link AbstractExportMaskValidator} will: * 1) Query expected {@link Initiator} instances and transform them into their respective port names. * 2) Query SMI-S for SE_StorageHardwareID.StorageID instance properties associated with the given export mask * and normalize them. */ public class ExportMaskInitiatorsValidator extends AbstractExportMaskValidator { private final Collection<Initiator> expectedInitiators; public ExportMaskInitiatorsValidator(StorageSystem storage, ExportMask exportMask, Collection<Initiator> expectedInitiators) { super(storage, exportMask, FIELD_INITIATORS); this.expectedInitiators = expectedInitiators; } @Override protected String getAssociatorProperty() { return CP_STORAGE_ID; } @Override protected String getAssociatorClass() { return CP_SE_STORAGE_HARDWARE_ID; } @Override protected Function<? super String, String> getHardwareTransformer() { return new Function<String, String>() { @Override public String apply(String input) { return Initiator.normalizePort(input); } }; } @Override protected Set<String> getDatabaseResources() { if (expectedInitiators == null || expectedInitiators.isEmpty()) { return Sets.newHashSet(); } Collection<String> transformed = Collections2.transform(expectedInitiators, fctnInitiatorToPortName()); return Sets.newHashSet(transformed); } }