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