Skip to content

Commit 1104f12

Browse files
committed
use I18nOutputSerializer
1 parent 4b6f55f commit 1104f12

6 files changed

Lines changed: 45 additions & 33 deletions

File tree

server/odc-common/src/main/java/com/oceanbase/odc/common/i18n/I18nOutputSerializer.java

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,26 +16,28 @@
1616
package com.oceanbase.odc.common.i18n;
1717

1818
import java.io.IOException;
19-
import java.util.HashMap;
2019
import java.util.Locale;
2120
import java.util.Map;
21+
import java.util.concurrent.ConcurrentHashMap;
2222
import java.util.regex.Matcher;
2323
import java.util.regex.Pattern;
2424

2525
import org.apache.commons.text.StringSubstitutor;
2626
import org.springframework.context.i18n.LocaleContextHolder;
27+
import org.springframework.stereotype.Component;
2728

2829
import com.fasterxml.jackson.core.JsonGenerator;
2930
import com.fasterxml.jackson.databind.JsonSerializer;
3031
import com.fasterxml.jackson.databind.SerializerProvider;
3132

33+
@Component
3234
public class I18nOutputSerializer extends JsonSerializer<String> {
3335
private static final Pattern I18N_RESOURCE_PATTERN = Pattern.compile("\\$\\{([^{^}]*)\\}");
34-
private static final Map<Locale, Map<String, String>> MESSAGES_MAP = new HashMap<>();
36+
private static final Map<Locale, Map<String, String>> MESSAGES_MAP = new ConcurrentHashMap<>();
3537

3638
@Override
3739
public void serialize(String value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
38-
gen.writeString(convertString(value));
40+
gen.writeString(convertString(value, null));
3941
}
4042

4143
/**
@@ -44,14 +46,19 @@ public void serialize(String value, JsonGenerator gen, SerializerProvider serial
4446
* @param resource
4547
* @return
4648
*/
47-
protected String convertString(String resource) {
49+
public String convertString(String resource, Locale currentLocale) {
4850
Matcher matcher = I18N_RESOURCE_PATTERN.matcher(resource);
4951
if (!matcher.find()) {
5052
return resource;
5153
}
52-
53-
Locale currentLocale = LocaleContextHolder.getLocale();
54-
MESSAGES_MAP.putIfAbsent(currentLocale, new HashMap<>());
54+
/**
55+
* The local value of the multi-database subticket must be the same as that used when the father
56+
* ticket is created
57+
*/
58+
if (currentLocale == null) {
59+
currentLocale = LocaleContextHolder.getLocale();
60+
}
61+
MESSAGES_MAP.putIfAbsent(currentLocale, new ConcurrentHashMap<>());
5562
int cursor = 0;
5663
while (matcher.find(cursor)) {
5764
String key = matcher.group();

server/odc-service/src/main/java/com/oceanbase/odc/config/BeanConfiguration.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import javax.annotation.PostConstruct;
2525
import javax.validation.constraints.NotBlank;
2626

27+
import org.springframework.beans.factory.annotation.Autowired;
2728
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
2829
import org.springframework.context.annotation.Bean;
2930
import org.springframework.context.annotation.Configuration;
@@ -72,6 +73,8 @@
7273
@Slf4j
7374
@Configuration
7475
public class BeanConfiguration {
76+
@Autowired
77+
private I18nOutputSerializer i18nOutputSerializer;
7578

7679
@Bean
7780
public PasswordEncoder passwordEncoder() {
@@ -81,7 +84,7 @@ public PasswordEncoder passwordEncoder() {
8184
@Bean
8285
public ObjectMapper objectMapper(SensitivePropertyHandler sensitivePropertyHandler) {
8386
CustomOutputSerializer customOutputSerializer = new CustomOutputSerializer()
84-
.addSerializer(Internationalizable.class, new I18nOutputSerializer())
87+
.addSerializer(Internationalizable.class, i18nOutputSerializer)
8588
.addSerializer(SensitiveOutput.class, new SensitiveOutputSerializer(input -> DEFAULT_MASK_VALUE));
8689
SimpleModule dialectTypeModule =
8790
new SimpleModule().addSerializer(DialectType.class, new DialectTypeOutputSerializer());

server/odc-service/src/main/java/com/oceanbase/odc/service/databasechange/MultipleDatabaseChangePreprocessor.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,8 @@ public class MultipleDatabaseChangePreprocessor implements Preprocessor {
6060
private DatabaseChangeChangingOrderTemplateService templateService;
6161
@Autowired
6262
private FlowTaskProperties flowTaskProperties;
63+
@Autowired
64+
private DescriptionGenerator descriptionGenerator;
6365

6466
@Override
6567
public void process(CreateFlowInstanceReq req) {
@@ -87,7 +89,7 @@ public void process(CreateFlowInstanceReq req) {
8789
parameters.setDatabases(databases.stream().map(DatabaseChangeDatabase::new).collect(Collectors.toList()));
8890
req.setProjectId(parameters.getProjectId());
8991
req.setProjectName(project.getName());
90-
DescriptionGenerator.generateDescription(req);
92+
descriptionGenerator.generateDescription(req);
9193
// Localization of father-son ticket is consistent
9294
Locale locale = LocaleContextHolder.getLocale();
9395
parameters.setLocale(locale);

server/odc-service/src/main/java/com/oceanbase/odc/service/flow/processor/CreateFlowInstanceProcessAspect.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,8 @@ public class CreateFlowInstanceProcessAspect implements InitializingBean {
6969
private List<Preprocessor> preprocessors;
7070
@Autowired
7171
private ProjectService projectService;
72+
@Autowired
73+
private DescriptionGenerator descriptionGenerator;
7274

7375
private final Map<JobType, Preprocessor> scheduleTaskPreprocessors = new HashMap<>();
7476

@@ -157,7 +159,7 @@ private void adaptCreateFlowInstanceReq(CreateFlowInstanceReq req) {
157159
req.setDatabaseName(database.getName());
158160
req.setEnvironmentId(database.getDataSource().getEnvironmentId());
159161
req.setEnvironmentName(database.getEnvironment().getName());
160-
DescriptionGenerator.generateDescription(req);
162+
descriptionGenerator.generateDescription(req);
161163
if (req.getTaskType() == TaskType.EXPORT) {
162164
DataTransferConfig config = (DataTransferConfig) req.getParameters();
163165
config.setDatabaseId(req.getDatabaseId());

server/odc-service/src/main/java/com/oceanbase/odc/service/flow/task/MultipleDatabaseChangeRuntimeFlowableTask.java

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,9 @@
2828
import org.springframework.data.domain.Page;
2929
import org.springframework.data.domain.Pageable;
3030

31+
import com.fasterxml.jackson.databind.ObjectMapper;
3132
import com.oceanbase.odc.common.i18n.I18n;
33+
import com.oceanbase.odc.common.i18n.I18nOutputSerializer;
3234
import com.oceanbase.odc.common.json.JsonUtils;
3335
import com.oceanbase.odc.core.shared.constant.FlowStatus;
3436
import com.oceanbase.odc.core.shared.constant.TaskErrorStrategy;
@@ -49,7 +51,6 @@
4951
import com.oceanbase.odc.service.flow.model.QueryFlowInstanceParams;
5052
import com.oceanbase.odc.service.flow.task.model.MultipleDatabaseChangeParameters;
5153
import com.oceanbase.odc.service.flow.task.model.MultipleDatabaseChangeTaskResult;
52-
import com.oceanbase.odc.service.flow.util.DescriptionGenerator;
5354
import com.oceanbase.odc.service.flow.util.FlowTaskUtil;
5455
import com.oceanbase.odc.service.iam.model.User;
5556
import com.oceanbase.odc.service.iam.util.SecurityContextUtils;
@@ -72,13 +73,16 @@ public class MultipleDatabaseChangeRuntimeFlowableTask extends BaseODCFlowTaskDe
7273
private volatile Integer batchId;
7374
private volatile FlowTaskExecutionStrategy flowTaskExecutionStrategy;
7475
private Integer batchSum;
76+
private ObjectMapper objectMapper;
7577

7678
@Autowired
7779
private FlowInstanceService flowInstanceService;
7880
@Autowired
7981
private FlowInstanceRepository flowInstanceRepository;
8082
@Autowired
8183
private ServiceTaskInstanceRepository serviceTaskInstanceRepository;
84+
@Autowired
85+
private I18nOutputSerializer i18nOutputSerializer;
8286

8387
@Override
8488
public boolean cancel(boolean mayInterruptIfRunning, Long taskId, TaskService taskService) {
@@ -339,10 +343,10 @@ private String generateDescription(Locale locale, DatabaseChangeDatabase databas
339343
String i18nKey = "com.oceanbase.odc.builtin-resource.multiple-async.sub-ticket.description";
340344
String description = I18n.translate(
341345
i18nKey,
342-
new Object[] {DescriptionGenerator.localEnvName(database.getEnvironment().getName(), locale),
346+
new Object[] {database.getEnvironment().getName(),
343347
flowInstanceId, batchId + 1,
344348
database.getDataSource().getName(), database.getName()},
345349
locale);
346-
return description;
350+
return i18nOutputSerializer.convertString(description, locale);
347351
}
348352
}

server/odc-service/src/main/java/com/oceanbase/odc/service/flow/util/DescriptionGenerator.java

Lines changed: 14 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,12 @@
1616
package com.oceanbase.odc.service.flow.util;
1717

1818
import java.util.List;
19-
import java.util.Locale;
2019
import java.util.stream.Collectors;
2120

22-
import javax.validation.constraints.NotNull;
21+
import org.springframework.beans.factory.annotation.Autowired;
22+
import org.springframework.stereotype.Component;
2323

24-
import org.springframework.context.i18n.LocaleContextHolder;
25-
26-
import com.oceanbase.odc.common.i18n.I18n;
24+
import com.oceanbase.odc.common.i18n.I18nOutputSerializer;
2725
import com.oceanbase.odc.common.util.StringUtils;
2826
import com.oceanbase.odc.core.shared.constant.Symbols;
2927
import com.oceanbase.odc.core.shared.constant.TaskType;
@@ -36,33 +34,29 @@
3634
* @Date: 2023/8/4 11:22
3735
* @Descripition:
3836
*/
37+
@Component
3938
public class DescriptionGenerator {
39+
@Autowired
40+
private I18nOutputSerializer i18nOutputSerializer;
4041

41-
public static void generateDescription(CreateFlowInstanceReq req) {
42-
Locale locale = LocaleContextHolder.getLocale();
42+
public void generateDescription(CreateFlowInstanceReq req) {
4343
if (StringUtils.isEmpty(req.getDescription())) {
4444
// descriptions is recommended for localization.Facilitate fuzzy query
45-
String descFormat = Symbols.LEFT_BRACKET.getLocalizedMessage() + "%s"
46-
+ Symbols.RIGHT_BRACKET.getLocalizedMessage() + "%s.%s";
45+
String descFormat = Symbols.LEFT_BRACKET.i18nKey() + "%s"
46+
+ Symbols.RIGHT_BRACKET.i18nKey() + "%s.%s";
4747
if (req.getTaskType() == TaskType.MULTIPLE_ASYNC) {
4848
MultipleDatabaseChangeParameters parameters = (MultipleDatabaseChangeParameters) req.getParameters();
4949
List<DatabaseChangeDatabase> databases = parameters.getDatabases();
5050
String description = databases.stream()
51-
.map(db -> String.format(descFormat, localEnvName(db.getEnvironment().getName(), locale),
51+
.map(db -> String.format(descFormat, db.getEnvironment().getName(),
5252
db.getDataSource().getName(), db.getName()))
5353
.collect(Collectors.joining(Symbols.COMMA.getLocalizedMessage()));
54-
req.setDescription(description);
54+
req.setDescription(i18nOutputSerializer.convertString(description, null));
5555
} else {
56-
req.setDescription(String.format(descFormat,
57-
localEnvName(req.getEnvironmentName(), locale), req.getConnectionName(),
58-
req.getDatabaseName()));
56+
req.setDescription(i18nOutputSerializer.convertString(String.format(descFormat,
57+
req.getEnvironmentName(), req.getConnectionName(),
58+
req.getDatabaseName()), null));
5959
}
6060
}
6161
}
62-
63-
public static String localEnvName(@NotNull String envName, @NotNull Locale locale) {
64-
String envKey = envName.substring(2, envName.length() - 1);
65-
return I18n.translate(envKey, null, envKey, locale);
66-
}
67-
6862
}

0 commit comments

Comments
 (0)