1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package de.kaiserpfalzedv.commons.core.resources;
19
20 import org.eclipse.microprofile.openapi.annotations.media.Schema;
21
22 import com.fasterxml.jackson.annotation.JsonInclude;
23 import com.fasterxml.jackson.annotation.JsonPropertyOrder;
24
25 import de.kaiserpfalzedv.commons.api.resources.HasApiVersion;
26 import de.kaiserpfalzedv.commons.api.resources.HasName;
27 import de.kaiserpfalzedv.commons.api.resources.Pointer;
28 import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
29 import jakarta.validation.constraints.NotNull;
30 import jakarta.validation.constraints.Pattern;
31 import jakarta.validation.constraints.Size;
32 import lombok.AllArgsConstructor;
33 import lombok.Builder;
34 import lombok.EqualsAndHashCode;
35 import lombok.Getter;
36 import lombok.NoArgsConstructor;
37 import lombok.ToString;
38 import lombok.experimental.SuperBuilder;
39 import lombok.extern.jackson.Jacksonized;
40
41
42
43
44
45
46
47 @Jacksonized
48 @SuperBuilder(toBuilder = true)
49 @AllArgsConstructor
50 @NoArgsConstructor
51 @Getter
52 @ToString(onlyExplicitlyIncluded = true)
53 @EqualsAndHashCode(onlyExplicitlyIncluded = true)
54 @JsonInclude(JsonInclude.Include.NON_ABSENT)
55 @JsonPropertyOrder({"kind", "apiVersion", "namespace", "name", "selfLink"})
56 @Schema(
57 description = "A full pointer to a resource."
58 )
59 public class PointerImpl implements Pointer {
60
61 private static final long serialVersionUID = 0L;
62
63 @Schema(
64 name = "kind",
65 description = "The type of the resource",
66 required = true,
67 pattern = HasName.VALID_NAME_PATTERN,
68 minLength = HasName.VALID_NAME_MIN_LENGTH,
69 maxLength = HasName.VALID_NAME_MAX_LENGTH
70 )
71 @ToString.Include
72 @EqualsAndHashCode.Include
73 @NotNull
74 @Size(min = HasName.VALID_NAME_MIN_LENGTH, max = HasName.VALID_NAME_MAX_LENGTH, message = HasName.VALID_NAME_LENGTH_MSG)
75 @Pattern(regexp = HasName.VALID_NAME_PATTERN, message = HasName.VALID_NAME_PATTERN_MSG)
76 private String kind;
77
78 @Schema(
79 name = "apiVersion",
80 description = "The version of this resource",
81 required = true,
82 defaultValue = HasApiVersion.VALID_VERSION_EXAMPLE,
83 minLength = HasApiVersion.VALID_VERSION_MIN_LENGTH,
84 maxLength = HasApiVersion.VALID_VERSION_MAX_LENGTH
85 )
86 @Builder.Default
87 @Size(min = HasApiVersion.VALID_VERSION_MIN_LENGTH, max = HasApiVersion.VALID_VERSION_MAX_LENGTH, message = HasApiVersion.VALID_VERSION_LENGTH_MSG)
88 @Pattern(regexp = HasApiVersion.VALID_VERSION_PATTERN, message = HasApiVersion.VALID_VERSION_PATTERN_MSG)
89 private String apiVersion = HasApiVersion.VALID_VERSION_EXAMPLE;
90
91 @Schema(
92 name = "nameSpace",
93 description = "The namespace (group) of this resource",
94 required = true,
95 pattern = HasName.VALID_NAME_PATTERN,
96 minLength = HasName.VALID_NAME_MIN_LENGTH,
97 maxLength = HasName.VALID_NAME_MAX_LENGTH
98 )
99 @ToString.Include
100 @EqualsAndHashCode.Include
101 @NotNull
102 @Size(min = HasName.VALID_NAME_MIN_LENGTH, max = HasName.VALID_NAME_MAX_LENGTH, message = HasName.VALID_NAME_LENGTH_MSG)
103 @Pattern(regexp = HasName.VALID_NAME_PATTERN, message = HasName.VALID_NAME_PATTERN_MSG)
104 private String nameSpace;
105
106 @Schema(
107 name = "name",
108 description = "The unique name of this resource within the namespace",
109 required = true,
110 minLength = HasName.VALID_NAME_MIN_LENGTH,
111 maxLength = HasName.VALID_NAME_MAX_LENGTH
112 )
113 @ToString.Include
114 @EqualsAndHashCode.Include
115 @Size(min = HasName.VALID_NAME_MIN_LENGTH, max = HasName.VALID_NAME_MAX_LENGTH, message = HasName.VALID_NAME_LENGTH_MSG)
116 @Pattern(regexp = HasName.VALID_NAME_PATTERN, message = HasName.VALID_NAME_PATTERN_MSG)
117 private String name;
118
119
120 @SuppressWarnings({"MethodDoesntCallSuperMethod","java:S1182","java:S2975"})
121 @SuppressFBWarnings(value = "CN_IDIOM_NO_SUPER_CALL", justification = "Using the lombok builder.")
122 @Override
123 public PointerImpl clone() {
124 return this.toBuilder().build();
125 }
126 }