Gilad Chaplik has uploaded a new change for review.

Change subject: webamin: Assign Quota for Disk (#848310)
......................................................................

webamin: Assign Quota for Disk (#848310)

https://bugzilla.redhat.com/848310

add 'Assign Quota' dialog in Disks main tab:
the dialog will be shown only in quota mode != disabled and
when in DC context of the tree.
in this dialog you may change the quota of multiple disks

Signed-off-by: Gilad Chaplik <gchap...@redhat.com>
Change-Id: I1b2abe42ada902e8a247cb4638900f34b4c4e0df
---
M 
frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/CommonApplicationConstants.java
A 
frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/quota/ChangeQuotaItemView.java
A 
frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/quota/ChangeQuotaItemView.ui.xml
A 
frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/quota/ChangeQuotaView.java
A 
frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/quota/ChangeQuotaView.ui.xml
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/disks/DiskListModel.java
A 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/quota/ChangeQuotaItemModel.java
A 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/quota/ChangeQuotaModel.java
M 
frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/Constants.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/gin/PresenterModule.java
M 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/uicommon/DiskModule.java
A 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/popup/quota/ChangeQuotaPopupPresenterWidget.java
A 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/quota/ChangeQuotaPopupView.java
A 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/quota/ChangeQuotaPopupView.ui.xml
M 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/MainTabDiskView.java
16 files changed, 574 insertions(+), 1 deletion(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/58/7358/1

diff --git 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/CommonApplicationConstants.java
 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/CommonApplicationConstants.java
index 5f4637a..4266c33 100644
--- 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/CommonApplicationConstants.java
+++ 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/CommonApplicationConstants.java
@@ -1000,4 +1000,10 @@
 
     @DefaultStringValue("Direct LUN")
     String lunDisksLabel();
+
+    @DefaultStringValue("Currnet")
+    String currentQuota();
+
+    @DefaultStringValue("Name")
+    String elementName();
 }
diff --git 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/quota/ChangeQuotaItemView.java
 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/quota/ChangeQuotaItemView.java
new file mode 100644
index 0000000..dc85ac1
--- /dev/null
+++ 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/quota/ChangeQuotaItemView.java
@@ -0,0 +1,106 @@
+package org.ovirt.engine.ui.common.widget.uicommon.popup.quota;
+
+import org.ovirt.engine.core.common.businessentities.Quota;
+import org.ovirt.engine.ui.common.CommonApplicationConstants;
+import org.ovirt.engine.ui.common.idhandler.HasElementId;
+import org.ovirt.engine.ui.common.widget.AbstractValidatedWidgetWithLabel;
+import org.ovirt.engine.ui.common.widget.HasEditorDriver;
+import org.ovirt.engine.ui.common.widget.editor.EntityModelLabelEditor;
+import org.ovirt.engine.ui.common.widget.editor.ListModelListBoxEditor;
+import org.ovirt.engine.ui.common.widget.renderer.NullSafeRenderer;
+import org.ovirt.engine.ui.uicommonweb.models.quota.ChangeQuotaItemModel;
+
+import com.google.gwt.core.client.GWT;
+import com.google.gwt.editor.client.SimpleBeanEditorDriver;
+import com.google.gwt.resources.client.CssResource;
+import com.google.gwt.uibinder.client.UiBinder;
+import com.google.gwt.uibinder.client.UiField;
+import com.google.gwt.user.client.ui.Composite;
+import com.google.gwt.user.client.ui.Widget;
+
+public class ChangeQuotaItemView extends Composite implements 
HasEditorDriver<ChangeQuotaItemModel>, HasElementId {
+
+    interface Driver extends SimpleBeanEditorDriver<ChangeQuotaItemModel, 
ChangeQuotaItemView> {
+        Driver driver = GWT.create(Driver.class);
+    }
+
+    interface ViewUiBinder extends UiBinder<Widget, ChangeQuotaItemView> {
+        ViewUiBinder uiBinder = GWT.create(ViewUiBinder.class);
+    }
+
+    interface WidgetStyle extends CssResource {
+        String editorContent();
+
+        String editorWrapper();
+
+        String editorLabel();
+    }
+
+    @UiField
+    WidgetStyle style;
+
+    @UiField
+    @Ignore
+    EntityModelLabelEditor objectNameLabel;
+
+    @UiField
+    @Ignore
+    EntityModelLabelEditor currentQuotaLabel;
+
+    @UiField(provided = true)
+    @Path(value = "quota.selectedItem")
+    ListModelListBoxEditor<Object> quotaListEditor;
+
+    CommonApplicationConstants constants;
+
+    public ChangeQuotaItemView(CommonApplicationConstants constants) {
+        this.constants = constants;
+
+        initEditors();
+        initWidget(ViewUiBinder.uiBinder.createAndBindUi(this));
+        Driver.driver.initialize(this);
+        updateStyles();
+    }
+
+    void initEditors() {
+        quotaListEditor = new ListModelListBoxEditor<Object>(new 
NullSafeRenderer<Object>() {
+            @Override
+            public String renderNullSafe(Object object) {
+                return ((Quota) object).getQuotaName();
+            }
+        });
+    }
+
+    void updateStyles() {
+        String editorStyle = style.editorContent();
+
+        updateEditorStyle(objectNameLabel, editorStyle);
+        updateEditorStyle(currentQuotaLabel, editorStyle);
+        updateEditorStyle(quotaListEditor, editorStyle);
+    }
+
+    private void updateEditorStyle(AbstractValidatedWidgetWithLabel editor, 
String contentStyle) {
+        editor.setContentWidgetStyleName(contentStyle);
+        editor.addWrapperStyleName(style.editorWrapper());
+        editor.setLabelStyleName(style.editorLabel());
+    }
+
+    @Override
+    public void edit(final ChangeQuotaItemModel object) {
+        Driver.driver.edit(object);
+
+        objectNameLabel.asValueBox().setValue(object.getObject().getEntity());
+        
currentQuotaLabel.asValueBox().setValue(object.getCurrentQuota().getEntity());
+    }
+
+    @Override
+    public ChangeQuotaItemModel flush() {
+        return Driver.driver.flush();
+    }
+
+    @Override
+    public void setElementId(String elementId) {
+
+    }
+
+}
diff --git 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/quota/ChangeQuotaItemView.ui.xml
 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/quota/ChangeQuotaItemView.ui.xml
new file mode 100644
index 0000000..c65d072
--- /dev/null
+++ 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/quota/ChangeQuotaItemView.ui.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent";>
+<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder" 
xmlns:g="urn:import:com.google.gwt.user.client.ui"
+       xmlns:e="urn:import:org.ovirt.engine.ui.common.widget.editor">
+
+       <ui:style 
type="org.ovirt.engine.ui.common.widget.uicommon.popup.quota.ChangeQuotaItemView.WidgetStyle">
+
+               .editorLabel {
+                       display: none;
+               }
+               
+               .editorContent {
+                       width: 100px;
+                       margin-left: 5px;
+               }
+               
+               .editorWrapper {
+                       display: block;
+               }
+                       
+       </ui:style>     
+       
+       <g:HorizontalPanel width="100%">
+               <e:EntityModelLabelEditor ui:field="objectNameLabel" />
+               <e:EntityModelLabelEditor ui:field="currentQuotaLabel" />
+               <e:ListModelListBoxEditor ui:field="quotaListEditor" />
+       </g:HorizontalPanel>
+
+</ui:UiBinder>
\ No newline at end of file
diff --git 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/quota/ChangeQuotaView.java
 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/quota/ChangeQuotaView.java
new file mode 100644
index 0000000..9565f4e
--- /dev/null
+++ 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/quota/ChangeQuotaView.java
@@ -0,0 +1,106 @@
+package org.ovirt.engine.ui.common.widget.uicommon.popup.quota;
+
+import java.util.ArrayList;
+
+import org.ovirt.engine.core.compat.Event;
+import org.ovirt.engine.core.compat.EventArgs;
+import org.ovirt.engine.core.compat.IEventListener;
+import org.ovirt.engine.ui.common.CommonApplicationConstants;
+import org.ovirt.engine.ui.common.PopupSimpleTableResources;
+import org.ovirt.engine.ui.common.idhandler.HasElementId;
+import org.ovirt.engine.ui.common.widget.HasEditorDriver;
+import org.ovirt.engine.ui.common.widget.editor.EntityModelCellTable;
+import org.ovirt.engine.ui.common.widget.table.column.EmptyColumn;
+import org.ovirt.engine.ui.uicommonweb.models.ListModel;
+import org.ovirt.engine.ui.uicommonweb.models.quota.ChangeQuotaItemModel;
+import org.ovirt.engine.ui.uicommonweb.models.quota.ChangeQuotaModel;
+
+import com.google.gwt.core.client.GWT;
+import com.google.gwt.editor.client.SimpleBeanEditorDriver;
+import com.google.gwt.uibinder.client.UiBinder;
+import com.google.gwt.uibinder.client.UiField;
+import com.google.gwt.user.cellview.client.CellTable.Resources;
+import com.google.gwt.user.client.ui.Composite;
+import com.google.gwt.user.client.ui.FlowPanel;
+import com.google.gwt.user.client.ui.SimplePanel;
+import com.google.gwt.user.client.ui.Widget;
+
+public class ChangeQuotaView extends Composite implements 
HasEditorDriver<ChangeQuotaModel>, HasElementId {
+
+    interface Driver extends SimpleBeanEditorDriver<ChangeQuotaModel, 
ChangeQuotaView> {
+        Driver driver = GWT.create(Driver.class);
+    }
+
+    interface ViewUiBinder extends UiBinder<Widget, ChangeQuotaView> {
+        ViewUiBinder uiBinder = GWT.create(ViewUiBinder.class);
+    }
+
+    @UiField
+    FlowPanel listPanel;
+
+    @UiField
+    SimplePanel listHeaderPanel;
+
+    @Ignore
+    EntityModelCellTable<ListModel> listHeader;
+
+    CommonApplicationConstants constants;
+
+    public ChangeQuotaView(CommonApplicationConstants constants) {
+        this.constants = constants;
+        initWidget(ViewUiBinder.uiBinder.createAndBindUi(this));
+        Driver.driver.initialize(this);
+    }
+
+    void updateListHeader(ChangeQuotaModel model) {
+        String width = "100px"; //$NON-NLS-1$
+        listHeader = new EntityModelCellTable(false, (Resources) GWT.create(
+                PopupSimpleTableResources.class), true);
+        listHeader.addColumn(new EmptyColumn(), constants.elementName(), 
width);
+        listHeader.addColumn(new EmptyColumn(), constants.currentQuota(), 
width);
+
+        listHeader.addColumn(new EmptyColumn(), constants.quotaDisk(), width);
+
+        listHeader.setRowData(new ArrayList());
+        listHeader.setWidth("100%", true); //$NON-NLS-1$
+
+        listHeaderPanel.setWidget(listHeader);
+    }
+
+    @Override
+    public void edit(ChangeQuotaModel model) {
+        Driver.driver.edit(model);
+        initListerners(model);
+        updateListHeader(model);
+    }
+
+    private void initListerners(final ChangeQuotaModel model) {
+        model.getItemsChangedEvent().addListener(new IEventListener() {
+            @Override
+            public void eventRaised(Event ev, Object sender, EventArgs args) {
+                addItems(model);
+            }
+        });
+    }
+
+    void addItems(ChangeQuotaModel model) {
+        listPanel.clear();
+
+        for (final ChangeQuotaItemModel itemModel : 
(ArrayList<ChangeQuotaItemModel>) model.getItems()) {
+            ChangeQuotaItemView itemView = new ChangeQuotaItemView(constants);
+            itemView.edit(itemModel);
+            listPanel.add(itemView);
+        }
+    }
+
+    @Override
+    public ChangeQuotaModel flush() {
+        return Driver.driver.flush();
+    }
+
+    @Override
+    public void setElementId(String elementId) {
+
+    }
+
+}
diff --git 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/quota/ChangeQuotaView.ui.xml
 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/quota/ChangeQuotaView.ui.xml
new file mode 100644
index 0000000..2ad7601
--- /dev/null
+++ 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/quota/ChangeQuotaView.ui.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent";>
+<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder" 
xmlns:g="urn:import:com.google.gwt.user.client.ui"
+       xmlns:e="urn:import:org.ovirt.engine.ui.common.widget.editor">
+
+       <ui:style>
+               .listPanel {
+                       overflow: auto;
+                       position: absolute;
+                       width: 100%;
+               }
+       </ui:style>     
+
+       <g:FlowPanel>
+               <g:SimplePanel ui:field="listHeaderPanel" />
+               <g:FlowPanel ui:field="listPanel" 
addStyleNames="{style.listPanel}"/>
+       </g:FlowPanel>
+
+</ui:UiBinder>
\ No newline at end of file
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/disks/DiskListModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/disks/DiskListModel.java
index 688f52d..6993874 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/disks/DiskListModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/disks/DiskListModel.java
@@ -4,6 +4,7 @@
 
 import org.ovirt.engine.core.common.action.AddDiskParameters;
 import org.ovirt.engine.core.common.action.AttachDettachVmDiskParameters;
+import org.ovirt.engine.core.common.action.ChangeQuotaParameters;
 import org.ovirt.engine.core.common.action.RemoveDiskParameters;
 import org.ovirt.engine.core.common.action.UpdateVmDiskParameters;
 import org.ovirt.engine.core.common.action.VdcActionParametersBase;
@@ -18,10 +19,12 @@
 import org.ovirt.engine.core.common.businessentities.LunDisk;
 import org.ovirt.engine.core.common.businessentities.PropagateErrors;
 import org.ovirt.engine.core.common.businessentities.Quota;
+import org.ovirt.engine.core.common.businessentities.QuotaEnforcementTypeEnum;
 import org.ovirt.engine.core.common.businessentities.VM;
 import org.ovirt.engine.core.common.businessentities.VmEntityType;
 import org.ovirt.engine.core.common.businessentities.VolumeType;
 import org.ovirt.engine.core.common.businessentities.storage_domains;
+import org.ovirt.engine.core.common.businessentities.storage_pool;
 import org.ovirt.engine.core.common.interfaces.SearchType;
 import org.ovirt.engine.core.common.mode.ApplicationMode;
 import org.ovirt.engine.core.common.queries.SearchParameters;
@@ -40,7 +43,10 @@
 import org.ovirt.engine.ui.uicommonweb.models.ListModel;
 import org.ovirt.engine.ui.uicommonweb.models.ListWithDetailsModel;
 import org.ovirt.engine.ui.uicommonweb.models.SystemTreeItemModel;
+import org.ovirt.engine.ui.uicommonweb.models.SystemTreeItemType;
 import org.ovirt.engine.ui.uicommonweb.models.configure.PermissionListModel;
+import org.ovirt.engine.ui.uicommonweb.models.quota.ChangeQuotaItemModel;
+import org.ovirt.engine.ui.uicommonweb.models.quota.ChangeQuotaModel;
 import org.ovirt.engine.ui.uicommonweb.models.templates.CopyDiskModel;
 import org.ovirt.engine.ui.uicommonweb.models.vms.DiskModel;
 import org.ovirt.engine.ui.uicommonweb.models.vms.MoveDiskModel;
@@ -100,6 +106,18 @@
         privateMoveCommand = value;
     }
 
+    private UICommand privateChangeQuotaCommand;
+
+    public UICommand getChangeQuotaCommand()
+    {
+        return privateChangeQuotaCommand;
+    }
+
+    private void setChangeQuotaCommand(UICommand value)
+    {
+        privateChangeQuotaCommand = value;
+    }
+
     private UICommand privateCopyCommand;
 
     public UICommand getCopyCommand()
@@ -154,6 +172,7 @@
         setEditCommand(new UICommand("Edit", this)); //$NON-NLS-1$
         setRemoveCommand(new UICommand("Remove", this)); //$NON-NLS-1$
         setMoveCommand(new UICommand("Move", this)); //$NON-NLS-1$
+        setChangeQuotaCommand(new UICommand("changeQuota", this)); 
//$NON-NLS-1$
         setCopyCommand(new UICommand("Copy", this)); //$NON-NLS-1$
 
         UpdateActionAvailability();
@@ -396,6 +415,62 @@
         model.StartProgress(null);
     }
 
+    private void changeQuota()
+    {
+        ArrayList<DiskImage> disks = (ArrayList<DiskImage>) getSelectedItems();
+
+        if (disks == null || getWindow() != null)
+        {
+            return;
+        }
+
+        ChangeQuotaModel model = new ChangeQuotaModel();
+        setWindow(model);
+        
model.setTitle(ConstantsManager.getInstance().getConstants().assignQuotaForDisk());
+        model.setHashName("change_quota_disks"); //$NON-NLS-1$
+        model.StartProgress(null);
+        model.init(disks);
+
+        UICommand command = new UICommand("onChangeQuota", this); //$NON-NLS-1$
+        command.setTitle(ConstantsManager.getInstance().getConstants().ok());
+        command.setIsDefault(true);
+        model.getCommands().add(command);
+        command = new UICommand("Cancel", this); //$NON-NLS-1$
+        
command.setTitle(ConstantsManager.getInstance().getConstants().cancel());
+        command.setIsCancel(true);
+        model.getCommands().add(command);
+    }
+
+    private void onChangeQuota() {
+        ChangeQuotaModel model = (ChangeQuotaModel) getWindow();
+        ArrayList<VdcActionParametersBase> paramerterList = new 
ArrayList<VdcActionParametersBase>();
+
+        for (Object item : model.getItems())
+        {
+            ChangeQuotaItemModel itemModel = (ChangeQuotaItemModel) item;
+            DiskImage disk = (DiskImage) itemModel.getEntity();
+            VdcActionParametersBase parameters =
+                    new ChangeQuotaParameters(((Quota) 
itemModel.getQuota().getSelectedItem()).getId(),
+                            disk.getId(),
+                            disk.getstorage_ids().get(0),
+                            disk.getstorage_pool_id().getValue());
+            paramerterList.add(parameters);
+        }
+
+        model.StartProgress(null);
+
+        Frontend.RunMultipleAction(VdcActionType.ChangeQuotaForDisk, 
paramerterList,
+                new IFrontendMultipleActionAsyncCallback() {
+                    @Override
+                    public void Executed(FrontendMultipleActionAsyncResult 
result) {
+                        DiskListModel localModel = (DiskListModel) 
result.getState();
+                        localModel.StopProgress();
+                        Cancel();
+                    }
+                },
+                this);
+    }
+
     private void Copy()
     {
         ArrayList<DiskImage> disks = (ArrayList<DiskImage>) getSelectedItems();
@@ -498,6 +573,24 @@
         getRemoveCommand().setIsExecutionAllowed(disks != null && disks.size() 
> 0 && isRemoveCommandAvailable());
         getMoveCommand().setIsExecutionAllowed(disks != null && disks.size() > 
0 && isMoveCommandAvailable());
         getCopyCommand().setIsExecutionAllowed(disks != null && disks.size() > 
0 && isCopyCommandAvailable());
+        getChangeQuotaCommand().setIsAvailable(false);
+        if (getSystemTreeSelectedItem() != null
+                && getSystemTreeSelectedItem().getType() == 
SystemTreeItemType.DataCenter
+                &&
+                ((storage_pool) 
getSystemTreeSelectedItem().getEntity()).getQuotaEnforcementType() != 
QuotaEnforcementTypeEnum.DISABLED) {
+            getChangeQuotaCommand().setIsAvailable(true);
+            getChangeQuotaCommand().setIsExecutionAllowed(true);
+            if (disks != null && !disks.isEmpty()) {
+                for (Disk diskItem : disks) {
+                    if (diskItem.getDiskStorageType() != 
DiskStorageType.IMAGE) {
+                        getChangeQuotaCommand().setIsExecutionAllowed(false);
+                        break;
+                    }
+                }
+            } else {
+                getChangeQuotaCommand().setIsExecutionAllowed(false);
+            }
+        }
     }
 
     private boolean isMoveCommandAvailable() {
@@ -609,6 +702,10 @@
         else if (StringHelper.stringsEqual(command.getName(), "OnRemove")) 
//$NON-NLS-1$
         {
             OnRemove();
+        } else if (command == getChangeQuotaCommand()) {
+            changeQuota();
+        } else if (command.getName().equals("onChangeQuota")) { //$NON-NLS-1$
+            onChangeQuota();
         }
     }
 
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/quota/ChangeQuotaItemModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/quota/ChangeQuotaItemModel.java
new file mode 100644
index 0000000..9ac290e
--- /dev/null
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/quota/ChangeQuotaItemModel.java
@@ -0,0 +1,41 @@
+package org.ovirt.engine.ui.uicommonweb.models.quota;
+
+import org.ovirt.engine.ui.uicommonweb.models.EntityModel;
+import org.ovirt.engine.ui.uicommonweb.models.ListModel;
+
+public class ChangeQuotaItemModel extends EntityModel {
+    EntityModel object;
+    EntityModel currentQuota;
+    ListModel quota;
+
+    public ChangeQuotaItemModel() {
+        object = new EntityModel();
+        currentQuota = new EntityModel();
+        quota = new ListModel();
+    }
+
+    public EntityModel getObject() {
+        return object;
+    }
+
+    public void setObject(EntityModel object) {
+        this.object = object;
+    }
+
+    public EntityModel getCurrentQuota() {
+        return currentQuota;
+    }
+
+    public void setCurrentQuota(EntityModel currentQuota) {
+        this.currentQuota = currentQuota;
+    }
+
+    public ListModel getQuota() {
+        return quota;
+    }
+
+    public void setQuota(ListModel quota) {
+        this.quota = quota;
+    }
+
+}
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/quota/ChangeQuotaModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/quota/ChangeQuotaModel.java
new file mode 100644
index 0000000..904b095
--- /dev/null
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/quota/ChangeQuotaModel.java
@@ -0,0 +1,61 @@
+package org.ovirt.engine.ui.uicommonweb.models.quota;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.ovirt.engine.core.common.businessentities.DiskImage;
+import org.ovirt.engine.core.common.businessentities.Quota;
+import 
org.ovirt.engine.core.common.queries.GetAllRelevantQuotasForStorageParameters;
+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.models.ListModel;
+import org.ovirt.engine.ui.uicompat.FrontendMultipleQueryAsyncResult;
+import org.ovirt.engine.ui.uicompat.IFrontendMultipleQueryAsyncCallback;
+
+public class ChangeQuotaModel extends ListModel {
+
+    public void init(final ArrayList<DiskImage> disks) {
+        final Map<Guid, List<Quota>> storageDomainIdMap = new HashMap<Guid, 
List<Quota>>();
+        ArrayList<VdcQueryType> queryTypeList = new ArrayList<VdcQueryType>();
+        ArrayList<VdcQueryParametersBase> queryParamsList = new 
ArrayList<VdcQueryParametersBase>();
+
+        for (DiskImage diskImage : disks) {
+            if (storageDomainIdMap.containsKey(diskImage.getId())) {
+                continue;
+            }
+            storageDomainIdMap.put(diskImage.getId(), new ArrayList<Quota>());
+            queryTypeList.add(VdcQueryType.GetAllRelevantQuotasForStorage);
+            queryParamsList.add(new 
GetAllRelevantQuotasForStorageParameters(diskImage.getstorage_ids().get(0)));
+        }
+
+        Frontend.RunMultipleQueries(queryTypeList, queryParamsList, new 
IFrontendMultipleQueryAsyncCallback() {
+
+            @Override
+            public void Executed(FrontendMultipleQueryAsyncResult result) {
+                storageDomainIdMap.clear();
+                for (int i = 0; i < result.getReturnValues().size(); i++) {
+                    VdcQueryReturnValue retVal = 
result.getReturnValues().get(i);
+                    Guid storageId =
+                            ((GetAllRelevantQuotasForStorageParameters) 
result.getParameters().get(i)).getStorageId();
+                    storageDomainIdMap.put(storageId, (ArrayList<Quota>) 
retVal.getReturnValue());
+                }
+                ArrayList<ChangeQuotaItemModel> list = new 
ArrayList<ChangeQuotaItemModel>();
+                for (DiskImage diskImage : disks) {
+                    ChangeQuotaItemModel itemModel = new 
ChangeQuotaItemModel();
+                    itemModel.setEntity(diskImage);
+                    itemModel.getObject().setEntity(diskImage.getDiskAlias());
+                    
itemModel.getCurrentQuota().setEntity(diskImage.getQuotaName());
+                    
itemModel.getQuota().setItems(storageDomainIdMap.get(diskImage.getstorage_ids().get(0)));
+                    list.add(itemModel);
+                }
+                ChangeQuotaModel.this.setItems(list);
+                ChangeQuotaModel.this.StopProgress();
+            }
+        });
+    }
+}
diff --git 
a/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/Constants.java
 
b/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/Constants.java
index 26ec0a2..bac772d 100644
--- 
a/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/Constants.java
+++ 
b/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/Constants.java
@@ -1486,4 +1486,7 @@
 
     @DefaultStringValue("disk_type=")
     String diskTypeSearchPrefix();
+
+    @DefaultStringValue("Assign Disk Quota")
+    String assignQuotaForDisk();
 }
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 9144b0e..8a2e20e 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
@@ -2173,4 +2173,7 @@
 
     @DefaultStringValue("Quota Storage")
     String quotaStorage();
+
+    @DefaultStringValue("Assign Quota")
+    String assignQuota();
 }
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/PresenterModule.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/PresenterModule.java
index e0fc776..0115edf 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/PresenterModule.java
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/PresenterModule.java
@@ -48,6 +48,7 @@
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.popup.host.SetupNetworksManagementPopupPresenterWidget;
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.popup.pool.PoolEditPopupPresenterWidget;
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.popup.pool.PoolNewPopupPresenterWidget;
+import 
org.ovirt.engine.ui.webadmin.section.main.presenter.popup.quota.ChangeQuotaPopupPresenterWidget;
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.popup.quota.EditQuotaClusterPopupPresenterWidget;
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.popup.quota.EditQuotaStoragePopupPresenterWidget;
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.popup.quota.QuotaPopupPresenterWidget;
@@ -210,6 +211,7 @@
 import 
org.ovirt.engine.ui.webadmin.section.main.view.popup.host.SetupNetworksManagementPopupView;
 import 
org.ovirt.engine.ui.webadmin.section.main.view.popup.pool.PoolEditPopupView;
 import 
org.ovirt.engine.ui.webadmin.section.main.view.popup.pool.PoolNewPopupView;
+import 
org.ovirt.engine.ui.webadmin.section.main.view.popup.quota.ChangeQuotaPopupView;
 import 
org.ovirt.engine.ui.webadmin.section.main.view.popup.quota.EditQuotaClusterPopupView;
 import 
org.ovirt.engine.ui.webadmin.section.main.view.popup.quota.EditQuotaStoragePopupView;
 import 
org.ovirt.engine.ui.webadmin.section.main.view.popup.quota.QuotaPopupView;
@@ -870,6 +872,9 @@
         bindPresenterWidget(DisksAllocationPopupPresenterWidget.class,
                 DisksAllocationPopupPresenterWidget.ViewDef.class,
                 DisksAllocationPopupView.class);
+        bindPresenterWidget(ChangeQuotaPopupPresenterWidget.class,
+                ChangeQuotaPopupPresenterWidget.ViewDef.class,
+                ChangeQuotaPopupView.class);
 
         // Storage Remove
         bindPresenterWidget(StorageRemovePopupPresenterWidget.class,
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/uicommon/DiskModule.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/uicommon/DiskModule.java
index 0bfe004..5ba54d0 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/uicommon/DiskModule.java
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/uicommon/DiskModule.java
@@ -24,6 +24,7 @@
 import org.ovirt.engine.ui.uicommonweb.models.disks.DiskVmListModel;
 import org.ovirt.engine.ui.webadmin.gin.ClientGinjector;
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.popup.PermissionsPopupPresenterWidget;
+import 
org.ovirt.engine.ui.webadmin.section.main.presenter.popup.quota.ChangeQuotaPopupPresenterWidget;
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.popup.storage.DisksAllocationPopupPresenterWidget;
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.popup.vm.VmDiskPopupPresenterWidget;
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.popup.vm.VmDiskRemovePopupPresenterWidget;
@@ -42,7 +43,8 @@
     public MainModelProvider<Disk, DiskListModel> 
getDiskListProvider(ClientGinjector ginjector,
             final Provider<VmDiskPopupPresenterWidget> newPopupProvider,
             final Provider<VmDiskRemovePopupPresenterWidget> 
removeConfirmPopupProvider,
-            final Provider<DisksAllocationPopupPresenterWidget> 
moveOrCopyPopupProvider) {
+            final Provider<DisksAllocationPopupPresenterWidget> 
moveOrCopyPopupProvider,
+            final Provider<ChangeQuotaPopupPresenterWidget> 
changeQutoaPopupProvider) {
         return new MainTabModelProvider<Disk, DiskListModel>(ginjector, 
DiskListModel.class) {
 
             @Override
@@ -54,6 +56,8 @@
                 else if (lastExecutedCommand == getModel().getMoveCommand()
                         || lastExecutedCommand == getModel().getCopyCommand()) 
{
                     return moveOrCopyPopupProvider.get();
+                } else if (lastExecutedCommand == 
getModel().getChangeQuotaCommand()) {
+                    return changeQutoaPopupProvider.get();
                 } else {
                     return super.getModelPopup(source, lastExecutedCommand, 
windowModel);
                 }
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/popup/quota/ChangeQuotaPopupPresenterWidget.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/popup/quota/ChangeQuotaPopupPresenterWidget.java
new file mode 100644
index 0000000..bbc6aff
--- /dev/null
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/popup/quota/ChangeQuotaPopupPresenterWidget.java
@@ -0,0 +1,19 @@
+package org.ovirt.engine.ui.webadmin.section.main.presenter.popup.quota;
+
+import 
org.ovirt.engine.ui.common.presenter.AbstractModelBoundPopupPresenterWidget;
+import org.ovirt.engine.ui.uicommonweb.models.quota.ChangeQuotaModel;
+
+import com.google.gwt.event.shared.EventBus;
+import com.google.inject.Inject;
+
+public class ChangeQuotaPopupPresenterWidget extends 
AbstractModelBoundPopupPresenterWidget<ChangeQuotaModel, 
ChangeQuotaPopupPresenterWidget.ViewDef> {
+
+    public interface ViewDef extends 
AbstractModelBoundPopupPresenterWidget.ViewDef<ChangeQuotaModel> {
+    }
+
+    @Inject
+    public ChangeQuotaPopupPresenterWidget(EventBus eventBus, ViewDef view) {
+        super(eventBus, view);
+    }
+
+}
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/quota/ChangeQuotaPopupView.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/quota/ChangeQuotaPopupView.java
new file mode 100644
index 0000000..e4a5408
--- /dev/null
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/quota/ChangeQuotaPopupView.java
@@ -0,0 +1,45 @@
+package org.ovirt.engine.ui.webadmin.section.main.view.popup.quota;
+
+import org.ovirt.engine.ui.common.view.popup.AbstractModelBoundPopupView;
+import org.ovirt.engine.ui.common.widget.dialog.SimpleDialogPanel;
+import org.ovirt.engine.ui.common.widget.uicommon.popup.quota.ChangeQuotaView;
+import org.ovirt.engine.ui.uicommonweb.models.quota.ChangeQuotaModel;
+import org.ovirt.engine.ui.webadmin.ApplicationConstants;
+import org.ovirt.engine.ui.webadmin.ApplicationResources;
+import 
org.ovirt.engine.ui.webadmin.section.main.presenter.popup.quota.ChangeQuotaPopupPresenterWidget;
+
+import com.google.gwt.core.client.GWT;
+import com.google.gwt.event.shared.EventBus;
+import com.google.gwt.uibinder.client.UiBinder;
+import com.google.gwt.uibinder.client.UiField;
+import com.google.inject.Inject;
+
+public class ChangeQuotaPopupView extends 
AbstractModelBoundPopupView<ChangeQuotaModel> implements 
ChangeQuotaPopupPresenterWidget.ViewDef {
+
+    interface ViewUiBinder extends UiBinder<SimpleDialogPanel, 
ChangeQuotaPopupView> {
+        ViewUiBinder uiBinder = GWT.create(ViewUiBinder.class);
+    }
+
+    @UiField(provided = true)
+    @Ignore
+    ChangeQuotaView changeQuotaView;
+
+    @Inject
+    public ChangeQuotaPopupView(EventBus eventBus, ApplicationResources 
resources, ApplicationConstants constants) {
+        super(eventBus, resources);
+
+        changeQuotaView = new ChangeQuotaView(constants);
+        initWidget(ViewUiBinder.uiBinder.createAndBindUi(this));
+    }
+
+    @Override
+    public void edit(ChangeQuotaModel object) {
+        changeQuotaView.edit(object);
+    }
+
+    @Override
+    public ChangeQuotaModel flush() {
+        return changeQuotaView.flush();
+    }
+
+}
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/quota/ChangeQuotaPopupView.ui.xml
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/quota/ChangeQuotaPopupView.ui.xml
new file mode 100644
index 0000000..40d70ac
--- /dev/null
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/quota/ChangeQuotaPopupView.ui.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent";>
+<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder"
+       xmlns:g="urn:import:com.google.gwt.user.client.ui" 
xmlns:d="urn:import:org.ovirt.engine.ui.common.widget.dialog"
+       xmlns:e="urn:import:org.ovirt.engine.ui.webadmin.widget.editor" 
xmlns:w="urn:import:org.ovirt.engine.ui.common.widget.uicommon.popup.quota">
+
+       <ui:with field='constants' 
type='org.ovirt.engine.ui.webadmin.ApplicationConstants' />  
+
+       <ui:style>
+               .ChangeQuotaViewPanel {
+               }
+       </ui:style>
+       
+       <d:SimpleDialogPanel width="340px" height="300px">
+               <d:content>
+                       <g:FlowPanel>
+                               <w:ChangeQuotaView ui:field="changeQuotaView" 
addStyleNames="{style.ChangeQuotaViewPanel}" />
+                       </g:FlowPanel>
+               </d:content>
+       </d:SimpleDialogPanel>
+       
+</ui:UiBinder>
\ No newline at end of file
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/MainTabDiskView.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/MainTabDiskView.java
index b859d1b..1195d4f 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/MainTabDiskView.java
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/MainTabDiskView.java
@@ -173,6 +173,13 @@
                 return getMainModel().getCopyCommand();
             }
         });
+
+        getTable().addActionButton(new 
WebAdminButtonDefinition<Disk>(constants.assignQuota()) {
+            @Override
+            protected UICommand resolveCommand() {
+                return getMainModel().getChangeQuotaCommand();
+            }
+        });
     }
 
     void searchByDiskViewType(Object diskViewType) {


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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I1b2abe42ada902e8a247cb4638900f34b4c4e0df
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