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 <froll...@redhat.com> --- 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 <froll...@redhat.com> Gerrit-Reviewer: Fred Rolland <froll...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches