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.framework.databinding.converter;
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
58 public class MultiItemToLinkConverter<PRESENTATION, MODEL> implements Converter<Set<PRESENTATION>, Set<MODEL>> {
59
60 private static final Logger log = LoggerFactory.getLogger(MultiItemToLinkConverter.class);
61
62 private Converter delegate;
63
64 public MultiItemToLinkConverter(Converter delegate) {
65 Objects.requireNonNull(delegate);
66 this.delegate = delegate;
67 }
68
69 @Override
70 public Result<Set<MODEL>> convertToModel(Set<PRESENTATION> value, ValueContext context) {
71 if (CollectionUtils.isEmpty(value)) {
72 return Result.ok(Collections.emptySet());
73 }
74 return Result.ok(value.stream().map(val -> getModelSafely(val, context)).filter(Objects::nonNull).collect(Collectors.toSet()));
75 }
76
77 @Override
78 public Set<PRESENTATION> convertToPresentation(Set<MODEL> value, ValueContext context) {
79 if (CollectionUtils.isEmpty(value)) {
80 return Collections.emptySet();
81 }
82 return (Set<PRESENTATION>) value.stream().map(v -> delegate.convertToPresentation(v, context)).collect(Collectors.toSet());
83 }
84
85 private MODEL getModelSafely(PRESENTATION value, ValueContext context) {
86 try {
87 return (MODEL) delegate.convertToModel(value, context).getOrThrow(e -> new IllegalArgumentException(String.valueOf(e)));
88 } catch (Throwable throwable) {
89 log.info(throwable.getMessage());
90 return null;
91 }
92 }
93 }