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.flowable.task;
20  
21  import org.apache.commons.lang3.tuple.Pair;
22  import org.apache.syncope.common.lib.request.UserUR;
23  import org.apache.syncope.core.flowable.impl.FlowableRuntimeUtils;
24  import org.apache.syncope.core.persistence.api.dao.UserDAO;
25  import org.apache.syncope.core.persistence.api.entity.user.User;
26  import org.apache.syncope.core.provisioning.api.PropagationByResource;
27  import org.apache.syncope.core.provisioning.api.data.UserDataBinder;
28  import org.flowable.engine.delegate.DelegateExecution;
29  
30  public class Update extends FlowableServiceTask {
31  
32      protected final UserDataBinder dataBinder;
33  
34      protected final UserDAO userDAO;
35  
36      public Update(final UserDataBinder dataBinder, final UserDAO userDAO) {
37          this.dataBinder = dataBinder;
38          this.userDAO = userDAO;
39      }
40  
41      @Override
42      protected void doExecute(final DelegateExecution execution) {
43          UserUR req = execution.getVariable(FlowableRuntimeUtils.USER_UR, UserUR.class);
44          if (req == null || req.isEmpty()) {
45              LOG.warn("No actual update is to be performed: empty or null request");
46          } else {
47              User user = execution.getVariable(FlowableRuntimeUtils.USER, User.class);
48  
49              user = userDAO.save(user);
50  
51              Pair<PropagationByResource<String>, PropagationByResource<Pair<String, String>>> propInfo =
52                      dataBinder.update(user, req);
53  
54              // report updated user and propagation by resource as result
55              execution.setVariable(FlowableRuntimeUtils.USER, user);
56              execution.setVariable(FlowableRuntimeUtils.PROP_BY_RESOURCE, propInfo.getLeft());
57              execution.setVariable(FlowableRuntimeUtils.PROP_BY_LINKEDACCOUNT, propInfo.getRight());
58          }
59      }
60  }