Hello Fred Rolland,
I'd like you to do a code review. Please visit
https://gerrit.ovirt.org/41398
to review the following change.
Change subject: webadmin: Add support of refresh LUN size in UI
......................................................................
webadmin: Add support of refresh LUN size in UI
Add a new column in "Edit Domain" of iSCSI Domain.
The column is available on ly in "LUNs->Targets" view.
Add a new cell renderer of type toggle button.
Change-Id: I84c83f07f53d286f62fb6104f62fbfb37feb2b42
Relates-To: https://bugzilla.redhat.com/609689
Signed-off-by: Fred Rolland <[email protected]>
---
M
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetLunsByVgIdQuery.java
M backend/manager/modules/dal/src/main/resources/bundles/AppErrors.properties
M
frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/AppErrors.java
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/table/cell/AbstractToggleButtonCell.java
A
frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/table/column/AbstractLunAvailableSizeColumn.java
M
frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/storage/SanStorageLunToTargetList.java
M
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/LunModel.java
M
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/SanStorageModel.java
M
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/StorageListModel.java
M
frontend/webadmin/modules/userportal-gwtp/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties
11 files changed, 207 insertions(+), 0 deletions(-)
git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/98/41398/1
diff --git
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetLunsByVgIdQuery.java
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetLunsByVgIdQuery.java
index 92aecb5..054b43f 100644
---
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetLunsByVgIdQuery.java
+++
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetLunsByVgIdQuery.java
@@ -48,6 +48,7 @@
if (lunFromDeviceList != null) {
lun.setPathsDictionary(lunFromDeviceList.getPathsDictionary());
lun.setPathsCapacity(lunFromDeviceList.getPathsCapacity());
+ lun.setPvSize(lunFromDeviceList.getPvSize());
}
}
diff --git
a/backend/manager/modules/dal/src/main/resources/bundles/AppErrors.properties
b/backend/manager/modules/dal/src/main/resources/bundles/AppErrors.properties
index 9bf07b6..8f9b01b 100644
---
a/backend/manager/modules/dal/src/main/resources/bundles/AppErrors.properties
+++
b/backend/manager/modules/dal/src/main/resources/bundles/AppErrors.properties
@@ -805,6 +805,7 @@
DATA_CENTER_POSIX_STORAGE_NOT_SUPPORTED_IN_CURRENT_VERSION="File based
storage" is not supported with data center compatibility version.
DATA_CENTER_GLUSTER_STORAGE_NOT_SUPPORTED_IN_CURRENT_VERSION="Gluster based
storage" is not supported with current data center compatibility version.
DATA_CENTER_CINDER_STORAGE_NOT_SUPPORTED_IN_CURRENT_VERSION=Cinder based
storage is not supported with current data center compatibility version.
+ACTION_TYPE_FAILED_REFRESH_LUNS_UNSUPPORTED_ACTION=Extend LUN size is not
supported with current data center compatibility version.
VDS_CANNOT_UPDATE_CLUSTER=Updating Host's Cluster cannot be performed through
update Host action, please use Change Host Cluster action instead.
VM_CANNOT_UPDATE_CLUSTER=Updating VM's Cluster cannot be performed through
update VM action, please use Change VM Cluster action instead.
VM_STATUS_NOT_VALID_FOR_UPDATE=Cannot update a VM in this status. Try stopping
the VM first.
diff --git
a/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/AppErrors.java
b/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/AppErrors.java
index 2d1f427..7f8eba9 100644
---
a/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/AppErrors.java
+++
b/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/AppErrors.java
@@ -2186,6 +2186,9 @@
@DefaultStringValue("Cinder based storage is not supported with current
data center compatibility version.")
String DATA_CENTER_CINDER_STORAGE_NOT_SUPPORTED_IN_CURRENT_VERSION();
+ @DefaultStringValue("Extend LUN size is not supported with current data
center compatibility version.")
+ String ACTION_TYPE_FAILED_REFRESH_LUNS_UNSUPPORTED_ACTION();
+
@DefaultStringValue("Updating Host's Cluster cannot be performed through
update Host action, please use Change Host Cluster action instead.")
String VDS_CANNOT_UPDATE_CLUSTER();
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 19a3a92..ddfeacd 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
@@ -1378,6 +1378,9 @@
@DefaultStringValue("Dev. Size")
String devSizeSanStorage();
+ @DefaultStringValue("Add. Size")
+ String devAdditionalSizeSanStorage();
+
@DefaultStringValue("#path")
String pathSanStorage();
diff --git
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/table/cell/AbstractToggleButtonCell.java
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/table/cell/AbstractToggleButtonCell.java
new file mode 100644
index 0000000..4777fd8
--- /dev/null
+++
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/table/cell/AbstractToggleButtonCell.java
@@ -0,0 +1,68 @@
+package org.ovirt.engine.ui.common.widget.table.cell;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import org.ovirt.engine.ui.common.CommonApplicationResources;
+import org.ovirt.engine.ui.common.gin.AssetProvider;
+
+import com.google.gwt.cell.client.ValueUpdater;
+import com.google.gwt.core.client.GWT;
+import com.google.gwt.dom.client.BrowserEvents;
+import com.google.gwt.dom.client.Element;
+import com.google.gwt.dom.client.NativeEvent;
+import com.google.gwt.safehtml.client.SafeHtmlTemplates;
+import com.google.gwt.safehtml.shared.SafeHtml;
+
+public abstract class AbstractToggleButtonCell<T> extends AbstractCell<T> {
+
+ public interface ToggleButtonCellTemplate extends SafeHtmlTemplates {
+
+ @Template("<span id=\"{0}\" style=\"padding-left: 1px;\">{1}</span>")
+ public SafeHtml span(String id, SafeHtml html);
+
+ @Template("<input id=\"{2}\" style=\"background: transparent; border:
0px; width: 95%; {1}\"" +
+ "readonly=\"readonly\" type=\"text\" value=\"{0}\"
tabindex=\"-1\"></input>")
+ public SafeHtml disabled(String value, String customStyle, String id);
+
+ @Template("<button id=\"{0}\" tabindex='-1' type=\"button\"
style=\"border-radius:2px;color:black\" " +
+ "class=\"gwt-ToggleButton gwt-ToggleButton-up\"
tabindex=\"-1\" aria-pressed=\"true\">{1}</button>")
+ public SafeHtml toggledUp(String id, String value);
+
+ @Template("<button id=\"{0}\" tabindex='-1' type=\"button\"
style=\"border-radius:2px\" " +
+ "class=\"gwt-ToggleButton gwt-ToggleButton-down\"
tabindex=\"-1\" aria-pressed=\"false\">{1}</button>")
+ public SafeHtml toggledDown(String id, String value);
+ }
+
+ protected static final ToggleButtonCellTemplate templates =
GWT.create(ToggleButtonCellTemplate.class);
+
+ private final static CommonApplicationResources resources =
AssetProvider.getResources();
+
+ public AbstractToggleButtonCell() {
+ }
+
+
+ @Override
+ public Set<String> getConsumedEvents() {
+ Set<String> set = new HashSet<>(super.getConsumedEvents());
+ set.add(BrowserEvents.CLICK);
+ return set;
+ }
+
+ @Override
+ public void onBrowserEvent(Context context,
+ Element parent,
+ T model,
+ SafeHtml tooltipContent,
+ NativeEvent event,
+ ValueUpdater<T> valueUpdater) {
+
+ super.onBrowserEvent(context, parent, model, tooltipContent, event,
valueUpdater);
+ if (!BrowserEvents.CLICK.equals(event.getType())) {
+ return;
+ }
+ onClickEvent(model);
+ }
+
+ public abstract void onClickEvent(T model);
+}
diff --git
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/table/column/AbstractLunAvailableSizeColumn.java
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/table/column/AbstractLunAvailableSizeColumn.java
new file mode 100644
index 0000000..62450ba
--- /dev/null
+++
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/table/column/AbstractLunAvailableSizeColumn.java
@@ -0,0 +1,49 @@
+package org.ovirt.engine.ui.common.widget.table.column;
+
+import com.google.gwt.safehtml.shared.SafeHtml;
+import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
+import org.ovirt.engine.ui.common.widget.table.cell.AbstractToggleButtonCell;
+import org.ovirt.engine.ui.uicommonweb.models.storage.LunModel;
+
+import com.google.gwt.user.cellview.client.Column;
+
+public abstract class AbstractLunAvailableSizeColumn extends Column<LunModel,
LunModel> {
+
+ public AbstractLunAvailableSizeColumn() {
+ super(new AbstractToggleButtonCell<LunModel>() {
+ @Override
+ public void onClickEvent(LunModel lunModel) {
+ if (lunModel !=null) {
+
lunModel.setAdditionalAvailableSizeSelected(!lunModel.isAdditionalAvailableSizeSelected());
+ }
+ }
+ @Override
+ public void render(Context context, LunModel value,
SafeHtmlBuilder sb, String id) {
+ boolean isGrayedOut = value.getIsGrayedOut();
+ String inputId = id + "_input"; //$NON-NLS-1$
+
+ SafeHtml input = null;
+
+ int additionalAvailableSizeSize =
value.getAdditionalAvailableSize();
+ String additionalAvailableSizeSizeString = "+ " + //$NON-NLS-1$
+ additionalAvailableSizeSize + " GB"; //$NON-NLS-1$
+
+ if (additionalAvailableSizeSize == 0 ) {
+ input = templates.disabled("", "color:gray", inputId);
//$NON-NLS-1$
+ }
+ else if (!isGrayedOut) {
+ input =
templates.disabled(additionalAvailableSizeSizeString, "color:black", inputId);
//$NON-NLS-1$
+ }
+ else if (value.isAdditionalAvailableSizeSelected()) {
+ input = templates.toggledDown(inputId,
additionalAvailableSizeSizeString);
+ }
+ else {
+ input = templates.toggledUp(inputId,
additionalAvailableSizeSizeString);
+ }
+
+ sb.append(templates.span(id, input));
+
+ }
+ });
+ }
+}
diff --git
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/storage/SanStorageLunToTargetList.java
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/storage/SanStorageLunToTargetList.java
index 734c23f..1b3e128 100644
---
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/storage/SanStorageLunToTargetList.java
+++
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/storage/SanStorageLunToTargetList.java
@@ -7,6 +7,7 @@
import org.ovirt.engine.ui.common.gin.AssetProvider;
import org.ovirt.engine.ui.common.widget.editor.EntityModelCellTable;
import org.ovirt.engine.ui.common.widget.table.cell.CheckboxCell;
+import
org.ovirt.engine.ui.common.widget.table.column.AbstractLunAvailableSizeColumn;
import
org.ovirt.engine.ui.common.widget.table.column.AbstractLunSelectionColumn;
import org.ovirt.engine.ui.common.widget.table.column.AbstractLunTextColumn;
import org.ovirt.engine.ui.uicommonweb.models.EntityModel;
@@ -220,6 +221,13 @@
}
}, constants.devSizeSanStorage(), "70px"); //$NON-NLS-1$
+ table.addColumn(new AbstractLunAvailableSizeColumn() {
+ @Override
+ public LunModel getValue(LunModel object) {
+ return object;
+ }
+ }, constants.devAdditionalSizeSanStorage(), "70px"); //$NON-NLS-1$
+
table.addColumn(new AbstractLunTextColumn() {
@Override
public String getRawValue(LunModel model) {
diff --git
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/LunModel.java
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/LunModel.java
index 01c362b..cf00c76 100644
---
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/LunModel.java
+++
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/LunModel.java
@@ -93,6 +93,38 @@
}
}
+ private int additionalAvailableSize;
+
+ public int getAdditionalAvailableSize()
+ {
+ return additionalAvailableSize;
+ }
+
+ public void setAdditionalAvailableSize(int value)
+ {
+ if (additionalAvailableSize != value)
+ {
+ additionalAvailableSize = value;
+ onPropertyChanged(new PropertyChangedEventArgs("AdditionalSize"));
//$NON-NLS-1$
+ }
+ }
+
+ private boolean additionalAvailableSizeSelected;
+
+ public boolean isAdditionalAvailableSizeSelected()
+ {
+ return additionalAvailableSizeSelected;
+ }
+
+ public void setAdditionalAvailableSizeSelected(boolean value)
+ {
+ if (additionalAvailableSizeSelected != value)
+ {
+ additionalAvailableSizeSelected = value;
+ onPropertyChanged(new
PropertyChangedEventArgs("AdditionalAvailableSizeSelected")); //$NON-NLS-1$
+ }
+ }
+
private int multipathing;
public int getMultipathing()
diff --git
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/SanStorageModel.java
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/SanStorageModel.java
index 0817bfc..fc2346c 100644
---
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/SanStorageModel.java
+++
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/SanStorageModel.java
@@ -241,6 +241,8 @@
lunModel.setMultipathing(a.getPathCount());
lunModel.setTargets(targets);
lunModel.setSize(a.getDeviceSize());
+
lunModel.setAdditionalAvailableSize(getAdditionalAvailableSize(a));
+ lunModel.setAdditionalAvailableSizeSelected(false);
lunModel.setIsAccessible(a.getAccessible());
lunModel.setStatus(a.getStatus());
lunModel.setIsIncluded(isIncluded);
@@ -263,6 +265,11 @@
initializeItems(newItems, null);
proposeDiscover();
+ }
+
+ private int getAdditionalAvailableSize(LUNs lun) {
+ int additionalAvailableSize = lun.getDeviceSize() - lun.getPvSize() -1;
+ return additionalAvailableSize;
}
private boolean containsLun(LunModel lunModel, Collection<EntityModel<?>>
models, boolean isIncluded) {
@@ -458,6 +465,8 @@
currLun.setMultipathing(lun.getMultipathing());
currLun.setTargets(createTargetModelList((LUNs)
lun.getEntity()));
currLun.setSize(lun.getSize());
+
currLun.setAdditionalAvailableSize(lun.getAdditionalAvailableSize());
+
currLun.setAdditionalAvailableSizeSelected(lun.isAdditionalAvailableSizeSelected());
currLun.setIsAccessible(lun.getIsAccessible());
currLun.setStatus(lun.getStatus());
currLun.setIsIncluded(lun.getIsIncluded());
@@ -634,6 +643,24 @@
return luns;
}
+ public ArrayList<LunModel> getLunsToRefresh()
+ {
+ ArrayList<LunModel> luns = new ArrayList<LunModel>();
+ if (!getIsGrouppedByTarget()) {
+ List<LunModel> items = (List<LunModel>) getItems();
+ for (LunModel lun : items)
+ {
+ if (lun.getIsIncluded() &&
lun.isAdditionalAvailableSizeSelected()
+ && Linq.firstOrDefault(luns, new
Linq.LunPredicate(lun)) == null)
+ {
+ luns.add(lun);
+ }
+ }
+ }
+
+ return luns;
+ }
+
public ArrayList<String> getUsedLunsMessages() {
ArrayList<String> usedLunsMessages = new ArrayList<String>();
UIMessages messages = ConstantsManager.getInstance().getMessages();
diff --git
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/StorageListModel.java
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/StorageListModel.java
index dcb9afd..12152ee 100644
---
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/StorageListModel.java
+++
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/StorageListModel.java
@@ -1596,7 +1596,21 @@
new
ExtendSANStorageDomainParameters(storageDomain1.getId(), lunIds, force),
null, this);
}
+
+ ArrayList<String> lunToRefreshIds = new
ArrayList<String>();
+
+ for (LunModel lun : sanStorageModel.getLunsToRefresh()) {
+ lunToRefreshIds.add(lun.getLunId());
+ }
+
+ if (lunToRefreshIds.size() > 0) {
+
Frontend.getInstance().runAction(VdcActionType.RefreshLunsSize,
+ new
ExtendSANStorageDomainParameters(storageDomain1.getId(), lunToRefreshIds,
false),
+ null, this);
+ }
+
storageListModel.onFinish(storageListModel.context, true,
storageListModel.storageModel);
+
}
}, this);
}
diff --git
a/frontend/webadmin/modules/userportal-gwtp/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties
b/frontend/webadmin/modules/userportal-gwtp/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties
index 97e1f20..20a72a6 100644
---
a/frontend/webadmin/modules/userportal-gwtp/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties
+++
b/frontend/webadmin/modules/userportal-gwtp/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties
@@ -718,6 +718,7 @@
DATA_CENTER_POSIX_STORAGE_NOT_SUPPORTED_IN_CURRENT_VERSION="File based
storage" is not supported with data center compatibility version.
DATA_CENTER_GLUSTER_STORAGE_NOT_SUPPORTED_IN_CURRENT_VERSION="Gluster based
storage" is not supported with current data center compatibility version.
DATA_CENTER_CINDER_STORAGE_NOT_SUPPORTED_IN_CURRENT_VERSION=Cinder based
storage is not supported with current data center compatibility version.
+ACTION_TYPE_FAILED_REFRESH_LUNS_UNSUPPORTED_ACTION=Extend LUN size is not
supported with current data center compatibility version.
VDS_CANNOT_UPDATE_CLUSTER=Updating Host's Cluster cannot be performed through
update Host action, please use Change Host Cluster action instead.
VM_CANNOT_UPDATE_CLUSTER=Updating VM's Cluster cannot be performed through
update VM action, please use Change VM Cluster action instead.
VM_STATUS_NOT_VALID_FOR_UPDATE=Cannot update a VM in this status. Try stopping
the VM first.
--
To view, visit https://gerrit.ovirt.org/41398
To unsubscribe, visit https://gerrit.ovirt.org/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I84c83f07f53d286f62fb6104f62fbfb37feb2b42
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Freddy Rolland <[email protected]>
Gerrit-Reviewer: Fred Rolland <[email protected]>
_______________________________________________
Engine-patches mailing list
[email protected]
http://lists.ovirt.org/mailman/listinfo/engine-patches