-
Notifications
You must be signed in to change notification settings - Fork 15
/
ApplicationPolicy.java
133 lines (111 loc) · 3.55 KB
/
ApplicationPolicy.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
package io.pivotal.cfapp.domain;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
import com.fasterxml.uuid.Generators;
import org.apache.commons.lang3.StringUtils;
import org.springframework.data.annotation.Id;
import org.springframework.util.Assert;
import org.springframework.util.CollectionUtils;
import lombok.Builder;
import lombok.Builder.Default;
import lombok.Getter;
import lombok.ToString;
@Builder
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({ "id", "operation", "description", "state", "options", "organization-whitelist" })
@Getter
@ToString
public class ApplicationPolicy {
@Id
@JsonIgnore
private Long pk;
@Default
@JsonProperty("id")
private String id = Generators.timeBasedGenerator().generate().toString();
@JsonProperty("operation")
private String operation;
@JsonProperty("description")
private String description;
@JsonProperty("state")
private String state;
@Default
@JsonProperty("options")
private Map<String, Object> options = new HashMap<>();
@Default
@JsonProperty("organization-whitelist")
private Set<String> organizationWhiteList = new HashSet<>();
@JsonCreator
ApplicationPolicy(
@JsonProperty("pk") Long pk,
@JsonProperty("id") String id,
@JsonProperty("operation") String operation,
@JsonProperty("description") String description,
@JsonProperty("state") String state,
@JsonProperty("options") Map<String, Object> options,
@JsonProperty("organization-whitelist") Set<String> organizationWhiteList) {
this.pk = pk;
this.id = id;
this.operation = operation;
this.description = description;
this.state = state;
this.options = options;
this.organizationWhiteList = organizationWhiteList;
}
@JsonIgnore
public Long getPk() {
return pk;
}
public Set<String> getOrganizationWhiteList() {
return CollectionUtils.isEmpty(organizationWhiteList) ? new HashSet<>() : Collections.unmodifiableSet(organizationWhiteList);
}
public Map<String, Object> getOptions() {
return CollectionUtils.isEmpty(options) ? new HashMap<>(): Collections.unmodifiableMap(options);
}
@JsonIgnore
public <T> T getOption(String key, Class<T> type) {
Assert.isTrue(StringUtils.isNotBlank(key), "Option key must not be blank.");
Object value = options.get(key);
if (value == null) {
return null;
}
return type.cast(value);
}
public static String tableName() {
return "application_policy";
}
public static String[] columnNames() {
return
new String[] {
"pk", "id", "operation", "description", "options", "organization_whitelist", "state"
};
}
public static ApplicationPolicy seed(ApplicationPolicy policy) {
return ApplicationPolicy
.builder()
.description(policy.getDescription())
.operation(policy.getOperation())
.options(policy.getOptions())
.organizationWhiteList(policy.getOrganizationWhiteList())
.state(policy.getState())
.build();
}
public static ApplicationPolicy seedWith(ApplicationPolicy policy, String id) {
return ApplicationPolicy
.builder()
.id(id)
.description(policy.getDescription())
.operation(policy.getOperation())
.options(policy.getOptions())
.organizationWhiteList(policy.getOrganizationWhiteList())
.state(policy.getState())
.build();
}
}