package org.ovirt.engine.ui.uicommonweb.models.hosts;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Set;
import java.util.SortedSet;
import java.util.TreeSet;
import org.ovirt.engine.core.common.businessentities.network.HostNicVfsConfig;
import org.ovirt.engine.core.common.businessentities.network.Network;
import org.ovirt.engine.core.compat.Guid;
import org.ovirt.engine.ui.uicommonweb.models.EntityModel;
import org.ovirt.engine.ui.uicommonweb.models.ListModel;
import org.ovirt.engine.ui.uicommonweb.validation.IValidation;
import org.ovirt.engine.ui.uicommonweb.validation.IntegerValidation;
import org.ovirt.engine.ui.uicommonweb.validation.NotEmptyValidation;
import org.ovirt.engine.ui.uicompat.ConstantsManager;
public class VfsConfigModel extends EntityModel<HostNicVfsConfig> {
private EntityModel<Integer> maxNumOfVfs = new EntityModel<>();
private EntityModel<Integer> numOfVfs = new EntityModel<>();
private ListModel<AllNetworksSelector> allNetworksAllowed = new ListModel<>();
private ListModel<VfsConfigNetwork> networks = new ListModel<>();
private VfsNicLabelModel labelsModel;
public VfsConfigModel() {
this(new HostNicVfsConfig(), Collections.<Network> emptyList(), new TreeSet<String>());
}
public VfsConfigModel(HostNicVfsConfig vfsConfig, List<Network> allClusterNetworks, SortedSet<String> dcLabels) {
setEntity(vfsConfig);
maxNumOfVfs.setEntity(vfsConfig.getMaxNumOfVfs());
numOfVfs.setEntity(vfsConfig.getNumOfVfs());
allNetworksAllowed.setItems(Arrays.asList(AllNetworksSelector.values()));
allNetworksAllowed.setSelectedItem(vfsConfig.isAllNetworksAllowed() ? AllNetworksSelector.allNetworkAllowed
: AllNetworksSelector.specificNetworks);
labelsModel = new VfsNicLabelModel(new ArrayList<>(vfsConfig.getNetworkLabels()), dcLabels);
initNetworks(allClusterNetworks);
}
public EntityModel<Integer> getNumOfVfs() {
return numOfVfs;
}
public void setNumOfVfs(EntityModel<Integer> numOfVfs) {
this.numOfVfs = numOfVfs;
}
public ListModel<AllNetworksSelector> getAllNetworksAllowed() {
return allNetworksAllowed;
}
public void setAllNetworksAllowed(ListModel<AllNetworksSelector> allNetworksAllowed) {
this.allNetworksAllowed = allNetworksAllowed;
}
public ListModel<VfsConfigNetwork> getNetworks() {
return networks;
}
public void setNetworks(ListModel<VfsConfigNetwork> networks) {
this.networks = networks;
}
public VfsNicLabelModel getLabelsModel() {
return labelsModel;
}
public void setLabelsModel(VfsNicLabelModel labels) {
this.labelsModel = labels;
}
public EntityModel<Integer> getMaxNumOfVfs() {
return maxNumOfVfs;
}
private void initNetworks(List<Network> allClusterNetworks) {
List<VfsConfigNetwork> vfsConfigNetworks = new ArrayList<>();
Set<Guid> attachedNetworks = getEntity().getNetworks();
for (Network network : allClusterNetworks) {
boolean isAttached = attachedNetworks.contains(network.getId());
VfsConfigNetwork vfsConfigNetwork =
new VfsConfigNetwork(isAttached, labelsModel, network);
vfsConfigNetworks.add(vfsConfigNetwork);
}
networks.setItems(vfsConfigNetworks);
}
public boolean validate() {
numOfVfs.validateEntity(new IValidation[] { new NotEmptyValidation(),
new IntegerValidation(0, getMaxNumOfVfs().getEntity()) });
labelsModel.validate();
return labelsModel.getIsValid() && numOfVfs.getIsValid();
}
public static enum AllNetworksSelector {
allNetworkAllowed(ConstantsManager.getInstance().getConstants().allNetworksAllowed()),
specificNetworks(ConstantsManager.getInstance().getConstants().specificNetworksAllowed());
private String description;
private AllNetworksSelector(String description) {
this.description = description;
}
@Override
public String toString() {
return description;
}
}
}