/*
* Copyright (c) 2008-2014 EMC Corporation
* All Rights Reserved
*/
package com.emc.storageos.volumecontroller.impl.plugins.discovery.smis.processor.ibm.xiv;
import java.io.IOException;
import java.net.URI;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import javax.cim.CIMInstance;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.emc.storageos.db.client.DbClient;
import com.emc.storageos.db.client.model.StoragePort;
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.plugins.discovery.smis.processor.StorageEndPointProcessor;
public class XIVTCPProtocolEndPointProcessor extends StorageEndPointProcessor {
private Logger _logger = LoggerFactory.getLogger(XIVTCPProtocolEndPointProcessor.class);
private DbClient _dbClient;
private static final String PORTNUMBER = "portNumber";
private List<Object> args;
@Override
public void processResult(
Operation operation, Object resultObj, Map<String, Object> keyMap)
throws BaseCollectionException {
try {
@SuppressWarnings("unchecked")
final Iterator<CIMInstance> it = (Iterator<CIMInstance>) resultObj;
_dbClient = (DbClient) keyMap.get(Constants.dbClient);
while (it.hasNext()) {
CIMInstance tcpPointInstance = null;
StoragePort port = null;
try {
tcpPointInstance = it.next();
String portInstanceID = getObjectPathfromCIMArgument(args).toString();
port = _dbClient.queryObject(StoragePort.class, (URI) keyMap.get(portInstanceID));
updateTCPEndPointDetails(port, tcpPointInstance);
} catch (Exception e) {
_logger.warn("Port TCP End Point Discovery failed for {}-->{}", "",
getMessage(e));
}
}
} catch (Exception e) {
_logger.error("Port TCP End Point Discovery failed -->{}", getMessage(e));
}
}
/**
* update TCP Port Number details
*
* @param port
* @param tcpPointInstance
* @throws IOException
*/
private void updateTCPEndPointDetails(StoragePort port, CIMInstance tcpPointInstance) throws IOException {
if (null != port) {
port.setTcpPortNumber(Long.parseLong(getCIMPropertyValue(tcpPointInstance,
PORTNUMBER)));
_dbClient.persistObject(port);
}
}
@Override
protected void setPrerequisiteObjects(List<Object> inputArgs)
throws BaseCollectionException {
args = inputArgs;
}
}