Skip to content

Commit 5d303d2

Browse files
committed
Add localization support
1 parent 07ebeb1 commit 5d303d2

20 files changed

+174
-38
lines changed

vaadin-grid-filter/src/main/java/software/xdev/vaadin/gridfilter/AddFilterComponentsButtons.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ public AddFilterComponentsButtons()
3636
}
3737

3838
public void update(
39+
final GridFilterLocalizationConfig localizationConfig,
3940
final Collection<FilterComponentSupplier> filterComponentSuppliers,
4041
final Consumer<FilterComponentSupplier> onAddButtonClicked,
4142
final int nestedDepth,
@@ -46,7 +47,10 @@ public void update(
4647
.filter(s -> nestedDepth < maxNestedDepth || !s.canCreateNested())
4748
.map(s -> {
4849
final Button btn =
49-
new Button(s.display(), VaadinIcon.PLUS.create(), ev -> onAddButtonClicked.accept(s));
50+
new Button(
51+
localizationConfig.getTranslation(s.displayKey(), this),
52+
VaadinIcon.PLUS.create(),
53+
ev -> onAddButtonClicked.accept(s));
5054
btn.addThemeVariants(ButtonVariant.LUMO_SMALL);
5155
btn.addClassNames(GridFilterStyles.ADD_FILTER_COMPONENTS_BUTTONS_BUTTON);
5256
return btn;

vaadin-grid-filter/src/main/java/software/xdev/vaadin/gridfilter/FilterableField.java

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -20,17 +20,15 @@
2020

2121
public record FilterableField<I, T>(
2222
String name,
23+
String identifier,
2324
Function<I, T> keyExtractor,
2425
Class<T> clazz)
2526
{
26-
public String identifier()
27+
public FilterableField
2728
{
28-
return this.name().chars()
29-
.filter(c -> Character.isLetter(c) || Character.isDigit(c))
30-
.collect(
31-
() -> new StringBuilder(this.name().length()),
32-
StringBuilder::appendCodePoint,
33-
StringBuilder::append)
34-
.toString();
29+
if(this.name().chars().anyMatch(c -> !Character.isLetter(c) && !Character.isDigit(c)))
30+
{
31+
throw new IllegalArgumentException("identifier needs to be alphanumeric");
32+
}
3533
}
3634
}

vaadin-grid-filter/src/main/java/software/xdev/vaadin/gridfilter/GridFilter.java

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -86,8 +86,8 @@ public class GridFilter<T>
8686
new HashMap<>();
8787
protected final List<FilterComponentSupplier> filterComponentSuppliers = new ArrayList<>();
8888
protected final List<FilterableField<T, ?>> filterableFields = new ArrayList<>();
89-
9089
protected int maxNestedDepth = 10;
90+
protected GridFilterLocalizationConfig localizationConfig = new GridFilterLocalizationConfig();
9191

9292
protected final Map<Operation<?>, List<TypeValueComponentProvider<?>>> cacheOperationTypeValueComponents =
9393
Collections.synchronizedMap(new LinkedHashMap<>());
@@ -116,6 +116,7 @@ public GridFilter(final Grid<T> grid)
116116
public FilterComponent<T, ?> addFilterComponent(final FilterComponentSupplier supplier)
117117
{
118118
final FilterComponent<T, ?> filterComponent = supplier.create(
119+
this.localizationConfig,
119120
this.filterableFields,
120121
this::getForField,
121122
this.valueReUseAdapters,
@@ -153,6 +154,7 @@ public FilterChangedEvent(final GridFilter<T> source, final boolean fromClient)
153154
protected void onAttach(final AttachEvent attachEvent)
154155
{
155156
this.addFilterComponentButtons.update(
157+
this.localizationConfig,
156158
this.filterComponentSuppliers,
157159
this::addFilterComponent,
158160
START_DEPTH,
@@ -313,7 +315,17 @@ public <S> GridFilter<T> withFilterableField(
313315
final Function<T, S> keyExtractor,
314316
final Class<S> clazz)
315317
{
316-
this.filterableFields.add(new FilterableField<>(name, keyExtractor, clazz));
318+
final String identifier
319+
return this.withFilterableField(name, null, keyExtractor, clazz);
320+
}
321+
322+
public <S> GridFilter<T> withFilterableField(
323+
final String name,
324+
final String identifier,
325+
final Function<T, S> keyExtractor,
326+
final Class<S> clazz)
327+
{
328+
this.filterableFields.add(new FilterableField<>(name, identifier, keyExtractor, clazz));
317329
return this;
318330
}
319331

@@ -327,6 +339,12 @@ public GridFilter<T> withMaxNestedDepth(final int maxNestedDepth)
327339
return this;
328340
}
329341

342+
public GridFilter<T> withLocalizationConfig(final GridFilterLocalizationConfig localizationConfig)
343+
{
344+
this.localizationConfig = localizationConfig;
345+
return this;
346+
}
347+
330348
// endregion
331349

332350
public static <T> GridFilter<T> createDefault(final Grid<T> grid)
Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
package software.xdev.vaadin.gridfilter;
2+
3+
import static java.util.Map.entry;
4+
5+
import java.util.HashMap;
6+
import java.util.Map;
7+
import java.util.function.BiFunction;
8+
9+
import com.vaadin.flow.component.Component;
10+
11+
12+
public class GridFilterLocalizationConfig
13+
{
14+
public static final String PREFIX = "gridfilter.";
15+
16+
public static final String PREFIX_OP = PREFIX + "op.";
17+
public static final String OP_EQUALS = PREFIX_OP + "equals";
18+
public static final String OP_CONTAINS = PREFIX_OP + "contains";
19+
public static final String OP_GREATER_THAN = PREFIX_OP + "gt";
20+
public static final String OP_LESS_THAN = PREFIX_OP + "lt";
21+
public static final String OP_IS_EMPTY = PREFIX_OP + "empty";
22+
23+
public static final String PREFIX_BLOCK = PREFIX + "block.";
24+
public static final String BLOCK_OR = PREFIX_BLOCK + "or";
25+
public static final String BLOCK_AND = PREFIX_BLOCK + "and";
26+
public static final String BLOCK_NOT = PREFIX_BLOCK + "not";
27+
public static final String CONDITION = PREFIX + "condition";
28+
29+
// Key, Default Value
30+
public static final Map<String, String> DEFAULT_VALUES = Map.ofEntries(
31+
// Operation
32+
entry(OP_EQUALS, "="),
33+
entry(OP_CONTAINS, "contains"),
34+
entry(OP_GREATER_THAN, ">"),
35+
entry(OP_LESS_THAN, "<"),
36+
entry(OP_IS_EMPTY, "is empty"),
37+
// Block
38+
entry(BLOCK_OR, "OR"),
39+
entry(BLOCK_AND, "AND"),
40+
entry(BLOCK_NOT, "NOT"),
41+
entry(CONDITION, "condition")
42+
);
43+
44+
// Key, Resolver
45+
protected final Map<String, BiFunction<Component, String, String>> keyResolvers = new HashMap<>();
46+
47+
public GridFilterLocalizationConfig withAll(final Map<String, String> keyValues)
48+
{
49+
keyValues.forEach(this::with);
50+
return this;
51+
}
52+
53+
public GridFilterLocalizationConfig with(final String key, final String value)
54+
{
55+
this.getKeyResolvers().put(key, (c, k) -> value);
56+
return this;
57+
}
58+
59+
public GridFilterLocalizationConfig withTranslation(final String key, final String i18nKey)
60+
{
61+
this.getKeyResolvers().put(
62+
key,
63+
(c, k) -> c.getTranslation(i18nKey));
64+
return this;
65+
}
66+
67+
public String getTranslation(final String key, final Component caller)
68+
{
69+
final BiFunction<Component, String, String> resolver = this.getKeyResolvers().get(key);
70+
if(resolver == null)
71+
{
72+
final String defaultValue = DEFAULT_VALUES.get(key);
73+
return defaultValue != null ? defaultValue : key;
74+
}
75+
return resolver.apply(caller, key);
76+
}
77+
78+
public Map<String, BiFunction<Component, String, String>> getKeyResolvers()
79+
{
80+
return this.keyResolvers;
81+
}
82+
}

vaadin-grid-filter/src/main/java/software/xdev/vaadin/gridfilter/business/operation/ContainsOp.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,15 @@
1515
*/
1616
package software.xdev.vaadin.gridfilter.business.operation;
1717

18+
import software.xdev.vaadin.gridfilter.GridFilterLocalizationConfig;
1819
import software.xdev.vaadin.gridfilter.business.value.SingleValue;
1920

2021

2122
public class ContainsOp extends SingleValueOperation<String>
2223
{
2324
public ContainsOp()
2425
{
25-
super(String.class, "contains");
26+
super(String.class, "contains", GridFilterLocalizationConfig.OP_CONTAINS);
2627
}
2728

2829
@Override

vaadin-grid-filter/src/main/java/software/xdev/vaadin/gridfilter/business/operation/EqualsOp.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,15 @@
1717

1818
import java.util.Objects;
1919

20+
import software.xdev.vaadin.gridfilter.GridFilterLocalizationConfig;
2021
import software.xdev.vaadin.gridfilter.business.value.SingleValue;
2122

2223

2324
public class EqualsOp extends SingleValueOperation<Object>
2425
{
2526
public EqualsOp()
2627
{
27-
super(Object.class, "=");
28+
super(Object.class, "=", GridFilterLocalizationConfig.OP_EQUALS);
2829
}
2930

3031
@Override

vaadin-grid-filter/src/main/java/software/xdev/vaadin/gridfilter/business/operation/GreaterThanOp.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
*/
1616
package software.xdev.vaadin.gridfilter.business.operation;
1717

18+
import software.xdev.vaadin.gridfilter.GridFilterLocalizationConfig;
1819
import software.xdev.vaadin.gridfilter.business.value.SingleValue;
1920

2021

@@ -23,7 +24,7 @@ public class GreaterThanOp extends SingleValueComparableOperation
2324
{
2425
public GreaterThanOp()
2526
{
26-
super(">");
27+
super(">", GridFilterLocalizationConfig.OP_GREATER_THAN);
2728
}
2829

2930
@SuppressWarnings("unchecked")

vaadin-grid-filter/src/main/java/software/xdev/vaadin/gridfilter/business/operation/IsEmptyOp.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
*/
1616
package software.xdev.vaadin.gridfilter.business.operation;
1717

18+
import software.xdev.vaadin.gridfilter.GridFilterLocalizationConfig;
1819
import software.xdev.vaadin.gridfilter.business.value.NoValue;
1920

2021

@@ -38,6 +39,12 @@ public String identifier()
3839
return "is empty";
3940
}
4041

42+
@Override
43+
public String displayKey()
44+
{
45+
return GridFilterLocalizationConfig.OP_IS_EMPTY;
46+
}
47+
4148
@Override
4249
public boolean test(final Object input, final NoValue filterValue)
4350
{

vaadin-grid-filter/src/main/java/software/xdev/vaadin/gridfilter/business/operation/LessThanOp.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
*/
1616
package software.xdev.vaadin.gridfilter.business.operation;
1717

18+
import software.xdev.vaadin.gridfilter.GridFilterLocalizationConfig;
1819
import software.xdev.vaadin.gridfilter.business.value.SingleValue;
1920

2021

@@ -23,7 +24,7 @@ public class LessThanOp extends SingleValueComparableOperation
2324
{
2425
public LessThanOp()
2526
{
26-
super("<");
27+
super("<", GridFilterLocalizationConfig.OP_LESS_THAN);
2728
}
2829

2930
@SuppressWarnings("unchecked")

vaadin-grid-filter/src/main/java/software/xdev/vaadin/gridfilter/business/operation/Operation.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@ public interface Operation<V extends ValueContainer>
2626

2727
String identifier();
2828

29+
String displayKey();
30+
2931
boolean test(Object input, V filterValue);
3032

3133
@SuppressWarnings("unchecked")

0 commit comments

Comments
 (0)