package org.ovirt.engine.ui.uicommonweb.models.networks; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; import org.ovirt.engine.core.common.businessentities.Cluster; import org.ovirt.engine.core.common.businessentities.comparators.NameableComparator; import org.ovirt.engine.core.common.businessentities.network.Network; import org.ovirt.engine.core.common.businessentities.network.NetworkCluster; import org.ovirt.engine.core.common.businessentities.network.NetworkView; import org.ovirt.engine.core.common.queries.IdQueryParameters; import org.ovirt.engine.core.common.queries.VdcQueryType; import org.ovirt.engine.core.common.utils.PairQueryable; import org.ovirt.engine.ui.frontend.Frontend; import org.ovirt.engine.ui.uicommonweb.Cloner; import org.ovirt.engine.ui.uicommonweb.UICommand; import org.ovirt.engine.ui.uicommonweb.help.HelpTag; import org.ovirt.engine.ui.uicommonweb.models.SearchableListModel; import org.ovirt.engine.ui.uicommonweb.models.clusters.ClusterNetworkManageModel; import org.ovirt.engine.ui.uicommonweb.models.clusters.ClusterNetworkModel; import org.ovirt.engine.ui.uicompat.ConstantsManager; import org.ovirt.engine.ui.uicompat.PropertyChangedEventArgs; public class NetworkClusterListModel extends SearchableListModel<NetworkView, PairQueryable<Cluster, NetworkCluster>> { private UICommand manageCommand; private final Comparator<ClusterNetworkModel> manageModelComparator = Comparator.comparing(c -> c.getCluster().getName()); public NetworkClusterListModel() { setTitle(ConstantsManager.getInstance().getConstants().clustersTitle()); setHelpTag(HelpTag.clusters); setHashName("clusters"); //$NON-NLS-1$ setComparator(Comparator.comparing(PairQueryable::getFirst, new NameableComparator())); setManageCommand(new UICommand("Manage", this)); //$NON-NLS-1$ } public void manage() { if (getWindow() != null) { return; } ClusterNetworkManageModel manageModel = createManageList(); setWindow(manageModel); manageModel.setTitle(ConstantsManager.getInstance().getConstants().assignDetachNetworkTitle()); manageModel.setHelpTag(HelpTag.assign_network); manageModel.setHashName("assign_network"); //$NON-NLS-1$ } private ClusterNetworkManageModel createManageList() { List<ClusterNetworkModel> networkManageModelList = new ArrayList<>(); Iterable<PairQueryable<Cluster, NetworkCluster>> items = getItems(); for (PairQueryable<Cluster, NetworkCluster> item : items) { Network network = (Network) Cloner.clone(getEntity()); if (item.getSecond() != null) { network.setCluster((NetworkCluster) Cloner.clone(item.getSecond())); } ClusterNetworkModel networkManageModel = new ClusterNetworkModel(network) { @Override public String getDisplayedName() { return getCluster().getName(); } }; networkManageModel.setCluster((Cluster) Cloner.clone(item.getFirst())); networkManageModelList.add(networkManageModel); } Collections.sort(networkManageModelList, manageModelComparator); ClusterNetworkManageModel listModel = new ClusterNetworkManageModel(this) { @Override public boolean isMultiCluster() { return true; } }; listModel.setItems(networkManageModelList); return listModel; } @Override protected void onEntityChanged() { super.onEntityChanged(); getSearchCommand().execute(); } @Override public void search() { if (getEntity() != null) { super.search(); } } @Override protected void syncSearch() { if (getEntity() == null) { return; } IdQueryParameters params = new IdQueryParameters(getEntity().getId()); params.setRefresh(getIsQueryFirstTime()); Frontend.getInstance().runQuery(VdcQueryType.GetClustersAndNetworksByNetworkId, params, new SetItemsAsyncQuery()); } @Override protected void entityPropertyChanged(Object sender, PropertyChangedEventArgs e) { super.entityPropertyChanged(sender, e); if (e.propertyName.equals("name")) { //$NON-NLS-1$ getSearchCommand().execute(); } } @Override public void executeCommand(UICommand command) { super.executeCommand(command); if (command == getManageCommand()) { manage(); } } public UICommand getManageCommand() { return manageCommand; } private void setManageCommand(UICommand value) { manageCommand = value; } @Override protected String getListName() { return "NetworkClusterListModel"; //$NON-NLS-1$ } }