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

Reply via email to