package org.ovirt.engine.core.vdsbroker.vdsbroker; import java.util.ArrayList; import java.util.List; import org.ovirt.engine.core.common.businessentities.storage_server_connections; import org.ovirt.engine.core.common.vdscommands.DiscoverSendTargetsVDSCommandParameters; public class DiscoverSendTargetsVDSCommand<P extends DiscoverSendTargetsVDSCommandParameters> extends VdsBrokerCommand<P> { protected IQNListReturnForXmlRpc _result; public DiscoverSendTargetsVDSCommand(P parameters) { super(parameters); } @Override protected void ExecuteVdsBrokerCommand() { _result = getBroker().discoverSendTargets( ConnectStorageServerVDSCommand.CreateStructFromConnection(getParameters().getConnection())); ProceedProxyReturnValue(); setReturnValue(_result.isFullTargets() ? parseFullTargets(_result.getIqnList()) : parseTargets(_result.getIqnList())); } @Override protected StatusForXmlRpc getReturnStatus() { return _result.mStatus; } @Override protected Object getReturnValueFromBroker() { return _result; } private List<storage_server_connections> parseFullTargets(List<String> iqnList) { ArrayList<storage_server_connections> connections = new ArrayList<storage_server_connections>(iqnList.size()); for (String fullTarget : iqnList) { storage_server_connections con = storage_server_connections.copyOf(getParameters().getConnection()); // fullTarget format: <ip>:<port>, <portal> <targetName> // e.g 10.35.104.8:3600,1 blue-20G String[] tokens = fullTarget.split(","); String[] address = tokens[0].split(":"); String[] literals = tokens[1].split(" "); con.setconnection(address[0]); con.setport(address[1]); con.setportal(literals[0]); con.setiqn(literals[1]); connections.add(con); } return connections; } private List<storage_server_connections> parseTargets(List<String> iqnList) { List<storage_server_connections> connections = new ArrayList<storage_server_connections>(iqnList.size()); for (String iqn : iqnList) { storage_server_connections con = storage_server_connections.copyOf(getParameters().getConnection()); con.setiqn(iqn); connections.add(con); } return connections; } }