1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.syncope.fit.core.reference.flowable;
20
21 import org.apache.commons.lang3.tuple.Pair;
22 import org.apache.syncope.common.lib.request.RelationshipUR;
23 import org.apache.syncope.common.lib.request.UserUR;
24 import org.apache.syncope.common.lib.to.RelationshipTO;
25 import org.apache.syncope.core.flowable.impl.FlowableRuntimeUtils;
26 import org.apache.syncope.core.flowable.task.FlowableServiceTask;
27 import org.apache.syncope.core.persistence.api.dao.UserDAO;
28 import org.apache.syncope.core.persistence.api.entity.user.User;
29 import org.apache.syncope.core.provisioning.api.PropagationByResource;
30 import org.apache.syncope.core.provisioning.api.data.UserDataBinder;
31 import org.flowable.engine.delegate.DelegateExecution;
32
33 public class CreateARelationship extends FlowableServiceTask {
34
35 private final UserDataBinder dataBinder;
36
37 private final UserDAO userDAO;
38
39 public CreateARelationship(final UserDataBinder dataBinder, final UserDAO userDAO) {
40 this.dataBinder = dataBinder;
41 this.userDAO = userDAO;
42 }
43
44 @Override
45 protected void doExecute(final DelegateExecution execution) {
46 User user = execution.getVariable(FlowableRuntimeUtils.USER, User.class);
47
48 Boolean approve = execution.getVariable("approve", Boolean.class);
49 if (Boolean.TRUE.equals(approve)) {
50 user = userDAO.save(user);
51
52 String printer = execution.getVariable("printer", String.class);
53
54 UserUR userUR = new UserUR();
55 userUR.setKey(user.getKey());
56 userUR.getRelationships().add(new RelationshipUR.Builder(new RelationshipTO.Builder("neighborhood").
57 otherEnd("PRINTER", printer).build()).build());
58
59 Pair<PropagationByResource<String>, PropagationByResource<Pair<String, String>>> propInfo =
60 dataBinder.update(user, userUR);
61
62
63 execution.setVariable(FlowableRuntimeUtils.USER, user);
64 execution.setVariable(FlowableRuntimeUtils.PROP_BY_RESOURCE, propInfo.getLeft());
65 execution.setVariable(FlowableRuntimeUtils.PROP_BY_LINKEDACCOUNT, propInfo.getRight());
66 } else {
67 LOG.info("Printer assignment to " + user.getUsername() + " was not approved");
68 }
69 }
70 }