1 package de.dlr.shepard.neo4Core.services;
2
3 import java.util.ArrayList;
4 import java.util.List;
5
6 import de.dlr.shepard.neo4Core.dao.PermissionsDAO;
7 import de.dlr.shepard.neo4Core.dao.UserDAO;
8 import de.dlr.shepard.neo4Core.dao.UserGroupDAO;
9 import de.dlr.shepard.neo4Core.entities.Permissions;
10 import de.dlr.shepard.neo4Core.entities.User;
11 import de.dlr.shepard.neo4Core.entities.UserGroup;
12 import de.dlr.shepard.neo4Core.io.PermissionsIO;
13 import lombok.extern.slf4j.Slf4j;
14
15 @Slf4j
16 public class PermissionsService {
17
18 private PermissionsDAO permissionsDAO = new PermissionsDAO();
19 private UserDAO userDAO = new UserDAO();
20 private UserGroupDAO userGroupDAO = new UserGroupDAO();
21
22
23
24
25
26
27
28 public Permissions getPermissionsByNeo4jId(long id) {
29 var permissions = permissionsDAO.findByEntityNeo4jId(id);
30 if (permissions == null) {
31 log.error("Permissions with entity id {} is null", id);
32 return null;
33 }
34 return permissions;
35 }
36
37
38
39
40
41
42
43 public Permissions getPermissionsByShepardId(long shepardId) {
44 var permissions = permissionsDAO.findByEntityShepardId(shepardId);
45 if (permissions == null) {
46 log.error("Permissions with shepardId {} is null", shepardId);
47 return null;
48 }
49 return permissions;
50 }
51
52
53
54
55
56
57
58 public Permissions createPermissionsByNeo4jId(long entityId) {
59 var permissions = new Permissions();
60 return permissionsDAO.createWithEntityNeo4jId(permissions, entityId);
61 }
62
63
64
65
66
67
68
69
70 public Permissions updatePermissionsByNeo4jId(PermissionsIO permissionsIo, long id) {
71 var permissions = convertPermissionsIO(permissionsIo);
72 var old = getPermissionsByNeo4jId(id);
73 if (old == null) {
74
75 return permissionsDAO.createWithEntityNeo4jId(permissions, id);
76 }
77 old.setOwner(permissions.getOwner());
78 old.setReader(permissions.getReader());
79 old.setWriter(permissions.getWriter());
80 old.setReaderGroups(permissions.getReaderGroups());
81 old.setWriterGroups(permissions.getWriterGroups());
82 old.setManager(permissions.getManager());
83 old.setPermissionType(permissions.getPermissionType());
84 return permissionsDAO.createOrUpdate(old);
85
86 }
87
88
89
90
91
92
93
94
95 public Permissions updatePermissionsByShepardId(PermissionsIO permissionsIo, long shepardId) {
96 var permissions = convertPermissionsIO(permissionsIo);
97 var old = getPermissionsByShepardId(shepardId);
98 if (old == null) {
99
100 return permissionsDAO.createWithEntityShepardId(permissions, shepardId);
101 }
102 old.setOwner(permissions.getOwner());
103 old.setReader(permissions.getReader());
104 old.setWriter(permissions.getWriter());
105 old.setReaderGroups(permissions.getReaderGroups());
106 old.setWriterGroups(permissions.getWriterGroups());
107 old.setManager(permissions.getManager());
108 old.setPermissionType(permissions.getPermissionType());
109 var ret = permissionsDAO.createOrUpdate(old);
110 return ret;
111
112 }
113
114 private Permissions convertPermissionsIO(PermissionsIO permissions) {
115 var owner = permissions.getOwner() != null ? userDAO.find(permissions.getOwner()) : null;
116 var permissionType = permissions.getPermissionType();
117 var reader = fetchUsers(permissions.getReader());
118 var writer = fetchUsers(permissions.getWriter());
119 var readerGroups = fetchUserGroups(permissions.getReaderGroupIds());
120 var writerGroups = fetchUserGroups(permissions.getWriterGroupIds());
121 var manager = fetchUsers(permissions.getManager());
122 return new Permissions(owner, reader, writer, readerGroups, writerGroups, manager, permissionType);
123 }
124
125 private List<User> fetchUsers(String[] usernames) {
126 var result = new ArrayList<User>(usernames.length);
127 for (var username : usernames) {
128 if (username == null) {
129 continue;
130 }
131
132 var user = userDAO.find(username);
133 if (user != null) {
134 result.add(user);
135 }
136 }
137 return result;
138 }
139
140 private List<UserGroup> fetchUserGroups(long[] userGroupIds) {
141 var result = new ArrayList<UserGroup>(userGroupIds.length);
142 for (var userGroupId : userGroupIds) {
143 var userGroup = userGroupDAO.findByNeo4jId(userGroupId);
144 if (userGroup != null) {
145 result.add(userGroup);
146 }
147 }
148 return result;
149 }
150 }