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.page;
19
20 import java.io.File;
21
22 import org.eclipse.swt.SWT;
23 import org.eclipse.swt.events.ModifyEvent;
24 import org.eclipse.swt.events.ModifyListener;
25 import org.eclipse.swt.events.SelectionAdapter;
26 import org.eclipse.swt.events.SelectionEvent;
27 import org.eclipse.swt.events.SelectionListener;
28 import org.eclipse.swt.layout.GridData;
29 import org.eclipse.swt.layout.GridLayout;
30 import org.eclipse.swt.widgets.Button;
31 import org.eclipse.swt.widgets.Composite;
32 import org.eclipse.swt.widgets.FileDialog;
33 import org.eclipse.swt.widgets.Group;
34 import org.eclipse.swt.widgets.Label;
35 import org.eclipse.swt.widgets.Text;
36
37 import pl.edu.agh.cast.importer.base.data.DataRow;
38 import pl.edu.agh.cast.importer.base.data.ITabularData;
39 import pl.edu.agh.cast.importer.base.template.IImportTemplate;
40 import pl.edu.agh.cast.importer.wizard.template.ITemplateSelectionListener;
41 import pl.edu.agh.cast.importer.wizard.template.TemplateManagementPresenter;
42 import pl.edu.agh.cast.importer.wizard.template.TemplatesManagementComposite;
43 import pl.edu.agh.cast.importer.wizard.util.Messages;
44
45
46
47
48
49
50 public class InitImportPageComposite extends Composite {
51
52 private InitImportPage mediator;
53
54 private Label filePathLbl;
55
56 private Composite dataFileParamsComposite;
57
58 private Button browseBtn;
59
60 private Text filePathTxt;
61
62 private Button importCreateTemplate;
63
64 private TemplatesManagementComposite templateSelectionComposite;
65
66 private ConversionPreviewComposite previewComposite;
67
68 private Button importApplyTemplate;
69
70 private Button importUseTemplate;
71
72 private Button importWithoutTemplate;
73
74 private Composite radiosComposite;
75
76 private Group filePreviewGroup;
77
78 private TemplateManagementPresenter templatePresenter;
79
80 private ITemplateSelectionListener templateListener;
81
82
83
84
85
86
87
88
89
90
91
92 public InitImportPageComposite(Composite parent, int style, InitImportPage mediator) {
93 super(parent, style);
94 this.mediator = mediator;
95 initGUI();
96 }
97
98 private void initGUI() {
99 GridLayout thisLayout = new GridLayout();
100 thisLayout.verticalSpacing = 10;
101 this.setLayout(thisLayout);
102 this.setSize(800, 600);
103
104 dataFileParamsComposite = new Composite(this, SWT.NONE);
105 GridLayout dataFileParamsCompositeLayout = new GridLayout(4, false);
106 dataFileParamsCompositeLayout.horizontalSpacing = 10;
107 GridData dataFileParamsCompositeLData = new GridData(SWT.CENTER, SWT.BEGINNING, false, false);
108 dataFileParamsComposite.setLayoutData(dataFileParamsCompositeLData);
109 dataFileParamsComposite.setLayout(dataFileParamsCompositeLayout);
110
111 filePathLbl = new Label(dataFileParamsComposite, SWT.NONE);
112 filePathLbl.setText(Messages.InitImportPageComposite_DataFilePath);
113
114 filePathTxt = new Text(dataFileParamsComposite, SWT.BORDER);
115 GridData filePathTxtLData = new GridData(SWT.FILL, SWT.CENTER, true, true);
116 filePathTxtLData.minimumWidth = 500;
117 filePathTxtLData.minimumHeight = 20;
118 filePathTxtLData.horizontalSpan = 2;
119 filePathTxt.setLayoutData(filePathTxtLData);
120 filePathTxt.addModifyListener(new ModifyListener() {
121 public void modifyText(ModifyEvent arg0) {
122 handleFilePathTxtModification();
123 }
124 });
125
126 browseBtn = new Button(dataFileParamsComposite, SWT.PUSH | SWT.CENTER);
127 GridData browseBtnLData = new GridData(SWT.CENTER, SWT.BEGINNING, true, false);
128 browseBtnLData.minimumWidth = 80;
129 browseBtnLData.minimumHeight = 25;
130 browseBtn.setLayoutData(browseBtnLData);
131 browseBtn.setText(Messages.InitImportPageComposite_Browse);
132 browseBtn.addSelectionListener(new SelectionAdapter() {
133 @Override
134 public void widgetSelected(SelectionEvent event) {
135 handleBrowseButtonPressed();
136 }
137 });
138
139 radiosComposite = new Composite(dataFileParamsComposite, SWT.NONE);
140 GridLayout radiosCompositeLayout = new GridLayout();
141 GridData radiosCompositeLData = new GridData(SWT.BEGINNING, SWT.CENTER, true, true);
142 radiosCompositeLData.horizontalSpan = 4;
143 radiosComposite.setLayoutData(radiosCompositeLData);
144 radiosComposite.setLayout(radiosCompositeLayout);
145
146 final SelectionListener strategySelectionListener = new SelectionAdapter() {
147 @Override
148 public void widgetSelected(SelectionEvent event) {
149 handleStrategySelection();
150 }
151 };
152
153 importWithoutTemplate = new Button(radiosComposite, SWT.RADIO | SWT.LEFT);
154 importWithoutTemplate.setText(Messages.InitImportPageComposite_ImportWithoutTemplate);
155 importWithoutTemplate.setSelection(true);
156 importWithoutTemplate.addSelectionListener(strategySelectionListener);
157
158 importUseTemplate = new Button(radiosComposite, SWT.RADIO | SWT.LEFT);
159 importUseTemplate.setText(Messages.InitImportPageComposite_ImportUseTemplate);
160 importUseTemplate.setEnabled(false);
161 importUseTemplate.addSelectionListener(strategySelectionListener);
162
163 importApplyTemplate = new Button(radiosComposite, SWT.RADIO | SWT.LEFT);
164 importApplyTemplate.setText(Messages.InitImportPageComposite_ImportApplyTemplate);
165 importApplyTemplate.setEnabled(true);
166 importApplyTemplate.addSelectionListener(strategySelectionListener);
167
168 importCreateTemplate = new Button(radiosComposite, SWT.RADIO | SWT.LEFT);
169 importCreateTemplate.setText(Messages.InitImportPageComposite_CreateTemplateCombo);
170 importCreateTemplate.addSelectionListener(strategySelectionListener);
171
172 templateSelectionComposite = new TemplatesManagementComposite(this, SWT.NONE);
173 GridLayout templateSelectionCompositeLayout = new GridLayout(2, true);
174 GridData templateSelectionCompositeLData = new GridData(SWT.FILL, SWT.FILL, true, true);
175 templateSelectionComposite.setLayoutData(templateSelectionCompositeLData);
176 templateSelectionComposite.setLayout(templateSelectionCompositeLayout);
177
178 templatePresenter = new TemplateManagementPresenter(templateSelectionComposite);
179 templateListener = new ITemplateSelectionListener() {
180 @Override
181 public void selectionChanged(IImportTemplate selected) {
182 handleTemplateSelection(selected);
183 }
184 };
185 templatePresenter.getView().addTemplateSelecionListener(templateListener);
186
187 filePreviewGroup = new Group(this, SWT.NONE);
188 GridLayout filePreviewGroupLayout = new GridLayout();
189 filePreviewGroup.setLayout(filePreviewGroupLayout);
190 GridData filePreviewGroupLData = new GridData(SWT.FILL, SWT.FILL, true, true);
191 filePreviewGroupLData.minimumWidth = 550;
192 filePreviewGroupLData.minimumHeight = 150;
193 filePreviewGroup.setLayoutData(filePreviewGroupLData);
194 filePreviewGroup.setText(Messages.InitImportPageComposite_FilePreview);
195
196 GridData previewCompositeLData = new GridData();
197 previewCompositeLData.verticalAlignment = GridData.FILL;
198 previewCompositeLData.grabExcessVerticalSpace = true;
199 previewCompositeLData.grabExcessHorizontalSpace = true;
200 previewCompositeLData.horizontalAlignment = GridData.FILL;
201 previewComposite = new ConversionPreviewComposite(filePreviewGroup, SWT.NONE);
202 previewComposite.setLayoutData(previewCompositeLData);
203
204 handleStrategySelection();
205 }
206
207
208
209 private void handleBrowseButtonPressed() {
210 FileDialog dialog = new FileDialog(filePathTxt.getShell(), SWT.OPEN);
211 if (dialog.open() != null) {
212 filePathTxt.setText(dialog.getFilterPath() + File.separator + dialog.getFileName());
213 }
214 }
215
216 private void handleFilePathTxtModification() {
217 mediator.notifyFilePathChange(filePathTxt.getText());
218 refreshFilePreview();
219 }
220
221 private void handleStrategySelection() {
222 final boolean templatesEnabled = importApplyTemplate.getSelection() || importUseTemplate.getSelection();
223 setTemplateSelectionEnabled(templatesEnabled);
224 refreshFilePreview();
225 mediator.notifyWizardStrategySelection();
226 }
227
228 private void handleTemplateSelection(IImportTemplate selected) {
229 mediator.notifyTemplateSelection(selected);
230 refreshFilePreview();
231 }
232
233
234
235
236
237 private void refreshFilePreview() {
238 final String filePath = mediator.getImportProcess().getFilePath();
239 final IImportTemplate template = mediator.getImportProcess().getTemplate();
240
241 if (importApplyTemplate.getSelection() || importUseTemplate.getSelection()) {
242 previewComposite.showLoadingPreviewInfo();
243 new Thread() {
244 @Override
245 public void run() {
246 final ITabularData<DataRow> preview = mediator.getTemplateConversionPreview();
247 if (mediator.getImportProcess().getFilePath() != filePath
248 || mediator.getImportProcess().getTemplate() != template) {
249 return;
250 }
251
252 getDisplay().asyncExec(new Runnable() {
253 @Override
254 public void run() {
255 if (preview != null) {
256 previewComposite.refreshConversionPreview(preview);
257 } else {
258 previewComposite.showPreviewNotAvailable();
259 }
260 }
261 });
262 return;
263
264 }
265
266 }.start();
267 } else {
268 previewComposite.clearPreview();
269 }
270 }
271
272 private void setTemplateSelectionEnabled(boolean enabled) {
273 templateSelectionComposite.setEnabled(enabled);
274 }
275
276
277
278
279
280 public boolean isImportWithoutTemplateSelected() {
281 return importWithoutTemplate.getSelection();
282 }
283
284 public boolean isImportUseTemplateSelected() {
285 return importUseTemplate.getSelection();
286 }
287
288 public boolean isImportApplyTemplateSelected() {
289 return importApplyTemplate.getSelection();
290 }
291
292 public boolean isCreateTemplateSelected() {
293 return importCreateTemplate.getSelection();
294 }
295
296
297
298
299
300
301 @Override
302 public void dispose() {
303 templateSelectionComposite.removeTemplateSelectionListener(templateListener);
304 templatePresenter.dispose();
305 super.dispose();
306 }
307 }