source: src/main/java/genius/gui/boaframework/BOARepositoryUI.java@ 13

Last change on this file since 13 was 13, checked in by Wouter Pasman, 7 years ago

#6 refactored BOARepositoryUI

File size: 5.6 KB
Line 
1package genius.gui.boaframework;
2
3import java.awt.event.KeyAdapter;
4import java.awt.event.KeyEvent;
5import java.awt.event.MouseAdapter;
6import java.awt.event.MouseEvent;
7import java.util.ArrayList;
8import java.util.Collections;
9import java.util.Map.Entry;
10
11import javax.swing.JMenuItem;
12import javax.swing.JPopupMenu;
13import javax.swing.JTable;
14import javax.swing.table.AbstractTableModel;
15
16import genius.core.boaframework.BoaType;
17import genius.core.boaframework.repository.BOAagentRepository;
18import genius.core.boaframework.repository.BOArepItem;
19import genius.gui.NegoGUIApp;
20
21/**
22 * A user interface to the agent repository
23 *
24 * @author Wouter Pasman, Mark Hendrikx
25 */
26public class BOARepositoryUI extends JTable {
27
28 private static final String ADD_A_COMPONENT = "Add a component";
29 private BOAagentRepository boaRepository;
30 private AbstractTableModel dataModel;
31 private ArrayList<BOArepItem> items;
32
33 public BOARepositoryUI() {
34 boaRepository = BOAagentRepository.getInstance();
35 items = new ArrayList<BOArepItem>();
36 referenceComponents();
37 initTable();
38 }
39
40 private JPopupMenu createPopupMenu() {
41 JPopupMenu popup = new JPopupMenu();
42
43 JMenuItem addComponent = new JMenuItem("Add new component");
44 addComponent.addActionListener(new java.awt.event.ActionListener() {
45 @Override
46 public void actionPerformed(java.awt.event.ActionEvent evt) {
47 addAction();
48 }
49 });
50
51 JMenuItem editComponent = new JMenuItem("Edit component");
52 editComponent.addActionListener(new java.awt.event.ActionListener() {
53 @Override
54 public void actionPerformed(java.awt.event.ActionEvent evt) {
55 editAction();
56 }
57 });
58
59 JMenuItem removeComponent = new JMenuItem("Remove component");
60 removeComponent.addActionListener(new java.awt.event.ActionListener() {
61 @Override
62 public void actionPerformed(java.awt.event.ActionEvent evt) {
63 removeAction();
64 }
65 });
66
67 popup.add(addComponent);
68 popup.add(editComponent);
69 popup.add(removeComponent);
70
71 return popup;
72 }
73
74 private void referenceComponents() {
75 items.clear();
76 for (Entry<String, BOArepItem> entry : boaRepository
77 .getOfferingStrategiesRepItems().entrySet()) {
78 items.add(entry.getValue());
79 }
80
81 for (Entry<String, BOArepItem> entry : boaRepository
82 .getAcceptanceStrategiesRepItems().entrySet()) {
83 items.add(entry.getValue());
84 }
85
86 for (Entry<String, BOArepItem> entry : boaRepository
87 .getOpponentModelsRepItems().entrySet()) {
88 items.add(entry.getValue());
89 }
90
91 for (Entry<String, BOArepItem> entry : boaRepository
92 .getOMStrategiesRepItems().entrySet()) {
93 items.add(entry.getValue());
94 }
95
96 Collections.sort(items);
97
98 if (items.size() == 0) {
99 addTemporaryComponent();
100 }
101 }
102
103 private void initTable() {
104 dataModel = new AbstractTableModel() {
105 private static final long serialVersionUID = -4985008096999143587L;
106 final String columnnames[] = { "Type", "Name" };
107
108 @Override
109 public int getColumnCount() {
110 return columnnames.length;
111 }
112
113 @Override
114 public int getRowCount() {
115 return items.size();
116 }
117
118 @Override
119 public Object getValueAt(int row, int col) {
120 BOArepItem boaComponent = items.get(row);
121 switch (col) {
122 case 0:
123 return boaComponent.getTypeString();
124 case 1:
125 return boaComponent.getName();
126 }
127 return col;
128 }
129
130 @Override
131 public String getColumnName(int column) {
132 return columnnames[column];
133 }
134 };
135
136 setModel(dataModel);
137 setShowVerticalLines(false);
138 addMouseListener(new MouseAdapter() {
139
140 // if Windows
141 @Override
142 public void mouseReleased(MouseEvent e) {
143 mouseCode(e);
144 }
145
146 // if Linux
147 @Override
148 public void mousePressed(MouseEvent e) {
149 mouseCode(e);
150 }
151
152 private void mouseCode(MouseEvent e) {
153 int r = rowAtPoint(e.getPoint());
154 if (r >= 0 && r < getRowCount()) {
155 setRowSelectionInterval(r, r);
156 } else {
157 clearSelection();
158 }
159
160 int rowindex = getSelectedRow();
161 if (rowindex < 0)
162 return;
163 if (e.isPopupTrigger() && e.getComponent() instanceof JTable) {
164 JPopupMenu popup = createPopupMenu();
165 popup.show(e.getComponent(), e.getX(), e.getY());
166 }
167 }
168 });
169
170 addKeyListener(new KeyAdapter() {
171 @Override
172 public void keyReleased(KeyEvent ke) {
173 if (ke.getKeyCode() == KeyEvent.VK_DELETE) {
174 removeAction();
175 }
176 }
177 });
178 }
179
180 public void addAction() {
181 // shoud return boolean if added an item.
182 // if so, sort items and display again
183 BOAComponentEditor loader = new BOAComponentEditor(
184 NegoGUIApp.negoGUIView.getFrame(), "Add BOA component");
185 BOArepItem item = loader.getResult(null);
186 if (item != null) {
187 items.add(item);
188 Collections.sort(items);
189 updateUI();
190 }
191 }
192
193 public void editAction() {
194 BOArepItem item = items.get(getSelectedRow());
195 BOAComponentEditor loader = new BOAComponentEditor(
196 NegoGUIApp.negoGUIView.getFrame(), "Edit BOA component");
197 BOArepItem result = loader.getResult(item);
198 if (result != null) {
199 items.remove(item);
200 items.add(result);
201 Collections.sort(items);
202 updateUI();
203 }
204 }
205
206 public void removeAction() {
207 if (getSelectedRow() != -1) {
208 BOArepItem removed = items.remove(getSelectedRow());
209 if (dataModel.getRowCount() == 0) {
210 addTemporaryComponent();
211 }
212 dataModel.fireTableDataChanged();
213 if (removed.getType() != BoaType.UNKNOWN) {
214 boaRepository.removeComponent(removed);
215 }
216 }
217 }
218
219 private void addTemporaryComponent() {
220 if (items.size() == 0) {
221 items.add(new BOArepItem(ADD_A_COMPONENT, "", BoaType.UNKNOWN));
222 }
223 }
224}
Note: See TracBrowser for help on using the repository browser.