/
ThingErrorRegistry.java
executable file
·124 lines (113 loc) · 7.78 KB
/
ThingErrorRegistry.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
/*
* Copyright (c) 2017-2018 Bosch Software Innovations GmbH.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/org/documents/epl-2.0/index.php
*
* SPDX-License-Identifier: EPL-2.0
*/
package org.eclipse.ditto.signals.commands.things.exceptions;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import javax.annotation.concurrent.Immutable;
import org.eclipse.ditto.model.base.common.ConditionChecker;
import org.eclipse.ditto.model.base.exceptions.DittoRuntimeException;
import org.eclipse.ditto.model.things.AclEntryInvalidException;
import org.eclipse.ditto.model.things.AclInvalidException;
import org.eclipse.ditto.model.things.AclNotAllowedException;
import org.eclipse.ditto.model.things.FeatureDefinitionEmptyException;
import org.eclipse.ditto.model.things.FeatureDefinitionIdentifierInvalidException;
import org.eclipse.ditto.model.things.PolicyIdMissingException;
import org.eclipse.ditto.model.things.ThingIdInvalidException;
import org.eclipse.ditto.model.things.ThingTooLargeException;
import org.eclipse.ditto.signals.base.AbstractErrorRegistry;
import org.eclipse.ditto.signals.base.JsonParsable;
import org.eclipse.ditto.signals.commands.base.CommonErrorRegistry;
/**
* A {@link org.eclipse.ditto.signals.base.ErrorRegistry} aware of all {@link org.eclipse.ditto.model.things.ThingException}s.
*/
@Immutable
public final class ThingErrorRegistry extends AbstractErrorRegistry<DittoRuntimeException> {
private ThingErrorRegistry(final Map<String, JsonParsable<DittoRuntimeException>> parseStrategies) {
super(parseStrategies, CommonErrorRegistry.newInstance());
}
/**
* Returns a new {@code ThingErrorRegistry}.
*
* @return the error registry.
*/
public static ThingErrorRegistry newInstance() {
return newInstance(Collections.emptyMap());
}
/**
* Returns a new {@code ThingErrorRegistry} providing {@code additionalParseStrategies} as argument - that way the
* user of this ThingErrorRegistry can register additional parsers for his own extensions of
* {@link DittoRuntimeException}.
*
* @param additionalParseStrategies a map containing of DittoRuntimeException ERROR_CODE as keys and JsonParsable of
* DittoRuntimeException as values.
* @return the error registry.
* @throws NullPointerException if {@code additionalParseStrategies} is {@code null}.
*/
public static ThingErrorRegistry newInstance(
final Map<String, JsonParsable<DittoRuntimeException>> additionalParseStrategies) {
ConditionChecker.checkNotNull(additionalParseStrategies, "additional parse strategies");
final Map<String, JsonParsable<DittoRuntimeException>> parseStrategies =
new HashMap<>(additionalParseStrategies);
parseStrategies.put(AclInvalidException.ERROR_CODE, AclInvalidException::fromJson);
parseStrategies.put(AclEntryInvalidException.ERROR_CODE, AclEntryInvalidException::fromJson);
parseStrategies.put(AclNotAllowedException.ERROR_CODE, AclNotAllowedException::fromJson);
parseStrategies.put(AclModificationInvalidException.ERROR_CODE, AclModificationInvalidException::fromJson);
parseStrategies.put(AclNotAccessibleException.ERROR_CODE, AclNotAccessibleException::fromJson);
parseStrategies.put(AclNotModifiableException.ERROR_CODE, AclNotModifiableException::fromJson);
parseStrategies.put(ThingConflictException.ERROR_CODE, ThingConflictException::fromJson);
parseStrategies.put(ThingIdInvalidException.ERROR_CODE, ThingIdInvalidException::fromJson);
parseStrategies.put(ThingTooLargeException.ERROR_CODE, ThingTooLargeException::fromJson);
parseStrategies.put(ThingIdNotExplicitlySettableException.ERROR_CODE,
ThingIdNotExplicitlySettableException::fromJson);
parseStrategies.put(ThingNotAccessibleException.ERROR_CODE, ThingNotAccessibleException::fromJson);
parseStrategies.put(ThingNotDeletableException.ERROR_CODE, ThingNotDeletableException::fromJson);
parseStrategies.put(ThingNotCreatableException.ERROR_CODE, ThingNotCreatableException::fromJson);
parseStrategies.put(ThingNotModifiableException.ERROR_CODE, ThingNotModifiableException::fromJson);
parseStrategies.put(PolicyIdNotAccessibleException.ERROR_CODE, PolicyIdNotAccessibleException::fromJson);
parseStrategies.put(PolicyIdNotModifiableException.ERROR_CODE, PolicyIdNotModifiableException::fromJson);
parseStrategies.put(PolicyIdNotAllowedException.ERROR_CODE, PolicyIdNotAllowedException::fromJson);
parseStrategies.put(PolicyNotAllowedException.ERROR_CODE, PolicyNotAllowedException::fromJson);
parseStrategies.put(PolicyInvalidException.ERROR_CODE, PolicyInvalidException::fromJson);
parseStrategies.put(PolicyIdMissingException.ERROR_CODE, PolicyIdMissingException::fromJson);
parseStrategies.put(ThingUnavailableException.ERROR_CODE, ThingUnavailableException::fromJson);
parseStrategies.put(ThingTooManyModifyingRequestsException.ERROR_CODE,
ThingTooManyModifyingRequestsException::fromJson);
parseStrategies.put(AttributesNotAccessibleException.ERROR_CODE, AttributesNotAccessibleException::fromJson);
parseStrategies.put(AttributeNotAccessibleException.ERROR_CODE, AttributeNotAccessibleException::fromJson);
parseStrategies.put(AttributesNotModifiableException.ERROR_CODE, AttributesNotModifiableException::fromJson);
parseStrategies.put(AttributeNotModifiableException.ERROR_CODE, AttributeNotModifiableException::fromJson);
parseStrategies.put(AttributePointerInvalidException.ERROR_CODE, AttributePointerInvalidException::fromJson);
parseStrategies.put(FeaturesNotAccessibleException.ERROR_CODE, FeaturesNotAccessibleException::fromJson);
parseStrategies.put(FeaturesNotModifiableException.ERROR_CODE, FeaturesNotModifiableException::fromJson);
parseStrategies.put(FeatureNotAccessibleException.ERROR_CODE, FeatureNotAccessibleException::fromJson);
parseStrategies.put(FeatureNotModifiableException.ERROR_CODE, FeatureNotModifiableException::fromJson);
parseStrategies.put(FeatureDefinitionNotAccessibleException.ERROR_CODE,
FeatureDefinitionNotAccessibleException::fromJson);
parseStrategies.put(FeatureDefinitionNotModifiableException.ERROR_CODE,
FeatureDefinitionNotModifiableException::fromJson);
parseStrategies.put(FeaturePropertiesNotAccessibleException.ERROR_CODE,
FeaturePropertiesNotAccessibleException::fromJson);
parseStrategies.put(FeaturePropertiesNotModifiableException.ERROR_CODE,
FeaturePropertiesNotModifiableException::fromJson);
parseStrategies.put(FeaturePropertyNotAccessibleException.ERROR_CODE,
FeaturePropertyNotAccessibleException::fromJson);
parseStrategies.put(FeaturePropertyNotModifiableException.ERROR_CODE,
FeaturePropertyNotModifiableException::fromJson);
parseStrategies.put(FeatureDefinitionEmptyException.ERROR_CODE, FeatureDefinitionEmptyException::fromJson);
parseStrategies.put(FeatureDefinitionIdentifierInvalidException.ERROR_CODE,
FeatureDefinitionIdentifierInvalidException::fromJson);
parseStrategies.put(MissingThingIdsException.ERROR_CODE, MissingThingIdsException::fromJson);
parseStrategies.put(ThingPreconditionNotModifiedException.ERROR_CODE, ThingPreconditionNotModifiedException::fromJson);
parseStrategies.put(ThingPreconditionFailedException.ERROR_CODE, ThingPreconditionFailedException::fromJson);
return new ThingErrorRegistry(parseStrategies);
}
}