Alexander Wels has uploaded a new change for review. Change subject: webadmin: cluster guide me datacenter ......................................................................
webadmin: cluster guide me datacenter - Added add data center button to popup view when the cluster has no data center associated with it. - Added popup window to select the data center to associate with the cluster. This popup contains a list of available data centers filtered by the following rules: - Data center compatibility level <= Cluster compatibility level - Date center with local data and no assigned cluster. - Fixed issue where this patch would not allow new VMs to be created. Change-Id: Ifaafdd5593d3721b9e6a8b466b2ac186b18bd6ff Bug-Url: https://bugzilla.redhat.com/show_bug.cgi?id=1136414 Signed-off-by: Alexander Wels <aw...@redhat.com> --- M frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/EntityModelCellTable.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/clusters/ClusterGuideModel.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/gin/PresenterModule.java A frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/popup/cluster/AddDataCenterClusterPopupPresenterWidget.java M frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/popup/guide/GuidePopupPresenterWidget.java A frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/cluster/AddDataCenterClusterPopupView.java A frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/cluster/AddDataCenterClusterPopupView.ui.xml 8 files changed, 441 insertions(+), 174 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/86/41486/1 diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/EntityModelCellTable.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/EntityModelCellTable.java index b14a121..e466551 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/EntityModelCellTable.java +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/EntityModelCellTable.java @@ -227,13 +227,13 @@ for (EntityModel entity : (List<EntityModel>) getListModel().getItems()) { entity.setIsSelected(false); } - getListModel().setSelectedItems(null); // Set "IsSelected" SelectionModel<? super EntityModel> selectionModel = EntityModelCellTable.this.getSelectionModel(); if (selectionModel instanceof SingleSelectionModel) { EntityModel selectedObject = ((SingleSelectionModel<EntityModel>) selectionModel).getSelectedObject(); + clearCurrentSelectedItems(); if (selectedObject != null) { selectedObject.setIsSelected(true); getListModel().setSelectedItem(selectedObject); @@ -244,9 +244,15 @@ entity.setIsSelected(true); selectedItems.add(entity); } + clearCurrentSelectedItems(); getListModel().setSelectedItems(selectedItems); } } + + private void clearCurrentSelectedItems() { + getListModel().setSelectedItems(null); + getListModel().setSelectedItem(null); + } }); } diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/clusters/ClusterGuideModel.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/clusters/ClusterGuideModel.java index cb1c671..635836e 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/clusters/ClusterGuideModel.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/clusters/ClusterGuideModel.java @@ -5,7 +5,9 @@ import java.util.List; import com.google.gwt.user.client.Timer; + import org.ovirt.engine.core.common.action.ChangeVDSClusterParameters; +import org.ovirt.engine.core.common.action.ManagementNetworkOnClusterOperationParameters; import org.ovirt.engine.core.common.action.VdcActionParametersBase; import org.ovirt.engine.core.common.action.VdcActionType; import org.ovirt.engine.core.common.action.VdcReturnValueBase; @@ -42,27 +44,33 @@ import org.ovirt.engine.ui.uicompat.IFrontendActionAsyncCallback; import org.ovirt.engine.ui.uicompat.IFrontendMultipleActionAsyncCallback; -@SuppressWarnings("unused") -public class ClusterGuideModel extends GuideModel -{ +public class ClusterGuideModel extends GuideModel { - public final String ClusterConfigureHostsAction = ConstantsManager.getInstance() - .getConstants() - .configureHostClusterGuide(); - public final String ClusterAddAnotherHostAction = ConstantsManager.getInstance() - .getConstants() - .addAnotherHostClusterGuide(); - public final String SelectHostsAction = ConstantsManager.getInstance().getConstants().selectHostsClusterGuide(); + //Action command names + private static final String ADD_DATA_CENTER = "AddDataCenter"; //$NON-NLS-1$ + private static final String CANCEL_CONFIRM_WITH_FOCUS = "CancelConfirmWithFocus"; //$NON-NLS-1$ + private static final String CANCEL_CONFIRM = "CancelConfirm"; //$NON-NLS-1$ + private static final String CANCEL = "Cancel"; //$NON-NLS-1$ + private static final String ON_SELECT_HOST = "OnSelectHost"; //$NON-NLS-1$ + private static final String SELECT_HOST = "SelectHost"; //$NON-NLS-1$ + private static final String ON_ADD_HOST = "OnAddHost"; //$NON-NLS-1$ + private static final String ON_CONFIRM_PM_HOST = "OnConfirmPMHost"; //$NON-NLS-1$ + private static final String ADD_HOST = "AddHost"; //$NON-NLS-1$ + private static final String ON_ADD_DATACENTER = "OnAddDataCenter"; //$NON-NLS-1$ + + //Pop-up and button titles. + private final String clusterConfigureHostsActionTitle = + ConstantsManager.getInstance().getConstants().configureHostClusterGuide(); + private final String clusterAddAnotherHostActionTitle = + ConstantsManager.getInstance().getConstants().addAnotherHostClusterGuide(); + private final String selectHostsActionTitle = + ConstantsManager.getInstance().getConstants().selectHostsClusterGuide(); + private final String addDataCenterTitle = ConstantsManager.getInstance().getConstants().addDataCenter(); + private final String noAvailableActions = ConstantsManager.getInstance().getConstants().guidePopupNoActionsLabel(); @Override - public VDSGroup getEntity() - { + public VDSGroup getEntity() { return (VDSGroup) ((super.getEntity() instanceof VDSGroup) ? super.getEntity() : null); - } - - public void setEntity(VDSGroup value) - { - super.setEntity(value); } @Override @@ -90,16 +98,16 @@ } }), getEntity().getName()); - AsyncDataProvider.getInstance().getHostList(new AsyncQuery(this, - new INewAsyncCallback() { - @Override - public void onSuccess(Object target, Object returnValue) { - ClusterGuideModel clusterGuideModel = (ClusterGuideModel) target; - ArrayList<VDS> hosts = (ArrayList<VDS>) returnValue; - clusterGuideModel.allHosts = hosts; - clusterGuideModel.updateOptionsNonLocalFS(); - } - })); + AsyncDataProvider.getInstance().getHostList(new AsyncQuery(this, new INewAsyncCallback() { + @Override + public void onSuccess(Object target, Object returnValue) { + ClusterGuideModel clusterGuideModel = (ClusterGuideModel) target; + ArrayList<VDS> hosts = (ArrayList<VDS>) returnValue; + clusterGuideModel.allHosts = hosts; + clusterGuideModel.updateOptionsNonLocalFS(); + } + } + )); if (getEntity().supportsGlusterService()) { AsyncDataProvider.getInstance().isAnyHostUpInCluster(new AsyncQuery(this, new INewAsyncCallback() { @@ -136,26 +144,21 @@ return; } // Add host action. - UICommand addHostAction = new UICommand("AddHost", this); //$NON-NLS-1$ + UICommand addHostAction = new UICommand(ADD_HOST, this); - if (hosts.size() > 1) - { + if (hosts.size() > 1) { hosts.remove(0); } - if (hosts.isEmpty()) - { - addHostAction.setTitle(ClusterConfigureHostsAction); + if (hosts.isEmpty()) { + addHostAction.setTitle(clusterConfigureHostsActionTitle); getCompulsoryActions().add(addHostAction); - } - else if (isAnyUpHostInCluster()) - { - addHostAction.setTitle(ClusterAddAnotherHostAction); + } else if (isAnyUpHostInCluster()) { + addHostAction.setTitle(clusterAddAnotherHostActionTitle); getOptionalActions().add(addHostAction); } - if (getEntity().getStoragePoolId() == null) - { + if (getEntity().getStoragePoolId() == null) { addHostAction.getExecuteProhibitionReasons().add(ConstantsManager.getInstance() .getConstants() .theClusterIsntAttachedToADcClusterGuide()); @@ -164,29 +167,23 @@ } ArrayList<VDS> availableHosts = new ArrayList<VDS>(); - for (VDS vds : allHosts) - { + for (VDS vds : allHosts) { if (!getEntity().getId().equals(vds.getVdsGroupId()) && (vds.getStatus() == VDSStatus.Maintenance || vds.getStatus() == VDSStatus.PendingApproval) - && vds.getSupportedClusterVersionsSet() != null && - vds.getSupportedClusterVersionsSet().contains(getEntity().getCompatibilityVersion())) - { + && vds.getSupportedClusterVersionsSet() != null + && vds.getSupportedClusterVersionsSet().contains(getEntity().getCompatibilityVersion())) { availableHosts.add(vds); } } // Select host action. - UICommand selectHostAction = new UICommand("SelectHost", this); //$NON-NLS-1$ + UICommand selectHostAction = new UICommand(SELECT_HOST, this); - if (availableHosts.size() > 0) - { - if (hosts.isEmpty()) - { - selectHostAction.setTitle(SelectHostsAction); + if (availableHosts.size() > 0) { + if (hosts.isEmpty()) { + selectHostAction.setTitle(selectHostsActionTitle); getCompulsoryActions().add(selectHostAction); - } - else if (isAnyUpHostInCluster()) - { - selectHostAction.setTitle(SelectHostsAction); + } else if (isAnyUpHostInCluster()) { + selectHostAction.setTitle(selectHostsActionTitle); getOptionalActions().add(selectHostAction); } } @@ -196,13 +193,12 @@ private void updateOptionsLocalFS() { - UICommand addHostAction = new UICommand("AddHost", this); //$NON-NLS-1$ - addHostAction.setTitle(ClusterAddAnotherHostAction); - UICommand selectHost = new UICommand("SelectHost", this); //$NON-NLS-1$ - selectHost.setTitle(SelectHostsAction); + UICommand addHostAction = new UICommand(ADD_HOST, this); + addHostAction.setTitle(clusterAddAnotherHostActionTitle); + UICommand selectHost = new UICommand(SELECT_HOST, this); + selectHost.setTitle(selectHostsActionTitle); - if (localStorageHost != null) - { + if (localStorageHost != null) { String hasHostReason = ConstantsManager.getInstance() .getConstants() @@ -223,34 +219,100 @@ stopProgress(); } - private void updateOptions() - { + private void updateOptions() { getCompulsoryActions().clear(); getOptionalActions().clear(); - if (getEntity() != null && getEntity().getStoragePoolId() != null) - { - startProgress(null); + if (getEntity() == null) { + return; + } + startProgress(null); + if (getEntity().getStoragePoolId() != null) { + //Datacenter associated with this cluster. + AsyncDataProvider.getInstance().getDataCenterById(new AsyncQuery(this, new INewAsyncCallback() { + @Override + public void onSuccess(Object target, Object returnValue) { + ClusterGuideModel model = (ClusterGuideModel) target; + model.dataCenter = (StoragePool) returnValue; - AsyncDataProvider.getInstance().getDataCenterById(new AsyncQuery(this, - new INewAsyncCallback() { - @Override - public void onSuccess(Object target, Object returnValue) { - ClusterGuideModel model = (ClusterGuideModel) target; - model.dataCenter = (StoragePool) returnValue; - - if (model.dataCenter == null - || !model.dataCenter.isLocal()) - { - model.updateOptionsNonLocalFSData(); - } - else - { - model.updateOptionsLocalFSData(); + if (model.dataCenter == null + || !model.dataCenter.isLocal()) { + model.updateOptionsNonLocalFSData(); + } else { + model.updateOptionsLocalFSData(); + } + } + }), getEntity().getStoragePoolId()); + } else { + //No data-center associated with this cluster. + AsyncDataProvider.getInstance().getDataCenterList(new AsyncQuery(this, new INewAsyncCallback() { + @Override + public void onSuccess(Object target, Object returnValue) { + ClusterGuideModel model = (ClusterGuideModel) target; + @SuppressWarnings("unchecked") + List<StoragePool> dataCenters = (ArrayList<StoragePool>) returnValue; + final List<StoragePool> localDataCenters = new ArrayList<StoragePool>(); + boolean enableButton = false; + for (StoragePool dataCenter: dataCenters) { + //Find at least one compatible data-center, so we can show the button. + if (model.getEntity().getCompatibilityVersion().compareTo( + dataCenter.getCompatibilityVersion()) >= 0 ) { + if (dataCenter.isLocal()) { + //Check if there are any clusters associated with this data-center already. + localDataCenters.add(dataCenter); + } else { + enableButton = true; + break; + } } } - }), getEntity().getStoragePoolId()); + if (enableButton || localDataCenters.isEmpty()) { + model.updateOptionsRequiredAddDataCenter(enableButton); + } else { + model.updateOptionsRequiredAddDataCenter(localDataCenters); + } + } + } + )); } + } + + protected void updateOptionsRequiredAddDataCenter(final List<StoragePool> localDataCenters) { + AsyncDataProvider.getInstance().getClusterList(new AsyncQuery(this, + new INewAsyncCallback() { + @Override + public void onSuccess(Object target, Object returnValue) { + ClusterGuideModel model = (ClusterGuideModel) target; + List<StoragePool> localDataCenterWithCluster = new ArrayList<StoragePool>(); + @SuppressWarnings("unchecked") + List<VDSGroup> clusters = (List<VDSGroup>) returnValue; + for (StoragePool dataCenter: localDataCenters) { + for (VDSGroup cluster: clusters) { + if (cluster.getStoragePoolId() != null && + cluster.getStoragePoolId().equals(dataCenter.getId())) { + localDataCenterWithCluster.add(dataCenter); + break; + } + } + } + localDataCenters.removeAll(localDataCenterWithCluster); + model.updateOptionsRequiredAddDataCenter(!localDataCenters.isEmpty()); + } + }) + ); + } + + protected void updateOptionsRequiredAddDataCenter(boolean enableButton) { + if (enableButton) { + // Add data-center action. + UICommand addDataCenterAction = new UICommand(ADD_DATA_CENTER, this); + addDataCenterAction.setTitle(addDataCenterTitle); + addDataCenterAction.setIsAvailable(enableButton); + getOptionalActions().add(addDataCenterAction); + } else { + setNote(new EntityModel<String>(noAvailableActions)); + } + stopProgress(); } private boolean isUpHostCheckCompleted() { @@ -275,8 +337,7 @@ isAnyHostUpInCluster = null; } - public void selectHost() - { + public void selectHost() { final ArrayList<VDSGroup> clusters = new ArrayList<VDSGroup>(); clusters.add(getEntity()); @@ -311,26 +372,20 @@ }), getEntity().getStoragePoolId()); } - public void onSelectHost() - { - + public void onSelectHost() { MoveHost model = (MoveHost) getWindow(); - if (model.getProgress() != null) - { + if (model.getProgress() != null) { return; } - if (!model.validate()) - { + if (!model.validate()) { return; } model.setSelectedHosts(new ArrayList<MoveHostData>()); - for (EntityModel a : Linq.<EntityModel> cast(model.getItems())) - { - if (a.getIsSelected()) - { + for (EntityModel a : Linq.<EntityModel> cast(model.getItems())) { + if (a.getIsSelected()) { model.getSelectedHosts().add((MoveHostData) a); } } @@ -338,14 +393,11 @@ VDSGroup cluster = (VDSGroup) model.getCluster().getSelectedItem(); final List<VdcActionParametersBase> parameterList = new ArrayList<>(); - for (MoveHostData hostData : model.getSelectedHosts()) - { + for (MoveHostData hostData : model.getSelectedHosts()) { VDS host = hostData.getEntity(); // Try to change host's cluster as neccessary. - if (host.getVdsGroupId() != null && !host.getVdsGroupId().equals(cluster.getId())) - { + if (host.getVdsGroupId() != null && !host.getVdsGroupId().equals(cluster.getId())) { parameterList.add(new ChangeVDSClusterParameters(cluster.getId(), host.getId())); - } } model.startProgress(null); @@ -358,16 +410,13 @@ List<MoveHostData> hosts = ((MoveHost) clusterGuideModel.getWindow()).getSelectedHosts(); List<VdcReturnValueBase> retVals = result.getReturnValue(); final List<VdcActionParametersBase> activateVdsParameterList = new ArrayList<>(); - if (retVals != null && hosts.size() == retVals.size()) - { + if (retVals != null && hosts.size() == retVals.size()) { int i = 0; - for (MoveHostData selectedHostData : hosts) - { + for (MoveHostData selectedHostData : hosts) { VDS selectedHost= selectedHostData.getEntity(); if (selectedHost.getStatus() == VDSStatus.PendingApproval && retVals.get(i) != null - && retVals.get(i).getSucceeded()) - { + && retVals.get(i).getSucceeded()) { Frontend.getInstance().runAction(VdcActionType.ApproveVds, new ApproveVdsParameters(selectedHost.getId())); } else if (selectedHostData.getActivateHost()) { @@ -396,8 +445,79 @@ this); } - public void addHost() - { + private void addDataCenter() { + AsyncDataProvider.getInstance().getDataCenterList(new AsyncQuery(this, new INewAsyncCallback() { + @Override + public void onSuccess(Object target, Object returnValue) { + ClusterGuideModel guideModel = (ClusterGuideModel) target; + @SuppressWarnings("unchecked") + List<StoragePool> allDataCenters = (List<StoragePool>) returnValue; + List<EntityModel<StoragePool>> filteredDataCenters = new ArrayList<EntityModel<StoragePool>>(); + List<StoragePool> localDataCenters = new ArrayList<StoragePool>(); + for (StoragePool dataCenter: allDataCenters) { + //Find at least one compatible data-center, so we can show the button. + if (guideModel.getEntity().getCompatibilityVersion().compareTo( + dataCenter.getCompatibilityVersion()) >= 0) { + if (dataCenter.isLocal()) { + //Check if there are any clusters associated with this data-center already. + localDataCenters.add(dataCenter); + } else { + filteredDataCenters.add(new EntityModel<StoragePool>(dataCenter)); + } + } + } + if (localDataCenters.isEmpty()) { + displayAddDataCenter(filteredDataCenters); + } else { + verifyLocalDataCenterNoCluster(filteredDataCenters, localDataCenters); + } + } + + } + )); + + } + + private void verifyLocalDataCenterNoCluster(final List<EntityModel<StoragePool>> filteredDataCenters, + final List<StoragePool> localDataCenters) { + AsyncDataProvider.getInstance().getClusterList(new AsyncQuery(this, new INewAsyncCallback() { + @Override + public void onSuccess(Object target, Object returnValue) { + List<StoragePool> localDataCenterWithCluster = new ArrayList<StoragePool>(); + @SuppressWarnings("unchecked") + List<VDSGroup> clusters = (List<VDSGroup>) returnValue; + for (StoragePool dataCenter: localDataCenters) { + for (VDSGroup cluster: clusters) { + if (cluster.getStoragePoolId() != null && + cluster.getStoragePoolId().equals(dataCenter.getId())) { + localDataCenterWithCluster.add(dataCenter); + break; + } + } + } + localDataCenters.removeAll(localDataCenterWithCluster); + for (StoragePool dataCenter: localDataCenters) { + filteredDataCenters.add(new EntityModel<StoragePool>(dataCenter)); + } + displayAddDataCenter(filteredDataCenters); + } + }) + ); + } + + private void displayAddDataCenter(List<EntityModel<StoragePool>> dataCenters) { + ListModel<EntityModel<StoragePool>> dataCentersModel = new ListModel<EntityModel<StoragePool>>(); + dataCentersModel.setItems(dataCenters); + dataCentersModel.setTitle(addDataCenterTitle); + dataCentersModel.setHashName("add_datacenter"); //$NON-NLS-1$ + setWindow(dataCentersModel); + UICommand tempVar = UICommand.createDefaultOkUiCommand(ON_ADD_DATACENTER, ClusterGuideModel.this); + dataCentersModel.getCommands().add(tempVar); + UICommand tempVar2 = UICommand.createCancelUiCommand(CANCEL, ClusterGuideModel.this); + dataCentersModel.getCommands().add(tempVar2); + } + + public void addHost() { HostModel model = new NewHostModel(); setWindow(model); model.setTitle(ConstantsManager.getInstance().getConstants().newHostTitle()); @@ -411,28 +531,26 @@ model.getCluster().setIsChangeable(false); AsyncDataProvider.getInstance().getDataCenterList(new AsyncQuery(this, - new INewAsyncCallback() { - @Override - public void onSuccess(Object target, Object returnValue) { - ClusterGuideModel clusterGuideModel = (ClusterGuideModel) target; - HostModel model = (HostModel) clusterGuideModel.getWindow(); + new INewAsyncCallback() { + @Override + public void onSuccess(Object target, Object returnValue) { + ClusterGuideModel clusterGuideModel = (ClusterGuideModel) target; + HostModel model = (HostModel) clusterGuideModel.getWindow(); - ArrayList<StoragePool> dataCenters = (ArrayList<StoragePool>) returnValue; - model.getDataCenter().setItems(dataCenters); - if (getEntity().getStoragePoolId() != null) { - model.getDataCenter().setSelectedItem(Linq.firstOrDefault(dataCenters, - new Linq.DataCenterPredicate(clusterGuideModel.getEntity() - .getStoragePoolId()))); - } - model.getDataCenter().setIsChangeable( - false); + ArrayList<StoragePool> dataCenters = (ArrayList<StoragePool>) returnValue; + model.getDataCenter().setItems(dataCenters); + if (getEntity().getStoragePoolId() != null) { + model.getDataCenter().setSelectedItem(Linq.firstOrDefault(dataCenters, + new Linq.DataCenterPredicate(clusterGuideModel.getEntity().getStoragePoolId()))); + } + model.getDataCenter().setIsChangeable(false); - UICommand tempVar = UICommand.createDefaultOkUiCommand("OnConfirmPMHost", clusterGuideModel); //$NON-NLS-1$ - model.getCommands().add(tempVar); - UICommand tempVar2 = UICommand.createCancelUiCommand("Cancel", clusterGuideModel); //$NON-NLS-1$ - model.getCommands().add(tempVar2); - } - })); + UICommand tempVar = UICommand.createDefaultOkUiCommand("OnConfirmPMHost", clusterGuideModel); //$NON-NLS-1$ + model.getCommands().add(tempVar); + UICommand tempVar2 = UICommand.createCancelUiCommand("Cancel", clusterGuideModel); //$NON-NLS-1$ + model.getCommands().add(tempVar2); + } + })); ListModel<VDSGroup> clusterModel = model.getCluster(); if (clusterModel.getSelectedItem() != null) { @@ -449,18 +567,15 @@ } } - public void onConfirmPMHost() - { + public void onConfirmPMHost() { HostModel model = (HostModel) getWindow(); - if (!model.validate()) - { + if (!model.validate()) { return; } if (!model.getIsPm().getEntity() - && ApplicationModeHelper.getUiMode() != ApplicationMode.GlusterOnly) - { + && ApplicationModeHelper.getUiMode() != ApplicationMode.GlusterOnly) { ConfirmationModel confirmModel = new ConfirmationModel(); setConfirmWindow(confirmModel); confirmModel.setTitle(ConstantsManager.getInstance().getConstants().powerManagementConfigurationTitle()); @@ -472,26 +587,53 @@ confirmModel.getCommands().add(tempVar); UICommand tempVar2 = UICommand.createCancelUiCommand("CancelConfirmWithFocus", this); //$NON-NLS-1$ confirmModel.getCommands().add(tempVar2); - } - else - { + } else { onAddHost(); } } - public void onAddHost() - { + public void onAddDataCenter() { + + @SuppressWarnings("unchecked") + ListModel<EntityModel<StoragePool>> dataCentersModel = (ListModel<EntityModel<StoragePool>>)getWindow(); + EntityModel<StoragePool> dataCenter = dataCentersModel.getSelectedItem(); + + if (dataCenter != null) { + VDSGroup cluster = getEntity(); + cluster.setStoragePoolId(dataCenter.getEntity().getId()); + dataCentersModel.startProgress(null); + + Frontend.getInstance().runAction(VdcActionType.UpdateVdsGroup, new ManagementNetworkOnClusterOperationParameters(cluster), + new IFrontendActionAsyncCallback() { + @Override + public void executed(FrontendActionAsyncResult result) { + + if (result.getReturnValue() != null && result.getReturnValue().getSucceeded()) { + //Succeeded, close this window. + ClusterGuideModel guideModel = (ClusterGuideModel) result.getState(); + guideModel.postAction(); + } + //Close popup window. + setWindow(null); + + } + }, + this); + } else { + setWindow(null); + } + } + + public void onAddHost() { cancelConfirm(); HostModel model = (HostModel) getWindow(); - if (model.getProgress() != null) - { + if (model.getProgress() != null) { return; } - if (!model.validate()) - { + if (!model.validate()) { return; } @@ -567,39 +709,33 @@ return agents; } - public void postOnAddHost(VdcReturnValueBase returnValue) - { + public void postOnAddHost(VdcReturnValueBase returnValue) { HostModel model = (HostModel) getWindow(); model.stopProgress(); - if (returnValue != null && returnValue.getSucceeded()) - { + if (returnValue != null && returnValue.getSucceeded()) { cancel(); postAction(); } } @Override - protected void postAction() - { + protected void postAction() { resetData(); updateOptions(); } - protected void cancel() - { + protected void cancel() { resetData(); setWindow(null); } - public void cancelConfirm() - { + public void cancelConfirm() { setConfirmWindow(null); } - public void cancelConfirmWithFocus() - { + public void cancelConfirmWithFocus() { setConfirmWindow(null); HostModel hostModel = (HostModel) getWindow(); @@ -607,41 +743,38 @@ } @Override - public void executeCommand(UICommand command) - { + public void executeCommand(UICommand command) { super.executeCommand(command); - if ("AddHost".equals(command.getName())) //$NON-NLS-1$ - { + if (ADD_HOST.equals(command.getName())) { addHost(); } - if ("OnConfirmPMHost".equals(command.getName())) //$NON-NLS-1$ - { + if (ON_CONFIRM_PM_HOST.equals(command.getName())) { onConfirmPMHost(); } - if ("OnAddHost".equals(command.getName())) //$NON-NLS-1$ - { + if (ON_ADD_HOST.equals(command.getName())) { onAddHost(); } - if ("SelectHost".equals(command.getName())) //$NON-NLS-1$ - { + if (SELECT_HOST.equals(command.getName())) { selectHost(); } - if ("OnSelectHost".equals(command.getName())) //$NON-NLS-1$ - { + if (ON_SELECT_HOST.equals(command.getName())) { onSelectHost(); } - if ("Cancel".equals(command.getName())) //$NON-NLS-1$ - { + if (CANCEL.equals(command.getName())) { cancel(); } - if ("CancelConfirm".equals(command.getName())) //$NON-NLS-1$ - { + if (CANCEL_CONFIRM.equals(command.getName())) { cancelConfirm(); } - if ("CancelConfirmWithFocus".equals(command.getName())) //$NON-NLS-1$ - { + if (CANCEL_CONFIRM_WITH_FOCUS.equals(command.getName())) { cancelConfirmWithFocus(); } + if (ADD_DATA_CENTER.equals(command.getName())) { + addDataCenter(); + } + if (ON_ADD_DATACENTER.equals(command.getName())) { + onAddDataCenter(); + } } } 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 2634b86..a2ebe3e 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 @@ -1,5 +1,6 @@ package org.ovirt.engine.ui.uicompat; +import com.google.gwt.i18n.client.Constants; import org.ovirt.engine.core.common.businessentities.VmPool; import com.google.gwt.i18n.client.Constants; @@ -1077,6 +1078,12 @@ @DefaultStringValue("Configure Host") String configureHostClusterGuide(); + @DefaultStringValue("No actions available on cluster.") + String guidePopupNoActionsLabel(); + + @DefaultStringValue("Attach Cluster to Data Center") + String addDataCenter(); + @DefaultStringValue("Add another Host") String addAnotherHostClusterGuide(); 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 670bba6..c6cd185 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 @@ -22,6 +22,7 @@ import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.StorageQosPopupPresenterWidget; import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.SystemPermissionsRemoveConfirmationPopupPresenterWidget; import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.bookmark.BookmarkPopupPresenterWidget; +import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.cluster.AddDataCenterClusterPopupPresenterWidget; import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.cluster.ClusterManageNetworkPopupPresenterWidget; import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.cluster.ClusterPopupPresenterWidget; import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.cluster.GlusterHookContentPopupPresenterWidget; @@ -282,6 +283,7 @@ import org.ovirt.engine.ui.webadmin.section.main.view.popup.PermissionsPopupView; import org.ovirt.engine.ui.webadmin.section.main.view.popup.SystemPermissionsRemoveConfirmationPopupView; import org.ovirt.engine.ui.webadmin.section.main.view.popup.bookmark.BookmarkPopupView; +import org.ovirt.engine.ui.webadmin.section.main.view.popup.cluster.AddDataCenterClusterPopupView; import org.ovirt.engine.ui.webadmin.section.main.view.popup.cluster.ClusterManageNetworkPopupView; import org.ovirt.engine.ui.webadmin.section.main.view.popup.cluster.ClusterPopupView; import org.ovirt.engine.ui.webadmin.section.main.view.popup.cluster.GlusterHookContentPopupView; @@ -1275,6 +1277,11 @@ bindPresenterWidget(VolumeProfileStatisticsPopupPresenterWidget.class, VolumeProfileStatisticsPopupPresenterWidget.ViewDef.class, VolumeProfileStatisticsPopupView.class); + + bindPresenterWidget(AddDataCenterClusterPopupPresenterWidget.class, + AddDataCenterClusterPopupPresenterWidget.ViewDef.class, + AddDataCenterClusterPopupView.class); + // Host bindPresenterWidget(HostPopupPresenterWidget.class, HostPopupPresenterWidget.ViewDef.class, diff --git a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/popup/cluster/AddDataCenterClusterPopupPresenterWidget.java b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/popup/cluster/AddDataCenterClusterPopupPresenterWidget.java new file mode 100644 index 0000000..e455d08 --- /dev/null +++ b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/popup/cluster/AddDataCenterClusterPopupPresenterWidget.java @@ -0,0 +1,21 @@ +package org.ovirt.engine.ui.webadmin.section.main.presenter.popup.cluster; + +import org.ovirt.engine.core.common.businessentities.StoragePool; +import org.ovirt.engine.ui.common.presenter.AbstractModelBoundPopupPresenterWidget; +import org.ovirt.engine.ui.uicommonweb.models.EntityModel; +import org.ovirt.engine.ui.uicommonweb.models.ListModel; + +import com.google.gwt.event.shared.EventBus; +import com.google.inject.Inject; + +public class AddDataCenterClusterPopupPresenterWidget extends AbstractModelBoundPopupPresenterWidget + <ListModel<EntityModel<StoragePool>>, AddDataCenterClusterPopupPresenterWidget.ViewDef> { + + public interface ViewDef extends AbstractModelBoundPopupPresenterWidget.ViewDef<ListModel<EntityModel<StoragePool>>> { + } + + @Inject + public AddDataCenterClusterPopupPresenterWidget(EventBus eventBus, ViewDef view) { + super(eventBus, view); + } +} diff --git a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/popup/guide/GuidePopupPresenterWidget.java b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/popup/guide/GuidePopupPresenterWidget.java index e4926ad..ed626fc 100644 --- a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/popup/guide/GuidePopupPresenterWidget.java +++ b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/popup/guide/GuidePopupPresenterWidget.java @@ -6,6 +6,7 @@ import org.ovirt.engine.ui.uicommonweb.models.ConfirmationModel; import org.ovirt.engine.ui.uicommonweb.models.GuideModel; import org.ovirt.engine.ui.uicommonweb.models.Model; +import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.cluster.AddDataCenterClusterPopupPresenterWidget; import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.cluster.ClusterPopupPresenterWidget; import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.datacenter.FindMultiStoragePopupPresenterWidget; import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.datacenter.FindSingleStoragePopupPresenterWidget; @@ -35,6 +36,7 @@ private final Provider<FindSingleStoragePopupPresenterWidget> singleStoragePopupProvider; private final Provider<FindMultiStoragePopupPresenterWidget> multiStoragePopupProvider; private final Provider<StorageForceCreatePopupPresenterWidget> forceCreateConfirmPopupProvider; + private final Provider<AddDataCenterClusterPopupPresenterWidget> addDatacenterClusterPopupProvider; @Inject public GuidePopupPresenterWidget(EventBus eventBus, ViewDef view, @@ -48,7 +50,8 @@ Provider<VmDiskAttachPopupPresenterWidget> vmDiskAttachPopupPopupProvider, Provider<MoveHostPopupPresenterWidget> moveHostPopupProvider, Provider<FindSingleStoragePopupPresenterWidget> singleStoragePopupProvider, - Provider<FindMultiStoragePopupPresenterWidget> multiStoragePopupProvider) { + Provider<FindMultiStoragePopupPresenterWidget> multiStoragePopupProvider, + Provider<AddDataCenterClusterPopupPresenterWidget> addDatacenterClusterPopupProvider) { super(eventBus, view, defaultConfirmPopupProvider); this.forceCreateConfirmPopupProvider = forceCreateConfirmPopupProvider; this.clusterPopupProvider = clusterPopupProvider; @@ -60,6 +63,7 @@ this.moveHostPopupProvider = moveHostPopupProvider; this.singleStoragePopupProvider = singleStoragePopupProvider; this.multiStoragePopupProvider = multiStoragePopupProvider; + this.addDatacenterClusterPopupProvider = addDatacenterClusterPopupProvider; } @Override @@ -89,6 +93,8 @@ return vmDiskPopupPopupProvider.get(); } else if (lastExecutedCommandName.equals("AttachDisk")) { //$NON-NLS-1$ return vmDiskAttachPopupPopupProvider.get(); + } else if (lastExecutedCommandName.equals("AddDataCenter")) { //$NON-NLS-1$ + return addDatacenterClusterPopupProvider.get(); } else { return super.getModelPopup(source, lastExecutedCommand, windowModel); } diff --git a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/cluster/AddDataCenterClusterPopupView.java b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/cluster/AddDataCenterClusterPopupView.java new file mode 100644 index 0000000..b831e2c --- /dev/null +++ b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/cluster/AddDataCenterClusterPopupView.java @@ -0,0 +1,69 @@ +package org.ovirt.engine.ui.webadmin.section.main.view.popup.cluster; + +import org.ovirt.engine.core.common.businessentities.StoragePool; +import org.ovirt.engine.ui.common.view.popup.AbstractModelBoundPopupView; +import org.ovirt.engine.ui.common.widget.dialog.SimpleDialogPanel; +import org.ovirt.engine.ui.common.widget.editor.EntityModelCellTable; +import org.ovirt.engine.ui.common.widget.table.column.AbstractEntityModelTextColumn; +import org.ovirt.engine.ui.uicommonweb.models.EntityModel; +import org.ovirt.engine.ui.uicommonweb.models.ListModel; +import org.ovirt.engine.ui.webadmin.ApplicationConstants; +import org.ovirt.engine.ui.webadmin.gin.AssetProvider; +import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.cluster.AddDataCenterClusterPopupPresenterWidget; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.editor.client.SimpleBeanEditorDriver; +import com.google.gwt.event.shared.EventBus; +import com.google.gwt.uibinder.client.UiBinder; +import com.google.gwt.uibinder.client.UiField; +import com.google.inject.Inject; + +public class AddDataCenterClusterPopupView extends AbstractModelBoundPopupView<ListModel<EntityModel<StoragePool>>> + implements AddDataCenterClusterPopupPresenterWidget.ViewDef { + + interface ViewUiBinder extends UiBinder<SimpleDialogPanel, AddDataCenterClusterPopupView> { + ViewUiBinder uiBinder = GWT.create(ViewUiBinder.class); + } + + interface Driver extends SimpleBeanEditorDriver<ListModel<EntityModel<StoragePool>>, AddDataCenterClusterPopupView> { + } + private static final ApplicationConstants constants = AssetProvider.getConstants(); + + @UiField(provided = true) + EntityModelCellTable<ListModel<EntityModel<StoragePool>>> dataCentersTable; + + @Inject + public AddDataCenterClusterPopupView(EventBus eventBus) { + super(eventBus); + dataCentersTable = new EntityModelCellTable<ListModel<EntityModel<StoragePool>>>(false, false); + initWidget(ViewUiBinder.uiBinder.createAndBindUi(this)); + initTableColumns(); + } + + private void initTableColumns() { + dataCentersTable.addColumn(new AbstractEntityModelTextColumn<StoragePool>() { + @Override + public String getText(StoragePool entity) { + return entity.getName(); + } + }, constants.dataCenter()); + + dataCentersTable.addColumn(new AbstractEntityModelTextColumn<StoragePool>() { + @Override + public String getText(StoragePool entity) { + return entity.getCompatibilityVersion().getValue(); + } + }, constants.comptVersDc()); + } + + @Override + public void edit(ListModel<EntityModel<StoragePool>> object) { + dataCentersTable.asEditor().edit(object); + } + + @Override + public ListModel<EntityModel<StoragePool>> flush() { + return dataCentersTable.asEditor().flush(); + } + +} diff --git a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/cluster/AddDataCenterClusterPopupView.ui.xml b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/cluster/AddDataCenterClusterPopupView.ui.xml new file mode 100644 index 0000000..5f4adc6 --- /dev/null +++ b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/cluster/AddDataCenterClusterPopupView.ui.xml @@ -0,0 +1,18 @@ +<?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:d="urn:import:org.ovirt.engine.ui.common.widget.dialog" + xmlns:e="urn:import:org.ovirt.engine.ui.common.widget.editor"> + + <ui:style> + </ui:style> + + <d:SimpleDialogPanel width="400px" height="250px"> + <d:content> + <g:ScrollPanel> + <e:EntityModelCellTable ui:field="dataCentersTable"/> + </g:ScrollPanel> + </d:content> + </d:SimpleDialogPanel> + +</ui:UiBinder> \ No newline at end of file -- To view, visit https://gerrit.ovirt.org/41486 To unsubscribe, visit https://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Ifaafdd5593d3721b9e6a8b466b2ac186b18bd6ff Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Alexander Wels <aw...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches