package com.baselet.gwt.client.view.utils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.baselet.gwt.client.base.Notification; import com.baselet.gwt.client.element.DiagramXmlParser; import com.baselet.gwt.client.view.DrawPanel; import com.google.gwt.http.client.Request; import com.google.gwt.http.client.RequestBuilder; import com.google.gwt.http.client.RequestCallback; import com.google.gwt.http.client.RequestException; import com.google.gwt.http.client.RequestTimeoutException; import com.google.gwt.http.client.Response; import com.google.gwt.user.client.Window; public class DropboxIntegration { private final Logger log = LoggerFactory.getLogger(DropboxIntegration.class); private final DrawPanel diagramPanel; public DropboxIntegration(DrawPanel diagramPanel) { this.diagramPanel = diagramPanel; } public native void openDropboxExport(String fileURL, String filename) /*-{ var options = { files : [ // You can specify up to 100 files. { 'url' : fileURL, 'filename' : filename + '.uxf' } // ... ], // Success is called once all files have been successfully added to the user's // Dropbox, although they may not have synced to the user's devices yet. success : function() { // Indicate to the user that the files have been saved. // alert("Success! Files saved to your Dropbox."); $wnd.dropboxShowNotification("Saved diagram to dropbox"); }, // Progress is called periodically to update the application on the progress // of the user's downloads. The value passed to this callback is a float // between 0 and 1. The progress callback is guaranteed to be called at least // once with the value 1. progress : function(progress) { }, // Cancel is called if the user presses the Cancel button or closes the Saver. cancel : function() { }, // Error is called in the event of an unexpected response from the server // hosting the files, such as not being able to find a file. This callback is // also called if there is an error on Dropbox or if the user is over quota. error : function(errorMessage) { alert(errorMessage); } }; //alert(fileURL + " \n" + filename); $wnd.Dropbox.save(options); }-*/; public native void openDropboxImport() /*-{ var options = { // Required. Called when a user selects an item in the Chooser. success : function(files) { //alert("Here's the file link: " + files[0].link) $wnd.dropboxImportCallback(files[0].link); $wnd.dropboxShowNotification("Imported diagram from dropbox"); }, // Optional. Called when the user closes the dialog without selecting a file // and does not include any parameters. cancel : function() { }, // Optional. "preview" (default) is a preview link to the document for sharing, // "direct" is an expiring link to download the contents of the file. For more // information about link types, see Link types below. linkType : "direct", // or "direct" // Optional. A value of false (default) limits selection to a single file, while // true enables multiple file selection. multiselect : false, // or true // Optional. This is a list of file extensions. If specified, the user will // only be able to select files with these extensions. You may also specify // file types, such as "video" or "images" in the list. For more information, // see File types below. By default, all extensions are allowed. extensions : [ '.xml', '.uxf' ], }; $wnd.Dropbox.choose(options); }-*/; public native void exposeDropboxImportJSCallback(DropboxIntegration di) /*-{ $wnd.dropboxImportCallback = function(param) { di.@com.baselet.gwt.client.view.utils.DropboxIntegration::openDropboxImportCallback(*)(param); } }-*/; public void openDropboxImportCallback(String file) { // log.info(file); doGet(file); } public void doGet(String url) { RequestBuilder builder = new RequestBuilder(RequestBuilder.GET, url); try { builder.sendRequest(null, new RequestCallback() { @Override public void onError(Request request, Throwable exception) { if (exception instanceof RequestTimeoutException) { Window.alert("The request has timed out"); } else { Window.alert(exception.getMessage()); } } @Override public void onResponseReceived(Request request, Response response) { int STATUS_CODE_OK = 200; if (STATUS_CODE_OK == response.getStatusCode()) { diagramPanel.setDiagram(DiagramXmlParser.xmlToDiagram(response.getText())); } else { Window.alert("Something went wrong: HTTP Status Code: " + response.getStatusCode()); } } }); } catch (RequestException e) { throw new RuntimeException(e); } } public native void exposeDropboxShowNotification(DropboxIntegration di) /*-{ $wnd.dropboxShowNotification = function(param) { di.@com.baselet.gwt.client.view.utils.DropboxIntegration::showNOtification(*)(param); } }-*/; public void showNOtification(String text) { Notification.showInfo(text); } }