import net.ktnx.mobileledger.model.LedgerTransactionAccount;
import net.ktnx.mobileledger.model.MobileLedgerProfile;
import net.ktnx.mobileledger.utils.Globals;
+import net.ktnx.mobileledger.utils.Logger;
import net.ktnx.mobileledger.utils.NetworkUtil;
import net.ktnx.mobileledger.utils.UrlEncodedFormData;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.nio.charset.StandardCharsets;
+import java.util.Date;
+import java.util.GregorianCalendar;
import java.util.List;
import java.util.Locale;
import java.util.Map;
private String session;
private LedgerTransaction ltr;
private MobileLedgerProfile mProfile;
+ private boolean simulate = false;
+ public SendTransactionTask(TaskCallback callback, MobileLedgerProfile profile,
+ boolean simulate) {
+ taskCallback = callback;
+ mProfile = profile;
+ this.simulate = simulate;
+ }
public SendTransactionTask(TaskCallback callback, MobileLedgerProfile profile) {
taskCallback = callback;
mProfile = profile;
+ simulate = false;
}
private boolean sendOK() throws IOException {
HttpURLConnection http = NetworkUtil.prepareConnection(mProfile, "add");
ObjectWriter writer = mapper.writerFor(ParsedLedgerTransaction.class);
String body = writer.writeValueAsString(jsonTransaction);
+ if (simulate) {
+ debug("network", "The request would be: " + body);
+ try {
+ Thread.sleep(1500);
+ if (Math.random() > 0.3)
+ throw new RuntimeException("Simulated test exception");
+ }
+ catch (InterruptedException ex) {
+ Logger.debug("network", ex.toString());
+ }
+
+ return true;
+ }
+
byte[] bodyBytes = body.getBytes(StandardCharsets.UTF_8);
http.setDoOutput(true);
http.setDoInput(true);
http.addRequestProperty("Content-Length", String.valueOf(bodyBytes.length));
- debug("network", "request header: " + http.getRequestProperties().toString());
+ debug("network", "request header: " + http.getRequestProperties()
+ .toString());
try (OutputStream req = http.getOutputStream()) {
debug("network", "Request body: " + body);
UrlEncodedFormData params = new UrlEncodedFormData();
params.addPair("_formid", "identify-add");
- if (token != null) params.addPair("_token", token);
- params.addPair("date", Globals.formatLedgerDate(ltr.getDate()));
+ if (token != null)
+ params.addPair("_token", token);
+
+ Date transactionDate = ltr.getDate();
+ if (transactionDate == null) {
+ transactionDate = new GregorianCalendar().getTime();
+ }
+
+ params.addPair("date", Globals.formatLedgerDate(transactionDate));
params.addPair("description", ltr.getDescription());
for (LedgerTransactionAccount acc : ltr.getAccounts()) {
params.addPair("account", acc.getAccountName());
if (acc.isAmountSet())
params.addPair("amount", String.format(Locale.US, "%1.2f", acc.getAmount()));
- else params.addPair("amount", "");
+ else
+ params.addPair("amount", "");
}
String body = params.toString();
http.addRequestProperty("Content-Length", String.valueOf(body.length()));
- debug("network", "request header: " + http.getRequestProperties().toString());
+ debug("network", "request header: " + http.getRequestProperties()
+ .toString());
try (OutputStream req = http.getOutputStream()) {
debug("network", "Request body: " + body);
if (!sendOK()) {
int tried = 0;
while (!legacySendOK()) {
- tried++;
- if (tried >= 2)
- throw new IOException(String.format("aborting after %d tries", tried));
- sleep(100);
+ tried++;
+ if (tried >= 2)
+ throw new IOException(String.format("aborting after %d tries", tried));
+ sleep(100);
}
}
}