1 | package genius.gui.tournament;
|
---|
2 |
|
---|
3 | import java.util.ArrayList;
|
---|
4 |
|
---|
5 | import javax.swing.event.ListDataEvent;
|
---|
6 | import javax.swing.event.ListDataListener;
|
---|
7 |
|
---|
8 | import genius.core.listener.DefaultListenable;
|
---|
9 | import genius.core.repository.MultiPartyProtocolRepItem;
|
---|
10 | import genius.core.repository.ParticipantRepItem;
|
---|
11 | import genius.core.repository.ProfileRepItem;
|
---|
12 | import genius.gui.negosession.ContentProxy;
|
---|
13 | import genius.gui.panels.BooleanModel;
|
---|
14 | import genius.gui.panels.SingleSelectionModel;
|
---|
15 | import genius.gui.panels.SubsetSelectionModel;
|
---|
16 |
|
---|
17 | /**
|
---|
18 | * Stores special options that apply when there are exactly 2 agents per
|
---|
19 | * session.
|
---|
20 | */
|
---|
21 | public class BilateralOptionsModel extends DefaultListenable<BilateralOptionsModel> {
|
---|
22 |
|
---|
23 | private BooleanModel playBothSides = new BooleanModel(true);
|
---|
24 |
|
---|
25 | private final SubsetSelectionModel<ProfileRepItem> profileModelB;
|
---|
26 | private final SubsetSelectionModel<ParticipantRepItem> partyModelB;
|
---|
27 |
|
---|
28 | // not owned by us, just for getting notified.
|
---|
29 | private SingleSelectionModel<MultiPartyProtocolRepItem> protocolModel;
|
---|
30 |
|
---|
31 | public BilateralOptionsModel(SingleSelectionModel<MultiPartyProtocolRepItem> protocolModel) {
|
---|
32 | this.protocolModel = protocolModel;
|
---|
33 | profileModelB = new SubsetSelectionModel<ProfileRepItem>(ContentProxy.fetchProfiles());
|
---|
34 |
|
---|
35 | partyModelB = new SubsetSelectionModel<>(new ArrayList<ParticipantRepItem>());
|
---|
36 | updateSubmodels();
|
---|
37 |
|
---|
38 | protocolModel.addListDataListener(new ListDataListener() {
|
---|
39 |
|
---|
40 | @Override
|
---|
41 | public void intervalRemoved(ListDataEvent e) {
|
---|
42 | // ignore, added will be called as well.
|
---|
43 | }
|
---|
44 |
|
---|
45 | @Override
|
---|
46 | public void intervalAdded(ListDataEvent e) {
|
---|
47 | updateSubmodels();
|
---|
48 | }
|
---|
49 |
|
---|
50 | @Override
|
---|
51 | public void contentsChanged(ListDataEvent e) {
|
---|
52 | updateSubmodels();
|
---|
53 | }
|
---|
54 | });
|
---|
55 |
|
---|
56 | }
|
---|
57 |
|
---|
58 | /**
|
---|
59 | * @return boolean model. true if selected agents play on both sides. If
|
---|
60 | * false, parties for both sides can be selected explicitly. Note
|
---|
61 | * that it depends on the protocol what "both sides" means.
|
---|
62 | */
|
---|
63 | public BooleanModel getPlayBothSides() {
|
---|
64 | return playBothSides;
|
---|
65 | }
|
---|
66 |
|
---|
67 | /**
|
---|
68 | *
|
---|
69 | * @return the side B profile model
|
---|
70 | */
|
---|
71 | public SubsetSelectionModel<ProfileRepItem> getProfileModelB() {
|
---|
72 | return profileModelB;
|
---|
73 | }
|
---|
74 |
|
---|
75 | /**
|
---|
76 | *
|
---|
77 | * @return the side B party model.
|
---|
78 | */
|
---|
79 | public SubsetSelectionModel<ParticipantRepItem> getPartyModelB() {
|
---|
80 | return partyModelB;
|
---|
81 | }
|
---|
82 |
|
---|
83 | /**
|
---|
84 | * Update the models after a protocol change.
|
---|
85 | *
|
---|
86 | * @param protocol
|
---|
87 | * the new protocol.
|
---|
88 | */
|
---|
89 | private void updateSubmodels() {
|
---|
90 | MultiPartyProtocolRepItem protocol = protocolModel.getSelection();
|
---|
91 | partyModelB.setAllItems(ContentProxy.fetchPartiesForProtocol(protocol));
|
---|
92 | }
|
---|
93 |
|
---|
94 | }
|
---|