package org.ovirt.engine.core.vdsbroker.vdsbroker;
import java.util.ArrayList;
import java.util.List;
import javax.inject.Inject;
import org.ovirt.engine.core.common.businessentities.StorageServerConnections;
import org.ovirt.engine.core.common.vdscommands.DiscoverSendTargetsVDSCommandParameters;
import org.ovirt.engine.core.vdsbroker.storage.StorageConnectionHelper;
public class DiscoverSendTargetsVDSCommand<P extends DiscoverSendTargetsVDSCommandParameters>
extends VdsBrokerCommand<P> {
@Inject
private StorageConnectionHelper storageConnectionHelper;
protected IQNListReturn _result;
public DiscoverSendTargetsVDSCommand(P parameters) {
super(parameters);
}
@Override
protected void executeVdsBrokerCommand() {
_result = getBroker().discoverSendTargets(
storageConnectionHelper.createStructFromConnection(getParameters().getConnection(), getParameters().getVdsId()));
proceedProxyReturnValue();
setReturnValue(_result.isFullTargets() ? parseFullTargets(_result.getIqnList())
: parseTargets(_result.getIqnList()));
}
@Override
protected Status getReturnStatus() {
return _result.getStatus();
}
@Override
protected Object getReturnValueFromBroker() {
return _result;
}
private List<StorageServerConnections> parseFullTargets(List<String> iqnList) {
ArrayList<StorageServerConnections> connections = new ArrayList<>(iqnList.size());
for (String fullTarget : iqnList) {
StorageServerConnections con = StorageServerConnections.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<StorageServerConnections> parseTargets(List<String> iqnList) {
List<StorageServerConnections> connections = new ArrayList<>(iqnList.size());
for (String iqn : iqnList) {
StorageServerConnections con = StorageServerConnections.copyOf(getParameters().getConnection());
con.setIqn(iqn);
connections.add(con);
}
return connections;
}
}