Yevgeny Zaspitsky has uploaded a new change for review. Change subject: webadmin: Add sessions main tab ......................................................................
webadmin: Add sessions main tab Add sessions main tab with ability to see list of active session and to terminate them. The can be selected through the system tree. Change-Id: Ide80e57411ff075f26cba84cc8a952a05343fdd6 Bug-Url: https://bugzilla.redhat.com/1025796 Signed-off-by: Yevgeny Zaspitsky <yzasp...@redhat.com> --- M frontend/webadmin/modules/gwt-common/src/main/resources/org/ovirt/engine/core/Common.gwt.xml M frontend/webadmin/modules/gwt-common/src/main/resources/org/ovirt/engine/core/SearchBackend.gwt.xml M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/help/HelpTag.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/CommonModel.java A frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/SessionListModel.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/SystemTreeItemType.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/SystemTreeModel.java A frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/TerminateSessionsModel.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/place/WebAdminApplicationPlaces.java M frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIConstants.java M frontend/webadmin/modules/webadmin/exclude-filters.xml M frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/ApplicationConstants.java M frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/ClientGinjectorExtension.java M frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/PresenterModule.java M frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/UiCommonModule.java A frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/uicommon/SessionModule.java A frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/tab/MainTabSessionPresenter.java A frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/MainTabSessionView.java M frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/tree/SystemTreeItemCell.java 19 files changed, 473 insertions(+), 5 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/84/38384/1 diff --git a/frontend/webadmin/modules/gwt-common/src/main/resources/org/ovirt/engine/core/Common.gwt.xml b/frontend/webadmin/modules/gwt-common/src/main/resources/org/ovirt/engine/core/Common.gwt.xml index 1aec05d..80e0f2e 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/resources/org/ovirt/engine/core/Common.gwt.xml +++ b/frontend/webadmin/modules/gwt-common/src/main/resources/org/ovirt/engine/core/Common.gwt.xml @@ -17,6 +17,7 @@ <include name="common/businessentities/aaa/AuthzGroup.java" /> <include name="common/businessentities/aaa/DbGroup.java" /> <include name="common/businessentities/aaa/DbUser.java" /> + <include name="common/businessentities/EngineSession.java" /> <include name="aaa/AuthType.java" /> <include name="aaa/DirectoryEntry.java" /> <include name="aaa/ProfileEntry.java" /> diff --git a/frontend/webadmin/modules/gwt-common/src/main/resources/org/ovirt/engine/core/SearchBackend.gwt.xml b/frontend/webadmin/modules/gwt-common/src/main/resources/org/ovirt/engine/core/SearchBackend.gwt.xml index aece4be..df9f954 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/resources/org/ovirt/engine/core/SearchBackend.gwt.xml +++ b/frontend/webadmin/modules/gwt-common/src/main/resources/org/ovirt/engine/core/SearchBackend.gwt.xml @@ -71,6 +71,7 @@ <include name="searchbackend/NetworkInterfaceConditionFieldAutoCompleter.java" /> <include name="searchbackend/NetworkClusterConditionFieldAutoCompleter.java" /> <include name="searchbackend/ProviderConditionFieldAutoCompleter.java" /> + <include name="searchbackend/SessionConditionFieldAutoCompleter.java" /> <!--======================SEARCHBACKEND/GLUSTER====================== --> <include name="searchbackend/gluster/GlusterVolumeConditionFieldAutoCompleter.java" /> <include name="searchbackend/gluster/GlusterVolumeCrossRefAutoCompleter.java" /> diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/help/HelpTag.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/help/HelpTag.java index c1cebad..13feeb0 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/help/HelpTag.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/help/HelpTag.java @@ -394,6 +394,8 @@ remove_provider("remove_provider", HelpTagType.WEBADMIN, "[Neutron integration] 'Providers' main tab -> 'Remove Provider(s)' dialog"), //$NON-NLS-1$ //$NON-NLS-2$ + terminate_session("terminate_session", HelpTagType.WEBADMIN, "'Sessions' main tab -> 'Terminate Sessions(s)' dialog"), //$NON-NLS-1$ //$NON-NLS-2$ + remove_quota("remove_quota", HelpTagType.WEBADMIN, "Quota Tab > Remove Quota"), //$NON-NLS-1$ //$NON-NLS-2$ remove_quota_assignment_from_user("remove_quota_assignment_from_user", HelpTagType.WEBADMIN, "Quota Tab > Users Sub-Tab > Detach Users/Groups from Quota"), //$NON-NLS-1$ //$NON-NLS-2$ @@ -442,6 +444,8 @@ sessions("sessions", HelpTagType.UNKNOWN), //$NON-NLS-1$ + engine_sessions("engine_sessions", HelpTagType.UNKNOWN), //$NON-NLS-1$ + set_unlimited_specific_quota("set_unlimited_specific_quota", HelpTagType.WEBADMIN, "Quota main tab -> New Quota dialog -> confirmation dialog on setting an 'unlimited' quota on a certain resource."), //$NON-NLS-1$ //$NON-NLS-2$ snapshots("snapshots", HelpTagType.UNKNOWN), //$NON-NLS-1$ diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/CommonModel.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/CommonModel.java index 140abe1..a2d879a 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/CommonModel.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/CommonModel.java @@ -108,6 +108,7 @@ private final SystemTreeModel systemTreeModel; private final AlertListModel alertListModel; private final TaskListModel taskListModel; + private final SessionListModel sessionListModel; private final SharedMacPoolListModel sharedMacPoolListModel; @Inject @@ -138,6 +139,7 @@ final AlertListModel alertListModel, final TaskListModel taskListModel, final SharedMacPoolListModel sharedMacPoolListModel, + final SessionListModel sessionListModel, final EventBus eventBus) { this.dataCenterListModel = dataCenterListModel; @@ -167,6 +169,7 @@ this.alertListModel = alertListModel; this.taskListModel = taskListModel; this.sharedMacPoolListModel = sharedMacPoolListModel; + this.sessionListModel = sessionListModel; setModelList(); setSignedOutEvent(new Event<EventArgs>(signedOutEventDefinition)); @@ -225,6 +228,7 @@ modelList.add(this.providerListModel); modelList.add(this.vnicProfileListModel); modelList.add(this.instanceTypeListModel); + modelList.add(this.sessionListModel); setItems(modelList); } @@ -466,6 +470,8 @@ getProfileList().setIsAvailable(type == SystemTreeItemType.Network || type == SystemTreeItemType.DataCenter); + + getSessionList().setIsAvailable(type == SystemTreeItemType.Sessions); } private void changeSelectedTabIfNeeded(SystemTreeItemModel model) { @@ -511,6 +517,9 @@ case Providers: case Provider: setSelectedItem(getProviderList()); + break; + case Sessions: + setSelectedItem(getSessionList()); break; default: // webadmin: redirect to default tab in case no tab is selected. @@ -909,6 +918,11 @@ prefix.argvalue = "Provider: name = " + model.getTitle(); //$NON-NLS-1$ } break; + case Sessions: + if (getSessionList().isSearchStringMatch(source)) { + prefix.argvalue = "Session:"; //$NON-NLS-1$ + } + break; } prefix.argvalue = prefix.argvalue + " "; //$NON-NLS-1$ @@ -1045,6 +1059,10 @@ return providerListModel; } + public SessionListModel getSessionList() { + return sessionListModel; + } + public NetworkListModel getNetworkList() { return networkListModel; } diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/SessionListModel.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/SessionListModel.java new file mode 100644 index 0000000..52c2c59 --- /dev/null +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/SessionListModel.java @@ -0,0 +1,131 @@ +package org.ovirt.engine.ui.uicommonweb.models; + +import java.util.ArrayList; +import java.util.Collection; + +import com.google.inject.Inject; +import org.ovirt.engine.core.common.businessentities.EngineSession; +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; + +public class SessionListModel extends ListWithSimpleDetailsModel<EngineSession, EngineSession> + 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().engineSessionsTitle()); + 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<EngineSession> selectedSession = getSelectedItems(); + Collection<EngineSession> selectedItems = (selectedSession != null) ? selectedSession : new ArrayList(); + + getTerminateCommand().setIsExecutionAllowed(selectedItems.size() > 0); + } + + @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; + } + setConfirmWindow(new TerminateSessionsModel(this)); + } + + @Override + public void executeCommand(UICommand command) { + super.executeCommand(command); + + if (command == getTerminateCommand()) { + terminateSession(); + } + } + +} diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/SystemTreeItemType.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/SystemTreeItemType.java index 8803203..c8484b4 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/SystemTreeItemType.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/SystemTreeItemType.java @@ -21,7 +21,8 @@ Networks, Network, Providers, - Provider; + Provider, + Sessions; public int getValue() { diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/SystemTreeModel.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/SystemTreeModel.java index 6ed449d..f4f8bba 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/SystemTreeModel.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/SystemTreeModel.java @@ -625,6 +625,13 @@ treeItemById.put(provider.getId(), providerItem); } + //Add sessions node under System + SystemTreeItemModel sessionsItem = new SystemTreeItemModel(); + sessionsItem.setType(SystemTreeItemType.Sessions); + sessionsItem.setApplicationMode(ApplicationMode.AllModes); + sessionsItem.setTitle(ConstantsManager.getInstance().getConstants().sessionsTitle()); + systemItem.addChild(sessionsItem); + if (!ApplicationModeHelper.getUiMode().equals(ApplicationMode.AllModes)) { ApplicationModeHelper.filterSystemTreeByApplictionMode(systemItem); } diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/TerminateSessionsModel.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/TerminateSessionsModel.java new file mode 100644 index 0000000..f934d0d --- /dev/null +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/TerminateSessionsModel.java @@ -0,0 +1,80 @@ +package org.ovirt.engine.ui.uicommonweb.models; + +import java.util.ArrayList; +import java.util.LinkedList; +import java.util.List; + +import org.ovirt.engine.core.common.action.TerminateSessionParameters; +import org.ovirt.engine.core.common.action.VdcActionParametersBase; +import org.ovirt.engine.core.common.action.VdcActionType; +import org.ovirt.engine.core.common.businessentities.EngineSession; +import org.ovirt.engine.ui.frontend.Frontend; +import org.ovirt.engine.ui.uicommonweb.UICommand; +import org.ovirt.engine.ui.uicommonweb.help.HelpTag; +import org.ovirt.engine.ui.uicompat.ConstantsManager; +import org.ovirt.engine.ui.uicompat.FrontendActionAsyncResult; +import org.ovirt.engine.ui.uicompat.IFrontendActionAsyncCallback; + +public class TerminateSessionsModel extends ConfirmationModel { + + private static final String CMD_TEMINATE = "OnTerminate"; //$NON-NLS-1$ + private static final String CMD_CANCEL = "Cancel"; //$NON-NLS-1$ + + private final SearchableListModel sourceListModel; + private final List<EngineSession> sessions; + + public TerminateSessionsModel(SearchableListModel<EngineSession, EngineSession> sourceListModel) { + this.sourceListModel = sourceListModel; + this.sessions = sourceListModel.getSelectedItems(); + + setTitle(ConstantsManager.getInstance().getConstants().terminateSessionTitle()); + setHelpTag(HelpTag.terminate_session); + setHashName("terminate_sessions"); //$NON-NLS-1$ + + List<String> userNames = new ArrayList<>(); + for (EngineSession session : sessions) { + userNames.add(session.getUserName()); + } + setItems(userNames); + + UICommand okCommand = UICommand.createOkUiCommand(CMD_TEMINATE, this); + getCommands().add(okCommand); + UICommand cancelCommand = UICommand.createDefaultCancelUiCommand(CMD_CANCEL, this); + getCommands().add(cancelCommand); + } + + private void cancel() { + sourceListModel.setConfirmWindow(null); + } + + private void onTerminate() { + List<VdcActionParametersBase> parameterList = new LinkedList<>(); + for (EngineSession session : sessions) { + final TerminateSessionParameters terminateSessionParameters = + new TerminateSessionParameters(session.getId()); + parameterList.add(terminateSessionParameters); + } + + Frontend.getInstance() + .runMultipleActions(VdcActionType.TerminateSession, parameterList, new IFrontendActionAsyncCallback() { + + @Override + public void executed(FrontendActionAsyncResult result) { + sourceListModel.getSearchCommand().execute(); + } + }); + cancel(); + } + + @Override + public void executeCommand(UICommand command) { + super.executeCommand(command); + + if (CMD_TEMINATE.equals(command.getName())) { + onTerminate(); + } else if (CMD_CANCEL.equals(command.getName())) { + cancel(); + } + } + +} diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/place/WebAdminApplicationPlaces.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/place/WebAdminApplicationPlaces.java index a91a533..57081df 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/place/WebAdminApplicationPlaces.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/place/WebAdminApplicationPlaces.java @@ -43,6 +43,8 @@ public static final String providerMainTabPlace = "providers"; //$NON-NLS-1$ + public static final String sessionMainTabPlace = "sessions"; //$NON-NLS-1$ + // Main section: sub tabs // Important: the value after SUB_TAB_PREFIX must correspond to given UiCommon model diff --git a/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIConstants.java b/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIConstants.java index 9b7abe2..384f6e6 100644 --- a/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIConstants.java +++ b/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIConstants.java @@ -686,6 +686,9 @@ @DefaultStringValue("Sessions") String sessionsTitle(); + @DefaultStringValue("Engine Sessions") + String engineSessionsTitle(); + @DefaultStringValue("RDP") String RDPTitle(); @@ -2141,6 +2144,9 @@ @DefaultStringValue("Remove Provider(s)") String removeProviderTitle(); + @DefaultStringValue("Terminate Session(s)") + String terminateSessionTitle(); + @DefaultStringValue("Change Provider URL") String providerUrlWarningTitle(); diff --git a/frontend/webadmin/modules/webadmin/exclude-filters.xml b/frontend/webadmin/modules/webadmin/exclude-filters.xml index bbcd744..f27334f 100644 --- a/frontend/webadmin/modules/webadmin/exclude-filters.xml +++ b/frontend/webadmin/modules/webadmin/exclude-filters.xml @@ -150,6 +150,18 @@ UuF: Unused field (UUF_UNUSED_FIELD) --> <Match> + <Class name="org.ovirt.engine.ui.webadmin.section.main.presenter.tab.MainTabSessionPresenter$SessionSelectionChange" /> + <Bug code="UuF"/> + </Match> + + <!-- + findbugs complain of unused field in class. + This is a GWT class and use to generate code + + findbugs reason: + UuF: Unused field (UUF_UNUSED_FIELD) + --> + <Match> <Class name="org.ovirt.engine.ui.webadmin.section.main.presenter.tab.MainTabQuotaPresenter$QuotaSelectionChange" /> <Bug code="UuF"/> </Match> diff --git a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/ApplicationConstants.java b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/ApplicationConstants.java index c72bec5..b013cf1 100644 --- a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/ApplicationConstants.java +++ b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/ApplicationConstants.java @@ -94,6 +94,9 @@ @DefaultStringValue("Providers") String providerMainTabLabel(); + @DefaultStringValue("Sessions") + String sessionMainTabLabel(); + @DefaultStringValue("General") String volumeGeneralSubTabLabel(); @@ -1953,6 +1956,12 @@ @DefaultStringValue("User Name") String userNameUser(); + + @DefaultStringValue("User Id") + String userId(); + + @DefaultStringValue("Session DB Id") + String sessionDbId(); @DefaultStringValue("Group") String groupUser(); @@ -4043,4 +4052,7 @@ @DefaultStringValue("Snapshot Options") String snapshotConfigHeaderLabel(); + + @DefaultStringValue("Terminate Session") + String terminateSession(); } diff --git a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/ClientGinjectorExtension.java b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/ClientGinjectorExtension.java index 50e0511..ff2be16 100644 --- a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/ClientGinjectorExtension.java +++ b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/ClientGinjectorExtension.java @@ -4,6 +4,7 @@ import org.ovirt.engine.core.common.businessentities.AuditLog; import org.ovirt.engine.core.common.businessentities.Disk; +import org.ovirt.engine.core.common.businessentities.EngineSession; import org.ovirt.engine.core.common.businessentities.IscsiBond; import org.ovirt.engine.core.common.businessentities.Permissions; import org.ovirt.engine.core.common.businessentities.Quota; @@ -46,6 +47,7 @@ import org.ovirt.engine.ui.common.uicommon.model.DetailModelProvider; import org.ovirt.engine.ui.common.uicommon.model.MainModelProvider; import org.ovirt.engine.ui.common.uicommon.model.SearchableDetailModelProvider; +import org.ovirt.engine.ui.uicommonweb.models.SessionListModel; import org.ovirt.engine.ui.uicommonweb.models.clusters.ClusterGeneralModel; import org.ovirt.engine.ui.uicommonweb.models.clusters.ClusterGlusterHookListModel; import org.ovirt.engine.ui.uicommonweb.models.clusters.ClusterHostListModel; @@ -207,6 +209,8 @@ MainModelProvider<GlusterVolumeEntity, VolumeListModel> getMainTabVolumeModelProvider(); + MainModelProvider<EngineSession, SessionListModel> getMainTabSessionModelProvider(); + // UiCommon model providers: Sub tabs // DataCenter diff --git a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/PresenterModule.java b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/PresenterModule.java index 2b9bb25..4a2599c 100644 --- a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/PresenterModule.java +++ b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/PresenterModule.java @@ -99,8 +99,8 @@ import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.storage.backup.ImportTemplatePopupPresenterWidget; import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.storage.backup.ImportVmFromExportDomainPopupPresenterWidget; import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.tag.TagPopupPresenterWidget; -import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.template.TemplateInterfacePopupPresenterWidget; import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.template.TemplateEditPresenterWidget; +import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.template.TemplateInterfacePopupPresenterWidget; import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.user.ManageEventsPopupPresenterWidget; import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.vm.CloneVmPopupPresenterWidget; import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.vm.VmChangeCDPopupPresenterWidget; @@ -129,6 +129,7 @@ import org.ovirt.engine.ui.webadmin.section.main.presenter.tab.MainTabProviderPresenter; import org.ovirt.engine.ui.webadmin.section.main.presenter.tab.MainTabQuotaPresenter; import org.ovirt.engine.ui.webadmin.section.main.presenter.tab.MainTabReportsPresenter; +import org.ovirt.engine.ui.webadmin.section.main.presenter.tab.MainTabSessionPresenter; import org.ovirt.engine.ui.webadmin.section.main.presenter.tab.MainTabStoragePresenter; import org.ovirt.engine.ui.webadmin.section.main.presenter.tab.MainTabTemplatePresenter; import org.ovirt.engine.ui.webadmin.section.main.presenter.tab.MainTabUserPresenter; @@ -164,13 +165,13 @@ import org.ovirt.engine.ui.webadmin.section.main.presenter.tab.disk.SubTabDiskStoragePresenter; import org.ovirt.engine.ui.webadmin.section.main.presenter.tab.disk.SubTabDiskTemplatePresenter; import org.ovirt.engine.ui.webadmin.section.main.presenter.tab.disk.SubTabDiskVmPresenter; +import org.ovirt.engine.ui.webadmin.section.main.presenter.tab.gluster.SubTabGlusterVolumeSnapshotPresenter; import org.ovirt.engine.ui.webadmin.section.main.presenter.tab.gluster.SubTabVolumeBrickPresenter; import org.ovirt.engine.ui.webadmin.section.main.presenter.tab.gluster.SubTabVolumeEventPresenter; import org.ovirt.engine.ui.webadmin.section.main.presenter.tab.gluster.SubTabVolumeGeneralPresenter; import org.ovirt.engine.ui.webadmin.section.main.presenter.tab.gluster.SubTabVolumeGeoRepPresenter; import org.ovirt.engine.ui.webadmin.section.main.presenter.tab.gluster.SubTabVolumeParameterPresenter; import org.ovirt.engine.ui.webadmin.section.main.presenter.tab.gluster.SubTabVolumePermissionPresenter; -import org.ovirt.engine.ui.webadmin.section.main.presenter.tab.gluster.SubTabGlusterVolumeSnapshotPresenter; import org.ovirt.engine.ui.webadmin.section.main.presenter.tab.gluster.VolumeSubTabPanelPresenter; import org.ovirt.engine.ui.webadmin.section.main.presenter.tab.host.HostSubTabPanelPresenter; import org.ovirt.engine.ui.webadmin.section.main.presenter.tab.host.SubTabHostBrickPresenter; @@ -344,8 +345,8 @@ import org.ovirt.engine.ui.webadmin.section.main.view.popup.storage.backup.ImportTemplatePopupView; import org.ovirt.engine.ui.webadmin.section.main.view.popup.storage.backup.ImportVmFromExportDomainPopupView; import org.ovirt.engine.ui.webadmin.section.main.view.popup.tag.TagPopupView; -import org.ovirt.engine.ui.webadmin.section.main.view.popup.template.TemplateInterfacePopupView; import org.ovirt.engine.ui.webadmin.section.main.view.popup.template.TemplateEditPopupView; +import org.ovirt.engine.ui.webadmin.section.main.view.popup.template.TemplateInterfacePopupView; import org.ovirt.engine.ui.webadmin.section.main.view.popup.user.ManageEventsPopupView; import org.ovirt.engine.ui.webadmin.section.main.view.popup.vm.CloneVmPopupView; import org.ovirt.engine.ui.webadmin.section.main.view.popup.vm.VmChangeCDPopupView; @@ -376,6 +377,7 @@ import org.ovirt.engine.ui.webadmin.section.main.view.tab.MainTabProviderView; import org.ovirt.engine.ui.webadmin.section.main.view.tab.MainTabQuotaView; import org.ovirt.engine.ui.webadmin.section.main.view.tab.MainTabReportsView; +import org.ovirt.engine.ui.webadmin.section.main.view.tab.MainTabSessionView; import org.ovirt.engine.ui.webadmin.section.main.view.tab.MainTabStorageView; import org.ovirt.engine.ui.webadmin.section.main.view.tab.MainTabTemplateView; import org.ovirt.engine.ui.webadmin.section.main.view.tab.MainTabUserView; @@ -411,13 +413,13 @@ import org.ovirt.engine.ui.webadmin.section.main.view.tab.disk.SubTabDiskStorageView; import org.ovirt.engine.ui.webadmin.section.main.view.tab.disk.SubTabDiskTemplateView; import org.ovirt.engine.ui.webadmin.section.main.view.tab.disk.SubTabDiskVmView; +import org.ovirt.engine.ui.webadmin.section.main.view.tab.gluster.SubTabGlusterVolumeSnapshotView; import org.ovirt.engine.ui.webadmin.section.main.view.tab.gluster.SubTabVolumeBrickView; import org.ovirt.engine.ui.webadmin.section.main.view.tab.gluster.SubTabVolumeEventView; import org.ovirt.engine.ui.webadmin.section.main.view.tab.gluster.SubTabVolumeGeneralView; import org.ovirt.engine.ui.webadmin.section.main.view.tab.gluster.SubTabVolumeGeoRepView; import org.ovirt.engine.ui.webadmin.section.main.view.tab.gluster.SubTabVolumeParameterView; import org.ovirt.engine.ui.webadmin.section.main.view.tab.gluster.SubTabVolumePermissionView; -import org.ovirt.engine.ui.webadmin.section.main.view.tab.gluster.SubTabGlusterVolumeSnapshotView; import org.ovirt.engine.ui.webadmin.section.main.view.tab.gluster.VolumeSubTabPanelView; import org.ovirt.engine.ui.webadmin.section.main.view.tab.host.HostSubTabPanelView; import org.ovirt.engine.ui.webadmin.section.main.view.tab.host.SubTabHostBrickView; @@ -583,6 +585,10 @@ MainTabProviderPresenter.ViewDef.class, MainTabProviderView.class, MainTabProviderPresenter.ProxyDef.class); + bindPresenter(MainTabSessionPresenter.class, + MainTabSessionPresenter.ViewDef.class, + MainTabSessionView.class, + MainTabSessionPresenter.ProxyDef.class); bindPresenter(MainTabStoragePresenter.class, MainTabStoragePresenter.ViewDef.class, MainTabStorageView.class, diff --git a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/UiCommonModule.java b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/UiCommonModule.java index 0feac7d..5d350a5 100644 --- a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/UiCommonModule.java +++ b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/UiCommonModule.java @@ -29,6 +29,7 @@ import org.ovirt.engine.ui.webadmin.gin.uicommon.ProviderModule; import org.ovirt.engine.ui.webadmin.gin.uicommon.QuotaModule; import org.ovirt.engine.ui.webadmin.gin.uicommon.ReportsModule; +import org.ovirt.engine.ui.webadmin.gin.uicommon.SessionModule; import org.ovirt.engine.ui.webadmin.gin.uicommon.StorageModule; import org.ovirt.engine.ui.webadmin.gin.uicommon.TemplateModule; import org.ovirt.engine.ui.webadmin.gin.uicommon.UserModule; @@ -85,6 +86,7 @@ install(new ProviderModule()); install(new VnicProfileModule()); install(new MacPoolModule()); + install(new SessionModule()); bindCommonModels(); diff --git a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/uicommon/SessionModule.java b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/uicommon/SessionModule.java new file mode 100644 index 0000000..89959db --- /dev/null +++ b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/uicommon/SessionModule.java @@ -0,0 +1,33 @@ +package org.ovirt.engine.ui.webadmin.gin.uicommon; + +import com.google.gwt.event.shared.EventBus; +import com.google.gwt.inject.client.AbstractGinModule; +import com.google.inject.Provider; +import com.google.inject.Provides; +import com.google.inject.Singleton; +import org.ovirt.engine.core.common.businessentities.EngineSession; +import org.ovirt.engine.ui.common.presenter.popup.DefaultConfirmationPopupPresenterWidget; +import org.ovirt.engine.ui.common.uicommon.model.MainModelProvider; +import org.ovirt.engine.ui.common.uicommon.model.MainTabModelProvider; +import org.ovirt.engine.ui.uicommonweb.models.CommonModel; +import org.ovirt.engine.ui.uicommonweb.models.SessionListModel; + +public class SessionModule extends AbstractGinModule { + + @Provides + @Singleton + public MainModelProvider<EngineSession, SessionListModel> getSessionListProvider(EventBus eventBus, + final Provider<DefaultConfirmationPopupPresenterWidget> defaultConfirmPopupProvider, + final Provider<SessionListModel> modelProvider, + final Provider<CommonModel> commonModelProvider) { + MainTabModelProvider<EngineSession, SessionListModel> mainTabSessionModelProvider = + new MainTabModelProvider<>(eventBus, defaultConfirmPopupProvider, commonModelProvider); + mainTabSessionModelProvider.setModelProvider(modelProvider); + return mainTabSessionModelProvider; + } + + @Override + protected void configure() { + bind(SessionListModel.class).in(Singleton.class); + } +} diff --git a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/tab/MainTabSessionPresenter.java b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/tab/MainTabSessionPresenter.java new file mode 100644 index 0000000..e7c4739 --- /dev/null +++ b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/tab/MainTabSessionPresenter.java @@ -0,0 +1,68 @@ +package org.ovirt.engine.ui.webadmin.section.main.presenter.tab; + +import java.util.List; + +import com.google.gwt.event.shared.EventBus; +import com.google.inject.Inject; +import com.gwtplatform.dispatch.annotation.GenEvent; +import com.gwtplatform.mvp.client.TabData; +import com.gwtplatform.mvp.client.annotations.NameToken; +import com.gwtplatform.mvp.client.annotations.ProxyCodeSplit; +import com.gwtplatform.mvp.client.annotations.TabInfo; +import com.gwtplatform.mvp.client.proxy.PlaceManager; +import com.gwtplatform.mvp.client.proxy.TabContentProxyPlace; +import com.gwtplatform.mvp.shared.proxy.PlaceRequest; +import org.ovirt.engine.core.common.businessentities.EngineSession; +import org.ovirt.engine.ui.common.place.PlaceRequestFactory; +import org.ovirt.engine.ui.common.uicommon.model.MainModelProvider; +import org.ovirt.engine.ui.common.widget.tab.ModelBoundTabData; +import org.ovirt.engine.ui.uicommonweb.models.SessionListModel; +import org.ovirt.engine.ui.uicommonweb.place.WebAdminApplicationPlaces; +import org.ovirt.engine.ui.webadmin.ApplicationConstants; +import org.ovirt.engine.ui.webadmin.section.main.presenter.AbstractMainTabWithDetailsPresenter; +import org.ovirt.engine.ui.webadmin.section.main.presenter.MainTabPanelPresenter; + +public class MainTabSessionPresenter + extends AbstractMainTabWithDetailsPresenter<EngineSession, SessionListModel, MainTabSessionPresenter.ViewDef, MainTabSessionPresenter.ProxyDef> { + + @GenEvent + public class SessionSelectionChange { + + List<EngineSession> selectedItems; + + } + + @Inject + public MainTabSessionPresenter(EventBus eventBus, + ViewDef view, + ProxyDef proxy, + PlaceManager placeManager, + MainModelProvider<EngineSession, SessionListModel> modelProvider) { + super(eventBus, view, proxy, placeManager, modelProvider); + } + + @TabInfo(container = MainTabPanelPresenter.class) + static TabData getTabData(ApplicationConstants applicationConstants, + MainModelProvider<EngineSession, SessionListModel> modelProvider) { + return new ModelBoundTabData(applicationConstants.sessionMainTabLabel(), 1, modelProvider); + } + + @Override + protected void fireTableSelectionChangeEvent() { + SessionSelectionChangeEvent.fire(this, getSelectedItems()); + } + + @Override + protected PlaceRequest getMainTabRequest() { + return PlaceRequestFactory.get(WebAdminApplicationPlaces.sessionMainTabPlace); + } + + @ProxyCodeSplit + @NameToken(WebAdminApplicationPlaces.sessionMainTabPlace) + public interface ProxyDef extends TabContentProxyPlace<MainTabSessionPresenter> { + } + + public interface ViewDef extends AbstractMainTabWithDetailsPresenter.ViewDef<EngineSession> { + } +} + diff --git a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/MainTabSessionView.java b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/MainTabSessionView.java new file mode 100644 index 0000000..90958d2 --- /dev/null +++ b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/MainTabSessionView.java @@ -0,0 +1,77 @@ +package org.ovirt.engine.ui.webadmin.section.main.view.tab; + +import com.google.gwt.core.client.GWT; +import com.google.inject.Inject; +import org.ovirt.engine.core.common.businessentities.EngineSession; +import org.ovirt.engine.core.searchbackend.SessionConditionFieldAutoCompleter; +import org.ovirt.engine.ui.common.idhandler.ElementIdHandler; +import org.ovirt.engine.ui.common.uicommon.model.MainModelProvider; +import org.ovirt.engine.ui.common.widget.table.column.AbstractTextColumnWithTooltip; +import org.ovirt.engine.ui.uicommonweb.UICommand; +import org.ovirt.engine.ui.uicommonweb.models.SessionListModel; +import org.ovirt.engine.ui.webadmin.ApplicationConstants; +import org.ovirt.engine.ui.webadmin.ApplicationResources; +import org.ovirt.engine.ui.webadmin.section.main.presenter.tab.MainTabSessionPresenter; +import org.ovirt.engine.ui.webadmin.section.main.view.AbstractMainTabWithDetailsTableView; +import org.ovirt.engine.ui.webadmin.widget.action.WebAdminButtonDefinition; + +public class MainTabSessionView extends AbstractMainTabWithDetailsTableView<EngineSession, SessionListModel> + implements MainTabSessionPresenter.ViewDef { + + private final ApplicationConstants constants; + + @Inject + public MainTabSessionView(MainModelProvider<EngineSession, SessionListModel> modelProvider, + ApplicationConstants constants, + ApplicationResources resources) { + super(modelProvider); + this.constants = constants; + ViewIdHandler.idHandler.generateAndSetIds(this); + initTable(); + initWidget(getTable()); + } + + void initTable() { + getTable().enableColumnResizing(); + + AbstractTextColumnWithTooltip<EngineSession> sessionDbIdColumn = + new AbstractTextColumnWithTooltip<EngineSession>() { + @Override + public String getValue(EngineSession session) { + return Long.toString(session.getId()); + } + }; + getTable().addColumn(sessionDbIdColumn, constants.sessionDbId(), "100px"); //$NON-NLS-1$ + + AbstractTextColumnWithTooltip<EngineSession> userNameColumn = + new AbstractTextColumnWithTooltip<EngineSession>() { + @Override + public String getValue(EngineSession session) { + return session.getUserName(); + } + }; + userNameColumn.makeSortable(SessionConditionFieldAutoCompleter.USER_NAME); + getTable().addColumn(userNameColumn, constants.userNameUser(), "200px"); //$NON-NLS-1$ + + AbstractTextColumnWithTooltip<EngineSession> userIdColumn = new AbstractTextColumnWithTooltip<EngineSession>() { + @Override + public String getValue(EngineSession session) { + return session.getUserId().toString(); + } + }; + userIdColumn.makeSortable(SessionConditionFieldAutoCompleter.USER_ID); + getTable().addColumn(userNameColumn, constants.userId(), "200px"); //$NON-NLS-1$ + + getTable().addActionButton(new WebAdminButtonDefinition<EngineSession>(constants.terminateSession()) { + @Override + protected UICommand resolveCommand() { + return getMainModel().getTerminateCommand(); + } + }); + } + + interface ViewIdHandler extends ElementIdHandler<MainTabSessionView> { + ViewIdHandler idHandler = GWT.create(ViewIdHandler.class); + } + +} diff --git a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/tree/SystemTreeItemCell.java b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/tree/SystemTreeItemCell.java index cfdaaa2..f3a12c5 100644 --- a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/tree/SystemTreeItemCell.java +++ b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/tree/SystemTreeItemCell.java @@ -96,6 +96,9 @@ case Providers: imageResource = applicationResources.providersImage(); break; + case Sessions: + imageResource = applicationResources.userImage(); + break; default: imageResource = applicationResources.questionMarkImage(); -- To view, visit https://gerrit.ovirt.org/38384 To unsubscribe, visit https://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Ide80e57411ff075f26cba84cc8a952a05343fdd6 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Yevgeny Zaspitsky <yzasp...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches