/* * Copyright (C) 2007-2012 Mathieu Baudier * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.argeo.eclipse.ui.specific; import java.io.InputStream; import org.apache.commons.io.IOUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.argeo.ArgeoException; import org.eclipse.rwt.widgets.Upload; import org.eclipse.swt.SWT; import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; public class GenericUploadControl extends Composite { private final static Log log = LogFactory .getLog(GenericUploadControl.class); private Upload upload; public GenericUploadControl(Composite parent, int style, String browseLabel) { super(parent, style); createControl(this, browseLabel); } private void createControl(Composite parent, String browseLabel) { parent.setLayout(new GridLayout(1, false)); parent.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false)); upload = new Upload(parent, SWT.BORDER); upload.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false)); upload.setBrowseButtonText(browseLabel); // upload.addModifyListener(new UploadListener()); parent.pack(); } /** * Wrap upload.getLastFileUploaded(). Gets the name of the last uploaded * file. This method can be called even if the upload has not finished yet. */ public String getLastFileUploadedName() { return upload.getLastFileUploaded(); } public boolean isControlEmpty() { String path = upload.getPath(); if (log.isTraceEnabled()) log.trace("UploadControl chosen path : " + path); if (path == null || "".equals(path.trim())) return true; else return false; } public byte[] performUpload() { boolean success = upload.performUpload(); if (success) { if (upload.getUploadItem().getFileSize() == -1) throw new ArgeoException("File " + upload.getUploadItem().getFileName() + " has not been uploaded, its size is -1"); InputStream inStream = null; byte[] fileBA = null; try { inStream = upload.getUploadItem().getFileInputStream(); fileBA = IOUtils.toByteArray(inStream); } catch (Exception e) { throw new ArgeoException("Cannot read uploaded data", e); } finally { IOUtils.closeQuietly(inStream); } return fileBA; } return null; } public void addModifyListener(ModifyListener listener) { upload.addModifyListener(listener); } // 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()); // } // } // // } // }