1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.bremersee.comparator.spring.boot;
18
19 import java.util.Optional;
20 import org.apache.commons.logging.Log;
21 import org.apache.commons.logging.LogFactory;
22 import org.bremersee.comparator.model.SortOrderTextSeparators;
23 import org.bremersee.comparator.spring.converter.SortOrderConverter;
24 import org.bremersee.comparator.spring.converter.SortOrderItemConverter;
25 import org.bremersee.comparator.spring.mapper.SortMapper;
26 import org.springframework.boot.autoconfigure.AutoConfiguration;
27 import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
28 import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
29 import org.springframework.boot.context.event.ApplicationReadyEvent;
30 import org.springframework.boot.context.properties.EnableConfigurationProperties;
31 import org.springframework.context.annotation.Bean;
32 import org.springframework.context.event.EventListener;
33 import org.springframework.util.ClassUtils;
34 import org.springframework.util.StringUtils;
35
36
37
38
39
40
41 @ConditionalOnClass(name = {
42 "org.bremersee.comparator.spring.converter.SortOrderConverter",
43 "org.bremersee.comparator.spring.converter.SortOrderItemConverter",
44 "org.bremersee.comparator.spring.mapper.SortMapper"
45 })
46 @AutoConfiguration
47 @EnableConfigurationProperties(SortOrderConverterProperties.class)
48 public class SortOrderAutoConfiguration {
49
50 private static final Log log = LogFactory.getLog(SortOrderAutoConfiguration.class);
51
52 private final SortOrderTextSeparators separators;
53
54
55
56
57
58
59 public SortOrderAutoConfiguration(SortOrderConverterProperties properties) {
60 SortOrderTextSeparators defaults = SortOrderTextSeparators.defaults();
61 this.separators = SortOrderTextSeparators.builder()
62 .argumentSeparator(Optional.ofNullable(properties.getArgumentSeparator())
63 .filter(StringUtils::hasText)
64 .orElse(defaults.getArgumentSeparator()))
65 .chainSeparator(Optional.ofNullable(properties.getChainSeparator())
66 .filter(StringUtils::hasText)
67 .orElse(defaults.getChainSeparator()))
68 .build();
69 }
70
71
72
73
74 @EventListener(ApplicationReadyEvent.class)
75 public void init() {
76 log.info(String.format("""
77
78 *********************************************************************************
79 * %s
80 *********************************************************************************""",
81 ClassUtils.getUserClass(getClass()).getSimpleName()));
82 }
83
84
85
86
87
88
89 @ConditionalOnMissingBean
90 @Bean
91 public SortOrderConverter sortOrderConverter() {
92 return new SortOrderConverter(separators);
93 }
94
95
96
97
98
99
100 @ConditionalOnMissingBean
101 @Bean
102 public SortOrderItemConverter sortOrderItemConverter() {
103 return new SortOrderItemConverter(separators);
104 }
105
106
107
108
109
110
111
112 @ConditionalOnMissingBean
113 @Bean
114 public SortMapper defaultSortMapper(SortOrderConverter sortOrderConverter) {
115 return SortMapper.defaultSortMapper(sortOrderConverter);
116 }
117
118 }