source: domaineditor/src/main/java/geniusweb/domaineditor/model/profile/DiscreteValueSetUtilitiesModel.java@ 52

Last change on this file since 52 was 52, checked in by ruud, 14 months ago

Fixed small issues in domaineditor.

File size: 3.4 KB
Line 
1package geniusweb.domaineditor.model.profile;
2
3import java.math.BigDecimal;
4import java.util.HashMap;
5import java.util.Map;
6
7import geniusweb.domaineditor.model.DiscreteValueSetModel;
8import geniusweb.issuevalue.DiscreteValue;
9import geniusweb.profile.utilityspace.DiscreteValueSetUtilities;
10import geniusweb.profile.utilityspace.ValueSetUtilities;
11import tudelft.utilities.listener.DefaultListenable;
12import tudelft.utilities.logging.Reporter;
13import tudelft.utilities.mvc.model.ListModel;
14import tudelft.utilities.mvc.model.MapModel;
15import tudelft.utilities.mvc.model.NumberModel;
16import tudelft.utilities.mvc.model.RestrictedNumberModel;
17import tudelft.utilities.mvc.model.StringModel;
18import tudelft.utilities.mvc.model.events.Event;
19import 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 */
28public 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}
Note: See TracBrowser for help on using the repository browser.