1 package org.eparapher.rcp.wizards;
2
3 import java.io.File;
4 import java.util.ArrayList;
5 import java.util.Iterator;
6
7 import org.eclipse.jface.viewers.IStructuredContentProvider;
8 import org.eclipse.jface.viewers.IStructuredSelection;
9 import org.eclipse.jface.viewers.ITableLabelProvider;
10 import org.eclipse.jface.viewers.LabelProvider;
11 import org.eclipse.jface.viewers.TableViewer;
12 import org.eclipse.jface.viewers.Viewer;
13 import org.eclipse.jface.viewers.ViewerSorter;
14 import org.eclipse.jface.wizard.WizardPage;
15 import org.eclipse.swt.SWT;
16 import org.eclipse.swt.dnd.DND;
17 import org.eclipse.swt.dnd.DropTarget;
18 import org.eclipse.swt.dnd.DropTargetEvent;
19 import org.eclipse.swt.dnd.DropTargetListener;
20 import org.eclipse.swt.dnd.FileTransfer;
21 import org.eclipse.swt.dnd.Transfer;
22 import org.eclipse.swt.graphics.Image;
23 import org.eclipse.swt.layout.FillLayout;
24 import org.eclipse.swt.layout.GridData;
25 import org.eclipse.swt.widgets.Button;
26 import org.eclipse.swt.widgets.Composite;
27 import org.eclipse.swt.widgets.Event;
28 import org.eclipse.swt.widgets.FileDialog;
29 import org.eclipse.swt.widgets.Group;
30 import org.eclipse.swt.widgets.Listener;
31 import org.eclipse.swt.widgets.Table;
32 import org.eclipse.swt.widgets.TableColumn;
33 import org.eclipse.ui.PlatformUI;
34 import org.eparapher.rcp.tools.BaseWidgetUtils;
35 import org.eparapher.rcp.tools.RCPSettings;
36 import org.eparapher.rcp.tools.GUIIcons;
37 import org.eparapher.core.signature.DefaultSignatureParameters;
38 import org.eparapher.core.tools.JVMSettings;
39
40 public class SelectFilesPage extends WizardPage implements Listener {
41
42 private Button addFile;
43 private Button removeFile;
44
45 private TableViewer fileListViewer;
46 private File[] fileList;
47
48 private String[] allowedExtentions;
49 private Composite container;
50
51 protected SelectFilesPage(String pageName) {
52 super("Select Files");
53 setTitle("Select Files");
54 setDescription("Please select the file that you will sign.");
55
56
57 setImageDescriptor( GUIIcons.WIZARD_SIGN_IMG2 );
58
59 fileList = new File[0];
60 allowedExtentions = new String[] { "*.*" };
61 }
62
63 public void setAllowedExtentions(String[] allowedExtentions) {
64 this.allowedExtentions = allowedExtentions;
65 }
66
67 protected SelectFilesPage(DefaultSignatureParameters dsp) {
68 this("Select Files");
69 fileList = dsp.getFileSelectiontoSign();
70 }
71 public void handleEvent(Event event) {
72 if (event.widget == addFile) {
73
74 FileDialog fd = new FileDialog(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), SWT.SAVE);
75 fd.setText("New Keystore");
76 fd.setFilterPath(JVMSettings.getUserHome());
77 fd.setFilterExtensions(allowedExtentions);
78 String filePath = fd.open();
79
80 File[] tempFile = new File[fileList.length+1];
81 System.arraycopy(fileList, 0, tempFile, 0, fileList.length);
82 tempFile[fileList.length] = new File(filePath);
83 fileList=tempFile;
84 }
85 if (event.widget == removeFile) {
86 IStructuredSelection structsel = (IStructuredSelection) fileListViewer.getSelection();
87 int nb = structsel.size();
88 File[] tempFile = new File[fileList.length-nb];
89 for (Iterator iterator = structsel.iterator(); iterator.hasNext();) {
90 File f2del = (File) iterator.next();
91 for (int i = 0; i < fileList.length; i++) {
92 if (fileList[i].equals(f2del))
93 fileList[i] = null;
94 }
95 }
96 ArrayList<File> newFileList = new ArrayList<File>();
97 for (int i=0; i < fileList.length; i++) {
98 if (fileList[i]!=null)
99 newFileList.add(fileList[i]);
100 }
101 fileList = newFileList.toArray(new File[] {});
102 }
103 fileListViewer.refresh();
104 }
105
106 public void createControl(Composite parent) {
107
108 container = BaseWidgetUtils.createColumnContainer( parent, 2, 1 );
109 setControl(container);
110
111 addFile = BaseWidgetUtils.createButton( container, "Add a file ", GUIIcons.FILE_BTN_ICON_ADD_FILE, 1 );
112 addFile.addListener(SWT.Selection, this);
113
114 removeFile = BaseWidgetUtils.createButton( container, "Remove file(s) ", GUIIcons.FILE_BTN_ICON_REMOVE_FILE, 1 );
115 removeFile.addListener(SWT.Selection, this);
116
117 BaseWidgetUtils.createSpacer( container, 2 );
118
119 Group group = BaseWidgetUtils.createGroup( container, "List of files (drag and drop here)", 2 );
120 Composite groupComposite = BaseWidgetUtils.createColumnContainer( group, 1, 1 );
121 groupComposite.setLayout(new FillLayout());
122 groupComposite.setLayoutData(new GridData(GridData.FILL_BOTH));
123 createFileListTable(groupComposite);
124
125
126
127
128
129
130
131
132
133
134 setPageComplete(true);
135
136 }
137
138
139 private void createFileListTable(Composite composite) {
140
141 final Table table = new Table(composite, SWT.BORDER | SWT.MULTI | SWT.FULL_SELECTION );
142 table.setHeaderVisible(false);
143 table.setLinesVisible(false);
144
145
146 TableColumn c1 = new TableColumn(table, SWT.LEFT);
147 c1.setText("");
148 c1.setWidth(25);
149 TableColumn c2 = new TableColumn(table, SWT.LEFT);
150 c2.setText("Path");
151 c2.setWidth(300);
152
153 fileListViewer = new TableViewer(table);
154 fileListViewer.setContentProvider(new ViewContentProvider());
155 fileListViewer.setLabelProvider(new ViewLabelProvider());
156 fileListViewer.setComparator(new NameSorter());
157 fileListViewer.setInput(getContainer());
158
159
160 int opts = DND.DROP_COPY | DND.DROP_MOVE;
161 DropTarget dt = new DropTarget(table, opts );
162 dt.setTransfer(new Transfer[] { FileTransfer.getInstance() });
163 dt.addDropListener(new DropFilesListner());
164
165 }
166
167 public File[] getSelectedFiles() {
168 IStructuredSelection structsel = (IStructuredSelection) fileListViewer.getSelection();
169 File[] tempFile = new File[structsel.size()];
170 int i=0;
171 for (Iterator iterator = structsel.iterator(); iterator.hasNext();) {
172 tempFile[i++] = (File) iterator.next();
173 }
174 return tempFile;
175 }
176
177 public File[] getFiles2Process() {
178 return fileList;
179 }
180
181 class ViewContentProvider implements IStructuredContentProvider {
182 public void inputChanged(Viewer v, Object oldInput, Object newInput) {
183 }
184 public void dispose() {
185 }
186 public Object[] getElements(Object parent) {
187 return fileList;
188 }
189 }
190
191 class ViewLabelProvider extends LabelProvider implements ITableLabelProvider {
192 public String getColumnText(Object obj, int index) {
193
194 if (obj==null)
195 return "";
196
197 File file = (File) obj;
198 switch (index) {
199 case 0: return "";
200 case 1: return file.getAbsolutePath();
201 default: break;
202 }
203 return "";
204 }
205 public Image getColumnImage(Object obj, int index) {
206 if (index == 0)
207 return getImage(obj);
208 return null;
209 }
210
211 public Image getImage(Object obj) {
212 String filename = ((File) obj).getAbsolutePath();
213 return GUIIcons.getIconFromFileExt(filename);
214 }
215 }
216 class NameSorter extends ViewerSorter {
217 }
218 class DropFilesListner implements DropTargetListener {
219 public void drop(DropTargetEvent event) {
220 String fileNames[] = null;
221 FileTransfer ft = FileTransfer.getInstance();
222 if (ft.isSupportedType(event.currentDataType)) {
223 fileNames = (String[])event.data;
224
225
226 File[] tmpf = new File[fileNames.length];
227 for (int i = 0; i < tmpf.length; i++) {
228 tmpf[i]= new File(fileNames[i]);
229 }
230
231
232 File[] finalList = new File[fileList.length + tmpf.length];
233 System.arraycopy(fileList, 0, finalList, 0, fileList.length);
234 System.arraycopy(tmpf, 0, finalList, fileList.length, tmpf.length);
235 fileList = finalList;
236
237
238 fileListViewer.refresh();
239 }
240 }
241
242 public void dragEnter(DropTargetEvent arg0) {
243 }
244
245 public void dragLeave(DropTargetEvent arg0) {
246 }
247
248 public void dragOperationChanged(DropTargetEvent arg0) {
249
250 }
251
252 public void dragOver(DropTargetEvent arg0) {
253 }
254
255 public void dropAccept(DropTargetEvent arg0) {
256 }
257 }
258 }