package org.ovirt.engine.ui.uicommonweb.models.hosts;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import org.ovirt.engine.core.common.businessentities.network.BondMode;
import org.ovirt.engine.core.compat.KeyValuePairCompat;
import org.ovirt.engine.ui.uicommonweb.models.EntityModel;
import org.ovirt.engine.ui.uicommonweb.models.hosts.network.BondNetworkInterfaceModel;
import org.ovirt.engine.ui.uicompat.ConstantsManager;
public class SetupNetworksJoinBondsModel extends SetupNetworksBondModel {
private List<Entry<String, EntityModel<String>>> bondOptions = new ArrayList<>();
private Map<String, Entry<String, EntityModel<String>>> pairForBondOption = new HashMap<>();
public SetupNetworksJoinBondsModel(List<String> freeBonds,
BondNetworkInterfaceModel source,
BondNetworkInterfaceModel target,
boolean doesBondHaveVmNetworkAttached) {
super(doesBondHaveVmNetworkAttached);
setTitle(ConstantsManager.getInstance().getConstants().joinBondsTitle());
Set<String> availableBonds = new HashSet<>();
availableBonds.addAll(freeBonds);
availableBonds.add(source.getName());
availableBonds.add(target.getName());
getBond().setItems(availableBonds);
getBond().setSelectedItem(target.getName());
bondOptions.addAll(getBondingOptions().getItems());
for (Entry<String, EntityModel<String>> pair : bondOptions) {
pairForBondOption.put(getBondOptionForPair(pair), pair);
}
addBondOptionIfMissing(source.getBondOptions(), doesBondHaveVmNetworkAttached);
addBondOptionIfMissing(target.getBondOptions(), doesBondHaveVmNetworkAttached);
getBondingOptions().setItems(bondOptions);
getBondingOptions().setSelectedItem(pairForBondOption.get(target.getBondOptions()));
}
private void addBondOptionIfMissing(String candidateOption, boolean doesBondHaveVmNetworkAttached) {
if (doesBondHaveVmNetworkAttached && !BondMode.isBondModeValidForVmNetwork(candidateOption)){
return;
}
if (!pairForBondOption.containsKey(candidateOption)) {
EntityModel<String> entityModel = new EntityModel<>();
entityModel.setEntity(candidateOption);
Entry<String, EntityModel<String>> newPair = new KeyValuePairCompat<>("custom", entityModel); //$NON-NLS-1$
bondOptions.add(newPair);
pairForBondOption.put(candidateOption, newPair);
}
}
private String getBondOptionForPair(Entry<String, EntityModel<String>> pair) {
String res = pair.getKey();
if ("custom".equals(res)) { //$NON-NLS-1$
return pair.getValue().getEntity();
}
return res;
}
}