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 lombok.extern.slf4j.Slf4j;
21 import org.bremersee.comparator.model.SortOrderTextSeparators;
22 import org.bremersee.comparator.spring.converter.SortOrderConverter;
23 import org.bremersee.comparator.spring.converter.SortOrderItemConverter;
24 import org.bremersee.comparator.spring.mapper.SortMapper;
25 import org.springframework.boot.autoconfigure.AutoConfiguration;
26 import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
27 import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
28 import org.springframework.boot.context.event.ApplicationReadyEvent;
29 import org.springframework.boot.context.properties.EnableConfigurationProperties;
30 import org.springframework.context.annotation.Bean;
31 import org.springframework.context.event.EventListener;
32 import org.springframework.util.ClassUtils;
33 import org.springframework.util.StringUtils;
34
35
36
37
38
39
40 @ConditionalOnClass(name = {
41 "org.bremersee.comparator.spring.converter.SortOrderConverter",
42 "org.bremersee.comparator.spring.converter.SortOrderItemConverter",
43 "org.bremersee.comparator.spring.mapper.SortMapper"
44 })
45 @AutoConfiguration
46 @EnableConfigurationProperties(SortOrderConverterProperties.class)
47 @Slf4j
48 public class SortOrderAutoConfiguration {
49
50 private final SortOrderTextSeparators separators;
51
52
53
54
55
56
57 public SortOrderAutoConfiguration(SortOrderConverterProperties properties) {
58 SortOrderTextSeparators defaults = SortOrderTextSeparators.defaults();
59 this.separators = SortOrderTextSeparators.builder()
60 .argumentSeparator(Optional.ofNullable(properties.getArgumentSeparator())
61 .filter(StringUtils::hasText)
62 .orElse(defaults.getArgumentSeparator()))
63 .chainSeparator(Optional.ofNullable(properties.getChainSeparator())
64 .filter(StringUtils::hasText)
65 .orElse(defaults.getChainSeparator()))
66 .build();
67 }
68
69
70
71
72 @EventListener(ApplicationReadyEvent.class)
73 public void init() {
74 log.info("""
75
76 *********************************************************************************
77 * {}
78 *********************************************************************************""",
79 ClassUtils.getUserClass(getClass()).getSimpleName());
80 }
81
82
83
84
85
86
87 @ConditionalOnMissingBean
88 @Bean
89 public SortOrderConverter sortOrderConverter() {
90 return new SortOrderConverter(separators);
91 }
92
93
94
95
96
97
98 @ConditionalOnMissingBean
99 @Bean
100 public SortOrderItemConverter sortOrderItemConverter() {
101 return new SortOrderItemConverter(separators);
102 }
103
104
105
106
107
108
109
110 @ConditionalOnMissingBean
111 @Bean
112 public SortMapper defaultSortMapper(SortOrderConverter sortOrderConverter) {
113 return SortMapper.defaultSortMapper(sortOrderConverter);
114 }
115
116 }