package org.ovirt.engine.ui.uicommonweb.models.hosts; import java.util.ArrayList; import java.util.List; import org.ovirt.engine.core.common.businessentities.Cluster; import org.ovirt.engine.core.common.businessentities.VDS; import org.ovirt.engine.core.common.businessentities.VDSStatus; import org.ovirt.engine.core.compat.Guid; import org.ovirt.engine.ui.uicommonweb.dataprovider.AsyncDataProvider; import org.ovirt.engine.ui.uicommonweb.models.ListModel; import org.ovirt.engine.ui.uicommonweb.validation.IValidation; import org.ovirt.engine.ui.uicommonweb.validation.NotEmptyValidation; import org.ovirt.engine.ui.uicompat.Event; import org.ovirt.engine.ui.uicompat.EventArgs; @SuppressWarnings("unused") public class MoveHost extends ListModel<MoveHostData> { private ListModel<Cluster> privateCluster; public ListModel<Cluster> getCluster() { return privateCluster; } private void setCluster(ListModel<Cluster> value) { privateCluster = value; } private ArrayList<MoveHostData> privateSelectedHosts; public ArrayList<MoveHostData> getSelectedHosts() { return privateSelectedHosts; } public void setSelectedHosts(ArrayList<MoveHostData> value) { privateSelectedHosts = value; } private boolean isMultiSelection = true; public boolean isMultiSelection() { return isMultiSelection; } public void setMultiSelection(boolean isMultiSelection) { this.isMultiSelection = isMultiSelection; } public MoveHost() { setCluster(new ListModel<Cluster>()); getCluster().getSelectedItemChangedEvent().addListener(this); } private void cluster_SelectedItemChanged() { if (getCluster().getSelectedItem() != null) { AsyncDataProvider.getInstance().getHostList(new AsyncQuery<>(hosts -> postGetHostList(hosts))); } } private void postGetHostList(List<VDS> hosts) { Cluster cluster = getCluster().getSelectedItem(); ArrayList<MoveHostData> items = new ArrayList<>(); for (VDS vds : hosts) { if (!cluster.getId().equals(vds.getClusterId()) && (vds.getStatus() == VDSStatus.Maintenance || vds.getStatus() == VDSStatus.PendingApproval) && vds.getSupportedClusterVersionsSet().contains(cluster.getCompatibilityVersion())) { MoveHostData entity = new MoveHostData(vds); entity.setActivateHost(true); items.add(entity); } } ArrayList<Guid> previouslySelectedHostIDs = new ArrayList<>(); if (getItems() != null) { for (MoveHostData entity : getItems()) { if (entity.getIsSelected()) { previouslySelectedHostIDs.add(entity.getEntity().getId()); } } } setItems(items); for (MoveHostData entity : items) { entity.setIsSelected(previouslySelectedHostIDs.contains(entity.getEntity().getId())); } } @Override public void eventRaised(Event<? extends EventArgs> ev, Object sender, EventArgs args) { super.eventRaised(ev, sender, args); if (ev.matchesDefinition(selectedItemChangedEventDefinition) && sender == getCluster()) { cluster_SelectedItemChanged(); } } public boolean validate() { getCluster().validateSelectedItem(new IValidation[] { new NotEmptyValidation() }); return getCluster().getIsValid(); } }