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 package info.magnolia.config.registry;
35
36 import info.magnolia.config.source.Deprecation;
37 import info.magnolia.config.source.ConfigurationSourceType;
38
39 import java.util.Optional;
40
41 import lombok.AllArgsConstructor;
42 import lombok.Getter;
43 import lombok.Value;
44
45
46
47
48
49
50
51
52
53 @Getter
54 public abstract class DefinitionMetadataBuilder {
55
56
57
58 public static DefinitionMetadataBuilder usingModuleAndRelativePathAsId() {
59 return new ModuleAndRelativePathMetadataBuilder();
60 }
61
62
63
64
65 public static DefinitionMetadataBuilder usingNameAsId() {
66 return new NameMetadataBuilder();
67 }
68
69 private static class ModuleAndRelativePathMetadataBuilder extends DefinitionMetadataBuilder {
70 @Override
71 protected String buildReferenceId() {
72 return getModule() + ":" + getRelativeLocation();
73 }
74 }
75
76 private static class NameMetadataBuilder extends DefinitionMetadataBuilder {
77 @Override
78 protected String buildReferenceId() {
79 return getName();
80 }
81 }
82
83 private DefinitionType type;
84 private String name;
85 private String module;
86 private String location;
87 private String relativeLocation;
88 private ConfigurationSourceType configurationSourceType;
89 private Deprecation deprecation;
90
91 protected DefinitionMetadataBuilder() {
92 }
93
94 public DefinitionMetadataBuilder type(DefinitionType type) {
95 this.type = type;
96 return this;
97 }
98
99 public DefinitionMetadataBuilder name(String name) {
100 this.name = name;
101 return this;
102 }
103
104 public DefinitionMetadataBuilder module(String module) {
105 this.module = module;
106 return this;
107 }
108
109 public DefinitionMetadataBuilder location(String location) {
110 this.location = location;
111 return this;
112 }
113
114 public DefinitionMetadataBuilder relativeLocation(String relativeLocation) {
115 this.relativeLocation = relativeLocation;
116 return this;
117 }
118
119 public DefinitionMetadataBuilder configurationSourceType(ConfigurationSourceType configurationSourceType) {
120 this.configurationSourceType = configurationSourceType;
121 return this;
122 }
123
124 public DefinitionMetadataBuilder deprecation(Deprecation deprecation) {
125 this.deprecation = deprecation;
126 return this;
127 }
128
129 public DefinitionMetadata build() {
130 final String referenceId = buildReferenceId();
131 return new DefinitionMetadataImpl(this.type, referenceId, this.name, this.module, this.location, this.relativeLocation,
132 this.configurationSourceType, this.deprecation);
133 }
134
135 protected abstract String buildReferenceId();
136
137
138
139
140 @Value
141 @AllArgsConstructor
142 public static class DefinitionMetadataImpl implements DefinitionMetadata {
143 private final DefinitionType type;
144 private final String referenceId;
145 private final String name;
146 private final String module;
147 private final String location;
148 private final String relativeLocation;
149 private final ConfigurationSourceType configurationSourceType;
150 private final Deprecation deprecation;
151
152 @Override
153 public String toString() {
154 String metadataString = String.format("[%s] definition [%s] with reference id: [%s] from module [%s] at [%s]",
155 type.getName(), name, referenceId, module, relativeLocation);
156 if (deprecation != null) {
157 metadataString += metadataString + String.format(" which is deprecated %s", deprecation);
158 }
159 return metadataString;
160 }
161
162 public Optional<Deprecation> getDeprecation() {
163 return Optional.ofNullable(deprecation);
164 }
165 }
166
167 }