Hello Yair Zaslavsky,

I'd like you to do a code review.  Please visit

    http://gerrit.ovirt.org/30755

to review the following change.

Change subject: aaa: Adding namespace dropdown list to "add user" dialog
......................................................................

aaa: Adding namespace dropdown list to "add user" dialog

This both adds the namespace dropdown list and fixes
search to support namespace

Topic: AAA
Bug-Url: https://bugzilla.redhat.com/1117502
Change-Id: Ic78559243c765271bf8e12abd035deba05226bda
Signed-off-by: Yair Zaslavsky <yzasl...@redhat.com>
Signed-off-by: Alon Bar-Lev <alo...@redhat.com>
---
D 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetAvailableAuthzNamespacesQuery.java
A 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetAvailableNamespacesQuery.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/SearchQuery.java
A 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/DirectorySearchParameters.java
D 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/GetAvailableAuthzNamespacesQueryParameters.java
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java
M 
backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendResource.java
M 
backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/aaa/BackendDomainGroupsResource.java
M 
backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/aaa/BackendDomainUsersResource.java
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/view/popup/permissions/AbstractPermissionsPopupView.java
M 
frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/view/popup/permissions/AbstractPermissionsPopupView.ui.xml
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/dataprovider/AsyncDataProvider.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/users/AdElementListModel.java
14 files changed, 204 insertions(+), 42 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/55/30755/1

diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetAvailableAuthzNamespacesQuery.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetAvailableAuthzNamespacesQuery.java
deleted file mode 100644
index 6104d61..0000000
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetAvailableAuthzNamespacesQuery.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package org.ovirt.engine.core.bll;
-
-public class GetAvailableAuthzNamespacesQuery {
-
-}
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetAvailableNamespacesQuery.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetAvailableNamespacesQuery.java
new file mode 100644
index 0000000..f522adf
--- /dev/null
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetAvailableNamespacesQuery.java
@@ -0,0 +1,37 @@
+package org.ovirt.engine.core.bll;
+
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+
+import org.ovirt.engine.api.extensions.aaa.Authz;
+import org.ovirt.engine.core.aaa.AuthzUtils;
+import org.ovirt.engine.core.bll.context.EngineContext;
+import org.ovirt.engine.core.common.queries.VdcQueryParametersBase;
+import org.ovirt.engine.core.extensions.mgr.ExtensionProxy;
+import org.ovirt.engine.core.utils.collections.MultiValueMapUtils;
+import org.ovirt.engine.core.utils.extensionsmgr.EngineExtensionsManager;
+
+public class GetAvailableNamespacesQuery<P extends VdcQueryParametersBase> 
extends QueriesCommandBase<P> {
+
+    public GetAvailableNamespacesQuery(P parameters) {
+        this(parameters, null);
+    }
+
+    public GetAvailableNamespacesQuery(P parameters, EngineContext 
engineContext) {
+        super(parameters, engineContext);
+    }
+
+
+    @Override
+    protected void executeQueryCommand() {
+        HashMap<String, List<String>> namespacesMap = new HashMap<>();
+        for (ExtensionProxy authz: 
EngineExtensionsManager.getInstance().getExtensionsByService(Authz.class.getName()))
 {
+            for (String namespace : 
authz.getContext().get(Authz.ContextKeys.AVAILABLE_NAMESPACES, 
Arrays.asList("*"))) {
+                MultiValueMapUtils.addToMap(AuthzUtils.getName(authz), 
namespace, namespacesMap);
+
+            }
+        }
+        setReturnValue(namespacesMap);
+    }
+}
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/SearchQuery.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/SearchQuery.java
index 5d075f6..0e7810f 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/SearchQuery.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/SearchQuery.java
@@ -1,12 +1,12 @@
 package org.ovirt.engine.core.bll;
 
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Collections;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
 
-import org.ovirt.engine.api.extensions.aaa.Authz;
 import org.ovirt.engine.core.aaa.AuthenticationProfileRepository;
 import org.ovirt.engine.core.aaa.DirectoryGroup;
 import org.ovirt.engine.core.aaa.DirectoryUser;
@@ -33,9 +33,12 @@
 import org.ovirt.engine.core.common.config.ConfigValues;
 import 
org.ovirt.engine.core.common.errors.SearchEngineIllegalCharacterException;
 import org.ovirt.engine.core.common.errors.SqlInjectionException;
+import org.ovirt.engine.core.common.queries.DirectorySearchParameters;
 import org.ovirt.engine.core.common.queries.SearchParameters;
-import org.ovirt.engine.core.common.utils.ListUtils.Filter;
+import org.ovirt.engine.core.common.queries.VdcQueryParametersBase;
+import org.ovirt.engine.core.common.queries.VdcQueryType;
 import org.ovirt.engine.core.common.utils.ListUtils;
+import org.ovirt.engine.core.common.utils.ListUtils.Filter;
 import org.ovirt.engine.core.compat.DateTime;
 import org.ovirt.engine.core.compat.TimeSpan;
 import org.ovirt.engine.core.dao.SearchDAO;
@@ -179,11 +182,20 @@
         }
 
         ExtensionProxy authz = 
EngineExtensionsManager.getInstance().getExtensionByName(data.getDomain());
-        List<DirectoryUser> results = new ArrayList<>();
-        for (String namespace : authz.getContext().<List<String>> 
get(Authz.ContextKeys.AVAILABLE_NAMESPACES)) {
-            results.addAll(DirectoryUtils.findDirectoryUsersByQuery(authz, 
namespace, data.getQuery()));
+        DirectorySearchParameters directorySearchParams = 
(DirectorySearchParameters) getParameters();
+        List<String> namespaces = 
Arrays.asList(directorySearchParams.getNamespace());
+        if (directorySearchParams.getNamespace() == null) {
+            HashMap<String, List<String>> namespacesMap =
+                    runInternalQuery(VdcQueryType.GetAvailableNamespaces, new 
VdcQueryParametersBase()).getReturnValue();
+            namespaces = namespacesMap.get(data.getDomain());
         }
 
+        List<DirectoryUser> results = new ArrayList<>();
+        for (String namespace : namespaces) {
+            results.addAll(DirectoryUtils.findDirectoryUsersByQuery(authz,
+                    namespace,
+                    data.getQuery()));
+        }
         return results;
     }
 
@@ -195,9 +207,19 @@
         }
 
         ExtensionProxy authz = 
EngineExtensionsManager.getInstance().getExtensionByName(data.getDomain());
+        DirectorySearchParameters directorySearchParams = 
(DirectorySearchParameters) getParameters();
+        List<String> namespaces = 
Arrays.asList(directorySearchParams.getNamespace());
+        if (directorySearchParams.getNamespace() == null) {
+            HashMap<String, List<String>> namespacesMap =
+                    runInternalQuery(VdcQueryType.GetAvailableNamespaces, new 
VdcQueryParametersBase()).getReturnValue();
+            namespaces = namespacesMap.get(data.getDomain());
+        }
+
         List<DirectoryGroup> results = new ArrayList<>();
-        for (String namespace : authz.getContext().<List<String>> 
get(Authz.ContextKeys.AVAILABLE_NAMESPACES)) {
-            results.addAll(DirectoryUtils.findDirectoryGroupsByQuery(authz, 
namespace, data.getQuery()));
+        for (String namespace : namespaces) {
+            results.addAll(DirectoryUtils.findDirectoryGroupsByQuery(authz,
+                    namespace,
+                    data.getQuery()));
         }
         return results;
     }
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/DirectorySearchParameters.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/DirectorySearchParameters.java
new file mode 100644
index 0000000..f96e975
--- /dev/null
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/DirectorySearchParameters.java
@@ -0,0 +1,40 @@
+package org.ovirt.engine.core.common.queries;
+
+import org.ovirt.engine.core.common.interfaces.SearchType;
+
+public class DirectorySearchParameters extends SearchParameters {
+
+    /**
+     *
+     */
+    private static final long serialVersionUID = 1831775270159639568L;
+
+    private String namespace;
+
+    public DirectorySearchParameters() {
+        super();
+    }
+
+    public DirectorySearchParameters(String searchPattern, SearchType 
searchType, String namespace) {
+        super(searchPattern, searchType);
+        this.namespace = namespace;
+    }
+
+    public DirectorySearchParameters(String searchPattern, SearchType 
searchType) {
+        this(searchPattern, searchType, null);
+    }
+
+    public DirectorySearchParameters(String searchPattern,
+            SearchType searchType,
+            boolean caseSensitive,
+            String namespace) {
+        super(searchPattern, searchType, caseSensitive);
+        this.namespace = namespace;
+    }
+
+    public String getNamespace() {
+        return namespace;
+    }
+
+
+}
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/GetAvailableAuthzNamespacesQueryParameters.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/GetAvailableAuthzNamespacesQueryParameters.java
deleted file mode 100644
index 2ae76c5..0000000
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/GetAvailableAuthzNamespacesQueryParameters.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package org.ovirt.engine.core.common.queries;
-
-public class GetAvailableAuthzNamespacesQueryParameters extends 
VdcQueryParametersBase {
-
-    /**
-     *
-     */
-    private static final long serialVersionUID = 2473511045533756911L;
-    private String authzName;
-
-    public GetAvailableAuthzNamespacesQueryParameters() {
-    }
-
-    public GetAvailableAuthzNamespacesQueryParameters(String authzName) {
-        this.authzName = authzName;
-    }
-
-    public String getAuthzName() {
-        return authzName;
-    }
-
-}
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java
index d1da520..43aa48e 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java
@@ -156,6 +156,7 @@
     // Directory queries:
     GetDirectoryUserById(VdcQueryAuthType.User),
     GetDirectoryGroupById(VdcQueryAuthType.User),
+    GetAvailableNamespaces(VdcQueryAuthType.User),
 
     // Groups queries:
     GetAllDbGroups,
@@ -204,7 +205,6 @@
 
     // Search queries
     Search,
-    GetAvailableAuthzNamespaces,
 
     // Public services
     GetDomainList(VdcQueryAuthType.User),
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendResource.java
 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendResource.java
index 18891d2..4ccdae0 100644
--- 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendResource.java
+++ 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendResource.java
@@ -75,7 +75,7 @@
     protected <T> T getEntity(Class<T> clz, SearchType searchType, String 
constraint) {
         try {
             VdcQueryReturnValue result = runQuery(VdcQueryType.Search,
-                    new SearchParameters(constraint, searchType));
+                    createSearchParameters(searchType, constraint));
             if (!result.getSucceeded()) {
                 backendFailure(result.getExceptionString());
             }
@@ -85,11 +85,16 @@
         }
     }
 
+
     protected VdcQueryReturnValue runQuery(VdcQueryType queryType, 
VdcQueryParametersBase queryParams) {
         queryParams.setFiltered(isFiltered());
         return backend.runQuery(queryType, sessionize(queryParams));
     }
 
+    protected SearchParameters createSearchParameters(SearchType searchType, 
String constraint) {
+        return new SearchParameters(constraint, searchType);
+    }
+
     protected <T> T getEntity(Class<T> clz, VdcQueryType query, 
VdcQueryParametersBase queryParams, String identifier) {
         return getEntity(clz, query, queryParams, identifier, false);
     }
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/aaa/BackendDomainGroupsResource.java
 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/aaa/BackendDomainGroupsResource.java
index 615540f..4a0e452 100644
--- 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/aaa/BackendDomainGroupsResource.java
+++ 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/aaa/BackendDomainGroupsResource.java
@@ -14,6 +14,8 @@
 import org.ovirt.engine.api.restapi.resource.SingleEntityResource;
 import org.ovirt.engine.core.aaa.DirectoryGroup;
 import org.ovirt.engine.core.common.interfaces.SearchType;
+import org.ovirt.engine.core.common.queries.DirectorySearchParameters;
+import org.ovirt.engine.core.common.queries.SearchParameters;
 
 /**
  * This resource corresponds to the groups that exist in a directory 
accessible to the engine. Those groups may or may
@@ -40,6 +42,11 @@
         return parent;
     }
 
+    @Override
+    protected SearchParameters createSearchParameters(SearchType searchType, 
String constraint) {
+        return new DirectorySearchParameters(constraint, searchType);
+    }
+
     public Domain getDirectory() {
         return parent.getDirectory();
     }
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/aaa/BackendDomainUsersResource.java
 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/aaa/BackendDomainUsersResource.java
index f19a7c2..a4b4652 100644
--- 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/aaa/BackendDomainUsersResource.java
+++ 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/aaa/BackendDomainUsersResource.java
@@ -14,6 +14,8 @@
 import org.ovirt.engine.api.restapi.resource.SingleEntityResource;
 import org.ovirt.engine.core.aaa.DirectoryUser;
 import org.ovirt.engine.core.common.interfaces.SearchType;
+import org.ovirt.engine.core.common.queries.DirectorySearchParameters;
+import org.ovirt.engine.core.common.queries.SearchParameters;
 
 /**
  * This resource corresponds to the users that exist in a directory accessible
@@ -47,6 +49,11 @@
     }
 
     @Override
+    protected SearchParameters createSearchParameters(SearchType searchType, 
String constraint) {
+        return new DirectorySearchParameters(constraint, searchType);
+    }
+
+    @Override
     @SingleEntityResource
     public DomainUserResource getDomainUserSubResource(String id) {
         return inject(new BackendDomainUserResource(id, this));
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 a603f44..56da05e 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
@@ -1190,6 +1190,9 @@
     @DefaultStringValue("Search:")
     String searchPermissionsPopup();
 
+    @DefaultStringValue("Namespace:")
+    String namespacePermissionsPopup();
+
     // Pool General
     @DefaultStringValue("Name")
     String namePoolGeneral();
diff --git 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/view/popup/permissions/AbstractPermissionsPopupView.java
 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/view/popup/permissions/AbstractPermissionsPopupView.java
index d81f5a0..da34c81 100644
--- 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/view/popup/permissions/AbstractPermissionsPopupView.java
+++ 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/view/popup/permissions/AbstractPermissionsPopupView.java
@@ -53,6 +53,11 @@
     @WithElementId("profile")
     public ListModelListBoxEditor<Object> profileSelection;
 
+    @UiField(provided = true)
+    @Path("namespace.selectedItem")
+    @WithElementId("namespace")
+    public ListModelListBoxEditor<String> namespaceSelection;
+
     @UiField
     @Ignore
     public Label roleToAssignLabel;
@@ -129,6 +134,13 @@
                 return ((Role) object).getname();
             }
         });
+
+        namespaceSelection = new ListModelListBoxEditor<String>(new 
NullSafeRenderer<String>() {
+            @Override
+            protected String renderNullSafe(String object) {
+                return object;
+            }
+        });
     }
 
     private void initTable(CommonApplicationConstants constants) {
@@ -157,6 +169,8 @@
 
     void localize(CommonApplicationConstants constants) {
         searchButton.setLabel(constants.goPermissionsPopup());
+        namespaceSelection.setLabel(constants.namespacePermissionsPopup());
+
     }
 
     @Override
diff --git 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/view/popup/permissions/AbstractPermissionsPopupView.ui.xml
 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/view/popup/permissions/AbstractPermissionsPopupView.ui.xml
index 2ea7f8a..5056f7a 100644
--- 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/view/popup/permissions/AbstractPermissionsPopupView.ui.xml
+++ 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/view/popup/permissions/AbstractPermissionsPopupView.ui.xml
@@ -27,7 +27,7 @@
         }
 
         .searchStringEditor {
-            width: 250px;
+            width: 200px;
             height: 18px;
             margin-left: 5px;
             margin-top: 3px;
@@ -39,13 +39,18 @@
             height: 30px;
         }
 
+        .namespaceSelection {
+            width: 320px;
+            height: 30px;
+        }
+
         .everyonePanel {
             height: 30px;
             margin-top: 3px;
         }
 
         .searchStringPanel {
-            width: 660px;
+            width: 860px;
             height: 30px;
         }
 
@@ -63,7 +68,7 @@
         }
     </ui:style>
 
-    <d:SimpleDialogPanel width="700px" height="500px">
+    <d:SimpleDialogPanel width="900px" height="500px">
         <d:content>
             <g:FlowPanel>
                 <g:SimplePanel ui:field="everyonePanel" 
addStyleNames="{style.everyonePanel}">
@@ -74,6 +79,7 @@
                 </g:SimplePanel>
                 <g:HorizontalPanel verticalAlignment="ALIGN_MIDDLE" 
addStyleNames="{style.searchStringPanel}">
                     <e:ListModelListBoxEditor 
addStyleNames="{style.profileSelection}" 
label="{constants.searchPermissionsPopup}" ui:field="profileSelection" />
+                    <e:ListModelListBoxEditor 
addStyleNames="{style.namespaceSelection}" 
label="{constants.namespacePermissionsPopup}" ui:field="namespaceSelection" />
                     <e:TextBoxChanger 
addStyleNames="{style.searchStringEditor}" ui:field="searchStringEditor" />
                     <w:UiCommandButton ui:field="searchButton" 
addStyleNames="{style.goButton} appv_searchButton_pfly_fix" />
                 </g:HorizontalPanel>
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/dataprovider/AsyncDataProvider.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/dataprovider/AsyncDataProvider.java
index 3d7639d..2bd09bd 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/dataprovider/AsyncDataProvider.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/dataprovider/AsyncDataProvider.java
@@ -1208,6 +1208,17 @@
         return uniqueOsNames;
     }
 
+    public static void getAAANamespaces(AsyncQuery aQuery) {
+        aQuery.converterCallback = new IAsyncConverter() {
+            @Override
+            public Object Convert(Object source, AsyncQuery _asyncQuery)
+            {
+                return source != null ? (HashMap<String, List<String>>) source 
: new HashMap<String, List<String>>();
+            }
+        };
+        Frontend.getInstance().runQuery(VdcQueryType.GetAvailableNamespaces, 
new VdcQueryParametersBase(), aQuery);
+    }
+
     public static void getRoleList(AsyncQuery aQuery) {
         aQuery.converterCallback = new IAsyncConverter() {
             @Override
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/users/AdElementListModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/users/AdElementListModel.java
index 8ce84df..d5be621 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/users/AdElementListModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/users/AdElementListModel.java
@@ -3,6 +3,7 @@
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
+import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
@@ -14,7 +15,7 @@
 import org.ovirt.engine.core.common.businessentities.Role;
 import org.ovirt.engine.core.common.businessentities.aaa.DbUser;
 import org.ovirt.engine.core.common.interfaces.SearchType;
-import org.ovirt.engine.core.common.queries.SearchParameters;
+import org.ovirt.engine.core.common.queries.DirectorySearchParameters;
 import org.ovirt.engine.core.common.queries.VdcQueryReturnValue;
 import org.ovirt.engine.core.common.queries.VdcQueryType;
 import org.ovirt.engine.core.compat.StringHelper;
@@ -29,6 +30,7 @@
 import org.ovirt.engine.ui.uicommonweb.models.SearchableListModel;
 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 AdElementListModel extends SearchableListModel
@@ -45,6 +47,8 @@
     }
 
     private Iterable privateExcludeItems;
+
+    private HashMap<String, List<String>> namespacesMap;
 
     public Iterable getExcludeItems()
     {
@@ -66,6 +70,16 @@
     private void setProfile(ListModel value)
     {
         privateProfile = value;
+    }
+
+    private ListModel<String> privateNamespace;
+
+    public void setNamespace(ListModel<String> value) {
+        privateNamespace = value;
+    }
+
+    public ListModel<String> getNamespace() {
+        return privateNamespace;
     }
 
     private ListModel privateRole;
@@ -157,6 +171,7 @@
     {
         setRole(new ListModel());
         setProfile(new ListModel());
+        setNamespace(new ListModel());
 
         setSelectAll(new EntityModel());
         getSelectAll().setEntity(false);
@@ -179,9 +194,25 @@
             @Override
             public void onSuccess(Object model, Object result) {
                 populateProfiles((List<ProfileEntry>) result);
+                getProfile().getSelectedItemChangedEvent().addListener(new 
IEventListener() {
+                    @Override
+                    public void eventRaised(Event ev, Object sender, EventArgs 
args) {
+                        populateNamespaces();
+                    }
+                });
             }
         }));
 
+        AsyncDataProvider.getAAANamespaces(new AsyncQuery(this, new 
INewAsyncCallback() {
+
+            @Override
+            public void onSuccess(Object model, Object result) {
+                if (getProfile().getSelectedItem() != null) {
+                    namespacesMap = (HashMap<String, List<String>>) result;
+                    populateNamespaces();
+                }
+            }
+        }));
 
         AsyncDataProvider.getRoleList(new AsyncQuery(this, new 
INewAsyncCallback() {
 
@@ -196,6 +227,12 @@
     protected void populateProfiles(List<ProfileEntry> profiles) {
         getProfile().setItems(profiles);
         getProfile().setSelectedItem(Linq.firstOrDefault(profiles));
+    }
+
+    protected void populateNamespaces() {
+        if (namespacesMap != null) {
+            getNamespace().setItems(namespacesMap.get(((ProfileEntry) 
getProfile().getSelectedItem()).getAuthz()));
+        }
     }
 
     protected void populateRoles(List<Role> roles){
@@ -340,13 +377,13 @@
     protected void findGroups(String searchString, AsyncQuery query) {
         Frontend.getInstance()
                 .runQuery(VdcQueryType.Search,
-                        new SearchParameters("ADGROUP@" + ((ProfileEntry) 
getProfile().getSelectedItem()).getAuthz() + ": " + searchString, 
SearchType.DirectoryGroup), query); //$NON-NLS-1$ //$NON-NLS-2$
+                        new DirectorySearchParameters("ADGROUP@" + 
((ProfileEntry) getProfile().getSelectedItem()).getAuthz() + ": " + 
searchString, SearchType.DirectoryGroup, getNamespace().getSelectedItem()), 
query); //$NON-NLS-1$ //$NON-NLS-2$
     }
 
     protected void findUsers(String searchString, AsyncQuery query) {
         Frontend.getInstance()
                 .runQuery(VdcQueryType.Search,
-                        new SearchParameters("ADUSER@" + ((ProfileEntry) 
getProfile().getSelectedItem()).getAuthz() + ": " + searchString, 
SearchType.DirectoryUser), query); //$NON-NLS-1$ //$NON-NLS-2$
+                        new DirectorySearchParameters("ADUSER@" + 
((ProfileEntry) getProfile().getSelectedItem()).getAuthz() + ": " + 
searchString, SearchType.DirectoryUser, getNamespace().getSelectedItem()), 
query); //$NON-NLS-1$ //$NON-NLS-2$
     }
 
     protected void onUserAndAdGroupsLoaded(AdElementListModel 
adElementListModel)


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

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ic78559243c765271bf8e12abd035deba05226bda
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: ovirt-engine-3.5
Gerrit-Owner: Alon Bar-Lev <alo...@redhat.com>
Gerrit-Reviewer: Yair Zaslavsky <yzasl...@redhat.com>
_______________________________________________
Engine-patches mailing list
Engine-patches@ovirt.org
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to