Hello Sahina Bose,
I'd like you to do a code review. Please visit
https://gerrit.ovirt.org/39429
to review the following change.
Change subject: webadmin : Add Geo-Replication Sub-tab under Volumes MainTab
......................................................................
webadmin : Add Geo-Replication Sub-tab under Volumes MainTab
Add Geo-Replication Sub-tab under Volumes MainTab.
The sub-tab will contain a list of geo-replication sessions
setup for the volume.
Bug-Url: https://bugzilla.redhat.com/1138116
Change-Id: I1cbcd5e0218d93c1d198462133b2efc883267ffa
Signed-off-by: Anmol Babu <[email protected]>
Signed-off-by: Sahina Bose <[email protected]>
---
M
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/Linq.java
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/help/HelpTag.java
A
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/gluster/VolumeGeoRepListModel.java
M
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/volumes/VolumeListModel.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/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/uicommon/VolumeModule.java
A
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/tab/gluster/SubTabVolumeGeoRepPresenter.java
A
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/gluster/SubTabVolumeGeoRepView.java
13 files changed, 458 insertions(+), 12 deletions(-)
git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/29/39429/1
diff --git
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/Linq.java
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/Linq.java
index a3d386b..486ef0f 100644
---
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/Linq.java
+++
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/Linq.java
@@ -38,6 +38,7 @@
import
org.ovirt.engine.core.common.businessentities.comparators.LexoNumericComparator;
import
org.ovirt.engine.core.common.businessentities.comparators.NameableComparator;
import
org.ovirt.engine.core.common.businessentities.gluster.GlusterBrickEntity;
+import
org.ovirt.engine.core.common.businessentities.gluster.GlusterGeoRepSession;
import org.ovirt.engine.core.common.businessentities.network.Network;
import org.ovirt.engine.core.common.businessentities.network.NetworkInterface;
import org.ovirt.engine.core.common.businessentities.network.NetworkQoS;
@@ -124,6 +125,17 @@
}
}
+
+ public static class GlusterVolumeGeoRepSessionComparer implements
Comparator<GlusterGeoRepSession>, Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @Override
+ public int compare(GlusterGeoRepSession session0, GlusterGeoRepSession
session1) {
+ return
session0.getSlaveVolumeName().compareTo(session1.getSlaveVolumeName());
+ }
+ }
+
public static class DiskImageByLastModifiedComparer implements
Comparator<DiskImage>, Serializable
{
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 13854ca..81a8a98 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
@@ -72,6 +72,7 @@
import
org.ovirt.engine.core.common.businessentities.comparators.NameableComparator;
import
org.ovirt.engine.core.common.businessentities.gluster.GlusterBrickEntity;
import
org.ovirt.engine.core.common.businessentities.gluster.GlusterClusterService;
+import
org.ovirt.engine.core.common.businessentities.gluster.GlusterGeoRepSession;
import org.ovirt.engine.core.common.businessentities.gluster.GlusterHookEntity;
import
org.ovirt.engine.core.common.businessentities.gluster.GlusterServerService;
import
org.ovirt.engine.core.common.businessentities.gluster.GlusterVolumeEntity;
@@ -1580,7 +1581,17 @@
Frontend.getInstance().runQuery(VdcQueryType.GetGlusterVolumeBricksByServerId,
new IdQueryParameters(serverId), aQuery);
}
- public static void getGlusterHook(AsyncQuery aQuery, Guid hookId, boolean
includeServerHooks) {
+ public void getGlusterVolumeGeoRepStatusForMasterVolume(AsyncQuery aQuery,
Guid masterVolumeId) {
+ aQuery.converterCallback = new IAsyncConverter() {
+ @Override
+ public Object Convert(Object source, AsyncQuery asyncQuery) {
+ return source != null ? source : new
ArrayList<GlusterGeoRepSession>();
+ }
+ };
+
Frontend.getInstance().runQuery(VdcQueryType.GetGlusterVolumeGeoRepSessions,
new IdQueryParameters(masterVolumeId), aQuery);
+ }
+
+ public void getGlusterHook(AsyncQuery aQuery, Guid hookId, boolean
includeServerHooks) {
aQuery.converterCallback = new IAsyncConverter() {
@Override
public Object Convert(Object source, AsyncQuery _asyncQuery)
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 97419ca..4af2c64 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
@@ -54,6 +54,8 @@
bricks("bricks", HelpTagType.UNKNOWN), //$NON-NLS-1$
+ geo_replication("geo_replication", HelpTagType.UNKNOWN), //$NON-NLS-1$
+
cannot_add_bricks("cannot_add_bricks", HelpTagType.WEBADMIN, "[gluster]
Volumes main tab -> Bricks sub tab (Add Bricks context), dialog shows the
following message: 'Could not find any host in Up status in the cluster. Please
try again later.'"), //$NON-NLS-1$ //$NON-NLS-2$
change_cd("change_cd", HelpTagType.COMMON, "VMs Tab > Change CD"),
//$NON-NLS-1$ //$NON-NLS-2$
diff --git
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/gluster/VolumeGeoRepListModel.java
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/gluster/VolumeGeoRepListModel.java
new file mode 100644
index 0000000..2875d72
--- /dev/null
+++
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/gluster/VolumeGeoRepListModel.java
@@ -0,0 +1,186 @@
+package org.ovirt.engine.ui.uicommonweb.models.gluster;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import
org.ovirt.engine.core.common.businessentities.gluster.GlusterGeoRepSession;
+import
org.ovirt.engine.core.common.businessentities.gluster.GlusterVolumeEntity;
+import org.ovirt.engine.ui.frontend.AsyncQuery;
+import org.ovirt.engine.ui.frontend.INewAsyncCallback;
+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.SearchableListModel;
+import org.ovirt.engine.ui.uicompat.ConstantsManager;
+import org.ovirt.engine.ui.uicompat.PropertyChangedEventArgs;
+
+public class VolumeGeoRepListModel extends SearchableListModel{
+
+ private UICommand newSessionCommand;
+ private UICommand removeSessionCommand;
+ private UICommand startSessionCommand;
+ private UICommand stopSessionCommand;
+ private UICommand sessionOptionsCommand;
+ private UICommand viewSessionDetailsCommand;
+
+
+ @Override
+ protected String getListName() {
+ return "VolumeGeoReplicationModel";//$NON-NLS-1$
+ }
+
+ public VolumeGeoRepListModel() {
+
setTitle(ConstantsManager.getInstance().getConstants().geoReplicationTitle());
+ setHelpTag(HelpTag.geo_replication);
+ setHashName("geo_replication");//$NON-NLS-1$
+ setNewSessionCommand(new UICommand("createNewSession",
this));//$NON-NLS-1$
+ setRemoveSessionCommand(new UICommand("removeSession",
this));//$NON-NLS-1$
+ setStartSessionCommand(new UICommand("startSession",
this));//$NON-NLS-1$
+ setStopSessionCommand(new UICommand("stopSession", this));//$NON-NLS-1$
+ setSessionOptionsCommand(new UICommand("sessionOptions",
this));//$NON-NLS-1$
+ setViewSessionDetailsCommand(new UICommand("viewSessionDetails",
this));//$NON-NLS-1$
+ }
+
+ public UICommand getViewSessionDetailsCommand() {
+ return viewSessionDetailsCommand;
+ }
+
+ public void setViewSessionDetailsCommand(UICommand viewDetailsCommand) {
+ this.viewSessionDetailsCommand = viewDetailsCommand;
+ }
+
+ public UICommand getNewSessionCommand() {
+ return newSessionCommand;
+ }
+
+ public void setNewSessionCommand(UICommand newSessionCommand) {
+ this.newSessionCommand = newSessionCommand;
+ }
+
+ public UICommand getRemoveSessionCommand() {
+ return removeSessionCommand;
+ }
+
+ public void setRemoveSessionCommand(UICommand removeSessionCommand) {
+ this.removeSessionCommand = removeSessionCommand;
+ }
+
+ public UICommand getStartSessionCommand() {
+ return startSessionCommand;
+ }
+
+ public void setStartSessionCommand(UICommand startCommand) {
+ this.startSessionCommand = startCommand;
+ }
+
+ public UICommand getStopSessionCommand() {
+ return stopSessionCommand;
+ }
+
+ public void setStopSessionCommand(UICommand stopCommand) {
+ this.stopSessionCommand = stopCommand;
+ }
+
+ public UICommand getSessionOptionsCommand() {
+ return sessionOptionsCommand;
+ }
+
+ public void setSessionOptionsCommand(UICommand optionsCommand) {
+ this.sessionOptionsCommand = optionsCommand;
+ }
+
+ @Override
+ protected void onEntityChanged() {
+ super.onEntityChanged();
+ getSearchCommand().execute();
+ }
+
+ @Override
+ protected void entityPropertyChanged(Object sender,
PropertyChangedEventArgs e)
+ {
+ super.entityPropertyChanged(sender, e);
+ getSearchCommand().execute();
+ }
+
+ @Override
+ protected void selectedItemsChanged()
+ {
+ super.selectedItemsChanged();
+ updateActionAvailability(getEntity());
+ }
+
+ @Override
+ public void search()
+ {
+ if (getEntity() != null)
+ {
+ super.search();
+ }
+ }
+
+ @Override
+ protected void syncSearch() {
+ if (getEntity() == null)
+ {
+ return;
+ }
+
+
AsyncDataProvider.getInstance().getGlusterVolumeGeoRepStatusForMasterVolume(new
AsyncQuery(this, new INewAsyncCallback() {
+ @Override
+ public void onSuccess(Object model, Object returnValue) {
+ List<GlusterGeoRepSession> geoRepSessions =
(ArrayList<GlusterGeoRepSession>) returnValue;
+ Collections.sort(geoRepSessions, new
Linq.GlusterVolumeGeoRepSessionComparer());
+ setItems(geoRepSessions);
+ }
+ }), getEntity().getId());
+
+ }
+
+ private void updateActionAvailability(GlusterVolumeEntity volumeEntity) {
+ if(volumeEntity == null) {
+ return;
+ }
+ getNewSessionCommand().setIsAvailable(true);
+ getRemoveSessionCommand().setIsAvailable(false);
+ getStartSessionCommand().setIsAvailable(false);
+ getStopSessionCommand().setIsAvailable(false);
+ getSessionOptionsCommand().setIsAvailable(false);
+ getViewSessionDetailsCommand().setIsAvailable(false);
+ }
+
+ @Override
+ public void executeCommand(UICommand command) {
+ super.executeCommand(command);
+ if(command.equals(getNewSessionCommand())) {
+ createNewGeoRepSession();
+ } else if(command.equals(getRemoveSessionCommand())) {
+
+ } else if(command.equals(getStartSessionCommand())) {
+
+ } else if(command.equals(getStopSessionCommand())) {
+
+ } else if(command.equals(getSessionOptionsCommand())) {
+
+ } else if(command.equals(getViewSessionDetailsCommand())) {
+
+ }
+ }
+
+ private void createNewGeoRepSession() {
+
+ }
+
+ @Override
+ public GlusterVolumeEntity getEntity()
+ {
+ return (GlusterVolumeEntity) super.getEntity();
+ }
+
+ public void setEntity(GlusterVolumeEntity value)
+ {
+ super.setEntity(value);
+ }
+
+}
diff --git
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/volumes/VolumeListModel.java
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/volumes/VolumeListModel.java
index 1123e2e..dd80bd3 100644
---
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/volumes/VolumeListModel.java
+++
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/volumes/VolumeListModel.java
@@ -54,6 +54,7 @@
import org.ovirt.engine.ui.uicommonweb.models.gluster.VolumeBrickListModel;
import org.ovirt.engine.ui.uicommonweb.models.gluster.VolumeEventListModel;
import org.ovirt.engine.ui.uicommonweb.models.gluster.VolumeGeneralModel;
+import org.ovirt.engine.ui.uicommonweb.models.gluster.VolumeGeoRepListModel;
import org.ovirt.engine.ui.uicommonweb.models.gluster.VolumeModel;
import org.ovirt.engine.ui.uicommonweb.models.gluster.VolumeParameterListModel;
import
org.ovirt.engine.ui.uicommonweb.models.gluster.VolumeProfileStatisticsModel;
@@ -164,6 +165,16 @@
this.brickListModel = brickListModel;
}
+ private VolumeGeoRepListModel geoRepListModel;
+
+ public VolumeGeoRepListModel getGeoRepListModel() {
+ return geoRepListModel;
+ }
+
+ public void setGeoRepListModel(VolumeGeoRepListModel geoRepListModel) {
+ this.geoRepListModel = geoRepListModel;
+ }
+
public UICommand getStartVolumeProfilingCommand() {
return startVolumeProfilingCommand;
}
@@ -227,11 +238,13 @@
super.initDetailModels();
setBrickListModel(new VolumeBrickListModel());
+ setGeoRepListModel(new VolumeGeoRepListModel());
ObservableCollection<EntityModel> list = new
ObservableCollection<EntityModel>();
list.add(new VolumeGeneralModel());
list.add(new VolumeParameterListModel());
list.add(getBrickListModel());
+ list.add(getGeoRepListModel());
list.add(new PermissionListModel());
list.add(new VolumeEventListModel());
setDetailModels(list);
@@ -406,7 +419,9 @@
protected void onSelectedItemChanged() {
super.onSelectedItemChanged();
updateActionAvailability();
- getBrickListModel().setVolumeEntity((GlusterVolumeEntity)
provideDetailModelEntity(getSelectedItem()));
+ GlusterVolumeEntity selectedVolume =
(GlusterVolumeEntity)provideDetailModelEntity(getSelectedItem());
+ getBrickListModel().setVolumeEntity(selectedVolume);
+ getGeoRepListModel().setEntity(selectedVolume);
}
@Override
@@ -1023,11 +1038,11 @@
return;
}
- Guid clusterId = ((VDSGroup)
volumeModel.getCluster().getSelectedItem()).getId();
+ Guid clusterId = volumeModel.getCluster().getSelectedItem().getId();
final GlusterVolumeEntity volume = new GlusterVolumeEntity();
volume.setClusterId(clusterId);
- volume.setName((String) volumeModel.getName().getEntity());
- GlusterVolumeType type = (GlusterVolumeType)
volumeModel.getTypeList().getSelectedItem();
+ volume.setName(volumeModel.getName().getEntity());
+ GlusterVolumeType type = volumeModel.getTypeList().getSelectedItem();
if (type.isStripedType()) {
volume.setStripeCount(volumeModel.getStripeCountValue());
@@ -1038,10 +1053,10 @@
volume.setVolumeType(type);
- if ((Boolean) volumeModel.getTcpTransportType().getEntity()) {
+ if (volumeModel.getTcpTransportType().getEntity()) {
volume.getTransportTypes().add(TransportType.TCP);
}
- if ((Boolean) volumeModel.getRdmaTransportType().getEntity()) {
+ if (volumeModel.getRdmaTransportType().getEntity()) {
volume.getTransportTypes().add(TransportType.RDMA);
}
@@ -1054,21 +1069,21 @@
volume.setBricks(brickList);
- if ((Boolean) volumeModel.getNfs_accecssProtocol().getEntity()) {
+ if (volumeModel.getNfs_accecssProtocol().getEntity()) {
volume.enableNFS();
}
else {
volume.disableNFS();
}
- if ((Boolean) volumeModel.getCifs_accecssProtocol().getEntity()) {
+ if (volumeModel.getCifs_accecssProtocol().getEntity()) {
volume.enableCifs();
}
else {
volume.disableCifs();
}
- volume.setAccessControlList((String)
volumeModel.getAllowAccess().getEntity());
+ volume.setAccessControlList(volumeModel.getAllowAccess().getEntity());
volumeModel.startProgress(null);
@@ -1094,7 +1109,7 @@
if (returnValue != null && returnValue.getSucceeded())
{
cancel();
- if ((Boolean) model.getOptimizeForVirtStore().getEntity()) {
+ if (model.getOptimizeForVirtStore().getEntity()) {
optimizeVolumesForVirtStore(Arrays.asList(volume));
}
}
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 ab057e5..759d8d5 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
@@ -306,6 +306,8 @@
public static final String volumeEventSubTabPlace = volumeMainTabPlace +
SUB_TAB_PREFIX + "events"; //$NON-NLS-1$
+ public static final String volumeGeoRepSubTabPlace = volumeMainTabPlace +
SUB_TAB_PREFIX + "geo_rep"; //$NON-NLS-1$
+
// Disk
public static final String diskGeneralSubTabPlace = diskMainTabPlace +
SUB_TAB_PREFIX + "general"; //$NON-NLS-1$
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 1f4b89c..ff6715c 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
@@ -279,6 +279,9 @@
@DefaultStringValue("Bricks")
String bricksTitle();
+ @DefaultStringValue("Geo-Replication")
+ String geoReplicationTitle();
+
@DefaultStringValue("Rebalance Status")
String volumeRebalanceStatusTitle();
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 57329f2..eeff2f0 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
@@ -103,6 +103,39 @@
@DefaultStringValue("Bricks")
String volumeBrickSubTabLabel();
+ @DefaultStringValue("Geo-Replication")
+ String volumeGeoRepSubTabLabel();
+
+ @DefaultStringValue("Destination Host")
+ String volumeSubTabGeoRepSlaveClusterHostColumn();
+
+ @DefaultStringValue("Destination Volume")
+ String volumeSubTabGeoRepSlaveVolumeColumn();
+
+ @DefaultStringValue("Status")
+ String volumeSubTabGeoRepStatusColumn();
+
+ @DefaultStringValue("Up Time")
+ String volumeSubTabGeoRepUptime();
+
+ @DefaultStringValue("New")
+ String newGeoRepSession();
+
+ @DefaultStringValue("Remove")
+ String removeGeoRepSession();
+
+ @DefaultStringValue("Start")
+ String startGeoRepSession();
+
+ @DefaultStringValue("Stop")
+ String stopGeoRepSession();
+
+ @DefaultStringValue("Options")
+ String geoRepSessionsOptions();
+
+ @DefaultStringValue("View Details")
+ String geoRepSessionDetails();
+
@DefaultStringValue("Permissions")
String volumePermissionSubTabLabel();
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 fbb2bd8..966f15b 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
@@ -21,6 +21,7 @@
import org.ovirt.engine.core.common.businessentities.aaa.DbUser;
import org.ovirt.engine.core.common.businessentities.event_subscriber;
import
org.ovirt.engine.core.common.businessentities.gluster.GlusterBrickEntity;
+import
org.ovirt.engine.core.common.businessentities.gluster.GlusterGeoRepSession;
import org.ovirt.engine.core.common.businessentities.gluster.GlusterHookEntity;
import
org.ovirt.engine.core.common.businessentities.gluster.GlusterServerService;
import
org.ovirt.engine.core.common.businessentities.gluster.GlusterVolumeEntity;
@@ -73,6 +74,7 @@
import org.ovirt.engine.ui.uicommonweb.models.gluster.VolumeBrickListModel;
import org.ovirt.engine.ui.uicommonweb.models.gluster.VolumeEventListModel;
import org.ovirt.engine.ui.uicommonweb.models.gluster.VolumeGeneralModel;
+import org.ovirt.engine.ui.uicommonweb.models.gluster.VolumeGeoRepListModel;
import org.ovirt.engine.ui.uicommonweb.models.gluster.VolumeParameterListModel;
import org.ovirt.engine.ui.uicommonweb.models.hosts.HostBricksListModel;
import org.ovirt.engine.ui.uicommonweb.models.hosts.HostEventListModel;
@@ -381,6 +383,8 @@
SearchableDetailModelProvider<AuditLog, VolumeListModel,
VolumeEventListModel> getSubTabVolumeEventModelProvider();
+ SearchableDetailModelProvider<GlusterGeoRepSession, VolumeListModel,
VolumeGeoRepListModel> getSubTabVolumeGeoRepModelProvider();
+
// Disk
DetailModelProvider<DiskListModel, DiskGeneralModel>
getSubTabDiskGeneralModelProvider();
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 3d97a3c..f003ee4 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
@@ -161,6 +161,7 @@
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.VolumeSubTabPanelPresenter;
@@ -400,6 +401,7 @@
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.VolumeSubTabPanelView;
@@ -1409,6 +1411,11 @@
SubTabVolumeBrickView.class,
SubTabVolumeBrickPresenter.ProxyDef.class);
+ bindPresenter(SubTabVolumeGeoRepPresenter.class,
+ SubTabVolumeGeoRepPresenter.ViewDef.class,
+ SubTabVolumeGeoRepView.class,
+ SubTabVolumeGeoRepPresenter.ProxyDef.class);
+
bindPresenter(SubTabVolumeParameterPresenter.class,
SubTabVolumeParameterPresenter.ViewDef.class,
SubTabVolumeParameterView.class,
diff --git
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/uicommon/VolumeModule.java
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/uicommon/VolumeModule.java
index f8a2c66..95910e2 100644
---
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/uicommon/VolumeModule.java
+++
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/uicommon/VolumeModule.java
@@ -3,6 +3,7 @@
import org.ovirt.engine.core.common.businessentities.AuditLog;
import org.ovirt.engine.core.common.businessentities.Permissions;
import
org.ovirt.engine.core.common.businessentities.gluster.GlusterBrickEntity;
+import
org.ovirt.engine.core.common.businessentities.gluster.GlusterGeoRepSession;
import
org.ovirt.engine.core.common.businessentities.gluster.GlusterVolumeEntity;
import
org.ovirt.engine.core.common.businessentities.gluster.GlusterVolumeOptionEntity;
import
org.ovirt.engine.ui.common.presenter.AbstractModelBoundPopupPresenterWidget;
@@ -22,6 +23,7 @@
import org.ovirt.engine.ui.uicommonweb.models.gluster.VolumeBrickListModel;
import org.ovirt.engine.ui.uicommonweb.models.gluster.VolumeEventListModel;
import org.ovirt.engine.ui.uicommonweb.models.gluster.VolumeGeneralModel;
+import org.ovirt.engine.ui.uicommonweb.models.gluster.VolumeGeoRepListModel;
import org.ovirt.engine.ui.uicommonweb.models.gluster.VolumeParameterListModel;
import org.ovirt.engine.ui.uicommonweb.models.volumes.VolumeListModel;
import
org.ovirt.engine.ui.webadmin.section.main.presenter.popup.PermissionsPopupPresenterWidget;
@@ -145,6 +147,17 @@
@Provides
@Singleton
+ public SearchableDetailModelProvider<GlusterGeoRepSession,
VolumeListModel, VolumeGeoRepListModel> getVolumeGeoRepListProvider(EventBus
eventBus, Provider<DefaultConfirmationPopupPresenterWidget>
defaultConfirmPopupProvider) {
+ return new SearchableDetailTabModelProvider<GlusterGeoRepSession,
VolumeListModel, VolumeGeoRepListModel>(eventBus, defaultConfirmPopupProvider,
VolumeListModel.class, VolumeGeoRepListModel.class) {
+ @Override
+ public AbstractModelBoundPopupPresenterWidget<? extends Model, ?>
getModelPopup(VolumeGeoRepListModel source, UICommand lastExecutedCommand,
Model windowModel) {
+ return null;
+ }
+ };
+ }
+
+ @Provides
+ @Singleton
public SearchableDetailModelProvider<GlusterVolumeOptionEntity,
VolumeListModel, VolumeParameterListModel>
getVolumeParameterListProvider(EventBus eventBus,
Provider<DefaultConfirmationPopupPresenterWidget>
defaultConfirmPopupProvider,
final Provider<VolumeParameterPopupPresenterWidget>
addParameterPopupProvider,
@@ -221,7 +234,6 @@
}
};
}
-
@Override
protected void configure() {
diff --git
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/tab/gluster/SubTabVolumeGeoRepPresenter.java
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/tab/gluster/SubTabVolumeGeoRepPresenter.java
new file mode 100644
index 0000000..cb93e49
--- /dev/null
+++
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/tab/gluster/SubTabVolumeGeoRepPresenter.java
@@ -0,0 +1,53 @@
+package org.ovirt.engine.ui.webadmin.section.main.presenter.tab.gluster;
+
+import
org.ovirt.engine.core.common.businessentities.gluster.GlusterGeoRepSession;
+import
org.ovirt.engine.core.common.businessentities.gluster.GlusterVolumeEntity;
+import org.ovirt.engine.ui.common.place.PlaceRequestFactory;
+import org.ovirt.engine.ui.common.presenter.AbstractSubTabPresenter;
+import org.ovirt.engine.ui.common.uicommon.model.SearchableDetailModelProvider;
+import org.ovirt.engine.ui.common.widget.tab.ModelBoundTabData;
+import org.ovirt.engine.ui.uicommonweb.models.gluster.VolumeGeoRepListModel;
+import org.ovirt.engine.ui.uicommonweb.models.volumes.VolumeListModel;
+import org.ovirt.engine.ui.webadmin.ApplicationConstants;
+import org.ovirt.engine.ui.webadmin.place.ApplicationPlaces;
+import
org.ovirt.engine.ui.webadmin.section.main.presenter.tab.VolumeSelectionChangeEvent;
+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.TabContentProxyPlace;
+
+public class SubTabVolumeGeoRepPresenter extends
AbstractSubTabPresenter<GlusterVolumeEntity, VolumeListModel,
VolumeGeoRepListModel, SubTabVolumeGeoRepPresenter.ViewDef,
SubTabVolumeGeoRepPresenter.ProxyDef> {
+ @TabInfo(container = VolumeSubTabPanelPresenter.class)
+ static TabData getTabData(ApplicationConstants applicationConstants,
SearchableDetailModelProvider<GlusterGeoRepSession, VolumeListModel,
VolumeGeoRepListModel> modelProvider) {
+ return new
ModelBoundTabData(applicationConstants.volumeGeoRepSubTabLabel(), 4,
modelProvider);
+ }
+
+ @Inject
+ public SubTabVolumeGeoRepPresenter(EventBus eventBus, ViewDef view,
ProxyDef proxy, PlaceManager placeManager,
SearchableDetailModelProvider<GlusterGeoRepSession, VolumeListModel,
VolumeGeoRepListModel> modelProvider) {
+ super(eventBus, view, proxy, placeManager, modelProvider,
VolumeSubTabPanelPresenter.TYPE_SetTabContent);
+ }
+
+ @ProxyCodeSplit
+ @NameToken(ApplicationPlaces.volumeGeoRepSubTabPlace)
+ public interface ProxyDef extends
TabContentProxyPlace<SubTabVolumeGeoRepPresenter> {
+ }
+
+ public interface ViewDef extends
AbstractSubTabPresenter.ViewDef<GlusterVolumeEntity> {
+ }
+
+ @Override
+ protected PlaceRequest getMainTabRequest() {
+ return PlaceRequestFactory.get(ApplicationPlaces.volumeMainTabPlace);
+ }
+
+ @ProxyEvent
+ public void onVolumeSelectionChange(VolumeSelectionChangeEvent event) {
+ updateMainTabSelection(event.getSelectedItems());
+ }
+}
diff --git
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/gluster/SubTabVolumeGeoRepView.java
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/gluster/SubTabVolumeGeoRepView.java
new file mode 100644
index 0000000..d6c5ab5
--- /dev/null
+++
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/gluster/SubTabVolumeGeoRepView.java
@@ -0,0 +1,106 @@
+package org.ovirt.engine.ui.webadmin.section.main.view.tab.gluster;
+
+import
org.ovirt.engine.core.common.businessentities.gluster.GlusterGeoRepSession;
+import
org.ovirt.engine.core.common.businessentities.gluster.GlusterVolumeEntity;
+import org.ovirt.engine.ui.common.idhandler.ElementIdHandler;
+import org.ovirt.engine.ui.common.uicommon.model.SearchableDetailModelProvider;
+import org.ovirt.engine.ui.common.widget.table.column.TextColumnWithTooltip;
+import org.ovirt.engine.ui.uicommonweb.UICommand;
+import org.ovirt.engine.ui.uicommonweb.models.gluster.VolumeGeoRepListModel;
+import org.ovirt.engine.ui.uicommonweb.models.volumes.VolumeListModel;
+import org.ovirt.engine.ui.webadmin.ApplicationConstants;
+import
org.ovirt.engine.ui.webadmin.section.main.presenter.tab.gluster.SubTabVolumeGeoRepPresenter;
+import org.ovirt.engine.ui.webadmin.section.main.view.AbstractSubTabTableView;
+import org.ovirt.engine.ui.webadmin.widget.action.WebAdminButtonDefinition;
+
+import com.google.gwt.core.client.GWT;
+import com.google.inject.Inject;
+
+public class SubTabVolumeGeoRepView
+ extends
+ AbstractSubTabTableView<GlusterVolumeEntity, GlusterGeoRepSession,
VolumeListModel, VolumeGeoRepListModel>
+ implements SubTabVolumeGeoRepPresenter.ViewDef {
+
+ interface ViewIdHandler extends ElementIdHandler<SubTabVolumeGeoRepView> {
+ ViewIdHandler idHandler = GWT.create(ViewIdHandler.class);
+ }
+
+ @Inject
+ public
SubTabVolumeGeoRepView(SearchableDetailModelProvider<GlusterGeoRepSession,
VolumeListModel, VolumeGeoRepListModel> modelProvider,
+ ApplicationConstants constants) {
+ super(modelProvider);
+ initTable(constants);
+ initWidget(getTable());
+ }
+
+ @Override
+ protected void generateIds() {
+ ViewIdHandler.idHandler.generateAndSetIds(this);
+ }
+
+ void initTable(ApplicationConstants constants) {
+ getTable().enableColumnResizing();
+ getTable().addColumn(new TextColumnWithTooltip<GlusterGeoRepSession>()
{
+ @Override
+ public String getValue(GlusterGeoRepSession object) {
+ return object.getSlaveHostName();
+ }
+ }, constants.volumeSubTabGeoRepSlaveClusterHostColumn(), "220px");
//$NON-NLS-1$
+
+ getTable().addColumn(new TextColumnWithTooltip<GlusterGeoRepSession>()
{
+ @Override
+ public String getValue(GlusterGeoRepSession object) {
+ return object.getSlaveVolumeName();
+ }
+ }, constants.volumeSubTabGeoRepSlaveVolumeColumn(), "220px");
//$NON-NLS-1$
+
+ getTable().addColumn(new TextColumnWithTooltip<GlusterGeoRepSession>()
{
+ @Override
+ public String getValue(GlusterGeoRepSession object) {
+ return object.getStatus().toString();
+ }
+ }, constants.volumeSubTabGeoRepStatusColumn(), "150px"); //$NON-NLS-1$
+
+ getTable().addActionButton(new
WebAdminButtonDefinition<GlusterGeoRepSession>(constants.newGeoRepSession()) {
+ @Override
+ protected UICommand resolveCommand() {
+ return getDetailModel().getNewSessionCommand();
+ }
+ });
+
+ getTable().addActionButton(new
WebAdminButtonDefinition<GlusterGeoRepSession>(constants.removeGeoRepSession())
{
+ @Override
+ protected UICommand resolveCommand() {
+ return null;
+ }
+ });
+
+ getTable().addActionButton(new
WebAdminButtonDefinition<GlusterGeoRepSession>(constants.startGeoRepSession()) {
+ @Override
+ protected UICommand resolveCommand() {
+ return null;
+ }
+ });
+
+ getTable().addActionButton(new
WebAdminButtonDefinition<GlusterGeoRepSession>(constants.stopGeoRepSession()) {
+ @Override
+ protected UICommand resolveCommand() {
+ return null;
+ }
+ });
+
+ getTable().addActionButton(new
WebAdminButtonDefinition<GlusterGeoRepSession>(constants.geoRepSessionsOptions())
{
+ @Override
+ protected UICommand resolveCommand() {
+ return null;
+ }
+ });
+
+ getTable().addActionButton(new
WebAdminButtonDefinition<GlusterGeoRepSession>(constants.geoRepSessionDetails())
{
+ @Override
+ protected UICommand resolveCommand() {
+ return null;
+ }
+ });
+ }
+}
--
To view, visit https://gerrit.ovirt.org/39429
To unsubscribe, visit https://gerrit.ovirt.org/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I1cbcd5e0218d93c1d198462133b2efc883267ffa
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: ovirt-engine-3.5-gluster
Gerrit-Owner: anmolbabu <[email protected]>
Gerrit-Reviewer: Sahina Bose <[email protected]>
_______________________________________________
Engine-patches mailing list
[email protected]
http://lists.ovirt.org/mailman/listinfo/engine-patches