package org.ovirt.engine.ui.uicommonweb.models; import java.util.ArrayList; import java.util.Collection; import org.ovirt.engine.core.common.businessentities.UserSession; import org.ovirt.engine.core.common.interfaces.SearchType; import org.ovirt.engine.core.common.mode.ApplicationMode; import org.ovirt.engine.core.common.queries.SearchParameters; import org.ovirt.engine.core.common.queries.VdcQueryType; import org.ovirt.engine.core.searchbackend.SearchObjects; import org.ovirt.engine.ui.uicommonweb.UICommand; import org.ovirt.engine.ui.uicommonweb.help.HelpTag; import org.ovirt.engine.ui.uicommonweb.place.WebAdminApplicationPlaces; import org.ovirt.engine.ui.uicompat.ConstantsManager; import com.google.inject.Inject; public class SessionListModel extends ListWithSimpleDetailsModel<UserSession, UserSession> implements ISupportSystemTreeContext { private static final String CMD_TERMINATE = "Terminate"; //$NON-NLS-1$ private UICommand terminateCommand; private SystemTreeItemModel systemTreeSelectedItem; @Inject public SessionListModel() { setTitle(ConstantsManager.getInstance().getConstants().userSessionsTitle()); setHelpTag(HelpTag.engine_sessions); setApplicationPlace(WebAdminApplicationPlaces.sessionMainTabPlace); setHashName("sessions"); //$NON-NLS-1$ setDefaultSearchString("Session:"); //$NON-NLS-1$ setSearchString(getDefaultSearchString()); setSearchObjects(new String[] { SearchObjects.SESSION_OBJ_NAME, SearchObjects.SESSION_PLU_OBJ_NAME }); setAvailableInModes(ApplicationMode.AllModes); setTerminateCommand(new UICommand(CMD_TERMINATE, this)); terminateActionAvailability(); getSearchNextPageCommand().setIsAvailable(true); getSearchPreviousPageCommand().setIsAvailable(true); } public UICommand getTerminateCommand() { return terminateCommand; } private void setTerminateCommand(UICommand value) { terminateCommand = value; } @Override protected String getListName() { return "SessionListModel"; //$NON-NLS-1$ } @Override public SystemTreeItemModel getSystemTreeSelectedItem() { return systemTreeSelectedItem; } @Override public void setSystemTreeSelectedItem(SystemTreeItemModel value) { if (systemTreeSelectedItem != value) { systemTreeSelectedItem = value; onSystemTreeSelectedItemChanged(); } } private void onSystemTreeSelectedItemChanged() { terminateActionAvailability(); } @Override protected void onSelectedItemChanged() { super.onSelectedItemChanged(); terminateActionAvailability(); } @Override protected void selectedItemsChanged() { super.selectedItemsChanged(); terminateActionAvailability(); } private void terminateActionAvailability() { Collection<UserSession> selectedSession = getSelectedItems(); Collection<UserSession> selectedItems = (selectedSession != null) ? selectedSession : new ArrayList<UserSession>(); getTerminateCommand().setIsExecutionAllowed(!selectedItems.isEmpty()); } @Override public boolean isSearchStringMatch(String searchString) { return searchString.trim().toLowerCase().startsWith("session"); //$NON-NLS-1$ } @Override protected void syncSearch() { SearchParameters searchParameters = new SearchParameters(applySortOptions(getSearchString()), SearchType.Session, isCaseSensitiveSearch()); searchParameters.setMaxCount(getSearchPageSize()); super.syncSearch(VdcQueryType.Search, searchParameters); } @Override public boolean supportsServerSideSorting() { return true; } private void terminateSession() { if (getConfirmWindow() != null) { return; } final TerminateSessionsModel confirmWindow = new TerminateSessionsModel(this); setConfirmWindow(confirmWindow); confirmWindow.initialize(); } @Override public void executeCommand(UICommand command) { super.executeCommand(command); if (command == getTerminateCommand()) { terminateSession(); } } }