source: src/main/java/agents/EnterBidDialogOffer.java@ 126

Last change on this file since 126 was 126, checked in by Aron Hammond, 6 years ago

Added function to calculate opposition to MultiLateralAnalysis.java

Moved code to add RLBOA listeners to RLBOAUtils is misc package

Added input for strategyParameters to SessionPanel (gui)

!! close SessionInfo after tournament; this caused /tmp/ to fill up with GeniusData files

Our own package:

  • Added opponents and strategies that are mentioned in the report
  • Change class hierarchy, agents can now extend from RLBOAagentBilateral to inherit RL functionality.
  • States extend from AbstractState
File size: 5.8 KB
Line 
1package agents;
2
3import java.awt.BorderLayout;
4import java.awt.Color;
5import java.awt.Container;
6import java.awt.FlowLayout;
7import java.awt.Frame;
8
9import javax.swing.JButton;
10import javax.swing.JDialog;
11import javax.swing.JOptionPane;
12import javax.swing.JPanel;
13import javax.swing.JTable;
14import javax.swing.JTextArea;
15import javax.swing.WindowConstants;
16
17import genius.core.Bid;
18import genius.core.actions.Accept;
19import genius.core.actions.EndNegotiation;
20import genius.core.actions.Offer;
21import genius.core.exceptions.Warning;
22import genius.core.parties.AbstractNegotiationParty;
23import genius.core.utility.AdditiveUtilitySpace;
24
25/**
26 *
27 * @author W.Pasman
28 */
29public class EnterBidDialogOffer extends JDialog implements
30 EnterBidDialogInterface {
31
32 private static final long serialVersionUID = -8582527630534972702L;
33 private NegoInfo negoinfo; // the table model
34 private genius.core.actions.Action selectedAction;
35 private AbstractNegotiationParty party;
36 private JTextArea negotiationMessages = new JTextArea("NO MESSAGES YET");
37 // Wouter: we have some whitespace in the buttons,
38 // that makes nicer buttons and also artificially increases the window size.
39 private JButton buttonEnd = new JButton("End Negotiation");
40 private JButton buttonBid = new JButton(" Propose ");
41 private JPanel buttonPanel = new JPanel();
42 private JTable BidTable;
43
44 public EnterBidDialogOffer(AbstractNegotiationParty party, Frame parent,
45 boolean modal, AdditiveUtilitySpace us) throws Exception {
46 super(parent, modal);
47 this.party = party;
48 negoinfo = new NegoInfo(null, null, us);
49 initThePanel();
50 }
51
52 // quick hack.. we can't refer to the Agent's utilitySpace because
53 // the field is protected and there is no getUtilitySpace function either.
54 // therefore the Agent has to inform us when utilspace changes.
55 public void setUtilitySpace(AdditiveUtilitySpace us) {
56 negoinfo.utilitySpace = us;
57 }
58
59 private void initThePanel() {
60 if (negoinfo == null)
61 throw new NullPointerException("negoinfo is null");
62 Container pane = getContentPane();
63 pane.setLayout(new BorderLayout());
64 setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
65 setTitle("Choose action for party " + party.getPartyId().toString());
66 // setSize(new java.awt.Dimension(600, 400));
67 // setBounds(0,0,640,480);
68
69 // createFrom north field: the message field
70 pane.add(negotiationMessages, "North");
71
72 // createFrom center panel: the bid table
73 BidTable = new JTable(negoinfo);
74 // BidTable.setModel(negoinfo); // need a model for column size etc...
75 // Why doesn't this work???
76 BidTable.setGridColor(Color.lightGray);
77 JPanel tablepane = new JPanel(new BorderLayout());
78 tablepane.add(BidTable.getTableHeader(), "North");
79 tablepane.add(BidTable, "Center");
80 pane.add(tablepane, "Center");
81 BidTable.setRowHeight(35);
82 // createFrom south panel: the buttons:
83 buttonPanel.setLayout(new FlowLayout());
84 buttonPanel.add(buttonEnd);
85 // buttonPanel.add(buttonSkip);
86 buttonPanel.add(buttonBid);
87 pane.add(buttonPanel, "South");
88 buttonBid.setSelected(true);
89
90 // set action listeners for the buttons
91 buttonBid.addActionListener(new java.awt.event.ActionListener() {
92 public void actionPerformed(java.awt.event.ActionEvent evt) {
93 buttonBidActionPerformed(evt);
94 }
95 });
96 // buttonSkip.addActionListener(new java.awt.event.ActionListener() {
97 // public void actionPerformed(java.awt.event.ActionEvent evt) {
98 // buttonSkipActionPerformed(evt);
99 // }
100 // });
101 buttonEnd.addActionListener(new java.awt.event.ActionListener() {
102 public void actionPerformed(java.awt.event.ActionEvent evt) {
103 buttonEndActionPerformed(evt);
104 }
105 });
106 pack(); // pack will do complete layout, getting all cells etc.
107 }
108
109 private Bid getBid() {
110 Bid bid = null;
111 try {
112 bid = negoinfo.getBid();
113 } catch (Exception e) {
114 JOptionPane.showMessageDialog(null,
115 "There is a problem with your bid: " + e.getMessage());
116 }
117 return bid;
118 }
119
120 private void buttonBidActionPerformed(java.awt.event.ActionEvent evt) {
121
122 Bid bid = getBid();
123 if (bid != null) {
124 selectedAction = new Offer(party.getPartyId(), bid);
125 setVisible(false);
126 }
127 }
128
129 private void buttonEndActionPerformed(java.awt.event.ActionEvent evt) {
130 System.out.println("End Negotiation performed");
131 selectedAction = new EndNegotiation(party.getPartyId());
132 this.dispose();
133 }
134
135 /**
136 * This is called by UIAgent repeatedly, to ask for next action.
137 *
138 * @param opponentAction
139 * is action done by opponent
140 * @param myPreviousBid
141 * @return our next negotionat action.
142 */
143 public genius.core.actions.Action askUserForAction(
144 genius.core.actions.Action opponentAction, Bid myPreviousBid) {
145
146 setTitle("Choose action for party " + party.getPartyId().toString());
147 negoinfo.lastAccepted = null;
148 if (opponentAction == null) {
149 negotiationMessages.setText("Opponent did not send any action.");
150 }
151 if (opponentAction instanceof Accept) {
152 negotiationMessages.setText("Opponent accepted your last bid!");
153 negoinfo.lastAccepted = myPreviousBid;
154 }
155 if (opponentAction instanceof EndNegotiation) {
156 negotiationMessages.setText("Opponent cancels the negotiation.");
157 }
158 if (opponentAction instanceof Offer) {
159 negotiationMessages.setText("Opponent proposes the following bid:");
160 negoinfo.lastAccepted = ((Offer) opponentAction).getBid();
161 }
162 try {
163 negoinfo.setOurBid(myPreviousBid);
164 } catch (Exception e) {
165 new Warning("error in askUserForAction:", e, true, 2);
166 }
167
168 BidTable.setDefaultRenderer(BidTable.getColumnClass(0),
169 new MyCellRenderer1(negoinfo));
170 BidTable.setDefaultEditor(BidTable.getColumnClass(0), new MyCellEditor(
171 negoinfo));
172
173 pack();
174 setVisible(true); // this returns only after the panel closes.
175 // Wouter: this WILL return normally if Thread is killed, and the
176 // ThreadDeath exception will disappear.
177 return selectedAction;
178 }
179}
180
181/********************************************************/
182
Note: See TracBrowser for help on using the repository browser.