[1] | 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 | }
|
---|