From 0025b790b669553da82b28066a4e6d76e45a4927 Mon Sep 17 00:00:00 2001 From: sh123 Date: Sat, 3 Sep 2022 18:24:43 +0300 Subject: [PATCH] Upsert for position items --- .../storage/position/PositionItemDao.java | 37 ++++++++++++++----- .../position/PositionItemRepository.java | 18 +-------- .../storage/station/StationItemDao.java | 1 - 3 files changed, 29 insertions(+), 27 deletions(-) diff --git a/codec2talkie/src/main/java/com/radio/codec2talkie/storage/position/PositionItemDao.java b/codec2talkie/src/main/java/com/radio/codec2talkie/storage/position/PositionItemDao.java index 44c96ff..ad237a9 100644 --- a/codec2talkie/src/main/java/com/radio/codec2talkie/storage/position/PositionItemDao.java +++ b/codec2talkie/src/main/java/com/radio/codec2talkie/storage/position/PositionItemDao.java @@ -5,6 +5,7 @@ import androidx.room.Dao; import androidx.room.Insert; import androidx.room.OnConflictStrategy; import androidx.room.Query; +import androidx.room.Transaction; import androidx.room.Update; import com.radio.codec2talkie.storage.message.MessageItem; @@ -12,32 +13,48 @@ import com.radio.codec2talkie.storage.message.MessageItem; import java.util.List; @Dao -public interface PositionItemDao { +public abstract class PositionItemDao { @Insert - void insertPositionItem(PositionItem logItem); + public abstract void insertPositionItem(PositionItem positionItem); @Update - void updatePositionItem(PositionItem logItem); + public abstract void updatePositionItem(PositionItem positionItem); + + @Transaction + public void upsertPositionItem(PositionItem positionItem) { + PositionItem oldPosition = getLastPositionItem(positionItem.getSrcCallsign()); + if (oldPosition != null && PositionItem.equalTo(positionItem, oldPosition)) { + // update id and coordinates from existing position + positionItem.setId(oldPosition.getId()); + positionItem.setLatitude(oldPosition.getLatitude()); + positionItem.setLongitude(oldPosition.getLongitude()); + //Log.i(TAG, "UPDATE " + positionItem.getSrcCallsign()); + updatePositionItem(positionItem); + } else { + //Log.i(TAG, "INSERT " + positionItem.getSrcCallsign()); + insertPositionItem(positionItem); + } + } @Query("SELECT * FROM PositionItem WHERE srcCallsign = :srcCallsign ORDER BY timestampEpoch DESC LIMIT 1") - PositionItem getLastPositionItem(String srcCallsign); + public abstract PositionItem getLastPositionItem(String srcCallsign); @Query("SELECT srcCallsign from PositionItem GROUP BY srcCallsign") - LiveData> getStationNames(); + public abstract LiveData> getStationNames(); @Query("SELECT * FROM PositionItem ORDER by timestampEpoch DESC") - LiveData> getAllPositionItems(); + public abstract LiveData> getAllPositionItems(); @Query("SELECT * FROM PositionItem WHERE srcCallsign = :srcCallsign ORDER BY timestampEpoch ASC") - LiveData> getPositionItems(String srcCallsign); + public abstract LiveData> getPositionItems(String srcCallsign); @Query("DELETE FROM PositionItem WHERE srcCallsign = :srcCallsign") - void deletePositionItems(String srcCallsign); + public abstract void deletePositionItems(String srcCallsign); @Query("DELETE FROM PositionItem WHERE timestampEpoch < :timestamp") - void deletePositionItemsOlderThanTimestamp(long timestamp); + public abstract void deletePositionItemsOlderThanTimestamp(long timestamp); @Query("DELETE FROM PositionItem") - void deleteAllPositionItems(); + public abstract void deleteAllPositionItems(); } diff --git a/codec2talkie/src/main/java/com/radio/codec2talkie/storage/position/PositionItemRepository.java b/codec2talkie/src/main/java/com/radio/codec2talkie/storage/position/PositionItemRepository.java index f647fa6..e9f99b0 100644 --- a/codec2talkie/src/main/java/com/radio/codec2talkie/storage/position/PositionItemRepository.java +++ b/codec2talkie/src/main/java/com/radio/codec2talkie/storage/position/PositionItemRepository.java @@ -2,12 +2,9 @@ package com.radio.codec2talkie.storage.position; import android.app.Application; import android.util.Log; - import androidx.lifecycle.LiveData; - -import com.radio.codec2talkie.maps.MapActivity; import com.radio.codec2talkie.storage.AppDatabase; -import com.radio.codec2talkie.tools.DateTools; + import java.util.List; @@ -23,18 +20,7 @@ public class PositionItemRepository { public void upsertPositionItem(PositionItem positionItem) { AppDatabase.getDatabaseExecutor().execute(() -> { - PositionItem oldPosition = _positionItemDao.getLastPositionItem(positionItem.getSrcCallsign()); - if (oldPosition != null && PositionItem.equalTo(positionItem, oldPosition)) { - // update id and coordinates from existing position - positionItem.setId(oldPosition.getId()); - positionItem.setLatitude(oldPosition.getLatitude()); - positionItem.setLongitude(oldPosition.getLongitude()); - //Log.i(TAG, "UPDATE " + positionItem.getSrcCallsign()); - _positionItemDao.updatePositionItem(positionItem); - } else { - //Log.i(TAG, "INSERT " + positionItem.getSrcCallsign()); - _positionItemDao.insertPositionItem(positionItem); - } + _positionItemDao.updatePositionItem(positionItem); }); } diff --git a/codec2talkie/src/main/java/com/radio/codec2talkie/storage/station/StationItemDao.java b/codec2talkie/src/main/java/com/radio/codec2talkie/storage/station/StationItemDao.java index 38b7b44..da195ae 100644 --- a/codec2talkie/src/main/java/com/radio/codec2talkie/storage/station/StationItemDao.java +++ b/codec2talkie/src/main/java/com/radio/codec2talkie/storage/station/StationItemDao.java @@ -2,7 +2,6 @@ package com.radio.codec2talkie.storage.station; import android.database.sqlite.SQLiteConstraintException; import android.util.Log; -import android.util.Pair; import androidx.lifecycle.LiveData; import androidx.room.Dao;