Daniel Erez has uploaded a new change for review. Change subject: webadmin: import iSCSI data storage domain dialog ......................................................................
webadmin: import iSCSI data storage domain dialog Import domain dialog -> added a view for import iSCSI data domain which consists of two panels: * Target discovery. * Storage domains that are candidate for import. Feature page: http://www.ovirt.org/Features/ImportStorageDomain#GUI_Perspective_2 Change-Id: If379f5e41544fda90cb3e31e38784b768c994e5c Signed-off-by: Daniel Erez <[email protected]> --- M frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/CommonApplicationConstants.java M frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/ValidatedPanelWidget.java M frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/ValidatedPanelWidget.ui.xml M frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/storage/AbstractStorageView.java A frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/storage/ImportIscsiStorageView.java A frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/storage/ImportIscsiStorageView.ui.xml M frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/storage/IscsiDiscoverTargetsView.java M frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/storage/IscsiDiscoverTargetsView.ui.xml A frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/ImportIscsiStorageModel.java A frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/ImportSanStorageModel.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/ImportStorageModelBehavior.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/IscsiStorageModel.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/NewEditStorageModelBehavior.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/SanStorageModelBase.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/SanTargetModel.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/StorageListModel.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/StorageModel.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/StorageModelBehavior.java M frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIConstants.java 20 files changed, 715 insertions(+), 43 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/73/29173/1 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 3bc2ef2..111f922 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 @@ -1296,9 +1296,6 @@ @DefaultStringValue("Discover Targets") String storageIscsiDiscoverTargetsLabel(); - @DefaultStringValue("Login All") - String storageIscsiPopupLoginAllButtonLabel(); - @DefaultStringValue("Login") String storageIscsiPopupLoginButtonLabel(); @@ -1799,6 +1796,12 @@ @DefaultStringValue("IQN") String iqn(); + @DefaultStringValue("Storage Name") + String storageName(); + + @DefaultStringValue("Storage ID (VG Name)") + String storageIdVgName(); + @DefaultStringValue("Provide custom serial number policy") String overrideSerialNumberPolicy(); diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/ValidatedPanelWidget.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/ValidatedPanelWidget.java index eb86028..716fb3e 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/ValidatedPanelWidget.java +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/ValidatedPanelWidget.java @@ -3,13 +3,16 @@ import com.google.gwt.core.client.GWT; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; -import com.google.gwt.user.client.ui.SimplePanel; +import com.google.gwt.user.client.ui.FlowPanel; +import com.google.gwt.user.client.ui.HasWidgets; import com.google.gwt.user.client.ui.Widget; -public class ValidatedPanelWidget extends AbstractValidatedWidget { +import java.util.Iterator; + +public class ValidatedPanelWidget extends AbstractValidatedWidget implements HasWidgets { @UiField - SimplePanel panel; + FlowPanel panel; interface WidgetUiBinder extends UiBinder<Widget, ValidatedPanelWidget> { WidgetUiBinder uiBinder = GWT.create(WidgetUiBinder.class); @@ -25,7 +28,27 @@ } public void setWidget(Widget widget) { - panel.setWidget(widget); + panel.add(widget); + } + + @Override + public void add(Widget w) { + panel.add(w); + } + + @Override + public void clear() { + panel.clear(); + } + + @Override + public Iterator<Widget> iterator() { + return panel.iterator(); + } + + @Override + public boolean remove(Widget w) { + return panel.remove(w); } @Override diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/ValidatedPanelWidget.ui.xml b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/ValidatedPanelWidget.ui.xml index becdc35..5623b82 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/ValidatedPanelWidget.ui.xml +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/ValidatedPanelWidget.ui.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent"> <ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder" xmlns:g="urn:import:com.google.gwt.user.client.ui"> - <g:SimplePanel ui:field="panel" /> + <g:FlowPanel ui:field="panel" /> </ui:UiBinder> diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/storage/AbstractStorageView.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/storage/AbstractStorageView.java index 1e3c452..b1b297f 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/storage/AbstractStorageView.java +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/storage/AbstractStorageView.java @@ -1,5 +1,7 @@ package org.ovirt.engine.ui.common.widget.uicommon.storage; +import com.google.gwt.core.client.GWT; +import org.ovirt.engine.ui.common.CommonApplicationConstants; import org.ovirt.engine.ui.common.widget.HasEditorDriver; import org.ovirt.engine.ui.uicommonweb.models.storage.IStorageModel; @@ -7,6 +9,8 @@ public abstract class AbstractStorageView<M extends IStorageModel> extends Composite implements HasEditorDriver<M> { + protected static final CommonApplicationConstants constants = GWT.create(CommonApplicationConstants.class); + protected boolean multiSelection; public abstract void focus(); diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/storage/ImportIscsiStorageView.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/storage/ImportIscsiStorageView.java new file mode 100644 index 0000000..a186e83 --- /dev/null +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/storage/ImportIscsiStorageView.java @@ -0,0 +1,262 @@ +package org.ovirt.engine.ui.common.widget.uicommon.storage; + +import java.util.ArrayList; +import java.util.List; + +import com.google.gwt.user.client.ui.SplitLayoutPanel; +import com.google.gwt.view.client.MultiSelectionModel; +import com.google.gwt.view.client.SelectionModel; +import org.ovirt.engine.core.common.businessentities.StorageDomain; +import org.ovirt.engine.ui.common.widget.HasValidation; +import org.ovirt.engine.ui.common.widget.ValidatedPanelWidget; +import org.ovirt.engine.ui.common.widget.editor.EntityModelCellTable; +import org.ovirt.engine.ui.common.widget.editor.ListModelObjectCellTable; +import org.ovirt.engine.ui.common.widget.table.column.CheckboxColumn; +import org.ovirt.engine.ui.common.widget.table.column.TextColumnWithTooltip; +import org.ovirt.engine.ui.common.widget.table.header.SelectAllCheckBoxHeader; +import org.ovirt.engine.ui.uicommonweb.models.EntityModel; +import org.ovirt.engine.ui.uicommonweb.models.ListModel; +import org.ovirt.engine.ui.uicommonweb.models.storage.ImportIscsiStorageModel; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.editor.client.SimpleBeanEditorDriver; +import com.google.gwt.resources.client.CssResource; +import com.google.gwt.uibinder.client.UiBinder; +import com.google.gwt.uibinder.client.UiField; +import com.google.gwt.user.client.ui.Widget; +import org.ovirt.engine.ui.uicommonweb.models.storage.SanTargetModel; +import org.ovirt.engine.ui.uicompat.Event; +import org.ovirt.engine.ui.uicompat.EventArgs; +import org.ovirt.engine.ui.uicompat.IEventListener; +import org.ovirt.engine.ui.uicompat.PropertyChangedEventArgs; + +public class ImportIscsiStorageView extends AbstractStorageView<ImportIscsiStorageModel> implements HasValidation { + + interface Driver extends SimpleBeanEditorDriver<ImportIscsiStorageModel, ImportIscsiStorageView> { + } + + interface ViewUiBinder extends UiBinder<Widget, ImportIscsiStorageView> { + ViewUiBinder uiBinder = GWT.create(ViewUiBinder.class); + } + + private final Driver driver = GWT.create(Driver.class); + + @UiField + WidgetStyle style; + + @UiField(provided = true) + @Ignore + IscsiDiscoverTargetsView iscsiDiscoverTargetsView; + + @UiField(provided = true) + SplitLayoutPanel splitLayoutPanel; + + @UiField(provided = true) + @Ignore + EntityModelCellTable<ListModel<SanTargetModel>> targetsTable; + + @UiField(provided = true) + @Ignore + ListModelObjectCellTable<StorageDomain, ListModel> storageDomainsTable; + + @UiField + ValidatedPanelWidget storageDomainsPanel; + + private ImportIscsiStorageModel model; + + public ImportIscsiStorageView() { + initViews(); + initWidget(ViewUiBinder.uiBinder.createAndBindUi(this)); + addStyles(); + driver.initialize(this); + } + + void addStyles() { + iscsiDiscoverTargetsView.setLoginButtonStyle(style.loginButton()); + } + + @Override + public void edit(final ImportIscsiStorageModel object) { + this.model = object; + driver.edit(object); + + iscsiDiscoverTargetsView.edit(object); + targetsTable.asEditor().edit(object.getTargets()); + storageDomainsTable.asEditor().edit(object.getStorageDomains()); + + addEventsHandlers(object); + } + + private void addEventsHandlers(final ImportIscsiStorageModel object) { + object.getPropertyChangedEvent().addListener(new IEventListener() { + @Override + public void eventRaised(Event ev, Object sender, EventArgs args) { + String propName = ((PropertyChangedEventArgs) args).propertyName; + if (propName.equals("IsValid")) { //$NON-NLS-1$ + onIsValidPropertyChange(object); + } + } + }); + object.getTargets().getSelectedItemsChangedEvent().addListener(new IEventListener() { + @Override + public void eventRaised(Event ev, Object sender, EventArgs args) { + if (object.getTargets().getSelectedItems() != null && object.getTargets().getSelectedItems().isEmpty()) { + // Clear items selection + ((MultiSelectionModel) targetsTable.getSelectionModel()).clear(); + } + } + }); + } + + private void initViews() { + // Create split layout panel + splitLayoutPanel = new SplitLayoutPanel(4); + + // Create discover panel + iscsiDiscoverTargetsView = new IscsiDiscoverTargetsView(); + + // Create tables + createTargetsTable(); + createSotrageDomainsTable(); + } + + private void createTargetsTable() { + targetsTable = new EntityModelCellTable<ListModel<SanTargetModel>>(true, true); + targetsTable.enableColumnResizing(); + + addTargetsSelectionColumn(); + + TextColumnWithTooltip<SanTargetModel> iqnColumn = new TextColumnWithTooltip<SanTargetModel>() { + @Override + public String getValue(SanTargetModel model) { + return model.getEntity().getiqn(); + } + }; + targetsTable.addColumn(iqnColumn, constants.iqn(), "60%"); //$NON-NLS-1$ + + TextColumnWithTooltip<SanTargetModel> addressColumn = new TextColumnWithTooltip<SanTargetModel>() { + @Override + public String getValue(SanTargetModel model) { + return model.getEntity().getconnection(); + } + }; + targetsTable.addColumn(addressColumn, constants.addressSanStorage(), "130px"); //$NON-NLS-1$ + + TextColumnWithTooltip<SanTargetModel> portColumn = new TextColumnWithTooltip<SanTargetModel>() { + @Override + public String getValue(SanTargetModel model) { + return model.getEntity().getport(); + } + }; + targetsTable.addColumn(portColumn, constants.portSanStorage(), "70px"); //$NON-NLS-1$ + } + + private void addTargetsSelectionColumn() { + SelectAllCheckBoxHeader<SanTargetModel> selectAllHeader = new SelectAllCheckBoxHeader<SanTargetModel>() { + @Override + protected void selectionChanged(Boolean value) { + ListModel listModel = targetsTable.asEditor().flush(); + if (listModel == null || listModel.getItems() == null) { + return; + } + handleSelection(value, listModel, targetsTable.getSelectionModel()); + } + + @Override + public void handleSelection(Boolean value, ListModel listModel, SelectionModel selectionModel) { + if (!listModel.getItems().iterator().hasNext()) { + return; + } + ArrayList<SanTargetModel> selectedItems = new ArrayList<SanTargetModel>(); + for (SanTargetModel entity : (Iterable<SanTargetModel>) listModel.getItems()) { + if (!entity.getIsLoggedIn()) { + if (value) { + selectedItems.add(entity); + } + selectionModel.setSelected(entity, value); + } + } + listModel.setSelectedItems(selectedItems); + } + + @Override + public Boolean getValue() { + ListModel listModel = targetsTable.asEditor().flush(); + if (listModel == null || listModel.getItems() == null) { + return false; + } + return getCheckValue(listModel.getItems(), targetsTable.getSelectionModel()); + } + }; + CheckboxColumn<SanTargetModel> checkColumn = new CheckboxColumn<SanTargetModel>() { + @Override + protected boolean canEdit(SanTargetModel object) { + return !object.getIsLoggedIn(); + } + + @Override + public Boolean getValue(SanTargetModel object) { + return targetsTable.getSelectionModel().isSelected(object) || object.getIsLoggedIn(); + } + }; + targetsTable.addColumn(checkColumn, selectAllHeader, "25px"); //$NON-NLS-1$ + } + + private void createSotrageDomainsTable() { + storageDomainsTable = new ListModelObjectCellTable<StorageDomain, ListModel>(true, true); + storageDomainsTable.enableColumnResizing(); + + TextColumnWithTooltip<StorageDomain> nameColumn = new TextColumnWithTooltip<StorageDomain>() { + @Override + public String getValue(StorageDomain object) { + return object.getStorageName(); + } + }; + storageDomainsTable.addColumn(nameColumn, constants.storageName(), "50%"); //$NON-NLS-1$ + + TextColumnWithTooltip<StorageDomain> storageIdColumn = new TextColumnWithTooltip<StorageDomain>() { + @Override + public String getValue(StorageDomain object) { + return object.getId().toString(); + } + }; + storageDomainsTable.addColumn(storageIdColumn, constants.storageIdVgName(), "50%"); //$NON-NLS-1$ + } + + private void onIsValidPropertyChange(EntityModel model) { + if (model.getIsValid()) { + markAsValid(); + } else { + markAsInvalid(model.getInvalidityReasons()); + } + } + + @Override + public void markAsValid() { + storageDomainsPanel.markAsValid(); + } + + @Override + public void markAsInvalid(List<String> validationHints) { + storageDomainsPanel.markAsInvalid(validationHints); + } + + @Override + public boolean isSubViewFocused() { + return iscsiDiscoverTargetsView.isDiscoverPanelFocused(); + } + + @Override + public ImportIscsiStorageModel flush() { + return driver.flush(); + } + + @Override + public void focus() { + } + + interface WidgetStyle extends CssResource { + String loginButton(); + } + +} diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/storage/ImportIscsiStorageView.ui.xml b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/storage/ImportIscsiStorageView.ui.xml new file mode 100644 index 0000000..58b9b06 --- /dev/null +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/storage/ImportIscsiStorageView.ui.xml @@ -0,0 +1,56 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent"> +<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder" xmlns:g="urn:import:com.google.gwt.user.client.ui" + xmlns:e="urn:import:org.ovirt.engine.ui.common.widget.editor" + xmlns:s="urn:import:org.ovirt.engine.ui.common.widget.uicommon.storage" + xmlns:w="urn:import:org.ovirt.engine.ui.common.widget"> + + <ui:style type="org.ovirt.engine.ui.common.widget.uicommon.storage.ImportIscsiStorageView.WidgetStyle"> + .splitLayoutPanel { + position: absolute !important; + width: 100%; + bottom: 0; + top: 120px; + } + + .containerPanel { + border: 1px solid #333; + margin: 5px; + } + + .containerPanelInner { + margin: 5px; + overflow: auto; + position: absolute; + top: 0px; + bottom: 0px; + left: 0px; + right: 0px; + } + + .loginButton { + float: left; + margin-top: 15px; + margin-bottom: 5px; + } + </ui:style> + + <g:SplitLayoutPanel ui:field="splitLayoutPanel" addStyleNames="{style.splitLayoutPanel}"> + <g:center> + <g:SimplePanel addStyleNames="{style.containerPanel}"> + <g:FlowPanel addStyleNames="{style.containerPanelInner}"> + <s:IscsiDiscoverTargetsView ui:field="iscsiDiscoverTargetsView" /> + <e:EntityModelCellTable ui:field="targetsTable"/> + </g:FlowPanel> + </g:SimplePanel> + </g:center> + <g:south size="150"> + <g:SimplePanel addStyleNames="{style.containerPanel}"> + <w:ValidatedPanelWidget ui:field="storageDomainsPanel" addStyleNames="{style.containerPanelInner}"> + <e:ListModelObjectCellTable ui:field="storageDomainsTable"/> + </w:ValidatedPanelWidget> + </g:SimplePanel> + </g:south> + </g:SplitLayoutPanel> + +</ui:UiBinder> diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/storage/IscsiDiscoverTargetsView.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/storage/IscsiDiscoverTargetsView.java index 3199333..8a1c93d 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/storage/IscsiDiscoverTargetsView.java +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/storage/IscsiDiscoverTargetsView.java @@ -88,7 +88,7 @@ UiCommandButton discoverButton; @UiField - UiCommandButton loginAllButton; + UiCommandButton loginButton; @UiField @Ignore @@ -146,14 +146,13 @@ constants.storageIscsiDiscoverTargetsLabel())); } - void localize(CommonApplicationConstants constants) { + protected void localize(CommonApplicationConstants constants) { addressEditor.setLabel(constants.storageIscsiPopupAddressLabel()); portEditor.setLabel(constants.storageIscsiPopupPortLabel()); useUserAuthEditor.setLabel(constants.storageIscsiPopupUserAuthLabel()); chapUserEditor.setLabel(constants.storageIscsiPopupChapUserLabel()); chapPassEditor.setLabel(constants.storageIscsiPopupChapPassLabel()); discoverButton.setLabel(constants.storageIscsiPopupDiscoverButtonLabel()); - loginAllButton.setLabel(constants.storageIscsiPopupLoginAllButtonLabel()); } private void setProposeDiscover(boolean propose) { @@ -198,7 +197,6 @@ void initButtons(final SanStorageModelBase object) { discoverButton.setCommand(object.getDiscoverTargetsCommand()); - loginAllButton.setCommand(object.getLoginAllCommand()); discoverTargetsPanelInner.setVisible(discoverTargetsImageButton.isDown()); discoverTargetsImageButton.addClickHandler(new ClickHandler() { @@ -215,12 +213,20 @@ } }); - loginAllButton.addClickHandler(new ClickHandler() { + initLoginButton(object); + } + + protected void initLoginButton(SanStorageModelBase object) { + + loginButton.setCommand(object.getLoginCommand()); + loginButton.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { - loginAllButton.getCommand().execute(); + loginButton.getCommand().execute(); } }); + + loginButton.setLabel(object.getLoginButtonLabel()); } public void setEnabled(boolean enabled) { @@ -238,6 +244,10 @@ return addDomHandler(handler, KeyPressEvent.getType()); } + public void setLoginButtonStyle(String style) { + loginButton.setStyleName(style); + } + public boolean isDiscoverPanelFocused() { return isFocused(); } diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/storage/IscsiDiscoverTargetsView.ui.xml b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/storage/IscsiDiscoverTargetsView.ui.xml index 7dd0e48..1a82b2e 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/storage/IscsiDiscoverTargetsView.ui.xml +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/storage/IscsiDiscoverTargetsView.ui.xml @@ -1,9 +1,8 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent"> <ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder" xmlns:g="urn:import:com.google.gwt.user.client.ui" - xmlns:d="urn:import:org.ovirt.engine.ui.common.widget.dialog" xmlns:e="urn:import:org.ovirt.engine.ui.common.widget.editor" - xmlns:ge="urn:import:org.ovirt.engine.ui.common.widget.editor.generic" - xmlns:t="urn:import:org.ovirt.engine.ui.common.widget.dialog.tab" xmlns:w="urn:import:org.ovirt.engine.ui.common.widget"> + xmlns:ge="urn:import:org.ovirt.engine.ui.common.widget.editor.generic" + xmlns:w="urn:import:org.ovirt.engine.ui.common.widget"> <ui:style type="org.ovirt.engine.ui.common.widget.uicommon.storage.IscsiDiscoverTargetsView.WidgetStyle"> .content { @@ -13,7 +12,7 @@ .authPanelInner { margin-top: 10px; width: 100%; - } + } .discoverTargetAuthPanel { border-left: 1px grey solid; @@ -40,7 +39,7 @@ margin-bottom: 2px; } - .loginAllButton { + .loginButton { float: right; margin: 2px; } @@ -57,7 +56,8 @@ .collapsedDiscoverTargetsPanel { border-top: 1px black solid; width: 100%; - } + border-collapse: separate; + } .expandedDiscoverTargetsPanel { border: 1px black solid; @@ -131,7 +131,7 @@ </g:HorizontalPanel> </g:FlowPanel> </g:VerticalPanel> - <w:UiCommandButton ui:field="loginAllButton" addStyleNames="{style.loginAllButton}" /> + <w:UiCommandButton ui:field="loginButton" addStyleNames="{style.loginButton}" /> </g:FlowPanel> </ui:UiBinder> diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/ImportIscsiStorageModel.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/ImportIscsiStorageModel.java new file mode 100644 index 0000000..72bdbbe --- /dev/null +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/ImportIscsiStorageModel.java @@ -0,0 +1,156 @@ +package org.ovirt.engine.ui.uicommonweb.models.storage; + +import org.ovirt.engine.core.common.businessentities.StorageDomain; +import org.ovirt.engine.core.common.businessentities.StorageServerConnections; +import org.ovirt.engine.core.common.businessentities.StorageType; +import org.ovirt.engine.core.common.businessentities.comparators.LexoNumericComparator; +import org.ovirt.engine.ui.uicommonweb.Linq; +import org.ovirt.engine.ui.uicommonweb.models.ListModel; +import org.ovirt.engine.ui.uicompat.ConstantsManager; +import org.ovirt.engine.ui.uicompat.Event; +import org.ovirt.engine.ui.uicompat.EventArgs; +import org.ovirt.engine.ui.uicompat.IEventListener; + +import java.util.ArrayList; +import java.util.Comparator; +import java.util.Iterator; +import java.util.List; +import java.util.SortedSet; +import java.util.TreeSet; + +public class ImportIscsiStorageModel extends ImportSanStorageModel { + + protected ListModel<SanTargetModel> targets; + + public ImportIscsiStorageModel() { + setStorageDomains(new ListModel<StorageDomain>()); + getStorageDomains().setItems(new ArrayList<StorageDomain>()); + + setTargets(new ListModel<SanTargetModel>()); + getTargets().setItems(new ArrayList<SanTargetModel>()); + + addListeners(); + } + + private void addListeners() { + getTargets().getSelectedItemsChangedEvent().addListener(new IEventListener() { + @Override + public void eventRaised(Event ev, Object sender, EventArgs args) { + getLoginCommand().setIsExecutionAllowed(getTargets().getSelectedItems() != null && + !getTargets().getSelectedItems().isEmpty()); + } + }); + } + + @Override + public StorageType getType() { + return StorageType.ISCSI; + } + + @Override + public String getLoginButtonLabel() { + return ConstantsManager.getInstance().getConstants().loginButtonLabel(); + } + + public ListModel<SanTargetModel> getTargets() { + return targets; + } + + public void setTargets(ListModel<SanTargetModel> targets) { + this.targets = targets; + } + + @Override + protected void update() { + getStorageDomains().setItems(new ArrayList<StorageDomain>()); + getTargets().setItems(new ArrayList<SanTargetModel>()); + proposeDiscover(); + } + + @Override + protected void proposeDiscover() { + boolean proposeDiscover = Linq.count(getTargets().getItems()) == 0; + setProposeDiscoverTargets(proposeDiscover); + } + + protected void postDiscoverTargetsInternal(ArrayList<StorageServerConnections> newItems) { + if (newItems.isEmpty()) { + setMessage(ConstantsManager.getInstance().getConstants().noNewDevicesWereFoundMsg()); + return; + } + + SortedSet<SanTargetModel> targetsSet = getTargetsSet(); + targetsSet.addAll(getTargets().getItems()); + targetsSet.addAll(getSanTargetModels(newItems.iterator())); + getTargets().setItems(new ArrayList<SanTargetModel>(targetsSet)); + + proposeDiscover(); + } + + private SortedSet<SanTargetModel> getTargetsSet() { + return new TreeSet<SanTargetModel>(new Comparator<SanTargetModel>() { + LexoNumericComparator lexoNumeric = new LexoNumericComparator(); + + @Override + public int compare(SanTargetModel targetModel1, SanTargetModel targetModel2) { + return lexoNumeric.compare(targetModel1.getEntity().getiqn(), targetModel2.getEntity().getiqn()); + } + }); + } + + private List<SanTargetModel> getSanTargetModels(Iterator<StorageServerConnections> itemsIterator) { + List<SanTargetModel> targets = new ArrayList<SanTargetModel>(); + while (itemsIterator.hasNext()) { + StorageServerConnections connection = itemsIterator.next(); + SanTargetModel targetModel = getSanTargetModelByConnection(connection); + if (targetModel == null) { + targetModel = new SanTargetModel(); + targetModel.setEntity(connection); + } + targets.add(targetModel); + } + return targets; + } + + private SanTargetModel getSanTargetModelByConnection(StorageServerConnections connection) { + for (SanTargetModel targetModel : getTargets().getItems()) { + if (targetModel.getEntity().getiqn().equals(connection.getiqn())) { + return targetModel; + } + } + return null; + } + + private List<StorageServerConnections> getStorageServerConnections(List<SanTargetModel> targetModels) { + List<StorageServerConnections> connections = new ArrayList<StorageServerConnections>(); + for (SanTargetModel targetModel : targetModels) { + connections.add(targetModel.getEntity()); + } + return connections; + } + + @Override + protected void login() { + getStorageDomainsBySelectedConnections(); + } + + private void markLoggedinTargets(List<SanTargetModel> targets) { + for (SanTargetModel targetModel : targets) { + targetModel.setIsLoggedIn(true); + targetModel.setIsChangable(false); + } + getTargets().setSelectedItems(new ArrayList<SanTargetModel>()); + } + + @Override + protected void postGetUnregisteredStorageDomains(List<StorageDomain> storageDomains, List<StorageServerConnections> connections) { + if (connections != null) { + markLoggedinTargets(getSanTargetModels(connections.iterator())); + } + } + + private void getStorageDomainsBySelectedConnections() { + List<StorageServerConnections> connections = getStorageServerConnections(getTargets().getSelectedItems()); + getUnregisteredStorageDomains(connections); + } +} diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/ImportSanStorageModel.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/ImportSanStorageModel.java new file mode 100644 index 0000000..4fba7d0 --- /dev/null +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/ImportSanStorageModel.java @@ -0,0 +1,89 @@ +package org.ovirt.engine.ui.uicommonweb.models.storage; + +import org.ovirt.engine.core.common.businessentities.StorageDomain; +import org.ovirt.engine.core.common.businessentities.StorageServerConnections; +import org.ovirt.engine.core.common.businessentities.VDS; +import org.ovirt.engine.core.common.queries.GetUnregisteredBlockStorageDomainsParameters; +import org.ovirt.engine.core.common.queries.VdcQueryReturnValue; +import org.ovirt.engine.core.common.queries.VdcQueryType; +import org.ovirt.engine.core.common.utils.Pair; +import org.ovirt.engine.ui.frontend.AsyncQuery; +import org.ovirt.engine.ui.frontend.Frontend; +import org.ovirt.engine.ui.frontend.INewAsyncCallback; +import org.ovirt.engine.ui.uicommonweb.models.ListModel; +import org.ovirt.engine.ui.uicompat.ConstantsManager; + +import java.util.ArrayList; +import java.util.List; + +public abstract class ImportSanStorageModel extends SanStorageModel { + + protected ListModel<StorageDomain> storageDomains; + + @Override + protected String getListName() { + return "ImportSanStorageModel"; //$NON-NLS-1$ + } + + @Override + protected void initializeItems(List<LunModel> newLuns, List<SanTargetModel> newTargets) { + } + + public ListModel<StorageDomain> getStorageDomains() { + return storageDomains; + } + + public void setStorageDomains(ListModel<StorageDomain> storageDomains) { + this.storageDomains = storageDomains; + } + + protected void addStorageDomains(ArrayList<StorageDomain> storageDomains) { + ArrayList<StorageDomain> allStorageDomains = new ArrayList<StorageDomain>(); + allStorageDomains.addAll(getStorageDomains().getItems()); + allStorageDomains.addAll(storageDomains); + getStorageDomains().setItems(allStorageDomains); + } + + protected void postGetUnregisteredStorageDomains(List<StorageDomain> storageDomains, List<StorageServerConnections> connections) { + // Override if needed + } + + protected void getUnregisteredStorageDomains(List<StorageServerConnections> connections) { + VDS vds = getContainer().getHost().getSelectedItem(); + + Frontend.getInstance().runQuery(VdcQueryType.GetUnregisteredBlockStorageDomains, + new GetUnregisteredBlockStorageDomainsParameters(vds.getId(), getType(), connections), + new AsyncQuery(this, new INewAsyncCallback() { + @Override + public void onSuccess(Object model, Object returnValue) { + VdcQueryReturnValue vdcQueryReturnValue = (VdcQueryReturnValue) returnValue; + Pair<List<StorageDomain>, List<StorageServerConnections>> returnValuePair = + vdcQueryReturnValue.getReturnValue(); + + ArrayList<StorageDomain> storageDomains = + (ArrayList<StorageDomain>) returnValuePair.getFirst(); + ArrayList<StorageServerConnections> connections = + (ArrayList<StorageServerConnections>) returnValuePair.getSecond(); + + if (storageDomains != null) { + addStorageDomains(storageDomains); + } + + postGetUnregisteredStorageDomains(storageDomains, connections); + } + }, getContainer().getHash())); + } + + @Override + public boolean validate() { + boolean isValid = getStorageDomains().getSelectedItems() != null && + !getStorageDomains().getSelectedItems().isEmpty(); + + if (!isValid) { + getInvalidityReasons().add(ConstantsManager.getInstance().getConstants().noStorageDomainsSelectedInvalidReason()); + } + setIsValid(isValid); + + return getIsValid(); + } +} diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/ImportStorageModelBehavior.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/ImportStorageModelBehavior.java index 6c00005..f3f6efe 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/ImportStorageModelBehavior.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/ImportStorageModelBehavior.java @@ -102,6 +102,11 @@ } } + @Override + public boolean isImport() { + return true; + } + private boolean isItemSelectable(IStorageModel item, StoragePool dataCenter, boolean isNoStorageAttached) { // Local SD can be attached to a local DC only if (isLocalStorage(item) && !dataCenter.isLocal()) { diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/IscsiStorageModel.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/IscsiStorageModel.java index fa797ec..5ec2ecb 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/IscsiStorageModel.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/IscsiStorageModel.java @@ -1,6 +1,7 @@ package org.ovirt.engine.ui.uicommonweb.models.storage; import org.ovirt.engine.core.common.businessentities.StorageType; +import org.ovirt.engine.ui.uicompat.ConstantsManager; @SuppressWarnings("unused") public class IscsiStorageModel extends SanStorageModel @@ -15,4 +16,9 @@ protected String getListName() { return "IscsiStorageModel"; //$NON-NLS-1$ } + + @Override + public String getLoginButtonLabel() { + return ConstantsManager.getInstance().getConstants().loginAllButtonLabel(); + } } diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/NewEditStorageModelBehavior.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/NewEditStorageModelBehavior.java index 97517a3..6c5cafc 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/NewEditStorageModelBehavior.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/NewEditStorageModelBehavior.java @@ -71,6 +71,11 @@ } } + @Override + public boolean isImport() { + return false; + } + public void postUpdateItemsAvailability(IStorageModel item, boolean isNoExportOrIsoStorageAttached) { StoragePool dataCenter = getModel().getDataCenter().getSelectedItem(); 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 ae8e4b5..81e8508 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 @@ -316,7 +316,7 @@ * Organizes items according to the current groupping flag. When new items provided takes them in account and add to * the Items collection. */ - private void initializeItems(List<LunModel> newLuns, List<SanTargetModel> newTargets) + protected void initializeItems(List<LunModel> newLuns, List<SanTargetModel> newTargets) { if (getIsGrouppedByTarget()) { @@ -357,7 +357,7 @@ setItems(items); - updateLoginAllAvailability(); + updateLoginAvailability(); } else { @@ -550,8 +550,7 @@ return list; } - private void proposeDiscover() - { + protected void proposeDiscover() { boolean proposeDiscover = !getProposeDiscoverTargets() && (getItems() == null || Linq.count(getItems()) == 0); diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/SanStorageModelBase.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/SanStorageModelBase.java index 8c14ce9..7e91d2c 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/SanStorageModelBase.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/SanStorageModelBase.java @@ -51,16 +51,16 @@ privateUpdateCommand = value; } - private UICommand privateLoginAllCommand; + private UICommand loginCommand; - public UICommand getLoginAllCommand() + public UICommand getLoginCommand() { - return privateLoginAllCommand; + return loginCommand; } - private void setLoginAllCommand(UICommand value) + private void setLoginCommand(UICommand value) { - privateLoginAllCommand = value; + loginCommand = value; } private UICommand privateDiscoverTargetsCommand; @@ -271,9 +271,9 @@ setHash(getHashName() + new Date()); setUpdateCommand(new UICommand("Update", this)); //$NON-NLS-1$ - UICommand tempVar = new UICommand("LoginAll", this); //$NON-NLS-1$ + UICommand tempVar = new UICommand("Login", this); //$NON-NLS-1$ tempVar.setIsExecutionAllowed(false); - setLoginAllCommand(tempVar); + setLoginCommand(tempVar); setDiscoverTargetsCommand(new UICommand("DiscoverTargets", this)); //$NON-NLS-1$ setAddress(new EntityModel<String>()); @@ -400,6 +400,10 @@ connectTargets(); } + protected void login() { + loginAll(); + } + private void loginAll() { // Cast to list of SanTargetModel because we get call @@ -451,7 +455,7 @@ Frontend.getInstance().runQuery(VdcQueryType.DiscoverSendTargets, parameters, asyncQuery); } - private void postDiscoverTargetsInternal(ArrayList<StorageServerConnections> items) + protected void postDiscoverTargetsInternal(ArrayList<StorageServerConnections> items) { ArrayList<SanTargetModel> newItems = new ArrayList<SanTargetModel>(); @@ -529,9 +533,9 @@ { update(); } - else if (command == getLoginAllCommand()) + else if (command == getLoginCommand()) { - loginAll(); + login(); } else if (command == getDiscoverTargetsCommand()) { @@ -549,7 +553,7 @@ { } - protected void updateLoginAllAvailability() + protected void updateLoginAvailability() { List<SanTargetModel> items = (List<SanTargetModel>) getItems(); @@ -565,10 +569,14 @@ } } - getLoginAllCommand().setIsExecutionAllowed(allow); + getLoginCommand().setIsExecutionAllowed(allow); } protected void isAllLunsSelectedChanged() { } + + public String getLoginButtonLabel() { + return ConstantsManager.getInstance().getConstants().empty(); + } } diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/SanTargetModel.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/SanTargetModel.java index 411b79a..57ed35e 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/SanTargetModel.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/SanTargetModel.java @@ -2,6 +2,7 @@ import java.util.List; +import org.ovirt.engine.core.common.businessentities.StorageServerConnections; import org.ovirt.engine.core.common.utils.ObjectUtils; import org.ovirt.engine.ui.uicommonweb.UICommand; import org.ovirt.engine.ui.uicommonweb.models.EntityModel; @@ -12,7 +13,7 @@ import org.ovirt.engine.ui.uicompat.PropertyChangedEventArgs; @SuppressWarnings("unused") -public class SanTargetModel extends EntityModel +public class SanTargetModel extends EntityModel<StorageServerConnections> { public static final EventDefinition loggedInEventDefinition; 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 c1f78f7..e231877 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 @@ -681,8 +681,7 @@ new ArrayList<Object>(Arrays.asList(new Object[] { "ImportFile", //$NON-NLS-1$ host.getId(), posixModel.getPath().getEntity(), posixModel.getRole(), StorageType.POSIXFS, model.getActivateDomain().getEntity() }))).run(); } - else - { + else if (model.getSelectedItem() instanceof ImportSanStorageModel) { Task.create(this, new ArrayList<Object>(Arrays.asList(new Object[] { "ImportSan", //$NON-NLS-1$ host.getId() }))).run(); @@ -1924,6 +1923,30 @@ importFileStorageInit(); } + private void importSanStorage(TaskContext context) + { + this.context = context; + + ArrayList<Object> data = (ArrayList<Object>) context.getState(); + StorageModel model = (StorageModel) getWindow(); + + ImportSanStorageModel importSanStorageModel = (ImportSanStorageModel) model.getSelectedItem(); + List<StorageDomain> storageDomains = importSanStorageModel.getStorageDomains().getSelectedItems(); + + Frontend.getInstance().runAction(VdcActionType.AddExistingFileStorageDomain, + new StorageDomainManagementParameter(), + new IFrontendActionAsyncCallback() { + @Override + public void executed(FrontendActionAsyncResult result) { + StorageListModel storageListModel = (StorageListModel) result.getState(); + VdcReturnValueBase returnVal = result.getReturnValue(); + + boolean success = returnVal != null && returnVal.getSucceeded(); + onFinish(storageListModel.context, success, storageListModel.storageModel); + } + }, storageDomains); + } + public void importFileStorageInit() { if (fileConnection != null) @@ -2144,6 +2167,10 @@ { importFileStorage(context); } + else if ("ImportSan".equals(key)) //$NON-NLS-1$ + { + importSanStorage(context); + } else if ("Finish".equals(key)) //$NON-NLS-1$ { getWindow().stopProgress(); diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/StorageModel.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/StorageModel.java index fdc1fcb..ddf8797 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/StorageModel.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/StorageModel.java @@ -204,7 +204,8 @@ VdcQueryType.GetConfigurationValue, VdcQueryType.GetStoragePoolsByStorageDomainId, VdcQueryType.GetStorageDomainsByStoragePoolId, VdcQueryType.GetLunsByVgId, VdcQueryType.GetAllVdsByStoragePool, VdcQueryType.DiscoverSendTargets, VdcQueryType.GetDeviceList, - VdcQueryType.GetExistingStorageDomainList, VdcQueryType.GetHostsForStorageOperation }); + VdcQueryType.GetExistingStorageDomainList, VdcQueryType.GetHostsForStorageOperation, + VdcQueryType.GetUnregisteredBlockStorageDomains }); setName(new EntityModel<String>()); setDescription(new EntityModel<String>()); @@ -587,8 +588,7 @@ selectedItem = spm == null ? Linq.firstOrDefault(hosts) : spm; } - getHost().setItems(hosts); - getHost().setSelectedItem(selectedItem); + getHost().setItems(hosts, selectedItem); } private VDS getSPM(Iterable<VDS> hosts) { @@ -739,4 +739,8 @@ public boolean isNewStorage() { return getStorage() == null; } + + public StorageModelBehavior getBehavior() { + return behavior; + } } diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/StorageModelBehavior.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/StorageModelBehavior.java index 1b4c589..6748702 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/StorageModelBehavior.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/StorageModelBehavior.java @@ -112,4 +112,6 @@ protected boolean isLocalStorage(IStorageModel storage) { return storage.getType() == StorageType.LOCALFS; } + + public abstract boolean isImport(); } diff --git a/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIConstants.java b/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIConstants.java index c20748b..c7b271a 100644 --- a/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIConstants.java +++ b/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIConstants.java @@ -1364,6 +1364,12 @@ @DefaultStringValue("No LUNs selected. Please select LUNs.") String noLUNsSelectedInvalidReason(); + @DefaultStringValue("No storage domains selected. Please select storage domains to import.") + String noStorageDomainsSelectedInvalidReason(); + + @DefaultStringValue("No storage domains to import have been found.") + String noStorageDomainsFound(); + @DefaultStringValue("Could not retrieve LUNs, please check your storage.") String couldNotRetrieveLUNsLunsFailure(); @@ -2307,5 +2313,11 @@ @DefaultStringValue("Random Number Generator not supported for this cluster level or is disabled in the engine config.") String rngNotSupported(); + + @DefaultStringValue("Login All") + String loginAllButtonLabel(); + + @DefaultStringValue("Login") + String loginButtonLabel(); } -- To view, visit http://gerrit.ovirt.org/29173 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: If379f5e41544fda90cb3e31e38784b768c994e5c Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Daniel Erez <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
