package org.hwbot.prime.tasks;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.Reader;
import java.net.URL;
import java.net.UnknownHostException;
import org.hwbot.api.bench.dto.DeviceRecordsDTO;
import org.hwbot.prime.api.HardwareRecordsStatusAware;
import org.hwbot.prime.api.NetworkStatusAware;
import org.hwbot.prime.service.BenchService;
import android.os.AsyncTask;
import android.util.Log;
import com.google.gson.Gson;
public class HardwareRecordsTask extends AsyncTask<Void, Void, Void> {
private HardwareRecordsStatusAware observer;
private final NetworkStatusAware networkStatusAware;
private final Integer deviceId;
private final Integer userId;
public HardwareRecordsTask(NetworkStatusAware networkStatusAware, HardwareRecordsStatusAware observer, Integer deviceId, Integer userId) {
this.networkStatusAware = networkStatusAware;
this.observer = observer;
this.deviceId = deviceId;
this.userId = userId;
}
@Override
public Void doInBackground(Void... param) {
if (deviceId == null || observer == null) {
Log.w(this.getClass().getSimpleName(), "No device or observer loaded, can not load records.");
return null;
}
Reader reader = null;
try {
URL url;
if (userId != null) {
url = new URL(BenchService.SERVER + "/api/hardware/device/" + deviceId + "/records?userId=" + userId);
} else {
url = new URL(BenchService.SERVER + "/api/hardware/device/" + deviceId + "/records");
}
Log.i(this.getClass().getSimpleName(), "Loading device records from: " + url);
reader = new BufferedReader(new InputStreamReader(url.openStream()));
DeviceRecordsDTO deviceInfoWithRecordsDTO = new Gson().fromJson(reader, DeviceRecordsDTO.class);
Log.i(this.getClass().getSimpleName(), "Loaded: " + deviceInfoWithRecordsDTO);
if (deviceInfoWithRecordsDTO == null) {
observer.notifyRecordsFailed(org.hwbot.prime.api.HardwareStatusAware.Status.unknown_device);
} else if (userId != null) {
observer.notifyDevicePersonalRecords(deviceInfoWithRecordsDTO);
} else {
observer.notifyDeviceRecords(deviceInfoWithRecordsDTO);
}
} catch (UnknownHostException e) {
Log.w(this.getClass().getSimpleName(), "No network access: " + e.getMessage());
networkStatusAware.showNetworkPopupOnce();
observer.notifyRecordsFailed(org.hwbot.prime.api.HardwareStatusAware.Status.no_network);
} catch (Exception e) {
Log.e(this.getClass().getSimpleName(), "Error: " + e.getMessage());
e.printStackTrace();
observer.notifyRecordsFailed(org.hwbot.prime.api.HardwareStatusAware.Status.service_down);
} finally {
try {
if (reader != null) {
reader.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
return null;
}
}