You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@syncope.apache.org by il...@apache.org on 2020/10/20 11:11:18 UTC

[syncope] branch master updated: [SYNCOPE-1594] Adding top search bar for user requests and forms

This is an automated email from the ASF dual-hosted git repository.

ilgrosso pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/syncope.git


The following commit(s) were added to refs/heads/master by this push:
     new 3875ff0  [SYNCOPE-1594] Adding top search bar for user requests and forms
3875ff0 is described below

commit 3875ff05175f70d94406a88641d9964498fac547
Author: Francesco Chicchiriccò <il...@apache.org>
AuthorDate: Tue Oct 20 12:28:05 2020 +0200

    [SYNCOPE-1594] Adding top search bar for user requests and forms
---
 .../ui/commons/markup/html/form/FieldPanel.java    |  3 +-
 .../syncope/client/console/pages/UserRequests.java |  8 +-
 .../console/panels/UserRequestDirectoryPanel.java  | 39 +++++----
 .../panels/UserRequestFormDirectoryPanel.java      | 88 ++++++++++----------
 .../client/console/panels/UserRequestsPanel.java   | 88 ++++++++++++++++++++
 .../client/console/rest/UserRequestRestClient.java | 60 +++++++++-----
 .../console/widgets/UserRequestFormsWidget.java    |  7 +-
 .../client/console/panels/UserRequestsPanel.html   | 36 +++++++++
 .../syncope/client/enduser/pages/Flowable.java     |  4 +-
 .../client/enduser/rest/UserRequestRestClient.java | 26 +++---
 .../syncope/core/logic/UserRequestLogic.java       | 11 +--
 .../rest/api/beans/UserRequestFormQuery.java       | 55 -------------
 .../rest/api/service/UserRequestService.java       |  9 +--
 .../rest/cxf/service/UserRequestServiceImpl.java   | 26 +++---
 .../syncope/fit/core/AuthenticationITCase.java     |  6 +-
 .../apache/syncope/fit/core/UserRequestITCase.java | 94 +++++++++++-----------
 .../apache/syncope/fit/core/UserSelfITCase.java    | 64 +++++++--------
 17 files changed, 365 insertions(+), 259 deletions(-)

diff --git a/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/markup/html/form/FieldPanel.java b/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/markup/html/form/FieldPanel.java
index 663d2a5..f587c29 100644
--- a/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/markup/html/form/FieldPanel.java
+++ b/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/markup/html/form/FieldPanel.java
@@ -100,6 +100,7 @@ public abstract class FieldPanel<T extends Serializable> extends AbstractFieldPa
         return this;
     }
 
+    @Override
     public FieldPanel<T> setReadOnly(final boolean readOnly) {
         field.setEnabled(!readOnly);
         return this;
@@ -150,7 +151,7 @@ public abstract class FieldPanel<T extends Serializable> extends AbstractFieldPa
                 }
             }
         });
-        
+
         return this;
     }
 
diff --git a/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/pages/UserRequests.java b/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/pages/UserRequests.java
index c23e1ad..401d085 100644
--- a/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/pages/UserRequests.java
+++ b/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/pages/UserRequests.java
@@ -24,6 +24,7 @@ import java.util.List;
 import org.apache.syncope.client.console.BookmarkablePageLinkBuilder;
 import org.apache.syncope.client.console.panels.UserRequestFormDirectoryPanel;
 import org.apache.syncope.client.console.panels.UserRequestDirectoryPanel;
+import org.apache.syncope.client.console.panels.UserRequestsPanel;
 import org.apache.wicket.extensions.markup.html.tabs.AbstractTab;
 import org.apache.wicket.extensions.markup.html.tabs.ITab;
 import org.apache.wicket.markup.html.WebMarkupContainer;
@@ -48,7 +49,7 @@ public class UserRequests extends BasePage {
     }
 
     private List<ITab> buildTabList() {
-        final List<ITab> tabs = new ArrayList<>();
+        List<ITab> tabs = new ArrayList<>();
 
         tabs.add(new AbstractTab(new ResourceModel("userRequestForms")) {
 
@@ -56,7 +57,7 @@ public class UserRequests extends BasePage {
 
             @Override
             public Panel getPanel(final String panelId) {
-                return new UserRequestFormDirectoryPanel(panelId, getPageReference());
+                return new UserRequestsPanel(panelId, new UserRequestFormDirectoryPanel("inner", getPageReference()));
             }
         });
 
@@ -66,9 +67,10 @@ public class UserRequests extends BasePage {
 
             @Override
             public Panel getPanel(final String panelId) {
-                return new UserRequestDirectoryPanel(panelId, getPageReference());
+                return new UserRequestsPanel(panelId, new UserRequestDirectoryPanel("inner", getPageReference()));
             }
         });
+
         return tabs;
     }
 }
diff --git a/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/panels/UserRequestDirectoryPanel.java b/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/panels/UserRequestDirectoryPanel.java
index 8822c2a..f1dafe9 100644
--- a/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/panels/UserRequestDirectoryPanel.java
+++ b/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/panels/UserRequestDirectoryPanel.java
@@ -28,6 +28,7 @@ import org.apache.syncope.client.ui.commons.Constants;
 import org.apache.syncope.client.ui.commons.DirectoryDataProvider;
 import org.apache.syncope.client.console.pages.BasePage;
 import org.apache.syncope.client.console.panels.UserRequestDirectoryPanel.UserRequestProvider;
+import org.apache.syncope.client.console.panels.UserRequestsPanel.UserRequestSearchEvent;
 import org.apache.syncope.client.console.rest.UserRequestRestClient;
 import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.DatePropertyColumn;
 import org.apache.syncope.client.console.wicket.markup.html.form.ActionLink;
@@ -38,10 +39,12 @@ import org.apache.syncope.common.lib.types.FlowableEntitlement;
 import org.apache.wicket.PageReference;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.authroles.authorization.strategies.role.metadata.MetaDataRoleAuthorizationStrategy;
+import org.apache.wicket.event.IEvent;
 import org.apache.wicket.extensions.markup.html.repeater.data.sort.SortOrder;
 import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn;
 import org.apache.wicket.extensions.markup.html.repeater.data.table.PropertyColumn;
 import org.apache.wicket.model.IModel;
+import org.apache.wicket.model.Model;
 import org.apache.wicket.model.ResourceModel;
 
 public class UserRequestDirectoryPanel
@@ -51,8 +54,10 @@ public class UserRequestDirectoryPanel
 
     private static final String PREF_USER_REQUEST_PAGINATOR_ROWS = "userrequest.paginator.rows";
 
-    public UserRequestDirectoryPanel(final String id, final PageReference pageReference) {
-        super(id, pageReference, true);
+    private String keyword;
+
+    public UserRequestDirectoryPanel(final String id, final PageReference pageRef) {
+        super(id, pageRef, true);
         disableCheckBoxes();
         setFooterVisibility(false);
         modal.size(Modal.Size.Large);
@@ -121,7 +126,19 @@ public class UserRequestDirectoryPanel
         return List.of();
     }
 
-    protected static class UserRequestProvider extends DirectoryDataProvider<UserRequest> {
+    @Override
+    public void onEvent(final IEvent<?> event) {
+        if (event.getPayload() instanceof UserRequestSearchEvent) {
+            UserRequestSearchEvent payload = UserRequestSearchEvent.class.cast(event.getPayload());
+            keyword = payload.getKeyword();
+
+            updateResultTable(payload.getTarget());
+        } else {
+            super.onEvent(event);
+        }
+    }
+
+    protected final class UserRequestProvider extends DirectoryDataProvider<UserRequest> {
 
         private static final long serialVersionUID = -1392420250782313734L;
 
@@ -134,26 +151,18 @@ public class UserRequestDirectoryPanel
         @Override
         public Iterator<UserRequest> iterator(final long first, final long count) {
             int page = ((int) first / paginatorRows);
-            return UserRequestRestClient.getUserRequests((page < 0 ? 0 : page) + 1,
-                paginatorRows, getSort()).iterator();
+            return UserRequestRestClient.listRequests(
+                    keyword, (page < 0 ? 0 : page) + 1, paginatorRows, getSort()).iterator();
         }
 
         @Override
         public long size() {
-            return UserRequestRestClient.countUserRequests();
+            return UserRequestRestClient.countRequests(keyword);
         }
 
         @Override
         public IModel<UserRequest> model(final UserRequest request) {
-            return new IModel<UserRequest>() {
-
-                private static final long serialVersionUID = -2566070996511906708L;
-
-                @Override
-                public UserRequest getObject() {
-                    return request;
-                }
-            };
+            return Model.of(request);
         }
     }
 }
diff --git a/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/panels/UserRequestFormDirectoryPanel.java b/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/panels/UserRequestFormDirectoryPanel.java
index 5f39f11..f7ec011 100644
--- a/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/panels/UserRequestFormDirectoryPanel.java
+++ b/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/panels/UserRequestFormDirectoryPanel.java
@@ -32,6 +32,7 @@ import org.apache.syncope.client.console.rest.UserRequestRestClient;
 import org.apache.syncope.client.console.panels.UserRequestFormDirectoryPanel.UserRequestFormProvider;
 import org.apache.syncope.client.console.layout.AnyLayoutUtils;
 import org.apache.syncope.client.console.pages.BasePage;
+import org.apache.syncope.client.console.panels.UserRequestsPanel.UserRequestSearchEvent;
 import org.apache.syncope.client.console.rest.AnyTypeRestClient;
 import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.DatePropertyColumn;
 import org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog.BaseModal;
@@ -51,6 +52,7 @@ import org.apache.wicket.PageReference;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.authroles.authorization.strategies.role.metadata.MetaDataRoleAuthorizationStrategy;
 import org.apache.wicket.event.Broadcast;
+import org.apache.wicket.event.IEvent;
 import org.apache.wicket.extensions.markup.html.repeater.data.sort.SortOrder;
 import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn;
 import org.apache.wicket.extensions.markup.html.repeater.data.table.PropertyColumn;
@@ -66,7 +68,7 @@ public class UserRequestFormDirectoryPanel
 
     private static final String PREF_USER_REQUEST_FORM_PAGINATOR_ROWS = "userrequestform.paginator.rows";
 
-    protected final BaseModal<UserRequestForm> manageFormModal = new BaseModal<UserRequestForm>("outer") {
+    private final BaseModal<UserRequestForm> manageFormModal = new BaseModal<UserRequestForm>("outer") {
 
         private static final long serialVersionUID = 389935548143327858L;
 
@@ -76,11 +78,12 @@ public class UserRequestFormDirectoryPanel
             addSubmitButton();
             size(Modal.Size.Large);
         }
-
     };
 
-    public UserRequestFormDirectoryPanel(final String id, final PageReference pageReference) {
-        super(id, pageReference, true);
+    private String keyword;
+
+    public UserRequestFormDirectoryPanel(final String id, final PageReference pageRef) {
+        super(id, pageRef, true);
         disableCheckBoxes();
         setFooterVisibility(false);
         modal.size(Modal.Size.Large);
@@ -159,10 +162,14 @@ public class UserRequestFormDirectoryPanel
 
             @Override
             public void onClick(final AjaxRequestTarget target, final UserRequestForm ignore) {
-                claimForm(model.getObject().getTaskId());
-                SyncopeConsoleSession.get().success(getString(Constants.OPERATION_SUCCEEDED));
+                try {
+                    UserRequestRestClient.claimForm(model.getObject().getTaskId());
+                    SyncopeConsoleSession.get().success(getString(Constants.OPERATION_SUCCEEDED));
+                    target.add(container);
+                } catch (Exception e) {
+                    SyncopeConsoleSession.get().onException(e);
+                }
                 ((BasePage) pageRef.getPage()).getNotificationPanel().refresh(target);
-                target.add(container);
             }
 
         }, ActionLink.ActionType.CLAIM, FlowableEntitlement.USER_REQUEST_FORM_CLAIM);
@@ -173,10 +180,14 @@ public class UserRequestFormDirectoryPanel
 
             @Override
             public void onClick(final AjaxRequestTarget target, final UserRequestForm ignore) {
-                unclaimForm(model.getObject().getTaskId());
-                SyncopeConsoleSession.get().success(getString(Constants.OPERATION_SUCCEEDED));
-                UserRequestFormDirectoryPanel.this.getTogglePanel().close(target);
-                target.add(container);
+                try {
+                    UserRequestRestClient.unclaimForm(model.getObject().getTaskId());
+                    SyncopeConsoleSession.get().success(getString(Constants.OPERATION_SUCCEEDED));
+                    UserRequestFormDirectoryPanel.this.getTogglePanel().close(target);
+                    target.add(container);
+                } catch (Exception e) {
+                    SyncopeConsoleSession.get().onException(e);
+                }
                 ((BasePage) pageRef.getPage()).getNotificationPanel().refresh(target);
             }
 
@@ -287,7 +298,24 @@ public class UserRequestFormDirectoryPanel
         return PREF_USER_REQUEST_FORM_PAGINATOR_ROWS;
     }
 
-    protected static class UserRequestFormProvider extends DirectoryDataProvider<UserRequestForm> {
+    @Override
+    protected Collection<ActionLink.ActionType> getBatches() {
+        return List.of();
+    }
+
+    @Override
+    public void onEvent(final IEvent<?> event) {
+        if (event.getPayload() instanceof UserRequestSearchEvent) {
+            UserRequestSearchEvent payload = UserRequestSearchEvent.class.cast(event.getPayload());
+            keyword = payload.getKeyword();
+
+            updateResultTable(payload.getTarget());
+        } else {
+            super.onEvent(event);
+        }
+    }
+
+    protected final class UserRequestFormProvider extends DirectoryDataProvider<UserRequestForm> {
 
         private static final long serialVersionUID = -2311716167583335852L;
 
@@ -300,46 +328,18 @@ public class UserRequestFormDirectoryPanel
         @Override
         public Iterator<UserRequestForm> iterator(final long first, final long count) {
             int page = ((int) first / paginatorRows);
-            return UserRequestRestClient.getForms((page < 0 ? 0 : page) + 1, paginatorRows, getSort()).iterator();
+            return UserRequestRestClient.listForms(
+                    keyword, (page < 0 ? 0 : page) + 1, paginatorRows, getSort()).iterator();
         }
 
         @Override
         public long size() {
-            return UserRequestRestClient.countForms();
+            return UserRequestRestClient.countForms(keyword);
         }
 
         @Override
         public IModel<UserRequestForm> model(final UserRequestForm form) {
-            return new IModel<UserRequestForm>() {
-
-                private static final long serialVersionUID = -2566070996511906708L;
-
-                @Override
-                public UserRequestForm getObject() {
-                    return form;
-                }
-            };
-        }
-    }
-
-    @Override
-    protected Collection<ActionLink.ActionType> getBatches() {
-        return List.of();
-    }
-
-    private void claimForm(final String taskId) {
-        try {
-            UserRequestRestClient.claimForm(taskId);
-        } catch (SyncopeClientException scee) {
-            SyncopeConsoleSession.get().onException(scee);
-        }
-    }
-
-    private void unclaimForm(final String taskId) {
-        try {
-            UserRequestRestClient.unclaimForm(taskId);
-        } catch (SyncopeClientException scee) {
-            SyncopeConsoleSession.get().onException(scee);
+            return Model.of(form);
         }
     }
 }
diff --git a/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/panels/UserRequestsPanel.java b/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/panels/UserRequestsPanel.java
new file mode 100644
index 0000000..fa9a58b
--- /dev/null
+++ b/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/panels/UserRequestsPanel.java
@@ -0,0 +1,88 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.syncope.client.console.panels;
+
+import java.io.Serializable;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.syncope.client.ui.commons.markup.html.form.AjaxTextFieldPanel;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.markup.html.form.AjaxButton;
+import org.apache.wicket.event.Broadcast;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.form.Form;
+import org.apache.wicket.markup.html.panel.Panel;
+import org.apache.wicket.model.Model;
+
+public class UserRequestsPanel extends Panel {
+
+    private static final long serialVersionUID = -896040867024301443L;
+
+    public UserRequestsPanel(final String id, final DirectoryPanel<?, ?, ?, ?> directoryPanel) {
+        super(id);
+
+        Model<String> keywordModel = new Model<>(StringUtils.EMPTY);
+
+        WebMarkupContainer searchBoxContainer = new WebMarkupContainer("searchBox");
+        add(searchBoxContainer);
+
+        Form<?> form = new Form<>("form");
+        searchBoxContainer.add(form);
+
+        AjaxTextFieldPanel filter = new AjaxTextFieldPanel("filter", "filter", keywordModel, true);
+        form.add(filter.setPlaceholder("username / key").hideLabel().setOutputMarkupId(true));
+
+        AjaxButton search = new AjaxButton("search") {
+
+            private static final long serialVersionUID = 8390605330558248736L;
+
+            @Override
+            protected void onSubmit(final AjaxRequestTarget target) {
+                send(UserRequestsPanel.this, Broadcast.DEPTH,
+                        new UserRequestSearchEvent(target, keywordModel.getObject()));
+            }
+        };
+        search.setOutputMarkupId(true);
+        form.add(search);
+        form.setDefaultButton(search);
+
+        add(directoryPanel);
+    }
+
+    public static class UserRequestSearchEvent implements Serializable {
+
+        private static final long serialVersionUID = 5063826346823013424L;
+
+        private final transient AjaxRequestTarget target;
+
+        private final String keyword;
+
+        UserRequestSearchEvent(final AjaxRequestTarget target, final String keyword) {
+            this.target = target;
+            this.keyword = keyword;
+        }
+
+        public AjaxRequestTarget getTarget() {
+            return target;
+        }
+
+        public String getKeyword() {
+            return keyword;
+        }
+    }
+}
diff --git a/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/rest/UserRequestRestClient.java b/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/rest/UserRequestRestClient.java
index 03cf6c9..a9e6b43 100644
--- a/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/rest/UserRequestRestClient.java
+++ b/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/rest/UserRequestRestClient.java
@@ -20,10 +20,10 @@ package org.apache.syncope.client.console.rest;
 
 import java.util.List;
 import java.util.Optional;
+import org.apache.syncope.common.lib.SyncopeClientException;
 import org.apache.syncope.common.lib.to.PagedResult;
 import org.apache.syncope.common.lib.to.UserRequest;
 import org.apache.syncope.common.lib.to.UserRequestForm;
-import org.apache.syncope.common.rest.api.beans.UserRequestFormQuery;
 import org.apache.syncope.common.rest.api.beans.UserRequestQuery;
 import org.apache.wicket.extensions.markup.html.repeater.util.SortParam;
 import org.apache.syncope.common.rest.api.service.UserRequestService;
@@ -32,37 +32,59 @@ public class UserRequestRestClient extends BaseRestClient {
 
     private static final long serialVersionUID = -4785231164900813921L;
 
-    public static int countUserRequests() {
-        return getService(UserRequestService.class).
-                list(new UserRequestQuery.Builder().page(1).size(0).build()).
-                getTotalCount();
+    public static int countRequests(final String keyword) {
+        try {
+            return getService(UserRequestService.class).
+                    listRequests(new UserRequestQuery.Builder().user(keyword).page(1).size(0).build()).
+                    getTotalCount();
+        } catch (Exception e) {
+            return 0;
+        }
     }
 
-    public static List<UserRequest> getUserRequests(final int page, final int size, final SortParam<String> sort) {
-        return getService(UserRequestService.class).
-                list(new UserRequestQuery.Builder().page(page).size(size).orderBy(toOrderBy(sort)).build()).
-                getResult();
+    public static List<UserRequest> listRequests(
+            final String keyword, final int page, final int size, final SortParam<String> sort) {
+
+        try {
+            return getService(UserRequestService.class).listRequests(
+                    new UserRequestQuery.Builder().user(keyword).page(page).size(size).
+                            orderBy(toOrderBy(sort)).build()).
+                    getResult();
+        } catch (SyncopeClientException e) {
+            return List.of();
+        }
     }
 
     public static void cancelRequest(final String executionId, final String reason) {
-        getService(UserRequestService.class).cancel(executionId, reason);
+        getService(UserRequestService.class).cancelRequest(executionId, reason);
     }
 
-    public static int countForms() {
-        return getService(UserRequestService.class).
-                getForms(new UserRequestFormQuery.Builder().page(1).size(0).build()).
-                getTotalCount();
+    public static int countForms(final String keyword) {
+        try {
+            return getService(UserRequestService.class).
+                    listForms(new UserRequestQuery.Builder().user(keyword).page(1).size(0).build()).
+                    getTotalCount();
+        } catch (SyncopeClientException e) {
+            return 0;
+        }
     }
 
-    public static List<UserRequestForm> getForms(final int page, final int size, final SortParam<String> sort) {
-        return getService(UserRequestService.class).
-                getForms(new UserRequestFormQuery.Builder().page(page).size(size).orderBy(toOrderBy(sort)).build()).
-                getResult();
+    public static List<UserRequestForm> listForms(
+            final String keyword, final int page, final int size, final SortParam<String> sort) {
+
+        try {
+            return getService(UserRequestService.class).listForms(
+                    new UserRequestQuery.Builder().user(keyword).page(page).size(size).
+                            orderBy(toOrderBy(sort)).build()).
+                    getResult();
+        } catch (SyncopeClientException e) {
+            return List.of();
+        }
     }
 
     public static Optional<UserRequestForm> getForm(final String userKey) {
         PagedResult<UserRequestForm> forms = getService(UserRequestService.class).
-                getForms(new UserRequestFormQuery.Builder().user(userKey).page(1).size(1).build());
+                listForms(new UserRequestQuery.Builder().user(userKey).page(1).size(1).build());
         UserRequestForm form = forms.getResult().isEmpty()
                 ? null
                 : forms.getResult().get(0);
diff --git a/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/widgets/UserRequestFormsWidget.java b/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/widgets/UserRequestFormsWidget.java
index 530d74f..1bf5e18 100644
--- a/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/widgets/UserRequestFormsWidget.java
+++ b/ext/flowable/client-console/src/main/java/org/apache/syncope/client/console/widgets/UserRequestFormsWidget.java
@@ -87,7 +87,7 @@ public class UserRequestFormsWidget extends ExtAlertWidget<UserRequestForm> {
     @Override
     protected int getLatestAlertsSize() {
         return SyncopeConsoleSession.get().owns(FlowableEntitlement.USER_REQUEST_FORM_LIST)
-                ? UserRequestRestClient.countForms()
+                ? UserRequestRestClient.countForms(null)
                 : 0;
     }
 
@@ -101,9 +101,10 @@ public class UserRequestFormsWidget extends ExtAlertWidget<UserRequestForm> {
             public List<UserRequestForm> getObject() {
                 List<UserRequestForm> updatedForms;
                 if (SyncopeConsoleSession.get().owns(FlowableEntitlement.USER_REQUEST_FORM_LIST)) {
-                    updatedForms = UserRequestRestClient.getForms(1, MAX_SIZE, new SortParam<>("createTime", true));
+                    updatedForms = UserRequestRestClient.listForms(
+                            null, 1, MAX_SIZE, new SortParam<>("createTime", true));
                 } else {
-                    updatedForms = Collections.<UserRequestForm>emptyList();
+                    updatedForms = Collections.emptyList();
                 }
 
                 return updatedForms;
diff --git a/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/panels/UserRequestsPanel.html b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/panels/UserRequestsPanel.html
new file mode 100644
index 0000000..ec0a3f4
--- /dev/null
+++ b/ext/flowable/client-console/src/main/resources/org/apache/syncope/client/console/panels/UserRequestsPanel.html
@@ -0,0 +1,36 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org">
+  <wicket:panel>
+    <div wicket:id="searchBox">
+      <form wicket:id="form">
+        <div class="input-group margin-bottom">
+          <span wicket:id="filter">[FILTER]</span>
+          <span class="input-group-btn">
+            <button type="button" class="btn btn-default btn-flat" wicket:id="search">
+              <span class="glyphicon glyphicon-search" aria-hidden="true"></span>
+            </button>
+          </span>
+        </div>
+      </form>
+    </div>
+
+    <span wicket:id="inner"/>
+  </wicket:panel>
+</html>
diff --git a/ext/flowable/client-enduser/src/main/java/org/apache/syncope/client/enduser/pages/Flowable.java b/ext/flowable/client-enduser/src/main/java/org/apache/syncope/client/enduser/pages/Flowable.java
index 3e801dc..9e30828 100644
--- a/ext/flowable/client-enduser/src/main/java/org/apache/syncope/client/enduser/pages/Flowable.java
+++ b/ext/flowable/client-enduser/src/main/java/org/apache/syncope/client/enduser/pages/Flowable.java
@@ -240,7 +240,7 @@ public class Flowable extends BaseExtPage {
         @Override
         public Iterator<UserRequest> iterator(final long first, final long count) {
             final int page = ((int) first / paginatorRows);
-            return UserRequestRestClient.getUserRequests((page < 0 ? 0 : page) + 1,
+            return UserRequestRestClient.listRequests((page < 0 ? 0 : page) + 1,
                     paginatorRows,
                     SyncopeEnduserSession.get().getSelfTO().getUsername(),
                     new SortParam<>(sortParam, true)).iterator();
@@ -248,7 +248,7 @@ public class Flowable extends BaseExtPage {
 
         @Override
         public long size() {
-            return UserRequestRestClient.countUserRequests();
+            return UserRequestRestClient.countRequests();
         }
 
         @Override
diff --git a/ext/flowable/client-enduser/src/main/java/org/apache/syncope/client/enduser/rest/UserRequestRestClient.java b/ext/flowable/client-enduser/src/main/java/org/apache/syncope/client/enduser/rest/UserRequestRestClient.java
index 02ac11f..f3d0faa 100644
--- a/ext/flowable/client-enduser/src/main/java/org/apache/syncope/client/enduser/rest/UserRequestRestClient.java
+++ b/ext/flowable/client-enduser/src/main/java/org/apache/syncope/client/enduser/rest/UserRequestRestClient.java
@@ -24,7 +24,6 @@ import org.apache.commons.lang3.StringUtils;
 import org.apache.syncope.client.enduser.SyncopeEnduserSession;
 import org.apache.syncope.common.lib.to.UserRequest;
 import org.apache.syncope.common.lib.to.UserRequestForm;
-import org.apache.syncope.common.rest.api.beans.UserRequestFormQuery;
 import org.apache.syncope.common.rest.api.beans.UserRequestQuery;
 import org.apache.wicket.extensions.markup.html.repeater.util.SortParam;
 import org.apache.syncope.common.rest.api.service.UserRequestService;
@@ -33,21 +32,22 @@ public class UserRequestRestClient extends BaseRestClient {
 
     private static final long serialVersionUID = -4785231164900813921L;
 
-    public static int countUserRequests() {
+    public static int countRequests() {
         return getService(UserRequestService.class).
-                list(new UserRequestQuery.Builder()
+                listRequests(new UserRequestQuery.Builder()
                         .user(SyncopeEnduserSession.get().getSelfTO().getUsername())
                         .page(1)
                         .size(0)
                         .build()).getTotalCount();
     }
 
-    public static List<UserRequest> getUserRequests(
-        final int page,
-        final int size,
-        final String username,
-        final SortParam<String> sort) {
-        return getService(UserRequestService.class).list(new UserRequestQuery.Builder().
+    public static List<UserRequest> listRequests(
+            final int page,
+            final int size,
+            final String username,
+            final SortParam<String> sort) {
+
+        return getService(UserRequestService.class).listRequests(new UserRequestQuery.Builder().
                 user(StringUtils.isBlank(username)
                         ? SyncopeEnduserSession.get().getSelfTO().getUsername()
                         : username).
@@ -55,18 +55,18 @@ public class UserRequestRestClient extends BaseRestClient {
     }
 
     public static void cancelRequest(final String executionId, final String reason) {
-        getService(UserRequestService.class).cancel(executionId, reason);
+        getService(UserRequestService.class).cancelRequest(executionId, reason);
     }
 
     public static int countForms() {
         return getService(UserRequestService.class).
-                getForms(new UserRequestFormQuery.Builder().page(1).size(0).build()).
+                listForms(new UserRequestQuery.Builder().page(1).size(0).build()).
                 getTotalCount();
     }
 
     public static List<UserRequestForm> getForms(final int page, final int size, final SortParam<String> sort) {
         return getService(UserRequestService.class).
-                getForms(new UserRequestFormQuery.Builder().page(page).size(size).orderBy(toOrderBy(sort)).build()).
+                listForms(new UserRequestQuery.Builder().page(page).size(size).orderBy(toOrderBy(sort)).build()).
                 getResult();
     }
 
@@ -82,7 +82,7 @@ public class UserRequestRestClient extends BaseRestClient {
     }
 
     public static void start(final String bpmnProcess, final String user) {
-        getService(UserRequestService.class).start(bpmnProcess, user, null);
+        getService(UserRequestService.class).startRequest(bpmnProcess, user, null);
     }
 
     public static UserRequestForm claimForm(final String taskKey) {
diff --git a/ext/flowable/logic/src/main/java/org/apache/syncope/core/logic/UserRequestLogic.java b/ext/flowable/logic/src/main/java/org/apache/syncope/core/logic/UserRequestLogic.java
index 0bd38b5..0ed2be1 100644
--- a/ext/flowable/logic/src/main/java/org/apache/syncope/core/logic/UserRequestLogic.java
+++ b/ext/flowable/logic/src/main/java/org/apache/syncope/core/logic/UserRequestLogic.java
@@ -73,7 +73,7 @@ public class UserRequestLogic extends AbstractTransactionalLogic<EntityTO> {
 
     @PreAuthorize("isAuthenticated()")
     @Transactional(readOnly = true)
-    public Pair<Integer, List<UserRequest>> list(
+    public Pair<Integer, List<UserRequest>> listRequests(
             final String userKey,
             final int page,
             final int size,
@@ -109,12 +109,12 @@ public class UserRequestLogic extends AbstractTransactionalLogic<EntityTO> {
     }
 
     @PreAuthorize("isAuthenticated()")
-    public UserRequest start(final String bpmnProcess, final WorkflowTaskExecInput inputVariables) {
+    public UserRequest startRequest(final String bpmnProcess, final WorkflowTaskExecInput inputVariables) {
         return doStart(bpmnProcess, userDAO.findByUsername(AuthContextUtils.getUsername()), inputVariables);
     }
 
     @PreAuthorize("hasRole('" + FlowableEntitlement.USER_REQUEST_START + "')")
-    public UserRequest start(
+    public UserRequest startRequest(
             final String bpmnProcess,
             final String userKey,
             final WorkflowTaskExecInput inputVariables) {
@@ -133,7 +133,7 @@ public class UserRequestLogic extends AbstractTransactionalLogic<EntityTO> {
     }
 
     @PreAuthorize("isAuthenticated()")
-    public void cancel(final String executionId, final String reason) {
+    public void cancelRequest(final String executionId, final String reason) {
         Pair<ProcessInstance, String> parsed = userRequestHandler.parse(executionId);
 
         securityChecks(userDAO.find(parsed.getRight()).getUsername(),
@@ -187,11 +187,12 @@ public class UserRequestLogic extends AbstractTransactionalLogic<EntityTO> {
 
     @PreAuthorize("isAuthenticated()")
     @Transactional(readOnly = true)
-    public Pair<Integer, List<UserRequestForm>> getForms(
+    public Pair<Integer, List<UserRequestForm>> listForms(
             final String userKey,
             final int page,
             final int size,
             final List<OrderByClause> orderByClauses) {
+
         evaluateKey(userKey);
 
         return userRequestHandler.getForms(userKey, page, size, orderByClauses);
diff --git a/ext/flowable/rest-api/src/main/java/org/apache/syncope/common/rest/api/beans/UserRequestFormQuery.java b/ext/flowable/rest-api/src/main/java/org/apache/syncope/common/rest/api/beans/UserRequestFormQuery.java
deleted file mode 100644
index f5a507b..0000000
--- a/ext/flowable/rest-api/src/main/java/org/apache/syncope/common/rest/api/beans/UserRequestFormQuery.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.syncope.common.rest.api.beans;
-
-import io.swagger.v3.oas.annotations.Parameter;
-import io.swagger.v3.oas.annotations.media.Schema;
-import javax.ws.rs.QueryParam;
-import org.apache.syncope.common.rest.api.service.JAXRSService;
-
-public class UserRequestFormQuery extends AbstractQuery {
-
-    private static final long serialVersionUID = -4762457303770028554L;
-
-    public static class Builder extends AbstractQuery.Builder<UserRequestFormQuery, Builder> {
-
-        @Override
-        protected UserRequestFormQuery newInstance() {
-            return new UserRequestFormQuery();
-        }
-
-        public Builder user(final String user) {
-            getInstance().setUser(user);
-            return this;
-        }
-    }
-
-    private String user;
-
-    @Parameter(name = JAXRSService.PARAM_USER, description = "user to match either by key or username", schema =
-            @Schema(implementation = String.class, example = "50592942-73ec-44c4-a377-e859524245e4"))
-    public String getUser() {
-        return user;
-    }
-
-    @QueryParam(JAXRSService.PARAM_USER)
-    public void setUser(final String user) {
-        this.user = user;
-    }
-}
diff --git a/ext/flowable/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/UserRequestService.java b/ext/flowable/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/UserRequestService.java
index d9bcd53..812e55c 100644
--- a/ext/flowable/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/UserRequestService.java
+++ b/ext/flowable/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/UserRequestService.java
@@ -40,7 +40,6 @@ import org.apache.syncope.common.lib.to.UserTO;
 import org.apache.syncope.common.lib.to.UserRequestForm;
 import org.apache.syncope.common.lib.to.WorkflowTaskExecInput;
 import org.apache.syncope.common.rest.api.RESTHeaders;
-import org.apache.syncope.common.rest.api.beans.UserRequestFormQuery;
 import org.apache.syncope.common.rest.api.beans.UserRequestQuery;
 
 /**
@@ -61,7 +60,7 @@ public interface UserRequestService extends JAXRSService {
      */
     @GET
     @Produces({ MediaType.APPLICATION_JSON, RESTHeaders.APPLICATION_YAML, MediaType.APPLICATION_XML })
-    PagedResult<UserRequest> list(@BeanParam UserRequestQuery query);
+    PagedResult<UserRequest> listRequests(@BeanParam UserRequestQuery query);
 
     /**
      * Starts a new request for the given BPMN Process and user (if provided) or requesting user (if not provided).
@@ -74,7 +73,7 @@ public interface UserRequestService extends JAXRSService {
     @POST
     @Path("start/{bpmnProcess}")
     @Produces({ MediaType.APPLICATION_JSON, RESTHeaders.APPLICATION_YAML, MediaType.APPLICATION_XML })
-    UserRequest start(
+    UserRequest startRequest(
             @NotNull @PathParam("bpmnProcess") String bpmnProcess,
             @QueryParam(JAXRSService.PARAM_USER) String user,
             WorkflowTaskExecInput inputVariables);
@@ -90,7 +89,7 @@ public interface UserRequestService extends JAXRSService {
     @DELETE
     @Path("{executionId}")
     @Produces({ MediaType.APPLICATION_JSON, RESTHeaders.APPLICATION_YAML, MediaType.APPLICATION_XML })
-    void cancel(
+    void cancelRequest(
             @NotNull @PathParam("executionId") String executionId,
             @QueryParam("reason") String reason);
 
@@ -117,7 +116,7 @@ public interface UserRequestService extends JAXRSService {
     @GET
     @Path("forms")
     @Produces({ MediaType.APPLICATION_JSON, RESTHeaders.APPLICATION_YAML, MediaType.APPLICATION_XML })
-    PagedResult<UserRequestForm> getForms(@BeanParam UserRequestFormQuery query);
+    PagedResult<UserRequestForm> listForms(@BeanParam UserRequestQuery query);
 
     /**
      * Requests to manage the form for the given task id.
diff --git a/ext/flowable/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/UserRequestServiceImpl.java b/ext/flowable/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/UserRequestServiceImpl.java
index 4f939c4..23ff8c5 100644
--- a/ext/flowable/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/UserRequestServiceImpl.java
+++ b/ext/flowable/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/UserRequestServiceImpl.java
@@ -19,13 +19,13 @@
 package org.apache.syncope.core.rest.cxf.service;
 
 import java.util.List;
+import java.util.Optional;
 import org.apache.commons.lang3.tuple.Pair;
 import org.apache.syncope.common.lib.to.PagedResult;
 import org.apache.syncope.common.lib.to.UserRequest;
 import org.apache.syncope.common.lib.to.UserTO;
 import org.apache.syncope.common.lib.to.UserRequestForm;
 import org.apache.syncope.common.lib.to.WorkflowTaskExecInput;
-import org.apache.syncope.common.rest.api.beans.UserRequestFormQuery;
 import org.apache.syncope.common.rest.api.beans.UserRequestQuery;
 import org.apache.syncope.core.logic.UserRequestLogic;
 import org.apache.syncope.common.rest.api.service.UserRequestService;
@@ -43,26 +43,28 @@ public class UserRequestServiceImpl extends AbstractServiceImpl implements UserR
     private UserDAO userDAO;
 
     @Override
-    public PagedResult<UserRequest> list(final UserRequestQuery query) {
+    public PagedResult<UserRequest> listRequests(final UserRequestQuery query) {
         if (query.getUser() != null) {
-            query.setUser(getActualKey(userDAO, query.getUser()));
+            query.setUser(Optional.ofNullable(getActualKey(userDAO, query.getUser())).orElse(query.getUser()));
         }
 
-        Pair<Integer, List<UserRequest>> result = logic.list(
+        Pair<Integer, List<UserRequest>> result = logic.listRequests(
                 query.getUser(), query.getPage(), query.getSize(), getOrderByClauses(query.getOrderBy()));
         return buildPagedResult(result.getRight(), query.getPage(), query.getSize(), result.getLeft());
     }
 
     @Override
-    public UserRequest start(final String bpmnProcess, final String user, final WorkflowTaskExecInput inputVariables) {
+    public UserRequest startRequest(
+            final String bpmnProcess, final String user, final WorkflowTaskExecInput inputVariables) {
+
         return user == null
-                ? logic.start(bpmnProcess, inputVariables)
-                : logic.start(bpmnProcess, getActualKey(userDAO, user), inputVariables);
+                ? logic.startRequest(bpmnProcess, inputVariables)
+                : logic.startRequest(bpmnProcess, getActualKey(userDAO, user), inputVariables);
     }
 
     @Override
-    public void cancel(final String executionId, final String reason) {
-        logic.cancel(executionId, reason);
+    public void cancelRequest(final String executionId, final String reason) {
+        logic.cancelRequest(executionId, reason);
     }
 
     @Override
@@ -81,12 +83,12 @@ public class UserRequestServiceImpl extends AbstractServiceImpl implements UserR
     }
 
     @Override
-    public PagedResult<UserRequestForm> getForms(final UserRequestFormQuery query) {
+    public PagedResult<UserRequestForm> listForms(final UserRequestQuery query) {
         if (query.getUser() != null) {
-            query.setUser(getActualKey(userDAO, query.getUser()));
+            query.setUser(Optional.ofNullable(getActualKey(userDAO, query.getUser())).orElse(query.getUser()));
         }
 
-        Pair<Integer, List<UserRequestForm>> result = logic.getForms(
+        Pair<Integer, List<UserRequestForm>> result = logic.listForms(
                 query.getUser(), query.getPage(), query.getSize(), getOrderByClauses(query.getOrderBy()));
         return buildPagedResult(result.getRight(), query.getPage(), query.getSize(), result.getLeft());
     }
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/AuthenticationITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/AuthenticationITCase.java
index fcd51c1..25393f6 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/AuthenticationITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/AuthenticationITCase.java
@@ -67,7 +67,7 @@ import org.apache.syncope.common.lib.types.IdRepoEntitlement;
 import org.apache.syncope.common.lib.types.StatusRType;
 import org.apache.syncope.common.rest.api.RESTHeaders;
 import org.apache.syncope.common.rest.api.beans.AnyQuery;
-import org.apache.syncope.common.rest.api.beans.UserRequestFormQuery;
+import org.apache.syncope.common.rest.api.beans.UserRequestQuery;
 import org.apache.syncope.common.rest.api.service.AnyObjectService;
 import org.apache.syncope.common.rest.api.service.SchemaService;
 import org.apache.syncope.common.rest.api.service.UserService;
@@ -490,8 +490,8 @@ public class AuthenticationITCase extends AbstractITCase {
         }
 
         // 3. approve user
-        UserRequestForm form = userRequestService.getForms(
-                new UserRequestFormQuery.Builder().user(userTO.getKey()).build()).getResult().get(0);
+        UserRequestForm form = userRequestService.listForms(
+                new UserRequestQuery.Builder().user(userTO.getKey()).build()).getResult().get(0);
         form = userRequestService.claimForm(form.getTaskId());
         form.getProperty("approveCreate").get().setValue(Boolean.TRUE.toString());
         userTO = userRequestService.submitForm(form);
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/UserRequestITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/UserRequestITCase.java
index ae9db45..c703e67 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/UserRequestITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/UserRequestITCase.java
@@ -41,7 +41,6 @@ import org.apache.syncope.common.lib.to.UserRequest;
 import org.apache.syncope.common.lib.to.UserTO;
 import org.apache.syncope.common.lib.to.WorkflowTaskExecInput;
 import org.apache.syncope.common.lib.types.ClientExceptionType;
-import org.apache.syncope.common.rest.api.beans.UserRequestFormQuery;
 import org.apache.syncope.common.rest.api.beans.UserRequestQuery;
 import org.apache.syncope.common.rest.api.service.UserRequestService;
 import org.apache.syncope.fit.AbstractITCase;
@@ -79,7 +78,7 @@ public class UserRequestITCase extends AbstractITCase {
         assertFalse(user.getMembership("ebf97068-aa4b-4a85-9f01-680e8c4cf227").isPresent());
 
         // start request
-        UserRequest req = userRequestService.start("directorGroupRequest", user.getKey(), null);
+        UserRequest req = userRequestService.startRequest("directorGroupRequest", user.getKey(), null);
         assertNotNull(req);
         assertEquals("directorGroupRequest", req.getBpmnProcess());
         assertNotNull(req.getExecutionId());
@@ -88,59 +87,59 @@ public class UserRequestITCase extends AbstractITCase {
         // check that user can see the ongoing request
         SyncopeClient client = clientFactory.create(user.getUsername(), "password123");
         PagedResult<UserRequest> requests = client.getService(UserRequestService.class).
-                list(new UserRequestQuery.Builder().user(user.getKey()).build());
+                listRequests(new UserRequestQuery.Builder().user(user.getKey()).build());
         assertEquals(1, requests.getTotalCount());
         assertEquals("directorGroupRequest", requests.getResult().get(0).getBpmnProcess());
 
         // 1st approval -> reject
-        UserRequestForm form = userRequestService.getForms(
-                new UserRequestFormQuery.Builder().user(user.getKey()).build()).getResult().get(0);
+        UserRequestForm form = userRequestService.listForms(
+                new UserRequestQuery.Builder().user(user.getKey()).build()).getResult().get(0);
         form = userRequestService.claimForm(form.getTaskId());
         form.getProperty("firstLevelApprove").get().setValue(Boolean.FALSE.toString());
         userRequestService.submitForm(form);
 
         // no more forms, group not assigned
-        assertTrue(userRequestService.getForms(
-                new UserRequestFormQuery.Builder().user(user.getKey()).build()).getResult().isEmpty());
+        assertTrue(userRequestService.listForms(
+                new UserRequestQuery.Builder().user(user.getKey()).build()).getResult().isEmpty());
         assertFalse(userService.read(user.getKey()).getMembership("ebf97068-aa4b-4a85-9f01-680e8c4cf227").isPresent());
 
         // start request again
-        req = userRequestService.start("directorGroupRequest", user.getKey(), null);
+        req = userRequestService.startRequest("directorGroupRequest", user.getKey(), null);
         assertNotNull(req);
 
         // 1st approval -> accept
-        form = userRequestService.getForms(
-                new UserRequestFormQuery.Builder().user(user.getKey()).build()).getResult().get(0);
+        form = userRequestService.listForms(
+                new UserRequestQuery.Builder().user(user.getKey()).build()).getResult().get(0);
         form = userRequestService.claimForm(form.getTaskId());
         form.getProperty("firstLevelApprove").get().setValue(Boolean.TRUE.toString());
         userRequestService.submitForm(form);
 
         // 2nd approval -> reject
-        form = userRequestService.getForms(
-                new UserRequestFormQuery.Builder().user(user.getKey()).build()).getResult().get(0);
+        form = userRequestService.listForms(
+                new UserRequestQuery.Builder().user(user.getKey()).build()).getResult().get(0);
         form = userRequestService.claimForm(form.getTaskId());
         form.getProperty("secondLevelApprove").get().setValue(Boolean.FALSE.toString());
         user = userRequestService.submitForm(form);
 
         // no more forms, group not assigned
-        assertTrue(userRequestService.getForms(
-                new UserRequestFormQuery.Builder().user(user.getKey()).build()).getResult().isEmpty());
+        assertTrue(userRequestService.listForms(
+                new UserRequestQuery.Builder().user(user.getKey()).build()).getResult().isEmpty());
         assertFalse(userService.read(user.getKey()).getMembership("ebf97068-aa4b-4a85-9f01-680e8c4cf227").isPresent());
 
         // start request again
-        req = userRequestService.start("directorGroupRequest", user.getKey(), null);
+        req = userRequestService.startRequest("directorGroupRequest", user.getKey(), null);
         assertNotNull(req);
 
         // 1st approval -> accept
-        form = userRequestService.getForms(
-                new UserRequestFormQuery.Builder().user(user.getKey()).build()).getResult().get(0);
+        form = userRequestService.listForms(
+                new UserRequestQuery.Builder().user(user.getKey()).build()).getResult().get(0);
         form = userRequestService.claimForm(form.getTaskId());
         form.getProperty("firstLevelApprove").get().setValue(Boolean.TRUE.toString());
         userRequestService.submitForm(form);
 
         // 2nd approval -> accept
-        form = userRequestService.getForms(
-                new UserRequestFormQuery.Builder().user(user.getKey()).build()).getResult().get(0);
+        form = userRequestService.listForms(
+                new UserRequestQuery.Builder().user(user.getKey()).build()).getResult().get(0);
         form = userRequestService.claimForm(form.getTaskId());
         form.getProperty("secondLevelApprove").get().setValue(Boolean.TRUE.toString());
         user = userRequestService.submitForm(form);
@@ -153,7 +152,7 @@ public class UserRequestITCase extends AbstractITCase {
     @Test
     public void cancel() {
         PagedResult<UserRequestForm> forms =
-                userRequestService.getForms(new UserRequestFormQuery.Builder().build());
+                userRequestService.listForms(new UserRequestQuery.Builder().build());
         int preForms = forms.getTotalCount();
 
         UserTO user = createUser(UserITCase.getUniqueSample("twoLevelsApproval@tirasa.net")).getEntity();
@@ -161,31 +160,31 @@ public class UserRequestITCase extends AbstractITCase {
         assertFalse(user.getMembership("ebf97068-aa4b-4a85-9f01-680e8c4cf227").isPresent());
 
         // start request
-        UserRequest req = userRequestService.start("directorGroupRequest", user.getKey(), null);
+        UserRequest req = userRequestService.startRequest("directorGroupRequest", user.getKey(), null);
         assertNotNull(req);
 
         // check that form was generated
-        forms = userRequestService.getForms(new UserRequestFormQuery.Builder().build());
+        forms = userRequestService.listForms(new UserRequestQuery.Builder().build());
         assertEquals(preForms + 1, forms.getTotalCount());
 
-        assertEquals(1, userRequestService.getForms(
-                new UserRequestFormQuery.Builder().user(user.getKey()).build()).getResult().size());
+        assertEquals(1, userRequestService.listForms(
+                new UserRequestQuery.Builder().user(user.getKey()).build()).getResult().size());
 
         // cancel request
-        userRequestService.cancel(req.getExecutionId(), "nothing in particular");
+        userRequestService.cancelRequest(req.getExecutionId(), "nothing in particular");
 
         // check that form was removed
-        forms = userRequestService.getForms(new UserRequestFormQuery.Builder().build());
+        forms = userRequestService.listForms(new UserRequestQuery.Builder().build());
         assertEquals(preForms, forms.getTotalCount());
 
-        assertTrue(userRequestService.getForms(
-                new UserRequestFormQuery.Builder().user(user.getKey()).build()).getResult().isEmpty());
+        assertTrue(userRequestService.listForms(
+                new UserRequestQuery.Builder().user(user.getKey()).build()).getResult().isEmpty());
     }
 
     @Test
     public void userSelection() {
         PagedResult<UserRequestForm> forms =
-                userRequestService.getForms(new UserRequestFormQuery.Builder().build());
+                userRequestService.listForms(new UserRequestQuery.Builder().build());
         int preForms = forms.getTotalCount();
 
         UserTO user = createUser(UserITCase.getUniqueSample("userSelection@tirasa.net")).getEntity();
@@ -196,16 +195,16 @@ public class UserRequestITCase extends AbstractITCase {
         SyncopeClient client = clientFactory.create(user.getUsername(), "password123");
 
         // start request as user
-        UserRequest req = client.getService(UserRequestService.class).start("assignPrinterRequest", null, null);
+        UserRequest req = client.getService(UserRequestService.class).startRequest("assignPrinterRequest", null, null);
         assertNotNull(req);
 
         // check (as admin) that a new form is available
-        forms = userRequestService.getForms(new UserRequestFormQuery.Builder().build());
+        forms = userRequestService.listForms(new UserRequestQuery.Builder().build());
         assertEquals(preForms + 1, forms.getTotalCount());
 
         // get (as user) the form, claim and submit
         PagedResult<UserRequestForm> userForms = client.getService(UserRequestService.class).
-                getForms(new UserRequestFormQuery.Builder().user(user.getKey()).build());
+                listForms(new UserRequestQuery.Builder().user(user.getKey()).build());
         assertEquals(1, userForms.getTotalCount());
 
         UserRequestForm form = userForms.getResult().get(0);
@@ -220,19 +219,19 @@ public class UserRequestITCase extends AbstractITCase {
 
         client.getService(UserRequestService.class).submitForm(form);
 
-        userForms = client.getService(UserRequestService.class).getForms(
-                new UserRequestFormQuery.Builder().user(user.getKey()).build());
+        userForms = client.getService(UserRequestService.class).listForms(
+                new UserRequestQuery.Builder().user(user.getKey()).build());
         assertEquals(0, userForms.getTotalCount());
 
         // check that user can see the ongoing request
         PagedResult<UserRequest> requests = client.getService(UserRequestService.class).
-                list(new UserRequestQuery.Builder().user(user.getKey()).build());
+                listRequests(new UserRequestQuery.Builder().user(user.getKey()).build());
         assertEquals(1, requests.getTotalCount());
         assertEquals("assignPrinterRequest", requests.getResult().get(0).getBpmnProcess());
 
         // get (as admin) the new form, claim and submit
-        form = userRequestService.getForms(
-                new UserRequestFormQuery.Builder().user(user.getKey()).build()).getResult().get(0);
+        form = userRequestService.listForms(
+                new UserRequestQuery.Builder().user(user.getKey()).build()).getResult().get(0);
         assertEquals("assignPrinterRequest", form.getBpmnProcess());
         form = userRequestService.claimForm(form.getTaskId());
 
@@ -242,11 +241,11 @@ public class UserRequestITCase extends AbstractITCase {
         userRequestService.submitForm(form);
 
         // no more forms available
-        forms = userRequestService.getForms(new UserRequestFormQuery.Builder().build());
+        forms = userRequestService.listForms(new UserRequestQuery.Builder().build());
         assertEquals(preForms, forms.getTotalCount());
 
         assertTrue(client.getService(UserRequestService.class).
-                list(new UserRequestQuery.Builder().user(user.getKey()).build()).getResult().isEmpty());
+                listRequests(new UserRequestQuery.Builder().user(user.getKey()).build()).getResult().isEmpty());
 
         // check that relationship was made effective by approval
         relationships = userService.read(user.getKey()).getRelationships();
@@ -258,7 +257,7 @@ public class UserRequestITCase extends AbstractITCase {
     @Test
     public void addVariablesToUserRequestAtStart() {
         PagedResult<UserRequestForm> forms =
-                userRequestService.getForms(new UserRequestFormQuery.Builder().build());
+                userRequestService.listForms(new UserRequestQuery.Builder().build());
         int preForms = forms.getTotalCount();
 
         UserTO user = createUser(UserITCase.getUniqueSample("addVariables@tirasa.net")).getEntity();
@@ -270,16 +269,17 @@ public class UserRequestITCase extends AbstractITCase {
         testInput.getVariables().put("providedVariable", "test");
 
         // start request as user
-        UserRequest req = client.getService(UserRequestService.class).start("verifyAddedVariables", null, testInput);
+        UserRequest req = client.getService(UserRequestService.class).
+                startRequest("verifyAddedVariables", null, testInput);
         assertNotNull(req);
 
         // check that a new form is available
-        forms = userRequestService.getForms(new UserRequestFormQuery.Builder().build());
+        forms = userRequestService.listForms(new UserRequestQuery.Builder().build());
         assertEquals(preForms + 1, forms.getTotalCount());
 
         // get the form and verify the property value
-        PagedResult<UserRequestForm> userForms = userRequestService.
-                getForms(new UserRequestFormQuery.Builder().user(user.getKey()).build());
+        PagedResult<UserRequestForm> userForms = userRequestService.listForms(
+                new UserRequestQuery.Builder().user(user.getKey()).build());
         assertEquals(1, userForms.getTotalCount());
 
         UserRequestForm form = userForms.getResult().get(0);
@@ -287,14 +287,14 @@ public class UserRequestITCase extends AbstractITCase {
         assertEquals(form.getProperty("providedVariable").get().getValue(), "test");
 
         // cancel request
-        userRequestService.cancel(req.getExecutionId(), "nothing in particular");
+        userRequestService.cancelRequest(req.getExecutionId(), "nothing in particular");
 
         // no more forms available
-        forms = userRequestService.getForms(new UserRequestFormQuery.Builder().build());
+        forms = userRequestService.listForms(new UserRequestQuery.Builder().build());
         assertEquals(preForms, forms.getTotalCount());
 
         assertTrue(client.getService(UserRequestService.class).
-                list(new UserRequestQuery.Builder().user(user.getKey()).build()).getResult().isEmpty());
+                listRequests(new UserRequestQuery.Builder().user(user.getKey()).build()).getResult().isEmpty());
     }
 
     @Test
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/UserSelfITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/UserSelfITCase.java
index 88dae68..781539d 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/UserSelfITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/UserSelfITCase.java
@@ -56,7 +56,7 @@ import org.apache.syncope.common.lib.types.AnyTypeKind;
 import org.apache.syncope.common.lib.types.ClientExceptionType;
 import org.apache.syncope.common.lib.types.PatchOperation;
 import org.apache.syncope.common.rest.api.beans.AnyQuery;
-import org.apache.syncope.common.rest.api.beans.UserRequestFormQuery;
+import org.apache.syncope.common.rest.api.beans.UserRequestQuery;
 import org.apache.syncope.common.rest.api.service.AccessTokenService;
 import org.apache.syncope.common.rest.api.service.UserRequestService;
 import org.apache.syncope.common.rest.api.service.UserSelfService;
@@ -125,8 +125,8 @@ public class UserSelfITCase extends AbstractITCase {
         }
 
         // 2. now approve and verify that propagation has happened
-        UserRequestForm form = userRequestService.getForms(
-                new UserRequestFormQuery.Builder().user(userTO.getKey()).build()).getResult().get(0);
+        UserRequestForm form = userRequestService.listForms(
+                new UserRequestQuery.Builder().user(userTO.getKey()).build()).getResult().get(0);
         form = userRequestService.claimForm(form.getTaskId());
         form.getProperty("approveCreate").get().setValue(Boolean.TRUE.toString());
         userTO = userRequestService.submitForm(form);
@@ -161,8 +161,8 @@ public class UserSelfITCase extends AbstractITCase {
         }
 
         // 2. unclaim and verify that propagation has NOT happened
-        UserRequestForm form = userRequestService.getForms(
-                new UserRequestFormQuery.Builder().user(userTO.getKey()).build()).getResult().get(0);
+        UserRequestForm form = userRequestService.listForms(
+                new UserRequestQuery.Builder().user(userTO.getKey()).build()).getResult().get(0);
         form = userRequestService.unclaimForm(form.getTaskId());
         assertNull(form.getAssignee());
         assertNotNull(userTO);
@@ -175,8 +175,8 @@ public class UserSelfITCase extends AbstractITCase {
         }
 
         // 3. approve and verify that propagation has happened
-        form = userRequestService.getForms(
-                new UserRequestFormQuery.Builder().user(userTO.getKey()).build()).getResult().get(0);
+        form = userRequestService.listForms(
+                new UserRequestQuery.Builder().user(userTO.getKey()).build()).getResult().get(0);
         form = userRequestService.claimForm(form.getTaskId());
         form.getProperty("approveCreate").get().setValue(Boolean.TRUE.toString());
         userTO = userRequestService.submitForm(form);
@@ -273,8 +273,8 @@ public class UserSelfITCase extends AbstractITCase {
         }
 
         // 3. approve self-update as admin
-        UserRequestForm form = userRequestService.getForms(
-                new UserRequestFormQuery.Builder().user(updated.getKey()).build()).getResult().get(0);
+        UserRequestForm form = userRequestService.listForms(
+                new UserRequestQuery.Builder().user(updated.getKey()).build()).getResult().get(0);
         form = userRequestService.claimForm(form.getTaskId());
         form.getProperty("approveUpdate").get().setValue(Boolean.TRUE.toString());
         updated = userRequestService.submitForm(form);
@@ -473,8 +473,8 @@ public class UserSelfITCase extends AbstractITCase {
         assertEquals("createApproval", userTO.getStatus());
 
         // 2. request if there is any pending task for user just created
-        UserRequestForm form = userRequestService.getForms(
-                new UserRequestFormQuery.Builder().user(userTO.getKey()).build()).getResult().get(0);
+        UserRequestForm form = userRequestService.listForms(
+                new UserRequestQuery.Builder().user(userTO.getKey()).build()).getResult().get(0);
         assertNotNull(form);
         assertNotNull(form.getUsername());
         assertEquals(userTO.getUsername(), form.getUsername());
@@ -505,8 +505,8 @@ public class UserSelfITCase extends AbstractITCase {
         // 4. claim task from bellini, with role "User manager" and in groupForWorkflowApproval
         UserRequestService userService3 = clientFactory.create("bellini", ADMIN_PWD).
                 getService(UserRequestService.class);
-        assertEquals(1, userService3.getForms(
-                new UserRequestFormQuery.Builder().user(userTO.getKey()).build()).getTotalCount());
+        assertEquals(1, userService3.listForms(
+                new UserRequestQuery.Builder().user(userTO.getKey()).build()).getTotalCount());
         form = userService3.claimForm(form.getTaskId());
         assertNotNull(form);
         assertNotNull(form.getTaskId());
@@ -536,7 +536,7 @@ public class UserSelfITCase extends AbstractITCase {
         assumeTrue(FlowableDetector.isFlowableEnabledForUserWorkflow(syncopeService));
 
         // read forms *before* any operation
-        PagedResult<UserRequestForm> forms = userRequestService.getForms(new UserRequestFormQuery.Builder().build());
+        PagedResult<UserRequestForm> forms = userRequestService.listForms(new UserRequestQuery.Builder().build());
         int preForms = forms.getTotalCount();
 
         UserCR userCR = UserITCase.getUniqueSample("createWithApproval@syncope.apache.org");
@@ -569,7 +569,7 @@ public class UserSelfITCase extends AbstractITCase {
         assertNotNull(exception);
 
         // 2. request if there is any pending form for user just created
-        forms = userRequestService.getForms(new UserRequestFormQuery.Builder().build());
+        forms = userRequestService.listForms(new UserRequestQuery.Builder().build());
         assertEquals(preForms + 1, forms.getTotalCount());
 
         // 3. as admin, update user: still pending approval
@@ -579,8 +579,8 @@ public class UserSelfITCase extends AbstractITCase {
         userUR.setUsername(new StringReplacePatchItem.Builder().value(updatedUsername).build());
         updateUser(userUR);
 
-        UserRequestForm form = userRequestService.getForms(
-                new UserRequestFormQuery.Builder().user(userTO.getKey()).build()).getResult().get(0);
+        UserRequestForm form = userRequestService.listForms(
+                new UserRequestQuery.Builder().user(userTO.getKey()).build()).getResult().get(0);
         assertNotNull(form);
         assertNotNull(form.getTaskId());
         assertNotNull(form.getUserTO());
@@ -623,8 +623,8 @@ public class UserSelfITCase extends AbstractITCase {
         assumeTrue(FlowableDetector.isFlowableEnabledForUserWorkflow(syncopeService));
 
         // read forms *before* any operation
-        PagedResult<UserRequestForm> forms = userRequestService.getForms(
-                new UserRequestFormQuery.Builder().build());
+        PagedResult<UserRequestForm> forms = userRequestService.listForms(
+                new UserRequestQuery.Builder().build());
         int preForms = forms.getTotalCount();
 
         UserTO created = createUser(UserITCase.getUniqueSample("updateApproval@syncope.apache.org")).getEntity();
@@ -641,11 +641,11 @@ public class UserSelfITCase extends AbstractITCase {
         assertEquals(Response.Status.OK.getStatusCode(), response.getStatus());
         assertEquals("updateApproval", userService.read(created.getKey()).getStatus());
 
-        forms = userRequestService.getForms(new UserRequestFormQuery.Builder().build());
+        forms = userRequestService.listForms(new UserRequestQuery.Builder().build());
         assertEquals(preForms + 1, forms.getTotalCount());
 
-        UserRequestForm form = userRequestService.getForms(
-                new UserRequestFormQuery.Builder().user(created.getKey()).build()).getResult().get(0);
+        UserRequestForm form = userRequestService.listForms(
+                new UserRequestQuery.Builder().user(created.getKey()).build()).getResult().get(0);
         assertNotNull(form);
         assertNotNull(form.getTaskId());
         assertNull(form.getAssignee());
@@ -664,8 +664,8 @@ public class UserSelfITCase extends AbstractITCase {
         assertEquals(0, updated.getMemberships().size());
 
         // the patch is not updated in the approval form
-        form = userRequestService.getForms(
-                new UserRequestFormQuery.Builder().user(created.getKey()).build()).getResult().get(0);
+        form = userRequestService.listForms(
+                new UserRequestQuery.Builder().user(created.getKey()).build()).getResult().get(0);
         assertEquals(req, form.getUserUR());
 
         // approve the user
@@ -700,7 +700,7 @@ public class UserSelfITCase extends AbstractITCase {
         assumeTrue(FlowableDetector.isFlowableEnabledForUserWorkflow(syncopeService));
 
         // read forms *before* any operation
-        PagedResult<UserRequestForm> forms = userRequestService.getForms(new UserRequestFormQuery.Builder().build());
+        PagedResult<UserRequestForm> forms = userRequestService.listForms(new UserRequestQuery.Builder().build());
         int preForms = forms.getTotalCount();
 
         UserCR userCR = UserITCase.getUniqueSample("issueSYNCOPE15@syncope.apache.org");
@@ -722,11 +722,11 @@ public class UserSelfITCase extends AbstractITCase {
         assertEquals(userTO.getCreationDate(), userTO.getLastChangeDate());
 
         // 2. request if there is any pending form for user just created
-        forms = userRequestService.getForms(new UserRequestFormQuery.Builder().build());
+        forms = userRequestService.listForms(new UserRequestQuery.Builder().build());
         assertEquals(preForms + 1, forms.getTotalCount());
 
-        UserRequestForm form = userRequestService.getForms(
-                new UserRequestFormQuery.Builder().user(userTO.getKey()).build()).getResult().get(0);
+        UserRequestForm form = userRequestService.listForms(
+                new UserRequestQuery.Builder().user(userTO.getKey()).build()).getResult().get(0);
         assertNotNull(form);
 
         // 3. first claim by bellini ....
@@ -748,12 +748,12 @@ public class UserSelfITCase extends AbstractITCase {
         userTO = userRequestService.submitForm(form);
         assertNotNull(userTO);
         assertEquals(preForms,
-                userRequestService.getForms(new UserRequestFormQuery.Builder().build()).getTotalCount());
-        assertTrue(userRequestService.getForms(
-                new UserRequestFormQuery.Builder().user(userTO.getKey()).build()).getResult().isEmpty());
+                userRequestService.listForms(new UserRequestQuery.Builder().build()).getTotalCount());
+        assertTrue(userRequestService.listForms(
+                new UserRequestQuery.Builder().user(userTO.getKey()).build()).getResult().isEmpty());
 
         // 7.check that no more forms are still to be processed
-        forms = userRequestService.getForms(new UserRequestFormQuery.Builder().build());
+        forms = userRequestService.listForms(new UserRequestQuery.Builder().build());
         assertEquals(preForms, forms.getTotalCount());
     }