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

Reply via email to