View Javadoc

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  		//TODO : select a file wizard icon
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  			//eParapherTools.infoMessage("Add", "Adding files");
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         GridData gd = new GridData();
128         gd.horizontalAlignment = SWT.RIGHT;
129         gd.verticalAlignment = SWT.BOTTOM;
130         checkConnectionButton.setLayoutData( gd );
131         checkConnectionButton.setText( Messages.getString( "NetworkParameterPage.CheckNetworkParameter" ) );
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 			//table.setBounds(new Rectangle(26, 21, 381, 370));
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             //DND MGT
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 			//Set Default selection			
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         			// Create new File array
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         			// Merge array
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 					//Refresh table
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 }