rusefi/java_console/shared_ui/src/main/java/com/rusefi/tools/online/Online.java

107 lines
3.8 KiB
Java
Raw Normal View History

2020-05-19 23:16:15 -07:00
package com.rusefi.tools.online;
2020-08-12 12:55:06 -07:00
import com.devexperts.logging.Logging;
import com.rusefi.core.FileUtil;
2020-06-04 20:32:52 -07:00
import com.rusefi.tune.xml.Msq;
import com.rusefi.ui.AuthTokenPanel;
2020-05-22 11:03:10 -07:00
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
2020-06-22 21:24:32 -07:00
import org.apache.http.concurrent.BasicFuture;
import org.apache.http.concurrent.FutureCallback;
2020-05-22 11:03:10 -07:00
import org.apache.http.entity.mime.MultipartEntity;
import org.apache.http.entity.mime.content.FileBody;
import org.apache.http.entity.mime.content.StringBody;
import org.apache.http.impl.client.DefaultHttpClient;
2020-08-12 17:37:37 -07:00
import org.jetbrains.annotations.Nullable;
2020-06-22 21:24:32 -07:00
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.ParseException;
2020-05-22 11:03:10 -07:00
2020-06-04 20:32:52 -07:00
import javax.swing.*;
import javax.xml.bind.JAXBException;
2020-06-17 20:50:57 -07:00
import java.io.File;
import java.io.IOException;
2020-06-04 20:32:52 -07:00
2020-05-19 23:16:15 -07:00
public class Online {
2020-08-12 12:55:06 -07:00
private final static Logging log = Logging.getLogging(Online.class);
2020-07-02 19:22:50 -07:00
public static final String outputXmlFileName = FileUtil.RUSEFI_SETTINGS_FOLDER + File.separator + "output.msq";
2020-05-22 11:03:10 -07:00
private static final String url = "https://rusefi.com/online/upload.php";
2020-05-19 23:16:15 -07:00
/**
* blocking call for http file upload
*/
public static UploadResult upload(File fileName, String authTokenValue) {
2020-08-10 19:12:38 -07:00
HttpClient httpclient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(url);
2020-05-19 23:16:15 -07:00
2020-08-10 19:12:38 -07:00
String responseString;
try {
FileBody uploadFilePart = new FileBody(fileName);
MultipartEntity reqEntity = new MultipartEntity();
reqEntity.addPart("upload-file", uploadFilePart);
reqEntity.addPart("rusefi_token", new StringBody(authTokenValue));
2020-05-19 23:16:15 -07:00
httpPost.setEntity(reqEntity);
2020-05-19 23:16:15 -07:00
HttpResponse response = httpclient.execute(httpPost);
2020-08-12 12:55:06 -07:00
log.debug("response=" + response);
log.debug("code " + response.getStatusLine().getStatusCode());
2020-08-10 19:12:38 -07:00
responseString = HttpUtil.getResponse(response);
2020-05-19 23:16:15 -07:00
2020-08-10 19:12:38 -07:00
} catch (IOException e) {
return new UploadResult(true, "Upload io ERROR " + e);
}
try {
JSONObject object = HttpUtil.getJsonResponse(responseString);
2020-05-19 23:16:15 -07:00
2020-08-12 12:55:06 -07:00
log.debug("object=" + object);
2020-06-22 21:24:32 -07:00
JSONArray info = (JSONArray) object.get("info");
JSONArray error = (JSONArray) object.get("error");
if (error != null) {
2020-08-12 12:55:06 -07:00
log.error("error " + error);
return new UploadResult(true, error);
2020-06-22 21:24:32 -07:00
} else {
2020-08-12 12:55:06 -07:00
log.debug("info " + info);
return new UploadResult(false, info);
2020-06-22 21:24:32 -07:00
}
2020-08-10 19:12:38 -07:00
} catch (ParseException e) {
return new UploadResult(true, "Upload Error " + responseString);
2020-06-22 21:24:32 -07:00
}
2020-05-19 23:16:15 -07:00
}
2020-06-04 20:32:52 -07:00
2020-08-12 12:55:06 -07:00
/**
2020-08-12 17:37:37 -07:00
* we are here in case of individual tune upload
2020-08-12 12:55:06 -07:00
*/
2024-02-16 13:19:15 -08:00
public static BasicFuture<UploadResult> uploadTune(Msq tune, JComponent parent, FutureCallback<UploadResult> callback) {
2020-08-12 17:37:37 -07:00
try {
tune.writeXmlFile(outputXmlFileName);
} catch (JAXBException | IOException e) {
2024-02-16 13:19:15 -08:00
throw new IllegalStateException("writeXmlFile failed writing tune", e);
2020-08-12 17:37:37 -07:00
}
return uploadFile(parent, callback, outputXmlFileName);
}
@Nullable
public static BasicFuture<UploadResult> uploadFile(JComponent parent, FutureCallback<UploadResult> callback, final String fileName) {
BasicFuture<UploadResult> result = new BasicFuture<>(callback);
String authToken = AuthTokenPanel.getAuthToken();
2020-08-12 17:37:37 -07:00
if (!AuthTokenPanel.hasToken()) {
AuthTokenPanel.showError(parent);
2020-06-22 21:24:32 -07:00
return null;
2020-06-04 20:32:52 -07:00
}
2020-06-22 21:24:32 -07:00
new Thread(new Runnable() {
@Override
public void run() {
2020-08-12 17:37:37 -07:00
UploadResult array = upload(new File(fileName), authToken);
2020-06-22 21:24:32 -07:00
result.completed(array);
}
}).start();
return result;
2020-06-04 20:32:52 -07:00
}
2020-05-19 23:16:15 -07:00
}