Gilad Chaplik has uploaded a new change for review.

Change subject: engine: Copying a quota drops consumers and permissions
......................................................................

engine: Copying a quota drops consumers and permissions

Add a option to copy consumers and permissions while cloning
a Quota.

A check box (copy consumers and permissions) added to clone quota
dialog.

Change-Id: Ide6f9ded5c19d16f7b4c7e373df9664e59fb1419
Bug-Url: https://bugzilla.redhat.com/908835
Signed-off-by: Gilad Chaplik <gchap...@redhat.com>
---
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddQuotaCommand.java
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/QuotaCRUDParameters.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/quota/QuotaListModel.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/quota/QuotaModel.java
M 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/ApplicationConstants.java
M 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/quota/QuotaPopupView.java
M 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/quota/QuotaPopupView.ui.xml
7 files changed, 86 insertions(+), 7 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/60/19960/1

diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddQuotaCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddQuotaCommand.java
index c0d862f..60064c9 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddQuotaCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddQuotaCommand.java
@@ -1,17 +1,21 @@
 package org.ovirt.engine.core.bll;
 
-import java.util.Collections;
+import java.util.ArrayList;
 import java.util.List;
 
 import org.ovirt.engine.core.bll.utils.PermissionSubject;
 import org.ovirt.engine.core.common.AuditLogType;
 import org.ovirt.engine.core.common.VdcObjectType;
 import org.ovirt.engine.core.common.action.QuotaCRUDParameters;
+import org.ovirt.engine.core.common.businessentities.ActionGroup;
 import org.ovirt.engine.core.common.businessentities.Quota;
 import org.ovirt.engine.core.common.businessentities.QuotaStorage;
 import org.ovirt.engine.core.common.businessentities.QuotaVdsGroup;
+import org.ovirt.engine.core.common.businessentities.permissions;
 import org.ovirt.engine.core.common.errors.VdcBllMessages;
 import org.ovirt.engine.core.compat.Guid;
+import org.ovirt.engine.core.utils.transaction.TransactionMethod;
+import org.ovirt.engine.core.utils.transaction.TransactionSupport;
 
 public class AddQuotaCommand extends QuotaCRUDCommand {
 
@@ -37,15 +41,30 @@
     @Override
     protected void executeCommand() {
         setQuotaParameter();
-        getQuotaDAO().save(getQuota());
-        getReturnValue().setSucceeded(true);
+        TransactionSupport.executeInNewTransaction(new 
TransactionMethod<Void>() {
+
+            @Override
+            public Void runInTransaction() {
+                getQuotaDAO().save(getQuota());
+                copyQuotaPermissions();
+                getReturnValue().setSucceeded(true);
+                return null;
+            }
+        });
     }
 
     @Override
     public List<PermissionSubject> getPermissionCheckSubjects() {
-        return Collections.singletonList(new 
PermissionSubject(getStoragePoolId(),
+        List<PermissionSubject> permissionsSubject = new 
ArrayList<PermissionSubject>();
+        permissionsSubject.add(new PermissionSubject(getStoragePoolId(),
                 VdcObjectType.StoragePool,
                 getActionType().getActionGroup()));
+        if (getParameters().isCopyPermissions()) {
+            permissionsSubject.add(new PermissionSubject(getStoragePoolId(),
+                    VdcObjectType.StoragePool,
+                    ActionGroup.MANIPULATE_PERMISSIONS));
+        }
+        return permissionsSubject;
     }
 
     @Override
@@ -83,4 +102,23 @@
     public AuditLogType getAuditLogTypeValue() {
         return getSucceeded() ? AuditLogType.USER_ADD_QUOTA : 
AuditLogType.USER_FAILED_ADD_QUOTA;
     }
+
+    private void copyQuotaPermissions() {
+        if (!getParameters().isCopyPermissions()) {
+            return;
+        }
+        UniquePermissionsSet permissionsToAdd = new UniquePermissionsSet();
+        List<permissions> vmPermissions =
+                
getDbFacade().getPermissionDao().getAllForEntity(getParameters().getQuotaId(),
+                        getCurrentUser().getUserId(),
+                        false);
+        for (permissions vmPermission : vmPermissions) {
+            permissionsToAdd.addPermission(vmPermission.getad_element_id(), 
vmPermission.getrole_id(),
+                    getQuotaId(), VdcObjectType.Quota);
+        }
+        if (!permissionsToAdd.isEmpty()) {
+            List<permissions> permissionsList = 
permissionsToAdd.asPermissionList();
+            
MultiLevelAdministrationHandler.addPermission(permissionsList.toArray(new 
permissions[permissionsList.size()]));
+        }
+    }
 }
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/QuotaCRUDParameters.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/QuotaCRUDParameters.java
index 2ff1d71..e0c14c4 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/QuotaCRUDParameters.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/QuotaCRUDParameters.java
@@ -10,6 +10,7 @@
 
     private Guid quotaId;
     private Quota quota;
+    private boolean copyPermissions;
 
     public QuotaCRUDParameters() {
     }
@@ -34,4 +35,12 @@
     public void setQuota(Quota value) {
         quota = value;
     }
+
+    public boolean isCopyPermissions() {
+        return copyPermissions;
+    }
+
+    public void setCopyPermissions(boolean copyPermissions) {
+        this.copyPermissions = copyPermissions;
+    }
 }
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/quota/QuotaListModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/quota/QuotaListModel.java
index 927a90c..1affd35 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/quota/QuotaListModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/quota/QuotaListModel.java
@@ -323,7 +323,10 @@
 
         Guid guid = quota.getId();
 
+        QuotaCRUDParameters parameters = new QuotaCRUDParameters(quota);
         if (isClone) {
+            parameters.setCopyPermissions((Boolean) 
model.getCopyPermissions().getEntity());
+            parameters.setQuotaId(quota.getId());
             quota.setId(Guid.Empty);
         }
 
@@ -332,7 +335,7 @@
             actionType = VdcActionType.UpdateQuota;
         }
         Frontend.RunAction(actionType,
-                new QuotaCRUDParameters(quota),
+                parameters,
                 new IFrontendActionAsyncCallback() {
 
                     @Override
@@ -387,6 +390,7 @@
             command = new UICommand("onCloneQuota", this); //$NON-NLS-1$
             qModel.getName().setEntity(COPY_OF + outer_quota.getQuotaName());
             qModel.getDescription().setEntity(""); //$NON-NLS-1$
+            qModel.getCopyPermissions().setIsAvailable(true);
         }
         command.setTitle(ConstantsManager.getInstance().getConstants().ok());
         command.setIsDefault(true);
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/quota/QuotaModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/quota/QuotaModel.java
index 613dda8..9e95ac9 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/quota/QuotaModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/quota/QuotaModel.java
@@ -26,6 +26,8 @@
     EntityModel description;
     ListModel dataCenter;
 
+    EntityModel copyPermissions;
+
     EntityModel graceStorage;
     EntityModel thresholdStorage;
     EntityModel graceCluster;
@@ -150,6 +152,14 @@
         this.dataCenter = dataCenter;
     }
 
+    public EntityModel getCopyPermissions() {
+        return copyPermissions;
+    }
+
+    public void setCopyPermissions(EntityModel copyPermissions) {
+        this.copyPermissions = copyPermissions;
+    }
+
     public EntityModel getGraceStorage() {
         return graceStorage;
     }
@@ -189,7 +199,8 @@
         setName(new EntityModel());
         setDescription(new EntityModel());
         setDataCenter(new ListModel());
-
+        setCopyPermissions(new EntityModel(false));
+        getCopyPermissions().setIsAvailable(false); // visible on copy quota.
         setGraceCluster(new EntityModel());
         getGraceCluster().setEntity(20);
         setThresholdCluster(new EntityModel());
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/ApplicationConstants.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/ApplicationConstants.java
index 685b1ae..5a2907f 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/ApplicationConstants.java
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/ApplicationConstants.java
@@ -2099,6 +2099,9 @@
     @DefaultStringValue("Data Center")
     String dataCenterQuotaPopup();
 
+    @DefaultStringValue("Copy consumers and permissions")
+    String copyQuotaPermissionsQuotaPopup();
+
     @DefaultStringValue("Memory & CPU")
     String memAndCpuQuotaPopup();
 
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/quota/QuotaPopupView.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/quota/QuotaPopupView.java
index 9d3ed1e..d3ce951 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/quota/QuotaPopupView.java
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/quota/QuotaPopupView.java
@@ -9,11 +9,13 @@
 import org.ovirt.engine.ui.common.idhandler.ElementIdHandler;
 import org.ovirt.engine.ui.common.idhandler.WithElementId;
 import org.ovirt.engine.ui.common.view.popup.AbstractModelBoundPopupView;
+import org.ovirt.engine.ui.common.widget.Align;
 import org.ovirt.engine.ui.common.widget.dialog.SimpleDialogPanel;
+import org.ovirt.engine.ui.common.widget.editor.EntityModelCheckBoxEditor;
 import org.ovirt.engine.ui.common.widget.editor.EntityModelRadioButtonEditor;
 import org.ovirt.engine.ui.common.widget.editor.EntityModelTextBoxEditor;
-import org.ovirt.engine.ui.common.widget.editor.ListModelObjectCellTable;
 import org.ovirt.engine.ui.common.widget.editor.ListModelListBoxEditor;
+import org.ovirt.engine.ui.common.widget.editor.ListModelObjectCellTable;
 import org.ovirt.engine.ui.common.widget.form.Slider;
 import org.ovirt.engine.ui.common.widget.form.Slider.SliderValueChange;
 import org.ovirt.engine.ui.common.widget.renderer.DiskSizeRenderer;
@@ -80,6 +82,11 @@
     @Path(value = "dataCenter.selectedItem")
     @WithElementId
     ListModelListBoxEditor<Object> dataCenterEditor;
+
+    @UiField(provided = true)
+    @Path(value = "copyPermissions.entity")
+    @WithElementId("copyPermissions")
+    EntityModelCheckBoxEditor copyPermissionsEditor;
 
     @UiField
     @Ignore
@@ -180,6 +187,7 @@
         super(eventBus, resources);
         initListBoxEditors();
         initRadioButtonEditors();
+        initCheckBoxes();
         initSliders();
         initWidget(ViewUiBinder.uiBinder.createAndBindUi(this));
         ViewIdHandler.idHandler.generateAndSetIds(this);
@@ -187,6 +195,10 @@
         addStyles();
         driver.initialize(this);
         initTables(constants, messages);
+    }
+
+    private void initCheckBoxes() {
+        copyPermissionsEditor = new EntityModelCheckBoxEditor(Align.RIGHT);
     }
 
     private void addStyles() {
@@ -414,6 +426,7 @@
         nameEditor.setLabel(constants.nameQuotaPopup());
         descriptionEditor.setLabel(constants.descriptionQuotaPopup());
         dataCenterEditor.setLabel(constants.dataCenterQuotaPopup());
+        
copyPermissionsEditor.setLabel(constants.copyQuotaPermissionsQuotaPopup());
         memAndCpuLabel.setText(constants.memAndCpuQuotaPopup());
         storageLabel.setText(constants.storageQuotaPopup());
         
globalClusterQuotaRadioButtonEditor.setLabel(constants.ultQuotaForAllClustersQuotaPopup());
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/quota/QuotaPopupView.ui.xml
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/quota/QuotaPopupView.ui.xml
index 6e336c9..2ea636e 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/quota/QuotaPopupView.ui.xml
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/quota/QuotaPopupView.ui.xml
@@ -63,6 +63,7 @@
                                        <g:HorizontalPanel>
                                                <e:ListModelListBoxEditor 
ui:field="dataCenterEditor" />
                                        </g:HorizontalPanel>
+                                       <e:EntityModelCheckBoxEditor 
ui:field="copyPermissionsEditor" />
                                </g:FlowPanel>
                                <g:Label ui:field="memAndCpuLabel" 
addStyleNames="{style.labelStyle}"/>
                                <g:HorizontalPanel 
addStyleNames="{style.marginPanel}">


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

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

Reply via email to