package org.argeo.eclipse.ui.specific; import java.io.InputStream; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.argeo.ArgeoException; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.wizard.WizardPage; import org.eclipse.rwt.widgets.Upload; import org.eclipse.rwt.widgets.UploadAdapter; import org.eclipse.rwt.widgets.UploadEvent; import org.eclipse.rwt.widgets.UploadItem; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Label; public class ImportFileSystemWizardPage extends WizardPage { private Log log = LogFactory.getLog(ImportFileSystemWizardPage.class); private Upload uploadFile; public ImportFileSystemWizardPage() { super("Import from file system"); setDescription("Import files from the local file system into the JCR repository"); } public void createControl(Composite parent) { Composite composite = new Composite(parent, SWT.NONE); composite.setLayout(new GridLayout(2, false)); composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false)); new Label(composite, SWT.NONE).setText("Pick up a file"); uploadFile = new Upload(composite, SWT.BORDER); uploadFile.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false)); uploadFile.setBrowseButtonText("Open..."); uploadFile.addUploadListener(new UploadManager(uploadFile)); setControl(composite); } public String getObjectPath() { // NOTE Returns the full file name of the last uploaded file including // the file path as selected by the user on his local machine. // The full path including the directory and file drive are only // returned, if the browser supports reading this properties. In Firefox // 3, only the filename is returned. return uploadFile.getPath(); } public String getObjectName() { return uploadFile.getUploadItem().getFileName(); } public String getObjectType() { return "nt:file"; } public void performFinish() { boolean success = uploadFile.performUpload(); if (!success) throw new ArgeoException("Cannot upload file named " + uploadFile.getPath()); } protected void handleUploadFinished(final Upload upload) { if (log.isTraceEnabled()) { UploadItem uploadItem = upload.getUploadItem(); log.trace("filename : " + uploadItem.getFileName()); log.trace("content-type : " + uploadItem.getContentType()); } } public InputStream getFileInputStream() { return uploadFile.getUploadItem().getFileInputStream(); } private class UploadManager extends UploadAdapter { private Upload upload; public UploadManager(Upload upload) { super(); this.upload = upload; } public void uploadFinished(UploadEvent uploadEvent) { handleUploadFinished(upload); } public void uploadInProgress(UploadEvent uploadEvent) { } public void uploadException(UploadEvent uploadEvent) { Exception exc = uploadEvent.getUploadException(); if (exc != null) { MessageDialog.openError(Display.getCurrent().getActiveShell(), "Error", exc.getMessage()); } } } }