View Javadoc
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  	 * Searches for permissions in Neo4j.
24  	 *
25  	 * @param id identifies the entity that the permissions object belongs to
26  	 * @return Permissions with matching entity or null
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  	 * Searches for permissions in Neo4j.
39  	 *
40  	 * @param shepardId identifies the entity that the permissions object belongs to
41  	 * @return Permissions with matching entity or null
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  	 * Create Permissions based on an entity and the owner
54  	 *
55  	 * @param entityId identifies the entity
56  	 * @return The created Permissions object
57  	 */
58  	public Permissions createPermissionsByNeo4jId(long entityId) {
59  		var permissions = new Permissions();
60  		return permissionsDAO.createWithEntityNeo4jId(permissions, entityId);
61  	}
62  
63  	/**
64  	 * Updates the Permissions in Neo4j
65  	 *
66  	 * @param permissionsIo the new Permissions object
67  	 * @param id            identifies the entity
68  	 * @return the updated Permissions object
69  	 */
70  	public Permissions updatePermissionsByNeo4jId(PermissionsIO permissionsIo, long id) {
71  		var permissions = convertPermissionsIO(permissionsIo);
72  		var old = getPermissionsByNeo4jId(id);
73  		if (old == null) {
74  			// There is no old permissions object
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  	 * Updates the Permissions in Neo4j
90  	 *
91  	 * @param permissionsIo the new Permissions object
92  	 * @param shepardId     identifies the entity
93  	 * @return the updated Permissions object
94  	 */
95  	public Permissions updatePermissionsByShepardId(PermissionsIO permissionsIo, long shepardId) {
96  		var permissions = convertPermissionsIO(permissionsIo);
97  		var old = getPermissionsByShepardId(shepardId);
98  		if (old == null) {
99  			// There is no old permissions object
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 }