]> git.ktnx.net Git - mobile-ledger.git/blobdiff - app/src/main/java/net/ktnx/mobileledger/async/SendTransactionTask.java
SendTransactionTask: log full request JSON in simulation mode (debug builds)
[mobile-ledger.git] / app / src / main / java / net / ktnx / mobileledger / async / SendTransactionTask.java
index 2e8d9531931e7eef501dc0dedbe16cf76f207747..496624bf52475a6c22e6e2a2388d9d48d44aa53b 100644 (file)
@@ -28,6 +28,7 @@ import net.ktnx.mobileledger.model.LedgerTransaction;
 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;
 
@@ -38,6 +39,8 @@ import java.io.InputStreamReader;
 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;
@@ -54,25 +57,20 @@ public class SendTransactionTask extends AsyncTask<LedgerTransaction, Void, Void
     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 {
-//        if (BuildConfig.DEBUG) {
-//        TODO: simulate random problems
-//
-//            try {
-//                Thread.sleep(1500);
-//            }
-//            catch (InterruptedException ex) {
-//                Logger.debug("network", ex.toString());
-//            }
-//
-//            return true;
-//        }
-
         HttpURLConnection http = NetworkUtil.prepareConnection(mProfile, "add");
         http.setRequestMethod("PUT");
         http.setRequestProperty("Content-Type", "application/json");
@@ -84,6 +82,20 @@ public class SendTransactionTask extends AsyncTask<LedgerTransaction, Void, Void
         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);
@@ -135,7 +147,13 @@ public class SendTransactionTask extends AsyncTask<LedgerTransaction, Void, Void
         params.addPair("_formid", "identify-add");
         if (token != null)
             params.addPair("_token", token);
-        params.addPair("date", Globals.formatLedgerDate(ltr.getDate()));
+
+        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());