1 package fr.ifremer.tutti.ui.swing.content.protocol;
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 import com.google.common.base.Predicate;
28 import fr.ifremer.tutti.persistence.entities.referential.Caracteristic;
29 import jaxx.runtime.swing.editor.bean.BeanDoubleList;
30 import org.apache.commons.lang3.mutable.MutableInt;
31
32 import javax.swing.JList;
33 import java.util.Collection;
34 import java.util.List;
35 import java.util.Map;
36 import java.util.Objects;
37 import java.util.TreeMap;
38
39
40
41
42
43
44
45
46
47 public class CaracteristicsCount {
48
49 public void attachPredicateToUi(BeanDoubleList<Caracteristic> ui) {
50 Predicate<List<Caracteristic>> listPredicate = input -> {
51 JList<Caracteristic> selectedList = ui.getSelectedList();
52 List<Caracteristic> selectedValuesList = selectedList.getSelectedValuesList();
53 for (Caracteristic caracteristic : selectedValuesList) {
54 if (isCaracteristicUsed(caracteristic)) {
55 return false;
56 }
57 }
58 return true;
59 };
60 ui.getModel().addCanRemoveItemsPredicate(listPredicate);
61
62 }
63
64 private final MutableInt ZERO = new MutableInt();
65
66 private final Map<Integer, MutableInt> counts = new TreeMap<>();
67
68 public boolean isCaracteristicUsed(Caracteristic caracteristic) {
69 Objects.requireNonNull(caracteristic);
70 MutableInt result = counts.getOrDefault(caracteristic.getIdAsInt(), ZERO);
71 return result.intValue() > 0;
72 }
73
74 public void addCaracteristic(Caracteristic caracteristic) {
75 Objects.requireNonNull(caracteristic);
76 counts.compute(caracteristic.getIdAsInt(), (k, v) -> {
77 if (v == null) {
78 return new MutableInt(1);
79 } else {
80 v.increment();
81 return v;
82 }
83 });
84
85 }
86
87 public void removeCaracteristic(Caracteristic caracteristic) {
88 Objects.requireNonNull(caracteristic);
89 counts.compute(caracteristic.getIdAsInt(), (k, v) -> {
90 if (v == null || v.intValue() == 1) {
91 return null;
92 } else {
93 v.decrement();
94 return v;
95 }
96 });
97
98 }
99
100 public void removeCaracteristics(Collection<Caracteristic> caracteristics) {
101 Objects.requireNonNull(caracteristics);
102 caracteristics.forEach(this::removeCaracteristic);
103 }
104
105 }