From 552593866907c422c4b7bbd7b0751eed79c02f38 Mon Sep 17 00:00:00 2001 From: Vebryn Date: Wed, 23 Aug 2017 23:20:58 +0200 Subject: [PATCH 1/2] export fetched data into a csv file --- .../devices/AbstractSampleProvider.java | 32 ++++++++++++ .../gadgetbridge/devices/SampleProvider.java | 7 +++ .../devices/UnknownDeviceCoordinator.java | 5 ++ .../operations/FetchActivityOperation.java | 11 ++++ .../gadgetbridge/util/CSVExport.java | 51 +++++++++++++++++++ 5 files changed, 106 insertions(+) create mode 100644 app/src/main/java/nodomain/freeyourgadget/gadgetbridge/util/CSVExport.java diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/AbstractSampleProvider.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/AbstractSampleProvider.java index 701b812bef..b273234638 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/AbstractSampleProvider.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/AbstractSampleProvider.java @@ -22,11 +22,19 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import de.greenrobot.dao.AbstractDao; import de.greenrobot.dao.Property; import de.greenrobot.dao.query.QueryBuilder; import de.greenrobot.dao.query.WhereCondition; + import nodomain.freeyourgadget.gadgetbridge.database.DBHelper; import nodomain.freeyourgadget.gadgetbridge.entities.AbstractActivitySample; import nodomain.freeyourgadget.gadgetbridge.entities.DaoSession; @@ -40,6 +48,7 @@ * @param the sample type */ public abstract class AbstractSampleProvider implements SampleProvider { + private static final Logger LOG = LoggerFactory.getLogger(AbstractSampleProvider.class); private static final WhereCondition[] NO_CONDITIONS = new WhereCondition[0]; private final DaoSession mSession; private final GBDevice mDevice; @@ -90,6 +99,29 @@ public void addGBActivitySamples(T[] activitySamples) { getSampleDao().insertOrReplaceInTx(activitySamples); } + @Override + public void exportToCSV(T[] activitySamples, File outFile) { + String separator = ","; + + LOG.info("Exporting samples into csv file: " + outFile.getName()); + try { + BufferedWriter bw = new BufferedWriter(new FileWriter(outFile)); + + for (T sample : activitySamples){ + String line = sample.getTimestamp() + separator + sample.getDeviceId() + separator + sample.getUserId() + separator + sample.getRawIntensity() + separator + sample.getSteps() + separator + sample.getRawKind() + separator + sample.getHeartRate(); + + //LOG.debug("Adding line into buffer: " + line); + bw.write(line); + bw.newLine(); + } + + bw.flush(); + bw.close(); + } catch (IOException e) { + LOG.error(e.getMessage()); + } + } + @Nullable @Override public T getLatestActivitySample() { diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/SampleProvider.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/SampleProvider.java index 3af113b312..dad76a2af1 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/SampleProvider.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/SampleProvider.java @@ -20,6 +20,7 @@ import android.support.annotation.NonNull; import android.support.annotation.Nullable; +import java.io.File; import java.util.List; import nodomain.freeyourgadget.gadgetbridge.entities.AbstractActivitySample; @@ -88,6 +89,12 @@ public interface SampleProvider { */ void addGBActivitySamples(T[] activitySamples); + /** + * Exports samples into a CSV file + * @param activitySamples the samples to export + */ + void exportToCSV(T[] activitySamples, File outFile); + /** * Factory method to creates an empty sample of the correct type for this sample provider * @return the newly created "empty" sample diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/UnknownDeviceCoordinator.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/UnknownDeviceCoordinator.java index b53f6cd24a..f78b2c65a7 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/UnknownDeviceCoordinator.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/UnknownDeviceCoordinator.java @@ -23,6 +23,7 @@ import android.support.annotation.NonNull; import android.support.annotation.Nullable; +import java.io.File; import java.util.List; import nodomain.freeyourgadget.gadgetbridge.GBException; @@ -69,6 +70,10 @@ public List getSleepSamples(int timestamp_from, int timestamp_to) { return null; } + @Override + public void exportToCSV(AbstractActivitySample[] activitySamples, File outFile) { + } + @Override public void addGBActivitySample(AbstractActivitySample activitySample) { } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/miband2/operations/FetchActivityOperation.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/miband2/operations/FetchActivityOperation.java index 927af487f5..63712334c9 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/miband2/operations/FetchActivityOperation.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/miband2/operations/FetchActivityOperation.java @@ -27,6 +27,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import java.io.File; import java.io.IOException; import java.text.DateFormat; import java.util.ArrayList; @@ -57,6 +58,8 @@ import nodomain.freeyourgadget.gadgetbridge.service.devices.miband2.AbstractMiBand2Operation; import nodomain.freeyourgadget.gadgetbridge.util.ArrayUtils; import nodomain.freeyourgadget.gadgetbridge.util.DateTimeUtils; +import nodomain.freeyourgadget.gadgetbridge.util.FileUtils; +import nodomain.freeyourgadget.gadgetbridge.util.CSVExport; import nodomain.freeyourgadget.gadgetbridge.util.GB; /** @@ -207,6 +210,14 @@ private GregorianCalendar saveSamples() { timestamp.add(Calendar.MINUTE, 1); } + + // export csv on fetching + File myPath = null; + myPath = FileUtils.getExternalFilesDir(); + File myFile = new File(myPath, startTimestamp.getTimeInMillis() / 1000 + ".csv"); + CSVExport.exportToCSV(samples.toArray(new MiBandActivitySample[0]), myFile); + + // store samples on fetching sampleProvider.addGBActivitySamples(samples.toArray(new MiBandActivitySample[0])); saveLastSyncTimestamp(timestamp); diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/util/CSVExport.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/util/CSVExport.java new file mode 100644 index 0000000000..b12a92dcbd --- /dev/null +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/util/CSVExport.java @@ -0,0 +1,51 @@ +package nodomain.freeyourgadget.gadgetbridge.util; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; + +import nodomain.freeyourgadget.gadgetbridge.devices.AbstractSampleProvider; +import nodomain.freeyourgadget.gadgetbridge.entities.AbstractActivitySample; + +/** + * Created by Vebryn on 29/05/17. + */ + +public class CSVExport { + private static final Logger LOG = LoggerFactory.getLogger(AbstractSampleProvider.class); + + public static void exportToCSV(AbstractActivitySample[] activitySamples, File outFile) { + String separator = ","; + BufferedWriter bw = null; + + LOG.info("Exporting samples into csv file: " + outFile.getName()); + try { + bw = new BufferedWriter(new FileWriter(outFile)); + bw.write("TIMESTAMP" + separator + "DEVICE_ID" + separator + "USER_ID" + separator + "RAW_INTENSITY" + separator + "STEPS" + separator + "RAW_KIND" + separator + "HEART_RATE"); + bw.newLine(); + + for (AbstractActivitySample sample : activitySamples){ + String line = sample.getTimestamp() + separator + sample.getDeviceId() + separator + sample.getUserId() + separator + sample.getRawIntensity() + separator + sample.getSteps() + separator + sample.getRawKind() + separator + sample.getHeartRate(); + + //LOG.debug("Adding line into buffer: " + line); + bw.write(line); + bw.newLine(); + } + } catch (IOException e) { + LOG.error(e.getMessage()); + } finally { + if (bw != null){ + try { + bw.flush(); + bw.close(); + } catch (IOException e) { + LOG.error(e.getMessage()); + } + } + } + } +} From a867c0650714da6e2fb30ce38ae1a19536fc2724 Mon Sep 17 00:00:00 2001 From: Vebryn Date: Sun, 17 Sep 2017 22:54:37 +0200 Subject: [PATCH 2/2] clean old exportToCSV method use try-with-resources statement --- .../devices/AbstractSampleProvider.java | 28 ------------------- .../gadgetbridge/devices/SampleProvider.java | 8 ------ .../devices/UnknownDeviceCoordinator.java | 5 ---- .../gadgetbridge/util/CSVExport.java | 21 ++++---------- 4 files changed, 6 insertions(+), 56 deletions(-) diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/AbstractSampleProvider.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/AbstractSampleProvider.java index b273234638..803e3d1b47 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/AbstractSampleProvider.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/AbstractSampleProvider.java @@ -22,10 +22,6 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileWriter; -import java.io.IOException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -48,7 +44,6 @@ * @param the sample type */ public abstract class AbstractSampleProvider implements SampleProvider { - private static final Logger LOG = LoggerFactory.getLogger(AbstractSampleProvider.class); private static final WhereCondition[] NO_CONDITIONS = new WhereCondition[0]; private final DaoSession mSession; private final GBDevice mDevice; @@ -99,29 +94,6 @@ public void addGBActivitySamples(T[] activitySamples) { getSampleDao().insertOrReplaceInTx(activitySamples); } - @Override - public void exportToCSV(T[] activitySamples, File outFile) { - String separator = ","; - - LOG.info("Exporting samples into csv file: " + outFile.getName()); - try { - BufferedWriter bw = new BufferedWriter(new FileWriter(outFile)); - - for (T sample : activitySamples){ - String line = sample.getTimestamp() + separator + sample.getDeviceId() + separator + sample.getUserId() + separator + sample.getRawIntensity() + separator + sample.getSteps() + separator + sample.getRawKind() + separator + sample.getHeartRate(); - - //LOG.debug("Adding line into buffer: " + line); - bw.write(line); - bw.newLine(); - } - - bw.flush(); - bw.close(); - } catch (IOException e) { - LOG.error(e.getMessage()); - } - } - @Nullable @Override public T getLatestActivitySample() { diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/SampleProvider.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/SampleProvider.java index dad76a2af1..01954bb8c8 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/SampleProvider.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/SampleProvider.java @@ -20,9 +20,7 @@ import android.support.annotation.NonNull; import android.support.annotation.Nullable; -import java.io.File; import java.util.List; - import nodomain.freeyourgadget.gadgetbridge.entities.AbstractActivitySample; /** @@ -89,12 +87,6 @@ public interface SampleProvider { */ void addGBActivitySamples(T[] activitySamples); - /** - * Exports samples into a CSV file - * @param activitySamples the samples to export - */ - void exportToCSV(T[] activitySamples, File outFile); - /** * Factory method to creates an empty sample of the correct type for this sample provider * @return the newly created "empty" sample diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/UnknownDeviceCoordinator.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/UnknownDeviceCoordinator.java index f78b2c65a7..b53f6cd24a 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/UnknownDeviceCoordinator.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/UnknownDeviceCoordinator.java @@ -23,7 +23,6 @@ import android.support.annotation.NonNull; import android.support.annotation.Nullable; -import java.io.File; import java.util.List; import nodomain.freeyourgadget.gadgetbridge.GBException; @@ -70,10 +69,6 @@ public List getSleepSamples(int timestamp_from, int timestamp_to) { return null; } - @Override - public void exportToCSV(AbstractActivitySample[] activitySamples, File outFile) { - } - @Override public void addGBActivitySample(AbstractActivitySample activitySample) { } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/util/CSVExport.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/util/CSVExport.java index b12a92dcbd..c7b4420ea5 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/util/CSVExport.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/util/CSVExport.java @@ -8,7 +8,7 @@ import java.io.FileWriter; import java.io.IOException; -import nodomain.freeyourgadget.gadgetbridge.devices.AbstractSampleProvider; +import nodomain.freeyourgadget.gadgetbridge.devices.SampleProvider; import nodomain.freeyourgadget.gadgetbridge.entities.AbstractActivitySample; /** @@ -16,15 +16,13 @@ */ public class CSVExport { - private static final Logger LOG = LoggerFactory.getLogger(AbstractSampleProvider.class); + private static final Logger LOG = LoggerFactory.getLogger(SampleProvider.class); public static void exportToCSV(AbstractActivitySample[] activitySamples, File outFile) { String separator = ","; - BufferedWriter bw = null; LOG.info("Exporting samples into csv file: " + outFile.getName()); - try { - bw = new BufferedWriter(new FileWriter(outFile)); + try (BufferedWriter bw = new BufferedWriter(new FileWriter(outFile))) { bw.write("TIMESTAMP" + separator + "DEVICE_ID" + separator + "USER_ID" + separator + "RAW_INTENSITY" + separator + "STEPS" + separator + "RAW_KIND" + separator + "HEART_RATE"); bw.newLine(); @@ -35,17 +33,10 @@ public static void exportToCSV(AbstractActivitySample[] activitySamples, File ou bw.write(line); bw.newLine(); } + + bw.flush(); } catch (IOException e) { - LOG.error(e.getMessage()); - } finally { - if (bw != null){ - try { - bw.flush(); - bw.close(); - } catch (IOException e) { - LOG.error(e.getMessage()); - } - } + LOG.error("Error related to " + outFile.getName() + " file: " + e.getMessage(), e); } } }