Tomas Jelinek has uploaded a new change for review.

Change subject: userportal,webadmin: Persist the changes from console popup
......................................................................

userportal,webadmin: Persist the changes from console popup

Make the changes made in console popup (both WA and UP) persistent
per browser.

The core of the implementation is the ConsoleOptionsFrontendPersisterImpl
which is a gin managed class containing two methods:
- storeToLocalStorage
- loadFromLocalStorage

This methods needs the model to/from to copy the data to/from local
storage and the context, which can be webadmin, userportal's basic
view or userportal's extended view (because the values are configured
separatly for this three places).

The load method copies the selected data from local storage only if
they are still possible in the specific context (for example when the
user selected some spice options, this has been stored to local
storage and than he changed the default console to VNC, the spice
options are not going to be copied).

When using, you need to make sure that you load the stored data
from the local storage before opening the edit console and before
connecting to the console, and also that you store all the data to
local storage after the user changes them in the edit console.

Change-Id: I847e17c6e28db7921f0bc162f0ff70399e671a03
Signed-off-by: Tomas Jelinek <tjeli...@redhat.com>
---
A 
frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/gin/BaseUtilsModule.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/uicommon/UiCommonDefaultTypeResolver.java
M 
frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/utils/ConsoleManager.java
A 
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/ConsoleUtils.java
A 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/ConsoleOptionsFrontendPersister.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/ConsolePopupModel.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/userportal/IUserPortalListModel.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/userportal/UserPortalBasicListModel.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/userportal/UserPortalListModel.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/gin/UtilsModule.java
M 
frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/section/main/presenter/tab/basic/MainTabBasicListItemPresenterWidget.java
M 
frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/section/main/view/tab/extended/SideTabExtendedVirtualMachineView.java
M 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/UtilsModule.java
M 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/tab/MainTabVirtualMachinePresenter.java
17 files changed, 287 insertions(+), 13 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/74/13274/1

diff --git 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/gin/BaseUtilsModule.java
 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/gin/BaseUtilsModule.java
new file mode 100644
index 0000000..2e6861b
--- /dev/null
+++ 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/gin/BaseUtilsModule.java
@@ -0,0 +1,16 @@
+package org.ovirt.engine.ui.common.gin;
+
+import org.ovirt.engine.ui.common.utils.ConsoleOptionsFrontendPersisterImpl;
+import org.ovirt.engine.ui.uicommonweb.ConsoleOptionsFrontendPersister;
+
+import com.google.gwt.inject.client.AbstractGinModule;
+import com.google.inject.Singleton;
+
+public class BaseUtilsModule extends AbstractGinModule {
+
+    @Override
+    protected void configure() {
+        
bind(ConsoleOptionsFrontendPersister.class).to(ConsoleOptionsFrontendPersisterImpl.class).in(Singleton.class);
+    }
+
+}
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 22d177c..ef71ebd 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
@@ -3,6 +3,7 @@
 import org.ovirt.engine.ui.common.CommonApplicationConstants;
 import 
org.ovirt.engine.ui.common.presenter.AbstractModelBoundPopupPresenterWidget;
 import org.ovirt.engine.ui.common.utils.ConsoleUtils;
+import org.ovirt.engine.ui.uicommonweb.ConsoleOptionsFrontendPersister;
 import org.ovirt.engine.ui.uicommonweb.UICommand;
 import org.ovirt.engine.ui.uicommonweb.models.ConsolePopupModel;
 import org.ovirt.engine.ui.uicommonweb.models.ConsoleProtocol;
@@ -76,14 +77,17 @@
     private boolean wanOptionsAvailable = false;
     private ConsolePopupModel model;
     private final CommonApplicationConstants constants;
+    private final ConsoleOptionsFrontendPersister consoleOptionsPersister;
 
     @Inject
     public ConsolePopupPresenterWidget(EventBus eventBus, ViewDef view,
             ConsoleUtils consoleUtils,
-            CommonApplicationConstants constants) {
+            CommonApplicationConstants constants,
+            ConsoleOptionsFrontendPersister consoleOptionsPersister) {
         super(eventBus, view);
         this.consoleUtils = consoleUtils;
         this.constants = constants;
+        this.consoleOptionsPersister = consoleOptionsPersister;
     }
 
     @Override
@@ -93,6 +97,7 @@
         }
 
         this.model = model;
+        initModel(model);
         initView(model);
         initListeners(model);
 
@@ -100,6 +105,10 @@
         getView().setVmName(vmName);
 
         super.init(model);
+    }
+
+    private void initModel(ConsolePopupModel model) {
+        consoleOptionsPersister.loadFromLocalStorage(model.getModel(), 
model.getConsoleContext());
     }
 
     private void initListeners(final ConsolePopupModel model) {
@@ -175,10 +184,7 @@
             }
         }
 
-        boolean isWindowsVm = model.getModel().getVM().getOs().isWindows();
-        boolean spiceGuestAgentInstalled = 
model.getModel().getVM().getSpiceDriverVersion() != null;
-
-        wanOptionsAvailable = isWindowsVm && spiceAvailable && 
spiceGuestAgentInstalled;
+        wanOptionsAvailable = 
consoleUtils.isWanOptionsAvailable(model.getModel());
         if (wanOptionsAvailable) {
             getView().setWanOptionsVisible(true);
         } else {
@@ -204,6 +210,9 @@
             // now flush the model
             getView().flushToPrivateModel();
 
+            // store to local storage
+            consoleOptionsPersister.storeToLocalStorage(model.getModel(), 
model.getConsoleContext());
+
             ConsoleModelChangedEvent.fire(getEventBus(), model.getModel());
         }
     }
diff --git 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/UiCommonDefaultTypeResolver.java
 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/UiCommonDefaultTypeResolver.java
index b75db52..e57c3c3 100644
--- 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/UiCommonDefaultTypeResolver.java
+++ 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/uicommon/UiCommonDefaultTypeResolver.java
@@ -1,6 +1,7 @@
 package org.ovirt.engine.ui.common.uicommon;
 
 import org.ovirt.engine.ui.uicommonweb.Configurator;
+import org.ovirt.engine.ui.uicommonweb.ConsoleOptionsFrontendPersister;
 import org.ovirt.engine.ui.uicommonweb.ILogger;
 import org.ovirt.engine.ui.uicommonweb.ITimer;
 import org.ovirt.engine.ui.uicommonweb.ITypeResolver;
@@ -14,11 +15,13 @@
 
     private final Configurator configurator;
     private final ILogger logger;
+    private final ConsoleOptionsFrontendPersister 
consoleOptionsFrontendPersister;
 
     @Inject
-    public UiCommonDefaultTypeResolver(Configurator configurator, ILogger 
logger) {
+    public UiCommonDefaultTypeResolver(Configurator configurator, ILogger 
logger, ConsoleOptionsFrontendPersister consoleOptionsFrontendPersister) {
         this.configurator = configurator;
         this.logger = logger;
+        this.consoleOptionsFrontendPersister = consoleOptionsFrontendPersister;
     }
 
     @SuppressWarnings("rawtypes")
@@ -36,6 +39,8 @@
             return new SpiceNativeImpl();
         } else if (type == IRdp.class) {
             return new IRdpImpl();
+        } else if (type == ConsoleOptionsFrontendPersister.class) {
+            return consoleOptionsFrontendPersister;
         }
 
         throw new RuntimeException("UiCommon Resolver cannot resolve type: " + 
type); //$NON-NLS-1$
diff --git 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/utils/ConsoleManager.java
 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/utils/ConsoleManager.java
index 8ee3609..df3cd28 100644
--- 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/utils/ConsoleManager.java
+++ 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/utils/ConsoleManager.java
@@ -25,6 +25,7 @@
      * message describing the problem.
      */
     public String connectToConsole(HasConsoleModel model) {
+
         ConsoleProtocol selectedProtocol = 
consoleUtils.determineConnectionProtocol(model);
 
         if (!consoleUtils.canShowConsole(selectedProtocol, model)) {
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
new file mode 100644
index 0000000..7886ed8
--- /dev/null
+++ 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/utils/ConsoleOptionsFrontendPersisterImpl.java
@@ -0,0 +1,162 @@
+package org.ovirt.engine.ui.common.utils;
+
+import org.ovirt.engine.ui.common.system.ClientStorage;
+import org.ovirt.engine.ui.uicommonweb.ConsoleOptionsFrontendPersister;
+import org.ovirt.engine.ui.uicommonweb.models.ConsoleProtocol;
+import org.ovirt.engine.ui.uicommonweb.models.HasConsoleModel;
+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;
+import org.ovirt.engine.ui.uicommonweb.models.vms.SpiceConsoleModel;
+
+import com.google.inject.Inject;
+
+public class ConsoleOptionsFrontendPersisterImpl implements 
ConsoleOptionsFrontendPersister {
+
+    private ClientStorage clientStorage;
+
+    private final ConsoleUtils consoleUtils;
+
+    // spice options
+    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$
+    private static final String WAN_OPTIONS = "_wanOptions"; //$NON-NLS-1$
+    private static final String USB_AUTOSHARE = "_usbAutoshare"; //$NON-NLS-1$
+
+    // rdp options
+    private static final String USE_LOCAL_DRIVES = "_useLocalDrives"; 
//$NON-NLS-1$
+
+    // common options
+    private static final String SELECTED_PROTOCOL = "_selectedProtocol"; 
//$NON-NLS-1$
+
+    @Inject
+    public ConsoleOptionsFrontendPersisterImpl(ClientStorage clientStorage, 
ConsoleUtils consoleUtils) {
+        this.clientStorage = clientStorage;
+        this.consoleUtils = consoleUtils;
+    }
+
+    public void storeToLocalStorage(HasConsoleModel model, ConsoleContext 
context) {
+        if (model.isPool()) {
+            // this class works only for VMs, not for pools
+            return;
+        }
+
+        ConsoleProtocol selectedProtocol = model.getSelectedProtocol();
+        String id = model.getVM().getId().toString();
+        KeyMaker keyMaker = new KeyMaker(id, context);
+
+        clientStorage.setLocalItem(keyMaker.make(SELECTED_PROTOCOL), 
selectedProtocol.toString());
+
+        if (selectedProtocol == ConsoleProtocol.SPICE) {
+            storeSpiceData(asSpice(model), keyMaker);
+        } else if (selectedProtocol == ConsoleProtocol.RDP) {
+            storeRdpData(asRdp(model), keyMaker);
+        }
+    }
+
+    public void loadFromLocalStorage(HasConsoleModel model, ConsoleContext 
context) {
+
+        String vmId = model.getVM().getId().toString();
+
+        KeyMaker keyMaker = new KeyMaker(vmId, context);
+
+        String selectedProtocolString = 
clientStorage.getLocalItem(keyMaker.make(SELECTED_PROTOCOL));
+        if (selectedProtocolString == null || 
"".equals(selectedProtocolString)) {
+            // if the protocol is not set, nothing is set - ignore
+            return;
+        }
+
+        ConsoleProtocol selectedProtocol = 
ConsoleProtocol.valueOf(selectedProtocolString);
+
+        if (selectedProtocol == ConsoleProtocol.SPICE) {
+            loadSpiceData(model, keyMaker);
+        } else if (selectedProtocol == ConsoleProtocol.RDP) {
+            loadRdpData(model, keyMaker);
+        } else {
+            // VNC is available all the time
+            model.setSelectedProtocol(selectedProtocol);
+        }
+    }
+
+    protected IRdp asRdp(HasConsoleModel model) {
+        return ((RdpConsoleModel) model.getAdditionalConsoleModel()).getrdp();
+    }
+
+    protected void storeSpiceData(ISpice spice, KeyMaker keyMaker) {
+        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());
+        storeBool(keyMaker.make(WAN_OPTIONS), spice.isWanOptionsEnabled());
+        storeBool(keyMaker.make(USB_AUTOSHARE), spice.getUsbAutoShare());
+    }
+
+    protected void loadRdpData(HasConsoleModel model, KeyMaker keyMaker) {
+        if (!consoleUtils.isRDPAvailable() || 
model.getAdditionalConsoleModel() == null) {
+            // don't read rdp options if the rdp console is not available 
anymore
+            return;
+        }
+
+        model.setSelectedProtocol(ConsoleProtocol.RDP);
+
+        IRdp rdp = asRdp(model);
+
+        rdp.setUseLocalDrives(readBool(keyMaker.make(USE_LOCAL_DRIVES)));
+    }
+
+    protected void loadSpiceData(HasConsoleModel model, KeyMaker keyMaker) {
+        if (!consoleUtils.isSpiceAvailable() || 
!(model.getDefaultConsoleModel() instanceof SpiceConsoleModel)) {
+            // don't read spice options if the spice console is not available 
anymore
+            return;
+        }
+
+        model.setSelectedProtocol(ConsoleProtocol.SPICE);
+
+        ISpice spice = asSpice(model);
+
+        if (consoleUtils.isCtrlAltDelEnabled()) {
+            spice.setSendCtrlAltDelete(readBool(keyMaker.make(CTRL_ALT_DEL)));
+        }
+
+        if (consoleUtils.isWanOptionsAvailable(model)) {
+            spice.setWanOptionsEnabled(readBool(keyMaker.make(WAN_OPTIONS)));
+        }
+
+        spice.setFullScreen(readBool(keyMaker.make(OPEN_IN_FULL_SCREEN)));
+        
spice.setOverrideEnabledSmartcard(readBool(keyMaker.make(SMARTCARD_ENABLED_OVERRIDDEN)));
+        spice.setUsbAutoShare(readBool(keyMaker.make(USB_AUTOSHARE)));
+    }
+
+    protected ISpice asSpice(HasConsoleModel model) {
+        return ((SpiceConsoleModel) model.getDefaultConsoleModel()).getspice();
+    }
+
+    protected void storeRdpData(IRdp rdp, KeyMaker keyMaker) {
+        storeBool(keyMaker.make(USE_LOCAL_DRIVES), rdp.getUseLocalDrives());
+    }
+
+    private boolean readBool(String key) {
+        return Boolean.parseBoolean(clientStorage.getLocalItem(key));
+    }
+
+    private void storeBool(String key, boolean value) {
+        clientStorage.setLocalItem(key, Boolean.toString(value));
+    }
+
+    class KeyMaker {
+
+        private String vmId;
+
+        private ConsoleContext context;
+
+        public KeyMaker(String vmId, ConsoleContext context) {
+            super();
+            this.vmId = vmId;
+            this.context = context;
+        }
+
+        public String make(String key) {
+            return vmId + context + key;
+        }
+    }
+}
diff --git 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/utils/ConsoleUtils.java
 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/utils/ConsoleUtils.java
index fb6f302..4c053fa 100644
--- 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/utils/ConsoleUtils.java
+++ 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/utils/ConsoleUtils.java
@@ -200,6 +200,15 @@
         return false;
     }
 
+    public boolean isWanOptionsAvailable(HasConsoleModel model) {
+        boolean spiceAvailable =
+                model.getDefaultConsoleModel() instanceof SpiceConsoleModel && 
isSpiceAvailable();
+        boolean isWindowsVm = model.getVM().getOs().isWindows();
+        boolean spiceGuestAgentInstalled = 
model.getVM().getSpiceDriverVersion() != null;
+
+        return spiceAvailable && isWindowsVm && spiceGuestAgentInstalled;
+    }
+
     public native String getUserAgentString() /*-{
                                               var userAgent = 
navigator.userAgent;
                                               return userAgent;
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/ConsoleOptionsFrontendPersister.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/ConsoleOptionsFrontendPersister.java
new file mode 100644
index 0000000..34edc29
--- /dev/null
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/ConsoleOptionsFrontendPersister.java
@@ -0,0 +1,19 @@
+package org.ovirt.engine.ui.uicommonweb;
+
+import org.ovirt.engine.ui.uicommonweb.models.HasConsoleModel;
+
+public interface ConsoleOptionsFrontendPersister {
+
+    void storeToLocalStorage(HasConsoleModel model, ConsoleContext context);
+
+    void loadFromLocalStorage(HasConsoleModel model, ConsoleContext context);
+
+    /**
+     * The stored/loaded entities can not interfere from one app/view to other 
even it is all in one browser.
+     */
+    public static enum ConsoleContext {
+        UP_BASIC,
+        UP_EXTENDED,
+        WA;
+    }
+}
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/ConsolePopupModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/ConsolePopupModel.java
index 1f0e9d8..dd8ee8a 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/ConsolePopupModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/ConsolePopupModel.java
@@ -1,10 +1,13 @@
 package org.ovirt.engine.ui.uicommonweb.models;
 
+import 
org.ovirt.engine.ui.uicommonweb.ConsoleOptionsFrontendPersister.ConsoleContext;
 import org.ovirt.engine.ui.uicompat.ConstantsManager;
 
 public class ConsolePopupModel extends Model {
 
     private HasConsoleModel consoleModel;
+
+    private ConsoleContext consoleContext;
 
     public ConsolePopupModel() {
         
setTitle(ConstantsManager.getInstance().getConstants().consoleOptions());
@@ -18,4 +21,11 @@
         this.consoleModel = model;
     }
 
+    public ConsoleContext getConsoleContext() {
+        return consoleContext;
+    }
+
+    public void setConsoleContext(ConsoleContext consoleContext) {
+        this.consoleContext = consoleContext;
+    }
 }
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/userportal/IUserPortalListModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/userportal/IUserPortalListModel.java
index 3122d2d..a7c7ac2 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/userportal/IUserPortalListModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/userportal/IUserPortalListModel.java
@@ -9,6 +9,7 @@
 import org.ovirt.engine.core.compat.Guid;
 import org.ovirt.engine.core.compat.StringHelper;
 import org.ovirt.engine.ui.frontend.Frontend;
+import 
org.ovirt.engine.ui.uicommonweb.ConsoleOptionsFrontendPersister.ConsoleContext;
 import org.ovirt.engine.ui.uicommonweb.UICommand;
 import org.ovirt.engine.ui.uicommonweb.models.HasConsoleModel;
 import org.ovirt.engine.ui.uicommonweb.models.ConsoleModelsCache;
@@ -121,6 +122,7 @@
         }
 
         ConsolePopupModel model = new ConsolePopupModel();
+        model.setConsoleContext(getConsoleContext());
         model.setModel((UserPortalItemModel) this.getSelectedItem());
         model.setHashName("editConsole"); //$NON-NLS-1$
         setWindow(model);
@@ -135,6 +137,8 @@
         model.getCommands().add(cancelCommand);
     }
 
+    protected abstract ConsoleContext getConsoleContext();
+
     protected void cancel()
     {
         Frontend.Unsubscribe();
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/userportal/UserPortalBasicListModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/userportal/UserPortalBasicListModel.java
index afcb43b..af07617 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/userportal/UserPortalBasicListModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/userportal/UserPortalBasicListModel.java
@@ -14,6 +14,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.ConsoleOptionsFrontendPersister.ConsoleContext;
 import org.ovirt.engine.ui.uicommonweb.Linq;
 import org.ovirt.engine.ui.uicommonweb.UICommand;
 import org.ovirt.engine.ui.uicommonweb.models.EntityModel;
@@ -366,4 +367,9 @@
         }
     }
 
+    @Override
+    protected ConsoleContext getConsoleContext() {
+        return ConsoleContext.UP_BASIC;
+    }
+
 }
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/userportal/UserPortalListModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/userportal/UserPortalListModel.java
index 67f6dba..5771a36 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/userportal/UserPortalListModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/userportal/UserPortalListModel.java
@@ -48,6 +48,7 @@
 import org.ovirt.engine.ui.frontend.Frontend;
 import org.ovirt.engine.ui.frontend.INewAsyncCallback;
 import org.ovirt.engine.ui.uicommonweb.Cloner;
+import 
org.ovirt.engine.ui.uicommonweb.ConsoleOptionsFrontendPersister.ConsoleContext;
 import org.ovirt.engine.ui.uicommonweb.Linq;
 import org.ovirt.engine.ui.uicommonweb.UICommand;
 import org.ovirt.engine.ui.uicommonweb.dataprovider.AsyncDataProvider;
@@ -1815,4 +1816,9 @@
     protected String getListName() {
         return "UserPortalListModel"; //$NON-NLS-1$
     }
+
+    @Override
+    protected ConsoleContext getConsoleContext() {
+        return ConsoleContext.UP_EXTENDED;
+    }
 }
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 eec3413..5f3bf09 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
@@ -65,9 +65,12 @@
 import org.ovirt.engine.ui.frontend.Frontend;
 import org.ovirt.engine.ui.frontend.INewAsyncCallback;
 import org.ovirt.engine.ui.uicommonweb.Cloner;
+import org.ovirt.engine.ui.uicommonweb.ConsoleOptionsFrontendPersister;
 import org.ovirt.engine.ui.uicommonweb.Linq;
 import org.ovirt.engine.ui.uicommonweb.TagsEqualityComparer;
+import org.ovirt.engine.ui.uicommonweb.TypeResolver;
 import org.ovirt.engine.ui.uicommonweb.UICommand;
+import 
org.ovirt.engine.ui.uicommonweb.ConsoleOptionsFrontendPersister.ConsoleContext;
 import org.ovirt.engine.ui.uicommonweb.dataprovider.AsyncDataProvider;
 import org.ovirt.engine.ui.uicommonweb.models.ConfirmationModel;
 import org.ovirt.engine.ui.uicommonweb.models.ConsoleModelsCache;
@@ -99,6 +102,9 @@
 
 public class VmListModel extends VmBaseListModel<VM> implements 
ISupportSystemTreeContext, HasConsoleModel, UserSelectedDisplayProtocolManager
 {
+
+    private final ConsoleOptionsFrontendPersister consoleOptionsPersister = 
(ConsoleOptionsFrontendPersister) 
TypeResolver.getInstance().Resolve(ConsoleOptionsFrontendPersister.class);
+
     private UICommand privateNewServerCommand;
 
     public UICommand getNewServerCommand()
@@ -805,7 +811,9 @@
         }
 
         ConsolePopupModel model = new ConsolePopupModel();
+        model.setConsoleContext(ConsoleContext.WA);
         model.setModel(this);
+
         model.setHashName("editConsole"); //$NON-NLS-1$
         setWindow(model);
 
diff --git 
a/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/gin/UtilsModule.java
 
b/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/gin/UtilsModule.java
index 6960e49..b61b13a 100644
--- 
a/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/gin/UtilsModule.java
+++ 
b/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/gin/UtilsModule.java
@@ -1,18 +1,19 @@
 package org.ovirt.engine.ui.userportal.gin;
 
+import org.ovirt.engine.ui.common.gin.BaseUtilsModule;
 import org.ovirt.engine.ui.common.utils.ConsoleManager;
 import org.ovirt.engine.ui.common.utils.ConsoleUtils;
 import 
org.ovirt.engine.ui.userportal.section.login.presenter.ConnectAutomaticallyProvider;
 import org.ovirt.engine.ui.userportal.utils.ConnectAutomaticallyManager;
 import 
org.ovirt.engine.ui.userportal.widget.basic.MainTabBasicListItemMessagesTranslator;
 
-import com.google.gwt.inject.client.AbstractGinModule;
 import com.google.inject.Singleton;
 
-public class UtilsModule extends AbstractGinModule {
+public class UtilsModule extends BaseUtilsModule {
 
     @Override
     protected void configure() {
+        super.configure();
         bind(ConsoleUtils.class).in(Singleton.class);
         bind(MainTabBasicListItemMessagesTranslator.class).in(Singleton.class);
         bind(ConnectAutomaticallyProvider.class).in(Singleton.class);
diff --git 
a/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/section/main/presenter/tab/basic/MainTabBasicListItemPresenterWidget.java
 
b/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/section/main/presenter/tab/basic/MainTabBasicListItemPresenterWidget.java
index 2790e0b..f2905bb 100644
--- 
a/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/section/main/presenter/tab/basic/MainTabBasicListItemPresenterWidget.java
+++ 
b/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/section/main/presenter/tab/basic/MainTabBasicListItemPresenterWidget.java
@@ -6,7 +6,9 @@
 import org.ovirt.engine.ui.common.utils.ConsoleManager;
 import org.ovirt.engine.ui.common.utils.ConsoleUtils;
 import org.ovirt.engine.ui.common.widget.HasEditorDriver;
+import org.ovirt.engine.ui.uicommonweb.ConsoleOptionsFrontendPersister;
 import org.ovirt.engine.ui.uicommonweb.UICommand;
+import 
org.ovirt.engine.ui.uicommonweb.ConsoleOptionsFrontendPersister.ConsoleContext;
 import 
org.ovirt.engine.ui.uicommonweb.models.userportal.UserPortalBasicListModel;
 import org.ovirt.engine.ui.uicommonweb.models.userportal.UserPortalItemModel;
 import org.ovirt.engine.ui.uicompat.Event;
@@ -76,15 +78,17 @@
     private UserPortalBasicListModel listModel;
 
     private IEventListener selectedItemChangeListener;
+    private final ConsoleOptionsFrontendPersister consoleOptionsPersister;
 
     @Inject
     public MainTabBasicListItemPresenterWidget(EventBus eventBus, ViewDef view,
             ConsoleUtils consoleUtils, ConsoleManager consoleManager,
-            final UserPortalBasicListProvider listModelProvider) {
+            final UserPortalBasicListProvider listModelProvider, 
ConsoleOptionsFrontendPersister consoleOptionsPersister) {
         super(eventBus, view);
         this.consoleUtils = consoleUtils;
         this.consoleManager = consoleManager;
         this.listModelProvider = listModelProvider;
+        this.consoleOptionsPersister = consoleOptionsPersister;
 
         
registerHandler(getEventBus().addHandler(UserPortalModelInitEvent.getType(), 
new UserPortalModelInitHandler() {
             @Override
@@ -236,6 +240,7 @@
 
     @Override
     public void onDoubleClick(DoubleClickEvent event) {
+        consoleOptionsPersister.loadFromLocalStorage(model, 
ConsoleContext.UP_BASIC);
         String res = consoleManager.connectToConsole(model);
         if (res != null) {
             getView().showErrorDialog(res);
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 b49d52a..384930d 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
@@ -12,7 +12,9 @@
 import org.ovirt.engine.ui.common.utils.ConsoleUtils;
 import org.ovirt.engine.ui.common.utils.ElementIdUtils;
 import org.ovirt.engine.ui.common.widget.table.SimpleActionTable;
+import org.ovirt.engine.ui.uicommonweb.ConsoleOptionsFrontendPersister;
 import org.ovirt.engine.ui.uicommonweb.UICommand;
+import 
org.ovirt.engine.ui.uicommonweb.ConsoleOptionsFrontendPersister.ConsoleContext;
 import org.ovirt.engine.ui.uicommonweb.models.userportal.UserPortalItemModel;
 import org.ovirt.engine.ui.uicommonweb.models.userportal.UserPortalListModel;
 import org.ovirt.engine.ui.uicompat.EnumTranslator;
@@ -68,6 +70,7 @@
     private static final VmTableResources vmTableResources = 
GWT.create(VmTableResources.class);
     private final MainTabBasicListItemMessagesTranslator statusTranslator;
     private final ApplicationConstants constants;
+    private final ConsoleOptionsFrontendPersister consoleOptionsPersister;
 
     @Inject
     public SideTabExtendedVirtualMachineView(UserPortalListProvider 
modelProvider,
@@ -78,13 +81,15 @@
             ErrorPopupManager errorPopupManager,
             Provider<ConsolePopupPresenterWidget> consolePopup,
             MainTabBasicListItemMessagesTranslator translator,
-            ApplicationConstants constants) {
+            ApplicationConstants constants,
+            ConsoleOptionsFrontendPersister consoleOptionsPersister) {
         super(modelProvider, applicationResources);
         this.applicationResources = applicationResources;
         this.consoleManager = consoleManager;
         this.errorPopupManager = errorPopupManager;
         this.statusTranslator = translator;
         this.constants = constants;
+        this.consoleOptionsPersister = consoleOptionsPersister;
         applicationResources.sideTabExtendedVmStyle().ensureInjected();
         ViewIdHandler.idHandler.generateAndSetIds(this);
         initTable(templates, consoleUtils);
@@ -192,6 +197,7 @@
                 new ConsoleButtonCommand() {
                     @Override
                     public void execute(UserPortalItemModel model) {
+                        consoleOptionsPersister.loadFromLocalStorage(model, 
ConsoleContext.UP_EXTENDED);
                         String message =
                                 consoleManager.connectToConsole(model);
                         if (message != null) {
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/UtilsModule.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/UtilsModule.java
index f5842a9..ef40b9b 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/UtilsModule.java
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/UtilsModule.java
@@ -1,16 +1,17 @@
 package org.ovirt.engine.ui.webadmin.gin;
 
+import org.ovirt.engine.ui.common.gin.BaseUtilsModule;
 import org.ovirt.engine.ui.common.utils.ConsoleManager;
 import org.ovirt.engine.ui.common.utils.ConsoleUtils;
 
-import com.google.gwt.inject.client.AbstractGinModule;
 import com.google.inject.Singleton;
 
 
-public class UtilsModule extends AbstractGinModule {
+public class UtilsModule extends BaseUtilsModule {
 
     @Override
     protected void configure() {
+        super.configure();
         bind(ConsoleUtils.class).in(Singleton.class);
         bind(ConsoleManager.class).in(Singleton.class);
     }
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/tab/MainTabVirtualMachinePresenter.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/tab/MainTabVirtualMachinePresenter.java
index e24543e..1e02b42 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/tab/MainTabVirtualMachinePresenter.java
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/tab/MainTabVirtualMachinePresenter.java
@@ -9,6 +9,8 @@
 import org.ovirt.engine.ui.common.utils.ConsoleManager;
 import org.ovirt.engine.ui.common.utils.ConsoleUtils;
 import org.ovirt.engine.ui.common.widget.tab.ModelBoundTabData;
+import org.ovirt.engine.ui.uicommonweb.ConsoleOptionsFrontendPersister;
+import 
org.ovirt.engine.ui.uicommonweb.ConsoleOptionsFrontendPersister.ConsoleContext;
 import org.ovirt.engine.ui.uicommonweb.models.vms.VmListModel;
 import org.ovirt.engine.ui.uicompat.Event;
 import org.ovirt.engine.ui.uicompat.EventArgs;
@@ -34,6 +36,7 @@
 
     private final ConsoleManager consoleManager;
     private final ErrorPopupManager errorPopupManager;
+    private final ConsoleOptionsFrontendPersister consoleOptionsPersister;
 
     @GenEvent
     public static class VirtualMachineSelectionChange {
@@ -52,6 +55,7 @@
          getModel().getConsoleConnectEvent().addListener(new IEventListener() {
             @Override
             public void eventRaised(Event ev, Object sender, EventArgs args) {
+                consoleOptionsPersister.loadFromLocalStorage(getModel(), 
ConsoleContext.WA);
                 String errorMessage = 
MainTabVirtualMachinePresenter.this.consoleManager.connectToConsole(getModel());
                 if (errorMessage != null) {
                     
MainTabVirtualMachinePresenter.this.errorPopupManager.show(errorMessage);
@@ -72,10 +76,12 @@
     @Inject
     public MainTabVirtualMachinePresenter(EventBus eventBus, ViewDef view, 
ProxyDef proxy,
             PlaceManager placeManager, MainModelProvider<VM, VmListModel> 
modelProvider,
-            ConsoleManager consoleManager, ConsoleUtils consoleUtils, 
ErrorPopupManager errorPopupManager) {
+            ConsoleManager consoleManager, ConsoleUtils consoleUtils, 
ErrorPopupManager errorPopupManager,
+            ConsoleOptionsFrontendPersister consoleOptionsPersister) {
         super(eventBus, view, proxy, placeManager, modelProvider);
         this.consoleManager = consoleManager;
         this.errorPopupManager = errorPopupManager;
+        this.consoleOptionsPersister = consoleOptionsPersister;
     }
 
 


--
To view, visit http://gerrit.ovirt.org/13274
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I847e17c6e28db7921f0bc162f0ff70399e671a03
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Tomas Jelinek <tjeli...@redhat.com>
_______________________________________________
Engine-patches mailing list
Engine-patches@ovirt.org
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to