/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package neembuu.uploader.uploaders; import shashaank.smallmodule.SmallModule; import neembuu.uploader.interfaces.Uploader; import neembuu.uploader.interfaces.Account; import java.util.logging.Level; import java.util.logging.Logger; import neembuu.uploader.accounts.SugarSyncAccount; import neembuu.uploader.httpclient.NUHttpClient; import neembuu.uploader.httpclient.httprequest.NUHttpGet; import neembuu.uploader.httpclient.httprequest.NUHttpPost; import neembuu.uploader.interfaces.UploadStatus; import neembuu.uploader.interfaces.UploaderAccountNecessary; import neembuu.uploader.interfaces.abstractimpl.AbstractUploader; import neembuu.uploader.uploaders.common.FileUtils; import neembuu.uploader.uploaders.common.StringUtils; import neembuu.uploader.utils.NULogger; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpPut; import org.apache.http.entity.ContentType; import org.apache.http.entity.StringEntity; import org.apache.http.entity.mime.HttpMultipartMode; import org.apache.http.entity.mime.MultipartEntity; import org.apache.http.util.EntityUtils; /** * * @author dinesh */ @SmallModule( exports={SugarSync.class,SugarSyncAccount.class}, interfaces={Uploader.class,Account.class}, name="SugarSync.com" ) public class SugarSync extends AbstractUploader implements UploaderAccountNecessary { SugarSyncAccount sugarSyncAccount = (SugarSyncAccount) getAccountsProvider().getAccount("SugarSync.com"); private HttpClient httpclient = NUHttpClient.getHttpClient(); private HttpResponse httpResponse; private NUHttpPost httpPost; private NUHttpGet httpGet; private String stringResponse; private String USER_INFO_API_URL = "https://api.sugarsync.com/user"; private String CREATE_FILE_REQUEST_TEMPLATE = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>" + "<file>" + "<displayName>%s</displayName>" + "<mediaType>%s</mediaType>" + "</file>"; private String upload_folder_url; private String SugarSync_File_Upload_URL; private long fileSizeLimit = Long.MAX_VALUE; //No limit public SugarSync() { host = "SugarSync.com"; downURL = UploadStatus.NA.getLocaleSpecificString(); delURL = UploadStatus.NA.getLocaleSpecificString(); //It has to be successful.. as it won't work without login if (sugarSyncAccount.loginsuccessful) { host = sugarSyncAccount.username + " | SugarSync.com"; } } private void getUserInfo() throws Exception { httpGet = new NUHttpGet(USER_INFO_API_URL); httpGet.setHeader("Authorization", sugarSyncAccount.getAuth_token()); httpResponse = httpclient.execute(httpGet); stringResponse = EntityUtils.toString(httpResponse.getEntity()); upload_folder_url = StringUtils.stringBetweenTwoStrings(stringResponse, "<magicBriefcase>", "</magicBriefcase>"); NULogger.getLogger().log(Level.INFO, "Upload_Folder : {0}", upload_folder_url); } /* * This method is used to write the POST data like username and password. * This takes the "content" value as a parameter which needs to be posted. * */ public void writeHttpContent(String content) throws Exception { httpPost.setEntity(new StringEntity(content, ContentType.TEXT_XML)); //Send a XML file httpPost.addHeader("Authorization", sugarSyncAccount.getAuth_token()); httpResponse = httpclient.execute(httpPost); HttpEntity httpEntity = httpResponse.getEntity(); stringResponse = EntityUtils.toString(httpEntity); if (httpResponse.getStatusLine().getStatusCode() == 401) { NULogger.getLogger().info("hey SugarSync login failed :("); return; } if(httpResponse.containsHeader("Location")){ SugarSync_File_Upload_URL = httpResponse.getLastHeader("Location").getValue(); SugarSync_File_Upload_URL = SugarSync_File_Upload_URL + "/data"; NULogger.getLogger().log(Level.INFO, "Post URL : {0}", SugarSync_File_Upload_URL); } else { NULogger.getLogger().info("There might be problem interface getting Upload URL from SugarSync. Please try after some time :("); } } public void postData(String content, String posturl) throws Exception { httpPost = new NUHttpPost(posturl); httpGet = new NUHttpGet(posturl); writeHttpContent(content); } @Override public void run() { try { if (sugarSyncAccount.loginsuccessful) { host = sugarSyncAccount.username + " | SugarSync.com"; } else { host = "SugarSync.com"; uploadInvalid(); return; } uploadInitialising(); getUserInfo(); String ext = FileUtils.getFileExtension(file); String CREATE_FILE_REQUEST = String.format(CREATE_FILE_REQUEST_TEMPLATE, file.getName(), ext + " file"); NULogger.getLogger().info("now creating file request............"); postData(CREATE_FILE_REQUEST, upload_folder_url); HttpPut httpput = new HttpPut(SugarSync_File_Upload_URL); httpput.setHeader("Authorization", sugarSyncAccount.getAuth_token()); MultipartEntity reqEntity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE); reqEntity.addPart("", createMonitoredFileBody()); httpput.setEntity(reqEntity); uploading(); NULogger.getLogger().info("Now uploading your file into sugarsync........ Please wait......................"); NULogger.getLogger().log(Level.INFO, "Now executing.......{0}", httpput.getRequestLine()); httpResponse = httpclient.execute(httpput); HttpEntity entity = httpResponse.getEntity(); NULogger.getLogger().info(httpResponse.getStatusLine().toString()); if (httpResponse.getStatusLine().getStatusCode() == 204) { NULogger.getLogger().info("File uploaded successfully :)"); uploadFinished(); } else { throw new Exception("There might be problem with your internet connection or server error. Please try again some after time :("); } } catch (Exception e) { Logger.getLogger(SugarSync.class.getName()).log(Level.SEVERE, null, e); uploadFailed(); } } }