1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 package info.magnolia.ui.editor;
35
36 import java.util.Collections;
37 import java.util.Objects;
38 import java.util.Set;
39 import java.util.stream.Collectors;
40
41 import org.apache.commons.collections4.CollectionUtils;
42 import org.slf4j.Logger;
43 import org.slf4j.LoggerFactory;
44
45 import com.vaadin.data.Converter;
46 import com.vaadin.data.Result;
47 import com.vaadin.data.ValueContext;
48
49
50
51
52
53
54
55
56
57 public class MultiItemConverter<PRESENTATION, MODEL> implements Converter<Set<PRESENTATION>, Set<MODEL>> {
58
59 private static final Logger log = LoggerFactory.getLogger(MultiItemConverter.class);
60
61 private Converter delegate;
62
63 public MultiItemConverter(Converter delegate) {
64 Objects.requireNonNull(delegate);
65 this.delegate = delegate;
66 }
67
68 @Override
69 public Result<Set<MODEL>> convertToModel(Set<PRESENTATION> value, ValueContext context) {
70 if (CollectionUtils.isEmpty(value)) {
71 return Result.ok(Collections.emptySet());
72 }
73 return Result.ok(value.stream().map(val -> getModelSafely(val, context)).filter(Objects::nonNull).collect(Collectors.toSet()));
74 }
75
76 @Override
77 public Set<PRESENTATION> convertToPresentation(Set<MODEL> value, ValueContext context) {
78 if (CollectionUtils.isEmpty(value)) {
79 return Collections.emptySet();
80 }
81 return (Set<PRESENTATION>) value.stream().map(v -> delegate.convertToPresentation(v, context)).collect(Collectors.toSet());
82 }
83
84 private MODEL getModelSafely(PRESENTATION value, ValueContext context) {
85 try {
86 return (MODEL) delegate.convertToModel(value, context).getOrThrow(e -> new IllegalArgumentException(String.valueOf(e)));
87 } catch (Throwable throwable) {
88 log.info(throwable.getMessage());
89 return null;
90 }
91 }
92 }