Lior Vernia has uploaded a new change for review.

Change subject: webadmin: Validate no duplicate network names on import
......................................................................

webadmin: Validate no duplicate network names on import

It is reasonably easy to detect whether networks with duplicate names
are attempted to be imported, so this can be checked before the action
is sent to the backend.

Change-Id: If63d450bfc8d666ebb383e29fdfe43fcf879db78
Bug-Url: https://bugzilla.redhat.com/1048752
Signed-off-by: Lior Vernia <[email protected]>
---
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/networks/ImportNetworksModel.java
M 
frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIConstants.java
M 
frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/external/StringUtils.java
M 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/popup/provider/ImportNetworksPopupPresenterWidget.java
M 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/provider/ImportNetworksPopupView.java
5 files changed, 65 insertions(+), 2 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/05/31505/1

diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/networks/ImportNetworksModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/networks/ImportNetworksModel.java
index b1cc8f4..01b4af9 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/networks/ImportNetworksModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/networks/ImportNetworksModel.java
@@ -1,5 +1,6 @@
 package org.ovirt.engine.ui.uicommonweb.models.networks;
 
+import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.HashMap;
@@ -57,6 +58,7 @@
     private final ListModel providers = new ListModel();
     private final ListModel providerNetworks = new ListModel();
     private final ListModel importedNetworks = new ListModel();
+    private final ListModel<String> errors = new ListModel<String>();
 
     private UICommand addImportCommand = new UICommand(null, this);
     private UICommand cancelImportCommand = new UICommand(null, this);
@@ -73,6 +75,10 @@
 
     public ListModel getProviders() {
         return providers;
+    }
+
+    public ListModel<String> getErrors() {
+        return errors;
     }
 
     public UICommand getAddImportCommand() {
@@ -191,11 +197,42 @@
         AsyncDataProvider.getDataCenterList(dcQuery);
     }
 
+    private boolean validate() {
+        String errorDuplicate = 
ConstantsManager.getInstance().getConstants().importDuplicateName();
+        boolean valid = true;
+        Collection<ExternalNetwork> networks = importedNetworks.getItems();
+        List<String> errors = new ArrayList<String>(networks.size());
+        Map<String, Integer> nameToIndex = new HashMap<String, Integer>();
+        int i = 0;
+        for (ExternalNetwork network : networks) {
+            String networkName = network.getDisplayName();
+            Integer encounteredIndex = nameToIndex.get(networkName);
+
+            // if this name has been encountered, invalidate that entry; else 
store it for future invalidation
+            if (encounteredIndex != null) {
+                errors.set(encounteredIndex, errorDuplicate);
+                valid = false;
+            } else {
+                nameToIndex.put(networkName, i);
+            }
+
+            // invalidate current entry
+            errors.add(encounteredIndex == null ? null : errorDuplicate);
+            ++i;
+        }
+        getErrors().setItems(errors);
+        return valid;
+    }
+
     public void cancel() {
         sourceListModel.setWindow(null);
     }
 
     public void onImport() {
+        if (!validate()) {
+            return;
+        }
+
         List<VdcActionParametersBase> multipleActionParameters =
                 new LinkedList<VdcActionParametersBase>();
         List<IFrontendActionAsyncCallback> callbacks = new 
LinkedList<IFrontendActionAsyncCallback>();
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 9fa4e03..3968f1d 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
@@ -2056,6 +2056,9 @@
     @DefaultStringValue("Import")
     String importNetworksButton();
 
+    @DefaultStringValue("Cannot import network, another network with the same 
name has been marked for import.")
+    String importDuplicateName();
+
     @DefaultStringValue("Interface Mappings")
     String interfaceMappings();
 
diff --git 
a/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/external/StringUtils.java
 
b/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/external/StringUtils.java
index 2c9b91f..f3e14fe 100644
--- 
a/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/external/StringUtils.java
+++ 
b/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/external/StringUtils.java
@@ -17,7 +17,6 @@
  * limitations under the License.
  */
 import java.util.Iterator;
-import java.util.List;
 
 public class StringUtils {
 
@@ -75,7 +74,7 @@
      * @param delimiter the separator string to use
      * @return
      */
-    public static String join(List<String> list, String delimiter) {
+    public static String join(Iterable<String> list, String delimiter) {
         if (list == null) {
             return "";
         }
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/popup/provider/ImportNetworksPopupPresenterWidget.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/popup/provider/ImportNetworksPopupPresenterWidget.java
index c5d917b..63e9537 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/popup/provider/ImportNetworksPopupPresenterWidget.java
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/popup/provider/ImportNetworksPopupPresenterWidget.java
@@ -1,7 +1,12 @@
 package org.ovirt.engine.ui.webadmin.section.main.presenter.popup.provider;
 
+import java.util.List;
+
 import 
org.ovirt.engine.ui.common.presenter.AbstractModelBoundPopupPresenterWidget;
 import org.ovirt.engine.ui.uicommonweb.models.networks.ImportNetworksModel;
+import org.ovirt.engine.ui.uicompat.Event;
+import org.ovirt.engine.ui.uicompat.EventArgs;
+import org.ovirt.engine.ui.uicompat.IEventListener;
 
 import com.google.gwt.event.shared.EventBus;
 import com.google.inject.Inject;
@@ -9,6 +14,7 @@
 public class ImportNetworksPopupPresenterWidget extends 
AbstractModelBoundPopupPresenterWidget<ImportNetworksModel, 
ImportNetworksPopupPresenterWidget.ViewDef> {
 
     public interface ViewDef extends 
AbstractModelBoundPopupPresenterWidget.ViewDef<ImportNetworksModel> {
+        void validateImportedNetworks(List<String> errors);
     }
 
     @Inject
@@ -16,4 +22,16 @@
         super(eventBus, view);
     }
 
+    @Override
+    public void init(final ImportNetworksModel model) {
+        super.init(model);
+        model.getErrors().getItemsChangedEvent().addListener(new 
IEventListener<EventArgs>() {
+
+            @Override
+            public void eventRaised(Event<EventArgs> ev, Object sender, 
EventArgs args) {
+                getView().validateImportedNetworks((List<String>) 
model.getErrors().getItems());
+            }
+        });
+    }
+
 }
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/provider/ImportNetworksPopupView.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/provider/ImportNetworksPopupView.java
index 88c21f7..bbc4a4c 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/provider/ImportNetworksPopupView.java
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/provider/ImportNetworksPopupView.java
@@ -1,6 +1,7 @@
 package org.ovirt.engine.ui.webadmin.section.main.view.popup.provider;
 
 import java.util.ArrayList;
+import java.util.List;
 
 import org.ovirt.engine.core.common.businessentities.Provider;
 import org.ovirt.engine.core.common.businessentities.StoragePool;
@@ -230,4 +231,9 @@
         return driver.flush();
     }
 
+    @Override
+    public void validateImportedNetworks(List<String> errors) {
+        importedNetworks.validate(errors);
+    }
+
 }


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

Gerrit-MessageType: newchange
Gerrit-Change-Id: If63d450bfc8d666ebb383e29fdfe43fcf879db78
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: ovirt-engine-3.5
Gerrit-Owner: Lior Vernia <[email protected]>
_______________________________________________
Engine-patches mailing list
[email protected]
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to