Arik Hadas has uploaded a new change for review.

Change subject: userportal: filter root templates without permissions
......................................................................

userportal: filter root templates without permissions

When making new template as sub-version, show only templates that the
user has permissions on in the base templates list.

Change-Id: Idf4d3967994b8a37b552b3b8ba63d09309a37093
Signed-off-by: Arik Hadas <[email protected]>
---
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/NewTemplateVmModelBehavior.java
A 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/UserPortalNewTemplateVmModelBehavior.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/UserPortalNewVmModelBehavior.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmModelBehaviorBase.java
5 files changed, 128 insertions(+), 9 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/15/23515/1

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 bf24946..a593723 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
@@ -56,11 +56,11 @@
 import org.ovirt.engine.ui.uicommonweb.models.pools.PoolInterfaceListModel;
 import org.ovirt.engine.ui.uicommonweb.models.vms.ConsoleModel;
 import org.ovirt.engine.ui.uicommonweb.models.vms.DataCenterWithCluster;
-import org.ovirt.engine.ui.uicommonweb.models.vms.NewTemplateVmModelBehavior;
 import org.ovirt.engine.ui.uicommonweb.models.vms.RunOnceModel;
 import org.ovirt.engine.ui.uicommonweb.models.vms.UnitVmModel;
 import 
org.ovirt.engine.ui.uicommonweb.models.vms.UnitVmModelNetworkAsyncCallback;
 import 
org.ovirt.engine.ui.uicommonweb.models.vms.UserPortalExistingVmModelBehavior;
+import 
org.ovirt.engine.ui.uicommonweb.models.vms.UserPortalNewTemplateVmModelBehavior;
 import org.ovirt.engine.ui.uicommonweb.models.vms.UserPortalNewVmModelBehavior;
 import org.ovirt.engine.ui.uicommonweb.models.vms.UserPortalRunOnceModel;
 import org.ovirt.engine.ui.uicommonweb.models.vms.UserPortalVmEventListModel;
@@ -517,7 +517,7 @@
         }
 
         VM vm = (VM) selectedItem.getEntity();
-        UnitVmModel windowModel = new UnitVmModel(new 
NewTemplateVmModelBehavior(vm));
+        UnitVmModel windowModel = new UnitVmModel(new 
UserPortalNewTemplateVmModelBehavior(vm));
         setWindow(windowModel);
         
windowModel.setTitle(ConstantsManager.getInstance().getConstants().newTemplateTitle());
         windowModel.setHashName("new_template"); //$NON-NLS-1$
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/NewTemplateVmModelBehavior.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/NewTemplateVmModelBehavior.java
index 47a0cc9..8f462c9 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/NewTemplateVmModelBehavior.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/NewTemplateVmModelBehavior.java
@@ -40,6 +40,10 @@
         this.vm = vm;
     }
 
+    protected VM getVm() {
+        return vm;
+    }
+
     @Override
     public void initialize(SystemTreeItemModel systemTreeSelectedItem)
     {
@@ -108,7 +112,7 @@
                 vm.getStoragePoolId());
     }
 
-    private void updateTemplate()
+    protected void updateTemplate()
     {
         final DataCenterWithCluster dataCenterWithCluster =
                 (DataCenterWithCluster) 
getModel().getDataCenterWithClustersList().getSelectedItem();
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/UserPortalNewTemplateVmModelBehavior.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/UserPortalNewTemplateVmModelBehavior.java
new file mode 100644
index 0000000..54eada6
--- /dev/null
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/UserPortalNewTemplateVmModelBehavior.java
@@ -0,0 +1,111 @@
+package org.ovirt.engine.ui.uicommonweb.models.vms;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+import org.ovirt.engine.core.common.businessentities.ActionGroup;
+import org.ovirt.engine.core.common.businessentities.StoragePool;
+import org.ovirt.engine.core.common.businessentities.VM;
+import org.ovirt.engine.core.common.businessentities.VmTemplate;
+import org.ovirt.engine.core.common.businessentities.VmTemplateStatus;
+import 
org.ovirt.engine.core.common.businessentities.comparators.NameableComparator;
+import 
org.ovirt.engine.core.common.queries.GetEntitiesWithPermittedActionParameters;
+import org.ovirt.engine.core.common.queries.VdcQueryParametersBase;
+import org.ovirt.engine.core.common.queries.VdcQueryReturnValue;
+import org.ovirt.engine.core.common.queries.VdcQueryType;
+import org.ovirt.engine.core.compat.Guid;
+import org.ovirt.engine.ui.frontend.Frontend;
+import org.ovirt.engine.ui.uicommonweb.Linq;
+import org.ovirt.engine.ui.uicommonweb.dataprovider.AsyncDataProvider;
+import org.ovirt.engine.ui.uicompat.FrontendMultipleQueryAsyncResult;
+import org.ovirt.engine.ui.uicompat.IFrontendMultipleQueryAsyncCallback;
+
+public class UserPortalNewTemplateVmModelBehavior extends 
NewTemplateVmModelBehavior implements IFrontendMultipleQueryAsyncCallback {
+
+    private static final ActionGroup CREATE_VM = ActionGroup.CREATE_VM;
+
+    public UserPortalNewTemplateVmModelBehavior(VM vm) {
+        super(vm);
+    }
+
+    @Override
+    protected void updateTemplate() {
+        ArrayList<VdcQueryType> queryTypeList = new ArrayList<VdcQueryType>();
+        queryTypeList.add(VdcQueryType.GetVmTemplatesWithPermittedAction);
+
+        GetEntitiesWithPermittedActionParameters 
getEntitiesWithPermittedActionParameters =
+                new GetEntitiesWithPermittedActionParameters();
+        getEntitiesWithPermittedActionParameters.setActionGroup(CREATE_VM);
+
+        ArrayList<VdcQueryParametersBase> parametersList =
+                new ArrayList<VdcQueryParametersBase>(Arrays.asList(new 
VdcQueryParametersBase[] {
+                        getEntitiesWithPermittedActionParameters }));
+
+        // Get clusters and templates
+        Frontend.getInstance().runMultipleQueries(queryTypeList, 
parametersList, this, getModel().getHash());
+    }
+
+    @Override
+    public void executed(FrontendMultipleQueryAsyncResult result) {
+        List<VdcQueryReturnValue> returnValueList = result.getReturnValues();
+        ArrayList<VmTemplate> templates =
+                (ArrayList<VmTemplate>) 
returnValueList.get(0).getReturnValue();
+        initTemplates(templates);
+    }
+
+    private void initTemplates(List<VmTemplate> templates)
+    {
+        List<VmTemplate> rootTemplates = filterNotBaseTemplates(templates);
+
+        // Filter templates list (include only templates that belong to the 
selected datacenter)
+        ArrayList<VmTemplate> templatesList = new ArrayList<VmTemplate>();
+        VmTemplate blankTemplate = null;
+        DataCenterWithCluster dataCenterWithCluster = 
getModel().getDataCenterWithClustersList().getSelectedItem();
+        StoragePool selectedDataCenter = dataCenterWithCluster.getDataCenter();
+        Guid selectedDataCenterId = selectedDataCenter.getId();
+        if (selectedDataCenterId == null) {
+            return;
+        }
+
+        for (VmTemplate template : rootTemplates)
+        {
+            Guid datacenterId =
+                    template.getStoragePoolId() == null ? Guid.Empty : 
template.getStoragePoolId();
+
+            if (template.getId().equals(Guid.Empty))
+            {
+                blankTemplate = template;
+            }
+            else if (!selectedDataCenterId.equals(datacenterId))
+            {
+                continue;
+            }
+            else if (template.getStatus() == VmTemplateStatus.OK)
+            {
+                templatesList.add(template);
+            }
+        }
+
+        // Sort list and position "Blank" template as first
+        Collections.sort(templatesList, new NameableComparator());
+        if (blankTemplate != null && rootTemplates.contains(blankTemplate))
+        {
+            templatesList.add(0, blankTemplate);
+        }
+
+        ArrayList<VmTemplate> filteredTemplates = 
AsyncDataProvider.filterTemplatesByArchitecture(templatesList,
+                dataCenterWithCluster.getCluster().getArchitecture());
+
+        List<VmTemplate> baseTemplates = 
filterNotBaseTemplates(filteredTemplates);
+
+        VmTemplate currentTemplate = Linq.firstOrDefault(templates,
+                new Linq.TemplatePredicate(getVm().getVmtGuid()));
+
+        getModel().getBaseTemplate().setItems(baseTemplates);
+
+        
getModel().getBaseTemplate().setSelectedItem(Linq.firstOrDefault(baseTemplates,
+                new 
Linq.TemplatePredicate(currentTemplate.getBaseTemplateId())));
+    }
+}
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/UserPortalNewVmModelBehavior.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/UserPortalNewVmModelBehavior.java
index 6aa18fc..7999897 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/UserPortalNewVmModelBehavior.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/UserPortalNewVmModelBehavior.java
@@ -155,14 +155,15 @@
         ArrayList<VmTemplate> filteredTemplates = 
AsyncDataProvider.filterTemplatesByArchitecture(templatesList,
                 dataCenterWithCluster.getCluster().getArchitecture());
 
+        List<VmTemplate> baseTemplates = filterNotBaseTemplates(templates);
+
         // If there was some template selected before, try select it again.
-        VmTemplate oldTemplate = getModel().getTemplate().getSelectedItem();
+        VmTemplate prevBaseTemplate = 
getModel().getBaseTemplate().getSelectedItem();
 
-        getModel().getTemplate().setItems(filteredTemplates);
+        getModel().getBaseTemplate().setItems(baseTemplates);
 
-        
getModel().getTemplate().setSelectedItem(Linq.firstOrDefault(filteredTemplates,
-                oldTemplate != null ? new 
Linq.TemplatePredicate(oldTemplate.getId())
-                        : new Linq.TemplatePredicate(Guid.Empty)));
+        
getModel().getBaseTemplate().setSelectedItem(Linq.firstOrDefault(baseTemplates,
+                new Linq.TemplatePredicate(prevBaseTemplate != null ? 
prevBaseTemplate.getId() : Guid.Empty)));
 
         updateIsDisksAvailable();
     }
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmModelBehaviorBase.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmModelBehaviorBase.java
index 294e61a..4f76b63 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmModelBehaviorBase.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmModelBehaviorBase.java
@@ -138,7 +138,10 @@
         }
 
         for (VmTemplate template : templates) {
-            
baseTemplateToSubTemplates.get(template.getBaseTemplateId()).add(template);
+            Guid baseTemplateId = template.getBaseTemplateId();
+            if (baseTemplateToSubTemplates.containsKey(baseTemplateId)) {
+                baseTemplateToSubTemplates.get(baseTemplateId).add(template);
+            }
         }
 
         for (List<VmTemplate> subversions : (Collection<List<VmTemplate>>) 
baseTemplateToSubTemplates.values()) {


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

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

Reply via email to