View Javadoc
1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one
3    * or more contributor license agreements.  See the NOTICE file
4    * distributed with this work for additional information
5    * regarding copyright ownership.  The ASF licenses this file
6    * to you under the Apache License, Version 2.0 (the
7    * "License"); you may not use this file except in compliance
8    * with the License.  You may obtain a copy of the License at
9    *
10   *   http://www.apache.org/licenses/LICENSE-2.0
11   *
12   * Unless required by applicable law or agreed to in writing,
13   * software distributed under the License is distributed on an
14   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15   * KIND, either express or implied.  See the License for the
16   * specific language governing permissions and limitations
17   * under the License.
18   */
19  package org.apache.syncope.core.rest.cxf.service;
20  
21  import java.util.List;
22  import java.util.Optional;
23  import javax.ws.rs.core.Response;
24  import org.apache.commons.lang3.tuple.Pair;
25  import org.apache.syncope.common.lib.to.PagedResult;
26  import org.apache.syncope.common.lib.to.ProvisioningResult;
27  import org.apache.syncope.common.lib.to.UserRequest;
28  import org.apache.syncope.common.lib.to.UserRequestForm;
29  import org.apache.syncope.common.lib.to.UserTO;
30  import org.apache.syncope.common.lib.to.WorkflowTaskExecInput;
31  import org.apache.syncope.common.rest.api.beans.UserRequestQuery;
32  import org.apache.syncope.common.rest.api.service.UserRequestService;
33  import org.apache.syncope.core.logic.UserRequestLogic;
34  import org.apache.syncope.core.persistence.api.dao.UserDAO;
35  import org.springframework.stereotype.Service;
36  
37  @Service
38  public class UserRequestServiceImpl extends AbstractService implements UserRequestService {
39  
40      protected final UserRequestLogic logic;
41  
42      protected final UserDAO userDAO;
43  
44      public UserRequestServiceImpl(final UserRequestLogic logic, final UserDAO userDAO) {
45          this.logic = logic;
46          this.userDAO = userDAO;
47      }
48  
49      @Override
50      public PagedResult<UserRequest> listRequests(final UserRequestQuery query) {
51          if (query.getUser() != null) {
52              query.setUser(Optional.ofNullable(findActualKey(userDAO, query.getUser())).orElse(query.getUser()));
53          }
54  
55          Pair<Integer, List<UserRequest>> result = logic.listRequests(
56                  query.getUser(), query.getPage(), query.getSize(), getOrderByClauses(query.getOrderBy()));
57          return buildPagedResult(result.getRight(), query.getPage(), query.getSize(), result.getLeft());
58      }
59  
60      @Override
61      public UserRequest startRequest(
62              final String bpmnProcess, final String user, final WorkflowTaskExecInput inputVariables) {
63  
64          return user == null
65                  ? logic.startRequest(bpmnProcess, inputVariables)
66                  : logic.startRequest(bpmnProcess, findActualKey(userDAO, user), inputVariables);
67      }
68  
69      @Override
70      public void cancelRequest(final String executionId, final String reason) {
71          logic.cancelRequest(executionId, reason);
72      }
73  
74      @Override
75      public UserRequestForm claimForm(final String taskId) {
76          return logic.claimForm(taskId);
77      }
78  
79      @Override
80      public UserRequestForm unclaimForm(final String taskId) {
81          return logic.unclaimForm(taskId);
82      }
83  
84      @Override
85      public UserRequestForm getForm(final String username, final String taskId) {
86          return logic.getForm(findActualKey(userDAO, username), taskId);
87      }
88  
89      @Override
90      public PagedResult<UserRequestForm> listForms(final UserRequestQuery query) {
91          if (query.getUser() != null) {
92              query.setUser(Optional.ofNullable(findActualKey(userDAO, query.getUser())).orElse(query.getUser()));
93          }
94  
95          Pair<Integer, List<UserRequestForm>> result = logic.listForms(
96                  query.getUser(), query.getPage(), query.getSize(), getOrderByClauses(query.getOrderBy()));
97          return buildPagedResult(result.getRight(), query.getPage(), query.getSize(), result.getLeft());
98      }
99  
100     @Override
101     public Response submitForm(final UserRequestForm form) {
102         ProvisioningResult<UserTO> submitted = logic.submitForm(form, isNullPriorityAsync());
103         return modificationResponse(submitted);
104     }
105 }