Kanagaraj M has uploaded a new change for review. Change subject: webadmin: Adding Gluster Services Sub Tab to Cluster ......................................................................
webadmin: Adding Gluster Services Sub Tab to Cluster A new sub tab named 'Services' is added to the Cluster Tab. This sub tab will be shown only if the cluster supports Gluster. NFS, SHD are the two different type of services. Hosts in the Cluster will have NFS, SHD services running. A filter panel is added to filter the results based on Service Type and host address. Change-Id: Iea624f12a07f4aa9b1c6ffa1548aaafb16a00a7a Signed-off-by: Kanagaraj M <kmayi...@redhat.com> --- M frontend/webadmin/modules/gwt-common/src/main/resources/org/ovirt/engine/core/Common.gwt.xml M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/dataprovider/AsyncDataProvider.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/clusters/ClusterListModel.java A frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/clusters/ClusterServiceModel.java M frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/Constants.java M frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/Enums.java M frontend/webadmin/modules/uicompat/src/main/resources/org/ovirt/engine/ui/uicompat/Enums.properties 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/ManagedComponents.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/uicommon/ClusterModule.java M frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/place/ApplicationPlaces.java M frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/tab/cluster/SubTabClusterPermissionPresenter.java A frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/tab/cluster/SubTabClusterServicePresenter.java A frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/cluster/SubTabClusterServiceView.java A frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/cluster/SubTabClusterServiceView.ui.xml 16 files changed, 559 insertions(+), 4 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/60/8460/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 c7f16d3..3fe7751 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 @@ -291,6 +291,16 @@ <include name="common/businessentities/gluster/GlusterVolumeOptionInfo.java"/> <include name="common/businessentities/gluster/AccessProtocol.java"/> <include name="common/businessentities/gluster/GlusterTaskOperation.java"/> + <include name="common/businessentities/gluster/GlusterVolumeAdvancedDetails.java"/> + <include name="common/businessentities/gluster/ServiceInfo.java"/> + <include name="common/businessentities/gluster/BrickDetails.java"/> + <include name="common/businessentities/gluster/BrickProperties.java"/> + <include name="common/businessentities/gluster/GlusterClientInfo.java"/> + <include name="common/businessentities/gluster/GlusterVolumeStatusOption.java"/> + <include name="common/businessentities/gluster/MallInfo.java"/> + <include name="common/businessentities/gluster/MemoryStatus.java"/> + <include name="common/businessentities/gluster/Mempool.java"/> + <include name="common/businessentities/gluster/ServiceType.java"/> <include name="common/action/gluster/*.java"/> <include name="common/queries/gluster/*.java"/> <include name="common/constants/gluster/GlusterConstants.java"/> diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/dataprovider/AsyncDataProvider.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/dataprovider/AsyncDataProvider.java index 2bd2c60..00a5385 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/dataprovider/AsyncDataProvider.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/dataprovider/AsyncDataProvider.java @@ -19,6 +19,7 @@ import org.ovirt.engine.core.common.businessentities.Network; import org.ovirt.engine.core.common.businessentities.QuotaEnforcementTypeEnum; import org.ovirt.engine.core.common.businessentities.RepoFileMetaData; +import org.ovirt.engine.core.common.businessentities.Role; import org.ovirt.engine.core.common.businessentities.ServerCpu; import org.ovirt.engine.core.common.businessentities.StorageDomainType; import org.ovirt.engine.core.common.businessentities.StorageType; @@ -34,7 +35,6 @@ import org.ovirt.engine.core.common.businessentities.VolumeFormat; import org.ovirt.engine.core.common.businessentities.VolumeType; import org.ovirt.engine.core.common.businessentities.permissions; -import org.ovirt.engine.core.common.businessentities.Role; import org.ovirt.engine.core.common.businessentities.storage_domains; import org.ovirt.engine.core.common.businessentities.storage_pool; import org.ovirt.engine.core.common.businessentities.storage_server_connections; @@ -94,6 +94,7 @@ import org.ovirt.engine.core.common.queries.VdsIdParametersBase; import org.ovirt.engine.core.common.queries.gluster.GlusterParameters; import org.ovirt.engine.core.common.queries.gluster.GlusterServersQueryParameters; +import org.ovirt.engine.core.common.queries.gluster.GlusterVolumeAdvancedDetailsParameters; import org.ovirt.engine.core.compat.Guid; import org.ovirt.engine.core.compat.KeyValuePairCompat; import org.ovirt.engine.core.compat.NGuid; @@ -1082,6 +1083,22 @@ aQuery); } + public static void GetClusterGlusterServices(AsyncQuery aQuery, Guid clusterId) { + aQuery.converterCallback = new IAsyncConverter() { + @Override + public Object Convert(Object source, AsyncQuery _asyncQuery) + { + return source; + } + }; + // Passing empty values for Volume and Brick to get the services of all the volumes/hosts in the cluster + GlusterVolumeAdvancedDetailsParameters parameters = + new GlusterVolumeAdvancedDetailsParameters(clusterId, "", "", false); //$NON-NLS-1$ //$NON-NLS-2$ + Frontend.RunQuery(VdcQueryType.GetGlusterVolumeAdvancedDetails, + parameters, + aQuery); + } + public static void GetRpmVersionViaPublic(AsyncQuery aQuery) { aQuery.converterCallback = new IAsyncConverter() { @Override diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/clusters/ClusterListModel.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/clusters/ClusterListModel.java index 4a3b0e7..2335af1 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/clusters/ClusterListModel.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/clusters/ClusterListModel.java @@ -201,11 +201,22 @@ list.add(new ClusterNetworkListModel()); list.add(new ClusterHostListModel()); list.add(new ClusterVmListModel()); + list.add(new ClusterServiceModel()); list.add(new PermissionListModel()); setDetailModels(list); } @Override + protected void UpdateDetailsAvailability() { + super.UpdateDetailsAvailability(); + for (EntityModel detailModel : getDetailModels()) { + if (detailModel instanceof ClusterServiceModel) { + detailModel.setIsAvailable(((VDSGroup) getSelectedItem()).supportsGlusterService()); + } + } + } + + @Override public boolean IsSearchStringMatch(String searchString) { return searchString.trim().toLowerCase().startsWith("cluster"); //$NON-NLS-1$ diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/clusters/ClusterServiceModel.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/clusters/ClusterServiceModel.java new file mode 100644 index 0000000..e88b33a --- /dev/null +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/clusters/ClusterServiceModel.java @@ -0,0 +1,194 @@ +package org.ovirt.engine.ui.uicommonweb.models.clusters; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import org.ovirt.engine.core.common.businessentities.VDS; +import org.ovirt.engine.core.common.businessentities.VDSGroup; +import org.ovirt.engine.core.common.businessentities.gluster.GlusterVolumeAdvancedDetails; +import org.ovirt.engine.core.common.businessentities.gluster.ServiceInfo; +import org.ovirt.engine.core.common.businessentities.gluster.ServiceType; +import org.ovirt.engine.core.common.utils.ListUtils; +import org.ovirt.engine.ui.frontend.AsyncQuery; +import org.ovirt.engine.ui.frontend.INewAsyncCallback; +import org.ovirt.engine.ui.uicommonweb.UICommand; +import org.ovirt.engine.ui.uicommonweb.dataprovider.AsyncDataProvider; +import org.ovirt.engine.ui.uicommonweb.models.EntityModel; +import org.ovirt.engine.ui.uicommonweb.models.ListModel; +import org.ovirt.engine.ui.uicompat.ConstantsManager; + +public class ClusterServiceModel extends EntityModel { + + private ListModel hostList; + + public ListModel getHostList() { + return hostList; + } + + public void setHostList(ListModel hostList) { + this.hostList = hostList; + } + + private ListModel serviceTypeList; + + public ListModel getServiceTypeList() { + return serviceTypeList; + } + + public void setServiceTypeList(ListModel serviceTypeList) { + this.serviceTypeList = serviceTypeList; + } + + private ListModel serviceList; + + public ListModel getServiceList() { + return serviceList; + } + + public void setServiceList(ListModel serviceList) { + this.serviceList = serviceList; + } + + private List<ServiceInfo> actualServiceList; + + public List<ServiceInfo> getActualServiceList() { + return actualServiceList; + } + + public void setActualServiceList(List<ServiceInfo> actualServiceList) { + this.actualServiceList = actualServiceList; + } + + private UICommand filterServicesCommand; + + public UICommand getFilterServicesCommand() + { + return filterServicesCommand; + } + + private void setFilterServicesCommand(UICommand value) + { + filterServicesCommand = value; + } + + private UICommand clearFilterServicesCommand; + + public UICommand getClearFilterServicesCommand() + { + return clearFilterServicesCommand; + } + + private void setClearFilterServicesCommand(UICommand value) + { + clearFilterServicesCommand = value; + } + + @Override + public VDSGroup getEntity() + { + return (VDSGroup) ((super.getEntity() instanceof VDSGroup) ? super.getEntity() : null); + } + + public ClusterServiceModel() { + setTitle(ConstantsManager.getInstance().getConstants().servicesTitle()); + setHashName("services"); //$NON-NLS-1$ + + setActualServiceList(new ArrayList<ServiceInfo>()); + setServiceList(new ListModel()); + setHostList(new ListModel()); + setServiceTypeList(new ListModel()); + ArrayList<ServiceType> serviceTypes = new ArrayList<ServiceType>(); + serviceTypes.add(null); + serviceTypes.addAll(Arrays.asList(ServiceType.values())); + getServiceTypeList().setItems(serviceTypes); + setFilterServicesCommand(new UICommand("FilterServices", this)); //$NON-NLS-1$ + setClearFilterServicesCommand(new UICommand("ClearFilterServices", this)); //$NON-NLS-1$ + } + + @Override + protected void OnEntityChanged() + { + super.OnEntityChanged(); + if (getEntity() != null) { + updateHostList(); + updateServiceList(); + } + } + + private void updateHostList() { + AsyncQuery asyncQuery = new AsyncQuery(); + asyncQuery.setModel(this); + asyncQuery.asyncCallback = new INewAsyncCallback() { + @Override + public void OnSuccess(Object model, Object result) + { + List<VDS> hostListNew = (List<VDS>) result; + List<VDS> hostListOld = new ArrayList<VDS>(); + + if (getHostList().getItems() != null) { + hostListOld = new ArrayList((List<VDS>) getHostList().getItems()); + } + + if (hostListOld.size() > 0) { + hostListOld.remove(0); + } + + if (!ListUtils.listsEqual(hostListNew, hostListOld)) { + hostListNew.add(0, null); + getHostList().setItems(hostListNew); + } + } + }; + AsyncDataProvider.GetHostListByCluster(asyncQuery, getEntity().getname()); + } + + private void updateServiceList() { + AsyncQuery asyncQuery = new AsyncQuery(); + asyncQuery.setModel(this); + asyncQuery.asyncCallback = new INewAsyncCallback() { + @Override + public void OnSuccess(Object model, Object result) + { + GlusterVolumeAdvancedDetails details = (GlusterVolumeAdvancedDetails) result; + setActualServiceList(details.getServiceInfo()); + filterServices(); + } + }; + AsyncDataProvider.GetClusterGlusterServices(asyncQuery, getEntity().getId()); + } + + private void filterServices() { + VDS selectedVds = (VDS) hostList.getSelectedItem(); + ServiceType serviceType = (ServiceType) serviceTypeList.getSelectedItem(); + ArrayList<EntityModel> list = new ArrayList<EntityModel>(); + for (ServiceInfo service : getActualServiceList()) { + if ((selectedVds == null || service.getHostName().equals(selectedVds.gethost_name())) + && (serviceType == null || service.getServiceType() == serviceType)) { + list.add(new EntityModel(service)); + } + } + getServiceList().setItems(list); + } + + private void clearFilters() { + getHostList().setSelectedItem(null); + getServiceTypeList().setSelectedItem(null); + filterServices(); + } + + @Override + public void ExecuteCommand(UICommand command) + { + super.ExecuteCommand(command); + + if (command == getFilterServicesCommand()) + { + filterServices(); + } + else if (command == getClearFilterServicesCommand()) + { + clearFilters(); + } + } +} diff --git a/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/Constants.java b/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/Constants.java index 17ef8ee..16fb4a0 100644 --- a/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/Constants.java +++ b/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/Constants.java @@ -58,6 +58,9 @@ @DefaultStringValue("General") String generalTitle(); + @DefaultStringValue("Clusters") + String servicesTitle(); + @DefaultStringValue("Edit Policy") String editPolicyTitle(); diff --git a/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/Enums.java b/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/Enums.java index 061bbc3..07f2204 100644 --- a/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/Enums.java +++ b/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/Enums.java @@ -341,4 +341,8 @@ String GlusterStatus___DOWN(); String TransportType___TCP(); String TransportType___RDMA(); + + String ServiceType___NFS(); + + String ServiceType___SHD(); } diff --git a/frontend/webadmin/modules/uicompat/src/main/resources/org/ovirt/engine/ui/uicompat/Enums.properties b/frontend/webadmin/modules/uicompat/src/main/resources/org/ovirt/engine/ui/uicompat/Enums.properties index 9620864..6fc1e74 100644 --- a/frontend/webadmin/modules/uicompat/src/main/resources/org/ovirt/engine/ui/uicompat/Enums.properties +++ b/frontend/webadmin/modules/uicompat/src/main/resources/org/ovirt/engine/ui/uicompat/Enums.properties @@ -163,6 +163,8 @@ GlusterStatus___DOWN=Down TransportType___TCP=TCP TransportType___RDMA=RDMA +ServiceType___NFS=NFS +ServiceType___SHD=SHD Disk$DiskStorageType___LUN=LUN Disk$DiskStorageType___IMAGE=Image RoleType___ADMIN=Admin 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 ba52f40..0e6b0f1 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 @@ -301,6 +301,9 @@ @DefaultStringValue("Logical Networks") String clusterNetworkSubTabLabel(); + @DefaultStringValue("Services") + String clusterServiceSubTabLabel(); + @DefaultStringValue("Permissions") String clusterPermissionSubTabLabel(); @@ -1500,6 +1503,28 @@ @DefaultStringValue("Load") String loadClusterHost(); + // Cluster service + @DefaultStringValue("Host") + String hostService(); + + @DefaultStringValue("Service") + String nameService(); + + @DefaultStringValue("Status") + String statusService(); + + @DefaultStringValue("Port") + String portService(); + + @DefaultStringValue("Process Id") + String pidService(); + + @DefaultStringValue("Filter") + String filterService(); + + @DefaultStringValue("Show All") + String showAllService(); + // Interface @DefaultStringValue("Empty") String emptyInterface(); diff --git a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/ManagedComponents.java b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/ManagedComponents.java index 0c2220f..5bda835 100644 --- a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/ManagedComponents.java +++ b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/ManagedComponents.java @@ -32,6 +32,7 @@ import org.ovirt.engine.ui.uicommonweb.models.clusters.ClusterHostListModel; import org.ovirt.engine.ui.uicommonweb.models.clusters.ClusterListModel; import org.ovirt.engine.ui.uicommonweb.models.clusters.ClusterNetworkListModel; +import org.ovirt.engine.ui.uicommonweb.models.clusters.ClusterServiceModel; import org.ovirt.engine.ui.uicommonweb.models.clusters.ClusterVmListModel; import org.ovirt.engine.ui.uicommonweb.models.configure.PermissionListModel; import org.ovirt.engine.ui.uicommonweb.models.datacenters.DataCenterClusterListModel; @@ -130,6 +131,7 @@ import org.ovirt.engine.ui.webadmin.section.main.presenter.tab.cluster.SubTabClusterHostPresenter; import org.ovirt.engine.ui.webadmin.section.main.presenter.tab.cluster.SubTabClusterNetworkPresenter; import org.ovirt.engine.ui.webadmin.section.main.presenter.tab.cluster.SubTabClusterPermissionPresenter; +import org.ovirt.engine.ui.webadmin.section.main.presenter.tab.cluster.SubTabClusterServicePresenter; import org.ovirt.engine.ui.webadmin.section.main.presenter.tab.cluster.SubTabClusterVmPresenter; import org.ovirt.engine.ui.webadmin.section.main.presenter.tab.datacenter.DataCenterSubTabPanelPresenter; import org.ovirt.engine.ui.webadmin.section.main.presenter.tab.datacenter.SubTabDataCenterClusterPresenter; @@ -384,6 +386,10 @@ SearchableDetailModelProvider<Network, ClusterListModel, ClusterNetworkListModel> getSubTabClusterNetworkModelProvider(); + AsyncProvider<SubTabClusterServicePresenter> getSubTabClusterServicePresenter(); + + DetailModelProvider<ClusterListModel, ClusterServiceModel> getSubTabClusterServiceModelProvider(); + AsyncProvider<SubTabClusterPermissionPresenter> getSubTabClusterPermissionPresenter(); SearchableDetailModelProvider<permissions, ClusterListModel, PermissionListModel> getSubTabClusterPermissionModelProvider(); 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 2554ac3..4948f98 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 @@ -44,9 +44,9 @@ import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.host.HostPopupPresenterWidget; import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.host.HostSetupNetworksPopupPresenterWidget; import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.host.ManualFencePopupPresenterWidget; +import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.host.MultipleHostsPopupPresenterWidget; import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.host.SetupNetworksInterfacePopupPresenterWidget; import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.host.SetupNetworksManagementPopupPresenterWidget; -import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.host.MultipleHostsPopupPresenterWidget; import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.pool.PoolEditPopupPresenterWidget; import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.pool.PoolNewPopupPresenterWidget; import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.quota.ChangeQuotaPopupPresenterWidget; @@ -98,6 +98,7 @@ import org.ovirt.engine.ui.webadmin.section.main.presenter.tab.cluster.SubTabClusterHostPresenter; import org.ovirt.engine.ui.webadmin.section.main.presenter.tab.cluster.SubTabClusterNetworkPresenter; import org.ovirt.engine.ui.webadmin.section.main.presenter.tab.cluster.SubTabClusterPermissionPresenter; +import org.ovirt.engine.ui.webadmin.section.main.presenter.tab.cluster.SubTabClusterServicePresenter; import org.ovirt.engine.ui.webadmin.section.main.presenter.tab.cluster.SubTabClusterVmPresenter; import org.ovirt.engine.ui.webadmin.section.main.presenter.tab.datacenter.DataCenterSubTabPanelPresenter; import org.ovirt.engine.ui.webadmin.section.main.presenter.tab.datacenter.SubTabDataCenterClusterPresenter; @@ -209,9 +210,9 @@ import org.ovirt.engine.ui.webadmin.section.main.view.popup.host.HostPopupView; import org.ovirt.engine.ui.webadmin.section.main.view.popup.host.HostSetupNetworksPopupView; import org.ovirt.engine.ui.webadmin.section.main.view.popup.host.ManualFenceConfirmationPopupView; +import org.ovirt.engine.ui.webadmin.section.main.view.popup.host.MultipleHostsPopupView; import org.ovirt.engine.ui.webadmin.section.main.view.popup.host.SetupNetworksInterfacePopupView; import org.ovirt.engine.ui.webadmin.section.main.view.popup.host.SetupNetworksManagementPopupView; -import org.ovirt.engine.ui.webadmin.section.main.view.popup.host.MultipleHostsPopupView; import org.ovirt.engine.ui.webadmin.section.main.view.popup.pool.PoolEditPopupView; import org.ovirt.engine.ui.webadmin.section.main.view.popup.pool.PoolNewPopupView; import org.ovirt.engine.ui.webadmin.section.main.view.popup.quota.ChangeQuotaPopupView; @@ -263,6 +264,7 @@ import org.ovirt.engine.ui.webadmin.section.main.view.tab.cluster.SubTabClusterHostView; import org.ovirt.engine.ui.webadmin.section.main.view.tab.cluster.SubTabClusterNetworkView; import org.ovirt.engine.ui.webadmin.section.main.view.tab.cluster.SubTabClusterPermissionView; +import org.ovirt.engine.ui.webadmin.section.main.view.tab.cluster.SubTabClusterServiceView; import org.ovirt.engine.ui.webadmin.section.main.view.tab.cluster.SubTabClusterVmView; import org.ovirt.engine.ui.webadmin.section.main.view.tab.datacenter.DataCenterSubTabPanelView; import org.ovirt.engine.ui.webadmin.section.main.view.tab.datacenter.SubTabDataCenterClusterView; @@ -536,6 +538,10 @@ SubTabClusterNetworkPresenter.ViewDef.class, SubTabClusterNetworkView.class, SubTabClusterNetworkPresenter.ProxyDef.class); + bindPresenter(SubTabClusterServicePresenter.class, + SubTabClusterServicePresenter.ViewDef.class, + SubTabClusterServiceView.class, + SubTabClusterServicePresenter.ProxyDef.class); bindPresenter(SubTabClusterPermissionPresenter.class, SubTabClusterPermissionPresenter.ViewDef.class, SubTabClusterPermissionView.class, diff --git a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/uicommon/ClusterModule.java b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/uicommon/ClusterModule.java index 7af4d72..d2eb0af 100644 --- a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/uicommon/ClusterModule.java +++ b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/uicommon/ClusterModule.java @@ -22,6 +22,7 @@ import org.ovirt.engine.ui.uicommonweb.models.clusters.ClusterHostListModel; import org.ovirt.engine.ui.uicommonweb.models.clusters.ClusterListModel; import org.ovirt.engine.ui.uicommonweb.models.clusters.ClusterNetworkListModel; +import org.ovirt.engine.ui.uicommonweb.models.clusters.ClusterServiceModel; import org.ovirt.engine.ui.uicommonweb.models.clusters.ClusterVmListModel; import org.ovirt.engine.ui.uicommonweb.models.configure.PermissionListModel; import org.ovirt.engine.ui.webadmin.gin.ClientGinjector; @@ -153,6 +154,14 @@ @Provides @Singleton + public DetailModelProvider<ClusterListModel, ClusterServiceModel> getClusterServiceProvider(ClientGinjector ginjector) { + return new DetailTabModelProvider<ClusterListModel, ClusterServiceModel>(ginjector, + ClusterListModel.class, + ClusterServiceModel.class); + } + + @Provides + @Singleton public SearchableDetailModelProvider<permissions, ClusterListModel, PermissionListModel> getPermissionListProvider(ClientGinjector ginjector, final Provider<PermissionsPopupPresenterWidget> popupProvider, final Provider<RemoveConfirmationPopupPresenterWidget> removeConfirmPopupProvider) { diff --git a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/place/ApplicationPlaces.java b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/place/ApplicationPlaces.java index e641aa2..bc7a597 100644 --- a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/place/ApplicationPlaces.java +++ b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/place/ApplicationPlaces.java @@ -106,6 +106,9 @@ public static final String clusterNetworkSubTabPlace = clusterMainTabPlace + SUB_TAB_PREFIX + "logical_networks"; //$NON-NLS-1$ + public static final String clusterServiceSubTabPlace = clusterMainTabPlace + SUB_TAB_PREFIX + + "services"; //$NON-NLS-1$ + public static final String clusterPermissionSubTabPlace = clusterMainTabPlace + SUB_TAB_PREFIX + "permissions"; //$NON-NLS-1$ diff --git a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/tab/cluster/SubTabClusterPermissionPresenter.java b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/tab/cluster/SubTabClusterPermissionPresenter.java index 2483993..b426eab 100644 --- a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/tab/cluster/SubTabClusterPermissionPresenter.java +++ b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/tab/cluster/SubTabClusterPermissionPresenter.java @@ -35,7 +35,7 @@ @TabInfo(container = ClusterSubTabPanelPresenter.class) static TabData getTabData(ClientGinjector ginjector) { - return new ModelBoundTabData(ginjector.getApplicationConstants().clusterPermissionSubTabLabel(), 4, + return new ModelBoundTabData(ginjector.getApplicationConstants().clusterPermissionSubTabLabel(), 5, ginjector.getSubTabClusterPermissionModelProvider()); } diff --git a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/tab/cluster/SubTabClusterServicePresenter.java b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/tab/cluster/SubTabClusterServicePresenter.java new file mode 100644 index 0000000..479048f --- /dev/null +++ b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/tab/cluster/SubTabClusterServicePresenter.java @@ -0,0 +1,62 @@ +package org.ovirt.engine.ui.webadmin.section.main.presenter.tab.cluster; + +import org.ovirt.engine.core.common.businessentities.VDSGroup; +import org.ovirt.engine.ui.common.presenter.AbstractSubTabPresenter; +import org.ovirt.engine.ui.common.uicommon.model.DetailModelProvider; +import org.ovirt.engine.ui.common.widget.tab.ModelBoundTabData; +import org.ovirt.engine.ui.uicommonweb.models.clusters.ClusterListModel; +import org.ovirt.engine.ui.uicommonweb.models.clusters.ClusterServiceModel; +import org.ovirt.engine.ui.webadmin.gin.ClientGinjector; +import org.ovirt.engine.ui.webadmin.place.ApplicationPlaces; +import org.ovirt.engine.ui.webadmin.section.main.presenter.tab.ClusterSelectionChangeEvent; + +import com.google.gwt.event.shared.EventBus; +import com.google.inject.Inject; +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.ProxyEvent; +import com.gwtplatform.mvp.client.annotations.TabInfo; +import com.gwtplatform.mvp.client.proxy.PlaceManager; +import com.gwtplatform.mvp.client.proxy.PlaceRequest; +import com.gwtplatform.mvp.client.proxy.RevealContentEvent; +import com.gwtplatform.mvp.client.proxy.TabContentProxyPlace; + +public class SubTabClusterServicePresenter extends AbstractSubTabPresenter<VDSGroup, ClusterListModel, ClusterServiceModel, SubTabClusterServicePresenter.ViewDef, SubTabClusterServicePresenter.ProxyDef> { + + @ProxyCodeSplit + @NameToken(ApplicationPlaces.clusterServiceSubTabPlace) + public interface ProxyDef extends TabContentProxyPlace<SubTabClusterServicePresenter> { + } + + public interface ViewDef extends AbstractSubTabPresenter.ViewDef<VDSGroup> { + } + + @TabInfo(container = ClusterSubTabPanelPresenter.class) + static TabData getTabData(ClientGinjector ginjector) { + return new ModelBoundTabData(ginjector.getApplicationConstants().clusterServiceSubTabLabel(), 4, + ginjector.getSubTabClusterServiceModelProvider()); + } + + @Inject + public SubTabClusterServicePresenter(EventBus eventBus, ViewDef view, ProxyDef proxy, + PlaceManager placeManager, DetailModelProvider<ClusterListModel, ClusterServiceModel> modelProvider) { + super(eventBus, view, proxy, placeManager, modelProvider); + } + + @Override + protected PlaceRequest getMainTabRequest() { + return new PlaceRequest(ApplicationPlaces.clusterMainTabPlace); + } + + @Override + protected void revealInParent() { + RevealContentEvent.fire(this, ClusterSubTabPanelPresenter.TYPE_SetTabContent, this); + } + + @ProxyEvent + public void onClusterSelectionChange(ClusterSelectionChangeEvent event) { + updateMainTabSelection(event.getSelectedItems()); + } + +} diff --git a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/cluster/SubTabClusterServiceView.java b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/cluster/SubTabClusterServiceView.java new file mode 100644 index 0000000..85bd6e3 --- /dev/null +++ b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/cluster/SubTabClusterServiceView.java @@ -0,0 +1,172 @@ +package org.ovirt.engine.ui.webadmin.section.main.view.tab.cluster; + +import javax.inject.Inject; + +import org.ovirt.engine.core.common.businessentities.VDS; +import org.ovirt.engine.core.common.businessentities.VDSGroup; +import org.ovirt.engine.core.common.businessentities.gluster.ServiceInfo; +import org.ovirt.engine.ui.common.idhandler.WithElementId; +import org.ovirt.engine.ui.common.uicommon.model.DetailModelProvider; +import org.ovirt.engine.ui.common.view.AbstractSubTabFormView; +import org.ovirt.engine.ui.common.widget.UiCommandButton; +import org.ovirt.engine.ui.common.widget.editor.EntityModelCellTable; +import org.ovirt.engine.ui.common.widget.editor.ListModelListBoxEditor; +import org.ovirt.engine.ui.common.widget.renderer.EnumRenderer; +import org.ovirt.engine.ui.common.widget.renderer.NullSafeRenderer; +import org.ovirt.engine.ui.common.widget.table.column.EntityModelTextColumn; +import org.ovirt.engine.ui.uicommonweb.models.ListModel; +import org.ovirt.engine.ui.uicommonweb.models.clusters.ClusterListModel; +import org.ovirt.engine.ui.uicommonweb.models.clusters.ClusterServiceModel; +import org.ovirt.engine.ui.webadmin.ApplicationConstants; +import org.ovirt.engine.ui.webadmin.section.main.presenter.tab.cluster.SubTabClusterServicePresenter; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.editor.client.Editor; +import com.google.gwt.editor.client.SimpleBeanEditorDriver; +import com.google.gwt.event.dom.client.ClickEvent; +import com.google.gwt.event.dom.client.ClickHandler; +import com.google.gwt.uibinder.client.UiBinder; +import com.google.gwt.uibinder.client.UiField; +import com.google.gwt.user.client.ui.Widget; + +public class SubTabClusterServiceView extends AbstractSubTabFormView<VDSGroup, ClusterListModel, ClusterServiceModel> + implements SubTabClusterServicePresenter.ViewDef, Editor<ClusterServiceModel> { + + interface Driver extends SimpleBeanEditorDriver<ClusterServiceModel, SubTabClusterServiceView> { + Driver driver = GWT.create(Driver.class); + } + + interface ViewUiBinder extends UiBinder<Widget, SubTabClusterServiceView> { + ViewUiBinder uiBinder = GWT.create(ViewUiBinder.class); + } + + @UiField(provided = true) + @Path(value = "hostList.selectedItem") + @WithElementId("hostList") + ListModelListBoxEditor<Object> hostEditor; + + @UiField(provided = true) + @Path(value = "serviceTypeList.selectedItem") + @WithElementId + ListModelListBoxEditor<Object> serviceTypeEditor; + + @UiField + @WithElementId + UiCommandButton filterButton; + + @UiField + @WithElementId + UiCommandButton clearButton; + + @UiField(provided = true) + @Ignore + @WithElementId + EntityModelCellTable<ListModel> servicesTable; + + @Inject + public SubTabClusterServiceView(final DetailModelProvider<ClusterListModel, ClusterServiceModel> modelProvider, + ApplicationConstants constants) { + super(modelProvider); + servicesTable = new EntityModelCellTable<ListModel>(false, true); + initListBoxEditors(); + initWidget(ViewUiBinder.uiBinder.createAndBindUi(this)); + localize(constants); + initTableColumns(constants); + initButtons(); + Driver.driver.initialize(this); + } + + private void initListBoxEditors() { + hostEditor = new ListModelListBoxEditor<Object>(new NullSafeRenderer<Object>() { + @Override + public String renderNullSafe(Object object) { + if (object != null) { + return ((VDS) object).gethost_name(); + } + else { + return ""; //$NON-NLS-1$ + } + } + }); + serviceTypeEditor = new ListModelListBoxEditor<Object>(new EnumRenderer() { + @Override + public String render(Enum object) { + if (object != null) { + return super.render(object); + } + else { + return ""; //$NON-NLS-1$ + } + } + }); + } + + private void localize(ApplicationConstants constants) { + hostEditor.setLabel(constants.hostService()); + serviceTypeEditor.setLabel(constants.nameService()); + filterButton.setLabel(constants.filterService()); + clearButton.setLabel(constants.showAllService()); + } + + protected void initTableColumns(ApplicationConstants constants) { + // Table Entity Columns + servicesTable.addEntityModelColumn(new EntityModelTextColumn<ServiceInfo>() { + @Override + public String getText(ServiceInfo entity) { + return entity.getHostName(); + } + }, constants.hostService()); + + servicesTable.addEntityModelColumn(new EntityModelTextColumn<ServiceInfo>() { + @Override + public String getText(ServiceInfo entity) { + return entity.getServiceType().name(); + } + }, constants.nameService()); + + servicesTable.addEntityModelColumn(new EntityModelTextColumn<ServiceInfo>() { + @Override + public String getText(ServiceInfo entity) { + return entity.getStatus().name(); + } + }, constants.statusService()); + + servicesTable.addEntityModelColumn(new EntityModelTextColumn<ServiceInfo>() { + @Override + public String getText(ServiceInfo entity) { + return String.valueOf(entity.getPort()); + } + }, constants.portService()); + + servicesTable.addEntityModelColumn(new EntityModelTextColumn<ServiceInfo>() { + @Override + public String getText(ServiceInfo entity) { + return String.valueOf(entity.getPid()); + } + }, constants.pidService()); + } + + private void initButtons() { + filterButton.addClickHandler(new ClickHandler() { + + @Override + public void onClick(ClickEvent event) { + getDetailModel().ExecuteCommand(getDetailModel().getFilterServicesCommand()); + } + }); + + clearButton.addClickHandler(new ClickHandler() { + + @Override + public void onClick(ClickEvent event) { + getDetailModel().ExecuteCommand(getDetailModel().getClearFilterServicesCommand()); + } + }); + } + + @Override + public void setMainTabSelectedItem(VDSGroup selectedItem) { + servicesTable.edit(getDetailModel().getServiceList()); + Driver.driver.edit(getDetailModel()); + } +} diff --git a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/cluster/SubTabClusterServiceView.ui.xml b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/cluster/SubTabClusterServiceView.ui.xml new file mode 100644 index 0000000..e858b06 --- /dev/null +++ b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/cluster/SubTabClusterServiceView.ui.xml @@ -0,0 +1,31 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent"> +<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder" xmlns:g="urn:import:com.google.gwt.user.client.ui" + xmlns:w="urn:import:org.ovirt.engine.ui.common.widget" + xmlns:e="urn:import:org.ovirt.engine.ui.common.widget.editor"> + + <ui:style> + .button { + margin: 5px; + } + .tablePanel { + border: 1px solid #CED8DF; + } + </ui:style> + + <g:DockLayoutPanel height="100%"> + <g:north size="50"> + <g:HorizontalPanel ui:field="filterPanel"> + <e:ListModelListBoxEditor ui:field="hostEditor" /> + <e:ListModelListBoxEditor ui:field="serviceTypeEditor" /> + <w:UiCommandButton ui:field="filterButton" addStyleNames="{style.button}"/> + <w:UiCommandButton ui:field="clearButton" addStyleNames="{style.button}"/> + </g:HorizontalPanel> + </g:north> + <g:center> + <g:ScrollPanel addStyleNames="{style.tablePanel}"> + <e:EntityModelCellTable ui:field="servicesTable"/> + </g:ScrollPanel> + </g:center> + </g:DockLayoutPanel> +</ui:UiBinder> -- To view, visit http://gerrit.ovirt.org/8460 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Iea624f12a07f4aa9b1c6ffa1548aaafb16a00a7a Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Kanagaraj M <kmayi...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches