Lior Vernia has uploaded a new change for review.

Change subject: webadmin: VnicProfilesEditor to inherit AddRemoveRowWidget
......................................................................

webadmin: VnicProfilesEditor to inherit AddRemoveRowWidget

This to promote a uniform look between these similar widgets, as well
as code reuse.

Change-Id: If66c23bddada57fbfd95292dc2cc1f6c8d9df19e
Signed-off-by: Lior Vernia <lver...@redhat.com>
---
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/datacenters/EditNetworkModel.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/datacenters/NetworkModel.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/datacenters/NewNetworkModel.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/profiles/NewVnicProfileModel.java
M 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/popup/AbstractNetworkPopupPresenterWidget.java
M 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/AbstractNetworkPopupView.java
M 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/vnicProfile/VnicProfileWidget.java
M 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/vnicProfile/VnicProfilesEditor.java
M 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/vnicProfile/VnicProfilesEditor.ui.xml
9 files changed, 178 insertions(+), 176 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/92/20492/1

diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/datacenters/EditNetworkModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/datacenters/EditNetworkModel.java
index 9b01e3d..b3781d4 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/datacenters/EditNetworkModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/datacenters/EditNetworkModel.java
@@ -107,14 +107,8 @@
                     profilesModels.add(editModel);
                     editModel.getName().setIsChangable(false);
                 }
-                if (profilesModels.isEmpty()) {
-                    if ((Boolean) getIsVmNetwork().getEntity()) {
-                        VnicProfileModel newProfileModel = new 
NewVnicProfileModel(getSourceListModel(),
-                                getSelectedDc().getcompatibility_version(), 
false, getSelectedDc().getId());
-                        profilesModels.add(newProfileModel);
-                    } else {
-                        profilesModels.add(createDefaultProfile());
-                    }
+                if (profilesModels.isEmpty() && !(Boolean) 
getIsVmNetwork().getEntity()) {
+                    profilesModels.add(getDefaultProfile());
                 }
                 getProfiles().setItems(profilesModels);
                 originalProfileModels = profilesModels;
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/datacenters/NetworkModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/datacenters/NetworkModel.java
index a1abbe1..cc4e1ce 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/datacenters/NetworkModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/datacenters/NetworkModel.java
@@ -58,6 +58,7 @@
     private ListModel profiles;
     private final Network network;
     private final ListModel sourceListModel;
+    private VnicProfileModel defaultProfile;
 
     public NetworkModel(ListModel sourceListModel)
     {
@@ -130,37 +131,6 @@
         onExportChanged();
         updateVlanTagChangeability();
         updateMtuChangeability();
-    }
-
-    protected VnicProfileModel createDefaultProfile() {
-        final NewVnicProfileModel newModel =
-                new NewVnicProfileModel(getSourceListModel(), 
getSelectedDc().getcompatibility_version(), false,
-                        getSelectedDc().getId());
-
-        // make sure default profile's name is in sync with network's name
-        newModel.getName().setEntity(getName().getEntity());
-        final IEventListener networkNameListener = new IEventListener() {
-
-            @Override
-            public void eventRaised(Event ev, Object sender, EventArgs args) {
-                newModel.getName().setEntity(getName().getEntity());
-            }
-        };
-        getName().getEntityChangedEvent().addListener(networkNameListener);
-
-        // if user overrides default name, stop tracking network's name
-        newModel.getName().getEntityChangedEvent().addListener(new 
IEventListener() {
-
-            @Override
-            public void eventRaised(Event ev, Object sender, EventArgs args) {
-                if 
(!newModel.getName().getEntity().equals(getName().getEntity())) {
-                    
getName().getEntityChangedEvent().removeListener(networkNameListener);
-                    
newModel.getName().getEntityChangedEvent().removeListener(this);
-                }
-            }
-        });
-
-        return newModel;
     }
 
     private void initExternalProviderList() {
@@ -359,6 +329,44 @@
         return sourceListModel;
     }
 
+    public VnicProfileModel getDefaultProfile() {
+        if (defaultProfile == null) {
+            defaultProfile = createDefaultProfile();
+        }
+        return defaultProfile;
+    }
+
+    private VnicProfileModel createDefaultProfile() {
+        final NewVnicProfileModel newModel =
+                new NewVnicProfileModel(getSourceListModel(), 
getSelectedDc().getcompatibility_version(), false,
+                        getSelectedDc().getId());
+
+        // make sure default profile's name is in sync with network's name
+        newModel.getName().setEntity(getName().getEntity());
+        final IEventListener networkNameListener = new IEventListener() {
+
+            @Override
+            public void eventRaised(Event ev, Object sender, EventArgs args) {
+                newModel.getName().setEntity(getName().getEntity());
+            }
+        };
+        getName().getEntityChangedEvent().addListener(networkNameListener);
+
+        // if user overrides default name, stop tracking network's name
+        newModel.getName().getEntityChangedEvent().addListener(new 
IEventListener() {
+
+            @Override
+            public void eventRaised(Event ev, Object sender, EventArgs args) {
+                if 
(!newModel.getName().getEntity().equals(getName().getEntity())) {
+                    
getName().getEntityChangedEvent().removeListener(networkNameListener);
+                    
newModel.getName().getEntityChangedEvent().removeListener(this);
+                }
+            }
+        });
+
+        return newModel;
+    }
+
     public boolean validate()
     {
         RegexValidation tempVar = new RegexValidation();
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/datacenters/NewNetworkModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/datacenters/NewNetworkModel.java
index 2830021..706edfd 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/datacenters/NewNetworkModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/datacenters/NewNetworkModel.java
@@ -112,7 +112,7 @@
         if (existingProfiles == null) {
             // first run (dialog has just been opened and default DC chosen), 
create default entry
             List<VnicProfileModel> profiles = new 
LinkedList<VnicProfileModel>();
-            profiles.add(createDefaultProfile());
+            profiles.add(getDefaultProfile());
             getProfiles().setItems(profiles);
         } else {
             // not first run (user picked different DC), want to keep existing 
entries and update DC-related properties
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/profiles/NewVnicProfileModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/profiles/NewVnicProfileModel.java
index 709463b..c8de1d2 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/profiles/NewVnicProfileModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/profiles/NewVnicProfileModel.java
@@ -24,6 +24,10 @@
         this(sourceModel, dcCompatibilityVersion, true, dcId);
     }
 
+    public NewVnicProfileModel(Version dcCompatibilityVersion, Guid dcId) {
+        this(null, dcCompatibilityVersion, dcId);
+    }
+
     @Override
     protected void initCustomProperties() {
         // Do nothing
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/popup/AbstractNetworkPopupPresenterWidget.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/popup/AbstractNetworkPopupPresenterWidget.java
index c7f359f..8e75074 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/popup/AbstractNetworkPopupPresenterWidget.java
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/popup/AbstractNetworkPopupPresenterWidget.java
@@ -1,7 +1,12 @@
 package org.ovirt.engine.ui.webadmin.section.main.presenter.popup;
 
+import org.ovirt.engine.core.common.businessentities.StoragePool;
+import org.ovirt.engine.core.compat.Guid;
+import org.ovirt.engine.core.compat.Version;
 import 
org.ovirt.engine.ui.common.presenter.AbstractModelBoundPopupPresenterWidget;
+import org.ovirt.engine.ui.uicommonweb.models.ListModel;
 import org.ovirt.engine.ui.uicommonweb.models.datacenters.NetworkModel;
+import org.ovirt.engine.ui.uicommonweb.models.profiles.VnicProfileModel;
 import org.ovirt.engine.ui.uicompat.Event;
 import org.ovirt.engine.ui.uicompat.EventArgs;
 import org.ovirt.engine.ui.uicompat.IEventListener;
@@ -19,6 +24,8 @@
         void updateVisibility();
 
         void toggleProfilesVisibility(boolean visible);
+
+        void editProfiles(ListModel profiles, Version dcCompatibilityVersion, 
Guid dcId, VnicProfileModel defaultProfile);
     }
 
     public AbstractNetworkPopupPresenterWidget(EventBus eventBus, V view) {
@@ -50,6 +57,19 @@
                 getView().toggleProfilesVisibility((Boolean) 
model.getIsVmNetwork().getEntity());
             }
         });
+
+        IEventListener updateProfilesListener = new IEventListener() {
+            @Override
+            public void eventRaised(Event ev, Object sender, EventArgs args) {
+                StoragePool dc = model.getSelectedDc();
+                getView().editProfiles(model.getProfiles(),
+                        dc.getcompatibility_version(),
+                        dc.getId(),
+                        model.getDefaultProfile());
+            }
+        };
+        
model.getDataCenters().getSelectedItemChangedEvent().addListener(updateProfilesListener);
+        
model.getProfiles().getItemsChangedEvent().addListener(updateProfilesListener);
     }
 
     @Override
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/AbstractNetworkPopupView.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/AbstractNetworkPopupView.java
index 0b7bcc7..6b33ff6 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/AbstractNetworkPopupView.java
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/AbstractNetworkPopupView.java
@@ -4,6 +4,8 @@
 
 import org.ovirt.engine.core.common.businessentities.Provider;
 import org.ovirt.engine.core.common.businessentities.StoragePool;
+import org.ovirt.engine.core.compat.Guid;
+import org.ovirt.engine.core.compat.Version;
 import org.ovirt.engine.ui.common.idhandler.WithElementId;
 import org.ovirt.engine.ui.common.view.popup.AbstractModelBoundPopupView;
 import org.ovirt.engine.ui.common.widget.Align;
@@ -22,6 +24,7 @@
 import org.ovirt.engine.ui.uicommonweb.models.ListModel;
 import org.ovirt.engine.ui.uicommonweb.models.datacenters.NetworkClusterModel;
 import org.ovirt.engine.ui.uicommonweb.models.datacenters.NetworkModel;
+import org.ovirt.engine.ui.uicommonweb.models.profiles.VnicProfileModel;
 import org.ovirt.engine.ui.webadmin.ApplicationConstants;
 import org.ovirt.engine.ui.webadmin.ApplicationResources;
 import org.ovirt.engine.ui.webadmin.ApplicationTemplates;
@@ -131,7 +134,7 @@
     public EntityModelTextBoxEditor networkLabel;
 
     @UiField
-    @Path(value = "profiles.selectedItem")
+    @Ignore
     public VnicProfilesEditor profilesEditor;
 
     @UiField
@@ -371,6 +374,15 @@
         profilesTab.setVisible(visible);
     }
 
+    @Override
+    public void editProfiles(ListModel profiles,
+            Version dcCompatibilityVersion,
+            Guid dcId,
+            VnicProfileModel defaultProfile) {
+
+        profilesEditor.edit(profiles, dcCompatibilityVersion, dcId, 
defaultProfile);
+    }
+
     interface WidgetStyle extends CssResource {
         String mtuEditor();
 
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/vnicProfile/VnicProfileWidget.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/vnicProfile/VnicProfileWidget.java
index a802a28..075c2e4 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/vnicProfile/VnicProfileWidget.java
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/vnicProfile/VnicProfileWidget.java
@@ -16,13 +16,21 @@
 import org.ovirt.engine.ui.common.widget.Align;
 
 import com.google.gwt.core.client.GWT;
+import com.google.gwt.core.client.Scheduler;
+import com.google.gwt.core.client.Scheduler.ScheduledCommand;
 import com.google.gwt.editor.client.SimpleBeanEditorDriver;
+import com.google.gwt.event.dom.client.KeyPressEvent;
+import com.google.gwt.event.dom.client.KeyPressHandler;
+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.resources.client.CssResource;
 import com.google.gwt.uibinder.client.UiBinder;
 import com.google.gwt.uibinder.client.UiField;
 import com.google.gwt.user.client.ui.Widget;
 
-public class VnicProfileWidget extends 
AbstractModelBoundPopupWidget<VnicProfileModel> {
+public class VnicProfileWidget extends 
AbstractModelBoundPopupWidget<VnicProfileModel> implements 
HasValueChangeHandlers<VnicProfileModel> {
 
     interface Driver extends SimpleBeanEditorDriver<VnicProfileModel, 
VnicProfileWidget> {
     }
@@ -86,9 +94,26 @@
     }
 
     @Override
-    public void edit(VnicProfileModel model) {
+    public void edit(final VnicProfileModel model) {
         driver.edit(model);
         publicInfo.setVisible(model.getPublicUse().getIsAvailable());
+        nameEditor.addKeyPressHandler(new KeyPressHandler() {
+            @Override
+            public void onKeyPress(KeyPressEvent event) {
+                Scheduler.get().scheduleDeferred(new ScheduledCommand() {
+                    @Override
+                    public void execute() {
+                        ValueChangeEvent.fire(nameEditor.asValueBox(), 
nameEditor.asValueBox().getValue());
+                    }
+                });
+            }
+        });
+        nameEditor.asValueBox().addValueChangeHandler(new 
ValueChangeHandler<Object>() {
+            @Override
+            public void onValueChange(ValueChangeEvent<Object> event) {
+                ValueChangeEvent.fire(VnicProfileWidget.this, model);
+            }
+        });
     }
 
     @Override
@@ -96,6 +121,11 @@
         return driver.flush();
     }
 
+    @Override
+    public HandlerRegistration 
addValueChangeHandler(ValueChangeHandler<VnicProfileModel> handler) {
+        return addHandler(handler, ValueChangeEvent.getType());
+    }
+
     interface WidgetStyle extends CssResource {
         String name();
 
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/vnicProfile/VnicProfilesEditor.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/vnicProfile/VnicProfilesEditor.java
index 9cb15bb..c00ec29 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/vnicProfile/VnicProfilesEditor.java
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/vnicProfile/VnicProfilesEditor.java
@@ -1,156 +1,105 @@
 package org.ovirt.engine.ui.webadmin.widget.vnicProfile;
 
-import java.util.ArrayList;
 import java.util.Collection;
-import java.util.LinkedList;
-import java.util.List;
 
 import org.ovirt.engine.core.compat.Guid;
-import org.ovirt.engine.ui.common.CommonApplicationMessages;
-import org.ovirt.engine.ui.common.CommonApplicationResources;
-import org.ovirt.engine.ui.common.widget.editor.TakesConstrainedValueEditor;
+import org.ovirt.engine.core.compat.Version;
+import org.ovirt.engine.ui.common.widget.AddRemoveRowWidget;
+import org.ovirt.engine.ui.uicommonweb.Linq;
 import org.ovirt.engine.ui.uicommonweb.models.ListModel;
 import org.ovirt.engine.ui.uicommonweb.models.profiles.NewVnicProfileModel;
 import org.ovirt.engine.ui.uicommonweb.models.profiles.VnicProfileModel;
 
 import com.google.gwt.core.client.GWT;
-import com.google.gwt.editor.client.IsEditor;
-import com.google.gwt.editor.client.adapters.TakesValueEditor;
-import com.google.gwt.event.dom.client.ClickEvent;
-import com.google.gwt.event.dom.client.ClickHandler;
-import com.google.gwt.event.logical.shared.ValueChangeHandler;
-import com.google.gwt.event.shared.HandlerRegistration;
-import com.google.gwt.resources.client.CssResource;
+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.client.TakesValue;
-import com.google.gwt.user.client.ui.Composite;
-import com.google.gwt.user.client.ui.FlowPanel;
-import com.google.gwt.user.client.ui.HasConstrainedValue;
-import com.google.gwt.user.client.ui.HorizontalPanel;
-import com.google.gwt.user.client.ui.Image;
-import com.google.gwt.user.client.ui.PushButton;
 import com.google.gwt.user.client.ui.Widget;
 
-public class VnicProfilesEditor extends Composite implements 
IsEditor<TakesValueEditor<Object>>, TakesValue<Object>, 
HasConstrainedValue<Object> {
+public class VnicProfilesEditor extends AddRemoveRowWidget<ListModel, 
VnicProfileModel, VnicProfileWidget> {
 
-    @Override
-    public HandlerRegistration 
addValueChangeHandler(ValueChangeHandler<Object> handler) {
-        // not needed - there is no selected item because all are edited
-        return null;
+    interface Driver extends SimpleBeanEditorDriver<ListModel, 
VnicProfilesEditor> {
     }
+
+    private final Driver driver = GWT.create(Driver.class);
 
     interface WidgetUiBinder extends UiBinder<Widget, VnicProfilesEditor> {
         WidgetUiBinder uiBinder = GWT.create(WidgetUiBinder.class);
     }
 
-    @UiField
-    FlowPanel contentPanel;
-
-    @UiField
-    WidgetStyle style;
-
-    protected static final CommonApplicationMessages messages = 
GWT.create(CommonApplicationMessages.class);
-    protected static final CommonApplicationResources resources = 
GWT.create(CommonApplicationResources.class);
-
-    private List<VnicProfileWidget> editors;
+    private Collection<VnicProfileModel> profiles;
+    private Version dcCompatibilityVersion;
+    private Guid dcId;
+    private VnicProfileModel defaultProfile;
 
     public VnicProfilesEditor() {
         initWidget(WidgetUiBinder.uiBinder.createAndBindUi(this));
-        editors = new ArrayList<VnicProfileWidget>();
+        driver.initialize(this);
+    }
+
+    public void edit(ListModel model, Version dcCompatibilityVersion, Guid 
dcId, VnicProfileModel defaultProfile) {
+        driver.edit(model);
+        profiles = (Collection<VnicProfileModel>) model.getItems();
+        this.dcCompatibilityVersion = dcCompatibilityVersion;
+        this.dcId = dcId;
+        this.defaultProfile = defaultProfile;
+        init(model);
     }
 
     @Override
-    public void setValue(Object listModelValues) {
-        // not needed - there is no selected item because all are edited
-    }
-
-    @Override
-    public void setValue(Object value, boolean fireEvents) {
-        // not needed - there is no selected item because all are edited
-    }
-
-    @Override
-    public void setAcceptableValues(Collection<Object> values) {
-        if (values == null) {
-            return;
-        }
-
-        editors.clear();
-        contentPanel.clear();
-
-        for (final Object value : values) {
-            final Guid dcId = ((VnicProfileModel) value).getDcId();
-            VnicProfileWidget vnicProfileWidget = new VnicProfileWidget();
-            editors.add(vnicProfileWidget);
-            vnicProfileWidget.edit((VnicProfileModel) value);
-
-            final HorizontalPanel profilePanel = new HorizontalPanel();
-
-            PushButton addButton = new PushButton(new 
Image(resources.increaseIcon()));
-            final PushButton remvoeButton = new PushButton(new 
Image(resources.decreaseIcon()));
-            addButton.addStyleName(style.addButtonStyle());
-            remvoeButton.addStyleName(style.removeButtonStyle());
-            profilePanel.add(vnicProfileWidget);
-            profilePanel.add(addButton);
-            profilePanel.add(remvoeButton);
-
-            addButton.addClickHandler(new ClickHandler() {
-                @Override
-                public void onClick(ClickEvent event) {
-                    List models = (List<VnicProfileModel>) 
getValue().getItems();
-                    VnicProfileModel existingProfileModel = (VnicProfileModel) 
value;
-                    VnicProfileModel newVnicProfileModel = new 
NewVnicProfileModel(existingProfileModel.getSourceModel(),
-                            existingProfileModel.getDcCompatibilityVersion(), 
dcId);
-                    models.add(models.indexOf(existingProfileModel) + 1, 
newVnicProfileModel);
-
-                    setAcceptableValues(models);
-                }
-            });
-
-            remvoeButton.addClickHandler(new ClickHandler() {
-                @Override
-                public void onClick(ClickEvent event) {
-                    List models = (List<VnicProfileModel>) 
getValue().getItems();
-                    models.remove(value);
-                    setAcceptableValues(models);
-                }
-            });
-
-            profilePanel.addStyleName(style.profilePanel());
-
-            contentPanel.add(profilePanel);
-        }
+    public void edit(ListModel model) {
+        edit(model, dcCompatibilityVersion, dcId, defaultProfile);
     }
 
     public ListModel flush() {
-        // this flushes it
-        return getValue();
-    }
-
-    @Override
-    public ListModel getValue() {
-        List<VnicProfileModel> values = new LinkedList<VnicProfileModel>();
-        for (VnicProfileWidget editor : editors) {
-            values.add(editor.flush());
-        }
-
-        ListModel model = new ListModel();
-        model.setItems(values);
+        ListModel model = driver.flush();
+        flush(model);
         return model;
     }
 
     @Override
-    public TakesValueEditor<Object> asEditor() {
-        return TakesConstrainedValueEditor.of(this, this, this);
+    protected VnicProfileWidget createWidget(VnicProfileModel value) {
+        VnicProfileWidget vnicProfileWidget = new VnicProfileWidget();
+        vnicProfileWidget.edit(value);
+        return vnicProfileWidget;
     }
 
-    interface WidgetStyle extends CssResource {
-        String addButtonStyle();
+    @Override
+    protected VnicProfileModel createGhostValue() {
+        return new NewVnicProfileModel(dcCompatibilityVersion, dcId);
+    }
 
-        String removeButtonStyle();
+    @Override
+    protected boolean isGhost(VnicProfileModel value) {
+        if (value != defaultProfile) {
+            String name = (String) value.getName().getEntity();
+            return (name == null || name.isEmpty());
+        }
+        return false;
+    }
 
-        String profilePanel();
+    @Override
+    protected void toggleGhost(VnicProfileModel value, VnicProfileWidget 
widget, boolean becomingGhost) {
+        widget.publicUseEditor.setEnabled(!becomingGhost && 
value.getPublicUse().getIsChangable());
+        widget.networkQoSEditor.setEnabled(!becomingGhost && 
value.getNetworkQoS().getIsChangable());
+
+        // commit change to model without triggering items changed event
+        if (profiles != null) {
+            if (becomingGhost) {
+                profiles.remove(value);
+            } else if (!Linq.containsByIdentity(profiles, value)) {
+                profiles.add(value);
+            }
+        }
+    }
+
+    @Override
+    protected void onRemove(VnicProfileModel value, VnicProfileWidget widget) {
+        super.onRemove(value, widget);
+
+        // commit change to model without triggering items changed event
+        if (profiles != null) {
+            profiles.remove(value);
+        }
     }
 
 }
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/vnicProfile/VnicProfilesEditor.ui.xml
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/vnicProfile/VnicProfilesEditor.ui.xml
index 5c8e87a..76e07d1 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/vnicProfile/VnicProfilesEditor.ui.xml
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/vnicProfile/VnicProfilesEditor.ui.xml
@@ -2,19 +2,14 @@
 <!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:style  
type="org.ovirt.engine.ui.webadmin.widget.vnicProfile.VnicProfilesEditor.WidgetStyle">
+       <ui:style 
type="org.ovirt.engine.ui.common.widget.AddRemoveRowWidget.WidgetStyle">
                .mainPanel {
                        float: left;
                        padding-left: 5px;
                        margin-left: 5px;
                }
 
-               .profilePanel {
-                       width: 100%;
-                       padding-bottom: 3px;
-               }
-
-               .addButtonStyle {
+               .buttonStyle {
                        margin-right: 7px;
                        width: 9px;
                        height: 10px;
@@ -23,16 +18,6 @@
                        margin-top: 7px;
                        margin-left: 8px;
                }
-
-               .removeButtonStyle {
-                       margin-right: 7px;
-                       width: 9px;
-                       height: 10px;
-                       padding-left: 2px;
-                       padding-top: 2px;
-                       margin-top: 7px;
-               }
-
        </ui:style>
 
        <g:FlowPanel addStyleNames="{style.mainPanel}" >


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

Gerrit-MessageType: newchange
Gerrit-Change-Id: If66c23bddada57fbfd95292dc2cc1f6c8d9df19e
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Lior Vernia <lver...@redhat.com>
_______________________________________________
Engine-patches mailing list
Engine-patches@ovirt.org
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to