blob: 7d2b34af0c28e47944dcfe5822c059b15ef9e5c8 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2011, 2013 EclipseSource and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* EclipseSource - initial API and implementation
******************************************************************************/
package org.eclipse.rap.addons.filedialog.demo.examples;
import java.io.File;
import org.eclipse.rap.addons.fileupload.DiskFileUploadReceiver;
import org.eclipse.rap.addons.fileupload.FileDetails;
import org.eclipse.rap.addons.fileupload.FileUploadEvent;
import org.eclipse.rap.addons.fileupload.FileUploadHandler;
import org.eclipse.rap.addons.fileupload.FileUploadListener;
import org.eclipse.rap.examples.ExampleUtil;
import org.eclipse.rap.examples.IExamplePage;
import org.eclipse.rap.rwt.service.ServerPushSession;
import org.eclipse.rap.rwt.widgets.DialogCallback;
import org.eclipse.rap.rwt.widgets.DialogUtil;
import org.eclipse.rap.rwt.widgets.FileUpload;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.FileDialog;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
public class FileUploadExamplePage implements IExamplePage {
private static final String INITIAL_TEXT = "no files uploaded.";
private FileUpload fileUpload;
private Label fileNameLabel;
private Button uploadButton;
private Text logText;
private ServerPushSession pushSession;
public void createControl( Composite parent ) {
parent.setLayout( ExampleUtil.createMainLayout( 3 ) );
Control controlsColumn = createControlsColumn( parent );
controlsColumn.setLayoutData( ExampleUtil.createFillData() );
Control serverColumn = createLogColumn( parent );
serverColumn.setLayoutData( ExampleUtil.createFillData() );
Control infoColumn = createInfoColumn( parent );
infoColumn.setLayoutData( ExampleUtil.createFillData() );
}
private Control createControlsColumn( Composite parent ) {
Composite column = new Composite( parent, SWT.NONE );
column.setLayout( ExampleUtil.createGridLayoutWithoutMargin( 1, false ) );
Control fileUploadArea = createFileUploadArea( column );
fileUploadArea.setLayoutData( ExampleUtil.createHorzFillData() );
Control fileDialogArea = createFileDialogArea( column );
fileDialogArea.setLayoutData( ExampleUtil.createHorzFillData() );
return column;
}
private Control createLogColumn( Composite parent ) {
Composite column = new Composite( parent, SWT.NONE );
column.setLayout( ExampleUtil.createGridLayout( 1, false, true, true ) );
ExampleUtil.createHeading( column, "Server log", 2 );
logText = new Text( column, SWT.MULTI | SWT.READ_ONLY | SWT.H_SCROLL | SWT.BORDER );
logText.setText( INITIAL_TEXT );
logText.setLayoutData( ExampleUtil.createFillData() );
createClearButton( column );
return column;
}
private static Control createInfoColumn( Composite parent ) {
Label label = new Label( parent, SWT.NONE );
label.setLayoutData( ExampleUtil.createFillData() );
return label;
}
private Control createFileUploadArea( Composite parent ) {
Composite area = new Composite( parent, SWT.NONE );
area.setLayout( ExampleUtil.createGridLayout( 2, true, true, true ) );
ExampleUtil.createHeading( area, "FileUpload widget", 2 );
fileUpload = new FileUpload( area, SWT.NONE );
fileUpload.setText( "Select File" );
fileUpload.setLayoutData( new GridData( SWT.FILL, SWT.CENTER, false, false ) );
fileNameLabel = new Label( area, SWT.NONE );
fileNameLabel.setText( "no file selected" );
fileNameLabel.setLayoutData( ExampleUtil.createHorzFillData() );
fileNameLabel.setLayoutData( new GridData( SWT.FILL, SWT.CENTER, true, false ) );
uploadButton = new Button( area, SWT.PUSH );
uploadButton.setText( "Upload" );
uploadButton.setLayoutData( new GridData( SWT.FILL, SWT.CENTER, false, false ) );
new Label( area, SWT.NONE );
fileUpload.addSelectionListener( new SelectionAdapter() {
@Override
public void widgetSelected( SelectionEvent e ) {
String fileName = fileUpload.getFileName();
fileNameLabel.setText( fileName == null ? "" : fileName );
}
} );
final String url = startUploadReceiver();
pushSession = new ServerPushSession();
uploadButton.addSelectionListener( new SelectionAdapter() {
@Override
public void widgetSelected( SelectionEvent e ) {
pushSession.start();
fileUpload.submit( url );
}
} );
return area;
}
private String startUploadReceiver() {
DiskFileUploadReceiver receiver = new DiskFileUploadReceiver();
FileUploadHandler uploadHandler = new FileUploadHandler( receiver );
uploadHandler.addUploadListener( new FileUploadListener() {
public void uploadProgress( FileUploadEvent event ) {
// handle upload progress
}
public void uploadFailed( FileUploadEvent event ) {
addToLog( "upload failed: " + event.getException() );
}
public void uploadFinished( FileUploadEvent event ) {
for( FileDetails file : event.getFileDetails() ) {
addToLog( "received: " + file.getFileName() );
}
}
} );
return uploadHandler.getUploadUrl();
}
private void addToLog( final String message ) {
if( !logText.isDisposed() ) {
logText.getDisplay().asyncExec( new Runnable() {
public void run() {
String text = logText.getText();
if( INITIAL_TEXT.equals( text ) ) {
text = "";
}
logText.setText( text + message + "\n" );
pushSession.stop();
}
} );
}
}
private Composite createFileDialogArea( Composite parent ) {
Composite area = new Composite( parent, SWT.NONE );
area.setLayout( ExampleUtil.createGridLayout( 2, true, true, true ) );
ExampleUtil.createHeading( area, "FileDialog", 2 );
createAddSingleButton( area );
new Label( area, SWT.NONE );
createAddMultiButton( area );
return area;
}
private void createAddSingleButton( Composite parent ) {
Button button = new Button( parent, SWT.PUSH );
button.setLayoutData( ExampleUtil.createHorzFillData() );
button.setText( "Single File" );
button.setToolTipText( "Launches file dialog for single file selection." );
final Shell parentShell = parent.getShell();
button.addSelectionListener( new SelectionAdapter() {
@Override
public void widgetSelected( SelectionEvent e ) {
openFileDialog( parentShell, false );
}
} );
}
private void createAddMultiButton( Composite parent ) {
Button button = new Button( parent, SWT.PUSH );
button.setLayoutData( ExampleUtil.createHorzFillData() );
button.setText( "Multiple Files" );
button.setToolTipText( "Launches file dialog for multiple file selection." );
final Shell parentShell = parent.getShell();
button.addSelectionListener( new SelectionAdapter() {
@Override
public void widgetSelected( SelectionEvent e ) {
openFileDialog( parentShell, true );
}
} );
}
private void createClearButton( Composite parent ) {
Button button = new Button( parent, SWT.PUSH );
button.setLayoutData( ExampleUtil.createHorzFillData() );
button.setText( "Clear" );
button.setToolTipText( "Clears the results list" );
button.addSelectionListener( new SelectionAdapter() {
@Override
public void widgetSelected( SelectionEvent e ) {
logText.setText( INITIAL_TEXT );
}
} );
}
private void openFileDialog( Shell parent, boolean multi ) {
final FileDialog fileDialog = new FileDialog( parent, getDialogStyle( multi ) );
fileDialog.setText( multi ? "Upload Multiple Files" : "Upload Single File" );
DialogUtil.open( fileDialog, new DialogCallback() {
public void dialogClosed( int returnCode ) {
showUploadResults( fileDialog );
}
} );
}
private void showUploadResults( FileDialog fileDialog ) {
String[] selectedFiles = fileDialog.getFileNames();
for( String fileName : selectedFiles ) {
addToLog( "received: " + new File( fileName ).getName() );
}
}
private static int getDialogStyle( boolean multi ) {
int result = SWT.SHELL_TRIM | SWT.APPLICATION_MODAL;
if( multi ) {
result |= SWT.MULTI;
}
return result;
}
}