Libor Spevak has uploaded a new change for review.

Change subject: webadmin: Multiple consoles in WebAdmin
......................................................................

webadmin: Multiple consoles in WebAdmin

Multiple consoles can be opened for selected VMs in WebAdmin
using one command.

Change-Id: I894eaeafab22614af3f219169ef73d7fbeed3a11
Signed-off-by: Libor Spevak <[email protected]>
---
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmListModel.java
A 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/WebAdminItemModel.java
M 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/host/SubTabHostVmView.java
3 files changed, 190 insertions(+), 101 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/47/13847/1

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 c1df730..208b064 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
@@ -100,7 +100,7 @@
 import org.ovirt.engine.ui.uicompat.ObservableCollection;
 import org.ovirt.engine.ui.uicompat.PropertyChangedEventArgs;
 
-public class VmListModel extends VmBaseListModel<VM> implements 
ISupportSystemTreeContext, HasConsoleModel, UserSelectedDisplayProtocolManager
+public class VmListModel extends VmBaseListModel<VM> implements 
ISupportSystemTreeContext, UserSelectedDisplayProtocolManager
 {
 
     private UICommand privateNewServerCommand;
@@ -366,24 +366,6 @@
         }
     }
 
-    // get { return SelectedItems == null ? new object[0] : 
SelectedItems.Cast<VM>().Select(a =>
-    // a.vm_guid).Cast<object>().ToArray(); }
-    protected Object[] getSelectedKeys()
-    {
-        if (getSelectedItems() == null)
-        {
-            return new Object[0];
-        }
-
-        Object[] keys = new Object[getSelectedItems().size()];
-        for (int i = 0; i < getSelectedItems().size(); i++)
-        {
-            keys[i] = ((VM) getSelectedItems().get(i)).getId();
-        }
-
-        return keys;
-    }
-
     private Object privateGuideContext;
 
     public Object getGuideContext()
@@ -424,30 +406,10 @@
         privateCustomPropertiesKeysList = value;
     }
 
-    private ConsoleModel defaultConsoleModel;
-
-    @Override
-    public ConsoleModel getDefaultConsoleModel() {
-        return defaultConsoleModel;
-    }
-
-    public void setDefaultConsoleModel(ConsoleModel defaultConsoleModel) {
-        this.defaultConsoleModel = defaultConsoleModel;
-    }
-
-    private ConsoleModel additionalConsoleModel;
     private ConsoleUtils consoleUtils;
     private ConsoleManager consoleManager;
     private ErrorPopupManager errorPopupManager;
-
-    public void setAdditionalConsoleModel(ConsoleModel additionalConsoleModel) 
{
-        this.additionalConsoleModel = additionalConsoleModel;
-    }
-
-    @Override
-    public ConsoleModel getAdditionalConsoleModel() {
-        return additionalConsoleModel;
-    }
+    private List<HasConsoleModel> selectedHasConsoleModels;
 
     public VmListModel()
     {
@@ -728,25 +690,35 @@
         setItems(getAsyncResult().getData());
     }
 
-    private void updateConsoleModels()
-    {
-        List tempVar = getSelectedItems();
-        List selectedItems = (tempVar != null) ? tempVar : new ArrayList();
-        Object tempVar2 = getSelectedItem();
-        VM vm = (VM) ((tempVar2 instanceof VM) ? tempVar2 : null);
-
-        if (vm == null) {
-            setDefaultConsoleModel(null);
-            setAdditionalConsoleModel(null);
+    private void updateConsoleModels() {
+        final List selectedItems = getSelectedItems();
+        if (selectedItems == null || selectedItems.isEmpty()) {
+            setSelectedHasConsoleModels(null);
             return;
         }
 
-        if (selectedItems.size() == 1) {
+        final List<HasConsoleModel> list = new ArrayList<HasConsoleModel>();
+
+        // filter list of VMs and convert them to list of HasConsoleModel items
+        // multiple consoles can be opened at a time
+        for (Object o : selectedItems) {
+            if (!(o instanceof VM)) {
+                continue;
+            }
+
+            final VM vm = (VM) o;
             consoleModelsCache.updateConsoleModelsForVm(vm);
 
-            
setDefaultConsoleModel(consoleModelsCache.determineConsoleModelForVm(vm));
-            
setAdditionalConsoleModel(consoleModelsCache.determineAdditionalConsoleModelForVm(vm));
+            final WebAdminItemModel webAdminItemModel = new 
WebAdminItemModel(this, consoleModelsCache);
+            webAdminItemModel.setEntity(vm);
+            
webAdminItemModel.setDefaultConsoleModel(consoleModelsCache.determineConsoleModelForVm(vm));
+            
webAdminItemModel.setAdditionalConsoleModel(consoleModelsCache.determineAdditionalConsoleModelForVm(vm));
+
+            list.add(webAdminItemModel);
         }
+
+        // update model list
+        setSelectedHasConsoleModels(list);
     }
 
     private void NewDesktop()
@@ -799,21 +771,25 @@
             return;
         }
 
-        ConsolePopupModel model = new ConsolePopupModel();
+        final HasConsoleModel hasConsoleModel = getSelectedHasConsoleModel();
+        if (hasConsoleModel == null) {
+            return;
+        }
+
+        final ConsolePopupModel model = new ConsolePopupModel();
         model.setConsoleContext(ConsoleContext.WA);
-        model.setModel(this);
+        model.setModel(hasConsoleModel);
         model.setHashName("editConsole"); //$NON-NLS-1$
         setWindow(model);
 
-        UICommand saveCommand = new UICommand("OnEditConsoleSave", this); 
//$NON-NLS-1$
+        final UICommand saveCommand = new UICommand("OnEditConsoleSave", 
this); //$NON-NLS-1$
         
saveCommand.setTitle(ConstantsManager.getInstance().getConstants().ok());
         saveCommand.setIsDefault(true);
         model.getCommands().add(saveCommand);
-        UICommand cancelCommand = new UICommand("Cancel", this); //$NON-NLS-1$
+        final UICommand cancelCommand = new UICommand("Cancel", this); 
//$NON-NLS-1$
         
cancelCommand.setTitle(ConstantsManager.getInstance().getConstants().cancel());
         cancelCommand.setIsCancel(true);
         model.getCommands().add(cancelCommand);
-
     }
 
     private void Edit()
@@ -1343,9 +1319,12 @@
                         final ExportVmModel model = (ExportVmModel) target;
                         @SuppressWarnings("unchecked")
                         final ArrayList<Disk> vmDisks = (ArrayList<Disk>) 
returnValue;
-                        VmModelHelper.sendWarningForNonExportableDisks(model, 
vmDisks, VmModelHelper.WarningType.VM_EXPORT);
+                        VmModelHelper.sendWarningForNonExportableDisks(model,
+                                vmDisks,
+                                VmModelHelper.WarningType.VM_EXPORT);
                     }
-                }), entity.getId());
+                }),
+                entity.getId());
     }
 
     private void RunOnce()
@@ -1443,7 +1422,9 @@
                 {
                     BootSequenceModel bootSequenceModel = 
runOnceModel.getBootSequence();
                     bootSequenceModel.getNetworkOption()
-                            
.setChangeProhibitionReason(ConstantsManager.getInstance().getMessages().interfaceIsRequiredToBootFromNetwork());
+                            
.setChangeProhibitionReason(ConstantsManager.getInstance()
+                                    .getMessages()
+                                    .interfaceIsRequiredToBootFromNetwork());
                     bootSequenceModel.getNetworkOption().setIsChangable(false);
                 }
             }
@@ -1467,7 +1448,9 @@
                 if (vmDisks.isEmpty()) {
                     runOnceModel.getRunAsStateless().setIsChangable(false);
                     runOnceModel.getRunAsStateless()
-                            
.setChangeProhibitionReason(ConstantsManager.getInstance().getMessages().disklessVmCannotRunAsStateless());
+                            
.setChangeProhibitionReason(ConstantsManager.getInstance()
+                                    .getMessages()
+                                    .disklessVmCannotRunAsStateless());
                     runOnceModel.getRunAsStateless().setEntity(false);
                 }
 
@@ -1484,7 +1467,9 @@
                     BootSequenceModel bootSequenceModel = 
runOnceModel.getBootSequence();
                     
bootSequenceModel.getHardDiskOption().setIsChangable(false);
                     bootSequenceModel.getHardDiskOption()
-                            
.setChangeProhibitionReason(ConstantsManager.getInstance().getMessages().bootableDiskIsRequiredToBootFromDisk());
+                            
.setChangeProhibitionReason(ConstantsManager.getInstance()
+                                    .getMessages()
+                                    .bootableDiskIsRequiredToBootFromDisk());
                 }
             }
         };
@@ -1602,8 +1587,8 @@
                         final RunOnceModel model = (RunOnceModel) target;
                         final List<VDS> hosts = (ArrayList<VDS>) returnValue;
                         final List<VDS> activeHosts = new ArrayList<VDS>();
-                        for(VDS host : hosts) {
-                            if(VDSStatus.Up.equals(host.getStatus())) {
+                        for (VDS host : hosts) {
+                            if (VDSStatus.Up.equals(host.getStatus())) {
                                 activeHosts.add(host);
                             }
                         }
@@ -1611,7 +1596,7 @@
                         model.getDefaultHost().setItems(activeHosts);
 
                         // hide host tab when no active host is available
-                        if(activeHosts.isEmpty()) {
+                        if (activeHosts.isEmpty()) {
                             model.setIsHostTabVisible(false);
                         }
                     }
@@ -2423,7 +2408,6 @@
 
         getcurrentVm().setUseHostCpuFlags((Boolean) 
model.getHostCpu().getEntity());
 
-
         if (model.getIsNew())
         {
             if (getcurrentVm().getVmtGuid().equals(NGuid.Empty))
@@ -2752,14 +2736,25 @@
         getGuideCommand().setIsExecutionAllowed(getGuideContext() != null
                 || (getSelectedItem() != null && getSelectedItems() != null && 
getSelectedItems().size() == 1));
 
-
         
getConsoleConnectCommand().setIsExecutionAllowed(isConsoleCommandsExecutionAllowed());
         
getEditConsoleCommand().setIsExecutionAllowed(isConsoleCommandsExecutionAllowed());
     }
 
     private boolean isConsoleCommandsExecutionAllowed() {
-        ConsoleProtocol protocol = 
consoleUtils.determineConnectionProtocol(this);
-        return consoleUtils.canShowConsole(protocol, this);
+        final List<HasConsoleModel> list = getSelectedHasConsoleModels();
+        if (list == null || list.isEmpty()) {
+            return false;
+        }
+
+        // return true, if at least one console is available
+        for (HasConsoleModel hasConsoleModel : list) {
+            final ConsoleProtocol protocol = 
consoleUtils.determineConnectionProtocol(hasConsoleModel);
+            if (consoleUtils.canShowConsole(protocol, hasConsoleModel)) {
+                return true;
+            }
+        }
+
+        return false;
     }
 
     /**
@@ -2809,7 +2804,7 @@
         }
         else if (command == getConsoleConnectCommand())
         {
-            connectToConsole();
+            connectToConsoles();
         }
         else if (command == getRemoveCommand())
         {
@@ -2933,10 +2928,33 @@
         }
     }
 
-    private void connectToConsole() {
-        String errorMessage = consoleManager.connectToConsole(this);
-        if (errorMessage != null) {
-            errorPopupManager.show(errorMessage);
+    private void connectToConsoles() {
+        StringBuilder errorMessages = null;
+
+        final List<HasConsoleModel> list = getSelectedHasConsoleModels();
+        if (list == null || list.isEmpty()) {
+            return;
+        }
+
+        for (HasConsoleModel model : list) {
+            final String errorMessage = consoleManager.connectToConsole(model);
+
+            if (errorMessage != null) {
+                if (errorMessages == null) {
+                    errorMessages = new StringBuilder();
+                } else {
+                    errorMessages.append("\r\n"); //$NON-NLS-1$
+                }
+
+                errorMessages
+                        .append(model.getVM().getName())
+                        .append(" - ") //$NON-NLS-1$
+                        .append(errorMessage);
+            }
+        }
+
+        if (errorMessages != null) {
+            errorPopupManager.show(errorMessages.toString());
         }
     }
 
@@ -2966,23 +2984,8 @@
     }
 
     @Override
-    public boolean isPool() {
-        return false;
-    }
-
-    @Override
-    public ConsoleProtocol getUserSelectedProtocol() {
-        return resolveSelectedProtocol(this);
-    }
-
-    @Override
-    public void setSelectedProtocol(ConsoleProtocol selectedProtocol) {
-        setSelectedProtocol(selectedProtocol, this);
-    }
-
-    @Override
-    public VM getVM() {
-        return (VM) getSelectedItem();
+    public ConsoleProtocol resolveSelectedProtocol(HasConsoleModel item) {
+        return consoleModelsCache.resolveUserSelectedProtocol(item);
     }
 
     @Override
@@ -2990,14 +2993,19 @@
         consoleModelsCache.setSelectedProtocol(protocol, item);
     }
 
-    @Override
-    public ConsoleProtocol resolveSelectedProtocol(HasConsoleModel item) {
-        return consoleModelsCache.resolveUserSelectedProtocol(item);
+    public List<HasConsoleModel> getSelectedHasConsoleModels() {
+        return selectedHasConsoleModels;
     }
 
-    @Override
-    public ConsoleContext getConsoleContext() {
-        return ConsoleContext.WA;
+    public HasConsoleModel getSelectedHasConsoleModel() {
+        if (selectedHasConsoleModels == null || 
selectedHasConsoleModels.size() != 1) {
+            return null;
+        }
+        return selectedHasConsoleModels.get(0);
+    }
+
+    public void setSelectedHasConsoleModels(List<HasConsoleModel> 
selectedHasConsoleModels) {
+        this.selectedHasConsoleModels = selectedHasConsoleModels;
     }
 
 }
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/WebAdminItemModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/WebAdminItemModel.java
new file mode 100644
index 0000000..c1690f9
--- /dev/null
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/WebAdminItemModel.java
@@ -0,0 +1,83 @@
+package org.ovirt.engine.ui.uicommonweb.models.vms;
+
+import org.ovirt.engine.core.common.businessentities.VM;
+import 
org.ovirt.engine.ui.uicommonweb.ConsoleOptionsFrontendPersister.ConsoleContext;
+import org.ovirt.engine.ui.uicommonweb.models.ConsoleModelsCache;
+import org.ovirt.engine.ui.uicommonweb.models.ConsoleProtocol;
+import org.ovirt.engine.ui.uicommonweb.models.EntityModel;
+import org.ovirt.engine.ui.uicommonweb.models.HasConsoleModel;
+import 
org.ovirt.engine.ui.uicommonweb.models.userportal.UserSelectedDisplayProtocolManager;
+
+public class WebAdminItemModel extends EntityModel implements HasConsoleModel {
+
+    UserSelectedDisplayProtocolManager userSelectedDisplayProtocolManager;
+    ConsoleModelsCache consoleModelsCache;
+
+    private ConsoleModel defaultConsoleModel;
+    private ConsoleModel additionalConsoleModel;
+
+    public WebAdminItemModel(
+            UserSelectedDisplayProtocolManager 
userSelectedDisplayProtocolManager,
+            ConsoleModelsCache consoleModelsCache) {
+        this.userSelectedDisplayProtocolManager = 
userSelectedDisplayProtocolManager;
+        this.consoleModelsCache = consoleModelsCache;
+    }
+
+    @Override
+    public boolean isPool() {
+        return false;
+    }
+
+    @Override
+    public ConsoleProtocol getUserSelectedProtocol() {
+        return 
userSelectedDisplayProtocolManager.resolveSelectedProtocol(this);
+    }
+
+    @Override
+    public void setSelectedProtocol(ConsoleProtocol selectedProtocol) {
+        
userSelectedDisplayProtocolManager.setSelectedProtocol(selectedProtocol, this);
+    }
+
+    @Override
+    public ConsoleModel getDefaultConsoleModel() {
+        return defaultConsoleModel;
+    }
+
+    public void setDefaultConsoleModel(ConsoleModel defaultConsoleModel) {
+        this.defaultConsoleModel = defaultConsoleModel;
+    }
+
+    @Override
+    public ConsoleModel getAdditionalConsoleModel() {
+        return additionalConsoleModel;
+    }
+
+    public void setAdditionalConsoleModel(ConsoleModel additionalConsoleModel) 
{
+        this.additionalConsoleModel = additionalConsoleModel;
+    }
+
+    @Override
+    public VM getVM() {
+        if (getEntity() instanceof VM) {
+            return (VM) getEntity();
+        }
+
+        return null;
+    }
+
+    @Override
+    public ConsoleContext getConsoleContext() {
+        return ConsoleContext.WA;
+    }
+
+    public ConsoleModelsCache getConsoleModelsCache() {
+        return consoleModelsCache;
+    }
+
+    public UserSelectedDisplayProtocolManager 
getUserSelectedDisplayProtocolManager() {
+        return userSelectedDisplayProtocolManager;
+    }
+
+
+
+}
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/host/SubTabHostVmView.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/host/SubTabHostVmView.java
index 738b6c9..0776a11 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/host/SubTabHostVmView.java
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/host/SubTabHostVmView.java
@@ -13,7 +13,6 @@
 import org.ovirt.engine.ui.uicommonweb.UICommand;
 import org.ovirt.engine.ui.uicommonweb.models.hosts.HostListModel;
 import org.ovirt.engine.ui.uicommonweb.models.hosts.HostVmListModel;
-import org.ovirt.engine.ui.uicommonweb.models.vms.ConsoleModel;
 import org.ovirt.engine.ui.webadmin.ApplicationConstants;
 import org.ovirt.engine.ui.webadmin.ApplicationResources;
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.tab.host.SubTabHostVmPresenter;
@@ -146,8 +145,7 @@
                 resources.consoleImage(), resources.consoleDisabledImage()) {
             @Override
             protected UICommand resolveCommand() {
-                ConsoleModel defaultConsoleModel = 
getDetailModel().getDefaultConsoleModel();
-                return defaultConsoleModel != null ? 
defaultConsoleModel.getConnectCommand() : null;
+                return getDetailModel().getConsoleConnectCommand();
             }
         });
 


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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I894eaeafab22614af3f219169ef73d7fbeed3a11
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Libor Spevak <[email protected]>
_______________________________________________
Engine-patches mailing list
[email protected]
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to