1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package p3j.gui.dialogs;
17
18 import java.awt.BorderLayout;
19 import java.awt.event.ActionEvent;
20 import java.awt.event.ActionListener;
21
22 import javax.swing.BoxLayout;
23 import javax.swing.ImageIcon;
24 import javax.swing.JButton;
25 import javax.swing.JLabel;
26 import javax.swing.JList;
27 import javax.swing.JPanel;
28 import javax.swing.JScrollPane;
29 import javax.swing.JTextField;
30
31 import p3j.database.DatabaseFactory;
32 import p3j.database.IP3MDatabase;
33 import p3j.gui.misc.ParameterListModel;
34 import p3j.gui.panels.projections.IProjectionTree;
35 import p3j.gui.panels.projections.ProjectionNode;
36 import p3j.gui.panels.projections.SetTypeNode;
37 import p3j.misc.gui.GUI;
38 import p3j.pppm.ProjectionModel;
39 import p3j.pppm.parameters.ParameterInstance;
40 import p3j.pppm.sets.SetType;
41
42 import com.jgoodies.forms.layout.CellConstraints;
43 import com.jgoodies.forms.layout.FormLayout;
44
45
46
47
48
49
50
51
52
53
54
55 public class NewSetTypeDialog extends
56 AbstractProjectionTreeDialog<ProjectionModel, ProjectionNode> {
57
58
59 private static final long serialVersionUID = 3065923250959082561L;
60
61
62 public static final int DIALOG_WIDTH = 800;
63
64
65 public static final int DIALOG_HEIGHT = 600;
66
67
68 private static final int[] COLUMN_GROUPING = { 2, 4 };
69
70
71 private final ParameterListModel defTypeParamsModel = new ParameterListModel();
72
73
74 private final SetType newSetType;
75
76
77
78
79
80 private static final int ADD_REMOVE_PANEL_ROW_INDEX = 5;
81
82
83
84
85
86 private static final int ADD_REMOVE_PANEL_COL_INDEX = 3;
87
88
89
90
91 private static final int SELECTION_PANEL_ROW_INDEX = 4;
92
93
94
95
96 private static final int SELECTION_PANEL_ROW_HEIGHT = 3;
97
98
99
100
101 private static final int SELECTION_PANEL_COL_WIDTH = 1;
102
103
104
105
106
107 private static final int COLUMN_INDEX_RHS = 4;
108
109
110
111
112
113 private static final int COLUMN_INDEX_LHS = 2;
114
115
116 private static final int BUTTON_PANEL_ROW_INDEX = 8;
117
118
119 private static final int BUTTON_PANEL_COL_INDEX = 4;
120
121
122
123
124 private JTextField stName = new JTextField("New Settype");
125
126
127 private JButton addParamToNewType = new JButton();
128 {
129 ImageIcon icon = new ImageIcon(
130 NewSetTypeDialog.class.getResource("/p3j/icons/arrow_r2l.gif"));
131 if (icon.getImage() != null) {
132 addParamToNewType.setIcon(icon);
133 } else {
134 addParamToNewType.setText("<=");
135 }
136
137 addParamToNewType.addActionListener(new ActionListener() {
138 @Override
139 public void actionPerformed(ActionEvent e) {
140 transferInstances(defTypeParamsList, defTypeParamsModel,
141 newTypeParamsModel, newSetType);
142 }
143 });
144 }
145
146
147 private JButton remParamFromNewType = new JButton();
148 {
149 ImageIcon icon = new ImageIcon(
150 NewSetTypeDialog.class.getResource("/p3j/icons/arrow_l2r.gif"));
151 if (icon.getImage() != null) {
152 remParamFromNewType.setIcon(icon);
153 } else {
154 remParamFromNewType.setText("=>");
155 }
156
157 remParamFromNewType.addActionListener(new ActionListener() {
158 @Override
159 public void actionPerformed(ActionEvent e) {
160 transferInstances(newTypeParamsList, newTypeParamsModel,
161 defTypeParamsModel, getEntity().getDefaultSetType());
162 }
163 });
164 }
165
166
167
168
169
170 private final JList defTypeParamsList = new JList(defTypeParamsModel);
171
172
173 private final ParameterListModel newTypeParamsModel = new ParameterListModel();
174
175
176 private final JList newTypeParamsList = new JList(newTypeParamsModel);
177
178
179
180
181
182
183
184
185
186
187 public NewSetTypeDialog(ProjectionNode projNode, IProjectionTree projTree) {
188 super(projNode, projTree, DIALOG_WIDTH, DIALOG_HEIGHT, "Add Settype");
189 setModal(true);
190 newSetType = getEntity().createSetType("", "");
191 initUI();
192 }
193
194
195
196
197 private void initUI() {
198 setTitle("Create New Settype");
199
200 JPanel namePanel = new JPanel(GUI.getStdBorderLayout());
201 namePanel.add(new JLabel("Name:"), BorderLayout.WEST);
202 namePanel.add(stName, BorderLayout.CENTER);
203
204
205 defTypeParamsModel.updateSetType(getEntity().getDefaultSetType());
206 newTypeParamsModel.updateSetType(newSetType);
207
208 JPanel addRemovePanel = new JPanel();
209 addRemovePanel.setLayout(new BoxLayout(addRemovePanel, BoxLayout.Y_AXIS));
210 addRemovePanel.add(addParamToNewType);
211 addRemovePanel.add(remParamFromNewType);
212
213
214 FormLayout layout = new FormLayout(
215 "10dlu,d:grow,center:50dlu,right:d:grow,10dlu",
216 "10dlu,20dlu,10dlu,d:grow,50dlu,d:grow,10dlu,20dlu,10dlu");
217 JPanel contentPanel = new JPanel(layout);
218 layout.setColumnGroups(new int[][] { COLUMN_GROUPING });
219
220 CellConstraints cc = new CellConstraints();
221 contentPanel.add(namePanel, cc.xy(COLUMN_INDEX_LHS, 2));
222
223 contentPanel.add(new JScrollPane(newTypeParamsList), cc.xywh(
224 COLUMN_INDEX_LHS, SELECTION_PANEL_ROW_INDEX, SELECTION_PANEL_COL_WIDTH,
225 SELECTION_PANEL_ROW_HEIGHT));
226
227 contentPanel.add(new JScrollPane(defTypeParamsList), cc.xywh(
228 COLUMN_INDEX_RHS, SELECTION_PANEL_ROW_INDEX, SELECTION_PANEL_COL_WIDTH,
229 SELECTION_PANEL_ROW_HEIGHT));
230
231 contentPanel.add(addRemovePanel,
232 cc.xy(ADD_REMOVE_PANEL_COL_INDEX, ADD_REMOVE_PANEL_ROW_INDEX));
233
234 contentPanel.add(getButtonPanel(),
235 cc.xy(BUTTON_PANEL_COL_INDEX, BUTTON_PANEL_ROW_INDEX));
236 setContentPane(contentPanel);
237 }
238
239
240
241
242
243
244
245
246
247
248
249
250
251 public void transferInstances(JList fromList, ParameterListModel from,
252 ParameterListModel to, SetType targetSetType) {
253
254 int firstIndex = fromList.getSelectedIndex();
255 Object[] instances = fromList.getSelectedValues();
256
257 for (Object instance : instances) {
258 ParameterInstance instanceToBeAdded = (ParameterInstance) instance;
259 getEntity().assignParameterInstance(instanceToBeAdded, targetSetType,
260 true);
261 }
262
263 to.refresh();
264 from.refresh();
265
266 if (instances.length > 0 && from.getSize() > 0) {
267 fromList
268 .setSelectedIndex(from.getSize() == firstIndex ? from.getSize() - 1
269 : firstIndex);
270 }
271 }
272
273
274
275
276 void createSetType() {
277 if (newTypeParamsModel.getSize() == 0) {
278 GUI.printErrorMessage(this, "Settype is empty",
279 "Settypes should at least cover one parameter.");
280 return;
281 }
282
283 IP3MDatabase database = DatabaseFactory.getDatabaseSingleton();
284 newSetType.setName(stName.getText());
285 database.saveProjection(getEntity());
286 getProjectionTree().removeNodes(getEntityNode(),
287 newSetType.getDefinedParameters());
288 getProjectionTree().cleanTree();
289 SetTypeNode newNode = new SetTypeNode(newSetType);
290 getEntityNode().add(newNode);
291 getProjectionTree().refreshNodeSubStructure(getEntityNode());
292 getProjectionTree().selectNode(newNode);
293 setVisible(false);
294 }
295
296 @Override
297 protected void cancel() {
298 getEntity().removeSetType(newSetType);
299 setVisible(false);
300 }
301
302
303
304
305
306
307 public SetType getNewSetType() {
308 return newSetType;
309 }
310
311 @Override
312 protected void ok() {
313 createSetType();
314 }
315 }