Frank Kobzik has uploaded a new change for review. Change subject: frontend: Couple of changes in console invocation ......................................................................
frontend: Couple of changes in console invocation This patch contains some changes in consoles: 1. It brings to life spice-html5 radio button. 2. It adds a newline character to generated RDP descriptor. 3. Biggest change: modification of 'Console Options' dialog availability condition - now user can open this dialog for VM if it's running. Change-Id: I7d8b2d781f2bec3102e3efd0e1a6027372e2af46 Signed-off-by: Frantisek Kobzik <fkob...@redhat.com> --- 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/uicommon/RdpNativeImpl.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmListModel.java M frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/section/main/presenter/tab/basic/MainTabBasicDetailsPresenterWidget.java M frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/section/main/view/tab/extended/SideTabExtendedVirtualMachineView.java A frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/widget/extended/vm/AbstractConsoleButtonCell.java M frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/widget/extended/vm/ConsoleButtonCell.java A frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/widget/extended/vm/ConsoleEditButtonCell.java 8 files changed, 150 insertions(+), 117 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/65/17065/1 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 d9dca66..25ad026 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 @@ -322,6 +322,13 @@ getView().selectSpiceImplementation(SpiceConsoleModel.ClientConsoleMode.Plugin); } })); + registerHandler(getView().getSpiceHtml5ImplRadioButton() + .addValueChangeHandler(new ValueChangeHandler<Boolean>() { + @Override + public void onValueChange(ValueChangeEvent<Boolean> event) { + getView().selectSpiceImplementation(SpiceConsoleModel.ClientConsoleMode.Html5); + } + })); registerHandler(getView().getNoVncImplRadioButton() .addValueChangeHandler(new ValueChangeHandler<Boolean>() { diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/RdpNativeImpl.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/RdpNativeImpl.java index 35c6a77..6204c2d 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/RdpNativeImpl.java +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/RdpNativeImpl.java @@ -82,7 +82,7 @@ configBuilder.append("\nredirectprinters:i:").append(booleanToInt(getRedirectPrinters()));//$NON-NLS-1$ configBuilder.append("\nredirectsmartcards:i:").append(booleanToInt(getRedirectSmartCards()));//$NON-NLS-1$ configBuilder.append("\nredirectclipboard:i:").append(booleanToInt(getRedirectClipboard()));//$NON-NLS-1$ - configBuilder.append("username:s:").append(getVdcUserNameAndDomain());//$NON-NLS-1$ + configBuilder.append("\nusername:s:").append(getVdcUserNameAndDomain());//$NON-NLS-1$ ConsoleModel.makeConsoleConfigRequest("console.rdp", "application/rdp; charset=UTF-8", configBuilder.toString());//$NON-NLS-1$$NON-NLS-2$ } diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmListModel.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmListModel.java index 7ccb0c2..3504e67 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmListModel.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmListModel.java @@ -2323,7 +2323,11 @@ || (getSelectedItem() != null && getSelectedItems() != null && getSelectedItems().size() == 1)); getConsoleConnectCommand().setIsExecutionAllowed(isConsoleCommandsExecutionAllowed()); - getEditConsoleCommand().setIsExecutionAllowed(isConsoleCommandsExecutionAllowed()); + getEditConsoleCommand().setIsExecutionAllowed(isConsoleEditEnabled()); + } + + private boolean isConsoleEditEnabled() { + return getSelectedItem() != null && ((VM) getSelectedItem()).isRunningOrPaused(); } private boolean isConsoleCommandsExecutionAllowed() { diff --git a/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/section/main/presenter/tab/basic/MainTabBasicDetailsPresenterWidget.java b/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/section/main/presenter/tab/basic/MainTabBasicDetailsPresenterWidget.java index cf6caa7..8939c7d 100644 --- a/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/section/main/presenter/tab/basic/MainTabBasicDetailsPresenterWidget.java +++ b/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/section/main/presenter/tab/basic/MainTabBasicDetailsPresenterWidget.java @@ -4,7 +4,6 @@ import java.util.Map; import org.ovirt.engine.core.common.businessentities.DiskImage; -import org.ovirt.engine.core.common.businessentities.VMStatus; import org.ovirt.engine.ui.common.CommonApplicationConstants; import org.ovirt.engine.ui.common.presenter.popup.ConsoleModelChangedEvent; import org.ovirt.engine.ui.common.presenter.popup.ConsoleModelChangedEvent.ConsoleModelChangedHandler; @@ -184,13 +183,7 @@ } private boolean isEditConsoleEnabled(UserPortalItemModel item) { - if (!item.isPool() && consoleUtils.determineConnectionProtocol(item) != null - && item.getStatus().equals(VMStatus.Up)) { - - return true; - } - - return false; + return item.getVM() != null && item.getVM().isRunningOrPaused(); } } diff --git a/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/section/main/view/tab/extended/SideTabExtendedVirtualMachineView.java b/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/section/main/view/tab/extended/SideTabExtendedVirtualMachineView.java index a6d6a81..a8fc1d4 100644 --- a/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/section/main/view/tab/extended/SideTabExtendedVirtualMachineView.java +++ b/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/section/main/view/tab/extended/SideTabExtendedVirtualMachineView.java @@ -24,9 +24,10 @@ import org.ovirt.engine.ui.userportal.uicommon.model.vm.UserPortalListProvider; import org.ovirt.engine.ui.userportal.widget.action.UserPortalButtonDefinition; import org.ovirt.engine.ui.userportal.widget.basic.MainTabBasicListItemMessagesTranslator; +import org.ovirt.engine.ui.userportal.widget.extended.vm.AbstractConsoleButtonCell; import org.ovirt.engine.ui.userportal.widget.extended.vm.BorderedCompositeCell; import org.ovirt.engine.ui.userportal.widget.extended.vm.ConsoleButtonCell; -import org.ovirt.engine.ui.userportal.widget.extended.vm.ConsoleButtonCell.ConsoleButtonCommand; +import org.ovirt.engine.ui.userportal.widget.extended.vm.ConsoleEditButtonCell; import org.ovirt.engine.ui.userportal.widget.extended.vm.ImageButtonCell; import org.ovirt.engine.ui.userportal.widget.extended.vm.ImageMaskCell; import org.ovirt.engine.ui.userportal.widget.extended.vm.ImageMaskCell.ShowMask; @@ -188,7 +189,7 @@ applicationResources.sideTabExtendedVmStyle().enabledConsoleButton(), applicationResources.sideTabExtendedVmStyle().disabledConsoleButton(), constants.openConsoleLabel(), - new ConsoleButtonCommand() { + new AbstractConsoleButtonCell.ConsoleButtonCommand() { @Override public void execute(UserPortalItemModel model) { String message = @@ -203,12 +204,11 @@ getTable().addColumn(new UserPortalItemSimpleColumn(openConsoleCell), constants.empty(), "100px"); //$NON-NLS-1$ - ConsoleButtonCell consoleEditCell = new ConsoleButtonCell( - consoleUtils, + ConsoleEditButtonCell consoleEditCell = new ConsoleEditButtonCell( applicationResources.sideTabExtendedVmStyle().enabledEditConsoleButton(), applicationResources.sideTabExtendedVmStyle().disabledEditConsoleButton(), constants.editConsoleLabel(), - new ConsoleButtonCommand() { + new AbstractConsoleButtonCell.ConsoleButtonCommand() { @Override public void execute(UserPortalItemModel model) { getModel().getEditConsoleCommand().execute(); diff --git a/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/widget/extended/vm/AbstractConsoleButtonCell.java b/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/widget/extended/vm/AbstractConsoleButtonCell.java new file mode 100644 index 0000000..a97a364 --- /dev/null +++ b/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/widget/extended/vm/AbstractConsoleButtonCell.java @@ -0,0 +1,112 @@ +package org.ovirt.engine.ui.userportal.widget.extended.vm; + + +import com.google.gwt.cell.client.AbstractCell; +import com.google.gwt.cell.client.ValueUpdater; +import com.google.gwt.core.client.GWT; +import com.google.gwt.core.client.Scheduler; +import com.google.gwt.core.client.Scheduler.ScheduledCommand; +import com.google.gwt.dom.client.DivElement; +import com.google.gwt.dom.client.Element; +import com.google.gwt.dom.client.EventTarget; +import com.google.gwt.dom.client.NativeEvent; +import com.google.gwt.safehtml.client.SafeHtmlTemplates; +import com.google.gwt.safehtml.shared.SafeHtml; +import com.google.gwt.safehtml.shared.SafeHtmlBuilder; +import com.google.gwt.safehtml.shared.SafeHtmlUtils; +import com.google.gwt.user.client.DOM; +import org.ovirt.engine.ui.common.utils.ElementIdUtils; +import org.ovirt.engine.ui.uicommonweb.models.userportal.UserPortalItemModel; + +public abstract class AbstractConsoleButtonCell extends AbstractCell<UserPortalItemModel> { + + + public static interface ConsoleButtonCommand { + + public void execute(UserPortalItemModel model); + + } + + interface CellTemplate extends SafeHtmlTemplates { + + @Template("<div id=\"{0}\" title=\"{1}\" class=\"{2}\" data-class=\"consoleButton\" />") + SafeHtml consoleButton(String id, String title, String className); + + } + + private final ConsoleButtonCommand command; + + private final String enabledCss; + + private final String disabledCss; + + private final String title; + + // DOM element ID settings for the text container element + private String elementIdPrefix = DOM.createUniqueId(); + private String columnId; + + private static CellTemplate template; + + public AbstractConsoleButtonCell(String enabledCss, String disabledCss, + String title, ConsoleButtonCommand command) { + super("click"); //$NON-NLS-1$ + this.enabledCss = SafeHtmlUtils.htmlEscape(enabledCss); + this.disabledCss = SafeHtmlUtils.htmlEscape(disabledCss); + this.title = SafeHtmlUtils.htmlEscape(title); + this.command = command; + + // Delay cell template creation until the first time it's needed + if (template == null) { + template = GWT.create(CellTemplate.class); + } + } + + public void setElementIdPrefix(String elementIdPrefix) { + this.elementIdPrefix = elementIdPrefix; + } + + public void setColumnId(String columnId) { + this.columnId = columnId; + } + + @Override + public void onBrowserEvent(Context context, Element parent, + final UserPortalItemModel model, NativeEvent event, + ValueUpdater<UserPortalItemModel> valueUpdater) { + super.onBrowserEvent(context, parent, model, event, valueUpdater); + + EventTarget eventTarget = event.getEventTarget(); + + // Skip events other than 'click' + if (!"click".equals(event.getType())) { //$NON-NLS-1$ + return; + } + + // Skip events that don't target consoleButton DIV element + if (!DivElement.is(eventTarget) || !"consoleButton".equals(DivElement.as(eventTarget).getAttribute("data-class"))) { //$NON-NLS-1$ //$NON-NLS-2$ + return; + } + + if (shouldRenderCell(model)) { + // deferred because first the row has to be selected and then the console can be shown + Scheduler.get().scheduleDeferred(new ScheduledCommand() { + @Override + public void execute() { + command.execute(model); + } + }); + } + } + + @Override + public void render(Context context, UserPortalItemModel model, SafeHtmlBuilder sb) { + sb.append(template.consoleButton( + ElementIdUtils.createTableCellElementId(elementIdPrefix, columnId, context), + title, + shouldRenderCell(model) ? enabledCss : disabledCss)); + } + + protected abstract boolean shouldRenderCell(UserPortalItemModel model); + +} diff --git a/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/widget/extended/vm/ConsoleButtonCell.java b/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/widget/extended/vm/ConsoleButtonCell.java index 5a1a7b2..477963b 100644 --- a/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/widget/extended/vm/ConsoleButtonCell.java +++ b/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/widget/extended/vm/ConsoleButtonCell.java @@ -1,120 +1,22 @@ package org.ovirt.engine.ui.userportal.widget.extended.vm; -import org.ovirt.engine.ui.common.utils.ElementIdUtils; import org.ovirt.engine.ui.uicommonweb.ConsoleUtils; import org.ovirt.engine.ui.uicommonweb.models.ConsoleProtocol; import org.ovirt.engine.ui.uicommonweb.models.userportal.UserPortalItemModel; -import com.google.gwt.cell.client.AbstractCell; -import com.google.gwt.cell.client.ValueUpdater; -import com.google.gwt.core.client.GWT; -import com.google.gwt.core.client.Scheduler; -import com.google.gwt.core.client.Scheduler.ScheduledCommand; -import com.google.gwt.dom.client.DivElement; -import com.google.gwt.dom.client.Element; -import com.google.gwt.dom.client.EventTarget; -import com.google.gwt.dom.client.NativeEvent; -import com.google.gwt.safehtml.client.SafeHtmlTemplates; -import com.google.gwt.safehtml.shared.SafeHtml; -import com.google.gwt.safehtml.shared.SafeHtmlBuilder; -import com.google.gwt.safehtml.shared.SafeHtmlUtils; -import com.google.gwt.user.client.DOM; - -public class ConsoleButtonCell extends AbstractCell<UserPortalItemModel> { - - public static interface ConsoleButtonCommand { - - public void execute(UserPortalItemModel model); - - } - - interface CellTemplate extends SafeHtmlTemplates { - - @Template("<div id=\"{0}\" title=\"{1}\" class=\"{2}\" data-class=\"consoleButton\" />") - SafeHtml consoleButton(String id, String title, String className); - - } +public class ConsoleButtonCell extends AbstractConsoleButtonCell { private final ConsoleUtils consoleUtils; - private final ConsoleButtonCommand command; + public ConsoleButtonCell(ConsoleUtils consoleUtils, String enabledCss, String disabledCss, String title, ConsoleButtonCommand command) { + super(enabledCss, disabledCss, title, command); - private final String enabledCss; - - private final String disabledCss; - - private final String title; - - // DOM element ID settings for the text container element - private String elementIdPrefix = DOM.createUniqueId(); - private String columnId; - - private static CellTemplate template; - - public ConsoleButtonCell(ConsoleUtils consoleUtils, - String enabledCss, String disabledCss, - String title, ConsoleButtonCommand command) { - super("click"); //$NON-NLS-1$ this.consoleUtils = consoleUtils; - this.enabledCss = SafeHtmlUtils.htmlEscape(enabledCss); - this.disabledCss = SafeHtmlUtils.htmlEscape(disabledCss); - this.title = SafeHtmlUtils.htmlEscape(title); - this.command = command; - - // Delay cell template creation until the first time it's needed - if (template == null) { - template = GWT.create(CellTemplate.class); - } - } - - public void setElementIdPrefix(String elementIdPrefix) { - this.elementIdPrefix = elementIdPrefix; - } - - public void setColumnId(String columnId) { - this.columnId = columnId; } @Override - public void onBrowserEvent(Context context, Element parent, - final UserPortalItemModel model, NativeEvent event, - ValueUpdater<UserPortalItemModel> valueUpdater) { - super.onBrowserEvent(context, parent, model, event, valueUpdater); - - EventTarget eventTarget = event.getEventTarget(); - - // Skip events other than 'click' - if (!"click".equals(event.getType())) { //$NON-NLS-1$ - return; - } - - // Skip events that don't target consoleButton DIV element - if (!DivElement.is(eventTarget) || !"consoleButton".equals(DivElement.as(eventTarget).getAttribute("data-class"))) { //$NON-NLS-1$ //$NON-NLS-2$ - return; - } - - if (isConsoleEnabled(model)) { - // deferred because first the row has to be selected and then the console can be shown - Scheduler.get().scheduleDeferred(new ScheduledCommand() { - @Override - public void execute() { - command.execute(model); - } - }); - } - } - - @Override - public void render(Context context, UserPortalItemModel model, SafeHtmlBuilder sb) { - sb.append(template.consoleButton( - ElementIdUtils.createTableCellElementId(elementIdPrefix, columnId, context), - title, - isConsoleEnabled(model) ? enabledCss : disabledCss)); - } - - protected boolean isConsoleEnabled(UserPortalItemModel model) { + protected boolean shouldRenderCell(UserPortalItemModel model) { ConsoleProtocol protocol = consoleUtils.determineConnectionProtocol(model); return consoleUtils.canShowConsole(protocol, model); } - } diff --git a/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/widget/extended/vm/ConsoleEditButtonCell.java b/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/widget/extended/vm/ConsoleEditButtonCell.java new file mode 100644 index 0000000..d685d66 --- /dev/null +++ b/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/widget/extended/vm/ConsoleEditButtonCell.java @@ -0,0 +1,15 @@ +package org.ovirt.engine.ui.userportal.widget.extended.vm; + +import org.ovirt.engine.ui.uicommonweb.models.userportal.UserPortalItemModel; + +public class ConsoleEditButtonCell extends AbstractConsoleButtonCell { + + public ConsoleEditButtonCell(String enabledCss, String disabledCss, String title, ConsoleButtonCommand command) { + super(enabledCss, disabledCss, title, command); + } + + @Override + protected boolean shouldRenderCell(UserPortalItemModel model) { + return model.getVM() != null && model.getVM().isRunningOrPaused(); + } +} -- To view, visit http://gerrit.ovirt.org/17065 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I7d8b2d781f2bec3102e3efd0e1a6027372e2af46 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