1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package pl.edu.agh.cast.importer.wizard.template;
19
20 import java.io.File;
21 import java.util.Collection;
22 import java.util.HashMap;
23 import java.util.Map;
24
25 import org.eclipse.jface.viewers.ISelectionChangedListener;
26 import org.eclipse.jface.viewers.SelectionChangedEvent;
27 import org.eclipse.jface.viewers.TreeSelection;
28 import org.eclipse.jface.viewers.TreeViewer;
29 import org.eclipse.osgi.util.NLS;
30 import org.eclipse.swt.SWT;
31 import org.eclipse.swt.custom.ScrolledComposite;
32 import org.eclipse.swt.events.SelectionAdapter;
33 import org.eclipse.swt.events.SelectionEvent;
34 import org.eclipse.swt.graphics.Point;
35 import org.eclipse.swt.graphics.Rectangle;
36 import org.eclipse.swt.layout.FillLayout;
37 import org.eclipse.swt.layout.GridData;
38 import org.eclipse.swt.layout.GridLayout;
39 import org.eclipse.swt.widgets.Button;
40 import org.eclipse.swt.widgets.Composite;
41 import org.eclipse.swt.widgets.Display;
42 import org.eclipse.swt.widgets.FileDialog;
43 import org.eclipse.swt.widgets.Group;
44 import org.eclipse.swt.widgets.Label;
45 import org.eclipse.swt.widgets.Shell;
46
47 import pl.edu.agh.cast.importer.base.template.IImportTemplate;
48 import pl.edu.agh.cast.importer.base.template.exception.TemplateException;
49 import pl.edu.agh.cast.importer.wizard.util.Messages;
50 import pl.edu.agh.cast.ui.util.IMsgBoxHelper;
51 import pl.edu.agh.cast.ui.util.MsgBoxHelper;
52
53
54
55
56
57
58 public class TemplatesManagementComposite extends Composite implements ITemplateManagementView,
59 ITemplateSelectionListener {
60
61
62
63 private Group templatesGroup;
64
65 private TreeViewer templatesTreeViewer;
66
67 private Composite actionsComposite;
68
69 private Button importBtn;
70
71 private Button deleteBtn;
72
73 private Group detailsGroup;
74
75 private Button editBtn;
76
77 private Button addBtn;
78
79 private Button exportBtn;
80
81
82
83
84
85 private boolean importBtnEnabled = true;
86
87 private ScrolledComposite scrolledComposite;
88
89 private Label descLbl;
90
91 private boolean deleteBtnEnabled = true;
92
93 private boolean editBtnEnabled;
94
95 private boolean addBtnEnabled;
96
97 private boolean exportBtnEnabled = true;
98
99
100
101 private TemplateManagementPresenter presenter;
102
103 private Map<ITemplateSelectionListener, ISelectionChangedListener> listenersMap;
104
105 private IMsgBoxHelper msgBoxHelper;
106
107
108
109
110 public static void main(String[] args) {
111 showGUI();
112 }
113
114
115
116
117 public static void showGUI() {
118 Display display = Display.getDefault();
119 Shell shell = new Shell(display);
120 TemplatesManagementComposite inst = new TemplatesManagementComposite(shell, SWT.NULL);
121 Point size = new Point(600, 200);
122 shell.setLayout(new FillLayout());
123 shell.layout();
124 if (size.x == 0 && size.y == 0) {
125 inst.pack();
126 shell.pack();
127 } else {
128 Rectangle shellBounds = shell.computeTrim(0, 0, size.x, size.y);
129 shell.setSize(shellBounds.width, shellBounds.height);
130 }
131 shell.open();
132 while (!shell.isDisposed()) {
133 if (!display.readAndDispatch())
134 display.sleep();
135 }
136 }
137
138
139
140
141
142
143
144
145
146 public TemplatesManagementComposite(Composite parent, int style) {
147 super(parent, style);
148 initGUI();
149 }
150
151 private void initGUI() {
152 GridLayout thisLayout = new GridLayout();
153 thisLayout.numColumns = 2;
154 this.setLayout(thisLayout);
155
156 templatesGroup = new Group(this, SWT.NONE);
157 GridLayout templatesGroupLayout = new GridLayout();
158 templatesGroupLayout.numColumns = 2;
159 templatesGroup.setLayout(templatesGroupLayout);
160 GridData templatesGroupLData = new GridData();
161 templatesGroupLData.grabExcessHorizontalSpace = true;
162 templatesGroupLData.grabExcessVerticalSpace = true;
163 templatesGroupLData.horizontalAlignment = GridData.FILL;
164 templatesGroupLData.verticalAlignment = GridData.FILL;
165 templatesGroup.setLayoutData(templatesGroupLData);
166 templatesGroup.setText(Messages.TemplatesManagementComposite_0);
167
168 GridData templatesTreeViewerLData = new GridData();
169 templatesTreeViewerLData.grabExcessHorizontalSpace = true;
170 templatesTreeViewerLData.grabExcessVerticalSpace = true;
171 templatesTreeViewerLData.horizontalAlignment = GridData.FILL;
172 templatesTreeViewerLData.verticalAlignment = GridData.FILL;
173 templatesTreeViewer = new TreeViewer(templatesGroup, SWT.V_SCROLL | SWT.BORDER);
174 templatesTreeViewer.getControl().setLayoutData(templatesTreeViewerLData);
175 initTemplatesTreeViewer();
176
177 GridData actionsCompositeLData = new GridData();
178 actionsCompositeLData.horizontalAlignment = GridData.END;
179 actionsCompositeLData.verticalAlignment = GridData.FILL;
180 actionsCompositeLData.grabExcessVerticalSpace = true;
181 actionsCompositeLData.widthHint = 118;
182 actionsComposite = new Composite(templatesGroup, SWT.NONE);
183 GridLayout actionsCompositeLayout = new GridLayout();
184 actionsCompositeLayout.makeColumnsEqualWidth = true;
185 actionsCompositeLayout.marginHeight = 0;
186 actionsComposite.setLayout(actionsCompositeLayout);
187 actionsComposite.setLayoutData(actionsCompositeLData);
188
189 if (addBtnEnabled) {
190 addBtn = new Button(actionsComposite, SWT.PUSH | SWT.CENTER);
191 GridData addBtnLData = new GridData();
192 addBtnLData.heightHint = 25;
193 addBtnLData.grabExcessHorizontalSpace = true;
194 addBtnLData.horizontalAlignment = GridData.FILL;
195 addBtn.setLayoutData(addBtnLData);
196 addBtn.setText(Messages.TemplatesManagementComposite_1);
197 }
198 if (editBtnEnabled) {
199 editBtn = new Button(actionsComposite, SWT.PUSH | SWT.CENTER);
200 GridData editBtnLData = new GridData();
201 editBtnLData.heightHint = 25;
202 editBtnLData.grabExcessHorizontalSpace = true;
203 editBtnLData.horizontalAlignment = GridData.FILL;
204 editBtn.setLayoutData(editBtnLData);
205 editBtn.setText(Messages.TemplatesManagementComposite_2);
206 }
207
208 if (deleteBtnEnabled) {
209 deleteBtn = new Button(actionsComposite, SWT.PUSH | SWT.CENTER);
210 GridData deleteBtnLData = new GridData();
211 deleteBtnLData.heightHint = 25;
212 deleteBtnLData.grabExcessHorizontalSpace = true;
213 deleteBtnLData.horizontalAlignment = GridData.FILL;
214 deleteBtn.setLayoutData(deleteBtnLData);
215 deleteBtn.setText(Messages.TemplatesManagementComposite_3);
216 deleteBtn.setEnabled(false);
217 deleteBtn.addSelectionListener(new SelectionAdapter() {
218 @Override
219 public void widgetSelected(SelectionEvent e) {
220 presenter.handleRemoveTemplate();
221 }
222 });
223 }
224 if (importBtnEnabled) {
225 importBtn = new Button(actionsComposite, SWT.PUSH | SWT.CENTER);
226 GridData importBtnLData = new GridData();
227 importBtnLData.heightHint = 25;
228 importBtnLData.grabExcessHorizontalSpace = true;
229 importBtnLData.horizontalAlignment = GridData.FILL;
230 importBtn.setLayoutData(importBtnLData);
231 importBtn.setText(Messages.TemplatesManagementComposite_4);
232 importBtn.addSelectionListener(new SelectionAdapter() {
233 @Override
234 public void widgetSelected(SelectionEvent e) {
235 handleImportTemplate();
236 }
237 });
238 }
239
240 if (exportBtnEnabled) {
241 exportBtn = new Button(actionsComposite, SWT.PUSH | SWT.CENTER);
242 GridData exportBtnLData = new GridData();
243 exportBtnLData.grabExcessHorizontalSpace = true;
244 exportBtnLData.horizontalAlignment = GridData.FILL;
245 exportBtn.setLayoutData(exportBtnLData);
246 exportBtn.setText(Messages.TemplatesManagementComposite_5);
247 exportBtn.setEnabled(false);
248 exportBtn.addSelectionListener(new SelectionAdapter() {
249 @Override
250 public void widgetSelected(SelectionEvent e) {
251 handleExportTemplate();
252 }
253 });
254 }
255 detailsGroup = new Group(this, SWT.NONE);
256 GridLayout detailsGroupLayout = new GridLayout();
257 detailsGroupLayout.makeColumnsEqualWidth = true;
258 detailsGroup.setLayout(detailsGroupLayout);
259 GridData detailsGroupLData = new GridData();
260 detailsGroupLData.horizontalAlignment = GridData.FILL;
261 detailsGroupLData.verticalAlignment = GridData.FILL;
262 detailsGroupLData.grabExcessHorizontalSpace = true;
263 detailsGroupLData.grabExcessVerticalSpace = true;
264 detailsGroup.setLayoutData(detailsGroupLData);
265 detailsGroup.setText(Messages.TemplatesManagementComposite_6);
266
267 GridData scrolledComposite1LData = new GridData();
268 scrolledComposite1LData.verticalAlignment = GridData.FILL;
269 scrolledComposite1LData.horizontalAlignment = GridData.FILL;
270 scrolledComposite1LData.grabExcessHorizontalSpace = true;
271 scrolledComposite1LData.grabExcessVerticalSpace = true;
272 scrolledComposite = new ScrolledComposite(detailsGroup, SWT.H_SCROLL | SWT.V_SCROLL);
273 GridLayout scrolledComposite1Layout = new GridLayout();
274 scrolledComposite1Layout.makeColumnsEqualWidth = true;
275 scrolledComposite.setLayout(scrolledComposite1Layout);
276 scrolledComposite.setLayoutData(scrolledComposite1LData);
277 scrolledComposite.setEnabled(true);
278 scrolledComposite.setExpandHorizontal(true);
279 scrolledComposite.setExpandVertical(true);
280 scrolledComposite.setShowFocusedControl(true);
281
282 descLbl = new Label(scrolledComposite, SWT.WRAP);
283 scrolledComposite.setContent(descLbl);
284 GridData descLblLData = new GridData();
285 descLblLData.grabExcessHorizontalSpace = true;
286 descLblLData.grabExcessVerticalSpace = true;
287 descLblLData.horizontalAlignment = GridData.FILL;
288 descLblLData.verticalAlignment = GridData.FILL;
289 descLbl.setLayoutData(descLblLData);
290
291 this.layout();
292 pack();
293
294 msgBoxHelper = MsgBoxHelper.createInstanceFor(this);
295
296 }
297
298 private void initTemplatesTreeViewer() {
299 templatesTreeViewer.setContentProvider(new TemplatesTreeContentProvider());
300 templatesTreeViewer.setLabelProvider(new TemplatesTreeLabelProvider());
301 templatesTreeViewer.setAutoExpandLevel(2);
302 }
303
304
305
306
307
308
309
310 public void addTemplateSelecionListener(final ITemplateSelectionListener listener) {
311 if (listenersMap == null) {
312 listenersMap = new HashMap<ITemplateSelectionListener, ISelectionChangedListener>();
313 }
314 if (listenersMap.containsKey(listener)) {
315 return;
316 }
317
318 ISelectionChangedListener selectionChangedListener = new ISelectionChangedListener() {
319 @Override
320 public void selectionChanged(SelectionChangedEvent event) {
321 final TreeSelection selection = (TreeSelection)templatesTreeViewer.getSelection();
322 IImportTemplate selectedTemplate;
323 if (!selection.isEmpty() && selection.getFirstElement() instanceof TemplateTreeEntry) {
324 selectedTemplate = ((TemplateTreeEntry)selection.getFirstElement()).getElement();
325 } else {
326 selectedTemplate = null;
327 }
328 listener.selectionChanged(selectedTemplate);
329 }
330 };
331 templatesTreeViewer.addSelectionChangedListener(selectionChangedListener);
332 listenersMap.put(listener, selectionChangedListener);
333 }
334
335
336
337
338
339
340
341 @Override
342 public void removeTemplateSelectionListener(ITemplateSelectionListener listener) {
343 if (listenersMap.containsKey(listener)) {
344 templatesTreeViewer.removeSelectionChangedListener(listenersMap.get(listener));
345 listenersMap.remove(listener);
346 }
347 }
348
349
350
351
352
353
354 @Override
355 public void setEnabled(boolean enabled) {
356 templatesGroup.setEnabled(enabled);
357 templatesTreeViewer.getControl().setEnabled(enabled);
358 detailsGroup.setEnabled(enabled);
359 descLbl.setEnabled(enabled);
360 if (addBtnEnabled) {
361 addBtn.setEnabled(enabled);
362 }
363 if (editBtnEnabled) {
364 editBtn.setEnabled(enabled);
365 }
366 if (deleteBtnEnabled) {
367 deleteBtn.setEnabled(enabled);
368 }
369 if (importBtnEnabled) {
370 importBtn.setEnabled(enabled);
371 }
372 if (exportBtnEnabled) {
373 exportBtn.setEnabled(enabled);
374 }
375
376 updateButtonsEnabled(presenter.getSelectedTemplate());
377 updateDescriptionLabel(presenter.getSelectedTemplate());
378 super.setEnabled(enabled);
379
380 }
381
382
383
384
385
386
387 @Override
388 public void setInput(Collection<TemplateGroupTreeEntry> groups) {
389 templatesTreeViewer.setInput(groups);
390
391 }
392
393
394
395
396
397
398
399 @Override
400 public void initialize(TemplateManagementPresenter templatePresenter) {
401 this.presenter = templatePresenter;
402 addTemplateSelecionListener(this);
403 }
404
405
406
407
408
409
410
411 @Override
412 public void dispose() {
413 removeTemplateSelectionListener(this);
414 super.dispose();
415 }
416
417 private void handleImportTemplate() {
418
419 FileDialog openDialog = new FileDialog(getShell(), SWT.OPEN);
420 openDialog.setFilterExtensions(new String[] { "*." + IImportTemplate.TEMPLATE_FILE_EXTENSION, "*.*" });
421 openDialog.setFilterNames(new String[] {
422 NLS.bind(Messages.TemplatesManagementComposite_15, IImportTemplate.TEMPLATE_FILE_EXTENSION),
423 Messages.TemplatesManagementComposite_21 });
424 openDialog.setText(Messages.TemplatesManagementComposite_16);
425
426 String path = openDialog.open();
427 if (path == null) {
428 return;
429 }
430 File file = new File(path);
431 try {
432 IImportTemplate template = presenter.handleImportTemplate(file, msgBoxHelper);
433 if (template != null) {
434 msgBoxHelper.showInfoBox(Messages.TemplatesManagementComposite_17, NLS.bind(
435 Messages.TemplatesManagementComposite_18, template.getName()));
436 }
437 } catch (TemplateException e) {
438 msgBoxHelper.showErrorBox(Messages.TemplatesManagementComposite_19, e.getMessage());
439 }
440 }
441
442 private void handleExportTemplate() {
443 IImportTemplate template = presenter.getSelectedTemplate();
444 if (template != null) {
445
446 FileDialog saveDialog = new FileDialog(getShell(), SWT.SAVE);
447 saveDialog.setFilterExtensions(new String[] { "*." + IImportTemplate.TEMPLATE_FILE_EXTENSION });
448 saveDialog.setFilterNames(new String[] { NLS.bind(Messages.TemplatesManagementComposite_15,
449 IImportTemplate.TEMPLATE_FILE_EXTENSION) });
450 saveDialog.setText(Messages.TemplatesManagementComposite_14);
451 saveDialog.setFileName(template.getName());
452 String path = saveDialog.open();
453 if (path == null) {
454 return;
455 }
456 File file = new File(path);
457 presenter.handleExportTemplate(file, msgBoxHelper);
458 }
459 }
460
461
462
463
464
465
466
467
468 @Override
469 public void showCannotRemoveTemplateError(IImportTemplate template, TemplateException e) {
470 String msg = null;
471 if (template == null || template.getName() == null) {
472 msg = Messages.TemplatesManagementComposite_7;
473 } else {
474 msg = NLS.bind(Messages.TemplatesManagementComposite_8, template.getName());
475 }
476 msgBoxHelper.showErrorBox(Messages.TemplatesManagementComposite_9, msg);
477 }
478
479
480
481
482
483
484 @Override
485 public void showNoTemplateSelectedInfo() {
486 msgBoxHelper.showInfoBox(Messages.TemplatesManagementComposite_10, Messages.TemplatesManagementComposite_11);
487
488 }
489
490
491
492
493
494
495
496 @Override
497 public int showRemoveTemplateConfirmationQuestion(IImportTemplate template) {
498 assert template != null;
499 return msgBoxHelper.showQuestionBox(Messages.TemplatesManagementComposite_12, NLS.bind(
500 Messages.TemplatesManagementComposite_13, template.getName()));
501 }
502
503
504
505
506
507
508
509
510 @Override
511 public void selectionChanged(IImportTemplate selected) {
512 updateButtonsEnabled(selected);
513 updateDescriptionLabel(selected);
514 }
515
516 private void updateButtonsEnabled(IImportTemplate selected) {
517 boolean enabled = selected != null;
518 if (deleteBtnEnabled) {
519 deleteBtn.setEnabled(enabled);
520 }
521 if (exportBtnEnabled) {
522 exportBtn.setEnabled(enabled);
523 }
524 }
525
526 private void updateDescriptionLabel(IImportTemplate selected) {
527 String text = null;
528 if (selected != null) {
529 StringBuilder builder = new StringBuilder();
530 builder.append(Messages.TemplatesManagementComposite_20);
531 builder.append(selected.getName());
532 builder.append(Messages.TemplatesManagementComposite_22);
533 builder.append(selected.getDescription());
534 text = builder.toString();
535 } else {
536 text = Messages.TemplatesManagementComposite_23;
537 }
538 descLbl.setText(text);
539
540 scrolledComposite.setMinSize(descLbl.computeSize(descLbl.getSize().x
541 - scrolledComposite.getVerticalBar().getSize().x, SWT.DEFAULT));
542
543 }
544 }