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
