Tomas Jelinek has uploaded a new change for review. Change subject: webadmin: Add/Edit VM disks from VM dialog ......................................................................
webadmin: Add/Edit VM disks from VM dialog WIP Change-Id: I49f85c20d5bb4cdd32755ef172bb0d3ac49518bc Signed-off-by: Tomas Jelinek <[email protected]> --- 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/instanceimages/InstanceImageLineEditor.java A frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/instanceimages/InstanceImageLineEditor.ui.xml A frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/instanceimages/InstanceImagesEditor.java A frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/instanceimages/InstanceImagesEditor.ui.xml M frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/AbstractVmPopupWidget.java M frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/AbstractVmPopupWidget.ui.xml A frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/InstanceImageLineModel.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/UnitVmModel.java 9 files changed, 321 insertions(+), 1 deletion(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/70/35170/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 68da609..98bdb27 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 @@ -562,6 +562,15 @@ @DefaultStringValue("Instance Type") String instanceType(); + @DefaultStringValue("Instance Images") + String instanceImages(); + + @DefaultStringValue("Edit") + String editInstanceImages(); + + @DefaultStringValue("Add") + String addInstanceImages(); + @DefaultStringValue("Memory Size") String memSizeVmPopup(); diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/instanceimages/InstanceImageLineEditor.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/instanceimages/InstanceImageLineEditor.java new file mode 100644 index 0000000..d7d3e94 --- /dev/null +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/instanceimages/InstanceImageLineEditor.java @@ -0,0 +1,107 @@ +package org.ovirt.engine.ui.common.widget.uicommon.instanceimages; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.editor.client.SimpleBeanEditorDriver; +import com.google.gwt.event.dom.client.ClickEvent; +import com.google.gwt.event.logical.shared.HasValueChangeHandlers; +import com.google.gwt.event.logical.shared.ValueChangeEvent; +import com.google.gwt.event.logical.shared.ValueChangeHandler; +import com.google.gwt.event.shared.HandlerRegistration; +import com.google.gwt.uibinder.client.UiBinder; +import com.google.gwt.uibinder.client.UiField; +import com.google.gwt.uibinder.client.UiHandler; +import com.google.gwt.user.client.ui.FlowPanel; +import com.google.gwt.user.client.ui.HasEnabled; +import com.google.gwt.user.client.ui.Label; +import com.google.gwt.user.client.ui.PushButton; +import org.ovirt.engine.ui.common.CommonApplicationConstants; +import org.ovirt.engine.ui.common.idhandler.ElementIdHandler; +import org.ovirt.engine.ui.common.widget.uicommon.popup.AbstractModelBoundPopupWidget; +import org.ovirt.engine.ui.uicommonweb.models.vms.InstanceImageLineModel; +import org.ovirt.engine.ui.uicompat.Event; +import org.ovirt.engine.ui.uicompat.EventArgs; +import org.ovirt.engine.ui.uicompat.IEventListener; + +public class InstanceImageLineEditor extends AbstractModelBoundPopupWidget<InstanceImageLineModel> implements HasValueChangeHandlers<InstanceImageLineModel>, HasEnabled { + + @UiField + @Path("name.entity") + Label nameLabel; + + @UiField + @Ignore + PushButton addEditButton; + + private InstanceImageLineModel model; + + public interface Driver extends SimpleBeanEditorDriver<InstanceImageLineModel, InstanceImageLineEditor> { + } + + private final Driver driver = GWT.create(Driver.class); + + @UiField + CommonApplicationConstants constants; + + interface WidgetUiBinder extends UiBinder<FlowPanel, InstanceImageLineEditor> { + WidgetUiBinder uiBinder = GWT.create(WidgetUiBinder.class); + } + + interface WidgetIdHandler extends ElementIdHandler<InstanceImageLineEditor> { + WidgetIdHandler idHandler = GWT.create(WidgetIdHandler.class); + } + + public InstanceImageLineEditor() { + initWidget(WidgetUiBinder.uiBinder.createAndBindUi(this)); + WidgetIdHandler.idHandler.generateAndSetIds(this); + driver.initialize(this); + } + + @UiHandler("addEditButton") + void handleClick(ClickEvent event) { + model.doEdit(); + } + + @Override + public void edit(final InstanceImageLineModel model) { + this.model = model; + driver.edit(model); + + updateButtonText(model); + + model.getDisk().getEntityChangedEvent().addListener(new IEventListener<EventArgs>() { + @Override + public void eventRaised(Event<? extends EventArgs> ev, Object sender, EventArgs args) { + ValueChangeEvent.fire(InstanceImageLineEditor.this, model); + + updateButtonText(model); + } + }); + } + + private void updateButtonText(InstanceImageLineModel model) { + String text = model.getDisk().getEntity() != null ? constants.editInstanceImages() : constants.addInstanceImages(); + addEditButton.getUpFace().setText(text); + addEditButton.getDownFace().setText(text); + } + + @Override + public InstanceImageLineModel flush() { + return driver.flush(); + } + + @Override + public boolean isEnabled() { + return false; + } + + @Override + public void setEnabled(boolean b) { + + } + + @Override + public HandlerRegistration addValueChangeHandler(ValueChangeHandler<InstanceImageLineModel> valueChangeHandler) { + return addHandler(valueChangeHandler, ValueChangeEvent.getType()); + } + +} diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/instanceimages/InstanceImageLineEditor.ui.xml b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/instanceimages/InstanceImageLineEditor.ui.xml new file mode 100644 index 0000000..5f2ea65 --- /dev/null +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/instanceimages/InstanceImageLineEditor.ui.xml @@ -0,0 +1,26 @@ +<?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"> + + <ui:with field='constants' type='org.ovirt.engine.ui.common.CommonApplicationConstants'/> + + <ui:style> + .mainPanel { + width: 330px; + } + + .buttonStyle { + width: 40px; + float: right; + } + + .labelStyle { + float: left; + } + </ui:style> + + <g:FlowPanel addStyleNames="{style.mainPanel}"> + <g:Label ui:field="nameLabel" addStyleNames="{style.labelStyle}"/> + <g:PushButton ui:field="addEditButton" text="{constants.addInstanceImages}" addStyleNames="{style.buttonStyle}"/> + </g:FlowPanel> +</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/instanceimages/InstanceImagesEditor.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/instanceimages/InstanceImagesEditor.java new file mode 100644 index 0000000..9f91cc4 --- /dev/null +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/instanceimages/InstanceImagesEditor.java @@ -0,0 +1,42 @@ +package org.ovirt.engine.ui.common.widget.uicommon.instanceimages; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.uibinder.client.UiBinder; +import com.google.gwt.user.client.ui.Widget; +import org.ovirt.engine.ui.common.idhandler.ElementIdHandler; +import org.ovirt.engine.ui.common.widget.AddRemoveRowWidget; +import org.ovirt.engine.ui.uicommonweb.models.ListModel; +import org.ovirt.engine.ui.uicommonweb.models.vms.InstanceImageLineModel; + +public class InstanceImagesEditor extends AddRemoveRowWidget<ListModel<InstanceImageLineModel>, InstanceImageLineModel, InstanceImageLineEditor> { + + interface WidgetUiBinder extends UiBinder<Widget, InstanceImagesEditor> { + WidgetUiBinder uiBinder = GWT.create(WidgetUiBinder.class); + } + + interface WidgetIdHandler extends ElementIdHandler<InstanceImagesEditor> { + WidgetIdHandler idHandler = GWT.create(WidgetIdHandler.class); + } + + public InstanceImagesEditor() { + initWidget(WidgetUiBinder.uiBinder.createAndBindUi(this)); + WidgetIdHandler.idHandler.generateAndSetIds(this); + } + + @Override + protected InstanceImageLineEditor createWidget(InstanceImageLineModel value) { + InstanceImageLineEditor editor = new InstanceImageLineEditor(); + editor.edit(value); + return editor; + } + + @Override + protected InstanceImageLineModel createGhostValue() { + return new InstanceImageLineModel(); + } + + @Override + protected boolean isGhost(InstanceImageLineModel value) { + return value.isGhost(); + } +} diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/instanceimages/InstanceImagesEditor.ui.xml b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/instanceimages/InstanceImagesEditor.ui.xml new file mode 100644 index 0000000..96ddcf9 --- /dev/null +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/instanceimages/InstanceImagesEditor.ui.xml @@ -0,0 +1,35 @@ +<?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"> + + <ui:with field='constants' type='org.ovirt.engine.ui.common.CommonApplicationConstants'/> + + <ui:style type="org.ovirt.engine.ui.common.widget.AddRemoveRowWidget.WidgetStyle"> + .buttonStyle { + padding-left: 2px; + padding-top: 2px; + margin-top: 6px; + margin-left: 10px; + } + + .titleStyle { + padding: 0 5px; + margin-left: 5px; + float: left; + width: 100%; + } + + .mainPanel { + width: 100%; + } + + .contentPanel { + padding-right: 10px; + } + </ui:style> + + <g:FlowPanel addStyleNames="{style.mainPanel}"> + <g:Label addStyleNames="{style.titleStyle}"/> + <g:FlowPanel ui:field="contentPanel" addStyleNames="{style.contentPanel}"/> + </g:FlowPanel> +</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/AbstractVmPopupWidget.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/AbstractVmPopupWidget.java index 1f2dad9..d94f946 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/AbstractVmPopupWidget.java +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/AbstractVmPopupWidget.java @@ -73,6 +73,7 @@ import org.ovirt.engine.ui.common.widget.renderer.MemorySizeRenderer; import org.ovirt.engine.ui.common.widget.renderer.NullSafeRenderer; import org.ovirt.engine.ui.common.widget.table.column.TextColumnWithTooltip; +import org.ovirt.engine.ui.common.widget.uicommon.instanceimages.InstanceImagesEditor; import org.ovirt.engine.ui.common.widget.uicommon.popup.vm.PopupWidgetConfig; import org.ovirt.engine.ui.common.widget.uicommon.popup.vm.PopupWidgetConfigMap; import org.ovirt.engine.ui.common.widget.uicommon.popup.vm.SerialNumberPolicyWidget; @@ -233,6 +234,11 @@ @UiField public Panel logicalNetworksEditorPanel; + + @UiField + @Ignore + // todo element id handling + public InstanceImagesEditor instanceImagesEditor; @UiField @Ignore @@ -1433,6 +1439,7 @@ priorityEditor.asEditor().edit(model.getPriority()); driver.edit(model); profilesInstanceTypeEditor.edit(model.getNicsWithLogicalNetworks()); + instanceImagesEditor.edit(model.getInstanceImages()); customPropertiesSheetEditor.edit(model.getCustomPropertySheet()); vmInitEditor.edit(model.getVmInitModel()); serialNumberPolicyEditor.edit(model.getSerialNumberPolicy()); diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/AbstractVmPopupWidget.ui.xml b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/AbstractVmPopupWidget.ui.xml index 91e40ab..5a9bbc5 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/AbstractVmPopupWidget.ui.xml +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/AbstractVmPopupWidget.ui.xml @@ -9,7 +9,8 @@ xmlns:s="urn:import:org.ovirt.engine.ui.common.widget.uicommon.storage" xmlns:k="urn:import:org.ovirt.engine.ui.common.widget.form.key_value" xmlns:p="urn:import:org.ovirt.engine.ui.common.widget.profile" - xmlns:vm="urn:import:org.ovirt.engine.ui.common.widget.uicommon.popup.vm"> + xmlns:vm="urn:import:org.ovirt.engine.ui.common.widget.uicommon.popup.vm" + xmlns:ii="urn:import:org.ovirt.engine.ui.common.widget.uicommon.instanceimages"> <ui:with field='resources' type='org.ovirt.engine.ui.common.CommonApplicationResources' /> <ui:with field='constants' type='org.ovirt.engine.ui.common.CommonApplicationConstants'/> @@ -498,6 +499,9 @@ <ge:EntityModelCheckBoxEditor ui:field="isDeleteProtectedEditor" contentWidgetStyleName="{style.horizontallyAlignedCheckBoxContent}" addStyleNames="{style.horizontallyAlignedCheckBox}" /> <ge:EntityModelCheckBoxEditor ui:field="copyTemplatePermissionsEditor" contentWidgetStyleName="{style.horizontallyAlignedCheckBoxContent}" addStyleNames="{style.horizontallyAlignedCheckBox}" /> </g:FlowPanel> + <g:FlowPanel addStyleNames="{style.sectionPanel}"> + <ii:InstanceImagesEditor ui:field="instanceImagesEditor"/> + </g:FlowPanel> <g:FlowPanel ui:field="logicalNetworksEditorPanel" addStyleNames="{style.sectionPanel}"> <p:ProfilesInstanceTypeEditor ui:field="profilesInstanceTypeEditor" /> </g:FlowPanel> diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/InstanceImageLineModel.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/InstanceImageLineModel.java new file mode 100644 index 0000000..00c93ee --- /dev/null +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/InstanceImageLineModel.java @@ -0,0 +1,79 @@ +package org.ovirt.engine.ui.uicommonweb.models.vms; + +import org.ovirt.engine.core.common.businessentities.Disk; +import org.ovirt.engine.ui.uicommonweb.models.EntityModel; +import org.ovirt.engine.ui.uicompat.Event; +import org.ovirt.engine.ui.uicompat.EventArgs; +import org.ovirt.engine.ui.uicompat.IEventListener; + +public class InstanceImageLineModel extends EntityModel { + + private EntityModel<Disk> disk = new EntityModel<>(); + + private EntityModel<String> name = new EntityModel<>(); + + public InstanceImageLineModel() { + disk.getEntityChangedEvent().addListener(new IEventListener<EventArgs>() { + @Override + public void eventRaised(Event<? extends EventArgs> ev, Object sender, EventArgs args) { + fillData(); + } + }); + + } + + private void fillData() { + if (disk.getEntity() == null) { + return; + } + + name.setEntity(disk.getEntity().getLogicalName()); + } + + public void initialize(Disk disk) { + this.disk.setEntity(disk); + + fillData(); + } + + public EntityModel<Disk> getDisk() { + return disk; + } + + public EntityModel<String> getName() { + return name; + } + + public void setName(EntityModel<String> name) { + this.name = name; + } + + public boolean isGhost() { + return disk.getEntity() == null; + } + + public void doEdit() { + disk.setEntity(new Disk() { + + @Override + public String getLogicalName() { + return "some name"; //$NON-NLS-1$ + } + + @Override + public boolean isAllowSnapshot() { + return false; + } + + @Override + public DiskStorageType getDiskStorageType() { + return null; + } + + @Override + public long getSize() { + return 0; + } + }); + } +} diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/UnitVmModel.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/UnitVmModel.java index e20561e..63db90c 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/UnitVmModel.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/UnitVmModel.java @@ -416,6 +416,16 @@ return instanceTypes; } + private NotChangableForVmInPoolListModel<InstanceImageLineModel> instanceImages; + + public ListModel<InstanceImageLineModel> getInstanceImages() { + return instanceImages; + } + + public void setInstanceImages(NotChangableForVmInPoolListModel<InstanceImageLineModel> instanceImages) { + this.instanceImages = instanceImages; + } + private NotChangableForVmInPoolListModel<VmType> vmType; public void setVmType(NotChangableForVmInPoolListModel<VmType> vmType) { @@ -1453,6 +1463,7 @@ getTemplate().getSelectedItemChangedEvent().addListener(this); setInstanceTypes(new NotChangableForVmInPoolListModel<InstanceType>()); + setInstanceImages(new NotChangableForVmInPoolListModel<InstanceImageLineModel>()); setQuota(new NotChangableForVmInPoolListModel<Quota>()); getQuota().setIsAvailable(false); -- To view, visit http://gerrit.ovirt.org/35170 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I49f85c20d5bb4cdd32755ef172bb0d3ac49518bc Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Tomas Jelinek <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
