anmolbabu has uploaded a new change for review.

Change subject: webadmin : CheckBoxGroup Widget and TimeBox Widget
......................................................................

webadmin : CheckBoxGroup Widget and TimeBox Widget

CheckBoxGroup Widget and TimeBox Widget

Change-Id: I38daa0d2c151eb0e34603488496a8a1ea4719c87
Signed-off-by: Anmol Babu <[email protected]>
---
A 
frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/CheckBoxGroup.java
A 
frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/ListModelCheckBoxGroup.java
A 
frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/ListModelCheckBoxGroupEditor.java
3 files changed, 275 insertions(+), 0 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/02/37302/1

diff --git 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/CheckBoxGroup.java
 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/CheckBoxGroup.java
new file mode 100644
index 0000000..361932f
--- /dev/null
+++ 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/CheckBoxGroup.java
@@ -0,0 +1,200 @@
+package org.ovirt.engine.ui.common.widget.editor;
+
+import java.text.ParseException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+
+import com.google.gwt.dom.client.Style.Unit;
+import com.google.gwt.event.dom.client.ClickEvent;
+import com.google.gwt.event.dom.client.ClickHandler;
+import com.google.gwt.event.dom.client.KeyDownEvent;
+import com.google.gwt.event.dom.client.KeyDownHandler;
+import com.google.gwt.event.dom.client.KeyPressEvent;
+import com.google.gwt.event.dom.client.KeyPressHandler;
+import com.google.gwt.event.dom.client.KeyUpEvent;
+import com.google.gwt.event.dom.client.KeyUpHandler;
+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.safehtml.shared.SafeHtmlUtils;
+import com.google.gwt.text.shared.Parser;
+import com.google.gwt.text.shared.Renderer;
+import com.google.gwt.user.client.TakesValue;
+import com.google.gwt.user.client.ui.CheckBox;
+import com.google.gwt.user.client.ui.Composite;
+import com.google.gwt.user.client.ui.FlowPanel;
+import com.google.gwt.user.client.ui.HasConstrainedValue;
+
+public class CheckBoxGroup<T> extends Composite implements TakesValue<T>, 
HasConstrainedValue<T> {
+    private final Map<T, CheckBox> checkBoxes = new HashMap<>();
+
+    private final Renderer<T> renderer;
+
+    private final Map<T, FlowPanel> panels = new HashMap<T, FlowPanel>();
+    private final FlowPanel wrapperPanel = new FlowPanel();
+
+    private boolean enabled;
+
+    List<T> selectedItems = new ArrayList<>();
+    private final Parser<T> stringToT;
+
+    int tabIndex;
+    char accessKey = 0;
+
+    public CheckBoxGroup(Renderer<T> renderer, Parser<T> stringToT) {
+        this.stringToT = stringToT;
+        this.renderer = renderer;
+        initWidget(wrapperPanel);
+    }
+
+    public void addCheckBoxOptions(T checkBoxLabel) {
+        if(checkBoxLabel == null) {
+            throw new IllegalArgumentException("null value is not permited"); 
//$NON-NLS-1$
+        }
+        if(checkBoxes.containsKey(checkBoxLabel)) {
+            throw new IllegalArgumentException("Duplicate value: " + 
checkBoxLabel); //$NON-NLS-1$
+        }
+        final CheckBox newCheckBox = new 
CheckBox(SafeHtmlUtils.fromTrustedString(renderer.render(checkBoxLabel)));
+        newCheckBox.setWidth("50px");//$NON-NLS-1$
+        newCheckBox.addClickHandler(new ClickHandler() {
+            @Override
+            public void onClick(ClickEvent event) {
+                if (newCheckBox.getValue()) {
+                    try {
+                        
selectedItems.add(stringToT.parse(newCheckBox.getText()));
+                    } catch (ParseException e) {
+                        throw new IllegalArgumentException(e.getMessage());
+                    }
+                }
+            }
+        });
+        newCheckBox.getElement().getStyle().setMarginRight(50, Unit.PX);
+        checkBoxes.put(checkBoxLabel, newCheckBox);
+        FlowPanel fPanel = new FlowPanel();
+        fPanel.add(newCheckBox);
+        panels.put(checkBoxLabel, fPanel);
+        wrapperPanel.add(fPanel);
+    }
+
+    public List<T> getSelectedItems() {
+        return selectedItems;
+    }
+
+    public void setSelections() {
+        Iterator<Entry<T, CheckBox>> iterator = 
checkBoxes.entrySet().iterator();
+        while(iterator.hasNext()) {
+            Map.Entry<T, CheckBox> mapEntry = iterator.next();
+            if(mapEntry.getValue().getValue()) {
+                selectedItems.add(mapEntry.getKey());
+            }
+        }
+    }
+
+    public void clearAllSelections() {
+        Iterator<Entry<T, CheckBox>> iterator = 
checkBoxes.entrySet().iterator();
+        while(iterator.hasNext()) {
+            Map.Entry<T, CheckBox> mapEntry = iterator.next();
+            mapEntry.getValue().setValue(false);
+        }
+    }
+
+    public void setSelectedItems(List<T> itemsToSelect) {
+        clearAllSelections();
+        Iterator<Entry<T, CheckBox>> iterator = 
checkBoxes.entrySet().iterator();
+        while(iterator.hasNext()) {
+            Map.Entry<T, CheckBox> mapEntry = iterator.next();
+            if(itemsToSelect.contains(mapEntry.getKey())) {
+                mapEntry.getValue().setValue(true);
+            }
+        }
+    }
+
+    public HandlerRegistration addKeyUpHandler(KeyUpHandler handler) {
+        return addDomHandler(handler, KeyUpEvent.getType());
+    }
+
+    public HandlerRegistration addKeyDownHandler(KeyDownHandler handler) {
+        return addDomHandler(handler, KeyDownEvent.getType());
+    }
+
+    public HandlerRegistration addKeyPressHandler(KeyPressHandler handler) {
+        return addDomHandler(handler, KeyPressEvent.getType());
+    }
+
+    @Override
+    public HandlerRegistration addValueChangeHandler(ValueChangeHandler<T> 
handler) {
+        return addHandler(handler, ValueChangeEvent.getType());
+    }
+
+    @Override
+    public T getValue() {
+        return null;
+    }
+
+    @Override
+    public void setValue(T value) {
+        if(!checkBoxes.containsKey(value)) {
+            addCheckBoxOptions(value);
+        }
+        setValue(value, false);
+    }
+
+    @Override
+    public void setValue(T value, boolean fireEvents) {
+        setSelectedItems(Collections.singletonList(value));
+    }
+
+    @Override
+    public void setAcceptableValues(Collection<T> values) {
+        panels.clear();
+        wrapperPanel.clear();
+        if (values != null) {
+            for (final T value : values) {
+                if(! checkBoxes.containsKey(value)) {
+                    addCheckBoxOptions(value);
+                }
+            }
+        }
+    }
+
+    public boolean isEnabled() {
+        return enabled;
+    }
+
+    public void setEnabled(boolean enabled) {
+        Iterator<Entry<T, CheckBox>> iterator = 
checkBoxes.entrySet().iterator();
+        while(iterator.hasNext()) {
+            Map.Entry<T, CheckBox> mapEntry = iterator.next();
+            mapEntry.getValue().setValue(true);
+        }
+    }
+
+    public int getTabIndex() {
+        return tabIndex;
+    }
+
+    public void setAccessKey(char key) {
+        this.accessKey = key;
+    }
+
+    public void setFocus(boolean focused) {
+        Iterator<Entry<T, CheckBox>> iterator = 
checkBoxes.entrySet().iterator();
+        while(iterator.hasNext()) {
+            Map.Entry<T, CheckBox> mapEntry = iterator.next();
+            if(selectedItems.contains(mapEntry.getValue())) {
+                mapEntry.getValue().setValue(focused);
+            }
+        }
+    }
+
+    public void setTabIndex(int index) {
+        this.tabIndex = index;
+    }
+
+}
diff --git 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/ListModelCheckBoxGroup.java
 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/ListModelCheckBoxGroup.java
new file mode 100644
index 0000000..904bdf3
--- /dev/null
+++ 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/ListModelCheckBoxGroup.java
@@ -0,0 +1,24 @@
+package org.ovirt.engine.ui.common.widget.editor;
+
+import com.google.gwt.editor.client.adapters.TakesValueEditor;
+import com.google.gwt.text.shared.Parser;
+import com.google.gwt.text.shared.Renderer;
+import com.google.gwt.user.client.ui.HasConstrainedValue;
+
+public class ListModelCheckBoxGroup<T> extends CheckBoxGroup<T> implements 
EditorWidget<T, TakesValueEditor<T>>, HasConstrainedValue<T> {
+
+    private TakesConstrainedValueEditor<T> editor;
+
+    public ListModelCheckBoxGroup(Renderer<T> renderer, Parser<T> parser) {
+        super(renderer, parser);
+    }
+
+    @Override
+    public TakesValueEditor<T> asEditor() {
+        if (editor == null) {
+            editor = TakesConstrainedValueEditor.of(this, this, this);
+        }
+        return editor;
+    }
+
+}
diff --git 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/ListModelCheckBoxGroupEditor.java
 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/ListModelCheckBoxGroupEditor.java
new file mode 100644
index 0000000..cdfff53
--- /dev/null
+++ 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/ListModelCheckBoxGroupEditor.java
@@ -0,0 +1,51 @@
+package org.ovirt.engine.ui.common.widget.editor;
+
+import java.util.List;
+
+import org.ovirt.engine.ui.common.widget.AbstractValidatedWidgetWithLabel;
+import org.ovirt.engine.ui.common.widget.VisibilityRenderer;
+import org.ovirt.engine.ui.common.widget.renderer.StringRenderer;
+
+import com.google.gwt.dom.client.Style.BorderStyle;
+import com.google.gwt.editor.client.IsEditor;
+import com.google.gwt.text.shared.Parser;
+import com.google.gwt.text.shared.Renderer;
+
+public class ListModelCheckBoxGroupEditor<T> extends 
AbstractValidatedWidgetWithLabel<T, ListModelCheckBoxGroup<T>> implements 
IsEditor<WidgetWithLabelEditor<T, ListModelCheckBoxGroupEditor<T>>>{
+
+    private final WidgetWithLabelEditor<T, ListModelCheckBoxGroupEditor<T>> 
editor;
+
+    public ListModelCheckBoxGroupEditor() {
+        this(new StringRenderer<T>(), new 
VisibilityRenderer.SimpleVisibilityRenderer(), null);
+    }
+
+    public ListModelCheckBoxGroupEditor(Parser<T> parser) {
+        this(new StringRenderer<T>(), new 
VisibilityRenderer.SimpleVisibilityRenderer(), parser);
+    }
+
+    public ListModelCheckBoxGroupEditor(Renderer<T> renderer, 
VisibilityRenderer visibilityRenderer, Parser<T> parser) {
+        super(new ListModelCheckBoxGroup<T>(renderer, parser), 
visibilityRenderer);
+        this.editor = WidgetWithLabelEditor.of(getContentWidget().asEditor(), 
this);
+    }
+
+    @Override
+    public void markAsValid() {
+        super.markAsValid();
+        getValidatedWidgetStyle().setBorderStyle(BorderStyle.NONE);
+    }
+
+    @Override
+    public void markAsInvalid(List<String> validationHints) {
+        super.markAsInvalid(validationHints);
+        getValidatedWidgetStyle().setBorderStyle(BorderStyle.SOLID);
+    }
+
+    @Override
+    public WidgetWithLabelEditor<T, ListModelCheckBoxGroupEditor<T>> 
asEditor() {
+        return editor;
+    }
+
+    public CheckBoxGroup<T> asCheckBoxGroup() {
+        return getContentWidget();
+    }
+}


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

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

Reply via email to