Skip to content

Commit a1b0187

Browse files
committed
refactor: Add i18n
1 parent 2246009 commit a1b0187

File tree

5 files changed

+147
-78
lines changed

5 files changed

+147
-78
lines changed
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
/*
2+
* Copyright 2019-present HiveMQ GmbH
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
package com.hivemq.protocols.fsm;
18+
19+
import com.hivemq.common.i18n.I18nError;
20+
import com.hivemq.common.i18n.I18nErrorTemplate;
21+
import org.jetbrains.annotations.NotNull;
22+
23+
import java.util.Map;
24+
25+
public enum I18nProtocolAdapterMessage implements I18nError {
26+
FSM_TRANSITION_FAILURE_TRANSITIONED_FROM_STATE_TO_ERROR,
27+
FSM_TRANSITION_FAILURE_UNABLE_TO_TRANSITION_FROM_STATE_TO_STATE,
28+
FSM_TRANSITION_SUCCESS_STATE_IS_NOT_TRANSITIONED,
29+
FSM_TRANSITION_SUCCESS_TRANSITIONED_FROM_STATE_TO_STATE,
30+
;
31+
32+
private static final @NotNull String RESOURCE_NAME_PREFIX = "templates/protocol-adapter-messages-";
33+
private static final @NotNull String RESOURCE_NAME_SUFFIX = ".properties";
34+
private static final @NotNull I18nErrorTemplate TEMPLATE =
35+
new I18nErrorTemplate(locale -> RESOURCE_NAME_PREFIX + locale + RESOURCE_NAME_SUFFIX,
36+
I18nProtocolAdapterMessage.class.getClassLoader());
37+
38+
private final @NotNull String key;
39+
40+
I18nProtocolAdapterMessage() {
41+
key = name().toLowerCase().replace("_", ".");
42+
}
43+
44+
@Override
45+
public @NotNull String get(final @NotNull Map<String, Object> map) {
46+
return TEMPLATE.get(this, map);
47+
}
48+
49+
@Override
50+
public @NotNull String getKey() {
51+
return key;
52+
}
53+
54+
@Override
55+
public @NotNull String getName() {
56+
return name();
57+
}
58+
}

hivemq-edge/src/main/java/com/hivemq/protocols/fsm/ProtocolAdapterState.java

Lines changed: 31 additions & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -35,105 +35,62 @@ public enum ProtocolAdapterState {
3535
this.transitionFunction = transitionFunction;
3636
}
3737

38-
public static ProtocolAdapterTransitionResponse transitionFromStarted(
38+
public static @NotNull ProtocolAdapterTransitionResponse transitionFromStarting(
3939
final @NotNull ProtocolAdapterState toState,
4040
final @NotNull ProtocolAdapterInstance instance) {
41-
switch (toState) {
42-
case Starting:
43-
return new ProtocolAdapterTransitionResponse(ProtocolAdapterState.Starting);
44-
case Started:
45-
return new ProtocolAdapterTransitionResponse(ProtocolAdapterState.Started);
46-
case Stopping:
47-
return new ProtocolAdapterTransitionResponse(ProtocolAdapterState.Stopping);
48-
case Stopped:
49-
return new ProtocolAdapterTransitionResponse(ProtocolAdapterState.Stopped);
50-
default:
51-
return new ProtocolAdapterTransitionResponse(ProtocolAdapterState.Error);
52-
}
41+
final ProtocolAdapterState fromState = ProtocolAdapterState.Starting;
42+
return switch (toState) {
43+
case Starting -> ProtocolAdapterTransitionResponse.notChanged(fromState);
44+
case Started -> ProtocolAdapterTransitionResponse.success(fromState, toState);
45+
case Stopping, Stopped -> ProtocolAdapterTransitionResponse.failure(fromState, toState);
46+
default -> ProtocolAdapterTransitionResponse.failure(fromState);
47+
};
5348
}
5449

55-
public static ProtocolAdapterTransitionResponse transitionFromStarting(
50+
public static @NotNull ProtocolAdapterTransitionResponse transitionFromStarted(
5651
final @NotNull ProtocolAdapterState toState,
5752
final @NotNull ProtocolAdapterInstance instance) {
53+
final ProtocolAdapterState fromState = ProtocolAdapterState.Started;
5854
return switch (toState) {
59-
case Starting -> new ProtocolAdapterTransitionResponse(ProtocolAdapterState.Starting);
60-
case Started -> new ProtocolAdapterTransitionResponse(ProtocolAdapterState.Started);
61-
case Stopping -> new ProtocolAdapterTransitionResponse(ProtocolAdapterState.Stopping);
62-
case Stopped -> new ProtocolAdapterTransitionResponse(ProtocolAdapterState.Stopped);
63-
default -> new ProtocolAdapterTransitionResponse(ProtocolAdapterState.Error);
55+
case Starting, Stopped -> ProtocolAdapterTransitionResponse.failure(fromState, toState);
56+
case Started -> ProtocolAdapterTransitionResponse.notChanged(fromState);
57+
case Stopping -> ProtocolAdapterTransitionResponse.success(fromState, toState);
58+
default -> ProtocolAdapterTransitionResponse.failure(fromState);
6459
};
6560
}
6661

67-
public static @NotNull ProtocolAdapterTransitionResponse transitionFromStopped(
62+
public static @NotNull ProtocolAdapterTransitionResponse transitionFromStopping(
6863
final @NotNull ProtocolAdapterState toState,
6964
final @NotNull ProtocolAdapterInstance instance) {
65+
final ProtocolAdapterState fromState = ProtocolAdapterState.Stopping;
7066
return switch (toState) {
71-
case Starting -> transitionFromStoppedToStarting(instance);
72-
case Started, Stopping -> transitionToError(ProtocolAdapterState.Stopped, toState);
73-
case Stopped -> transitionWithoutChanges(toState);
74-
case Error -> transitionFromStoppedToError(instance);
67+
case Starting, Started -> ProtocolAdapterTransitionResponse.failure(fromState, toState);
68+
case Stopping -> ProtocolAdapterTransitionResponse.notChanged(fromState);
69+
case Stopped -> ProtocolAdapterTransitionResponse.success(fromState, toState);
70+
default -> ProtocolAdapterTransitionResponse.failure(fromState);
7571
};
7672
}
7773

78-
public static ProtocolAdapterTransitionResponse transitionFromStoppedToError(final @NotNull ProtocolAdapterInstance instance) {
79-
try {
80-
// Do something to error.
81-
// instance.doSomething();
82-
return new ProtocolAdapterTransitionResponse(ProtocolAdapterState.Error);
83-
} catch (final Exception e) {
84-
return new ProtocolAdapterTransitionResponse(ProtocolAdapterState.Error,
85-
ProtocolAdapterTransitionStatus.Failure,
86-
"Failed transition from Stopped to Error.",
87-
e);
88-
}
89-
}
90-
91-
public static ProtocolAdapterTransitionResponse transitionFromStoppedToStarting(final @NotNull ProtocolAdapterInstance instance) {
92-
try {
93-
// Do something to start the protocol adapter.
94-
return new ProtocolAdapterTransitionResponse(ProtocolAdapterState.Starting);
95-
} catch (final Exception e) {
96-
return new ProtocolAdapterTransitionResponse(ProtocolAdapterState.Stopped,
97-
ProtocolAdapterTransitionStatus.Failure,
98-
"Failed transition from Stopped to Starting.",
99-
e);
100-
}
101-
}
102-
103-
public static @NotNull ProtocolAdapterTransitionResponse transitionWithoutChanges(final @NotNull ProtocolAdapterState toState) {
104-
return new ProtocolAdapterTransitionResponse(toState);
105-
}
106-
107-
public static @NotNull ProtocolAdapterTransitionResponse transitionToError(
108-
final @NotNull ProtocolAdapterState fromState,
109-
final @NotNull ProtocolAdapterState toState) {
110-
return new ProtocolAdapterTransitionResponse(ProtocolAdapterState.Error,
111-
ProtocolAdapterTransitionStatus.Failure,
112-
"Unable to transition from " + fromState + " to " + toState + ".",
113-
null);
114-
}
115-
116-
public static ProtocolAdapterTransitionResponse transitionFromStopping(
74+
public static @NotNull ProtocolAdapterTransitionResponse transitionFromStopped(
11775
final @NotNull ProtocolAdapterState toState,
11876
final @NotNull ProtocolAdapterInstance instance) {
77+
final ProtocolAdapterState fromState = ProtocolAdapterState.Stopped;
11978
return switch (toState) {
120-
case Starting -> new ProtocolAdapterTransitionResponse(ProtocolAdapterState.Starting);
121-
case Started -> new ProtocolAdapterTransitionResponse(ProtocolAdapterState.Started);
122-
case Stopping -> new ProtocolAdapterTransitionResponse(ProtocolAdapterState.Stopping);
123-
case Stopped -> new ProtocolAdapterTransitionResponse(ProtocolAdapterState.Stopped);
124-
default -> new ProtocolAdapterTransitionResponse(ProtocolAdapterState.Error);
79+
case Starting -> ProtocolAdapterTransitionResponse.success(fromState, toState);
80+
case Started, Stopping -> ProtocolAdapterTransitionResponse.failure(fromState, toState);
81+
case Stopped -> ProtocolAdapterTransitionResponse.notChanged(fromState);
82+
case Error -> ProtocolAdapterTransitionResponse.failure(fromState);
12583
};
12684
}
12785

128-
public static ProtocolAdapterTransitionResponse transitionFromError(
86+
public static @NotNull ProtocolAdapterTransitionResponse transitionFromError(
12987
final @NotNull ProtocolAdapterState toState,
13088
final @NotNull ProtocolAdapterInstance instance) {
89+
final ProtocolAdapterState fromState = ProtocolAdapterState.Error;
13190
return switch (toState) {
132-
case Starting -> new ProtocolAdapterTransitionResponse(ProtocolAdapterState.Starting);
133-
case Started -> new ProtocolAdapterTransitionResponse(ProtocolAdapterState.Started);
134-
case Stopping -> new ProtocolAdapterTransitionResponse(ProtocolAdapterState.Stopping);
135-
case Stopped -> new ProtocolAdapterTransitionResponse(ProtocolAdapterState.Stopped);
136-
default -> new ProtocolAdapterTransitionResponse(ProtocolAdapterState.Error);
91+
case Starting -> ProtocolAdapterTransitionResponse.success(fromState, toState);
92+
case Started, Stopping, Stopped -> ProtocolAdapterTransitionResponse.failure(fromState, toState);
93+
default -> ProtocolAdapterTransitionResponse.notChanged(toState);
13794
};
13895
}
13996

hivemq-edge/src/main/java/com/hivemq/protocols/fsm/ProtocolAdapterTransitionResponse.java

Lines changed: 53 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,58 @@
1818

1919
import org.jetbrains.annotations.NotNull;
2020

21-
public record ProtocolAdapterTransitionResponse(ProtocolAdapterState state, ProtocolAdapterTransitionStatus status,
22-
String message, Throwable error) {
23-
public ProtocolAdapterTransitionResponse(final @NotNull ProtocolAdapterState state) {
24-
this(state, ProtocolAdapterTransitionStatus.Success, null, null);
21+
import java.util.Map;
22+
23+
public record ProtocolAdapterTransitionResponse(ProtocolAdapterState fromState, ProtocolAdapterState toState,
24+
ProtocolAdapterTransitionStatus status, String message,
25+
Throwable error) {
26+
27+
public static final String FROM_STATE = "fromState";
28+
public static final String TO_STATE = "toState";
29+
public static final String STATE = "state";
30+
31+
public static ProtocolAdapterTransitionResponse success(
32+
final @NotNull ProtocolAdapterState fromState,
33+
final @NotNull ProtocolAdapterState toState) {
34+
return new ProtocolAdapterTransitionResponse(fromState,
35+
toState,
36+
ProtocolAdapterTransitionStatus.Success,
37+
I18nProtocolAdapterMessage.FSM_TRANSITION_SUCCESS_TRANSITIONED_FROM_STATE_TO_STATE.get(Map.of(FROM_STATE,
38+
fromState.name(),
39+
TO_STATE,
40+
toState.name())),
41+
null);
42+
}
43+
44+
public static ProtocolAdapterTransitionResponse notChanged(final @NotNull ProtocolAdapterState state) {
45+
return new ProtocolAdapterTransitionResponse(state,
46+
state,
47+
ProtocolAdapterTransitionStatus.NotChanged,
48+
I18nProtocolAdapterMessage.FSM_TRANSITION_SUCCESS_STATE_IS_NOT_TRANSITIONED.get(Map.of(STATE,
49+
state.name())),
50+
null);
51+
}
52+
53+
public static ProtocolAdapterTransitionResponse failure(final @NotNull ProtocolAdapterState state) {
54+
return new ProtocolAdapterTransitionResponse(state,
55+
ProtocolAdapterState.Error,
56+
ProtocolAdapterTransitionStatus.Failure,
57+
I18nProtocolAdapterMessage.FSM_TRANSITION_FAILURE_TRANSITIONED_FROM_STATE_TO_ERROR.get(Map.of(STATE,
58+
state.name())),
59+
null);
60+
}
61+
62+
public static ProtocolAdapterTransitionResponse failure(
63+
final @NotNull ProtocolAdapterState fromState,
64+
final @NotNull ProtocolAdapterState toState) {
65+
return new ProtocolAdapterTransitionResponse(fromState,
66+
toState,
67+
ProtocolAdapterTransitionStatus.Failure,
68+
I18nProtocolAdapterMessage.FSM_TRANSITION_FAILURE_UNABLE_TO_TRANSITION_FROM_STATE_TO_STATE.get(Map.of(
69+
FROM_STATE,
70+
fromState.name(),
71+
TO_STATE,
72+
toState.name())),
73+
null);
2574
}
2675
}

hivemq-edge/src/main/java/com/hivemq/protocols/fsm/ProtocolAdapterTransitionStatus.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,4 +19,5 @@
1919
public enum ProtocolAdapterTransitionStatus {
2020
Success,
2121
Failure,
22+
NotChanged,
2223
}
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
fsm.transition.failure.unable.to.transition.from.state.to.state=Unable to transition from ${fromState} to ${toState}.
2+
fsm.transition.failure.transitioned.from.state.to.error=Transitioned from ${state} to Error.
3+
fsm.transition.success.state.is.not.transitioned=${state} is not transitioned.
4+
fsm.transition.success.transitioned.from.state.to.state=Transitioned from ${fromState} to ${toState}.

0 commit comments

Comments
 (0)