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