Martin Mucha has uploaded a new change for review.

Change subject: webadmin: gui for adding macPool permissions.
......................................................................

webadmin: gui for adding macPool permissions.

Change-Id: Idb6b442e7eebce367b9008f4b9c1df9ade84745f
Signed-off-by: Martin Mucha <[email protected]>
---
A 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetAllMacPoolRolesQuery.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetPermissionsForObjectQuery.java
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java
M 
backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/PermissionDAO.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/help/HelpTag.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/CommonModel.java
A 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/macpool/MacPoolPermissionsListModel.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/macpool/SharedMacPoolListModel.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/users/AdElementListModel.java
A 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/users/AdElementListModelForMacPoolRoles.java
M 
frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIConstants.java
M 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/UiCommonModule.java
M 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/popup/configure/ConfigurePopupPresenterWidget.java
A 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/macpool/MacPoolPermissionModelProvider.java
M 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/macpool/SharedMacPoolView.java
15 files changed, 574 insertions(+), 17 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/11/32211/12

diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetAllMacPoolRolesQuery.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetAllMacPoolRolesQuery.java
new file mode 100644
index 0000000..0b374c6
--- /dev/null
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetAllMacPoolRolesQuery.java
@@ -0,0 +1,53 @@
+package org.ovirt.engine.core.bll;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.ovirt.engine.core.common.businessentities.Role;
+import 
org.ovirt.engine.core.common.queries.MultilevelAdministrationsQueriesParameters;
+import org.ovirt.engine.core.compat.Guid;
+
+public class GetAllMacPoolRolesQuery<P extends 
MultilevelAdministrationsQueriesParameters> extends QueriesCommandBase<P> {
+
+    private static final List<Guid> SIGNIFICANT_ROLE_IDS = 
getSignificantRoleIds();
+
+    public GetAllMacPoolRolesQuery(P parameters) {
+        super(parameters);
+    }
+
+    @Override
+    protected void executeQueryCommand() {
+        getQueryReturnValue().setReturnValue(calculateMacPoolRelatedRoles());
+    }
+
+    private List<Role> calculateMacPoolRelatedRoles() {
+        final List<Role> allRoles = getDbFacade().getRoleDao().getAll();
+
+        dropUnrelatedRoles(allRoles, SIGNIFICANT_ROLE_IDS);
+        return allRoles;
+    }
+
+    public static List<Guid> getRoleIds(PredefinedRoles... 
macPoolRelatedRoles) {
+        final List<Guid> result = new ArrayList<>(macPoolRelatedRoles.length);
+
+        for (PredefinedRoles macPoolRelatedRole : macPoolRelatedRoles) {
+            result.add(macPoolRelatedRole.getId());
+        }
+
+        return result;
+    }
+
+    private void dropUnrelatedRoles(List<Role> allRoles, List<Guid> 
idsOrRolesRelatedToMacPool) {
+        for (Iterator<Role> iterator = allRoles.iterator(); 
iterator.hasNext(); ) {
+            if (!idsOrRolesRelatedToMacPool.contains(iterator.next().getId())) 
{
+                iterator.remove();
+            }
+        }
+    }
+
+    private static List<Guid> getSignificantRoleIds() {
+        return getRoleIds(PredefinedRoles.MAC_POOL_ADMIN,
+                PredefinedRoles.MAC_POOL_USER);
+    }
+}
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetPermissionsForObjectQuery.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetPermissionsForObjectQuery.java
index 8b1b1c7..d5e00a4 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetPermissionsForObjectQuery.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetPermissionsForObjectQuery.java
@@ -4,7 +4,6 @@
 
 import org.ovirt.engine.core.common.businessentities.Permissions;
 import org.ovirt.engine.core.common.queries.GetPermissionsForObjectParameters;
-import org.ovirt.engine.core.compat.Guid;
 import org.ovirt.engine.core.dao.PermissionDAO;
 
 public class GetPermissionsForObjectQuery<P extends 
GetPermissionsForObjectParameters> extends QueriesCommandBase<P> {
@@ -15,17 +14,22 @@
 
     @Override
     protected void executeQueryCommand() {
-        Guid objectId = getParameters().getObjectId();
+        getQueryReturnValue().setReturnValue(queryPermissions());
+    }
+
+    private List<Permissions> queryPermissions() {
         PermissionDAO dao = getDbFacade().getPermissionDao();
-        List<Permissions> perms;
+
         if (getParameters().getDirectOnly()) {
-            perms = dao.getAllForEntity(objectId, getUserID(), 
getParameters().isFiltered(), getParameters().getAllUsersWithPermission());
+            return dao.getAllForEntity(getParameters().getObjectId(),
+                    getUserID(),
+                    getParameters().isFiltered(),
+                    getParameters().getAllUsersWithPermission());
         } else {
-            perms = dao.getTreeForEntity(objectId,
+            return dao.getTreeForEntity(getParameters().getObjectId(),
                     getParameters().getVdcObjectType(),
                     getUserID(),
                     getParameters().isFiltered());
         }
-        getQueryReturnValue().setReturnValue(perms);
     }
 }
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 3a26d5d..059aaa2 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
@@ -224,6 +224,7 @@
 
     // Multi Level Administration queries
     GetAllRoles(VdcQueryAuthType.User),
+    GetAllMacPoolRoles(VdcQueryAuthType.Admin),
     GetRoleById(VdcQueryAuthType.User),
     GetRoleByName,
     GetPermissionById(VdcQueryAuthType.User),
diff --git 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/PermissionDAO.java
 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/PermissionDAO.java
index 62c5dd3..2cc665b 100644
--- 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/PermissionDAO.java
+++ 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/PermissionDAO.java
@@ -136,7 +136,7 @@
     List<Permissions> getAllForEntity(Guid id, Guid userID, boolean 
isFiltered);
 
 
-    public List<Permissions> getAllForEntity(Guid id, Guid userID, boolean 
isFiltered, boolean allUsersWithPermission);
+    List<Permissions> getAllForEntity(Guid id, Guid userID, boolean 
isFiltered, boolean allUsersWithPermission);
 
     List<Permissions> getAllForEntity(Guid id, Guid userID, boolean 
isFiltered, boolean allUsersWithPermission, int appMode);
 
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/help/HelpTag.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/help/HelpTag.java
index 5591771..a76d5d0 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/help/HelpTag.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/help/HelpTag.java
@@ -276,6 +276,9 @@
 
     remove_shared_mac_pools("remove_shared_mac_pools", HelpTagType.WEBADMIN, 
"Configure > MAC Address Pools > Remove"), //$NON-NLS-1$ $NON-NLS-2$
 
+    //TODO MM: is this correct comment?
+    remove_shared_mac_pool_permissions("remove_shared_mac_pool_permissions", 
HelpTagType.WEBADMIN, "Configure > MAC Address Pools > Remove"), //$NON-NLS-1$ 
$NON-NLS-2$
+
     new_domain("new_domain", HelpTagType.WEBADMIN, "Storage Tab > New 
Domain"), //$NON-NLS-1$ //$NON-NLS-2$
 
     new_external_subnet("new_external_subnet", HelpTagType.WEBADMIN, "Networks 
main tab -> External Subnet sub tab -> New"), //$NON-NLS-1$ //$NON-NLS-2$
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/CommonModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/CommonModel.java
index 889f267..46c1e94 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/CommonModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/CommonModel.java
@@ -31,6 +31,7 @@
 import org.ovirt.engine.ui.uicommonweb.models.events.EventListModel;
 import org.ovirt.engine.ui.uicommonweb.models.events.TaskListModel;
 import org.ovirt.engine.ui.uicommonweb.models.hosts.HostListModel;
+import 
org.ovirt.engine.ui.uicommonweb.models.macpool.MacPoolPermissionsListModel;
 import org.ovirt.engine.ui.uicommonweb.models.macpool.SharedMacPoolListModel;
 import org.ovirt.engine.ui.uicommonweb.models.networks.NetworkListModel;
 import org.ovirt.engine.ui.uicommonweb.models.pools.PoolListModel;
@@ -84,6 +85,7 @@
     private ClusterPolicyListModel clusterPolicyListModel;
     private InstanceTypeListModel instanceTypeListModel;
     private SharedMacPoolListModel sharedMacPoolListModel;
+    private MacPoolPermissionsListModel macPoolPermissionsListModel;
 
     // NOTE: when adding a new ListModel here, be sure to add it to the list 
in initItems()
     private ListWithDetailsAndReportsModel dataCenterList;
@@ -208,6 +210,7 @@
         systemPermissionListModel = new SystemPermissionListModel();
         clusterPolicyListModel = new ClusterPolicyListModel();
         sharedMacPoolListModel = new SharedMacPoolListModel();
+        macPoolPermissionsListModel = new MacPoolPermissionsListModel();
 
         // Activate the default list model.
         setSelectedItem(getDefaultItem());
@@ -546,7 +549,8 @@
         
model.setTitle(ConstantsManager.getInstance().getConstants().ConfigureTitle());
         model.setHelpTag(HelpTag.configure);
         model.setHashName("configure"); //$NON-NLS-1$
-        model.setEntity(new Model[] { roleListModel, 
systemPermissionListModel, clusterPolicyListModel, sharedMacPoolListModel });
+        //TODO MM: what is this for?
+        model.setEntity(new Model[] { roleListModel, 
systemPermissionListModel, clusterPolicyListModel, sharedMacPoolListModel, 
macPoolPermissionsListModel });
 
         UICommand tempVar = new UICommand("Cancel", this); //$NON-NLS-1$
         
tempVar.setTitle(ConstantsManager.getInstance().getConstants().close());
@@ -1054,6 +1058,10 @@
         return sharedMacPoolListModel;
     }
 
+    public MacPoolPermissionsListModel getMacPoolPermissionsListModel() {
+        return macPoolPermissionsListModel;
+    }
+
     public Event getSignedOutEvent()
     {
         return privateSignedOutEvent;
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/macpool/MacPoolPermissionsListModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/macpool/MacPoolPermissionsListModel.java
new file mode 100644
index 0000000..55c5864
--- /dev/null
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/macpool/MacPoolPermissionsListModel.java
@@ -0,0 +1,264 @@
+package org.ovirt.engine.ui.uicommonweb.models.macpool;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import org.ovirt.engine.core.common.VdcObjectType;
+import org.ovirt.engine.core.common.action.VdcActionParametersBase;
+import org.ovirt.engine.core.common.action.VdcActionType;
+import org.ovirt.engine.core.common.businessentities.Permissions;
+import org.ovirt.engine.core.common.businessentities.Role;
+import org.ovirt.engine.core.common.businessentities.aaa.DbUser;
+import org.ovirt.engine.core.common.queries.GetPermissionsForObjectParameters;
+import org.ovirt.engine.core.common.queries.VdcQueryType;
+import org.ovirt.engine.core.compat.Guid;
+import org.ovirt.engine.ui.frontend.Frontend;
+import org.ovirt.engine.ui.uicommonweb.UICommand;
+import org.ovirt.engine.ui.uicommonweb.help.HelpTag;
+import org.ovirt.engine.ui.uicommonweb.models.ConfirmationModel;
+import org.ovirt.engine.ui.uicommonweb.models.EntityModel;
+import org.ovirt.engine.ui.uicommonweb.models.ListWithDetailsModel;
+import 
org.ovirt.engine.ui.uicommonweb.models.configure.PermissionsOperationsParametersBuilder;
+import 
org.ovirt.engine.ui.uicommonweb.models.users.AdElementListModelForMacPoolRoles;
+import org.ovirt.engine.ui.uicompat.ConstantsManager;
+import org.ovirt.engine.ui.uicompat.FrontendMultipleActionAsyncResult;
+import org.ovirt.engine.ui.uicompat.IFrontendMultipleActionAsyncCallback;
+
+public class MacPoolPermissionsListModel extends ListWithDetailsModel {
+
+    private final UICommand removeConfirmedUiCommand;
+    private final UICommand removeCanceledUiCommand;
+
+    private UICommand addPermissionCommand;
+    private UICommand removePermissionCommand;
+    private final UICommand attachPermissionsConfirmedUiCommand;
+    private final UICommand attachPermissionsCancelledUiCommand;
+
+    private Guid selectedMacPoolId;
+
+
+    public MacPoolPermissionsListModel() {
+        this.addPermissionCommand = new UICommand("AddPermission", this); 
//$NON-NLS-1$
+        this.removePermissionCommand = new UICommand("RemovePermission", 
this); //$NON-NLS-1$
+
+        removeConfirmedUiCommand = createRemoveConfirmedUiCommand();
+        removeCanceledUiCommand = createRemoveCancelledUiCommand();
+        attachPermissionsConfirmedUiCommand = 
createAttachPermissionsConfirmedUiCommand();
+        attachPermissionsCancelledUiCommand = 
createAttachPermissionCancelledUiCommand();
+
+        updateActionAvailability();
+    }
+
+    private void updateActionAvailability() {
+        addPermissionCommand.setIsExecutionAllowed(true);
+        /*TODO MM: getSelectedItems() is called prior to being set. which 
escalates need for non-null checking.
+        This is of course wrong, field should be initialized by model, it's 
not business of external classes.
+        On top of it, implementation of setSelectedItems is insanely fragile, 
producing side effect.
+        Setter generates 'selection changed' events only when changing 
reference to collection but keeps silent
+        when this collection is externally changed. Proper approach is to do a 
copy of input parameter.
+
+        Performance drop is insignificant compared to gotcha fix(no on changed 
event fired) and
+        removal of numerous code duplicates ie. nullity checking.
+        * */
+        List selectedItems = getSelectedItems();
+        boolean somethingIsSelected = selectedItems != null  && 
selectedItems.size() > 0;
+        removePermissionCommand.setIsExecutionAllowed(somethingIsSelected);
+    }
+
+    @Override
+    public void executeCommand(UICommand command) {
+        super.executeCommand(command);
+
+        if (command == getAddPermissionCommand()) {
+            addPermission();
+        } else if (command == getRemovePermissionCommand()) {
+            requestPermissionRemoval();
+        } else if (command == removeCanceledUiCommand) {
+            cancelConfirmation();
+        } else if (command == removeConfirmedUiCommand) {
+            removePermissionConfirmed();
+        } else if (command == attachPermissionsConfirmedUiCommand) {
+            attachPermissionsConfirmed();
+        } else if (command == attachPermissionsCancelledUiCommand) {
+            attachPermissionsCancelled();
+        }else {
+            throw new IllegalArgumentException("Unsupported command: 
"+command.getMessage()); //$NON-NLS-1$
+        }
+    }
+
+    private void attachPermissionsConfirmed() {
+        AdElementListModelForMacPoolRoles model = 
(AdElementListModelForMacPoolRoles) getWindow();
+
+        @SuppressWarnings("unchecked")
+        List<EntityModel<DbUser>> selectedItems = model.getSelectedItems();
+        if (selectedItems == null ) {
+            attachPermissionsCancelled();
+            return;
+        }
+
+        //TODO MM: ask about fixing shitty  
org.ovirt.engine.ui.uicommonweb.models.configure.SystemPermissionListModel.onAttach()
+        //TODO MM: duplicates? This vs SystemPermissionListModel vs 
PermissionListModel
+        List<DbUser> dbUsers = new ArrayList<DbUser>(selectedItems.size());
+        for (EntityModel<DbUser> selectedItem : selectedItems) {
+            dbUsers.add(selectedItem.getEntity());
+        }
+
+        Role roleToAssign = (Role) model.getRole().getSelectedItem();
+
+        PermissionsOperationsParametersBuilder builder = new 
PermissionsOperationsParametersBuilder();
+        builder.setRole(roleToAssign);
+        builder.setObjectType(VdcObjectType.MacPool);
+        builder.setObjectId(selectedMacPoolId);
+        ArrayList<VdcActionParametersBase> list = builder.build(dbUsers);
+
+        Frontend.getInstance().runMultipleAction(VdcActionType.AddPermission, 
list,
+                new IFrontendMultipleActionAsyncCallback() {
+                    @Override
+                    public void executed(FrontendMultipleActionAsyncResult 
result) {
+                        syncSearch();
+                        setWindow(null);
+                    }
+                }, model);
+
+
+
+    }
+
+    private void removePermissionConfirmed() {
+        setConfirmWindow(null);
+
+        @SuppressWarnings("unchecked")
+        List<Permissions> selectedItems = getSelectedItems();
+        ArrayList<VdcActionParametersBase> permissionsToRemove = new 
ArrayList<VdcActionParametersBase>(selectedItems.size());
+        for (Permissions permissions : selectedItems) {
+            permissionsToRemove.add(new 
org.ovirt.engine.core.common.action.PermissionsOperationsParameters(permissions));
+        }
+
+        //TODO MM: why there's not Frontend.runMultipleAction(..., ArrayList<? 
extends VdcActionParametersBase>)????
+        
Frontend.getInstance().runMultipleAction(VdcActionType.RemovePermission, 
permissionsToRemove);
+    }
+
+    @SuppressWarnings("unchecked")
+    private void requestPermissionRemoval() {
+        ConfirmationModel model = new ConfirmationModel();
+        
model.setTitle(ConstantsManager.getInstance().getConstants().removeSharedMacPoolsTitle());
+        //TODO MM: what is this?
+        model.setHashName("remove_shared_mac_pool_permissions"); //$NON-NLS-1$
+        model.setHelpTag(HelpTag.remove_shared_mac_pools);
+
+        model.getCommands().add(removeConfirmedUiCommand);
+        model.getCommands().add(removeCanceledUiCommand);
+
+        List<String> permissionsList = new ArrayList<String>();
+        for (Permissions permissions : (Iterable<Permissions>) 
getSelectedItems()) {
+            permissionsList.add(permissions.getOwnerName());
+        }
+        model.setItems(permissionsList);
+
+        setConfirmWindow(model);
+    }
+
+    private void cancelConfirmation() {
+        setConfirmWindow(null);
+    }
+
+    public void attachPermissionsCancelled() {
+        setWindow(null);
+    }
+
+    private UICommand createRemoveConfirmedUiCommand() {
+        return createDefaultOkUiCommand("RemovePermission"); //$NON-NLS-1$
+    }
+
+    private UICommand createAttachPermissionsConfirmedUiCommand() {
+        return createDefaultOkUiCommand("AttachPermissions"); //$NON-NLS-1$
+    }
+
+    private UICommand createRemoveCancelledUiCommand() {
+        return createCancelUiCommand("CancelPermissionRemoval"); //$NON-NLS-1$
+    }
+
+    private UICommand createAttachPermissionCancelledUiCommand() {
+        return createCancelUiCommand("CancelPermissionAttach"); //$NON-NLS-1$
+    }
+
+    //TODO MM: is this 'name' parameter of UICommand good for anything?
+    //TODO MM: move to UICommand class or create UICommandFactory and replace 
gazillion of code duplicites.
+    private UICommand createDefaultOkUiCommand(String name) {
+        UICommand command = new UICommand(name, this);
+        command.setTitle(ConstantsManager.getInstance().getConstants().ok());
+        command.setIsDefault(true);
+        return command;
+    }
+
+    private UICommand createCancelUiCommand(String name) {
+        UICommand command = new UICommand(name, this); //$NON-NLS-1$
+        
command.setTitle(ConstantsManager.getInstance().getConstants().cancel());
+        command.setIsCancel(true);
+        return command;
+    }
+
+    //TODO MM: remove duplicity with: 
org.ovirt.engine.ui.uicommonweb.models.configure.SystemPermissionListModel.add()
+    @SuppressWarnings("unchecked")
+    private void addPermission() {
+
+        if (getWindow() != null) {
+            return;
+        }
+
+        AdElementListModelForMacPoolRoles model = new 
AdElementListModelForMacPoolRoles();
+        model.getIsEveryoneSelectionHidden().setEntity(true);
+
+        
model.setTitle(ConstantsManager.getInstance().getConstants().addSystemPermissionToUserTitle());
+        model.setHelpTag(HelpTag.add_system_permission_to_user);
+        model.setHashName("add_system_permission_to_user"); //$NON-NLS-1$
+        model.getCommands().add(attachPermissionsConfirmedUiCommand);
+        model.getCommands().add(attachPermissionsCancelledUiCommand);
+
+        setWindow(model);
+    }
+
+    @Override
+    protected void selectedItemsChanged() {
+        super.selectedItemsChanged();
+        updateActionAvailability();
+    }
+
+    @Override
+    protected String getListName() {
+        return "MacPoolPermissionListModel"; //$NON-NLS-1$
+    }
+
+    @SuppressWarnings("unchecked")
+    @Override
+    protected void syncSearch() {
+        if (selectedMacPoolId != null) {
+            super.syncSearch(VdcQueryType.GetPermissionsForObject, new 
GetPermissionsForObjectParameters(selectedMacPoolId));
+        } else {
+            setItems(Collections.emptyList());
+        }
+    }
+
+    public UICommand getAddPermissionCommand() {
+        return addPermissionCommand;
+    }
+
+    public UICommand getRemovePermissionCommand() {
+        return removePermissionCommand;
+    }
+
+    public Guid getSelectedMacPoolId() {
+        return selectedMacPoolId;
+    }
+
+    //TODO MM: setter method with side effect, but I think this is actually ok.
+    public void setSelectedMacPoolIdAndSync(Guid selectedMacPoolId) {
+        this.selectedMacPoolId = selectedMacPoolId;
+        syncSearch();
+    }
+
+    public UICommand getAttachPermissionsConfirmedUiCommand() {
+        return attachPermissionsConfirmedUiCommand;
+    }
+}
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/macpool/SharedMacPoolListModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/macpool/SharedMacPoolListModel.java
index 8213b8b..a7feee6 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/macpool/SharedMacPoolListModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/macpool/SharedMacPoolListModel.java
@@ -123,7 +123,7 @@
     }
 
     private void onRemove() {
-        cancel();
+        setConfirmWindow(null);
         ArrayList<VdcActionParametersBase> params = new 
ArrayList<VdcActionParametersBase>();
         for (MacPool macPool : (Iterable<MacPool>) getSelectedItems()) {
             params.add(new RemoveMacPoolByIdParameters(macPool.getId()));
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 16e1061..0d2e530 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
@@ -207,8 +207,10 @@
 
         }));
 
+        queryRoleList();
+    }
 
-
+    protected void queryRoleList() {
         AsyncDataProvider.getInstance().getRoleList(new AsyncQuery(this, new 
INewAsyncCallback() {
 
             @Override
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/users/AdElementListModelForMacPoolRoles.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/users/AdElementListModelForMacPoolRoles.java
new file mode 100644
index 0000000..5e71547
--- /dev/null
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/users/AdElementListModelForMacPoolRoles.java
@@ -0,0 +1,44 @@
+package org.ovirt.engine.ui.uicommonweb.models.users;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.ovirt.engine.core.common.businessentities.Role;
+import 
org.ovirt.engine.core.common.queries.MultilevelAdministrationsQueriesParameters;
+import org.ovirt.engine.core.common.queries.VdcQueryType;
+import org.ovirt.engine.ui.frontend.AsyncQuery;
+import org.ovirt.engine.ui.frontend.Frontend;
+import org.ovirt.engine.ui.frontend.IAsyncConverter;
+import org.ovirt.engine.ui.frontend.INewAsyncCallback;
+
+public class AdElementListModelForMacPoolRoles extends AdElementListModel {
+    @Override
+    protected void queryRoleList() {
+        Frontend.getInstance().runQuery(VdcQueryType.GetAllMacPoolRoles,
+                new MultilevelAdministrationsQueriesParameters(),
+                createQuery());
+    }
+
+    private AsyncQuery createQuery() {
+        AsyncQuery aQuery = new AsyncQuery(this, new INewAsyncCallback() {
+
+            @Override
+            public void onSuccess(Object model, Object result) {
+                populateRoles((List<Role>) result);
+
+            }
+        });
+        aQuery.converterCallback = createConverterCallBack();
+        return aQuery;
+    }
+
+    private IAsyncConverter createConverterCallBack() {
+        return new IAsyncConverter() {
+            @Override
+            public Object Convert(Object source, AsyncQuery _asyncQuery) {
+                //TODO MM: just to stick with other similar code, but it's 
wrong: a) it cannot be null b) all that generics are useless. I.e. this 
converter is in this, and lot of other cases, completely fruitless.
+                return source != null ? (ArrayList<Role>) source : new 
ArrayList<Role>();
+            }
+        };
+    }
+}
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 53acfad..7f98a23 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
@@ -67,6 +67,9 @@
     @DefaultStringValue("Clusters")
     String clustersTitle();
 
+    @DefaultStringValue("MAC Pool Permissions")
+    String macPoolPermissionsTitle();
+
     @DefaultStringValue("Profiles")
     String networkProfilesTitle();
 
@@ -200,6 +203,9 @@
     @DefaultStringValue("Remove MAC Address Pool(s)")
     String removeSharedMacPoolsTitle();
 
+    @DefaultStringValue("Remove MAC Address Pool Permission(s)")
+    String removeSharedMacPoolPermissions();
+
     @DefaultStringValue("Logical Networks")
     String logicalNetworksTitle();
 
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/UiCommonModule.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/UiCommonModule.java
index 095f85c..b42e3b7 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/UiCommonModule.java
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/UiCommonModule.java
@@ -18,6 +18,7 @@
 import org.ovirt.engine.ui.webadmin.gin.uicommon.VirtualMachineModule;
 import org.ovirt.engine.ui.webadmin.gin.uicommon.VnicProfileModule;
 import org.ovirt.engine.ui.webadmin.gin.uicommon.VolumeModule;
+import 
org.ovirt.engine.ui.webadmin.section.main.view.popup.macpool.MacPoolPermissionModelProvider;
 import org.ovirt.engine.ui.webadmin.uicommon.WebAdminConfigurator;
 import org.ovirt.engine.ui.webadmin.uicommon.model.AlertFirstRowModelProvider;
 import org.ovirt.engine.ui.webadmin.uicommon.model.AlertModelProvider;
@@ -114,6 +115,9 @@
         // SharedMacPoolListModel
         bind(SharedMacPoolModelProvider.class).asEagerSingleton();
 
+        // MacPoolPermissionModelProvider
+        bind(MacPoolPermissionModelProvider.class).asEagerSingleton();
+
         // disk profiles permissions
         bind(DiskProfilePermissionModelProvider.class).asEagerSingleton();
 
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/popup/configure/ConfigurePopupPresenterWidget.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/popup/configure/ConfigurePopupPresenterWidget.java
index 349005a..4097d4e 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/popup/configure/ConfigurePopupPresenterWidget.java
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/popup/configure/ConfigurePopupPresenterWidget.java
@@ -3,6 +3,7 @@
 import org.ovirt.engine.core.common.mode.ApplicationMode;
 import org.ovirt.engine.ui.common.presenter.AbstractPopupPresenterWidget;
 import org.ovirt.engine.ui.uicommonweb.models.ApplicationModeHelper;
+import 
org.ovirt.engine.ui.webadmin.section.main.view.popup.macpool.MacPoolPermissionModelProvider;
 import 
org.ovirt.engine.ui.webadmin.uicommon.model.ClusterPolicyClusterModelProvider;
 import org.ovirt.engine.ui.webadmin.uicommon.model.ClusterPolicyModelProvider;
 import org.ovirt.engine.ui.webadmin.uicommon.model.InstanceTypeModelProvider;
@@ -30,6 +31,7 @@
     private ClusterPolicyClusterModelProvider 
clusterPolicyClusterModelProvider;
     private InstanceTypeModelProvider instanceTypeModelProvider;
     private SharedMacPoolModelProvider sharedMacPoolModelProvider;
+    private MacPoolPermissionModelProvider macPoolPermissionModelProvider;
 
     @Inject
     public ConfigurePopupPresenterWidget(EventBus eventBus, ViewDef view,
@@ -39,7 +41,8 @@
             ClusterPolicyModelProvider clusterPolicyModelProvider,
             ClusterPolicyClusterModelProvider 
clusterPolicyClusterModelProvider,
             InstanceTypeModelProvider instanceTypeModelProvider,
-            SharedMacPoolModelProvider sharedMacPoolModelProvider) {
+            SharedMacPoolModelProvider sharedMacPoolModelProvider,
+            MacPoolPermissionModelProvider macPoolPermissionModelProvider) {
         super(eventBus, view);
         this.roleModelProvider = roleModelProvider;
         this.permissionModelProvider = permissionModelProvider;
@@ -48,6 +51,7 @@
         this.clusterPolicyClusterModelProvider = 
clusterPolicyClusterModelProvider;
         this.instanceTypeModelProvider = instanceTypeModelProvider;
         this.sharedMacPoolModelProvider = sharedMacPoolModelProvider;
+        this.macPoolPermissionModelProvider = macPoolPermissionModelProvider;
     }
 
     @Override
@@ -63,6 +67,7 @@
         }
         instanceTypeModelProvider.getModel().search();
         sharedMacPoolModelProvider.getModel().search();
+        macPoolPermissionModelProvider.getModel().search();
     }
 
     @Override
@@ -75,6 +80,7 @@
         clusterPolicyClusterModelProvider.getModel().stopRefresh();
         instanceTypeModelProvider.getModel().stopRefresh();
         sharedMacPoolModelProvider.getModel().stopRefresh();
+        macPoolPermissionModelProvider.getModel().stopRefresh();
     }
 
 }
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/macpool/MacPoolPermissionModelProvider.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/macpool/MacPoolPermissionModelProvider.java
new file mode 100644
index 0000000..75260bb
--- /dev/null
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/macpool/MacPoolPermissionModelProvider.java
@@ -0,0 +1,57 @@
+package org.ovirt.engine.ui.webadmin.section.main.view.popup.macpool;
+
+import org.ovirt.engine.core.common.businessentities.Permissions;
+import 
org.ovirt.engine.ui.common.presenter.AbstractModelBoundPopupPresenterWidget;
+import 
org.ovirt.engine.ui.common.presenter.popup.DefaultConfirmationPopupPresenterWidget;
+import 
org.ovirt.engine.ui.common.presenter.popup.RemoveConfirmationPopupPresenterWidget;
+import org.ovirt.engine.ui.common.uicommon.model.SearchableTabModelProvider;
+import org.ovirt.engine.ui.uicommonweb.UICommand;
+import org.ovirt.engine.ui.uicommonweb.models.ConfirmationModel;
+import org.ovirt.engine.ui.uicommonweb.models.Model;
+import 
org.ovirt.engine.ui.uicommonweb.models.macpool.MacPoolPermissionsListModel;
+import 
org.ovirt.engine.ui.webadmin.section.main.presenter.popup.PermissionsPopupPresenterWidget;
+
+import com.google.gwt.event.shared.EventBus;
+import com.google.inject.Inject;
+import com.google.inject.Provider;
+
+public class MacPoolPermissionModelProvider extends 
SearchableTabModelProvider<Permissions, MacPoolPermissionsListModel> {
+
+    private final Provider<RemoveConfirmationPopupPresenterWidget> 
removeConfirmPopupProvider;
+    private final Provider<PermissionsPopupPresenterWidget> 
permissionPopupProvider;
+
+    @Inject
+    public MacPoolPermissionModelProvider(EventBus eventBus,
+            Provider<DefaultConfirmationPopupPresenterWidget> 
defaultConfirmPopupProvider,
+            Provider<RemoveConfirmationPopupPresenterWidget> 
removeConfirmPopupProvider,
+            Provider<PermissionsPopupPresenterWidget> permissionPopupProvider) 
{
+        super(eventBus, defaultConfirmPopupProvider);
+        this.removeConfirmPopupProvider = removeConfirmPopupProvider;
+        this.permissionPopupProvider = permissionPopupProvider;
+    }
+
+    @Override
+    public MacPoolPermissionsListModel getModel() {
+        return getCommonModel().getMacPoolPermissionsListModel();
+    }
+
+    @Override
+    public AbstractModelBoundPopupPresenterWidget<? extends ConfirmationModel, 
?> getConfirmModelPopup(MacPoolPermissionsListModel source,
+            UICommand lastExecutedCommand) {
+        if (lastExecutedCommand == getModel().getRemovePermissionCommand()) {
+            return removeConfirmPopupProvider.get();
+        } else {
+            return super.getConfirmModelPopup(source, lastExecutedCommand);
+        }
+    }
+
+    @Override
+    public AbstractModelBoundPopupPresenterWidget<? extends Model, ?> 
getModelPopup(MacPoolPermissionsListModel source,
+            UICommand lastExecutedCommand, Model windowModel) {
+        if (lastExecutedCommand == getModel().getAddPermissionCommand()) {
+            return permissionPopupProvider.get();
+        } else {
+            return super.getModelPopup(source, lastExecutedCommand, 
windowModel);
+        }
+    }
+}
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/macpool/SharedMacPoolView.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/macpool/SharedMacPoolView.java
index 4462bba..5b611d2 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/macpool/SharedMacPoolView.java
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/macpool/SharedMacPoolView.java
@@ -1,10 +1,15 @@
 package org.ovirt.engine.ui.webadmin.section.main.view.popup.macpool;
 
+import java.util.List;
+
 import org.ovirt.engine.core.common.businessentities.MacPool;
+import org.ovirt.engine.core.common.businessentities.Permissions;
+import org.ovirt.engine.core.compat.Guid;
 import org.ovirt.engine.ui.common.MainTableHeaderlessResources;
 import org.ovirt.engine.ui.common.MainTableResources;
 import org.ovirt.engine.ui.common.system.ClientStorage;
 import org.ovirt.engine.ui.common.widget.table.SimpleActionTable;
+import org.ovirt.engine.ui.common.widget.table.column.PermissionTypeColumn;
 import org.ovirt.engine.ui.common.widget.table.column.TextColumnWithTooltip;
 import org.ovirt.engine.ui.uicommonweb.UICommand;
 import org.ovirt.engine.ui.webadmin.ApplicationConstants;
@@ -22,10 +27,15 @@
 
 public class SharedMacPoolView extends Composite {
 
+    private final MacPoolPermissionModelProvider 
macPoolPermissionModelProvider;
+    private final SharedMacPoolModelProvider sharedMacPoolModelProvider;
+
     private final SimpleActionTable<MacPool> macPoolTable;
+    private final SimpleActionTable<Permissions> authorizationTable;
 
     @Inject
     public SharedMacPoolView(final SharedMacPoolModelProvider 
sharedMacPoolModelProvider,
+            final MacPoolPermissionModelProvider 
macPoolPermissionModelProvider,
             final EventBus eventBus,
             final ClientStorage clientStorage,
             final MainTableHeaderlessResources headerlessResources,
@@ -33,12 +43,27 @@
             final ApplicationConstants constants,
             final ApplicationResources resources) {
 
-        SplitLayoutPanel rootPanel = createRootPanel();
-        macPoolTable = createMacPoolTable(sharedMacPoolModelProvider, 
eventBus, clientStorage, headerlessResources,
+        this.sharedMacPoolModelProvider = sharedMacPoolModelProvider;
+        this.macPoolPermissionModelProvider = macPoolPermissionModelProvider;
+
+        macPoolTable = createMacPoolTable(eventBus, clientStorage, 
headerlessResources,
                 tableResources, constants, resources);
 
+        authorizationTable = createAuthorizationTable(eventBus, clientStorage, 
headerlessResources,
+                tableResources, constants, resources);
+
+        SplitLayoutPanel rootPanel = createRootPanel();
+        rootPanel.addSouth(authorizationTable, 150);
         rootPanel.add(macPoolTable);
+
+        setupAuthorizationTableVisibility();
+
         initWidget(rootPanel);
+    }
+
+    private void setupAuthorizationTableVisibility() {
+        final boolean isExactlyOnePoolSelected = 
macPoolTable.getSelectionModel().getSelectedList().size() == 1;
+        authorizationTable.setVisible(isExactlyOnePoolSelected);
     }
 
     protected SplitLayoutPanel createRootPanel() {
@@ -48,8 +73,7 @@
         return rootPanel;
     }
 
-    private SimpleActionTable<MacPool> createMacPoolTable(final 
SharedMacPoolModelProvider sharedMacPoolModelProvider,
-            final EventBus eventBus,
+    private SimpleActionTable<MacPool> createMacPoolTable(final EventBus 
eventBus,
             final ClientStorage clientStorage,
             final MainTableHeaderlessResources headerlessResources,
             final MainTableResources tableResources,
@@ -83,6 +107,8 @@
                 return macPool.getDescription();
             }
         }, constants.configureMacPoolDescriptionColumn(), "300px"); 
//$NON-NLS-1$
+
+
         macPoolTable.addActionButton(new 
WebAdminButtonDefinition<MacPool>(constants.configureMacPoolAddButton()) {
 
             @Override
@@ -105,15 +131,94 @@
                 return 
sharedMacPoolModelProvider.getModel().getRemoveCommand();
             }
         });
-        macPoolTable.getSelectionModel().addSelectionChangeHandler(new 
SelectionChangeEvent.Handler() {
 
+
+        macPoolTable.getSelectionModel().addSelectionChangeHandler(new 
SelectionChangeEvent.Handler() {
             @Override
             public void onSelectionChange(SelectionChangeEvent event) {
-                
sharedMacPoolModelProvider.setSelectedItems(macPoolTable.getSelectedItems());
+                setupAuthorizationTableVisibility();
+
+                final List<MacPool> selectedItems = 
macPoolTable.getSelectedItems();
+                sharedMacPoolModelProvider.setSelectedItems(selectedItems);
+
+                Guid soleSelectedMacPoolId = selectedItems.size() == 1 ? 
selectedItems.get(0).getId() : null;
+                
macPoolPermissionModelProvider.getModel().setSelectedMacPoolIdAndSync(soleSelectedMacPoolId);
             }
         });
 
         return macPoolTable;
     }
 
+    //TODO MM: remove duplicity with 
org.ovirt.engine.ui.webadmin.section.main.view.popup.configure.SystemPermissionView.initTable()
+    private SimpleActionTable<Permissions> createAuthorizationTable(final 
EventBus eventBus,
+            final ClientStorage clientStorage,
+            final MainTableHeaderlessResources headerlessResources,
+            final MainTableResources tableResources,
+            final ApplicationConstants constants,
+            final ApplicationResources resources) {
+
+        SimpleActionTable<Permissions> permissionsTable = new 
SimpleActionTable<Permissions>(macPoolPermissionModelProvider,
+                headerlessResources,
+                tableResources,
+                eventBus,
+                clientStorage);
+        permissionsTable.addColumn(new PermissionTypeColumn(), 
constants.empty(), "30px"); //$NON-NLS-1$
+
+        TextColumnWithTooltip<Permissions> userColumn = new 
TextColumnWithTooltip<Permissions>() {
+            @Override
+            public String getValue(Permissions object) {
+                return object.getOwnerName();
+            }
+        };
+        permissionsTable.addColumn(userColumn, constants.userPermission(), 
"300px"); //$NON-NLS-1$
+
+        TextColumnWithTooltip<Permissions> namespaceColumn = new 
TextColumnWithTooltip<Permissions>() {
+            @Override
+            public String getValue(Permissions object) {
+                return object.getNamespace();
+            }
+        };
+        permissionsTable.addColumn(namespaceColumn, constants.namespace(), 
"200px"); //$NON-NLS-1$
+
+        TextColumnWithTooltip<Permissions> authzColumn = new 
TextColumnWithTooltip<Permissions>() {
+            @Override
+            public String getValue(Permissions object) {
+                return object.getAuthz();
+            }
+        };
+        permissionsTable.addColumn(authzColumn, constants.authz(), "200px"); 
//$NON-NLS-1$
+
+        TextColumnWithTooltip<Permissions> roleColumn = new 
TextColumnWithTooltip<Permissions>() {
+            @Override
+            public String getValue(Permissions object) {
+                return object.getRoleName();
+            }
+        };
+        permissionsTable.addColumn(roleColumn, constants.rolePermission());
+
+        permissionsTable.addActionButton(new 
WebAdminButtonDefinition<Permissions>(constants.addPermission()) {
+            @Override
+            protected UICommand resolveCommand() {
+                return 
macPoolPermissionModelProvider.getModel().getAddPermissionCommand();
+            }
+        });
+
+        permissionsTable.addActionButton(new 
WebAdminButtonDefinition<Permissions>(constants.removePermission()) {
+            @Override
+            protected UICommand resolveCommand() {
+                return 
macPoolPermissionModelProvider.getModel().getRemovePermissionCommand();
+            }
+        });
+
+        permissionsTable.getSelectionModel().addSelectionChangeHandler(new 
SelectionChangeEvent.Handler() {
+
+            @Override
+            public void onSelectionChange(SelectionChangeEvent event) {
+                
macPoolPermissionModelProvider.setSelectedItems(authorizationTable.getSelectedItems());
+            }
+        });
+
+        return permissionsTable;
+    }
+
 }


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

Gerrit-MessageType: newchange
Gerrit-Change-Id: Idb6b442e7eebce367b9008f4b9c1df9ade84745f
Gerrit-PatchSet: 12
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Martin Mucha <[email protected]>
Gerrit-Reviewer: [email protected]
Gerrit-Reviewer: oVirt Jenkins CI Server
_______________________________________________
Engine-patches mailing list
[email protected]
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to