/*
* Copyright (c) 2015 EMC Corporation
* All Rights Reserved
*/
package com.emc.storageos.volumecontroller.impl.smis;
import java.net.URI;
import java.util.HashMap;
import java.util.List;
import javax.cim.CIMArgument;
import javax.cim.CIMInstance;
import javax.cim.CIMObjectPath;
import javax.cim.CIMProperty;
import javax.wbem.CloseableIterator;
import com.emc.storageos.db.client.model.BlockObject;
import com.emc.storageos.db.client.model.ExportMask;
import com.emc.storageos.db.client.model.RemoteDirectorGroup;
import com.emc.storageos.db.client.model.StoragePool;
import com.emc.storageos.db.client.model.StorageSystem;
/**
* Created by bibbyi1 on 3/3/2015.
*/
public interface CIMObjectPathFactory extends SmisConstants {
String prefixWithSystemName(String str);
String prefixWithParamName(String str);
CIMObjectPath getCimObjectPathFromOutputArgs(CIMArgument[] outputArguments, String key);
Object getFromOutputArgs(CIMArgument[] outputArguments, String key);
CIMObjectPath[] getProtocolControllersFromOutputArgs(CIMArgument[] outputArguments);
CIMObjectPath getElementCompositionSvcPath(StorageSystem storageDevice);
CIMObjectPath getConfigSvcPath(StorageSystem storageDevice);
CIMObjectPath getStorageSynchronized(StorageSystem sourceSystem, BlockObject source, StorageSystem targetSystem, BlockObject target);
CIMObjectPath getGroupSynchronized(CIMObjectPath sourceGroup, CIMObjectPath targetGroup);
CIMObjectPath getStorageGroupObjectPath(String storageGroupName, StorageSystem storage) throws Exception;
CIMObjectPath getControllerConfigSvcPath(StorageSystem storageDevice);
CIMObjectPath getTierPolicySvcPath(StorageSystem storageDevice);
CIMObjectPath getTierPolicyRulePath(StorageSystem storageDevice, String policyName);
CIMObjectPath getControllerReplicationSvcPath(StorageSystem storageDevice);
CIMObjectPath getStorageProtectionSvcPath(StorageSystem storageDevice);
CIMObjectPath getReplicationServiceCapabilitiesPath(StorageSystem storageDevice);
CIMObjectPath getSeSystemRegistrationService(StorageSystem storage);
CIMObjectPath[] getClarProtocolControllers(StorageSystem storageDevice, String protocolControllerName) throws Exception;
CIMObjectPath[] getVolumePaths(StorageSystem storageDevice, String[] volumeNames) throws Exception;
CIMObjectPath[] getTargetPortPaths(StorageSystem storageDevice, List<URI> targetURIList) throws Exception;
CIMObjectPath[] getInitiatorPaths(StorageSystem storageDevice, String[] initiatorNames) throws Exception;
/**
* Gets the map of initiator to initiator path.
*
* @param storageDevice reference to storage system
* @param initiatorNames list of initiator names
* @return map of initiator to initiatorPath
* @throws Exception
*/
HashMap<String, CIMObjectPath> getInitiatorToInitiatorPath(StorageSystem storageDevice, List<String> initiatorNames)
throws Exception;
String getMaskingGroupName(StorageSystem storageDevice, CIMObjectPath groupPath);
CIMObjectPath getMaskingGroupPath(StorageSystem storageDevice, String groupName, MASKING_GROUP_TYPE groupType) throws Exception;
CIMObjectPath getMaskingViewPath(StorageSystem storageDevice, String groupName);
CIMObjectPath getLunMaskingProtocolControllerPath(StorageSystem storage,
ExportMask exportMask);
CIMObjectPath getBlockObjectPath(StorageSystem storage, StorageSystem source, BlockObject blockObject);
CIMObjectPath getBlockObjectPath(StorageSystem storage, BlockObject blockObject);
CIMObjectPath getVolumePath(StorageSystem storage, String nativeId);
CIMObjectPath getReplicationGroupPath(StorageSystem storage, String groupName);
/**
* Gets the replication group path.
*
* @param activeProviderStorageProxy can be a proxy StorageSystem that is used only to reference an active StorageProvider
* to lookup a replication group for the array referenced by serialNumber.
* @param serialNumber the serial number of the storage system which has this group
* @param groupName the Replication group name
* @return the replication group path
*/
CIMObjectPath getReplicationGroupPath(StorageSystem activeProviderStorageProxy, String serialNumber, String groupName);
CIMObjectPath getReplicationGroupObjectPath(StorageSystem storage, String instanceId);
CIMObjectPath getSyncAspectPath(StorageSystem storage, String aspectInstanceId);
CIMObjectPath getStoragePoolPath(StorageSystem storage, StoragePool storagePool);
CIMObjectPath getPoolSettingPath(StorageSystem storage, String poolSettingID);
CIMObjectPath getSyncSettingsPath(StorageSystem storage, CIMObjectPath volumePath, String aspectInstanceId);
CIMObjectPath getGroupSynchronizedPath(StorageSystem storage, String consistencyGroupName, String snapGroupName);
CIMObjectPath getSyncAspectForSourceGroupPath(StorageSystem storage, String aspectInstanceId);
CIMObjectPath getGroupSynchronizedSettingsPath(StorageSystem storage, String groupName, String settingsInstance);
CloseableIterator<CIMObjectPath> getSyncObjects(StorageSystem storage, BlockObject subject);
CIMObjectPath getSyncObject(StorageSystem storage, BlockObject subject);
CIMObjectPath getStorageSystem(StorageSystem storage);
String getSystemName(StorageSystem system);
String getPoolName(StorageSystem system, String poolID);
// TODO: check if this method is used at all if not delete it
String getProcessorName(StorageSystem system, String processorName);
CIMObjectPath objectPath(String namespace, String name, CIMProperty[] keys);
CIMObjectPath objectPath(String instanceId);
CIMObjectPath getStorageHardwareIDManagementService(StorageSystem storage);
CIMObjectPath getPrivilegeManagementService(StorageSystem storage);
CIMInstance getStoragePoolVdevSettings(CIMObjectPath setting);
CIMObjectPath getRemoteReplicationCollection(StorageSystem system,
RemoteDirectorGroup group);
CIMObjectPath getReplicationSettingObjectPathFromDefault(CIMInstance settingInstance);
}