package org.ovirt.engine.ui.uicommonweb.models.networks; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import org.ovirt.engine.core.common.businessentities.StoragePool; import org.ovirt.engine.core.common.businessentities.network.Network; import org.ovirt.engine.core.common.businessentities.network.NetworkView; import org.ovirt.engine.core.common.interfaces.SearchType; import org.ovirt.engine.core.common.queries.SearchParameters; import org.ovirt.engine.core.common.queries.VdcQueryType; import org.ovirt.engine.core.compat.Guid; import org.ovirt.engine.core.searchbackend.SearchObjects; import org.ovirt.engine.ui.uicommonweb.Linq; import org.ovirt.engine.ui.uicommonweb.UICommand; import org.ovirt.engine.ui.uicommonweb.dataprovider.AsyncDataProvider; import org.ovirt.engine.ui.uicommonweb.help.HelpTag; import org.ovirt.engine.ui.uicommonweb.models.ConfirmationModel; import org.ovirt.engine.ui.uicommonweb.models.HasEntity; import org.ovirt.engine.ui.uicommonweb.models.ISupportSystemTreeContext; import org.ovirt.engine.ui.uicommonweb.models.ListWithSimpleDetailsModel; import org.ovirt.engine.ui.uicommonweb.models.SystemTreeItemModel; import org.ovirt.engine.ui.uicommonweb.models.SystemTreeItemType; import org.ovirt.engine.ui.uicommonweb.models.configure.PermissionListModel; import org.ovirt.engine.ui.uicommonweb.models.datacenters.EditNetworkModel; import org.ovirt.engine.ui.uicommonweb.models.datacenters.NetworkModel; import org.ovirt.engine.ui.uicommonweb.models.datacenters.NewNetworkModel; import org.ovirt.engine.ui.uicommonweb.models.datacenters.RemoveNetworksModel; import org.ovirt.engine.ui.uicommonweb.place.WebAdminApplicationPlaces; import org.ovirt.engine.ui.uicompat.ConstantsManager; import org.ovirt.engine.ui.uicompat.UIConstants; import com.google.inject.Inject; import com.google.inject.Provider; public class NetworkListModel extends ListWithSimpleDetailsModel<NetworkView, NetworkView> implements ISupportSystemTreeContext { private UICommand newCommand; private UICommand importCommand; private UICommand editCommand; private UICommand removeCommand; private SystemTreeItemModel systemTreeSelectedItem; private final NetworkExternalSubnetListModel networkExternalSubnetListModel; private final Provider<ImportNetworksModel> importNetworkModelProvider; @Inject public NetworkListModel(final Provider<ImportNetworksModel> importNetworkModelProvider, final NetworkExternalSubnetListModel networkExternalSubnetListModel, final NetworkGeneralModel networkGeneralModel, final NetworkProfileListModel networkProfileListModel, final NetworkClusterListModel networkClusterListModel, final NetworkHostListModel networkHostListModel, final NetworkVmListModel networkVmListModel, final NetworkTemplateListModel networkTemplateListModel, final PermissionListModel<NetworkView> permissionListModel) { this.networkExternalSubnetListModel = networkExternalSubnetListModel; this.importNetworkModelProvider = importNetworkModelProvider; setDetailList(networkGeneralModel, networkProfileListModel, networkClusterListModel, networkHostListModel, networkVmListModel, networkTemplateListModel, permissionListModel); setTitle(ConstantsManager.getInstance().getConstants().networksTitle()); setHelpTag(HelpTag.networks); setApplicationPlace(WebAdminApplicationPlaces.networkMainTabPlace); setHashName("networks"); //$NON-NLS-1$ setDefaultSearchString("Network:"); //$NON-NLS-1$ setSearchString(getDefaultSearchString()); setSearchObjects(new String[] { SearchObjects.NETWORK_OBJ_NAME, SearchObjects.NETWORK_PLU_OBJ_NAME }); setNewCommand(new UICommand("New", this)); //$NON-NLS-1$ setImportCommand(new UICommand("Import", this)); //$NON-NLS-1$ setEditCommand(new UICommand("Edit", this)); //$NON-NLS-1$ setRemoveCommand(new UICommand("Remove", this)); //$NON-NLS-1$ updateActionAvailability(); getSearchNextPageCommand().setIsAvailable(true); getSearchPreviousPageCommand().setIsAvailable(true); } private void setDetailList(final NetworkGeneralModel networkGeneralModel, final NetworkProfileListModel networkProfileListModel, final NetworkClusterListModel networkClusterListModel, final NetworkHostListModel networkHostListModel, final NetworkVmListModel networkVmListModel, final NetworkTemplateListModel networkTemplateListModel, final PermissionListModel<NetworkView> permissionListModel) { List<HasEntity<NetworkView>> list = new ArrayList<>(); list.add(networkGeneralModel); list.add(networkProfileListModel); list.add(networkExternalSubnetListModel); list.add(networkClusterListModel); list.add(networkHostListModel); list.add(networkVmListModel); list.add(networkTemplateListModel); list.add(permissionListModel); setDetailModels(list); } public void newNetwork() { if (getWindow() != null) { return; } final NetworkModel networkModel = new NewNetworkModel(this); setWindow(networkModel); initDcList(networkModel); } public void importNetworks() { if (getWindow() != null) { return; } setWindow(importNetworkModelProvider.get()); } public void edit() { final UIConstants constants = ConstantsManager.getInstance().getConstants(); final Network network = getSelectedItem(); if (getWindow() != null) { return; } final NetworkModel networkModel = new EditNetworkModel(network, this); setWindow(networkModel); initDcList(networkModel); if (getSystemTreeSelectedItem() != null && getSystemTreeSelectedItem().getType() == SystemTreeItemType.Network) { networkModel.getName().setIsChangeable(false); networkModel.getName().setChangeProhibitionReason(constants.cannotEditNameInTreeContext()); } } public void remove() { if (getConfirmWindow() != null) { return; } ConfirmationModel model = new RemoveNetworksModel(this); setConfirmWindow(model); } private void initDcList(final NetworkModel networkModel) { SystemTreeItemModel treeSelectedDc = SystemTreeItemModel.findAncestor(SystemTreeItemType.DataCenter, getSystemTreeSelectedItem()); if (treeSelectedDc != null) { StoragePool dc = (StoragePool) treeSelectedDc.getEntity(); networkModel.getDataCenters().setItems(Arrays.asList(dc)); networkModel.getDataCenters().setSelectedItem(dc); networkModel.getDataCenters().setIsChangeable(false); return; } // Get all data centers AsyncDataProvider.getInstance().getDataCenterList(new AsyncQuery<>(dataCenters -> { networkModel.getDataCenters().setItems(dataCenters); if (networkModel instanceof EditNetworkModel) { StoragePool currentDc = findDc(networkModel.getNetwork().getDataCenterId(), dataCenters); networkModel.getDataCenters().setSelectedItem(currentDc); } else { networkModel.getDataCenters().setSelectedItem(Linq.firstOrNull(dataCenters)); } })); } private StoragePool findDc(Guid dcId, List<StoragePool> dataCenters) { for (StoragePool dc : dataCenters) { if (dcId.equals(dc.getId())) { return dc; } } return null; } @Override protected void updateDetailsAvailability() { super.updateDetailsAvailability(); NetworkView network = getSelectedItem(); networkExternalSubnetListModel.setIsAvailable(network != null && network.isExternal()); } @Override public boolean isSearchStringMatch(String searchString) { return searchString.trim().toLowerCase().startsWith("network"); //$NON-NLS-1$ } @Override protected void syncSearch() { SearchParameters tempVar = new SearchParameters(applySortOptions(getSearchString()), SearchType.Network, isCaseSensitiveSearch()); tempVar.setMaxCount(getSearchPageSize()); super.syncSearch(VdcQueryType.Search, tempVar); } @Override public boolean supportsServerSideSorting() { return true; } @Override protected void onSelectedItemChanged() { super.onSelectedItemChanged(); updateActionAvailability(); } @Override protected void selectedItemsChanged() { super.selectedItemsChanged(); updateActionAvailability(); } private void updateActionAvailability() { List tempVar = getSelectedItems(); List selectedItems = (tempVar != null) ? tempVar : new ArrayList(); getEditCommand().setIsExecutionAllowed(selectedItems.size() == 1); getRemoveCommand().setIsExecutionAllowed(selectedItems.size() > 0); // System tree dependent actions. boolean isAvailable = !(getSystemTreeSelectedItem() != null && getSystemTreeSelectedItem().getType() == SystemTreeItemType.Network); getNewCommand().setIsAvailable(isAvailable); getRemoveCommand().setIsAvailable(isAvailable); } @Override public void executeCommand(UICommand command) { super.executeCommand(command); if (command == getNewCommand()) { newNetwork(); } else if (command == getImportCommand()) { importNetworks(); } else if (command == getEditCommand()) { edit(); } else if (command == getRemoveCommand()) { remove(); } } @Override public SystemTreeItemModel getSystemTreeSelectedItem() { return systemTreeSelectedItem; } @Override public void setSystemTreeSelectedItem(SystemTreeItemModel value) { if (systemTreeSelectedItem != value) { systemTreeSelectedItem = value; onSystemTreeSelectedItemChanged(); } } private void onSystemTreeSelectedItemChanged() { updateActionAvailability(); } @Override protected String getListName() { return "NetworkListModel"; //$NON-NLS-1$ } public UICommand getNewCommand() { return newCommand; } private void setNewCommand(UICommand value) { newCommand = value; } public UICommand getImportCommand() { return importCommand; } private void setImportCommand(UICommand value) { importCommand = value; } @Override public UICommand getEditCommand() { return editCommand; } private void setEditCommand(UICommand value) { editCommand = value; } public UICommand getRemoveCommand() { return removeCommand; } private void setRemoveCommand(UICommand value) { removeCommand = value; } }