1 | package geniusweb.domaineditor.model.profile;
|
---|
2 |
|
---|
3 | import java.math.BigDecimal;
|
---|
4 | import java.util.HashMap;
|
---|
5 | import java.util.Map;
|
---|
6 |
|
---|
7 | import geniusweb.domaineditor.model.DiscreteValueSetModel;
|
---|
8 | import geniusweb.issuevalue.DiscreteValue;
|
---|
9 | import geniusweb.profile.utilityspace.DiscreteValueSetUtilities;
|
---|
10 | import geniusweb.profile.utilityspace.ValueSetUtilities;
|
---|
11 | import tudelft.utilities.listener.DefaultListenable;
|
---|
12 | import tudelft.utilities.logging.Reporter;
|
---|
13 | import tudelft.utilities.mvc.model.ListModel;
|
---|
14 | import tudelft.utilities.mvc.model.MapModel;
|
---|
15 | import tudelft.utilities.mvc.model.NumberModel;
|
---|
16 | import tudelft.utilities.mvc.model.RestrictedNumberModel;
|
---|
17 | import tudelft.utilities.mvc.model.StringModel;
|
---|
18 | import tudelft.utilities.mvc.model.events.Event;
|
---|
19 | import tudelft.utilities.mvc.panels.PopupReporter;
|
---|
20 |
|
---|
21 | /**
|
---|
22 | *
|
---|
23 | * Contains info for a {@link DiscreteValueSetUtilities} as a map. The keys of
|
---|
24 | * the map are the issuevalues in the {@link DiscreteValueSetModel}, the values
|
---|
25 | * are the utilities stored in this model.
|
---|
26 | *
|
---|
27 | */
|
---|
28 | public class DiscreteValueSetUtilitiesModel extends DefaultListenable<Event>
|
---|
29 | implements MapModel<StringModel, RestrictedNumberModel>,
|
---|
30 | ValueSetUtilitiesModel {
|
---|
31 | private final ListModel<StringModel> values;
|
---|
32 | private final Map<StringModel, RestrictedNumberModel> utilities = new HashMap<>();
|
---|
33 | private final Reporter log;
|
---|
34 | private static final BigDecimal DEFAULT = new BigDecimal("0.5");
|
---|
35 | // this reporter in theory is never used.
|
---|
36 | // it's connected to values that never change
|
---|
37 | private final static Reporter dummylog = new PopupReporter(null);
|
---|
38 | private final static NumberModel LOW = new NumberModel(BigDecimal.ZERO,
|
---|
39 | dummylog);
|
---|
40 | private final static NumberModel HIGH = new NumberModel(BigDecimal.ONE,
|
---|
41 | dummylog);
|
---|
42 |
|
---|
43 | public DiscreteValueSetUtilitiesModel(DiscreteValueSetModel values,
|
---|
44 | Reporter log) {
|
---|
45 | this.values = values.getList();
|
---|
46 | this.log = log;
|
---|
47 | }
|
---|
48 |
|
---|
49 | @Override
|
---|
50 | public RestrictedNumberModel getValue(StringModel key) {
|
---|
51 | if (!utilities.containsKey(key)) {
|
---|
52 | utilities.put(key,
|
---|
53 | new RestrictedNumberModel(DEFAULT, LOW, HIGH, log));
|
---|
54 | }
|
---|
55 | return utilities.get(key);
|
---|
56 | }
|
---|
57 |
|
---|
58 | @Override
|
---|
59 | public void put(StringModel key, RestrictedNumberModel val) {
|
---|
60 | throw new UnsupportedOperationException();
|
---|
61 | }
|
---|
62 |
|
---|
63 | @Override
|
---|
64 | public void remove(StringModel key) {
|
---|
65 | throw new UnsupportedOperationException();
|
---|
66 | }
|
---|
67 |
|
---|
68 | @Override
|
---|
69 | public ListModel<StringModel> getKeys() {
|
---|
70 | return values;
|
---|
71 | }
|
---|
72 |
|
---|
73 | @Override
|
---|
74 | public int getMinimumSize() {
|
---|
75 | return 1;
|
---|
76 | }
|
---|
77 |
|
---|
78 | @Override
|
---|
79 | public String getColumnName(int n) {
|
---|
80 | return n == 0 ? "value" : "utility";
|
---|
81 | }
|
---|
82 |
|
---|
83 | @Override
|
---|
84 | public DiscreteValueSetUtilities getCurrentValue()
|
---|
85 | throws IllegalStateException {
|
---|
86 | Map<DiscreteValue, BigDecimal> map = new HashMap<>();
|
---|
87 | for (int n = 0; n < values.getSize(); n++) {
|
---|
88 | StringModel val = values.get(n);
|
---|
89 | map.put(new DiscreteValue(val.getValue()),
|
---|
90 | getValue(val).getValue());
|
---|
91 | }
|
---|
92 |
|
---|
93 | return new DiscreteValueSetUtilities(map);
|
---|
94 | }
|
---|
95 |
|
---|
96 | @Override
|
---|
97 | public void setCurrentValue(ValueSetUtilities obj)
|
---|
98 | throws IllegalArgumentException {
|
---|
99 | DiscreteValueSetUtilities vutils = (DiscreteValueSetUtilities) obj;
|
---|
100 | for (int n = 0; n < values.getSize(); n++) {
|
---|
101 | StringModel val = values.get(n);
|
---|
102 | // FIXME this silently uses util 0 if value not in bid. Maybe warn?
|
---|
103 | BigDecimal util = vutils
|
---|
104 | .getUtility(new DiscreteValue(val.getValue()));
|
---|
105 | getValue(val).setValue(util);
|
---|
106 | }
|
---|
107 |
|
---|
108 | }
|
---|
109 |
|
---|
110 | @Override
|
---|
111 | public RestrictedNumberModel create(StringModel key) {
|
---|
112 | throw new UnsupportedOperationException();
|
---|
113 | }
|
---|
114 |
|
---|
115 | }
|
---|