1 package de.dlr.shepard.auth.permission.io;
2
3 import de.dlr.shepard.auth.permission.model.Permissions;
4 import de.dlr.shepard.auth.users.entities.User;
5 import de.dlr.shepard.auth.users.entities.UserGroup;
6 import de.dlr.shepard.common.util.PermissionType;
7 import jakarta.validation.constraints.NotNull;
8 import lombok.Data;
9 import lombok.NoArgsConstructor;
10 import org.apache.commons.lang3.ArrayUtils;
11 import org.eclipse.microprofile.openapi.annotations.media.Schema;
12
13 @Data
14 @NoArgsConstructor
15 @Schema(name = "Permissions")
16 public class PermissionsIO {
17
18 @Schema(readOnly = true, required = true)
19 private long entityId;
20
21 private String owner;
22
23 @Schema(required = true)
24 private PermissionType permissionType;
25
26 @NotNull
27 @Schema(required = true)
28 private String[] reader;
29
30 @NotNull
31 @Schema(required = true)
32 private String[] writer;
33
34 private long[] readerGroupIds = {};
35
36 private long[] writerGroupIds = {};
37
38 @NotNull
39 @Schema(required = true)
40 private String[] manager;
41
42 public PermissionsIO(Permissions permissions) {
43
44 this.entityId = permissions.getEntities().get(0).getNumericId();
45 this.permissionType = permissions.getPermissionType();
46 this.owner = permissions.getOwner() != null ? permissions.getOwner().getUsername() : null;
47 this.reader = permissions.getReader().stream().map(User::getUsername).toArray(String[]::new);
48 this.writer = permissions.getWriter().stream().map(User::getUsername).toArray(String[]::new);
49 this.readerGroupIds = ArrayUtils.toPrimitive(
50 permissions.getReaderGroups().stream().map(UserGroup::getId).toArray(Long[]::new)
51 );
52 this.writerGroupIds = ArrayUtils.toPrimitive(
53 permissions.getWriterGroups().stream().map(UserGroup::getId).toArray(Long[]::new)
54 );
55 this.manager = permissions.getManager().stream().map(User::getUsername).toArray(String[]::new);
56 }
57 }