/*
* Copyright (c) 2008-2015 EMC Corporation
* All Rights Reserved
*/
package com.emc.storageos.volumecontroller.impl.plugins.discovery.smis.processor.detailedDiscovery;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import javax.cim.CIMObjectPath;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.emc.storageos.db.client.DbClient;
import com.emc.storageos.db.client.model.RemoteDirectorGroup;
import com.emc.storageos.plugins.BaseCollectionException;
import com.emc.storageos.plugins.common.Constants;
import com.emc.storageos.plugins.common.domainmodel.Operation;
import com.emc.storageos.volumecontroller.impl.NativeGUIDGenerator;
import com.emc.storageos.volumecontroller.impl.plugins.discovery.smis.processor.StorageProcessor;
import com.emc.storageos.volumecontroller.impl.smis.srdf.SRDFUtils;
public class RemoteConnCollectionToVolumeProcessor extends StorageProcessor {
private List<Object> args;
private Logger _log = LoggerFactory.getLogger(RemoteConnCollectionToVolumeProcessor.class);
private DbClient _dbClient;
@Override
public void processResult(Operation operation, Object resultObj,
Map<String, Object> keyMap) throws BaseCollectionException {
try {
@SuppressWarnings("unchecked")
final Iterator<CIMObjectPath> it = (Iterator<CIMObjectPath>) resultObj;
@SuppressWarnings("unchecked")
Map<String, RemoteMirrorObject> volumeToRAGroupMap = (Map<String, RemoteMirrorObject>) keyMap
.get(Constants.UN_VOLUME_RAGROUP_MAP);
_dbClient = (DbClient) keyMap.get(Constants.dbClient);
CIMObjectPath raGroupPath = getObjectPathfromCIMArgument(args);
String ragGroupId = NativeGUIDGenerator.generateRAGroupNativeGuid(raGroupPath);
_log.debug("RA Group Id :" + ragGroupId);
RemoteDirectorGroup remoteGroup = getRAGroupUriFromDB(_dbClient, ragGroupId);
if (null == remoteGroup) {
_log.warn("RA Group {} not found", ragGroupId);
return;
}
boolean is80Provider = keyMap.containsKey(Constants.IS_NEW_SMIS_PROVIDER)
&& Boolean.valueOf(keyMap.get(Constants.IS_NEW_SMIS_PROVIDER).toString());
RemoteDirectorGroup targetRemoteGroup = SRDFUtils.getAssociatedTargetRemoteDirectorGroup(_dbClient,
is80Provider, ragGroupId);
while (it.hasNext()) {
CIMObjectPath volumePath = it.next();
RemoteMirrorObject rmObj = new RemoteMirrorObject();
addPath(keyMap, operation.getResult(), volumePath);
String unManagedVolumeNativeGuid = getUnManagedVolumeNativeGuidFromVolumePath(volumePath);
// Changes to copy mode in RemoteDirectorGroup is updated in StorageSynchronizedProcessor
rmObj.setCopyMode(remoteGroup.getSupportedCopyMode());
rmObj.setSourceRaGroupUri(remoteGroup.getId());
if (targetRemoteGroup != null) {
rmObj.setTargetRaGroupUri(targetRemoteGroup.getId());
}
if (!volumeToRAGroupMap.containsKey(unManagedVolumeNativeGuid)) {
volumeToRAGroupMap.put(unManagedVolumeNativeGuid, rmObj);
}
}
} catch (Exception e) {
_log.error("Updating Copy Mode for UnManaged Volumes failed", e);
}
}
@Override
protected void setPrerequisiteObjects(List<Object> inputArgs)
throws BaseCollectionException {
args = inputArgs;
}
}