Arik Hadas has uploaded a new change for review.

Change subject: webadmin: introduce abstract split table
......................................................................

webadmin: introduce abstract split table

Add SplitTable class which holds the logic and view that are relevant
for both horizontal and vertical split tables.
HorizontalSplitTable class now extends SplitTable and holds the data
which is relevant only for horizontal split tables.

Change-Id: Id7016991693956369df6ced8322dc0836e9437e4
Signed-off-by: Arik Hadas <[email protected]>
---
M 
frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/HorizontalSplitTable.java
A 
frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/SplitTable.java
2 files changed, 202 insertions(+), 167 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/09/35209/1

diff --git 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/HorizontalSplitTable.java
 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/HorizontalSplitTable.java
index 6e868ce..813c523 100644
--- 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/HorizontalSplitTable.java
+++ 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/HorizontalSplitTable.java
@@ -1,31 +1,15 @@
 package org.ovirt.engine.ui.common.widget;
 
-import java.util.Collection;
-import java.util.LinkedList;
-import java.util.Set;
-
 import org.ovirt.engine.ui.common.CommonApplicationResources;
 import org.ovirt.engine.ui.common.widget.dialog.ShapedButton;
 import org.ovirt.engine.ui.common.widget.editor.EntityModelCellTable;
-import org.ovirt.engine.ui.uicommonweb.UICommand;
 import org.ovirt.engine.ui.uicommonweb.models.ListModel;
-import org.ovirt.engine.ui.uicompat.Event;
-import org.ovirt.engine.ui.uicompat.EventArgs;
-import org.ovirt.engine.ui.uicompat.IEventListener;
 
 import com.google.gwt.core.client.GWT;
-import com.google.gwt.event.dom.client.ClickEvent;
-import com.google.gwt.event.dom.client.ClickHandler;
 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.Label;
 import com.google.gwt.user.client.ui.Widget;
-import com.google.gwt.view.client.MultiSelectionModel;
-import com.google.gwt.view.client.SelectionChangeEvent;
-import com.google.gwt.view.client.SelectionChangeEvent.Handler;
 
-public class HorizontalSplitTable<T> extends Composite {
+public class HorizontalSplitTable<T> extends SplitTable<T> {
 
     interface WidgetUiBinder extends UiBinder<Widget, HorizontalSplitTable<?>> 
{
         WidgetUiBinder uiBinder = GWT.create(WidgetUiBinder.class);
@@ -33,163 +17,31 @@
 
     private static CommonApplicationResources resources = 
GWT.create(CommonApplicationResources.class);
 
-    private final MultiSelectionModel<T> topSelectionModel;
-    private final MultiSelectionModel<T> bottomSelectionModel;
-
-    private final IEventListener<EventArgs> topItemsChangedListener;
-    private final IEventListener<EventArgs> bottomItemsChangedListener;
-
-    private UICommand onDownButtonPressed;
-    private UICommand onUpButtonPressed;
-
-    @UiField(provided = true)
-    protected ShapedButton downButton;
-
-    @UiField(provided = true)
-    protected ShapedButton upButton;
-
-    @UiField(provided = true)
-    protected EntityModelCellTable<ListModel<T>> topTable;
-
-    @UiField(provided = true)
-    protected EntityModelCellTable<ListModel<T>> bottomTable;
-
-    @UiField(provided = true)
-    protected Label topTitle;
-
-    @UiField(provided = true)
-    protected Label bottomTitle;
-
-    @SuppressWarnings("unchecked")
     public HorizontalSplitTable(EntityModelCellTable<ListModel<T>> topTable,
             EntityModelCellTable<ListModel<T>> bottomTable,
             String topTitle,
             String bottomTitle) {
+        super(topTable, bottomTable, topTitle, bottomTitle);
+    }
 
-        this.topTable = topTable;
-        this.bottomTable = bottomTable;
-        this.topTitle = new Label(topTitle);
-        this.bottomTitle = new Label(bottomTitle);
+    @Override
+    protected ShapedButton createIncludeButton() {
+        return new ShapedButton(resources.arrowDownNormal(),
+                resources.arrowDownClick(),
+                resources.arrowDownOver(),
+                resources.arrowDownDisabled());
+    }
 
-        downButton =
-                new ShapedButton(resources.arrowDownNormal(),
-                        resources.arrowDownClick(),
-                        resources.arrowDownOver(),
-                        resources.arrowDownDisabled());
-        upButton =
-                new ShapedButton(resources.arrowUpNormal(),
-                        resources.arrowUpClick(),
-                        resources.arrowUpOver(),
-                        resources.arrowUpDisabled());
-        downButton.setEnabled(false);
-        upButton.setEnabled(false);
+    @Override
+    protected ShapedButton createExcludeButton() {
+        return new ShapedButton(resources.arrowUpNormal(),
+                resources.arrowUpClick(),
+                resources.arrowUpOver(),
+                resources.arrowUpDisabled());
+    }
 
+    @Override
+    protected void initWidget() {
         initWidget(WidgetUiBinder.uiBinder.createAndBindUi(this));
-
-        topSelectionModel = (MultiSelectionModel<T>) 
topTable.getSelectionModel();
-        bottomSelectionModel = (MultiSelectionModel<T>) 
bottomTable.getSelectionModel();
-
-        topItemsChangedListener = new IEventListener<EventArgs>() {
-            @Override
-            public void eventRaised(Event<? extends EventArgs> ev, Object 
sender, EventArgs args) {
-                topSelectionModel.clear();
-            }
-        };
-        bottomItemsChangedListener = new IEventListener<EventArgs>() {
-            @Override
-            public void eventRaised(Event<? extends EventArgs> ev, Object 
sender, EventArgs args) {
-                bottomSelectionModel.clear();
-            }
-        };
-
-        addSelectionHandler(true);
-        addSelectionHandler(false);
-        addClickHandler(true);
-        addClickHandler(false);
     }
-
-    private void addSelectionHandler(boolean topTable) {
-        final MultiSelectionModel<T> selectionModel = 
getSelectionModel(topTable);
-        final ShapedButton button = getButton(topTable);
-        selectionModel.addSelectionChangeHandler(new Handler() {
-
-            @Override
-            public void onSelectionChange(SelectionChangeEvent event) {
-                button.setEnabled(!selectionModel.getSelectedSet().isEmpty());
-            }
-        });
-    }
-
-    private void addClickHandler(final boolean topTableIsSource) {
-        getButton(topTableIsSource).addClickHandler(new ClickHandler() {
-
-            @Override
-            public void onClick(ClickEvent event) {
-                MultiSelectionModel<T> sourceSelectionModel = 
getSelectionModel(topTableIsSource);
-                EntityModelCellTable<ListModel<T>> sourceTable = 
getTable(topTableIsSource);
-                EntityModelCellTable<ListModel<T>> targetTable = 
getTable(!topTableIsSource);
-                UICommand command = topTableIsSource ? onDownButtonPressed : 
onUpButtonPressed;
-
-                if (command != null) {
-                    command.execute();
-                }
-
-                Set<T> selectedItems = sourceSelectionModel.getSelectedSet();
-                
sourceTable.asEditor().flush().getItems().removeAll(selectedItems);
-                ListModel<T> targetListModel = targetTable.asEditor().flush();
-                Collection<T> targetItems = targetListModel.getItems();
-                if (targetItems == null) {
-                    targetItems = new LinkedList<T>();
-                    targetListModel.setItems(targetItems);
-                }
-                targetItems.addAll(selectedItems);
-                refresh();
-            }
-        });
-    }
-
-    private MultiSelectionModel<T> getSelectionModel(boolean top) {
-        return top ? topSelectionModel : bottomSelectionModel;
-    }
-
-    private ShapedButton getButton(boolean down) {
-        return down ? downButton : upButton;
-    }
-
-    private EntityModelCellTable<ListModel<T>> getTable(boolean top) {
-        return top ? topTable : bottomTable;
-    }
-
-    private void refresh() {
-        topSelectionModel.clear();
-        bottomSelectionModel.clear();
-        topTable.asEditor().edit(topTable.asEditor().flush());
-        bottomTable.asEditor().edit(bottomTable.asEditor().flush());
-    }
-
-    private void edit(ListModel<T> model, final boolean topTableIsEdited) {
-        EntityModelCellTable<ListModel<T>> table = getTable(topTableIsEdited);
-        ListModel<T> oldModel = table.asEditor().flush();
-        IEventListener<EventArgs> listener = topTableIsEdited ? 
topItemsChangedListener : bottomItemsChangedListener;
-        if (oldModel != null) {
-            oldModel.getItemsChangedEvent().removeListener(listener);
-        }
-        model.getItemsChangedEvent().addListener(listener);
-        table.asEditor().edit(model);
-    }
-
-    public void edit(ListModel<T> topListModel, ListModel<T> bottomListModel) {
-        edit(topListModel, true);
-        edit(bottomListModel, false);
-    }
-
-    public void edit(ListModel<T> topListModel,
-            ListModel<T> bottomListModel,
-            UICommand onDownButtonPressed,
-            UICommand onUpButtonPressed) {
-        edit(topListModel, bottomListModel);
-        this.onDownButtonPressed = onDownButtonPressed;
-        this.onUpButtonPressed = onUpButtonPressed;
-    }
-
 }
diff --git 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/SplitTable.java
 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/SplitTable.java
new file mode 100644
index 0000000..4e61bce
--- /dev/null
+++ 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/SplitTable.java
@@ -0,0 +1,183 @@
+package org.ovirt.engine.ui.common.widget;
+
+import java.util.Collection;
+import java.util.LinkedList;
+import java.util.Set;
+
+import org.ovirt.engine.ui.common.widget.dialog.ShapedButton;
+import org.ovirt.engine.ui.common.widget.editor.EntityModelCellTable;
+import org.ovirt.engine.ui.uicommonweb.UICommand;
+import org.ovirt.engine.ui.uicommonweb.models.ListModel;
+import org.ovirt.engine.ui.uicompat.Event;
+import org.ovirt.engine.ui.uicompat.EventArgs;
+import org.ovirt.engine.ui.uicompat.IEventListener;
+
+import com.google.gwt.event.dom.client.ClickEvent;
+import com.google.gwt.event.dom.client.ClickHandler;
+import com.google.gwt.uibinder.client.UiField;
+import com.google.gwt.user.client.ui.Composite;
+import com.google.gwt.user.client.ui.Label;
+import com.google.gwt.view.client.MultiSelectionModel;
+import com.google.gwt.view.client.SelectionChangeEvent;
+import com.google.gwt.view.client.SelectionChangeEvent.Handler;
+
+public abstract class SplitTable<T> extends Composite {
+
+    private final MultiSelectionModel<T> topSelectionModel;
+    private final MultiSelectionModel<T> bottomSelectionModel;
+
+    private final IEventListener<EventArgs> topItemsChangedListener;
+    private final IEventListener<EventArgs> bottomItemsChangedListener;
+
+    private UICommand onDownButtonPressed;
+    private UICommand onUpButtonPressed;
+
+    @UiField(provided = true)
+    protected ShapedButton downButton;
+
+    @UiField(provided = true)
+    protected ShapedButton upButton;
+
+    @UiField(provided = true)
+    protected EntityModelCellTable<ListModel<T>> topTable;
+
+    @UiField(provided = true)
+    protected EntityModelCellTable<ListModel<T>> bottomTable;
+
+    @UiField(provided = true)
+    protected Label topTitle;
+
+    @UiField(provided = true)
+    protected Label bottomTitle;
+
+    @SuppressWarnings("unchecked")
+    public SplitTable(EntityModelCellTable<ListModel<T>> topTable,
+            EntityModelCellTable<ListModel<T>> bottomTable,
+            String topTitle,
+            String bottomTitle) {
+
+        this.topTable = topTable;
+        this.bottomTable = bottomTable;
+        this.topTitle = new Label(topTitle);
+        this.bottomTitle = new Label(bottomTitle);
+
+        downButton = createIncludeButton();
+        upButton = createExcludeButton();
+
+        downButton.setEnabled(false);
+        upButton.setEnabled(false);
+
+        initWidget();
+
+        topSelectionModel = (MultiSelectionModel<T>) 
topTable.getSelectionModel();
+        bottomSelectionModel = (MultiSelectionModel<T>) 
bottomTable.getSelectionModel();
+
+        topItemsChangedListener = new IEventListener<EventArgs>() {
+            @Override
+            public void eventRaised(Event<? extends EventArgs> ev, Object 
sender, EventArgs args) {
+                topSelectionModel.clear();
+            }
+        };
+        bottomItemsChangedListener = new IEventListener<EventArgs>() {
+            @Override
+            public void eventRaised(Event<? extends EventArgs> ev, Object 
sender, EventArgs args) {
+                bottomSelectionModel.clear();
+            }
+        };
+
+        addSelectionHandler(true);
+        addSelectionHandler(false);
+        addClickHandler(true);
+        addClickHandler(false);
+    }
+
+    protected abstract ShapedButton createIncludeButton();
+
+    protected abstract ShapedButton createExcludeButton();
+
+    protected abstract void initWidget();
+
+    private void addSelectionHandler(boolean topTable) {
+        final MultiSelectionModel<T> selectionModel = 
getSelectionModel(topTable);
+        final ShapedButton button = getButton(topTable);
+        selectionModel.addSelectionChangeHandler(new Handler() {
+
+            @Override
+            public void onSelectionChange(SelectionChangeEvent event) {
+                button.setEnabled(!selectionModel.getSelectedSet().isEmpty());
+            }
+        });
+    }
+
+    private void addClickHandler(final boolean topTableIsSource) {
+        getButton(topTableIsSource).addClickHandler(new ClickHandler() {
+
+            @Override
+            public void onClick(ClickEvent event) {
+                MultiSelectionModel<T> sourceSelectionModel = 
getSelectionModel(topTableIsSource);
+                EntityModelCellTable<ListModel<T>> sourceTable = 
getTable(topTableIsSource);
+                EntityModelCellTable<ListModel<T>> targetTable = 
getTable(!topTableIsSource);
+                UICommand command = topTableIsSource ? onDownButtonPressed : 
onUpButtonPressed;
+
+                if (command != null) {
+                    command.execute();
+                }
+
+                Set<T> selectedItems = sourceSelectionModel.getSelectedSet();
+                
sourceTable.asEditor().flush().getItems().removeAll(selectedItems);
+                ListModel<T> targetListModel = targetTable.asEditor().flush();
+                Collection<T> targetItems = targetListModel.getItems();
+                if (targetItems == null) {
+                    targetItems = new LinkedList<T>();
+                    targetListModel.setItems(targetItems);
+                }
+                targetItems.addAll(selectedItems);
+                refresh();
+            }
+        });
+    }
+
+    private MultiSelectionModel<T> getSelectionModel(boolean top) {
+        return top ? topSelectionModel : bottomSelectionModel;
+    }
+
+    private ShapedButton getButton(boolean down) {
+        return down ? downButton : upButton;
+    }
+
+    private EntityModelCellTable<ListModel<T>> getTable(boolean top) {
+        return top ? topTable : bottomTable;
+    }
+
+    private void refresh() {
+        topSelectionModel.clear();
+        bottomSelectionModel.clear();
+        topTable.asEditor().edit(topTable.asEditor().flush());
+        bottomTable.asEditor().edit(bottomTable.asEditor().flush());
+    }
+
+    private void edit(ListModel<T> model, final boolean topTableIsEdited) {
+        EntityModelCellTable<ListModel<T>> table = getTable(topTableIsEdited);
+        ListModel<T> oldModel = table.asEditor().flush();
+        IEventListener<EventArgs> listener = topTableIsEdited ? 
topItemsChangedListener : bottomItemsChangedListener;
+        if (oldModel != null) {
+            oldModel.getItemsChangedEvent().removeListener(listener);
+        }
+        model.getItemsChangedEvent().addListener(listener);
+        table.asEditor().edit(model);
+    }
+
+    public void edit(ListModel<T> topListModel, ListModel<T> bottomListModel) {
+        edit(topListModel, true);
+        edit(bottomListModel, false);
+    }
+
+    public void edit(ListModel<T> topListModel,
+            ListModel<T> bottomListModel,
+            UICommand onDownButtonPressed,
+            UICommand onUpButtonPressed) {
+        edit(topListModel, bottomListModel);
+        this.onDownButtonPressed = onDownButtonPressed;
+        this.onUpButtonPressed = onUpButtonPressed;
+    }
+}


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

Gerrit-MessageType: newchange
Gerrit-Change-Id: Id7016991693956369df6ced8322dc0836e9437e4
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Arik Hadas <[email protected]>
_______________________________________________
Engine-patches mailing list
[email protected]
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to