Frank Kobzik has uploaded a new change for review.

Change subject: frontend: Allow console settings per user and pool.
......................................................................

frontend: Allow console settings per user and pool.

This patch introduces the possibility of setting console options for
user per vm pool and storing them in the browser local storage.

These pool settings are then used as a default settings for all vms in
the pool. If user explicitly changes settings for a single vm, this
specific settings will override pool defaults.

Moreover this patch adds some cleanup code in
ConnectAutomaticallyManager.

Change-Id: I0102ad0f44e4fb826c561ac593a428b51622a377
Signed-off-by: Frantisek Kobzik <fkob...@redhat.com>
---
M 
frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/CommonApplicationMessages.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/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/ConsoleModelsCache.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/ConsoleProtocol.java
A 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/ConsolesBase.java
A 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/PoolConsolesImpl.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/VmConsolesImpl.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/userportal/AbstractUserPortalListModel.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/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIConstants.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/utils/ConnectAutomaticallyManager.java
M 
frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/widget/extended/vm/ConsoleEditButtonCell.java
16 files changed, 360 insertions(+), 235 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/07/23007/1

diff --git 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/CommonApplicationMessages.java
 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/CommonApplicationMessages.java
index ebecdbe..abde869 100644
--- 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/CommonApplicationMessages.java
+++ 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/CommonApplicationMessages.java
@@ -126,9 +126,6 @@
     @DefaultMessage("Role: {0} on User {1}")
     SafeHtml roleOnUser(String roleName, String userName);
 
-    @DefaultMessage("Connecting to VM pool is not supported")
-    String connectingToPoolIsNotSupported();
-
     @DefaultMessage("Map control-alt-del shortcut to {0}")
     String remapCtrlAltDelete(String hotkey);
 
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 219c72c..c4d38b7 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
@@ -13,6 +13,7 @@
 import org.ovirt.engine.ui.uicommonweb.models.ConsolePopupModel;
 import org.ovirt.engine.ui.uicommonweb.models.ConsoleProtocol;
 import org.ovirt.engine.ui.uicommonweb.models.VmConsoles;
+import org.ovirt.engine.ui.uicommonweb.models.VmConsolesImpl;
 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;
@@ -130,16 +131,15 @@
 
     @Override
     public void init(final ConsolePopupModel model) {
-        if (model.getVmConsoles().getVm() == null) {
-            throw new IllegalArgumentException("The console popup can not be 
used with pool, only with VM"); //$NON-NLS-1$
-        }
-
         this.model = model;
         initModel(model);
         initView(model);
         initListeners(model);
 
-        String vmName = model.getVmConsoles().getVm().getName();
+        String vmName = (model.getVmConsoles() instanceof VmConsolesImpl)
+                ? model.getVmConsoles().getVm().getName()
+                : model.getVmConsoles().getVm().getVmPoolName(); // for pool 
dialogs display pool name
+
         getView().setVmName(vmName);
         
getView().setCtrlAltDeleteRemapHotkey(consoleUtils.getRemapCtrlAltDelHotkey());
 
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 39d3d7e..cf1883a 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
@@ -1,10 +1,13 @@
 package org.ovirt.engine.ui.common.utils;
 
+import org.ovirt.engine.core.compat.Guid;
 import org.ovirt.engine.ui.common.system.ClientStorage;
 import org.ovirt.engine.ui.uicommonweb.ConsoleOptionsFrontendPersister;
 import org.ovirt.engine.ui.uicommonweb.ConsoleUtils;
 import org.ovirt.engine.ui.uicommonweb.models.ConsoleProtocol;
+import org.ovirt.engine.ui.uicommonweb.models.PoolConsolesImpl;
 import org.ovirt.engine.ui.uicommonweb.models.VmConsoles;
+import org.ovirt.engine.ui.uicommonweb.models.VmConsolesImpl;
 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.IVnc;
@@ -51,33 +54,51 @@
         this.consoleUtils = consoleUtils;
     }
 
-    @Override
-    public void storeToLocalStorage(VmConsoles vmConsoles) {
-        ConsoleProtocol selectedProtocol = vmConsoles.getSelectedProcotol();
-        ConsoleContext context = vmConsoles.getConsoleContext();
+    public void storeToLocalStorage(VmConsoles consoles) {
+        storeConsolesInternal(consoles, consoles instanceof PoolConsolesImpl);
+    }
 
-        String id = vmConsoles.getVm().getId().toString();
-        KeyMaker keyMaker = new KeyMaker(id, context);
+    private void storeConsolesInternal(VmConsoles consoles, boolean isPool) {
+        ConsoleProtocol selectedProtocol = consoles.getSelectedProcotol();
+        ConsoleContext context = consoles.getConsoleContext();
+
+        String id = isPool
+                ? consoles.getVm().getVmPoolId().toString()
+                : consoles.getVm().getId().toString();
+        KeyMaker keyMaker = new KeyMaker(id, isPool, context);
 
         clientStorage.setLocalItem(keyMaker.make(SELECTED_PROTOCOL), 
selectedProtocol.toString());
 
         if (selectedProtocol == ConsoleProtocol.SPICE) {
-            storeSpiceData(vmConsoles, keyMaker);
+            storeSpiceData(consoles, keyMaker);
         } else if (selectedProtocol == ConsoleProtocol.VNC) {
-            storeVncData(vmConsoles, keyMaker);
+            storeVncData(consoles, keyMaker);
         } else if (selectedProtocol == ConsoleProtocol.RDP) {
-            storeRdpData(vmConsoles, keyMaker);
+            storeRdpData(consoles, keyMaker);
         }
     }
 
     @Override
-    public void loadFromLocalStorage(VmConsoles vmConsoles) {
+    public void loadFromLocalStorage(VmConsoles consoles) {
+        String vmId = guidToStringNullSafe(consoles.getVm().getId());
+        String poolId = guidToStringNullSafe(consoles.getVm().getVmPoolId());
+        ConsoleContext context = consoles.getConsoleContext();
 
-        String vmId = vmConsoles.getVm().getId().toString();
-        ConsoleContext context = vmConsoles.getConsoleContext();
+        KeyMaker poolKeyMaker = new KeyMaker(poolId, true, context);
+        loadConsolesWithKeymaker(consoles, poolKeyMaker); // load pool defaults
+        if (consoles instanceof VmConsolesImpl) {
+            KeyMaker vmKeyMaker = new KeyMaker(vmId, false, context);
+            loadConsolesWithKeymaker(consoles, vmKeyMaker); // load vm
+        }
+    }
 
-        KeyMaker keyMaker = new KeyMaker(vmId, context);
+    private String guidToStringNullSafe(Guid id) {
+        return (id == null)
+                ? null
+                : id.toString();
+    }
 
+    private void loadConsolesWithKeymaker(VmConsoles consoles, KeyMaker 
keyMaker) {
         String selectedProtocolString = 
clientStorage.getLocalItem(keyMaker.make(SELECTED_PROTOCOL));
         if (selectedProtocolString == null || 
"".equals(selectedProtocolString)) {
             // if the protocol is not set, nothing is set - ignore
@@ -86,16 +107,16 @@
 
         ConsoleProtocol selectedProtocol = 
ConsoleProtocol.valueOf(selectedProtocolString);
 
-        if (!vmConsoles.canSelectProtocol(selectedProtocol)) {
+        if (!consoles.canSelectProtocol(selectedProtocol)) {
             return;
         }
 
         if (selectedProtocol == ConsoleProtocol.SPICE) {
-            loadSpiceData(vmConsoles, keyMaker);
+            loadSpiceData(consoles, keyMaker);
         } else if (selectedProtocol == ConsoleProtocol.VNC) {
-            loadVncData(vmConsoles, keyMaker);
+            loadVncData(consoles, keyMaker);
         } else if (selectedProtocol == ConsoleProtocol.RDP) {
-            loadRdpData(vmConsoles, keyMaker);
+            loadRdpData(consoles, keyMaker);
         }
     }
 
@@ -202,18 +223,20 @@
     }
 
     class KeyMaker {
+        private final String vmOrPoolId;
 
-        private final String vmId;
+        private final boolean isPool;
 
         private final ConsoleContext context;
 
-        public KeyMaker(String vmId, ConsoleContext context) {
-            this.vmId = vmId;
+        public KeyMaker(String vmOrPoolId, boolean isPool, ConsoleContext 
context) {
+            this.vmOrPoolId = vmOrPoolId;
+            this.isPool = isPool;
             this.context = context;
         }
 
         public String make(String key) {
-            return vmId + context + key;
+            return vmOrPoolId + isPool + context + key;
         }
     }
 }
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/ConsoleModelsCache.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/ConsoleModelsCache.java
index 22b8fa3b4..52169ee 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/ConsoleModelsCache.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/ConsoleModelsCache.java
@@ -12,7 +12,7 @@
  * Class that holds (caches) consoles for set of VM (typically contained in 
some ListModel).
  *
  * It provides a way to get consoles for given vm.
- * The cache must be periodically updated (when the set of VM is updated, the 
updateCache
+ * The cache must be periodically updated (when the set of VM is updated, the 
updateVmCache
  * method must be called to ensure the underlying models have fresh and 
correct instance
  * of their VM).
  *
@@ -20,29 +20,36 @@
 public class ConsoleModelsCache {
 
     private final Map<Guid, VmConsoles> vmConsoles;
+    private final Map<Guid, VmConsoles> poolConsoles;
     private final Model parentModel;
     private final ConsoleContext consoleContext;
 
     public ConsoleModelsCache(ConsoleContext consoleContext, Model 
parentModel) {
-        vmConsoles = new HashMap<Guid, VmConsoles>();
         this.consoleContext = consoleContext;
         this.parentModel = parentModel;
+        vmConsoles = new HashMap<Guid, VmConsoles>();
+        poolConsoles = new HashMap<Guid, VmConsoles>();
     }
 
     /**
      * Gets consoles for given VM
-     * @param vm
-     * @return vm's consoles
+     * @param vmId
+     * @return consoles of vm with given id
      */
-    public VmConsoles getVmConsolesForVm(VM vm) {
-        return vmConsoles.get(vm.getId());
+    public VmConsoles getVmConsolesForVmId(Guid vmId) {
+        return vmConsoles.get(vmId);
+    }
+
+    public VmConsoles getVmConsolesForPoolId(Guid poolId) {
+        return poolConsoles.get(poolId);
     }
 
     /**
      * This must be called every update cycle.
      * @param newItems
      */
-    public void updateCache(Iterable<VM> newItems) {
+    public void updateVmCache(Iterable<VM> newItems) {
+        updateCache(true, newItems);
         Set<Guid> vmIds = new HashSet<Guid>();
 
         if (newItems != null) {
@@ -58,4 +65,37 @@
 
         vmConsoles.keySet().retainAll(vmIds);
     }
+
+    public void updatePoolCache(Iterable<VM> poolRepresentants) {
+        updateCache(false, poolRepresentants);
+    }
+
+    /**
+     * Updates cache for vms or pool representants (depending on isVmCache 
param)
+     * @param isVmCache - if true, update vm cache based on given entities
+     *                  - if false, update pool representants cache.
+     * @param entities
+     */
+    private void updateCache(boolean isVmCache, Iterable<VM> entities) {
+        Map<Guid, VmConsoles> cacheToUpdate = isVmCache ? vmConsoles : 
poolConsoles;
+        Set<Guid> entityIdsToKeep = new HashSet<Guid>();
+
+        if (entities != null) {
+            for (VM vm : entities) {
+                Guid entityKey = isVmCache ? vm.getId() : vm.getVmPoolId();
+
+                if (cacheToUpdate.containsKey(entityKey)) {
+                    cacheToUpdate.get(entityKey).setVm(vm); // only update vm
+                } else {
+                    VmConsoles consoles = isVmCache
+                            ? new VmConsolesImpl(vm, parentModel, 
consoleContext)
+                            : new PoolConsolesImpl(vm, parentModel, 
consoleContext);
+                    cacheToUpdate.put(entityKey, consoles);
+                }
+                entityIdsToKeep.add(entityKey);
+            }
+        }
+
+        cacheToUpdate.keySet().retainAll(entityIdsToKeep);
+    }
 }
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/ConsoleProtocol.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/ConsoleProtocol.java
index b4f89cc..41ee971 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/ConsoleProtocol.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/ConsoleProtocol.java
@@ -30,4 +30,8 @@
 
         return null;
     }
+
+    public Class getBackingClass() {
+        return model;
+    }
 }
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/ConsolesBase.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/ConsolesBase.java
new file mode 100644
index 0000000..e450839
--- /dev/null
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/ConsolesBase.java
@@ -0,0 +1,134 @@
+package org.ovirt.engine.ui.uicommonweb.models;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import org.ovirt.engine.core.common.businessentities.DisplayType;
+import org.ovirt.engine.core.common.businessentities.VM;
+import org.ovirt.engine.ui.uicommonweb.ConsoleOptionsFrontendPersister;
+import org.ovirt.engine.ui.uicommonweb.models.vms.ConsoleModel;
+import 
org.ovirt.engine.ui.uicommonweb.models.vms.ConsoleModelErrorEventListener;
+import org.ovirt.engine.ui.uicommonweb.models.vms.RdpConsoleModel;
+import org.ovirt.engine.ui.uicommonweb.models.vms.SpiceConsoleModel;
+import org.ovirt.engine.ui.uicommonweb.models.vms.VncConsoleModel;
+import org.ovirt.engine.ui.uicompat.ConstantsManager;
+import org.ovirt.engine.ui.uicompat.UIConstants;
+import org.ovirt.engine.ui.uicompat.UIMessages;
+
+public class ConsolesBase {
+
+    private ConsoleProtocol selectedProtocol;
+    protected final Map<ConsoleProtocol, ConsoleModel> consoleModels;
+    protected static final Map<Class, ConsoleProtocol> modelTypeMapping;
+
+    private final ConsoleOptionsFrontendPersister.ConsoleContext myContext;
+
+    private final Model parentModel;
+    private VM vm;
+
+    protected static final UIMessages messages = 
ConstantsManager.getInstance().getMessages();
+    protected static final UIConstants constants = 
ConstantsManager.getInstance().getConstants();
+
+    static {
+        modelTypeMapping = new HashMap<Class, ConsoleProtocol>();
+        modelTypeMapping.put(SpiceConsoleModel.class, ConsoleProtocol.SPICE);
+        modelTypeMapping.put(VncConsoleModel.class, ConsoleProtocol.VNC);
+        modelTypeMapping.put(RdpConsoleModel.class, ConsoleProtocol.RDP);
+    }
+
+    public ConsolesBase(VM vm, Model parentModel, 
ConsoleOptionsFrontendPersister.ConsoleContext consoleContext) {
+        this.vm = vm;
+        this.parentModel = parentModel;
+        this.myContext = consoleContext;
+        this.consoleModels = new HashMap<ConsoleProtocol, ConsoleModel>();
+
+        fillModels();
+        setDefaultSelectedProtocol();
+    }
+
+
+    private void fillModels() {
+        SpiceConsoleModel spiceConsoleModel = new SpiceConsoleModel(vm, 
parentModel);
+        spiceConsoleModel.getErrorEvent().addListener(new 
ConsoleModelErrorEventListener(parentModel));
+        spiceConsoleModel.setForceVmStatusUp(myContext == 
ConsoleOptionsFrontendPersister.ConsoleContext.UP_BASIC);
+        consoleModels.put(ConsoleProtocol.SPICE, spiceConsoleModel);
+
+        VncConsoleModel vncConsoleModel = new VncConsoleModel(vm, parentModel);
+        vncConsoleModel.setForceVmStatusUp(myContext == 
ConsoleOptionsFrontendPersister.ConsoleContext.UP_BASIC);
+        consoleModels.put(ConsoleProtocol.VNC, vncConsoleModel);
+
+        RdpConsoleModel rdpConsoleModel = new RdpConsoleModel(vm, parentModel);
+        rdpConsoleModel.getErrorEvent().addListener(new 
ConsoleModelErrorEventListener(parentModel));
+        rdpConsoleModel.setForceVmStatusUp(myContext == 
ConsoleOptionsFrontendPersister.ConsoleContext.UP_BASIC);
+        consoleModels.put(ConsoleProtocol.RDP, rdpConsoleModel);
+    }
+
+
+    protected void setDefaultSelectedProtocol() {
+        List<ConsoleProtocol> allProtocols = new 
ArrayList<ConsoleProtocol>(Arrays.asList(ConsoleProtocol.values()));
+
+        if (selectedProtocol != null) { // if it's selected, it's prefered -> 
set it to the 1st position
+            allProtocols.remove(selectedProtocol);
+            allProtocols.add(0, selectedProtocol);
+        }
+
+        for (ConsoleProtocol protocol : allProtocols) {
+            if (canSelectProtocol(protocol)) {
+                selectProtocol(protocol);
+                break;
+            }
+        }
+    }
+
+    public boolean canSelectProtocol(ConsoleProtocol protocol) {
+        return consoleModels.get(protocol).canBeSelected();
+    }
+
+        public void selectProtocol(ConsoleProtocol protocol) throws 
IllegalArgumentException {
+        if (!canSelectProtocol(protocol)) {
+            throw new IllegalArgumentException("Cannot select " 
+protocol.toString() + " protocol for vm " + getVm().getName()); // $NON-NLS-1$ 
$NON-NLS-2$
+        }
+        this.selectedProtocol = protocol;
+    }
+
+    public ConsoleProtocol getSelectedProcotol() {
+        return selectedProtocol;
+    }
+
+    public <T extends ConsoleModel> T getConsoleModel(Class <T> type) {
+        return (T) consoleModels.get(modelTypeMapping.get(type));
+    }
+
+    public boolean canConnectToConsole() {
+        return consoleModels.get(selectedProtocol).canConnect();
+    }
+
+    public ConsoleOptionsFrontendPersister.ConsoleContext getConsoleContext() {
+        return myContext;
+    }
+
+    public VM getVm() {
+        return vm;
+    }
+
+    public void setVm(VM newVm) {
+        DisplayType oldDisplayType = getVm().getDisplayType();
+        DisplayType oldDefaultDisplayType = getVm().getDefaultDisplayType();
+        int oldOs = getVm().getOs();
+
+        this.vm = newVm;
+
+        for (ConsoleModel cModel : consoleModels.values()) { // update my 
console models too
+            cModel.setEntity(newVm);
+        }
+
+        // if display types changed, we'd like to update the default selected 
protocol as the old one may be invalid
+        if (newVm.getDisplayType() != oldDisplayType
+                || newVm.getDefaultDisplayType() != oldDefaultDisplayType
+                || newVm.getOs() != oldOs) {
+            setDefaultSelectedProtocol();
+        }
+    }
+}
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/PoolConsolesImpl.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/PoolConsolesImpl.java
new file mode 100644
index 0000000..e883561
--- /dev/null
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/PoolConsolesImpl.java
@@ -0,0 +1,21 @@
+package org.ovirt.engine.ui.uicommonweb.models;
+
+import org.ovirt.engine.core.common.businessentities.VM;
+import org.ovirt.engine.ui.uicommonweb.ConsoleOptionsFrontendPersister;
+
+public class PoolConsolesImpl extends ConsolesBase implements VmConsoles {
+
+    public PoolConsolesImpl(VM vm, Model parentModel, 
ConsoleOptionsFrontendPersister.ConsoleContext consoleContext) {
+        super(vm, parentModel, consoleContext);
+    }
+
+    @Override
+    public void connect() throws ConsoleConnectException {
+        throw new 
ConsoleConnectException(constants.connectToPoolNotSupported());
+    }
+
+    @Override
+    public String cannotConnectReason() {
+        return constants.connectToPoolNotSupported();
+    }
+}
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/VmConsolesImpl.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/VmConsolesImpl.java
index b03a9ff..80e543e 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/VmConsolesImpl.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/VmConsolesImpl.java
@@ -1,115 +1,20 @@
 package org.ovirt.engine.ui.uicommonweb.models;
 
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import org.ovirt.engine.core.common.businessentities.DisplayType;
 import org.ovirt.engine.core.common.businessentities.VM;
 import org.ovirt.engine.ui.uicommonweb.ConsoleOptionsFrontendPersister;
-import org.ovirt.engine.ui.uicommonweb.models.vms.ConsoleModel;
-import 
org.ovirt.engine.ui.uicommonweb.models.vms.ConsoleModelErrorEventListener;
-import org.ovirt.engine.ui.uicommonweb.models.vms.RdpConsoleModel;
-import org.ovirt.engine.ui.uicommonweb.models.vms.SpiceConsoleModel;
-import org.ovirt.engine.ui.uicommonweb.models.vms.VncConsoleModel;
-import org.ovirt.engine.ui.uicompat.ConstantsManager;
-import org.ovirt.engine.ui.uicompat.UIMessages;
 
-public class VmConsolesImpl implements VmConsoles {
-
-    private ConsoleProtocol selectedProtocol;
-    private final Map<ConsoleProtocol, ConsoleModel> consoleModels;
-    private static final Map<Class, ConsoleProtocol> modelTypeMapping;
-
-    private final ConsoleOptionsFrontendPersister.ConsoleContext myContext;
-
-    private final Model parentModel;
-    private VM vm;
-
-    private static final UIMessages messages = 
ConstantsManager.getInstance().getMessages();
+public class VmConsolesImpl extends ConsolesBase implements VmConsoles {
 
     public VmConsolesImpl(VM vm, Model parentModel, 
ConsoleOptionsFrontendPersister.ConsoleContext consoleContext) {
-        this.vm = vm;
-        this.parentModel = parentModel;
-        this.myContext = consoleContext;
-        this.consoleModels = new HashMap<ConsoleProtocol, ConsoleModel>();
-
-        fillModels();
-        setDefaultSelectedProtocol();
+        super(vm, parentModel, consoleContext);
     }
 
-    static {
-        modelTypeMapping = new HashMap<Class, ConsoleProtocol>();
-        modelTypeMapping.put(SpiceConsoleModel.class, ConsoleProtocol.SPICE);
-        modelTypeMapping.put(VncConsoleModel.class, ConsoleProtocol.VNC);
-        modelTypeMapping.put(RdpConsoleModel.class, ConsoleProtocol.RDP);
-    }
-
-    private void fillModels() {
-        SpiceConsoleModel spiceConsoleModel = new SpiceConsoleModel(vm, 
parentModel);
-        spiceConsoleModel.getErrorEvent().addListener(new 
ConsoleModelErrorEventListener(parentModel));
-        spiceConsoleModel.setForceVmStatusUp(getConsoleContext() == 
ConsoleOptionsFrontendPersister.ConsoleContext.UP_BASIC);
-        consoleModels.put(ConsoleProtocol.SPICE, spiceConsoleModel);
-
-        VncConsoleModel vncConsoleModel = new VncConsoleModel(vm, parentModel);
-        vncConsoleModel.setForceVmStatusUp(getConsoleContext() == 
ConsoleOptionsFrontendPersister.ConsoleContext.UP_BASIC);
-        consoleModels.put(ConsoleProtocol.VNC, vncConsoleModel);
-
-        RdpConsoleModel rdpConsoleModel = new RdpConsoleModel(vm, parentModel);
-        rdpConsoleModel.getErrorEvent().addListener(new 
ConsoleModelErrorEventListener(parentModel));
-        rdpConsoleModel.setForceVmStatusUp(getConsoleContext() == 
ConsoleOptionsFrontendPersister.ConsoleContext.UP_BASIC);
-        consoleModels.put(ConsoleProtocol.RDP, rdpConsoleModel);
-    }
-
-    @Override
-    public boolean canSelectProtocol(ConsoleProtocol protocol) {
-        return consoleModels.get(protocol).canBeSelected();
-    }
-
-    @Override
-    public void selectProtocol(ConsoleProtocol protocol) throws 
IllegalArgumentException {
-        if (!canSelectProtocol(protocol)) {
-            throw new IllegalArgumentException("Cannot select " 
+protocol.toString() + " protocol for vm " + getVm().getName()); // $NON-NLS-1$ 
$NON-NLS-2$
-        }
-        this.selectedProtocol = protocol;
-    }
-
-    @Override
-    public ConsoleProtocol getSelectedProcotol() {
-        return selectedProtocol;
-    }
-
-    public <T extends ConsoleModel> T getConsoleModel(Class <T> type) {
-        return (T) consoleModels.get(modelTypeMapping.get(type));
-    }
-
-    public boolean canConnectToConsole() {
-        return consoleModels.get(selectedProtocol).canConnect();
-    }
-
-    @Override
     public void connect() throws ConsoleConnectException {
         if (!canConnectToConsole()) {
             throw new ConsoleConnectException(connectErrorMessage());
         }
-        consoleModels.get(selectedProtocol).getConnectCommand().execute();
-    }
 
-    private void setDefaultSelectedProtocol() {
-        List<ConsoleProtocol> allProtocols = new 
ArrayList<ConsoleProtocol>(Arrays.asList(ConsoleProtocol.values()));
-
-        if (selectedProtocol != null) { // if it's selected, it's prefered -> 
set it to the 1st position
-            allProtocols.remove(selectedProtocol);
-            allProtocols.add(0, selectedProtocol);
-        }
-
-        for (ConsoleProtocol protocol : allProtocols) {
-            if (canSelectProtocol(protocol)) {
-                selectProtocol(protocol);
-                break;
-            }
-        }
+        
getConsoleModel(getSelectedProcotol().getBackingClass()).getConnectCommand().execute();
     }
 
     @Override
@@ -126,31 +31,5 @@
                 : messages.errorConnectingToConsole(getVm().getName(), 
getSelectedProcotol().toString());
     }
 
-    @Override
-    public ConsoleOptionsFrontendPersister.ConsoleContext getConsoleContext() {
-        return myContext;
-    }
 
-    @Override
-    public VM getVm() {
-        return vm;
-    }
-
-    public void setVm(VM newVm) {
-        DisplayType oldDisplayType = getVm().getDisplayType();
-        DisplayType oldDefaultDisplayType = getVm().getDefaultDisplayType();
-        int oldOs = getVm().getOs();
-
-        this.vm = newVm;
-        for (ConsoleModel cModel : consoleModels.values()) { // update my 
console models too
-            cModel.setEntity(newVm);
-        }
-
-        // if display types changed, we'd like to update the default selected 
protocol as the old one may be invalid
-        if (newVm.getDisplayType() != oldDisplayType
-                || newVm.getDefaultDisplayType() != oldDefaultDisplayType
-                || newVm.getOs() != oldOs) {
-            setDefaultSelectedProtocol();
-        }
-    }
 }
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/userportal/AbstractUserPortalListModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/userportal/AbstractUserPortalListModel.java
index db0f8b1..b96e3b0 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/userportal/AbstractUserPortalListModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/userportal/AbstractUserPortalListModel.java
@@ -53,18 +53,8 @@
         return autoConnectableConsoles;
     }
 
-    public boolean getCanConnectAutomatically()
-    {
-        return canConnectAutomatically;
-    }
-
-    public void setCanConnectAutomatically(boolean value)
-    {
-        if (canConnectAutomatically != value)
-        {
-            canConnectAutomatically = value;
-            onPropertyChanged(new 
PropertyChangedEventArgs("CanConnectAutomatically")); //$NON-NLS-1$
-        }
+    public boolean getCanConnectAutomatically() {
+        return getAutoConnectableConsoles().size() == 1;
     }
 
     public UICommand getEditConsoleCommand() {
@@ -76,13 +66,6 @@
     }
 
     public abstract void onVmAndPoolLoad();
-
-    protected HashMap<Guid, VmPool> poolMap;
-
-    public VmPool resolveVmPoolById(Guid id)
-    {
-        return poolMap.get(id);
-    }
 
     @Override
     public void executeCommand(UICommand command) {
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 3acd1e8..4b7941d 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
@@ -3,6 +3,7 @@
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashMap;
+import java.util.LinkedList;
 import java.util.List;
 
 import org.ovirt.engine.core.common.businessentities.VM;
@@ -28,6 +29,8 @@
 import org.ovirt.engine.ui.uicompat.Event;
 import org.ovirt.engine.ui.uicompat.EventArgs;
 import org.ovirt.engine.ui.uicompat.EventDefinition;
+import org.ovirt.engine.ui.uicompat.FrontendMultipleQueryAsyncResult;
+import org.ovirt.engine.ui.uicompat.IFrontendMultipleQueryAsyncCallback;
 import org.ovirt.engine.ui.uicompat.ObservableCollection;
 import org.ovirt.engine.ui.uicompat.PropertyChangedEventArgs;
 
@@ -279,18 +282,12 @@
 
     @Override
     public void onVmAndPoolLoad() {
-        if (getvms() != null && getpools() != null)
-        {
+        if (getvms() != null && getpools() != null) {
             // Complete search.
-
             // Remove pools that has provided VMs.
             ArrayList<VmPool> filteredPools = new ArrayList<VmPool>();
-            poolMap = new HashMap<Guid, VmPool>();
 
             for (VmPool pool : getpools()) {
-                // Add pool to map.
-                poolMap.put(pool.getVmPoolId(), pool);
-
                 int attachedVmsCount = 0;
                 for (VM vm : getvms()) {
                     if (vm.getVmPoolId() != null && 
vm.getVmPoolId().equals(pool.getVmPoolId())) {
@@ -304,30 +301,51 @@
             }
 
             // Merge VMs and Pools, and create item models.
-            List all = Linq.concat(getvms(), filteredPools);
-            consoleModelsCache.updateCache(filterVms(all));
-            Collections.sort(all, new NameableComparator());
+            final List all = Linq.concat(getvms(), filteredPools);
 
-            ArrayList<Model> items = new ArrayList<Model>();
-            for (Object item : all) {
-                VmConsoles consoles = null;
-                if (item instanceof VM) {
-                    consoles = consoleModelsCache.getVmConsolesForVm((VM) 
item);
-                }
+            List<VdcQueryType> poolQueryList = new ArrayList<VdcQueryType>();
+            List<VdcQueryParametersBase> poolParamList = new 
ArrayList<VdcQueryParametersBase>();
 
-                UserPortalItemModel model = new UserPortalItemModel(item, 
consoles);
-                model.setEntity(item);
-                items.add(model);
+            for (VmPool p : filteredPools) {
+                poolQueryList.add(VdcQueryType.GetVmDataByPoolId);
+                poolParamList.add(new IdQueryParameters(p.getVmPoolId()));
             }
 
-            setItems(items);
+            Frontend.getInstance().runMultipleQueries(
+                    poolQueryList, poolParamList,
+                    new IFrontendMultipleQueryAsyncCallback() {
+                        @Override
+                        public void executed(FrontendMultipleQueryAsyncResult 
result) {
+                            List<VM> vmsOfPools = new LinkedList<VM>();
 
-            setCanConnectAutomatically(getAutoConnectableConsoles().size() == 
1);
+                            List<VdcQueryReturnValue> poolRepresentants = 
result.getReturnValues();
+                            for (VdcQueryReturnValue poolRepresentant : 
poolRepresentants) {
+                                vmsOfPools.add((VM) 
poolRepresentant.getReturnValue());
+                            }
 
-            setvms(null);
-            setpools(null);
+                            consoleModelsCache.updateVmCache(getvms());
+                            consoleModelsCache.updatePoolCache(vmsOfPools);
 
-            getSearchCompletedEvent().raise(this, EventArgs.EMPTY);
+                            Collections.sort(all, new NameableComparator());
+
+                            ArrayList<Model> items = new ArrayList<Model>();
+                            for (Object item : all) {
+                                VmConsoles consoles = (item instanceof VM)
+                                        ? 
consoleModelsCache.getVmConsolesForVmId(((VM) item).getId())
+                                        : 
consoleModelsCache.getVmConsolesForPoolId(((VmPool) item).getVmPoolId());
+
+                                UserPortalItemModel model = new 
UserPortalItemModel(item, consoles);
+                                model.setEntity(item);
+                                items.add(model);
+                            }
+
+                            setItems(items);
+
+                            setvms(null);
+                            setpools(null);
+
+                            getSearchCompletedEvent().raise(this, 
EventArgs.EMPTY);
+                        }});
         }
     }
 
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 61b8f79..a1bc60d 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
@@ -4,6 +4,7 @@
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.HashMap;
+import java.util.LinkedList;
 import java.util.List;
 import org.ovirt.engine.core.common.VdcActionUtils;
 import org.ovirt.engine.core.common.action.AddVmFromScratchParameters;
@@ -27,6 +28,7 @@
 import org.ovirt.engine.core.common.businessentities.VmTemplate;
 import org.ovirt.engine.core.common.businessentities.VmType;
 import 
org.ovirt.engine.core.common.businessentities.comparators.NameableComparator;
+import org.ovirt.engine.core.common.queries.IdQueryParameters;
 import org.ovirt.engine.core.common.queries.VdcQueryParametersBase;
 import org.ovirt.engine.core.common.queries.VdcQueryReturnValue;
 import org.ovirt.engine.core.common.queries.VdcQueryType;
@@ -75,7 +77,9 @@
 import org.ovirt.engine.ui.uicompat.EventArgs;
 import org.ovirt.engine.ui.uicompat.EventDefinition;
 import org.ovirt.engine.ui.uicompat.FrontendActionAsyncResult;
+import org.ovirt.engine.ui.uicompat.FrontendMultipleQueryAsyncResult;
 import org.ovirt.engine.ui.uicompat.IFrontendActionAsyncCallback;
+import org.ovirt.engine.ui.uicompat.IFrontendMultipleQueryAsyncCallback;
 import org.ovirt.engine.ui.uicompat.ObservableCollection;
 import org.ovirt.engine.ui.uicompat.PropertyChangedEventArgs;
 
@@ -1347,6 +1351,7 @@
         }
     }
 
+    //todo this code duplication should be moved to base class, as well as 
other parts of this class
     @Override
     public void onVmAndPoolLoad() {
         if (getvms() != null && getpools() != null) {
@@ -1354,11 +1359,8 @@
 
             // Remove pools that has provided VMs.
             ArrayList<VmPool> filteredPools = new ArrayList<VmPool>();
-            poolMap = new HashMap<Guid, VmPool>();
-
             for (VmPool pool : getpools()) {
                 // Add pool to map.
-                poolMap.put(pool.getVmPoolId(), pool);
 
                 int attachedVmsCount = 0;
                 for (VM vm : getvms()) {
@@ -1373,30 +1375,51 @@
             }
 
             // Merge VMs and Pools, and create item models.
-            List all = Linq.concat(getvms(), filteredPools);
-            Collections.sort(all, new NameableComparator());
-            consoleModelsCache.updateCache(filterVms(all));
+            final List all = Linq.concat(getvms(), filteredPools);
 
-            ArrayList<Model> items = new ArrayList<Model>();
-            for (Object item : all)
-            {
-                VmConsoles consoles = null;
-                if (item instanceof VM) {
-                    consoles = consoleModelsCache.getVmConsolesForVm((VM) 
item);
-                }
-                UserPortalItemModel model = new UserPortalItemModel(item, 
consoles);
-                model.setEntity(item);
-                items.add(model);
+            List<VdcQueryType> poolQueryList = new ArrayList<VdcQueryType>();
+            List<VdcQueryParametersBase> poolParamList = new 
ArrayList<VdcQueryParametersBase>();
+
+            for (VmPool p : filteredPools) {
+                poolQueryList.add(VdcQueryType.GetVmDataByPoolId);
+                poolParamList.add(new IdQueryParameters(p.getVmPoolId()));
             }
 
-            setItems(items);
+            Frontend.getInstance().runMultipleQueries(
+                    poolQueryList, poolParamList,
+                    new IFrontendMultipleQueryAsyncCallback() {
+                        @Override
+                        public void executed(FrontendMultipleQueryAsyncResult 
result) {
+                            List<VM> vmsOfPools = new LinkedList<VM>();
 
-            setCanConnectAutomatically(getAutoConnectableConsoles().size() == 
1);
+                            List<VdcQueryReturnValue> poolRepresentants = 
result.getReturnValues();
+                            for (VdcQueryReturnValue poolRepresentant : 
poolRepresentants) {
+                                vmsOfPools.add((VM) 
poolRepresentant.getReturnValue());
+                            }
 
-            setvms(null);
-            setpools(null);
+                            consoleModelsCache.updateVmCache(getvms());
+                            consoleModelsCache.updatePoolCache(vmsOfPools);
 
-            getSearchCompletedEvent().raise(this, EventArgs.EMPTY);
+                            Collections.sort(all, new NameableComparator());
+
+                            ArrayList<Model> items = new ArrayList<Model>();
+                            for (Object item : all) {
+                                VmConsoles consoles = (item instanceof VM)
+                                        ? 
consoleModelsCache.getVmConsolesForVmId(((VM) item).getId())
+                                        : 
consoleModelsCache.getVmConsolesForPoolId(((VmPool) item).getVmPoolId());
+
+                                UserPortalItemModel model = new 
UserPortalItemModel(item, consoles);
+                                model.setEntity(item);
+                                items.add(model);
+                            }
+
+                            setItems(items);
+
+                            setvms(null);
+                            setpools(null);
+
+                            getSearchCompletedEvent().raise(this, 
EventArgs.EMPTY);
+                        }});
         }
     }
 
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 c07d706..3b53457 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
@@ -634,7 +634,7 @@
 
     @Override
     public void setItems(Iterable value) {
-        consoleModelsCache.updateCache(value);
+        consoleModelsCache.updateVmCache(value);
 
         super.setItems(value);
     }
@@ -676,7 +676,7 @@
             return;
         }
 
-        final VmConsoles activeVmConsoles = 
consoleModelsCache.getVmConsolesForVm(((VM) getSelectedItem()));
+        final VmConsoles activeVmConsoles = 
consoleModelsCache.getVmConsolesForVmId((((VM) getSelectedItem()).getId()));
 
         final ConsolePopupModel model = new ConsolePopupModel();
         model.setVmConsoles(activeVmConsoles);
@@ -2283,7 +2283,7 @@
 
         // return true, if at least one console is available
         for (VM vm : list) {
-            if 
(consoleModelsCache.getVmConsolesForVm(vm).canConnectToConsole()) {
+            if 
(consoleModelsCache.getVmConsolesForVmId(vm.getId()).canConnectToConsole()) {
                 return true;
             }
         }
@@ -2465,7 +2465,7 @@
 
         for (VM vm : list) {
             try {
-                consoleModelsCache.getVmConsolesForVm(vm).connect();
+                consoleModelsCache.getVmConsolesForVmId(vm.getId()).connect();
             } catch (VmConsoles.ConsoleConnectException e) {
                 final String errorMessage = e.getLocalizedErrorMessage();
                 if (errorMessage != null) {
diff --git 
a/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIConstants.java
 
b/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIConstants.java
index c94624f..152a12d 100644
--- 
a/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIConstants.java
+++ 
b/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIConstants.java
@@ -2105,5 +2105,8 @@
 
     @DefaultStringValue("Not available when Templates are not configured.")
     String notAvailableWithNoTemplates();
+
+    @DefaultStringValue("Connecting to pool not supported.")
+    String connectToPoolNotSupported();
 }
 
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 b82f3e9..c3b5fd0 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
@@ -171,10 +171,6 @@
 
     private void setupConsole(final UserPortalBasicListProvider modelProvider) 
{
         UserPortalItemModel item = modelProvider.getModel().getSelectedItem();
-        if (item.isPool()) {
-            
getView().setConsoleWarningMessage(messages.connectingToPoolIsNotSupported());
-            return;
-        }
 
         getView().setEditConsoleEnabled(isEditConsoleEnabled(item));
 
@@ -197,7 +193,12 @@
     }
 
     private boolean isEditConsoleEnabled(UserPortalItemModel item) {
-        return item != null && item.getVM() != null && 
item.getVM().isRunningOrPaused();
+        if (item == null) {
+            return false;
+        }
+
+        return item.isPool() ||
+                (item.getVM() != null && item.getVM().isRunningOrPaused());
     }
 
 }
diff --git 
a/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/utils/ConnectAutomaticallyManager.java
 
b/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/utils/ConnectAutomaticallyManager.java
index 1cabe5d..203c815 100644
--- 
a/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/utils/ConnectAutomaticallyManager.java
+++ 
b/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/utils/ConnectAutomaticallyManager.java
@@ -56,7 +56,6 @@
     }
 
     public void registerModel(final AbstractUserPortalListModel model) {
-
         if (alreadyOpened || !connectAutomatically.readConnectAutomatically()) 
{
             return;
         }
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
index d685d66..355994f 100644
--- 
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
@@ -10,6 +10,6 @@
 
     @Override
     protected boolean shouldRenderCell(UserPortalItemModel model) {
-        return model.getVM() != null && model.getVM().isRunningOrPaused();
+        return model.isPool() || model.getVM().isRunningOrPaused();
     }
 }


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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I0102ad0f44e4fb826c561ac593a428b51622a377
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

Reply via email to