Frank Kobzik has uploaded a new change for review. Change subject: frontend: Switching spice invoker implementation in console dialog ......................................................................
frontend: Switching spice invoker implementation in console dialog This patch allows switching spice invoker implementation in console dialog. Change-Id: Ib9fdc00931e3b25858b792b47339b3c5ab4a954c Signed-off-by: Frantisek Kobzik <fkob...@redhat.com> --- M frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/CommonApplicationConstants.java M frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/presenter/popup/ConsolePopupPresenterWidget.java M frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/utils/ConsoleOptionsFrontendPersisterImpl.java M frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/utils/ConsoleUtilsImpl.java M frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/view/popup/ConsolePopupView.java M frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/view/popup/ConsolePopupView.ui.xml M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/ConsoleUtils.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/SpiceConsoleModel.java 8 files changed, 195 insertions(+), 16 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/53/13953/1 diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/CommonApplicationConstants.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/CommonApplicationConstants.java index 4d4745a..51e9685 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/CommonApplicationConstants.java +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/CommonApplicationConstants.java @@ -1156,6 +1156,15 @@ @DefaultStringValue("Spice") String spice(); + @DefaultStringValue("Auto") + String spiceImplAuto(); + + @DefaultStringValue("Native client") + String spiceImplNative(); + + @DefaultStringValue("Browser plugin") + String spiceImplPlugin(); + @DefaultStringValue("Pass Ctrl-Alt-Del to virtual machine") String ctrlAltDel(); @@ -1170,6 +1179,9 @@ @DefaultStringValue("Not supported for this client OS") String ctrlAltDeletIsNotSupportedOnWindows(); + + @DefaultStringValue("Your browser doesn't support SPICE plugin") + String pluginNotSupportedByBrowser(); @DefaultStringValue("No SPICE proxy defined on system level") String spiceProxyCanBeEnabledOnlyWhenDefined(); @@ -1208,4 +1220,5 @@ @DefaultStringValue("Details") String details(); + } diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/presenter/popup/ConsolePopupPresenterWidget.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/presenter/popup/ConsolePopupPresenterWidget.java index b2edfad..2805631 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/presenter/popup/ConsolePopupPresenterWidget.java +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/presenter/popup/ConsolePopupPresenterWidget.java @@ -9,6 +9,7 @@ import org.ovirt.engine.ui.uicommonweb.models.ConsoleProtocol; import org.ovirt.engine.ui.uicommonweb.models.HasConsoleModel; import org.ovirt.engine.ui.uicommonweb.models.vms.ConsoleModel; +import org.ovirt.engine.ui.uicommonweb.models.vms.ConsoleModel.ClientConsoleMode; import org.ovirt.engine.ui.uicommonweb.models.vms.ISpice; import org.ovirt.engine.ui.uicommonweb.models.vms.SpiceConsoleModel; import org.ovirt.engine.ui.uicommonweb.models.vms.VncConsoleModel; @@ -44,6 +45,10 @@ HasValueChangeHandlers<Boolean> getVncRadioButton(); + HasValueChangeHandlers<Boolean> getSpiceAutoImplRadioButton(); + HasValueChangeHandlers<Boolean> getSpiceNativeImplRadioButton(); + HasValueChangeHandlers<Boolean> getSpicePluginImplRadioButton(); + void rdpSelected(boolean selected); void spiceSelected(boolean selected); @@ -57,6 +62,10 @@ void setAdditionalConsoleAvailable(boolean hasAdditionalConsole); void setSpiceConsoleAvailable(boolean available); + + void selectSpiceImplementation(ClientConsoleMode consoleMode); + + void setSpicePluginImplEnabled(boolean enabled, String reason); void selectWanOptionsEnabled(boolean selected); @@ -186,6 +195,17 @@ } } + if (!consoleUtils.isBrowserPluginSupported()) { + getView().setSpicePluginImplEnabled(false, constants.pluginNotSupportedByBrowser()); + } + + SpiceConsoleModel spiceModel = extractSpiceModel(model); + if (spiceModel != null) { + getView().selectSpiceImplementation(spiceModel.getClientConsoleMode()); + } else { + getView().selectSpiceImplementation(ClientConsoleMode.Auto); + } + wanOptionsAvailable = consoleUtils.isWanOptionsAvailable(model.getModel()); if (wanOptionsAvailable) { getView().setWanOptionsVisible(true); @@ -259,16 +279,50 @@ } } })); + + registerHandler(getView().getSpiceAutoImplRadioButton() + .addValueChangeHandler(new ValueChangeHandler<Boolean>() { + @Override + public void onValueChange(ValueChangeEvent<Boolean> event) { + getView().selectSpiceImplementation(ClientConsoleMode.Auto); + } + })); + + registerHandler(getView().getSpiceNativeImplRadioButton() + .addValueChangeHandler(new ValueChangeHandler<Boolean>() { + @Override + public void onValueChange(ValueChangeEvent<Boolean> event) { + getView().selectSpiceImplementation(ClientConsoleMode.Native); + } + })); + registerHandler(getView().getSpicePluginImplRadioButton() + .addValueChangeHandler(new ValueChangeHandler<Boolean>() { + @Override + public void onValueChange(ValueChangeEvent<Boolean> event) { + getView().selectSpiceImplementation(ClientConsoleMode.Plugin); + } + })); + } protected ISpice extractSpice(ConsolePopupModel model) { - ConsoleModel consoleModel = model.getModel().getDefaultConsoleModel(); - if (!(consoleModel instanceof SpiceConsoleModel)) { - return null; + SpiceConsoleModel spiceModel = extractSpiceModel(model); + + if (spiceModel != null) { + return spiceModel.getspice(); } - ISpice spice = ((SpiceConsoleModel) consoleModel).getspice(); - return spice; + return null; + } + + protected SpiceConsoleModel extractSpiceModel(ConsolePopupModel model) { + ConsoleModel consoleModel = model.getModel().getDefaultConsoleModel(); + + if (consoleModel instanceof SpiceConsoleModel) { + return (SpiceConsoleModel) consoleModel; + } + + return null; } } diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/utils/ConsoleOptionsFrontendPersisterImpl.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/utils/ConsoleOptionsFrontendPersisterImpl.java index e9d4797..589522b 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/utils/ConsoleOptionsFrontendPersisterImpl.java +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/utils/ConsoleOptionsFrontendPersisterImpl.java @@ -5,6 +5,7 @@ import org.ovirt.engine.ui.uicommonweb.ConsoleUtils; import org.ovirt.engine.ui.uicommonweb.models.ConsoleProtocol; import org.ovirt.engine.ui.uicommonweb.models.HasConsoleModel; +import org.ovirt.engine.ui.uicommonweb.models.vms.ConsoleModel.ClientConsoleMode; import org.ovirt.engine.ui.uicommonweb.models.vms.IRdp; import org.ovirt.engine.ui.uicommonweb.models.vms.ISpice; import org.ovirt.engine.ui.uicommonweb.models.vms.RdpConsoleModel; @@ -19,6 +20,7 @@ private final ConsoleUtils consoleUtils; // spice options + private static final String SPICE_CLIENT_IMPLEMENTATION = "_spiceClientImplementation"; //$NON-NLS-1$ private static final String CTRL_ALT_DEL = "_ctrlAltDel"; //$NON-NLS-1$ private static final String OPEN_IN_FULL_SCREEN = "_openInFullScreen"; //$NON-NLS-1$ private static final String SMARTCARD_ENABLED_OVERRIDDEN = "_smartcardEnabledOverridden"; //$NON-NLS-1$ @@ -53,7 +55,7 @@ clientStorage.setLocalItem(keyMaker.make(SELECTED_PROTOCOL), selectedProtocol.toString()); if (selectedProtocol == ConsoleProtocol.SPICE) { - storeSpiceData(asSpice(model), keyMaker); + storeSpiceData(model, keyMaker); } else if (selectedProtocol == ConsoleProtocol.RDP) { storeRdpData(asRdp(model), keyMaker); } @@ -89,7 +91,13 @@ return ((RdpConsoleModel) model.getAdditionalConsoleModel()).getrdp(); } - protected void storeSpiceData(ISpice spice, KeyMaker keyMaker) { + protected void storeSpiceData(HasConsoleModel model, KeyMaker keyMaker) { + SpiceConsoleModel consoleModel = asSpiceConsoleModel(model); + ISpice spice = asSpice(model); + + clientStorage.setLocalItem(keyMaker.make(SPICE_CLIENT_IMPLEMENTATION), + consoleModel.getClientConsoleMode().toString()); + storeBool(keyMaker.make(CTRL_ALT_DEL), spice.getSendCtrlAltDelete()); storeBool(keyMaker.make(OPEN_IN_FULL_SCREEN), spice.isFullScreen()); storeBool(keyMaker.make(SMARTCARD_ENABLED_OVERRIDDEN), spice.isSmartcardEnabledOverridden()); @@ -119,6 +127,12 @@ model.setSelectedProtocol(ConsoleProtocol.SPICE); + try { + ClientConsoleMode consoleMode = ClientConsoleMode.valueOf(clientStorage.getLocalItem(keyMaker.make(SPICE_CLIENT_IMPLEMENTATION))); + asSpiceConsoleModel(model).setSpiceImplementation(consoleMode); + } catch (Exception e) { + } + ISpice spice = asSpice(model); if (consoleUtils.isCtrlAltDelEnabled()) { @@ -139,7 +153,11 @@ } protected ISpice asSpice(HasConsoleModel model) { - return ((SpiceConsoleModel) model.getDefaultConsoleModel()).getspice(); + return asSpiceConsoleModel(model).getspice(); + } + + protected SpiceConsoleModel asSpiceConsoleModel(HasConsoleModel model) { + return ((SpiceConsoleModel) model.getDefaultConsoleModel()); } protected void storeRdpData(IRdp rdp, KeyMaker keyMaker) { diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/utils/ConsoleUtilsImpl.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/utils/ConsoleUtilsImpl.java index 7aa164e..97c14fa 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/utils/ConsoleUtilsImpl.java +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/utils/ConsoleUtilsImpl.java @@ -233,6 +233,10 @@ return configurator.isSpiceProxyDefined(); } + public boolean isBrowserPluginSupported() { + return configurator.isClientLinuxFirefox() || configurator.isClientWindowsExplorer(); + } + private native String getUserAgentString() /*-{ var userAgent = navigator.userAgent; return userAgent; diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/view/popup/ConsolePopupView.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/view/popup/ConsolePopupView.java index 80fdf0b..0ed1a50 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/view/popup/ConsolePopupView.java +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/view/popup/ConsolePopupView.java @@ -14,6 +14,7 @@ import org.ovirt.engine.ui.uicommonweb.models.ConsolePopupModel; import org.ovirt.engine.ui.uicommonweb.models.ConsoleProtocol; import org.ovirt.engine.ui.uicommonweb.models.vms.ConsoleModel; +import org.ovirt.engine.ui.uicommonweb.models.vms.ConsoleModel.ClientConsoleMode; import org.ovirt.engine.ui.uicommonweb.models.vms.ISpice; import org.ovirt.engine.ui.uicommonweb.models.vms.RdpConsoleModel; import org.ovirt.engine.ui.uicommonweb.models.vms.SpiceConsoleModel; @@ -61,6 +62,18 @@ @UiField(provided = true) @WithElementId EntityModelRadioButtonEditor vncRadioButton; + + @UiField(provided = true) + @WithElementId + EntityModelRadioButtonEditor spiceAutoImplRadioButton; + + @UiField(provided = true) + @WithElementId + EntityModelRadioButtonEditor spiceNativeImplRadioButton; + + @UiField(provided = true) + @WithElementId + EntityModelRadioButtonEditor spicePluginImplRadioButton; @UiField(provided = true) @WithElementId @@ -116,6 +129,13 @@ spiceRadioButton = new EntityModelRadioButtonEditor("1"); //$NON-NLS-1$ spiceRadioButton.setLabel(constants.spice()); + + spiceAutoImplRadioButton = new EntityModelRadioButtonEditor("2"); //$NON-NLS-1$ + spiceAutoImplRadioButton.setLabel(constants.spiceImplAuto()); + spiceNativeImplRadioButton = new EntityModelRadioButtonEditor("2");// $NON-NLS-1$ + spiceNativeImplRadioButton.setLabel(constants.spiceImplNative()); + spicePluginImplRadioButton = new EntityModelRadioButtonEditor("2"); //$NON-NLS-1$ + spicePluginImplRadioButton.setLabel(constants.spiceImplPlugin()); disableSmartcard = new EntityModelValueCheckBoxEditor<ConsoleModel>(Align.RIGHT, new SpiceRenderer() { @@ -286,12 +306,28 @@ if (spiceRadioButton.asRadioButton().getValue()) { setSelectedProtocol(ConsoleProtocol.SPICE); + setSelectedSpiceImpl(); } else if (remoteDesktopRadioButton.asRadioButton().getValue()) { setSelectedProtocol(ConsoleProtocol.RDP); } else if (vncRadioButton.asRadioButton().getValue()) { setSelectedProtocol(ConsoleProtocol.VNC); } + } + + private void setSelectedSpiceImpl() { + SpiceConsoleModel spiceModel = null; + if (model.getModel().getDefaultConsoleModel() instanceof SpiceConsoleModel) { + spiceModel = (SpiceConsoleModel) model.getModel().getDefaultConsoleModel(); + } + + if (spiceAutoImplRadioButton.asRadioButton().getValue()) { + spiceModel.setSpiceImplementation(ClientConsoleMode.Auto); + } else if (spiceNativeImplRadioButton.asRadioButton().getValue()) { + spiceModel.setSpiceImplementation(ClientConsoleMode.Native); + } else if (spicePluginImplRadioButton.asRadioButton().getValue()) { + spiceModel.setSpiceImplementation(ClientConsoleMode.Plugin); + } } private void setSelectedProtocol(ConsoleProtocol selectedProtocol) { @@ -439,4 +475,48 @@ } } + @Override + public void setSpicePluginImplEnabled(boolean enabled, String reason) { + spicePluginImplRadioButton.setEnabled(enabled); + if (!enabled) { + spicePluginImplRadioButton.setTitle(reason); + } + } + + @Override + public void selectSpiceImplementation(ClientConsoleMode consoleMode) { + switch (consoleMode) { + case Native: + spiceAutoImplRadioButton.asRadioButton().setValue(false); + spicePluginImplRadioButton.asRadioButton().setValue(false); + spiceNativeImplRadioButton.asRadioButton().setValue(true); + break; + case Plugin: + spiceAutoImplRadioButton.asRadioButton().setValue(false); + spicePluginImplRadioButton.asRadioButton().setValue(true); + spiceNativeImplRadioButton.asRadioButton().setValue(false); + break; + default: + spiceAutoImplRadioButton.asRadioButton().setValue(true); + spicePluginImplRadioButton.asRadioButton().setValue(false); + spiceNativeImplRadioButton.asRadioButton().setValue(false); + break; + } + } + + @Override + public HasValueChangeHandlers<Boolean> getSpiceAutoImplRadioButton() { + return spiceAutoImplRadioButton.asRadioButton(); + } + + @Override + public HasValueChangeHandlers<Boolean> getSpiceNativeImplRadioButton() { + return spiceNativeImplRadioButton.asRadioButton(); + } + + @Override + public HasValueChangeHandlers<Boolean> getSpicePluginImplRadioButton() { + return spicePluginImplRadioButton.asRadioButton(); + } + } diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/view/popup/ConsolePopupView.ui.xml b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/view/popup/ConsolePopupView.ui.xml index a2d4159..ee810d0 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/view/popup/ConsolePopupView.ui.xml +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/view/popup/ConsolePopupView.ui.xml @@ -43,6 +43,9 @@ <g:FlowPanel ui:field="spicePanel" addStyleNames="{style.fullWidth}"> <g:Label ui:field="spiceTitle" text="{constants.spiceOptions}" addStyleNames="{style.labelStyle}" /> + <e:EntityModelRadioButtonEditor ui:field="spiceAutoImplRadioButton" /> + <e:EntityModelRadioButtonEditor ui:field="spiceNativeImplRadioButton" /> + <e:EntityModelRadioButtonEditor ui:field="spicePluginImplRadioButton" /> <w:EntityModelValueCheckBoxEditor ui:field="ctrlAltDel" /> <w:EntityModelValueCheckBoxEditor ui:field="enableUsbAutoshare" /> <w:EntityModelValueCheckBoxEditor ui:field="openInFullScreen" /> diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/ConsoleUtils.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/ConsoleUtils.java index bb44800..c1d1969 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/ConsoleUtils.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/ConsoleUtils.java @@ -36,5 +36,7 @@ public boolean isWanOptionsAvailable(HasConsoleModel item); + public boolean isBrowserPluginSupported(); + public boolean isSpiceProxyDefined(); } diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/SpiceConsoleModel.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/SpiceConsoleModel.java index d053a19..c35443c 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/SpiceConsoleModel.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/SpiceConsoleModel.java @@ -64,12 +64,12 @@ private ISpice privatespice; private ClientConsoleMode consoleMode; - public ISpice getspice() { - return privatespice; - } - public void setspice(ISpice value) { privatespice = value; + } + + public ClientConsoleMode getClientConsoleMode() { + return consoleMode; } static { @@ -83,10 +83,16 @@ public SpiceConsoleModel() { setTitle(ConstantsManager.getInstance().getConstants().spiceTitle()); - setSpiceImplementation(); + + setSpiceImplementation( + ClientConsoleMode.valueOf((String) AsyncDataProvider.GetConfigValuePreConverted(ConfigurationValues.ClientConsoleModeDefault))); getConfigurator().Configure(getspice()); getspice().getConnectedEvent().addListener(this); + } + + public ISpice getspice() { + return privatespice; } /** @@ -99,9 +105,8 @@ * installed). * */ - private void setSpiceImplementation() { - consoleMode = - ClientConsoleMode.valueOf((String) AsyncDataProvider.GetConfigValuePreConverted(ConfigurationValues.ClientConsoleModeDefault)); + public void setSpiceImplementation(ClientConsoleMode consoleMode) { + this.consoleMode = consoleMode; switch (consoleMode) { case Native: -- To view, visit http://gerrit.ovirt.org/13953 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Ib9fdc00931e3b25858b792b47339b3c5ab4a954c Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Frank Kobzik <fkob...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches