anmolbabu has uploaded a new change for review.

Change subject: webadmin : Volume Capacity UI - Part2
......................................................................

webadmin : Volume Capacity UI - Part2

This patch introduces the clock icon for refresh of
volume and brick capacities.Clicking on the clock
next to each volume manually forces a refresh of
the volume and brick capacities.

Change-Id: I983daf32966527cdfa7773e07aa055a24519fbe2
Signed-off-by: Anmol Babu <[email protected]>
---
A 
frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/utils/TimeUnitConverter.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/volumes/VolumeListModel.java
M 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/ApplicationMessages.java
M 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/ApplicationResources.java
M 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/MainTabVolumeView.java
M 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/gluster/SubTabVolumeBrickView.java
A 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/table/column/CompositeVolumeCapacityColumn.java
A 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/table/column/VolumeCapacityClockCell.java
A 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/table/column/VolumeCapacityCompositeCell.java
A 
frontend/webadmin/modules/webadmin/src/main/resources/org/ovirt/engine/ui/webadmin/images/RefreshClock.png
10 files changed, 330 insertions(+), 8 deletions(-)


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

diff --git 
a/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/utils/TimeUnitConverter.java
 
b/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/utils/TimeUnitConverter.java
new file mode 100644
index 0000000..01f1b81
--- /dev/null
+++ 
b/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/utils/TimeUnitConverter.java
@@ -0,0 +1,124 @@
+package org.ovirt.engine.ui.frontend.utils;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+
+import org.ovirt.engine.core.common.utils.Pair;
+
+public class TimeUnitConverter {
+
+    public static enum TimeUnit {
+
+        /*
+         * The weights of the units here are their equivalent number of 
previous units
+         */
+
+        Seconds(1 , 1) , //Base unit assumed here for all practical purposes 
is seconds.And 1 sec = 1 sec so weight = 1
+        Minutes(2 , 60) , //1 minute = 60s
+        Hours(3 , 60) , //1 hour = 60 mins
+        Days(4 , 24) , //1 day = 24 hrs
+        Months(5 , 30) , //1 months = 30 days
+        Years(6 , 12); //1 year = 12 months.So,this assumes 12 * 30 = 360 days 
as 1 year
+
+        public static List<Pair<TimeUnitConverter.TimeUnit, Long>> timeUnits = 
new ArrayList<Pair<TimeUnitConverter.TimeUnit, Long>>();
+        /*
+         * List of triplet required because order is required and this 
ordering of units is independent of weight and to facilitate
+         * easy mapping between the triplet entities like unit name,weight and 
order.
+         */
+
+        private long value;
+        private int order;
+
+        private TimeUnit(int order , long weight) {
+            this.value = weight;
+            this.order = order;
+        }
+
+        static {
+            for(TimeUnit timeUnit : TimeUnit.values()) {
+                timeUnits.add(new Pair<TimeUnitConverter.TimeUnit, 
Long>(timeUnit, timeUnit.getWeight()));
+            }
+            /*
+             * Sort  the Triplet list in descending order of Triplet order 
value.
+             */
+            Collections.sort(timeUnits, new 
Comparator<Pair<TimeUnitConverter.TimeUnit, Long>>() {
+                @Override
+                public int compare(Pair<TimeUnitConverter.TimeUnit, Long> o1, 
Pair<TimeUnitConverter.TimeUnit, Long> o2) {
+                    return o1.getFirst().getOrder() - o2.getFirst().getOrder();
+                }
+            });
+        }
+
+        public long getWeight() {
+            return value;
+        }
+
+        public void setWeight(long weight) {
+            this.value = weight;
+        }
+
+        public int getOrder() {
+            return order;
+        }
+
+        public void setOrder(int order) {
+            this.order = order;
+        }
+    }
+
+    public static Pair<Long, TimeUnitConverter.TimeUnit> convert(long inValue, 
TimeUnit inUnit, TimeUnit outUnit) {
+        /*
+         * Iterate over the list starting from the outUnit all the way upto 
inUnit and divide/multiply the inValue
+         * by the weights of the units iterated so far.
+         */
+        if(inUnit.getOrder() < outUnit.getOrder()) {
+            //The conversion is from a lower to a upper unit.
+            for(int i = outUnit.getOrder(); i > inUnit.getOrder(); i-- ) {
+                /*
+                 * Iterate over the list starting from the outUnit all the way 
upto inUnit and divide the inValue
+                 * by the weights of the units iterated so far.
+                 */
+                inValue /= TimeUnit.timeUnits.get(i-1).getSecond();
+            }
+        } else {
+            //The conversion is from a bigger unit to a smaller unit.
+            for(int i = outUnit.getOrder(); i < inUnit.getOrder(); i++ ) {
+                /*
+                 * Iterate over the list starting from the outUnit all the way 
upto inUnit and multiply the inValue
+                 * by the weights of the units iterated so far.
+                 */
+                inValue *= TimeUnit.timeUnits.get(i).getSecond();
+            }
+        }
+        Pair<Long , TimeUnitConverter.TimeUnit> timePair = new Pair<Long, 
TimeUnitConverter.TimeUnit>(inValue, outUnit);
+        //The result is a pair of converted value and its unit.
+        return timePair;
+    }
+
+    public static Pair<Long, TimeUnitConverter.TimeUnit> autoConvert(long 
inValue, TimeUnit inUnit) {
+        int i = inUnit.getOrder();
+        Pair<Long, TimeUnitConverter.TimeUnit> result = new Pair<Long, 
TimeUnitConverter.TimeUnit>();
+        int product = 1;
+        while(product <= inValue && i <= 5) {
+            product *= TimeUnit.timeUnits.get(i).getSecond();
+            result.setSecond(TimeUnit.timeUnits.get(i).getFirst());
+            if(product > inValue) {
+                /*
+                 * If product exceeds the value, undo last 
transaction(multiplication and increment in i).
+                 */
+                product /= TimeUnit.timeUnits.get(i).getSecond();
+                i--;
+                result.setSecond(TimeUnit.timeUnits.get(i).getFirst());
+                break;
+            }
+            if(i == 5) {
+                break;
+            }
+            i++;
+        }
+        result.setFirst(inValue/product);
+        return result;
+    }
+}
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/volumes/VolumeListModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/volumes/VolumeListModel.java
index 28242b9..98d1e9a 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/volumes/VolumeListModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/volumes/VolumeListModel.java
@@ -10,6 +10,7 @@
 import 
org.ovirt.engine.core.common.action.gluster.CreateGlusterVolumeParameters;
 import 
org.ovirt.engine.core.common.action.gluster.GlusterVolumeActionParameters;
 import 
org.ovirt.engine.core.common.action.gluster.GlusterVolumeOptionParameters;
+import org.ovirt.engine.core.common.action.gluster.GlusterVolumeParameters;
 import 
org.ovirt.engine.core.common.action.gluster.GlusterVolumeRebalanceParameters;
 import org.ovirt.engine.core.common.asynctasks.gluster.GlusterAsyncTask;
 import org.ovirt.engine.core.common.asynctasks.gluster.GlusterTaskType;
@@ -65,6 +66,8 @@
     public static final Integer STRIPE_COUNT_DEFAULT = 4;
 
     private UICommand newVolumeCommand;
+
+    private UICommand refreshVolumeCapcity;
 
     public UICommand getNewVolumeCommand()
     {
@@ -494,6 +497,8 @@
             onRemoveVolume();
         } else if(command.getName().equals("stop_rebalance_from_status")) 
{//$NON-NLS-1$
             stopRebalance();
+        } else if(command.equals(getRefreshVolumeCapcity())) {
+            refreshVolumeCapacities();
         }
     }
 
@@ -890,6 +895,17 @@
         }
     }
 
+    public void refreshVolumeCapacities() {
+        
Frontend.getInstance().runAction(VdcActionType.RefreshGlusterVolumeDetails, new 
GlusterVolumeParameters(((GlusterVolumeEntity)getSelectedItem()).getId()), new 
IFrontendActionAsyncCallback() {
+            @Override
+            public void executed(FrontendActionAsyncResult result) {
+                if(result.getReturnValue().getSucceeded()) {
+                    refresh();
+                }
+            }
+        });
+    }
+
     @Override
     protected String getListName() {
         return "VolumeListModel"; //$NON-NLS-1$
@@ -922,4 +938,12 @@
     public boolean isSearchStringMatch(String searchString) {
         return searchString.trim().toLowerCase().startsWith("volume"); 
//$NON-NLS-1$
     }
+
+    public UICommand getRefreshVolumeCapcity() {
+        return refreshVolumeCapcity;
+    }
+
+    public void setRefreshVolumeCapcity(UICommand refreshVolumeCapcity) {
+        this.refreshVolumeCapcity = refreshVolumeCapcity;
+    }
 }
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/ApplicationMessages.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/ApplicationMessages.java
index 1ce251b..27fc371 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/ApplicationMessages.java
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/ApplicationMessages.java
@@ -101,4 +101,7 @@
 
     @DefaultMessage("{0} GB")
     String rebalanceFileSizeGb(String size);
+
+    @DefaultMessage("Last updated {0} {1} ago \nClick the icon to refresh now")
+    String volumeCapacityRefreshClockToolTip(long time, String timeUnit);
 }
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/ApplicationResources.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/ApplicationResources.java
index d765243..78cd1e6 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/ApplicationResources.java
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/ApplicationResources.java
@@ -412,4 +412,6 @@
     @Source("images/glusterAsyncTasks/remove_brick_commit_required.png")
     ImageResource removeBrickCommitRequired();
 
+    @Source("images/RefreshClock.png")
+    ImageResource clockImage();
 }
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/MainTabVolumeView.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/MainTabVolumeView.java
index 2327042..8ec6320 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/MainTabVolumeView.java
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/MainTabVolumeView.java
@@ -20,6 +20,7 @@
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.tab.MainTabVolumePresenter;
 import 
org.ovirt.engine.ui.webadmin.section.main.view.AbstractMainTabWithDetailsTableView;
 import org.ovirt.engine.ui.webadmin.widget.action.WebAdminButtonDefinition;
+import 
org.ovirt.engine.ui.webadmin.widget.table.column.CompositeVolumeCapacityColumn;
 import org.ovirt.engine.ui.webadmin.widget.table.column.MenuCell;
 import org.ovirt.engine.ui.webadmin.widget.table.column.VolumeActivityColumn;
 import 
org.ovirt.engine.ui.webadmin.widget.table.column.VolumeActivityCompositeCell;
@@ -27,6 +28,7 @@
 import 
org.ovirt.engine.ui.webadmin.widget.table.column.VolumeActivityStatusColumn;
 import 
org.ovirt.engine.ui.webadmin.widget.table.column.VolumeBrickStatusColumn;
 import org.ovirt.engine.ui.webadmin.widget.table.column.VolumeCapacityCell;
+import 
org.ovirt.engine.ui.webadmin.widget.table.column.VolumeCapacityClockCell;
 import org.ovirt.engine.ui.webadmin.widget.table.column.VolumeStatusColumn;
 import org.ovirt.engine.ui.webadmin.widget.table.column.VolumeTaskWaitingCell;
 
@@ -85,6 +87,29 @@
 
         getTable().addColumn(new VolumeBrickStatusColumn(), 
constants.bricksStatusVolume(), "150px"); //$NON-NLS-1$
 
+        WebAdminButtonDefinition<GlusterVolumeEntity> buttonDefinition = new 
WebAdminButtonDefinition<GlusterVolumeEntity>(constants.volumeCapacity()) {
+            @Override
+            protected UICommand resolveCommand() {
+                return getMainModel().getRefreshVolumeCapcity();
+            }
+        };
+
+        List<HasCell<GlusterVolumeEntity, ?>> volumeCapacityCompositeList = 
new ArrayList<HasCell<GlusterVolumeEntity, ?>>();
+        volumeCapacityCompositeList.add(new Column<GlusterVolumeEntity, 
GlusterVolumeEntity>(new VolumeCapacityCell()) {
+            @Override
+            public GlusterVolumeEntity getValue(GlusterVolumeEntity object) {
+                return object;
+            }
+        });
+        volumeCapacityCompositeList.add(new Column<GlusterVolumeEntity, 
GlusterVolumeEntity>(new VolumeCapacityClockCell(buttonDefinition)) {
+            @Override
+            public GlusterVolumeEntity getValue(GlusterVolumeEntity object) {
+                return object;
+            }
+        });
+
+        getTable().addColumn(new 
CompositeVolumeCapacityColumn<GlusterVolumeEntity>(volumeCapacityCompositeList),
 constants.volumeCapacity(), "150px");//$NON-NLS-1$;
+
         MenuCell<GlusterTaskSupport> rebalanceMenuCell = 
getRebalanceActivityMenu(constants);
         MenuCell<GlusterTaskSupport> removeBricksMenuCell = 
getRemoveBrickActivityMenu(constants);
         List<HasCell<GlusterTaskSupport, ?>> list = new 
ArrayList<HasCell<GlusterTaskSupport, ?>>();
@@ -121,13 +146,6 @@
                 return object;
             }
         });
-
-        getTable().addColumn(new Column<GlusterVolumeEntity, 
GlusterVolumeEntity>(new VolumeCapacityCell()) {
-            @Override
-            public GlusterVolumeEntity getValue(GlusterVolumeEntity object) {
-                return object;
-            }
-        }, constants.volumeCapacity(), "60px");//$NON-NLS-1$
 
         getTable().addColumn(new VolumeActivityColumn<GlusterVolumeEntity>(new 
VolumeActivityCompositeCell<GlusterTaskSupport>(compositeList) {
                 @Override
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/gluster/SubTabVolumeBrickView.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/gluster/SubTabVolumeBrickView.java
index d106c7a..73fd4f7 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/gluster/SubTabVolumeBrickView.java
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/gluster/SubTabVolumeBrickView.java
@@ -45,7 +45,7 @@
         initWidget(getTable());
     }
 
-    void initTable(ApplicationConstants constants) {
+    void initTable(final ApplicationConstants constants) {
         getTable().enableColumnResizing();
 
         getTable().addColumn(new BrickStatusColumn(), constants.empty(), 
"30px"); //$NON-NLS-1$
@@ -75,6 +75,13 @@
                 BrickProperties brickProperties = object.getBrickProperties();
                 return (int)(((brickProperties.getTotalSize() - 
brickProperties.getFreeSize())/ (brickProperties.getTotalSize())) * 100);
             }
+
+            @Override
+            protected String getProgressText(GlusterBrickEntity object) {
+                Integer progressValue = getProgressValue(object);
+                return progressValue != null ? progressValue + "%" : "?"; 
//$NON-NLS-1$ //$NON-NLS-2$
+            }
+
         }, constants.volumeCapacity(), "60px");//$NON-NLS-1$
 
         getTable().addColumn(new 
VolumeActivityColumn<GlusterBrickEntity>(getActivityCell(constants)),
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/table/column/CompositeVolumeCapacityColumn.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/table/column/CompositeVolumeCapacityColumn.java
new file mode 100644
index 0000000..eb51047
--- /dev/null
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/table/column/CompositeVolumeCapacityColumn.java
@@ -0,0 +1,21 @@
+package org.ovirt.engine.ui.webadmin.widget.table.column;
+
+import java.io.Serializable;
+import java.util.List;
+
+import 
org.ovirt.engine.core.common.businessentities.gluster.GlusterVolumeEntity;
+
+import com.google.gwt.cell.client.HasCell;
+import com.google.gwt.user.cellview.client.Column;
+
+public class CompositeVolumeCapacityColumn<T extends Serializable> extends 
Column<GlusterVolumeEntity, GlusterVolumeEntity> {
+
+    public CompositeVolumeCapacityColumn(List<HasCell<GlusterVolumeEntity, ?>> 
hasCells) {
+        super(new VolumeCapacityCompositeCell(hasCells));
+    }
+
+    @Override
+    public GlusterVolumeEntity getValue(GlusterVolumeEntity object) {
+        return object;
+    }
+}
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/table/column/VolumeCapacityClockCell.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/table/column/VolumeCapacityClockCell.java
new file mode 100644
index 0000000..ab53c6d
--- /dev/null
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/table/column/VolumeCapacityClockCell.java
@@ -0,0 +1,67 @@
+package org.ovirt.engine.ui.webadmin.widget.table.column;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+import 
org.ovirt.engine.core.common.businessentities.gluster.GlusterVolumeEntity;
+import org.ovirt.engine.core.common.utils.Pair;
+import org.ovirt.engine.ui.common.CommonApplicationResources;
+import org.ovirt.engine.ui.common.widget.action.ActionButtonDefinition;
+import org.ovirt.engine.ui.frontend.utils.TimeUnitConverter;
+import org.ovirt.engine.ui.frontend.utils.TimeUnitConverter.TimeUnit;
+import org.ovirt.engine.ui.webadmin.ApplicationMessages;
+import org.ovirt.engine.ui.webadmin.ApplicationTemplates;
+import org.ovirt.engine.ui.webadmin.gin.ClientGinjectorProvider;
+
+import com.google.gwt.cell.client.AbstractCell;
+import com.google.gwt.cell.client.ValueUpdater;
+import com.google.gwt.core.client.GWT;
+import com.google.gwt.dom.client.Element;
+import com.google.gwt.dom.client.NativeEvent;
+import com.google.gwt.resources.client.ImageResource;
+import com.google.gwt.safehtml.shared.SafeHtml;
+import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
+import com.google.gwt.safehtml.shared.SafeHtmlUtils;
+import com.google.gwt.user.client.ui.AbstractImagePrototype;
+
+public class VolumeCapacityClockCell extends AbstractCell<GlusterVolumeEntity> 
{
+
+    private ApplicationTemplates templates = 
ClientGinjectorProvider.getApplicationTemplates();
+    private static CommonApplicationResources resources = 
GWT.create(CommonApplicationResources.class);
+    private ApplicationMessages messages = 
ClientGinjectorProvider.getApplicationMessages();
+
+    private ActionButtonDefinition<GlusterVolumeEntity> buttonDefinition;
+
+    public VolumeCapacityClockCell(ActionButtonDefinition<GlusterVolumeEntity> 
buttonDefinition) {
+        super("click");//$NON-NLS-1$
+        this.buttonDefinition = buttonDefinition;
+    }
+
+    @Override
+    public void render(Context context, GlusterVolumeEntity value, 
SafeHtmlBuilder sb) {
+        
sb.append(templates.volumeActivityMenu(getImage(value.getAdvancedDetails().getUpdatedAt())));
+    }
+
+    private Pair<Long, TimeUnitConverter.TimeUnit> getTimeElapsed(long l) {
+        if(l < 0) {
+            l = 0;
+        }
+        return TimeUnitConverter.autoConvert(l, TimeUnit.Seconds);
+    }
+
+    private SafeHtml getImage(Date updatedAt) {
+        ImageResource image;
+        image = resources.refreshButtonImage();
+        Pair<Long, TimeUnit> interval = getTimeElapsed(new 
Date().compareTo(updatedAt));
+        return 
templates.image(SafeHtmlUtils.fromTrustedString(AbstractImagePrototype.create(image).getHTML()),
 messages.volumeCapacityRefreshClockToolTip(interval.getFirst(), 
interval.getSecond().toString()));
+    }
+
+    @Override
+    public void onBrowserEvent(Context context, Element parent, 
GlusterVolumeEntity value, NativeEvent event, ValueUpdater<GlusterVolumeEntity> 
valueUpdater) {
+        super.onBrowserEvent(context, parent, value, event, valueUpdater);
+        List<GlusterVolumeEntity> values = new 
ArrayList<GlusterVolumeEntity>();
+        values.add(value);
+        buttonDefinition.onClick(values);
+    }
+}
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/table/column/VolumeCapacityCompositeCell.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/table/column/VolumeCapacityCompositeCell.java
new file mode 100644
index 0000000..c22c4ea
--- /dev/null
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/table/column/VolumeCapacityCompositeCell.java
@@ -0,0 +1,56 @@
+package org.ovirt.engine.ui.webadmin.widget.table.column;
+
+import java.util.Iterator;
+import java.util.List;
+
+import 
org.ovirt.engine.core.common.businessentities.gluster.GlusterVolumeEntity;
+import 
org.ovirt.engine.core.common.businessentities.gluster.GlusterVolumeSizeInfo;
+
+import com.google.gwt.cell.client.Cell;
+import com.google.gwt.cell.client.CompositeCell;
+import com.google.gwt.cell.client.HasCell;
+import com.google.gwt.dom.client.Element;
+import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
+
+public class VolumeCapacityCompositeCell extends 
CompositeCell<GlusterVolumeEntity> {
+
+    List<HasCell<GlusterVolumeEntity, ?>> hasCells;
+    public VolumeCapacityCompositeCell(List<HasCell<GlusterVolumeEntity, ?>> 
hasCells) {
+        super(hasCells);
+        this.hasCells = hasCells;
+    }
+
+    @Override
+    public void render(Context context, GlusterVolumeEntity value, 
SafeHtmlBuilder sb) {
+        if((value.getAdvancedDetails() == null) || 
(!isVisible(value.getAdvancedDetails().getCapacityInfo()))) {
+           return;
+        }
+        sb.appendHtmlConstant("<table style=\"margin:0 auto\"><tr>"); 
//$NON-NLS-1$
+        Iterator<HasCell<GlusterVolumeEntity, ?>> iterator = 
hasCells.iterator();
+        while (iterator.hasNext()) {
+            render(context, value, sb, iterator.next());
+        }
+        sb.appendHtmlConstant("</tr></table>"); //$NON-NLS-1$
+    }
+
+    private boolean isVisible(GlusterVolumeSizeInfo value) {
+        if(value == null) {
+            return false;
+        }
+        return true;
+    }
+
+    @Override
+    protected <X> void render(Context context, GlusterVolumeEntity value, 
SafeHtmlBuilder sb, HasCell<GlusterVolumeEntity, X> hasCell) {
+        Cell<X> cell = hasCell.getCell();
+        sb.appendHtmlConstant("<td>"); //$NON-NLS-1$
+        cell.render(context, hasCell.getValue(value), sb);
+        sb.appendHtmlConstant("</td>"); //$NON-NLS-1$
+    }
+
+    @Override
+    protected Element getContainerElement(Element parent) {
+        return 
super.getContainerElement(parent).getFirstChildElement().getFirstChildElement().getFirstChildElement();
+    }
+
+}
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/resources/org/ovirt/engine/ui/webadmin/images/RefreshClock.png
 
b/frontend/webadmin/modules/webadmin/src/main/resources/org/ovirt/engine/ui/webadmin/images/RefreshClock.png
new file mode 100644
index 0000000..cb277b2
--- /dev/null
+++ 
b/frontend/webadmin/modules/webadmin/src/main/resources/org/ovirt/engine/ui/webadmin/images/RefreshClock.png
Binary files differ


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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I983daf32966527cdfa7773e07aa055a24519fbe2
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