package fr.lteconsulting.hexa.client.ui.uploadjs;
import java.util.Date;
import com.google.gwt.core.client.JavaScriptException;
import com.google.gwt.dom.client.Element;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.DecoratorPanel;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.RootPanel;
import fr.lteconsulting.hexa.client.tools.HexaTools;
public class Uploader extends Composite
{
DecoratorPanel deco = new DecoratorPanel();
Label text = new Label( "Drop files here..." );
public Uploader()
{
deco.setWidget( text );
initWidget( deco );
initDropZone( getElement() );
}
private void onDragEnter()
{
deco.getElement().getStyle().setBackgroundColor( "grey" );
}
private void onDragLeave()
{
deco.getElement().getStyle().clearBackgroundColor();
}
private native void initDropZone( Element dropzone )
/*-{
var me = this;
if( ! dropzone.addEventListener )
return;
dropzone.addEventListener( "dragenter", function(event)
{
event.preventDefault();
me.@fr.lteconsulting.hexa.client.ui.uploadjs.Uploader::onDragEnter()();
}, true );
dropzone.addEventListener( "dragover", function(event)
{
event.preventDefault();
me.@fr.lteconsulting.hexa.client.ui.uploadjs.Uploader::onDragEnter()();
}, true );
dropzone.addEventListener( "dragleave", function(event)
{
event.preventDefault();
me.@fr.lteconsulting.hexa.client.ui.uploadjs.Uploader::onDragLeave()();
}, true );
dropzone.addEventListener( "drop", function(event)
{
event.preventDefault();
var allTheFiles = event.dataTransfer.files;
//$wnd.droppedFiles = allTheFiles;
me.@fr.lteconsulting.hexa.client.ui.uploadjs.Uploader::onDropFiles(Lfr/lteconsulting/hexa/client/ui/uploadjs/FilesList;)( allTheFiles );
}, true);
}-*/;
void onDropFiles( FilesList files )
{
if( files == null )
{
HexaTools.alert( "null drop !" );
return;
}
int count = files.getCount();
for( int i = 0; i < count; i++ )
{
final ProgressBar bar = new ProgressBar();
RootPanel.get().add( bar );
bar.setValue( 0 );
final File file = files.getFile( i );
file.getAsBinary( new File.Callback()
{
@Override
public void onDataReady( String fileData )
{
String boundary = "AJAX------" + Math.random() + "" + new Date().getTime();
XMLHttpRequestEx req = XMLHttpRequestEx.create();
req.open( "POST", "upload.php" );
req.setRequestHeader( "Content-Type", "multipart/form-data; boundary=" + boundary );
String CRLF = "\r\n";
String data = "--" + boundary + CRLF;
data += "Content-Disposition: form-data; ";
data += "name=\"" + "uploadedFile" + "\"; ";
data += "filename=\"" + file.getFileName() + "\"; " + CRLF;
data += "Content-Type: " + file.getMimeType();
data += CRLF + CRLF;
data += fileData + CRLF;
data += "--" + boundary + "--" + CRLF;
try
{
req.sendAsBinary( data, new XMLHttpRequestEx.Callback()
{
@Override
public void onProgress( int percentage )
{
if( percentage < 0 )
{
HexaTools.alert( "error" );
return;
}
bar.setValue( percentage );
}
} );
}
catch( JavaScriptException e )
{
}
}
} );
}
}
}