Hello Alexey Chub, I'd like you to do a code review. Please visit
http://gerrit.ovirt.org/10325 to review the following change. Change subject: webadmin:[RFE]: Support proxy management in GUI ...................................................................... webadmin:[RFE]: Support proxy management in GUI This patch adds the origin and custom_event_id fields to the Events TAB display (both on general events & for an entity instance) Change-Id: I59e2ecfafe3c20b0c3925780b6bf8051fe7bfa3f Signed-off-by: Alexey Chub <ac...@redhat.com> --- M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/ConfigurationValues.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/models/hosts/HostListModel.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/HostModel.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/section/main/view/popup/host/HostPopupView.java M frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/HostPopupView.ui.xml 7 files changed, 340 insertions(+), 34 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/25/10325/1 diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/ConfigurationValues.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/ConfigurationValues.java index d859e96..4e323dd 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/ConfigurationValues.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/ConfigurationValues.java @@ -37,6 +37,7 @@ AsyncTaskPollingRate, VdsFenceType, VdsFenceOptionMapping, + FenceProxyDefaultPreferences, VcpuConsumptionPercentage(ConfigAuthType.User), SearchResultsLimit(ConfigAuthType.User), MaxBlockDiskSize(ConfigAuthType.User), 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 656ceca..fc25ece 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 @@ -1674,6 +1674,13 @@ aQuery.asyncCallback.OnSuccess(aQuery.getModel(), 5); } + public static void GetDefaultPmProxyPreferences(AsyncQuery query) { + GetConfigFromCache( + new GetConfigurationValueParameters(ConfigurationValues.FenceProxyDefaultPreferences, + Config.DefaultConfigurationVersion), + query); + } + public static void GetRootTag(AsyncQuery aQuery) { aQuery.converterCallback = new IAsyncConverter() { @Override diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/HostListModel.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/HostListModel.java index a238d0f..579c67f 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/HostListModel.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/HostListModel.java @@ -531,6 +531,14 @@ hostModel.getOverrideIpTables().setIsAvailable(false); hostModel.setSpmPriorityValue(null); + AsyncDataProvider.GetDefaultPmProxyPreferences(new AsyncQuery(null, new INewAsyncCallback() { + @Override + public void OnSuccess(Object model, Object returnValue) { + + hostModel.setPmProxyPreferences((String) returnValue); + } + })); + // Make sure not to set override IP tables flag back true when it was set false once. hostModel.getOverrideIpTables().getEntityChangedEvent().addListener(new IEventListener() { @Override @@ -661,21 +669,37 @@ { HostListModel hostListModel = (HostListModel) model; ArrayList<storage_pool> dataCenters = (ArrayList<storage_pool>) result; - HostModel hostModel = new HostModel(); - hostListModel.setWindow(hostModel); VDS host = (VDS) hostListModel.getSelectedItem(); + + final HostModel hostModel = new HostModel(); + hostListModel.setWindow(hostModel); PrepareModelForApproveEdit(host, hostModel, dataCenters, isEditWithPMemphasis); hostModel.setTitle(ConstantsManager.getInstance().getConstants().editHostTitle()); hostModel.setHashName("edit_host"); //$NON-NLS-1$ - UICommand tempVar = new UICommand("OnSaveFalse", hostListModel); //$NON-NLS-1$ - tempVar.setTitle(ConstantsManager.getInstance().getConstants().ok()); - tempVar.setIsDefault(true); - hostModel.getCommands().add(tempVar); - UICommand tempVar2 = new UICommand("Cancel", hostListModel); //$NON-NLS-1$ - tempVar2.setTitle(ConstantsManager.getInstance().getConstants().cancel()); - tempVar2.setIsCancel(true); - hostModel.getCommands().add(tempVar2); + if (host.getPmProxyPreferences() != null) { + hostModel.setPmProxyPreferences(host.getPmProxyPreferences()); + } else { + AsyncDataProvider.GetDefaultPmProxyPreferences(new AsyncQuery(null, new INewAsyncCallback() { + @Override + public void OnSuccess(Object model, Object returnValue) { + + hostModel.setPmProxyPreferences((String) returnValue); + } + })); + } + + + UICommand command; + command = new UICommand("OnSaveFalse", hostListModel); //$NON-NLS-1$ + command.setTitle(ConstantsManager.getInstance().getConstants().ok()); + command.setIsDefault(true); + hostModel.getCommands().add(command); + + command = new UICommand("Cancel", hostListModel); //$NON-NLS-1$ + command.setTitle(ConstantsManager.getInstance().getConstants().cancel()); + command.setIsCancel(true); + hostModel.getCommands().add(command); } }; AsyncDataProvider.GetDataCenterList(_asyncQuery); @@ -781,6 +805,7 @@ host.setpm_type((String) model.getPmType().getSelectedItem()); host.setPmOptionsMap(new ValueObjectMap(model.getPmOptionsMap(), false)); host.setVdsSpmPriority(model.getSpmPriorityValue()); + host.setPmProxyPreferences(model.getPmProxyPreferences()); CancelConfirm(); model.StartProgress(null); diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/HostModel.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/HostModel.java index 78b42c7..10609ce 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/HostModel.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/HostModel.java @@ -14,6 +14,7 @@ import org.ovirt.engine.core.common.queries.VdcQueryType; import org.ovirt.engine.core.compat.Event; import org.ovirt.engine.core.compat.EventArgs; +import org.ovirt.engine.core.compat.IEventListener; import org.ovirt.engine.core.compat.NGuid; import org.ovirt.engine.core.compat.PropertyChangedEventArgs; import org.ovirt.engine.core.compat.StringFormat; @@ -21,6 +22,7 @@ import org.ovirt.engine.ui.frontend.AsyncQuery; import org.ovirt.engine.ui.frontend.Frontend; import org.ovirt.engine.ui.frontend.INewAsyncCallback; +import org.ovirt.engine.ui.uicommonweb.ICommandTarget; import org.ovirt.engine.ui.uicommonweb.Linq; import org.ovirt.engine.ui.uicommonweb.UICommand; import org.ovirt.engine.ui.uicommonweb.dataprovider.AsyncDataProvider; @@ -417,6 +419,72 @@ } } + public String getPmProxyPreferences() { + // Return null if power management is not enabled. + if (!(Boolean) getIsPm().getEntity()) { + return null; + } + + // Pack back proxy items to the comma delimited string. + StringBuilder builder = new StringBuilder(); + + if (getPmProxyPreferencesList().getItems() != null) { + List items = (List) getPmProxyPreferencesList().getItems(); + for (Object item : items) { + + builder.append(item); + + if (items.indexOf(item) < items.size() - 1) { + builder.append(","); //$NON-NLS-1$ + } + } + } + + return builder.toString(); + } + + public void setPmProxyPreferences(String value) { + // Create list from the provided comma delimited string. + String[] array = value.split(","); //$NON-NLS-1$ + List<String> list = new ArrayList<String>(); + + for (String item : array) { + list.add(item); + } + + getPmProxyPreferencesList().setItems(list); + } + + private ListModel pmProxyPreferencesList; + + public ListModel getPmProxyPreferencesList() { + return pmProxyPreferencesList; + } + + private void setPmProxyPreferencesList(ListModel value) { + pmProxyPreferencesList = value; + } + + private UICommand proxyUpCommand; + + public UICommand getProxyUpCommand() { + return proxyUpCommand; + } + + private void setProxyUpCommand(UICommand value) { + proxyUpCommand = value; + } + + private UICommand proxyDownCommand; + + public UICommand getProxyDownCommand() { + return proxyDownCommand; + } + + private void setProxyDownCommand(UICommand value) { + proxyDownCommand = value; + } + private Integer postponedSpmPriority; public void setSpmPriorityValue(Integer value) { @@ -449,7 +517,39 @@ public HostModel() { - setTestCommand(new UICommand("Test", this)); //$NON-NLS-1$ + setTestCommand(new UICommand("Test", new ICommandTarget() { //$NON-NLS-1$ + @Override + public void ExecuteCommand(UICommand command) { + Test(); + } + + @Override + public void ExecuteCommand(UICommand uiCommand, Object... parameters) { + Test(); + } + })); + setProxyUpCommand(new UICommand("Up", new ICommandTarget() { //$NON-NLS-1$ + @Override + public void ExecuteCommand(UICommand command) { + ProxyUp(); + } + + @Override + public void ExecuteCommand(UICommand uiCommand, Object... parameters) { + ProxyUp(); + } + })); + setProxyDownCommand(new UICommand("Down", new ICommandTarget() { //$NON-NLS-1$ + @Override + public void ExecuteCommand(UICommand command) { + ProxyDown(); + } + + @Override + public void ExecuteCommand(UICommand uiCommand, Object... parameters) { + ProxyDown(); + } + })); setName(new EntityModel()); setHost(new EntityModel()); @@ -477,6 +577,14 @@ getPmSlot().setIsAvailable(false); setPmOptions(new EntityModel()); + setPmProxyPreferencesList(new ListModel()); + getPmProxyPreferencesList().getSelectedItemChangedEvent().addListener(new IEventListener() { + @Override + public void eventRaised(Event ev, Object sender, EventArgs args) { + UpdatePmCommandAvailability(); + } + }); + setIsPm(new EntityModel()); getIsPm().getEntityChangedEvent().addListener(this); getIsPm().setEntity(false); @@ -487,6 +595,44 @@ setSpmPriority(new ListModel()); InitSpmPriorities(); + } + + private void ProxyUp() { + if (getPmProxyPreferencesList().getItems() == null) { + return; + } + + List list = new ArrayList((List) getPmProxyPreferencesList().getItems()); + Object selectedItem = getPmProxyPreferencesList().getSelectedItem(); + int selectedItemIndex = list.indexOf(selectedItem); + + // Check whether the selected item is first in the list. + if (selectedItemIndex > 0) { + list.remove(selectedItemIndex); + list.add(selectedItemIndex - 1, selectedItem); + + getPmProxyPreferencesList().setItems(list); + getPmProxyPreferencesList().setSelectedItem(selectedItem); + } + } + + private void ProxyDown() { + if (getPmProxyPreferencesList().getItems() == null) { + return; + } + + List list = new ArrayList((List) getPmProxyPreferencesList().getItems()); + Object selectedItem = getPmProxyPreferencesList().getSelectedItem(); + int selectedItemIndex = list.indexOf(selectedItem); + + // Check whether the selected item is first in the list. + if (selectedItemIndex < list.size()) { + list.remove(selectedItemIndex); + list.add(selectedItemIndex + 1, selectedItem); + + getPmProxyPreferencesList().setItems(list); + getPmProxyPreferencesList().setSelectedItem(selectedItem); + } } boolean spmInitialized; @@ -718,10 +864,6 @@ getPmSlot().setIsAvailable(pmOptions.contains(PmSlotKey)); getPmSecure().setIsAvailable(pmOptions.contains(PmSecureKey)); - boolean isPm = (Boolean) getIsPm().getEntity(); - - getTestCommand().setIsExecutionAllowed(isPm); - getManagementIp().setIsChangable((Boolean) getIsPm().getEntity()); getManagementIp().setIsValid(true); getPmUserName().setIsChangable((Boolean) getIsPm().getEntity()); @@ -735,6 +877,18 @@ getPmPort().setIsChangable((Boolean) getIsPm().getEntity()); getPmPort().setIsValid(true); getPmSlot().setIsChangable((Boolean) getIsPm().getEntity()); + getPmProxyPreferencesList().setIsChangable((Boolean) getIsPm().getEntity()); + + UpdatePmCommandAvailability(); + } + + private void UpdatePmCommandAvailability() { + boolean isPm = (Boolean) getIsPm().getEntity(); + Object proxySelectedItem = getPmProxyPreferencesList().getSelectedItem(); + + getTestCommand().setIsExecutionAllowed(isPm); + getProxyUpCommand().setIsExecutionAllowed(isPm && proxySelectedItem != null); + getProxyDownCommand().setIsExecutionAllowed(isPm && proxySelectedItem != null); } public void Test() @@ -771,6 +925,7 @@ .getValue() .getValue() : NGuid.Empty); param.setFencingOptions(new ValueObjectMap(getPmOptionsMap(), false)); + param.setPmProxyPreferences(getPmProxyPreferences()); Frontend.RunQuery(VdcQueryType.GetNewVdsFenceStatus, param, new IFrontendQueryAsyncCallback() { @@ -882,16 +1037,5 @@ && getPmType().getIsValid() && getPmPort().getIsValid() && getPmOptions().getIsValid(); - } - - @Override - public void ExecuteCommand(UICommand command) - { - super.ExecuteCommand(command); - - if (command == getTestCommand()) - { - Test(); - } } } 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 c9befd5..550f546 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 @@ -412,6 +412,15 @@ @DefaultStringValue("Test") String hostPopupTestButtonLabel(); + @DefaultStringValue("Up") + String hostPopupUpButtonLabel(); + + @DefaultStringValue("Down") + String hostPopupDownButtonLabel(); + + @DefaultStringValue("Source") + String hostPopupSourceText(); + @DefaultStringValue("SPM") String spmTestButtonLabel(); diff --git a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/HostPopupView.java b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/HostPopupView.java index e7727e4..4ae2e22 100644 --- a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/HostPopupView.java +++ b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/HostPopupView.java @@ -1,5 +1,10 @@ package org.ovirt.engine.ui.webadmin.section.main.view.popup.host; +import com.google.gwt.event.dom.client.ChangeEvent; +import com.google.gwt.event.dom.client.ChangeHandler; +import com.google.gwt.event.dom.client.ClickEvent; +import com.google.gwt.event.dom.client.ClickHandler; +import com.google.gwt.user.client.ui.ListBox; import org.ovirt.engine.core.common.businessentities.VDSGroup; import org.ovirt.engine.core.common.businessentities.storage_pool; import org.ovirt.engine.core.common.mode.ApplicationMode; @@ -40,6 +45,8 @@ import com.google.gwt.user.client.ui.RadioButton; import com.google.gwt.user.client.ui.VerticalPanel; import com.google.inject.Inject; + +import java.util.List; public class HostPopupView extends AbstractModelBoundPopupView<HostModel> implements HostPopupPresenterWidget.ViewDef { @@ -155,8 +162,21 @@ UiCommandButton testButton; @UiField + UiCommandButton upButton; + + @UiField + UiCommandButton downButton; + + @UiField @Ignore Label testMessage; + + @UiField + @Ignore + Label sourceLabel; + + @UiField + ListBox proxyListBox; @UiField @Ignore @@ -234,6 +254,9 @@ pmOptionsExplanationLabel.setText(constants.hostPopupPmOptionsExplanationLabel()); pmSecureEditor.setLabel(constants.hostPopupPmSecureLabel()); testButton.setLabel(constants.hostPopupTestButtonLabel()); + upButton.setLabel(constants.hostPopupUpButtonLabel()); + downButton.setLabel(constants.hostPopupDownButtonLabel()); + sourceLabel.setText(constants.hostPopupSourceText()); // SPM tab spmTab.setLabel(constants.spmTestButtonLabel()); @@ -280,6 +303,70 @@ testButton.setCommand(object.getTestCommand()); + // Bind proxy commands. + upButton.setCommand(object.getProxyUpCommand()); + upButton.addClickHandler(new ClickHandler() { + @Override + public void onClick(ClickEvent event) { + object.getProxyUpCommand().Execute(); + } + }); + + downButton.setCommand(object.getProxyDownCommand()); + downButton.addClickHandler(new ClickHandler() { + @Override + public void onClick(ClickEvent event) { + object.getProxyDownCommand().Execute(); + } + }); + + // Bind proxy list. + object.getPmProxyPreferencesList().getItemsChangedEvent().addListener(new IEventListener() { + @Override + public void eventRaised(Event ev, Object sender, EventArgs args) { + proxyListBox.clear(); + + for (Object item : object.getPmProxyPreferencesList().getItems()) { + proxyListBox.addItem((String) item); + } + } + }); + + object.getPmProxyPreferencesList().getSelectedItemChangedEvent().addListener(new IEventListener() { + @Override + public void eventRaised(Event ev, Object sender, EventArgs args) { + + List items = (List) object.getPmProxyPreferencesList().getItems(); + int selectedItemIndex = items.indexOf(object.getPmProxyPreferencesList().getSelectedItem()); + + proxyListBox.setSelectedIndex(selectedItemIndex); + } + }); + + object.getPmProxyPreferencesList().getPropertyChangedEvent().addListener(new IEventListener() { + @Override + public void eventRaised(Event ev, Object sender, EventArgs args) { + PropertyChangedEventArgs e = (PropertyChangedEventArgs) args; + if (e.PropertyName == "IsChangable") { //$NON-NLS-1$ + proxyListBox.setEnabled(object.getPmProxyPreferencesList().getIsChangable()); + } + } + }); + proxyListBox.setEnabled(object.getPmProxyPreferencesList().getIsChangable()); + + proxyListBox.addChangeHandler(new ChangeHandler() { + @Override + public void onChange(ChangeEvent event) { + List items = (List) object.getPmProxyPreferencesList().getItems(); + + Object selectedItem = proxyListBox.getSelectedIndex() >= 0 + ? items.get(proxyListBox.getSelectedIndex()) + : null; + + object.getPmProxyPreferencesList().setSelectedItem(selectedItem); + } + }); + // Create SPM related controls. IEventListener spmListener = new IEventListener() { @Override diff --git a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/HostPopupView.ui.xml b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/HostPopupView.ui.xml index efa9c49..8b00792 100644 --- a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/HostPopupView.ui.xml +++ b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/HostPopupView.ui.xml @@ -33,13 +33,39 @@ margin-bottom: 10px; } + .sourceLabel { + font-size: 13px; + font-family: Verdana,sans-serif; + padding: 0 5px; + } + .testPanel { margin-top: 20px; } - .testMessagePanel { - margin-left: 70px; - height: 100px; + .testButton { + margin-top: 40px; + margin-right: 10px; + padding: 0 5px; + } + + .proxyListBox { + width: 300px; + border: 1px solid gray; + } + + .upButton { + margin-top: 10px; + margin-left: 10px; + } + + .downButton { + margin-top: 10px; + margin-left: 10px; + } + + .testMessage { + margin-top: 10px; } .radioButton { @@ -86,11 +112,18 @@ <g:Label ui:field="pmOptionsExplanationLabel" addStyleNames="{style.explanationLabel}"/> <e:EntityModelCheckBoxEditor ui:field="pmSecureEditor"/> <g:HTMLPanel addStyleNames="{style.testPanel}"> - <w:UiCommandButton ui:field="testButton"/> - <g:ScrollPanel addStyleNames="{style.testMessagePanel}"> - <g:Label ui:field="testMessage"/> - </g:ScrollPanel> - <div style="clear: both;"/> + <div style="display:table-cell; vertical-align: top"> + <g:Label ui:field="sourceLabel" addStyleNames="{style.sourceLabel}"/> + <w:UiCommandButton ui:field="testButton" addStyleNames="{style.testButton}"/> + </div> + <div style="display:table-cell"> + <g:ListBox ui:field="proxyListBox" visibleItemCount="4" addStyleNames="{style.proxyListBox}"/> + </div> + <div style="display:table-cell; vertical-align: top"> + <w:UiCommandButton ui:field="upButton" addStyleNames="{style.upButton}"/> + <w:UiCommandButton ui:field="downButton" addStyleNames="{style.downButton}"/> + </div> + <g:Label ui:field="testMessage" addStyleNames="{style.testMessage}"/> </g:HTMLPanel> </g:FlowPanel> </g:FlowPanel> -- To view, visit http://gerrit.ovirt.org/10325 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I59e2ecfafe3c20b0c3925780b6bf8051fe7bfa3f Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Eli Mesika <emes...@redhat.com> Gerrit-Reviewer: Alexey Chub <ac...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches