package org.ovirt.engine.ui.uicommonweb.models.profiles; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; 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.VnicProfileView; import org.ovirt.engine.core.common.mode.ApplicationMode; import org.ovirt.engine.core.common.queries.IdQueryParameters; import org.ovirt.engine.core.common.queries.VdcQueryReturnValue; import org.ovirt.engine.core.common.queries.VdcQueryType; import org.ovirt.engine.core.compat.Guid; import org.ovirt.engine.ui.frontend.Frontend; 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.CommonModel; 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.vms.RemoveVnicProfileModel; import org.ovirt.engine.ui.uicommonweb.place.WebAdminApplicationPlaces; import org.ovirt.engine.ui.uicompat.ConstantsManager; import com.google.inject.Inject; import com.google.inject.Provider; public class VnicProfileListModel extends ListWithSimpleDetailsModel<VnicProfileView, VnicProfileView> implements ISupportSystemTreeContext { private UICommand newCommand; private UICommand editCommand; private UICommand removeCommand; private SystemTreeItemModel systemTreeSelectedItem; private final Provider<CommonModel> commonModelProvider; @Inject public VnicProfileListModel(final Provider<CommonModel> commonModelProvider, final VnicProfileVmListModel vNicProfileVmListModel, final VnicProfileTemplateListModel vNicProfileTemplateListModel, final PermissionListModel<VnicProfileView> permissionListModel) { this.commonModelProvider = commonModelProvider; setDetailList(vNicProfileVmListModel, vNicProfileTemplateListModel, permissionListModel); setTitle(ConstantsManager.getInstance().getConstants().vnicProfilesTitle()); setHelpTag(HelpTag.vnicProfiles); setApplicationPlace(WebAdminApplicationPlaces.vnicProfileMainTabPlace); setHashName("vnicProfiles"); //$NON-NLS-1$) setDefaultSearchString("VnicProfile:"); //$NON-NLS-1$ setSearchString(getDefaultSearchString()); // setSearchObjects(new String[] { SearchObjects.PROFILE_OBJ_NAME, SearchObjects.PROFILE_PLU_OBJ_NAME }); setAvailableInModes(ApplicationMode.VirtOnly); setComparator(Linq.VnicProfileViewComparator); setNewCommand(new UICommand("New", 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 VnicProfileVmListModel vNicProfileVmListModel, final VnicProfileTemplateListModel vNicProfileTemplateListModel, final PermissionListModel<VnicProfileView> permissionListModel) { List<HasEntity<VnicProfileView>> list = new ArrayList<>(); list.add(vNicProfileVmListModel); list.add(vNicProfileTemplateListModel); list.add(permissionListModel); setDetailModels(list); } public void newProfile() { if (getWindow() != null) { return; } StoragePool treeSelectedDc = getSelectedDc(); final VnicProfileModel profileModel = new NewVnicProfileModel(this, treeSelectedDc.getCompatibilityVersion(), treeSelectedDc.getId()); setWindow(profileModel); initNetworkList(profileModel); } public void edit() { final VnicProfileView profile = getSelectedItem(); if (getWindow() != null) { return; } StoragePool selectedDc = getSelectedDc(); final VnicProfileModel profileModel = new EditVnicProfileModel(this, profile.getCompatibilityVersion(), profile, selectedDc.getId()); setWindow(profileModel); initNetworkList(profileModel); } private StoragePool getSelectedDc() { SystemTreeItemModel treeSelectedItem = commonModelProvider.get().getSystemTree().getSelectedItem(); SystemTreeItemModel treeSelectedDc = SystemTreeItemModel.findAncestor(SystemTreeItemType.DataCenter, treeSelectedItem); return (StoragePool) treeSelectedDc.getEntity(); } public void remove() { if (getConfirmWindow() != null) { return; } ConfirmationModel model = new RemoveVnicProfileModel(this, getSelectedItems(), true); setConfirmWindow(model); } private void initNetworkList(final VnicProfileModel profileModel) { SystemTreeItemModel treeSelectedItem = commonModelProvider.get().getSystemTree().getSelectedItem(); SystemTreeItemModel treeSelectedNetwork = treeSelectedItem.getType() == SystemTreeItemType.Network ? treeSelectedItem : null; if (treeSelectedNetwork != null) { Network network = (Network) treeSelectedNetwork.getEntity(); profileModel.getNetwork().setItems(Arrays.asList(network)); profileModel.getNetwork().setSelectedItem(network); profileModel.getNetwork().setIsChangeable(false); return; } SystemTreeItemModel treeSelectedDc = treeSelectedItem.getType() == SystemTreeItemType.DataCenter ? treeSelectedItem : null; if (treeSelectedDc != null) { profileModel.startProgress(); StoragePool dc = (StoragePool) treeSelectedDc.getEntity(); IdQueryParameters queryParams = new IdQueryParameters(dc.getId()); Frontend.getInstance().runQuery(VdcQueryType.GetAllNetworks, queryParams, new AsyncQuery<VdcQueryReturnValue>(returnValue -> { Collection<Network> networks = returnValue.getReturnValue(); profileModel.getNetwork().setItems(networks); if (profileModel instanceof EditVnicProfileModel) { Network currentNetwork = findNetwork(profileModel.getProfile().getNetworkId(), networks); profileModel.getNetwork().setSelectedItem(currentNetwork); profileModel.getNetwork().setIsChangeable(false); } else { profileModel.getNetwork().setSelectedItem(Linq.firstOrNull(networks)); } profileModel.stopProgress(); })); } } private Network findNetwork(Guid networkId, Iterable<Network> networks) { for (Network network : networks) { if (networkId.equals(network.getId())) { return network; } } return null; } @Override public boolean isSearchStringMatch(String searchString) { return searchString.trim().toLowerCase().startsWith("profile"); //$NON-NLS-1$ } @Override protected void syncSearch() { // TODO - fix // SearchParameters tempVar = new SearchParameters(getSearchString(), SearchType.Profile, isCaseSensitiveSearch()); // tempVar.setMaxCount(getSearchPageSize()); // super.syncSearch(VdcQueryType.Search, tempVar); SystemTreeItemModel treeSelectedItem = commonModelProvider.get().getSystemTree().getSelectedItem(); if (treeSelectedItem == null) { return; } SystemTreeItemModel treeSelectedNetwork = treeSelectedItem.getType() == SystemTreeItemType.Network ? treeSelectedItem : null; if (treeSelectedNetwork != null) { Network network = (Network) treeSelectedNetwork.getEntity(); AsyncDataProvider.getInstance().getVnicProfilesByNetworkId(new SetRawItemsAsyncQuery(), network.getId()); return; } SystemTreeItemModel treeSelectedDc = treeSelectedItem.getType() == SystemTreeItemType.DataCenter ? treeSelectedItem : null; if (treeSelectedDc != null) { StoragePool dc = (StoragePool) treeSelectedDc.getEntity(); AsyncDataProvider.getInstance().getVnicProfilesByDcId(new SetRawItemsAsyncQuery(), dc.getId()); } } @Override protected void onSelectedItemChanged() { super.onSelectedItemChanged(); updateActionAvailability(); } @Override protected void selectedItemsChanged() { super.selectedItemsChanged(); updateActionAvailability(); } private void updateActionAvailability() { Collection<VnicProfileView> tempVar = getSelectedItems(); Collection<VnicProfileView> selectedItems = tempVar != null ? tempVar : new ArrayList(); getEditCommand().setIsExecutionAllowed(selectedItems.size() == 1); getRemoveCommand().setIsExecutionAllowed(selectedItems.size() > 0); } @Override public void executeCommand(UICommand command) { super.executeCommand(command); if (command == getNewCommand()) { newProfile(); } 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 "VnicProfileListModel"; //$NON-NLS-1$ } public UICommand getNewCommand() { return newCommand; } private void setNewCommand(UICommand value) { newCommand = 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; } }