1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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
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 }