package org.eparapher.rcp.wizards; import java.io.File; import java.util.ArrayList; import java.util.Iterator; import org.eclipse.jface.viewers.IStructuredContentProvider; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.ITableLabelProvider; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.jface.viewers.Viewer; import org.eclipse.jface.viewers.ViewerSorter; import org.eclipse.jface.wizard.WizardPage; import org.eclipse.swt.SWT; import org.eclipse.swt.dnd.DND; import org.eclipse.swt.dnd.DropTarget; import org.eclipse.swt.dnd.DropTargetEvent; import org.eclipse.swt.dnd.DropTargetListener; import org.eclipse.swt.dnd.FileTransfer; import org.eclipse.swt.dnd.Transfer; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.layout.FillLayout; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.FileDialog; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Listener; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableColumn; import org.eclipse.ui.PlatformUI; import org.eparapher.core.tools.DefaulteParapherParameters; import org.eparapher.core.tools.JVMSettings; import org.eparapher.rcp.tools.BaseWidgetUtils; import org.eparapher.rcp.tools.GUIIcons; public class SelectFilesPage extends WizardPage implements Listener { private Button addFile; private Button removeFile; private TableViewer fileListViewer; private File[] fileList; private String[] allowedExtentions; private Composite container; protected SelectFilesPage(String pageName) { super("Select Files"); setTitle("Select Files"); setDescription("Please select the file that you will sign."); //TODO : select a file wizard icon setImageDescriptor( GUIIcons.WIZARD_SIGN_IMG2 ); fileList = new File[0]; allowedExtentions = new String[] { "*.*" }; } public void setAllowedExtentions(String[] allowedExtentions) { this.allowedExtentions = allowedExtentions; } protected SelectFilesPage(DefaulteParapherParameters dsp) { this("Select Files"); fileList = dsp.getFileSelection(); } public void handleEvent(Event event) { if (event.widget == addFile) { //eParapherTools.infoMessage("Add", "Adding files"); FileDialog fd = new FileDialog(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), SWT.SAVE); fd.setText("New Keystore"); fd.setFilterPath(JVMSettings.getUserHome()); fd.setFilterExtensions(allowedExtentions); String filePath = fd.open(); File[] tempFile = new File[fileList.length+1]; System.arraycopy(fileList, 0, tempFile, 0, fileList.length); tempFile[fileList.length] = new File(filePath); fileList=tempFile; } if (event.widget == removeFile) { IStructuredSelection structsel = (IStructuredSelection) fileListViewer.getSelection(); int nb = structsel.size(); File[] tempFile = new File[fileList.length-nb]; for (Iterator iterator = structsel.iterator(); iterator.hasNext();) { File f2del = (File) iterator.next(); for (int i = 0; i < fileList.length; i++) { if (fileList[i] != null && fileList[i].equals(f2del)) fileList[i] = null; } } ArrayList newFileList = new ArrayList(); for (int i=0; i < fileList.length; i++) { if (fileList[i]!=null) newFileList.add(fileList[i]); } fileList = newFileList.toArray(new File[] {}); } fileListViewer.refresh(); } public void createControl(Composite parent) { container = BaseWidgetUtils.createColumnContainer( parent, 2, 1 ); setControl(container); addFile = BaseWidgetUtils.createButton( container, "Add a file ", GUIIcons.FILE_BTN_ICON_ADD_FILE, 1 ); addFile.addListener(SWT.Selection, this); removeFile = BaseWidgetUtils.createButton( container, "Remove file(s) ", GUIIcons.FILE_BTN_ICON_REMOVE_FILE, 1 ); removeFile.addListener(SWT.Selection, this); BaseWidgetUtils.createSpacer( container, 2 ); Group group = BaseWidgetUtils.createGroup( container, "List of files (drag and drop here)", 2 ); Composite groupComposite = BaseWidgetUtils.createColumnContainer( group, 1, 1 ); groupComposite.setLayout(new FillLayout()); groupComposite.setLayoutData(new GridData(GridData.FILL_BOTH)); createFileListTable(groupComposite); /** GridData gd = new GridData(); gd.horizontalAlignment = SWT.RIGHT; gd.verticalAlignment = SWT.BOTTOM; checkConnectionButton.setLayoutData( gd ); checkConnectionButton.setText( Messages.getString( "NetworkParameterPage.CheckNetworkParameter" ) ); */ setPageComplete(true); } private void createFileListTable(Composite composite) { final Table table = new Table(composite, SWT.BORDER | SWT.MULTI | SWT.FULL_SELECTION ); table.setHeaderVisible(false); table.setLinesVisible(false); //table.setBounds(new Rectangle(26, 21, 381, 370)); TableColumn c1 = new TableColumn(table, SWT.LEFT); c1.setText(""); c1.setWidth(25); TableColumn c2 = new TableColumn(table, SWT.LEFT); c2.setText("Path"); c2.setWidth(300); fileListViewer = new TableViewer(table); fileListViewer.setContentProvider(new ViewContentProvider()); fileListViewer.setLabelProvider(new ViewLabelProvider()); fileListViewer.setComparator(new NameSorter()); fileListViewer.setInput(getContainer()); //DND MGT int opts = DND.DROP_COPY | DND.DROP_MOVE; DropTarget dt = new DropTarget(table, opts ); dt.setTransfer(new Transfer[] { FileTransfer.getInstance() }); dt.addDropListener(new DropFilesListner()); //Set Default selection } public File[] getSelectedFiles() { IStructuredSelection structsel = (IStructuredSelection) fileListViewer.getSelection(); File[] tempFile = new File[structsel.size()]; int i=0; for (Iterator iterator = structsel.iterator(); iterator.hasNext();) { tempFile[i++] = (File) iterator.next(); } return tempFile; } public File[] getFiles2Process() { return fileList; } class ViewContentProvider implements IStructuredContentProvider { public void inputChanged(Viewer v, Object oldInput, Object newInput) { } public void dispose() { } public Object[] getElements(Object parent) { return fileList; } } class ViewLabelProvider extends LabelProvider implements ITableLabelProvider { public String getColumnText(Object obj, int index) { if (obj==null) return ""; File file = (File) obj; switch (index) { case 0: return ""; case 1: return file.getAbsolutePath(); default: break; } return ""; } public Image getColumnImage(Object obj, int index) { if (index == 0) return getImage(obj); return null; } public Image getImage(Object obj) { String filename = ((File) obj).getAbsolutePath(); return GUIIcons.getIconFromFileExt(filename); } } class NameSorter extends ViewerSorter { } class DropFilesListner implements DropTargetListener { public void drop(DropTargetEvent event) { String fileNames[] = null; FileTransfer ft = FileTransfer.getInstance(); if (ft.isSupportedType(event.currentDataType)) { fileNames = (String[])event.data; // Create new File array File[] tmpf = new File[fileNames.length]; for (int i = 0; i < tmpf.length; i++) { tmpf[i]= new File(fileNames[i]); } // Merge array File[] finalList = new File[fileList.length + tmpf.length]; System.arraycopy(fileList, 0, finalList, 0, fileList.length); System.arraycopy(tmpf, 0, finalList, fileList.length, tmpf.length); fileList = finalList; //Refresh table fileListViewer.refresh(); } } public void dragEnter(DropTargetEvent arg0) { } public void dragLeave(DropTargetEvent arg0) { } public void dragOperationChanged(DropTargetEvent arg0) { } public void dragOver(DropTargetEvent arg0) { } public void dropAccept(DropTargetEvent arg0) { } } }