Upsert for position items

master
sh123 2022-09-03 18:24:43 +03:00
rodzic 4530c58811
commit 0025b790b6
3 zmienionych plików z 29 dodań i 27 usunięć

Wyświetl plik

@ -5,6 +5,7 @@ import androidx.room.Dao;
import androidx.room.Insert; import androidx.room.Insert;
import androidx.room.OnConflictStrategy; import androidx.room.OnConflictStrategy;
import androidx.room.Query; import androidx.room.Query;
import androidx.room.Transaction;
import androidx.room.Update; import androidx.room.Update;
import com.radio.codec2talkie.storage.message.MessageItem; import com.radio.codec2talkie.storage.message.MessageItem;
@ -12,32 +13,48 @@ import com.radio.codec2talkie.storage.message.MessageItem;
import java.util.List; import java.util.List;
@Dao @Dao
public interface PositionItemDao { public abstract class PositionItemDao {
@Insert @Insert
void insertPositionItem(PositionItem logItem); public abstract void insertPositionItem(PositionItem positionItem);
@Update @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") @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") @Query("SELECT srcCallsign from PositionItem GROUP BY srcCallsign")
LiveData<List<String>> getStationNames(); public abstract LiveData<List<String>> getStationNames();
@Query("SELECT * FROM PositionItem ORDER by timestampEpoch DESC") @Query("SELECT * FROM PositionItem ORDER by timestampEpoch DESC")
LiveData<List<PositionItem>> getAllPositionItems(); public abstract LiveData<List<PositionItem>> getAllPositionItems();
@Query("SELECT * FROM PositionItem WHERE srcCallsign = :srcCallsign ORDER BY timestampEpoch ASC") @Query("SELECT * FROM PositionItem WHERE srcCallsign = :srcCallsign ORDER BY timestampEpoch ASC")
LiveData<List<PositionItem>> getPositionItems(String srcCallsign); public abstract LiveData<List<PositionItem>> getPositionItems(String srcCallsign);
@Query("DELETE FROM PositionItem WHERE srcCallsign = :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") @Query("DELETE FROM PositionItem WHERE timestampEpoch < :timestamp")
void deletePositionItemsOlderThanTimestamp(long timestamp); public abstract void deletePositionItemsOlderThanTimestamp(long timestamp);
@Query("DELETE FROM PositionItem") @Query("DELETE FROM PositionItem")
void deleteAllPositionItems(); public abstract void deleteAllPositionItems();
} }

Wyświetl plik

@ -2,12 +2,9 @@ package com.radio.codec2talkie.storage.position;
import android.app.Application; import android.app.Application;
import android.util.Log; import android.util.Log;
import androidx.lifecycle.LiveData; import androidx.lifecycle.LiveData;
import com.radio.codec2talkie.maps.MapActivity;
import com.radio.codec2talkie.storage.AppDatabase; import com.radio.codec2talkie.storage.AppDatabase;
import com.radio.codec2talkie.tools.DateTools;
import java.util.List; import java.util.List;
@ -23,18 +20,7 @@ public class PositionItemRepository {
public void upsertPositionItem(PositionItem positionItem) { public void upsertPositionItem(PositionItem positionItem) {
AppDatabase.getDatabaseExecutor().execute(() -> { AppDatabase.getDatabaseExecutor().execute(() -> {
PositionItem oldPosition = _positionItemDao.getLastPositionItem(positionItem.getSrcCallsign()); _positionItemDao.updatePositionItem(positionItem);
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);
}
}); });
} }

Wyświetl plik

@ -2,7 +2,6 @@ package com.radio.codec2talkie.storage.station;
import android.database.sqlite.SQLiteConstraintException; import android.database.sqlite.SQLiteConstraintException;
import android.util.Log; import android.util.Log;
import android.util.Pair;
import androidx.lifecycle.LiveData; import androidx.lifecycle.LiveData;
import androidx.room.Dao; import androidx.room.Dao;