Skip to content

Commit c728ed9

Browse files
committed
refactoring: introduce kind a service locator - EnotContext
1 parent cc80902 commit c728ed9

23 files changed

Lines changed: 197 additions & 84 deletions

ber-tlv/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
<groupId>com.github.flexca.enot</groupId>
99
<artifactId>enot-ber-tlv</artifactId>
1010
<packaging>jar</packaging>
11-
<version>1.0.0</version>
11+
<version>1.0.0-SNAPSHOT</version>
1212
<name>eNot BER-TLV</name>
1313

1414
</project>

core/pom.xml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,11 @@
88
<parent>
99
<groupId>com.github.flexca.enot</groupId>
1010
<artifactId>parent</artifactId>
11-
<version>1.0.0</version>
11+
<version>1.0.0-SNAPSHOT</version>
1212
</parent>
1313

1414
<artifactId>enot-core</artifactId>
15+
<version>1.0.0-SNAPSHOT</version>
1516
<packaging>jar</packaging>
1617
<name>eNot core</name>
1718

Lines changed: 19 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,55 +1,58 @@
11
package com.github.flexca.enot.core;
22

33
import com.github.flexca.enot.core.exception.EnotParsingException;
4+
import com.github.flexca.enot.core.exception.EnotSerializationException;
45
import com.github.flexca.enot.core.expression.ConditionExpressionEvaluator;
56
import com.github.flexca.enot.core.expression.ConditionExpressionParser;
67
import com.github.flexca.enot.core.parser.EnotParser;
78
import com.github.flexca.enot.core.registry.EnotRegistry;
89
import com.github.flexca.enot.core.serializer.EnotSerializer;
910
import com.github.flexca.enot.core.element.EnotElement;
11+
import com.github.flexca.enot.core.serializer.context.SerializationContext;
1012
import tools.jackson.databind.ObjectMapper;
1113

1214
import java.util.List;
1315
import java.util.Map;
1416

1517
public class Enot {
1618

17-
private final EnotRegistry enotRegistry;
18-
private final ConditionExpressionParser conditionExpressionParser;
19-
private final ConditionExpressionEvaluator conditionExpressionEvaluator;
19+
private final EnotContext enotContext;
2020
private final EnotParser enotParser;
2121
private final EnotSerializer enotSerializer;
2222

2323
public Enot(EnotRegistry enotRegistry, ObjectMapper objectMapper) {
24-
this.enotRegistry = enotRegistry;
25-
conditionExpressionParser = new ConditionExpressionParser();
26-
conditionExpressionEvaluator = new ConditionExpressionEvaluator(enotRegistry, conditionExpressionParser);
27-
enotParser = new EnotParser(this.enotRegistry, conditionExpressionParser, objectMapper);
28-
enotSerializer = new EnotSerializer(this.enotRegistry, enotParser, conditionExpressionEvaluator);
24+
ConditionExpressionParser conditionExpressionParser = new ConditionExpressionParser();
25+
ConditionExpressionEvaluator conditionExpressionEvaluator = new ConditionExpressionEvaluator(enotRegistry, conditionExpressionParser);
26+
enotContext = new EnotContext(enotRegistry, conditionExpressionParser, conditionExpressionEvaluator);
27+
enotParser = new EnotParser(enotContext, objectMapper);
28+
enotSerializer = new EnotSerializer(enotContext, enotParser);
2929
}
3030

3131
public List<EnotElement> parse(String json) throws EnotParsingException {
3232
return enotParser.parse(json);
3333
}
3434

35-
public byte[] serialize(String json, Map<String, Object> values) {
36-
return null;
35+
public List<byte[]> serialize(String json, SerializationContext context) throws EnotParsingException, EnotSerializationException {
36+
return enotSerializer.serialize(json, context);
3737
}
3838

39-
public byte[] serialize(EnotElement element, Map<String, Object> values) {
40-
return null;
39+
public List<byte[]> serialize(EnotElement element, SerializationContext context) throws EnotSerializationException {
40+
return enotSerializer.serialize(element, context);
4141
}
4242

43-
public byte[] serialize(List<EnotElement> elements, Map<String, Object> values) {
44-
return null;
43+
public List<byte[]> serialize(List<EnotElement> elements, SerializationContext context) throws EnotSerializationException {
44+
return enotSerializer.serialize(elements, context);
4545
}
4646

47-
public Map<String, Object> getValuesExample(EnotElement element) {
47+
public Map<String, Object> getParamsExample(String json) {
4848
return null;
4949
}
5050

51-
public Map<String, Object> getValuesExample(List<EnotElement> elements) {
51+
public Map<String, Object> getParamsExample(EnotElement element) {
5252
return null;
5353
}
5454

55+
public Map<String, Object> getParamsExample(List<EnotElement> elements) {
56+
return null;
57+
}
5558
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package com.github.flexca.enot.core;
2+
3+
import com.github.flexca.enot.core.expression.ConditionExpressionEvaluator;
4+
import com.github.flexca.enot.core.expression.ConditionExpressionParser;
5+
import com.github.flexca.enot.core.registry.EnotRegistry;
6+
7+
public class EnotContext {
8+
9+
private final EnotRegistry enotRegistry;
10+
private final ConditionExpressionParser conditionExpressionParser;
11+
private final ConditionExpressionEvaluator conditionExpressionEvaluator;
12+
13+
public EnotContext(EnotRegistry enotRegistry, ConditionExpressionParser conditionExpressionParser,
14+
ConditionExpressionEvaluator conditionExpressionEvaluator) {
15+
this.enotRegistry = enotRegistry;
16+
this.conditionExpressionParser = conditionExpressionParser;
17+
this.conditionExpressionEvaluator = conditionExpressionEvaluator;
18+
}
19+
20+
public EnotRegistry getEnotRegistry() {
21+
return enotRegistry;
22+
}
23+
24+
public ConditionExpressionParser getConditionExpressionParser() {
25+
return conditionExpressionParser;
26+
}
27+
28+
public ConditionExpressionEvaluator getConditionExpressionEvaluator() {
29+
return conditionExpressionEvaluator;
30+
}
31+
}

core/src/main/java/com/github/flexca/enot/core/parser/EnotParser.java

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.github.flexca.enot.core.parser;
22

3+
import com.github.flexca.enot.core.EnotContext;
34
import com.github.flexca.enot.core.exception.EnotParsingException;
45
import com.github.flexca.enot.core.expression.ConditionExpressionParser;
56
import com.github.flexca.enot.core.registry.EnotRegistry;
@@ -24,15 +25,13 @@ public class EnotParser {
2425

2526
private static final String COMMON_ERROR_MESSAGE = "Error during parsing of eNot, reason: ";
2627

27-
private final EnotRegistry enotRegistry;
28-
private final ConditionExpressionParser conditionExpressionParser;
28+
private final EnotContext enotContext;
2929
private final EnotParserValidator parserValidator;
3030
private final ObjectMapper objectMapper;
3131

32-
public EnotParser(EnotRegistry enotRegistry, ConditionExpressionParser conditionExpressionParser, ObjectMapper objectMapper) {
33-
this.enotRegistry = enotRegistry;
34-
this.conditionExpressionParser = conditionExpressionParser;
35-
this.parserValidator = new EnotParserValidator(enotRegistry);
32+
public EnotParser(EnotContext enotContext, ObjectMapper objectMapper) {
33+
this.enotContext = enotContext;
34+
this.parserValidator = new EnotParserValidator(enotContext);
3635
this.objectMapper = objectMapper;
3736
}
3837

@@ -126,7 +125,7 @@ private Optional<EnotElement> parseElement(ObjectNode jsonElement, String parent
126125
return Optional.empty();
127126
}
128127

129-
Optional<EnotTypeSpecification> typeSpecificationCandidate = enotRegistry.getTypeSpecification(type);
128+
Optional<EnotTypeSpecification> typeSpecificationCandidate = enotContext.getEnotRegistry().getTypeSpecification(type);
130129
if (typeSpecificationCandidate.isEmpty()) {
131130
jsonErrors.add(EnotJsonError.of(typePath, "unsupported " + ENOT_ELEMENT_TYPE_NAME + " of eNot element: " + type
132131
+ ", make sure this type was added to EnotRegistry"));
@@ -147,7 +146,7 @@ private Optional<EnotElement> parseElement(ObjectNode jsonElement, String parent
147146
elementBody.ifPresent(element::setBody);
148147

149148
parserValidator.validateElement(typeSpecification, element, parentPath, jsonErrors);
150-
typeSpecification.getElementValidator().validateElement(element, parentPath, jsonErrors);
149+
typeSpecification.getElementValidator().validateElement(element, parentPath, jsonErrors, enotContext);
151150

152151
return Optional.of(element);
153152
}

core/src/main/java/com/github/flexca/enot/core/parser/EnotParserValidator.java

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
package com.github.flexca.enot.core.parser;
22

3-
import com.github.flexca.enot.core.registry.EnotElementSpecification;
4-
import com.github.flexca.enot.core.registry.EnotRegistry;
5-
import com.github.flexca.enot.core.registry.EnotTypeSpecification;
3+
import com.github.flexca.enot.core.EnotContext;
64
import com.github.flexca.enot.core.element.EnotElement;
75
import com.github.flexca.enot.core.element.attribute.EnotAttribute;
8-
import com.github.flexca.enot.core.element.value.EnotValueSpecification;
96
import com.github.flexca.enot.core.element.value.CommonEnotValueType;
7+
import com.github.flexca.enot.core.element.value.EnotValueSpecification;
108
import com.github.flexca.enot.core.element.value.EnotValueType;
9+
import com.github.flexca.enot.core.registry.EnotElementSpecification;
10+
import com.github.flexca.enot.core.registry.EnotTypeSpecification;
1111
import com.github.flexca.enot.core.util.AttributeUtils;
1212
import com.github.flexca.enot.core.util.DateTimeUtils;
1313
import com.github.flexca.enot.core.util.OidUtils;
@@ -21,10 +21,10 @@
2121

2222
public class EnotParserValidator {
2323

24-
private final EnotRegistry enotRegistry;
24+
private final EnotContext enotContext;
2525

26-
public EnotParserValidator(EnotRegistry enotRegistry) {
27-
this.enotRegistry = enotRegistry;
26+
public EnotParserValidator(EnotContext enotContext) {
27+
this.enotContext = enotContext;
2828
}
2929

3030
public void validateElement(EnotTypeSpecification typeSpecification, EnotElement element, String parentPath, List<EnotJsonError> jsonErrors) {
@@ -101,7 +101,7 @@ private void validateConsumeType(EnotValueSpecification consumeValueSpecificatio
101101
}
102102

103103
if (childElementBody instanceof EnotElement child) {
104-
Optional<EnotTypeSpecification> typeSpecification = enotRegistry.getTypeSpecification(child.getType());
104+
Optional<EnotTypeSpecification> typeSpecification = enotContext.getEnotRegistry().getTypeSpecification(child.getType());
105105
if (typeSpecification.isEmpty()) {
106106
jsonErrors.add(EnotJsonError.of(parentPath + "/" + EnotParser.ENOT_ELEMENT_TYPE_NAME, "unsupported eNot element type"));
107107
return;
Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
package com.github.flexca.enot.core.registry;
22

3+
import com.github.flexca.enot.core.EnotContext;
34
import com.github.flexca.enot.core.parser.EnotJsonError;
45
import com.github.flexca.enot.core.element.EnotElement;
56

67
import java.util.List;
78

89
public interface EnotElementValidator {
910

10-
void validateElement(EnotElement element, String parentPath, List<EnotJsonError> jsonErrors);
11+
void validateElement(EnotElement element, String parentPath, List<EnotJsonError> jsonErrors, EnotContext enotContext);
1112
}

core/src/main/java/com/github/flexca/enot/core/serializer/BaseElementSerializer.java

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.github.flexca.enot.core.serializer;
22

3+
import com.github.flexca.enot.core.EnotContext;
34
import com.github.flexca.enot.core.element.EnotElement;
45
import com.github.flexca.enot.core.element.value.CommonEnotValueType;
56
import com.github.flexca.enot.core.exception.EnotSerializationException;
@@ -16,40 +17,38 @@
1617
public abstract class BaseElementSerializer implements ElementSerializer {
1718

1819
protected List<ElementSerializationResult> serializeBody(Object body, SerializationContext context, String jsonPath,
19-
EnotRegistry enotRegistry, ConditionExpressionEvaluator conditionExpressionEvaluator)
20-
throws EnotSerializationException {
20+
EnotContext enotContext) throws EnotSerializationException {
2121

2222
List<ElementSerializationResult> result = new ArrayList<>();
2323
if (body instanceof Collection<?> children) {
2424
for (Object child : children) {
2525
if (child instanceof EnotElement childElement) {
26-
result.addAll(serializeBodyElement(childElement, context, jsonPath, enotRegistry, conditionExpressionEvaluator));
26+
result.addAll(serializeBodyElement(childElement, context, jsonPath, enotContext));
2727
} else {
28-
result.addAll(serializeBodyPrimitive(child, context, jsonPath, enotRegistry));
28+
result.addAll(serializeBodyPrimitive(child, context, jsonPath, enotContext));
2929
}
3030
}
3131
} else if (body instanceof EnotElement child) {
32-
result.addAll(serializeBodyElement(child, context, jsonPath, enotRegistry, conditionExpressionEvaluator));
32+
result.addAll(serializeBodyElement(child, context, jsonPath, enotContext));
3333
} else {
34-
result.addAll(serializeBodyPrimitive(body, context, jsonPath, enotRegistry));
34+
result.addAll(serializeBodyPrimitive(body, context, jsonPath, enotContext));
3535
}
3636
return result;
3737
}
3838

3939
private List<ElementSerializationResult> serializeBodyElement(EnotElement element, SerializationContext context, String jsonPath,
40-
EnotRegistry enotRegistry, ConditionExpressionEvaluator conditionExpressionEvaluator)
41-
throws EnotSerializationException {
40+
EnotContext enotContext) throws EnotSerializationException {
4241

43-
EnotTypeSpecification typeSpecification = enotRegistry.getTypeSpecification(element.getType()).orElseThrow(() ->
42+
EnotTypeSpecification typeSpecification = enotContext.getEnotRegistry().getTypeSpecification(element.getType()).orElseThrow(() ->
4443
new EnotSerializationException(EnotSerializer.COMMON_ERROR_MESSAGE, EnotJsonError.of(jsonPath,
4544
"cannot find EnotTypeSpecification for element of type " + element.getType())));
4645

4746
ElementSerializer elementSerializer = typeSpecification.getSerializer(element);
48-
return elementSerializer.serialize(element, context, jsonPath, enotRegistry, conditionExpressionEvaluator);
47+
return elementSerializer.serialize(element, context, jsonPath, enotContext);
4948
}
5049

5150
private List<ElementSerializationResult> serializeBodyPrimitive(Object body, SerializationContext context, String jsonPath,
52-
EnotRegistry enotRegistry) throws EnotSerializationException {
51+
EnotContext enotContext) throws EnotSerializationException {
5352

5453
Object value;
5554
Optional<String> placeholder = PlaceholderUtils.extractPlaceholder(body);

core/src/main/java/com/github/flexca/enot/core/serializer/ElementSerializer.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.github.flexca.enot.core.serializer;
22

3+
import com.github.flexca.enot.core.EnotContext;
34
import com.github.flexca.enot.core.element.EnotElement;
45
import com.github.flexca.enot.core.exception.EnotSerializationException;
56
import com.github.flexca.enot.core.expression.ConditionExpressionEvaluator;
@@ -12,6 +13,5 @@
1213
public interface ElementSerializer {
1314

1415
List<ElementSerializationResult> serialize(EnotElement element, SerializationContext context, String jsonPath,
15-
EnotRegistry enotRegistry, ConditionExpressionEvaluator conditionExpressionEvaluator)
16-
throws EnotSerializationException;
16+
EnotContext enotContext) throws EnotSerializationException;
1717
}

core/src/main/java/com/github/flexca/enot/core/serializer/EnotSerializer.java

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.github.flexca.enot.core.serializer;
22

3+
import com.github.flexca.enot.core.EnotContext;
34
import com.github.flexca.enot.core.exception.EnotParsingException;
45
import com.github.flexca.enot.core.exception.EnotSerializationException;
56
import com.github.flexca.enot.core.expression.ConditionExpressionEvaluator;
@@ -21,14 +22,12 @@ public class EnotSerializer {
2122

2223
public static final String COMMON_ERROR_MESSAGE = "Failure during serialization: ";
2324

24-
private final EnotRegistry enotRegistry;
25+
private final EnotContext enotContext;
2526
private final EnotParser enotParser;
26-
private final ConditionExpressionEvaluator conditionExpressionEvaluator;
2727

28-
public EnotSerializer(EnotRegistry enotRegistry, EnotParser enotParser, ConditionExpressionEvaluator conditionExpressionEvaluator) {
29-
this.enotRegistry = enotRegistry;
28+
public EnotSerializer(EnotContext enotContext, EnotParser enotParser) {
29+
this.enotContext = enotContext;
3030
this.enotParser = enotParser;
31-
this.conditionExpressionEvaluator = conditionExpressionEvaluator;
3231
}
3332

3433
public List<byte[]> serialize(String json, SerializationContext context) throws EnotParsingException, EnotSerializationException {
@@ -56,7 +55,7 @@ public List<byte[]> serialize(EnotElement element, SerializationContext context)
5655

5756
private List<byte[]> serializeElement(EnotElement element, SerializationContext context, String jsonPath) throws EnotSerializationException {
5857

59-
EnotTypeSpecification typeSpecification = enotRegistry.getTypeSpecification(element.getType()).orElseThrow(() ->
58+
EnotTypeSpecification typeSpecification = enotContext.getEnotRegistry().getTypeSpecification(element.getType()).orElseThrow(() ->
6059
new EnotSerializationException(COMMON_ERROR_MESSAGE, EnotJsonError.of(jsonPath,
6160
"cannot resolve EnotTypeSpecification for element with type " + element.getType())));
6261

@@ -65,8 +64,7 @@ private List<byte[]> serializeElement(EnotElement element, SerializationContext
6564
throw new EnotSerializationException(COMMON_ERROR_MESSAGE, EnotJsonError.of(jsonPath,
6665
"serializer not found for element"));
6766
}
68-
List<ElementSerializationResult> serializationResults = elementSerializer.serialize(element, context, jsonPath,
69-
enotRegistry, conditionExpressionEvaluator);
67+
List<ElementSerializationResult> serializationResults = elementSerializer.serialize(element, context, jsonPath, enotContext);
7068

7169
List<byte[]> result = new ArrayList<>();
7270
for (ElementSerializationResult serializationResult : serializationResults) {

0 commit comments

Comments
 (0)