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
