Skip to content

Commit e04d465

Browse files
committed
enum conversion for filter.
1 parent 3a96147 commit e04d465

File tree

4 files changed

+21
-5
lines changed

4 files changed

+21
-5
lines changed

src/main/java/fr/fxjavadevblog/aid/api/genre/GenreConverterProvider.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import javax.ws.rs.ext.ParamConverterProvider;
88
import javax.ws.rs.ext.Provider;
99

10+
import org.apache.commons.beanutils.ConvertUtils;
1011
import org.slf4j.Logger;
1112
import org.slf4j.LoggerFactory;
1213

@@ -23,11 +24,12 @@
2324
public class GenreConverterProvider implements ParamConverterProvider
2425
{
2526
private static final Logger log = LoggerFactory.getLogger(GenreConverterProvider.class);
26-
private final ParamConverter<Genre> converter = GenericEnumConverter.of(Genre.class);
27+
private static final GenericEnumConverter<Genre> converter = GenericEnumConverter.of(Genre.class);
2728

2829
static
2930
{
30-
log.debug("Registering converter provider for Genre");
31+
log.debug("Registering converter provider for Genre (JAX-RS + ConvertUtils");
32+
ConvertUtils.register(converter, Genre.class);
3133
}
3234

3335
@SuppressWarnings("unchecked")

src/main/java/fr/fxjavadevblog/aid/utils/commons/StartupApplication.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
@Slf4j
1919
public class StartupApplication {
2020

21+
// embedding h2 webserver (web client) for dev purpose only.
2122
private Server h2Server;
2223

2324
@PostConstruct

src/main/java/fr/fxjavadevblog/aid/utils/jaxrs/converters/GenericEnumConverter.java

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
import javax.ws.rs.ext.ParamConverter;
77

8+
import org.apache.commons.beanutils.Converter;
89
import org.apache.commons.collections4.BidiMap;
910
import org.apache.commons.collections4.bidimap.DualHashBidiMap;
1011
import org.slf4j.Logger;
@@ -21,7 +22,7 @@
2122
* @param <T>
2223
*/
2324

24-
public class GenericEnumConverter<T extends Enum<T>> implements ParamConverter<T>
25+
public class GenericEnumConverter<T extends Enum<T>> implements ParamConverter<T>, Converter
2526
{
2627
private static final Logger log = LoggerFactory.getLogger(GenericEnumConverter.class);
2728

@@ -41,7 +42,7 @@ public class GenericEnumConverter<T extends Enum<T>> implements ParamConverter<T
4142
* @return
4243
* a generic converter used by JAX-RS.
4344
*/
44-
public static <T extends Enum<T>> ParamConverter<T> of(Class<T> t)
45+
public static <T extends Enum<T>> GenericEnumConverter<T> of(Class<T> t)
4546
{
4647
return new GenericEnumConverter<>(t);
4748
}
@@ -74,7 +75,7 @@ private GenericEnumConverter(Class<T> t)
7475
public T fromString(String value)
7576
{
7677
T returnedValue = biMap.inverseBidiMap().get(value);
77-
log.debug("Converting String \"{}\" to {}.{}", value, returnedValue.getClass(), returnedValue);
78+
log.debug("Converting String \"{}\" to {}", value, returnedValue);
7879
return returnedValue;
7980
}
8081

@@ -89,4 +90,10 @@ public String toString(T t)
8990
log.debug("Converting Enum {}.{} to String \"{}\"", t.getClass(), t, returnedValue);
9091
return returnedValue;
9192
}
93+
94+
@SuppressWarnings("unchecked")
95+
@Override
96+
public <U> U convert(Class<U> type, Object value) {
97+
return (U) fromString(value.toString());
98+
}
9299
}

src/main/java/fr/fxjavadevblog/aid/utils/jaxrs/filtering/Filtering.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import org.apache.commons.collections4.CollectionUtils;
2222

2323
import fr.fxjavadevblog.aid.api.exceptions.ApiException;
24+
import fr.fxjavadevblog.aid.utils.jaxrs.converters.GenericEnumConverter;
2425
import lombok.AllArgsConstructor;
2526
import lombok.Getter;
2627
import lombok.NoArgsConstructor;
@@ -149,12 +150,17 @@ private Filter createFilter(String paramName, String paramValue) throws NoSuchFi
149150
String operationValue = matcher.group(1);
150151
operation = operationAliases.get(operationValue);
151152
value = matcher.group(3);
153+
154+
152155
if (operation == Operation.LIKE)
153156
{
154157
value = "%"+value+"%";
155158
}
156159
}
157160

161+
// values mapped to enum are converted throw a specific converter
162+
// @see GenericEnumConverter and ConverterBootstrap.
163+
// otherwise the value is converted through standard converters.
158164
Object convertedValue = ConvertUtils.convert(value, targetType);
159165

160166
return Filter.builder()

0 commit comments

Comments
 (0)