added persistence layer
This commit is contained in:
parent
58e17fd4ea
commit
d6e14a4eb2
|
|
@ -48,7 +48,7 @@ android {
|
|||
if (it.name == 'testDebugUnitTest') {
|
||||
systemProperty 'debug', 'true'
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -126,6 +126,7 @@ dependencies {
|
|||
|
||||
|
||||
|
||||
implementation project(":services:core")
|
||||
implementation project(":services:localstorage")
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,369 @@
|
|||
{
|
||||
"formatVersion": 1,
|
||||
"database": {
|
||||
"version": 1,
|
||||
"identityHash": "d28b1e0e329b50864a35edd04cfde3dc",
|
||||
"entities": [
|
||||
{
|
||||
"tableName": "EventEntity",
|
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `created_at` TEXT, `name` TEXT, `description` TEXT, `ecu` TEXT, `vehicle` TEXT, `vehicleId` INTEGER, FOREIGN KEY(`vehicleId`) REFERENCES `VehicleEntity`(`vehicleId`) ON UPDATE NO ACTION ON DELETE SET NULL )",
|
||||
"fields": [
|
||||
{
|
||||
"fieldPath": "id",
|
||||
"columnName": "id",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "createdAt",
|
||||
"columnName": "created_at",
|
||||
"affinity": "TEXT",
|
||||
"notNull": false
|
||||
},
|
||||
{
|
||||
"fieldPath": "name",
|
||||
"columnName": "name",
|
||||
"affinity": "TEXT",
|
||||
"notNull": false
|
||||
},
|
||||
{
|
||||
"fieldPath": "description",
|
||||
"columnName": "description",
|
||||
"affinity": "TEXT",
|
||||
"notNull": false
|
||||
},
|
||||
{
|
||||
"fieldPath": "ecu",
|
||||
"columnName": "ecu",
|
||||
"affinity": "TEXT",
|
||||
"notNull": false
|
||||
},
|
||||
{
|
||||
"fieldPath": "vehicle",
|
||||
"columnName": "vehicle",
|
||||
"affinity": "TEXT",
|
||||
"notNull": false
|
||||
},
|
||||
{
|
||||
"fieldPath": "vehicleId",
|
||||
"columnName": "vehicleId",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": false
|
||||
}
|
||||
],
|
||||
"primaryKey": {
|
||||
"columnNames": [
|
||||
"id"
|
||||
],
|
||||
"autoGenerate": true
|
||||
},
|
||||
"indices": [],
|
||||
"foreignKeys": [
|
||||
{
|
||||
"table": "VehicleEntity",
|
||||
"onDelete": "SET NULL",
|
||||
"onUpdate": "NO ACTION",
|
||||
"columns": [
|
||||
"vehicleId"
|
||||
],
|
||||
"referencedColumns": [
|
||||
"vehicleId"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"tableName": "VehicleEntity",
|
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`vehicleId` INTEGER PRIMARY KEY AUTOINCREMENT, `vin` TEXT, `model` TEXT, `brand` TEXT, `addedAt` TEXT)",
|
||||
"fields": [
|
||||
{
|
||||
"fieldPath": "vehicleId",
|
||||
"columnName": "vehicleId",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": false
|
||||
},
|
||||
{
|
||||
"fieldPath": "vin",
|
||||
"columnName": "vin",
|
||||
"affinity": "TEXT",
|
||||
"notNull": false
|
||||
},
|
||||
{
|
||||
"fieldPath": "model",
|
||||
"columnName": "model",
|
||||
"affinity": "TEXT",
|
||||
"notNull": false
|
||||
},
|
||||
{
|
||||
"fieldPath": "brand",
|
||||
"columnName": "brand",
|
||||
"affinity": "TEXT",
|
||||
"notNull": false
|
||||
},
|
||||
{
|
||||
"fieldPath": "addedAt",
|
||||
"columnName": "addedAt",
|
||||
"affinity": "TEXT",
|
||||
"notNull": false
|
||||
}
|
||||
],
|
||||
"primaryKey": {
|
||||
"columnNames": [
|
||||
"vehicleId"
|
||||
],
|
||||
"autoGenerate": true
|
||||
},
|
||||
"indices": [],
|
||||
"foreignKeys": []
|
||||
},
|
||||
{
|
||||
"tableName": "VehicleInfoEntity",
|
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`infoVehicleId` INTEGER NOT NULL, `key` TEXT, `value` TEXT, `id` INTEGER PRIMARY KEY AUTOINCREMENT, FOREIGN KEY(`infoVehicleId`) REFERENCES `VehicleEntity`(`vehicleId`) ON UPDATE NO ACTION ON DELETE CASCADE )",
|
||||
"fields": [
|
||||
{
|
||||
"fieldPath": "infoVehicleId",
|
||||
"columnName": "infoVehicleId",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "key",
|
||||
"columnName": "key",
|
||||
"affinity": "TEXT",
|
||||
"notNull": false
|
||||
},
|
||||
{
|
||||
"fieldPath": "value",
|
||||
"columnName": "value",
|
||||
"affinity": "TEXT",
|
||||
"notNull": false
|
||||
},
|
||||
{
|
||||
"fieldPath": "id",
|
||||
"columnName": "id",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": false
|
||||
}
|
||||
],
|
||||
"primaryKey": {
|
||||
"columnNames": [
|
||||
"id"
|
||||
],
|
||||
"autoGenerate": true
|
||||
},
|
||||
"indices": [],
|
||||
"foreignKeys": [
|
||||
{
|
||||
"table": "VehicleEntity",
|
||||
"onDelete": "CASCADE",
|
||||
"onUpdate": "NO ACTION",
|
||||
"columns": [
|
||||
"infoVehicleId"
|
||||
],
|
||||
"referencedColumns": [
|
||||
"vehicleId"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"tableName": "VehicleSystemEntity",
|
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`vehicleId` INTEGER NOT NULL, `systemId` TEXT, `systemName` TEXT, `id` INTEGER PRIMARY KEY AUTOINCREMENT, FOREIGN KEY(`vehicleId`) REFERENCES `VehicleEntity`(`vehicleId`) ON UPDATE NO ACTION ON DELETE CASCADE )",
|
||||
"fields": [
|
||||
{
|
||||
"fieldPath": "vehicleId",
|
||||
"columnName": "vehicleId",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "systemId",
|
||||
"columnName": "systemId",
|
||||
"affinity": "TEXT",
|
||||
"notNull": false
|
||||
},
|
||||
{
|
||||
"fieldPath": "systemName",
|
||||
"columnName": "systemName",
|
||||
"affinity": "TEXT",
|
||||
"notNull": false
|
||||
},
|
||||
{
|
||||
"fieldPath": "id",
|
||||
"columnName": "id",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": false
|
||||
}
|
||||
],
|
||||
"primaryKey": {
|
||||
"columnNames": [
|
||||
"id"
|
||||
],
|
||||
"autoGenerate": true
|
||||
},
|
||||
"indices": [],
|
||||
"foreignKeys": [
|
||||
{
|
||||
"table": "VehicleEntity",
|
||||
"onDelete": "CASCADE",
|
||||
"onUpdate": "NO ACTION",
|
||||
"columns": [
|
||||
"vehicleId"
|
||||
],
|
||||
"referencedColumns": [
|
||||
"vehicleId"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"tableName": "LeaseEntity",
|
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`leaseId` INTEGER PRIMARY KEY AUTOINCREMENT, `created_at` TEXT, `delivered_at` TEXT, `appointmentStart` TEXT, `appointmentEnd` TEXT, `vehicle` TEXT, `token` TEXT)",
|
||||
"fields": [
|
||||
{
|
||||
"fieldPath": "leaseId",
|
||||
"columnName": "leaseId",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": false
|
||||
},
|
||||
{
|
||||
"fieldPath": "createdAt",
|
||||
"columnName": "created_at",
|
||||
"affinity": "TEXT",
|
||||
"notNull": false
|
||||
},
|
||||
{
|
||||
"fieldPath": "deliveredAt",
|
||||
"columnName": "delivered_at",
|
||||
"affinity": "TEXT",
|
||||
"notNull": false
|
||||
},
|
||||
{
|
||||
"fieldPath": "appointmentStart",
|
||||
"columnName": "appointmentStart",
|
||||
"affinity": "TEXT",
|
||||
"notNull": false
|
||||
},
|
||||
{
|
||||
"fieldPath": "appointmentEnd",
|
||||
"columnName": "appointmentEnd",
|
||||
"affinity": "TEXT",
|
||||
"notNull": false
|
||||
},
|
||||
{
|
||||
"fieldPath": "vehicle",
|
||||
"columnName": "vehicle",
|
||||
"affinity": "TEXT",
|
||||
"notNull": false
|
||||
},
|
||||
{
|
||||
"fieldPath": "token",
|
||||
"columnName": "token",
|
||||
"affinity": "TEXT",
|
||||
"notNull": false
|
||||
}
|
||||
],
|
||||
"primaryKey": {
|
||||
"columnNames": [
|
||||
"leaseId"
|
||||
],
|
||||
"autoGenerate": true
|
||||
},
|
||||
"indices": [],
|
||||
"foreignKeys": []
|
||||
},
|
||||
{
|
||||
"tableName": "LeaseSystemEntity",
|
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`leaseId` INTEGER NOT NULL, `systemId` TEXT, `systemName` TEXT, `id` INTEGER PRIMARY KEY AUTOINCREMENT, FOREIGN KEY(`leaseId`) REFERENCES `LeaseEntity`(`leaseId`) ON UPDATE NO ACTION ON DELETE CASCADE )",
|
||||
"fields": [
|
||||
{
|
||||
"fieldPath": "leaseId",
|
||||
"columnName": "leaseId",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "systemId",
|
||||
"columnName": "systemId",
|
||||
"affinity": "TEXT",
|
||||
"notNull": false
|
||||
},
|
||||
{
|
||||
"fieldPath": "systemName",
|
||||
"columnName": "systemName",
|
||||
"affinity": "TEXT",
|
||||
"notNull": false
|
||||
},
|
||||
{
|
||||
"fieldPath": "id",
|
||||
"columnName": "id",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": false
|
||||
}
|
||||
],
|
||||
"primaryKey": {
|
||||
"columnNames": [
|
||||
"id"
|
||||
],
|
||||
"autoGenerate": true
|
||||
},
|
||||
"indices": [],
|
||||
"foreignKeys": [
|
||||
{
|
||||
"table": "LeaseEntity",
|
||||
"onDelete": "CASCADE",
|
||||
"onUpdate": "NO ACTION",
|
||||
"columns": [
|
||||
"leaseId"
|
||||
],
|
||||
"referencedColumns": [
|
||||
"leaseId"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"tableName": "LeaseInfoEntity",
|
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`leaseId` INTEGER NOT NULL, `id` INTEGER PRIMARY KEY AUTOINCREMENT, FOREIGN KEY(`leaseId`) REFERENCES `LeaseEntity`(`leaseId`) ON UPDATE NO ACTION ON DELETE CASCADE )",
|
||||
"fields": [
|
||||
{
|
||||
"fieldPath": "leaseId",
|
||||
"columnName": "leaseId",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "id",
|
||||
"columnName": "id",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": false
|
||||
}
|
||||
],
|
||||
"primaryKey": {
|
||||
"columnNames": [
|
||||
"id"
|
||||
],
|
||||
"autoGenerate": true
|
||||
},
|
||||
"indices": [],
|
||||
"foreignKeys": [
|
||||
{
|
||||
"table": "LeaseEntity",
|
||||
"onDelete": "CASCADE",
|
||||
"onUpdate": "NO ACTION",
|
||||
"columns": [
|
||||
"leaseId"
|
||||
],
|
||||
"referencedColumns": [
|
||||
"leaseId"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"setupQueries": [
|
||||
"CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)",
|
||||
"INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, \"d28b1e0e329b50864a35edd04cfde3dc\")"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
|
@ -1,91 +0,0 @@
|
|||
package eu.csc.vehown.services.persistence;
|
||||
|
||||
import android.content.Context;
|
||||
|
||||
import androidx.room.Room;
|
||||
import androidx.test.core.app.ApplicationProvider;
|
||||
import androidx.test.ext.junit.runners.AndroidJUnit4;
|
||||
|
||||
import eu.csc.vehown.services.persistence.dao.LeaseEntityDao;
|
||||
import eu.csc.vehown.services.persistence.dao.VehicleDao;
|
||||
import eu.csc.vehown.services.persistence.dao.VehicleInfoDao;
|
||||
import eu.csc.vehown.services.persistence.entity.lease.LeaseEntity;
|
||||
import eu.csc.vehown.services.persistence.entity.vehicle.VehicleEntity;
|
||||
import eu.csc.vehown.services.persistence.entity.vehicle.VehicleWithEvents;
|
||||
import eu.csc.vehown.services.persistence.entity.vehicle.VehicleWithInfos;
|
||||
import org.junit.After;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
|
||||
import static org.hamcrest.core.IsEqual.equalTo;
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertNotNull;
|
||||
import static org.junit.Assert.assertThat;
|
||||
|
||||
@RunWith(AndroidJUnit4.class)
|
||||
public class SimpleEntityReadWriteTest {
|
||||
private LeaseEntityDao leaseDao;
|
||||
private VehicleDao vehicleDao;
|
||||
private VehicleOwnerDatabase db;
|
||||
|
||||
private static Logger logger = Logger.getLogger(SimpleEntityReadWriteTest.class.getSimpleName());
|
||||
private VehicleInfoDao vehicleInfoDao;
|
||||
|
||||
@Before
|
||||
public void createDb() {
|
||||
Context context = ApplicationProvider.getApplicationContext();
|
||||
db = Room.inMemoryDatabaseBuilder(context, VehicleOwnerDatabase.class).build();
|
||||
leaseDao = db.leaseDao();
|
||||
vehicleDao = db.vehicleDao();
|
||||
vehicleInfoDao = db.vehicleInfoDao();
|
||||
}
|
||||
|
||||
@After
|
||||
public void closeDb() throws IOException {
|
||||
db.close();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void writeUserAndReadInList() throws Exception {logger.info("START");
|
||||
|
||||
System.out.println("ASD");
|
||||
LeaseEntity lease = TestUtil.createExampleLease();
|
||||
LeaseEntity lease2 = TestUtil.createExampleLease();
|
||||
|
||||
leaseDao.insert(lease);
|
||||
leaseDao.insert(lease2);
|
||||
|
||||
System.out.println(lease.getLeaseId());
|
||||
|
||||
|
||||
//List<User> byName = userDao.findUsersByName("george");
|
||||
assertThat(leaseDao.selectAll().size(), equalTo(2));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testVehicleEvents(){
|
||||
|
||||
vehicleDao.insert(TestUtil.getExampleVehicle());
|
||||
VehicleEntity vehicleEntity = vehicleDao.loadVehicleEntityByVin(TestUtil.getExampleVehicle().getVin());
|
||||
assertNotNull(vehicleEntity);
|
||||
|
||||
vehicleInfoDao.insert(TestUtil.getVehicleInfoEntities(vehicleEntity));
|
||||
VehicleWithInfos infos = vehicleDao.getVehicleInfos(vehicleEntity.getVehicleId());
|
||||
|
||||
assertEquals(infos.infos.size(), TestUtil.getVehicleInfoEntities(vehicleEntity).size());
|
||||
|
||||
assertEquals(2, vehicleInfoDao.getAll().size());
|
||||
vehicleDao.deleteVehicle(vehicleEntity);
|
||||
|
||||
assertEquals(0, vehicleInfoDao.getAll().size());
|
||||
|
||||
VehicleWithEvents vehicleWithEvents = vehicleDao.getVehicleEvents(1L);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -14,7 +14,7 @@ public class LoginDataSource {
|
|||
LoggedInUser fakeUser =
|
||||
new LoggedInUser(
|
||||
java.util.UUID.randomUUID().toString(),
|
||||
"Jane Doe");
|
||||
"John Doe");
|
||||
return new Result.Success<>(fakeUser);
|
||||
} catch (Exception e) {
|
||||
return new Result.Error(new IOException("Error logging in", e));
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ import java.util.List;
|
|||
@Getter
|
||||
@Setter
|
||||
@NoArgsConstructor
|
||||
public class CustomerVehicle implements Serializable, ICustomerVehicle {
|
||||
public class CustomerVehicle extends LocalStorageIdentifier<Long> implements Serializable, ICustomerVehicle {
|
||||
|
||||
private String vin;
|
||||
private String licenseplate;
|
||||
|
|
|
|||
|
|
@ -10,19 +10,18 @@ import java.text.DateFormat;
|
|||
@Getter
|
||||
@Setter
|
||||
@NoArgsConstructor
|
||||
public class Event implements Serializable {
|
||||
public class Event implements IEvent, Serializable {
|
||||
|
||||
public enum EventStatus { UNDEFINED, PERMANENT, PENDING, CONFIRMED }
|
||||
public enum EventSeverity { LOW, MEDIUM, HIGH }
|
||||
|
||||
private String id;
|
||||
private String name;
|
||||
private String description;
|
||||
private String ecu;
|
||||
private String vehicle;
|
||||
private long timestamp;
|
||||
private EventStatus status;
|
||||
private EventSeverity severity;
|
||||
private String id;
|
||||
|
||||
private String name;
|
||||
private String description;
|
||||
private String ecuId;
|
||||
private String vehicle;
|
||||
private Long timestamp;
|
||||
private EventStatus status;
|
||||
private EventSeverity severity;
|
||||
|
||||
public Event(String name) {
|
||||
this.name = name;
|
||||
|
|
@ -35,11 +34,11 @@ public class Event implements Serializable {
|
|||
this.timestamp = timestamp;
|
||||
}
|
||||
|
||||
public Event(String id, String name, String description, String ecu, String vehicle, long timestamp, EventStatus status, EventSeverity severity) {
|
||||
public Event(String id, String name, String description, String ecuId, String vehicle, long timestamp, EventStatus status, EventSeverity severity) {
|
||||
this.id = id;
|
||||
this.name = name;
|
||||
this.description = description;
|
||||
this.ecu = ecu;
|
||||
this.ecuId = ecuId;
|
||||
this.vehicle = vehicle;
|
||||
this.timestamp = timestamp;
|
||||
this.status = status;
|
||||
|
|
@ -56,7 +55,7 @@ public class Event implements Serializable {
|
|||
"id='" + id + '\'' +
|
||||
", name='" + name + '\'' +
|
||||
", description='" + description + '\'' +
|
||||
", ecu='" + ecu + '\'' +
|
||||
", ecu='" + ecuId + '\'' +
|
||||
", vehicle='" + vehicle + '\'' +
|
||||
", timestamp=" + timestamp +
|
||||
", status=" + status +
|
||||
|
|
|
|||
|
|
@ -10,6 +10,7 @@ import java.io.Serializable;
|
|||
@Setter
|
||||
@NoArgsConstructor
|
||||
public class RepairShop implements Serializable, IRepairShop {
|
||||
|
||||
private String name;
|
||||
private String address;
|
||||
private String homepage;
|
||||
|
|
|
|||
|
|
@ -5,8 +5,7 @@ import android.util.Log;
|
|||
import eu.csc.vehown.data.model.IRepairShop;
|
||||
import eu.csc.vehown.data.model.RepairShop;
|
||||
import eu.csc.vehown.services.persistence.ExampleDataClient;
|
||||
import eu.csc.vehown.services.persistence.PersistenceFactory;
|
||||
import eu.csc.vehown.services.persistence.entity.lease.LeaseEntity;
|
||||
|
||||
import eu.csc.vehown.services.rest.data.GrantedLeaseResponse;
|
||||
import lombok.var;
|
||||
|
||||
|
|
@ -54,7 +53,7 @@ public class ServiceManager {
|
|||
public void storeLeaseResponse(GrantedLeaseResponse leaseResponse){
|
||||
Log.d(TAG, "START SAVING LEASE");
|
||||
|
||||
|
||||
/*
|
||||
LeaseEntity leaseEntity = new LeaseEntity();
|
||||
leaseEntity.setVehicle(leaseResponse.getVehicle());
|
||||
leaseEntity.setAppointmentStart(leaseResponse.getValidFrom());
|
||||
|
|
@ -65,6 +64,9 @@ public class ServiceManager {
|
|||
|
||||
var db = PersistenceFactory.generateDatabase(this.context);
|
||||
db.leaseDao().insert(leaseEntity);
|
||||
|
||||
|
||||
*/
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@ package eu.csc.vehown.services.persistence;
|
|||
|
||||
import asn.GTLease.Lease;
|
||||
import eu.csc.vehown.data.model.*;
|
||||
import eu.csc.vehown.persist.localstorage.ExampleVehicle;
|
||||
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.*;
|
||||
|
|
@ -18,6 +19,7 @@ public class ExampleDataClient implements IPersistenceClient {
|
|||
public static final VehicleSystem System_OBDII = new VehicleSystem("obd-ii", "OBD II");
|
||||
public static final VehicleSystem System_ABS = new VehicleSystem("abs", "ABS");
|
||||
public static final VehicleSystem System_WiFi = new VehicleSystem("wifi", "WiFi");
|
||||
|
||||
public static final LoggedInUser exampleLoggedInUser = new LoggedInUser();
|
||||
|
||||
public static final Event exampleEvent1 = new Event("1", "P0100", "Mass or Volume Air Flow 'A' Circuit", "OBDII1", "Dodge Charger '265G21'", 1620649836986L, Event.EventStatus.CONFIRMED, Event.EventSeverity.HIGH);
|
||||
|
|
@ -32,11 +34,14 @@ public class ExampleDataClient implements IPersistenceClient {
|
|||
|
||||
private static final SimpleDateFormat dateFormat;
|
||||
|
||||
|
||||
|
||||
static {
|
||||
dateFormat = new SimpleDateFormat("yyyy/dd/MM HH:mm", Locale.ENGLISH);
|
||||
dateFormat.setTimeZone(TimeZone.getDefault());
|
||||
|
||||
customerVehicle.systems = new ArrayList<>();
|
||||
|
||||
customerVehicle.systems.add(System_GNSS);
|
||||
customerVehicle.systems.add(System_IMU);
|
||||
customerVehicle.systems.add(System_OBDII);
|
||||
|
|
@ -54,6 +59,7 @@ public class ExampleDataClient implements IPersistenceClient {
|
|||
exampleEvents2 = new Event[] {exampleEvent1, exampleEvent2, e3, e4, e5, e6, e7, e8, e9 };
|
||||
}
|
||||
|
||||
|
||||
public static SimpleDateFormat getDateFormat() {
|
||||
return dateFormat;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -9,4 +9,8 @@ public interface IPersistenceClient {
|
|||
|
||||
TreatmentPlan getTreatmentPlan();
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,47 +0,0 @@
|
|||
package eu.csc.vehown.services.persistence;
|
||||
|
||||
import android.content.Context;
|
||||
import android.util.Log;
|
||||
import androidx.room.Room;
|
||||
|
||||
import static eu.csc.vehown.services.persistence.VehicleOwnerDatabase.dbName;
|
||||
|
||||
public class PersistenceFactory {
|
||||
|
||||
private static final String TAG = PersistenceFactory.class.getSimpleName();
|
||||
|
||||
public static IPersistenceClient getInstance(Context activity) {
|
||||
return new ExampleDataClient();
|
||||
}
|
||||
|
||||
public static VehicleOwnerDatabase generateDatabase(Context context){
|
||||
VehicleOwnerDatabase db = Room.databaseBuilder(context,
|
||||
VehicleOwnerDatabase.class, dbName).build();
|
||||
|
||||
|
||||
return db;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
public static void LoadExampleData(Context context){
|
||||
|
||||
Log.d(TAG, "START LOADING EXAMPLE DATA");
|
||||
try{
|
||||
VehicleOwnerDatabase database = generateDatabase(context);
|
||||
database.vehicleDao().deleteAll();
|
||||
|
||||
}
|
||||
catch (Exception ex){
|
||||
Log.d(TAG, ex.toString());
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -1,63 +0,0 @@
|
|||
package eu.csc.vehown.services.persistence;
|
||||
|
||||
import eu.csc.vehown.services.persistence.entity.lease.LeaseEntity;
|
||||
import eu.csc.vehown.services.persistence.entity.vehicle.VehicleEntity;
|
||||
import eu.csc.vehown.services.persistence.entity.vehicle.VehicleInfoEntity;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
|
||||
|
||||
public class TestUtil {
|
||||
|
||||
private static TestUtil instance;
|
||||
|
||||
|
||||
public static TestUtil getInstance() {
|
||||
|
||||
if(instance == null){
|
||||
instance = new TestUtil();
|
||||
}
|
||||
|
||||
return instance;
|
||||
}
|
||||
|
||||
|
||||
|
||||
private TestUtil(){
|
||||
|
||||
}
|
||||
|
||||
public static LeaseEntity createExampleLease() {
|
||||
|
||||
LeaseEntity leaseEntity = new LeaseEntity();
|
||||
|
||||
return leaseEntity;
|
||||
}
|
||||
|
||||
|
||||
|
||||
public static VehicleEntity getExampleVehicle(){
|
||||
VehicleEntity vehicleEntity = new VehicleEntity("ASD", "FORD", "FOCUS");
|
||||
|
||||
|
||||
return vehicleEntity;
|
||||
}
|
||||
|
||||
|
||||
public static List<VehicleInfoEntity> getVehicleInfoEntities(VehicleEntity vehicleEntity){
|
||||
ArrayList<VehicleInfoEntity> result = new ArrayList<VehicleInfoEntity>();
|
||||
|
||||
|
||||
result.add(new VehicleInfoEntity(vehicleEntity.getVehicleId(), "model", "Ford"));
|
||||
result.add(new VehicleInfoEntity(vehicleEntity.getVehicleId(), "brand", "Focus"));
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -1,44 +0,0 @@
|
|||
package eu.csc.vehown.services.persistence;
|
||||
|
||||
import androidx.room.Database;
|
||||
import androidx.room.RoomDatabase;
|
||||
import eu.csc.vehown.services.persistence.dao.*;
|
||||
import eu.csc.vehown.services.persistence.entity.events.EventEntity;
|
||||
import eu.csc.vehown.services.persistence.entity.lease.LeaseEntity;
|
||||
import eu.csc.vehown.services.persistence.entity.lease.LeaseInfoEntity;
|
||||
import eu.csc.vehown.services.persistence.entity.lease.LeaseSystemEntity;
|
||||
import eu.csc.vehown.services.persistence.entity.vehicle.VehicleEntity;
|
||||
import eu.csc.vehown.services.persistence.entity.vehicle.VehicleInfoEntity;
|
||||
import eu.csc.vehown.services.persistence.entity.vehicle.VehicleSystemEntity;
|
||||
|
||||
@Database(entities = {
|
||||
EventEntity.class,
|
||||
VehicleEntity.class,
|
||||
VehicleInfoEntity.class,
|
||||
VehicleSystemEntity.class,
|
||||
|
||||
|
||||
LeaseEntity.class,
|
||||
LeaseSystemEntity.class,
|
||||
|
||||
LeaseInfoEntity.class,
|
||||
|
||||
},
|
||||
|
||||
exportSchema = true,
|
||||
version = 1)
|
||||
|
||||
public abstract class VehicleOwnerDatabase extends RoomDatabase {
|
||||
|
||||
public static final String dbName = "vehicleOwnerDB";
|
||||
|
||||
public abstract EventDao eventDao();
|
||||
public abstract VehicleDao vehicleDao();
|
||||
public abstract LeaseEntityDao leaseDao();
|
||||
public abstract VehicleInfoDao vehicleInfoDao();
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -1,20 +0,0 @@
|
|||
package eu.csc.vehown.services.persistence.converter;
|
||||
|
||||
import androidx.room.TypeConverter;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
public class Converters {
|
||||
@TypeConverter
|
||||
public static Date fromTimestamp(Long value) {
|
||||
return value == null ? null : new Date(value);
|
||||
}
|
||||
|
||||
@TypeConverter
|
||||
public static Long dateToTimestamp(Date date) {
|
||||
return date == null ? null : date.getTime();
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -1,38 +0,0 @@
|
|||
package eu.csc.vehown.services.persistence.converter;
|
||||
|
||||
import androidx.room.TypeConverter;
|
||||
|
||||
import java.text.DateFormat;
|
||||
import java.text.ParseException;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.Date;
|
||||
import java.util.TimeZone;
|
||||
|
||||
public class TimestampConverter {
|
||||
|
||||
private static DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
||||
|
||||
@TypeConverter
|
||||
public static Date fromTimestamp(String value) {
|
||||
if (value != null) {
|
||||
try {
|
||||
TimeZone timeZone = TimeZone.getTimeZone("IST");
|
||||
df.setTimeZone(timeZone);
|
||||
return df.parse(value);
|
||||
} catch (ParseException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return null;
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@TypeConverter
|
||||
public static String dateToTimestamp(Date value) {
|
||||
TimeZone timeZone = TimeZone.getTimeZone("IST");
|
||||
df.setTimeZone(timeZone);
|
||||
return value == null ? null : df.format(value);
|
||||
}
|
||||
}
|
||||
|
|
@ -1,19 +0,0 @@
|
|||
package eu.csc.vehown.services.persistence.dao;
|
||||
|
||||
import androidx.room.Dao;
|
||||
import androidx.room.Delete;
|
||||
import androidx.room.Insert;
|
||||
import androidx.room.Update;
|
||||
|
||||
@Dao
|
||||
public interface BaseDao<T> {
|
||||
|
||||
@Insert
|
||||
Long insert(T item);
|
||||
|
||||
@Delete
|
||||
void delete(T item);
|
||||
|
||||
@Update
|
||||
void update(T item);
|
||||
}
|
||||
|
|
@ -1,8 +0,0 @@
|
|||
package eu.csc.vehown.services.persistence.dao;
|
||||
|
||||
import androidx.room.Dao;
|
||||
import eu.csc.vehown.services.persistence.entity.events.EventEntity;
|
||||
|
||||
@Dao
|
||||
public interface EventDao extends BaseDao<EventEntity> {
|
||||
}
|
||||
|
|
@ -1,21 +0,0 @@
|
|||
package eu.csc.vehown.services.persistence.dao;
|
||||
|
||||
import androidx.room.Dao;
|
||||
import androidx.room.Query;
|
||||
import eu.csc.vehown.services.persistence.entity.lease.LeaseEntity;
|
||||
import eu.csc.vehown.services.persistence.entity.lease.LeaseWithSystems;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
|
||||
@Dao
|
||||
public interface LeaseEntityDao extends BaseDao<LeaseEntity> {
|
||||
|
||||
@Query("SELECT * FROM LeaseEntity")
|
||||
List<LeaseEntity> selectAll();
|
||||
|
||||
|
||||
@Query("SELECT * FROM leaseentity where leaseId = :leaseId")
|
||||
LeaseWithSystems getLeaseWithSystemsByLeaseId(long leaseId);
|
||||
|
||||
}
|
||||
|
|
@ -1,52 +0,0 @@
|
|||
package eu.csc.vehown.services.persistence.dao;
|
||||
|
||||
|
||||
import androidx.room.Dao;
|
||||
import androidx.room.Delete;
|
||||
import androidx.room.Insert;
|
||||
import androidx.room.Query;
|
||||
import androidx.room.Transaction;
|
||||
import eu.csc.vehown.services.persistence.entity.vehicle.VehicleEntity;
|
||||
import eu.csc.vehown.services.persistence.entity.vehicle.VehicleWithEvents;
|
||||
import eu.csc.vehown.services.persistence.entity.vehicle.VehicleWithInfos;
|
||||
import eu.csc.vehown.services.persistence.entity.vehicle.VehicleWithSystems;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
|
||||
|
||||
@Dao
|
||||
public interface VehicleDao {
|
||||
|
||||
@Insert
|
||||
void insert(VehicleEntity entity);
|
||||
|
||||
@Query("DELETE FROM VehicleEntity")
|
||||
void deleteAll();
|
||||
|
||||
@Query("SELECT * FROM VehicleEntity where vin = :vin")
|
||||
VehicleEntity loadVehicleEntityByVin(String vin);
|
||||
@Transaction
|
||||
@Query("SELECT * FROM VehicleEntity where vehicleId = :id")
|
||||
public VehicleWithEvents getVehicleEvents(Long id);
|
||||
|
||||
@Transaction
|
||||
@Query("SELECT * FROM VehicleEntity where vehicleId = :id")
|
||||
public VehicleWithInfos getVehicleInfos(Long id);
|
||||
|
||||
@Delete
|
||||
void deleteVehicle(VehicleEntity vehicleEntity);
|
||||
|
||||
@Transaction
|
||||
@Query("SELECT * FROM VehicleEntity")
|
||||
public List<VehicleWithEvents> getVehicleEvents();
|
||||
|
||||
|
||||
@Transaction
|
||||
@Query("SELECT * FROM VehicleEntity WHERE vin = :vin")
|
||||
public VehicleWithSystems getVehicleWithSystemsByVin(String vin);
|
||||
|
||||
@Transaction
|
||||
@Query("SELECT * FROM VehicleEntity WHERE vehicleId = :vehicleId")
|
||||
public VehicleWithSystems getVehicleWithSystemsByVehicleId(long vehicleId);
|
||||
}
|
||||
|
|
@ -1,20 +0,0 @@
|
|||
package eu.csc.vehown.services.persistence.dao;
|
||||
|
||||
import androidx.room.Dao;
|
||||
import androidx.room.Insert;
|
||||
import androidx.room.Query;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import eu.csc.vehown.services.persistence.entity.vehicle.VehicleInfoEntity;
|
||||
|
||||
@Dao
|
||||
public interface VehicleInfoDao {
|
||||
|
||||
@Insert
|
||||
void insert(List<VehicleInfoEntity> items);
|
||||
|
||||
@Query("SeLECT * FROM VehicleInfoEntity")
|
||||
List<VehicleInfoEntity> getAll();
|
||||
|
||||
}
|
||||
|
|
@ -1,15 +0,0 @@
|
|||
package eu.csc.vehown.services.persistence.entity;
|
||||
|
||||
import androidx.room.PrimaryKey;
|
||||
|
||||
import lombok.*;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@NoArgsConstructor
|
||||
public abstract class BaseIdentifiable {
|
||||
|
||||
@PrimaryKey(autoGenerate = true)
|
||||
private Long id;
|
||||
|
||||
}
|
||||
|
|
@ -1,50 +0,0 @@
|
|||
package eu.csc.vehown.services.persistence.entity.events;
|
||||
|
||||
import androidx.room.*;
|
||||
import eu.csc.vehown.services.persistence.converter.TimestampConverter;
|
||||
import eu.csc.vehown.services.persistence.entity.vehicle.VehicleEntity;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@NoArgsConstructor
|
||||
|
||||
@Entity(
|
||||
foreignKeys = {
|
||||
@ForeignKey(entity = VehicleEntity.class,
|
||||
parentColumns = "vehicleId",
|
||||
childColumns = "vehicleId",
|
||||
onDelete = ForeignKey.SET_NULL)})
|
||||
public class EventEntity {
|
||||
|
||||
|
||||
@PrimaryKey(autoGenerate = true)
|
||||
private int id;
|
||||
|
||||
|
||||
@ColumnInfo(name = "created_at")
|
||||
@TypeConverters({TimestampConverter.class})
|
||||
private Date createdAt;
|
||||
|
||||
@ColumnInfo(name = "name")
|
||||
private String name;
|
||||
|
||||
@ColumnInfo(name = "description")
|
||||
private String description;
|
||||
|
||||
|
||||
@ColumnInfo(name = "ecu")
|
||||
private String ecu;
|
||||
|
||||
@ColumnInfo(name = "vehicle")
|
||||
private String vehicle;
|
||||
|
||||
@ColumnInfo(name = "vehicleId")
|
||||
private Long vehicleId;
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -1,48 +0,0 @@
|
|||
package eu.csc.vehown.services.persistence.entity.lease;
|
||||
|
||||
import androidx.room.ColumnInfo;
|
||||
import androidx.room.Entity;
|
||||
import androidx.room.PrimaryKey;
|
||||
import androidx.room.TypeConverters;
|
||||
import eu.csc.vehown.services.persistence.converter.TimestampConverter;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@NoArgsConstructor
|
||||
|
||||
@Entity
|
||||
public class LeaseEntity{
|
||||
|
||||
@PrimaryKey(autoGenerate = true)
|
||||
private Long leaseId;
|
||||
|
||||
@ColumnInfo(name = "created_at")
|
||||
@TypeConverters({TimestampConverter.class})
|
||||
private Date createdAt;
|
||||
|
||||
@ColumnInfo(name = "delivered_at")
|
||||
@TypeConverters({TimestampConverter.class})
|
||||
private Date deliveredAt = null;
|
||||
|
||||
@TypeConverters({TimestampConverter.class})
|
||||
private Date appointmentStart;
|
||||
|
||||
@TypeConverters({TimestampConverter.class})
|
||||
private Date appointmentEnd;
|
||||
|
||||
@ColumnInfo(name = "vehicle")
|
||||
private String vehicle;
|
||||
|
||||
@ColumnInfo(name="token")
|
||||
private String token;
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -1,30 +0,0 @@
|
|||
package eu.csc.vehown.services.persistence.entity.lease;
|
||||
|
||||
import androidx.room.Entity;
|
||||
import androidx.room.ForeignKey;
|
||||
import eu.csc.vehown.services.persistence.entity.BaseIdentifiable;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@NoArgsConstructor
|
||||
|
||||
|
||||
|
||||
@Entity(
|
||||
foreignKeys = {
|
||||
@ForeignKey(entity = LeaseEntity.class,
|
||||
parentColumns = "leaseId",
|
||||
childColumns = "leaseId",
|
||||
onDelete = ForeignKey.CASCADE)})
|
||||
public class LeaseInfoEntity extends BaseIdentifiable {
|
||||
|
||||
|
||||
//@ForeignKey(entity = LeaseEntity.class, parentColumns = "", childColumns = "")
|
||||
private long leaseId;
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -1,34 +0,0 @@
|
|||
package eu.csc.vehown.services.persistence.entity.lease;
|
||||
|
||||
import androidx.room.Entity;
|
||||
import androidx.room.ForeignKey;
|
||||
|
||||
import eu.csc.vehown.services.persistence.entity.BaseIdentifiable;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
|
||||
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@NoArgsConstructor
|
||||
|
||||
|
||||
|
||||
@Entity(
|
||||
foreignKeys = {
|
||||
@ForeignKey(entity = LeaseEntity.class,
|
||||
parentColumns = "leaseId",
|
||||
childColumns = "leaseId",
|
||||
onDelete = ForeignKey.CASCADE)})
|
||||
public class LeaseSystemEntity extends BaseIdentifiable {
|
||||
|
||||
|
||||
//@ForeignKey(entity = LeaseEntity.class, parentColumns = "", childColumns = "")
|
||||
private long leaseId;
|
||||
|
||||
private String systemId;
|
||||
private String systemName;
|
||||
|
||||
}
|
||||
|
|
@ -1,9 +0,0 @@
|
|||
package eu.csc.vehown.services.persistence.entity.lease;
|
||||
|
||||
public enum LeaseTransferStatus {
|
||||
|
||||
DOWNLOAD,
|
||||
TRANSFER,
|
||||
TRANSFERED
|
||||
|
||||
}
|
||||
|
|
@ -1,17 +0,0 @@
|
|||
package eu.csc.vehown.services.persistence.entity.lease;
|
||||
|
||||
import androidx.room.Embedded;
|
||||
import androidx.room.Relation;
|
||||
|
||||
public class LeaseWithInfoEntity {
|
||||
|
||||
@Embedded
|
||||
public LeaseEntity lease;
|
||||
@Relation(
|
||||
parentColumn = "leaseId",
|
||||
entityColumn = "infoLeaseId"
|
||||
)
|
||||
|
||||
|
||||
public LeaseInfoEntity leaseInfo;
|
||||
}
|
||||
|
|
@ -1,18 +0,0 @@
|
|||
package eu.csc.vehown.services.persistence.entity.lease;
|
||||
|
||||
import androidx.room.Embedded;
|
||||
import androidx.room.Relation;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class LeaseWithSystems {
|
||||
|
||||
@Embedded
|
||||
public LeaseEntity lease;
|
||||
|
||||
@Relation(
|
||||
parentColumn = "leaseId",
|
||||
entityColumn = "leaseId"
|
||||
)
|
||||
public List<LeaseSystemEntity> systems;
|
||||
}
|
||||
|
|
@ -1,24 +0,0 @@
|
|||
package eu.csc.vehown.services.persistence.entity.treatmentplan;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.room.Entity;
|
||||
|
||||
import eu.csc.vehown.services.persistence.entity.BaseIdentifiable;
|
||||
|
||||
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@NoArgsConstructor
|
||||
|
||||
@Entity
|
||||
public class TreatmentPlanEntity extends BaseIdentifiable {
|
||||
|
||||
@NonNull
|
||||
private String orderNo;
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -1,25 +0,0 @@
|
|||
package eu.csc.vehown.services.persistence.entity.treatmentplan;
|
||||
|
||||
|
||||
import androidx.room.Entity;
|
||||
import eu.csc.vehown.services.persistence.entity.BaseIdentifiable;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@NoArgsConstructor
|
||||
|
||||
@Entity
|
||||
public class TreatmentProposal extends BaseIdentifiable {
|
||||
|
||||
private String orderNo;
|
||||
private String vehicle;
|
||||
private String estimatedCost;
|
||||
private String vehicleImage;
|
||||
private String description;
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -1,40 +0,0 @@
|
|||
package eu.csc.vehown.services.persistence.entity.vehicle;
|
||||
|
||||
import androidx.room.ColumnInfo;
|
||||
import androidx.room.Entity;
|
||||
import androidx.room.PrimaryKey;
|
||||
import androidx.room.TypeConverters;
|
||||
import eu.csc.vehown.services.persistence.converter.TimestampConverter;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
|
||||
import java.time.Instant;
|
||||
import java.util.Date;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@NoArgsConstructor
|
||||
|
||||
@Entity
|
||||
public class VehicleEntity {
|
||||
|
||||
@PrimaryKey(autoGenerate = true)
|
||||
private Long vehicleId;
|
||||
|
||||
private String vin;
|
||||
private String model;
|
||||
private String brand;
|
||||
|
||||
|
||||
@ColumnInfo()
|
||||
@TypeConverters({TimestampConverter.class})
|
||||
private Date addedAt;
|
||||
|
||||
public VehicleEntity(String vin, String model, String brand) {
|
||||
this.vin = vin;
|
||||
this.model = model;
|
||||
this.brand = brand;
|
||||
this.addedAt = Date.from(Instant.now());
|
||||
}
|
||||
}
|
||||
|
|
@ -1,37 +0,0 @@
|
|||
package eu.csc.vehown.services.persistence.entity.vehicle;
|
||||
|
||||
import androidx.room.ColumnInfo;
|
||||
import androidx.room.Entity;
|
||||
import androidx.room.ForeignKey;
|
||||
|
||||
import eu.csc.vehown.services.persistence.entity.BaseIdentifiable;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
|
||||
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@NoArgsConstructor
|
||||
|
||||
@Entity(
|
||||
foreignKeys = {
|
||||
@ForeignKey(entity = VehicleEntity.class,
|
||||
parentColumns = "vehicleId",
|
||||
childColumns = "infoVehicleId",
|
||||
onDelete = ForeignKey.CASCADE)})
|
||||
public class VehicleInfoEntity extends BaseIdentifiable {
|
||||
|
||||
@ColumnInfo
|
||||
private long infoVehicleId;
|
||||
|
||||
private String key;
|
||||
private String value;
|
||||
|
||||
public VehicleInfoEntity(long infoVehicleId, String key, String value) {
|
||||
this.infoVehicleId = infoVehicleId;
|
||||
this.key = key;
|
||||
this.value = value;
|
||||
}
|
||||
}
|
||||
|
|
@ -1,35 +0,0 @@
|
|||
package eu.csc.vehown.services.persistence.entity.vehicle;
|
||||
|
||||
import androidx.room.ColumnInfo;
|
||||
import androidx.room.Entity;
|
||||
import androidx.room.ForeignKey;
|
||||
import eu.csc.vehown.services.persistence.entity.BaseIdentifiable;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@NoArgsConstructor
|
||||
|
||||
@Entity(
|
||||
foreignKeys = {
|
||||
@ForeignKey(entity = VehicleEntity.class,
|
||||
parentColumns = "vehicleId",
|
||||
childColumns = "vehicleId",
|
||||
onDelete = ForeignKey.CASCADE)})
|
||||
public class VehicleSystemEntity extends BaseIdentifiable {
|
||||
|
||||
@ColumnInfo
|
||||
private long vehicleId;
|
||||
|
||||
private String systemId;
|
||||
private String systemName;
|
||||
|
||||
public VehicleSystemEntity(long vehicleId, String systemId, String systemName) {
|
||||
this.vehicleId = vehicleId;
|
||||
this.systemId = systemId;
|
||||
this.systemName = systemName;
|
||||
}
|
||||
}
|
||||
|
|
@ -1,23 +0,0 @@
|
|||
package eu.csc.vehown.services.persistence.entity.vehicle;
|
||||
|
||||
import androidx.room.Embedded;
|
||||
import androidx.room.Relation;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import eu.csc.vehown.services.persistence.entity.events.EventEntity;
|
||||
|
||||
|
||||
public class VehicleWithEvents {
|
||||
|
||||
|
||||
@Embedded
|
||||
public VehicleEntity vehicleEntity;
|
||||
|
||||
@Relation(
|
||||
parentColumn = "vehicleId",
|
||||
entityColumn = "vehicleId"
|
||||
)
|
||||
public List<EventEntity> events;
|
||||
|
||||
}
|
||||
|
|
@ -1,19 +0,0 @@
|
|||
package eu.csc.vehown.services.persistence.entity.vehicle;
|
||||
|
||||
import androidx.room.Embedded;
|
||||
import androidx.room.Relation;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
|
||||
public class VehicleWithInfos {
|
||||
@Embedded
|
||||
public VehicleEntity vehicleEntity;
|
||||
|
||||
@Relation(
|
||||
parentColumn = "vehicleId",
|
||||
entityColumn = "infoVehicleId"
|
||||
)
|
||||
public List<VehicleInfoEntity> infos;
|
||||
|
||||
}
|
||||
|
|
@ -1,21 +0,0 @@
|
|||
package eu.csc.vehown.services.persistence.entity.vehicle;
|
||||
|
||||
import androidx.room.Embedded;
|
||||
import androidx.room.Relation;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
|
||||
public class VehicleWithSystems {
|
||||
|
||||
|
||||
@Embedded
|
||||
public VehicleEntity vehicleEntity;
|
||||
|
||||
@Relation(
|
||||
parentColumn = "vehicleId",
|
||||
entityColumn = "vehicleId"
|
||||
)
|
||||
public List<VehicleSystemEntity> systems;
|
||||
|
||||
}
|
||||
|
|
@ -143,7 +143,7 @@ public class UGPService extends Service implements IDataConsts, Runnable {
|
|||
Event e = new Event(id);
|
||||
e.setId(id);
|
||||
e.setDescription(cp.getDtcBaseName(Locale.ENGLISH, d.getDtcBaseId(), NameType.longname));
|
||||
e.setEcu(cp.getName(locale, IdentifierType.ecu, d.getEcuId(), NameType.shortname));
|
||||
e.setEcuId(cp.getName(locale, IdentifierType.ecu, d.getEcuId(), NameType.shortname));
|
||||
e.setVehicle(vehicle);
|
||||
e.setTimestamp(d.getTimestamp());
|
||||
if (d.getStatus().getConfirmedDTC()) {
|
||||
|
|
|
|||
|
|
@ -11,10 +11,15 @@ import androidx.annotation.NonNull;
|
|||
import androidx.annotation.RequiresApi;
|
||||
import androidx.fragment.app.Fragment;
|
||||
import eu.csc.vehown.R;
|
||||
import eu.csc.vehown.data.TestUtil;
|
||||
import eu.csc.vehown.data.model.CustomerVehicle;
|
||||
import eu.csc.vehown.persist.localstorage.ExampleVehicle;
|
||||
import eu.csc.vehown.persist.localstorage.PersistenceFactory;
|
||||
import eu.csc.vehown.persist.localstorage.exception.EntityExistsException;
|
||||
import eu.csc.vehown.services.mqtt.MqttClient;
|
||||
import eu.csc.vehown.services.notifications.NotificationService;
|
||||
import eu.csc.vehown.services.persistence.ExampleDataClient;
|
||||
import eu.csc.vehown.services.persistence.PersistenceFactory;
|
||||
|
||||
import eu.csc.vehown.ui.reportEvent.ReportEventActivity;
|
||||
import eu.csc.vehown.ui.svi.RegisterSVIActivity;
|
||||
import eu.csc.vehown.ui.svi.UploadLeaseActivity;
|
||||
|
|
@ -77,7 +82,16 @@ public class DashboardFragment extends Fragment {
|
|||
});
|
||||
|
||||
root.findViewById(R.id.btnLoadExampleData).setOnClickListener(v -> {
|
||||
PersistenceFactory.LoadExampleData(getContext());
|
||||
CustomerVehicle customerVehicle = ExampleDataClient.customerVehicle;
|
||||
|
||||
ExampleVehicle exampleVehicle = new ExampleVehicle(customerVehicle, customerVehicle.systems);
|
||||
|
||||
try {
|
||||
PersistenceFactory.LoadExampleData(getContext(), exampleVehicle);
|
||||
} catch (EntityExistsException e) {
|
||||
|
||||
e.printStackTrace();
|
||||
}
|
||||
});
|
||||
|
||||
root.findViewById(R.id.btnUploadLease).setOnClickListener(v -> {
|
||||
|
|
|
|||
|
|
@ -14,7 +14,9 @@ import androidx.appcompat.widget.Toolbar;
|
|||
import androidx.recyclerview.widget.RecyclerView;
|
||||
import eu.csc.vehown.R;
|
||||
import eu.csc.vehown.data.model.Event;
|
||||
import eu.csc.vehown.services.persistence.PersistenceFactory;
|
||||
import eu.csc.vehown.persist.localstorage.PersistenceFactory;
|
||||
import eu.csc.vehown.services.persistence.ExampleDataClient;
|
||||
|
||||
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.*;
|
||||
|
|
@ -30,10 +32,12 @@ public class SelectEventsActivity extends AppCompatActivity {
|
|||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
|
||||
super.onCreate(savedInstanceState);
|
||||
setContentView(R.layout.activity_select_events);
|
||||
((Toolbar) findViewById(R.id.toolbar)).setTitle(R.string.select_events);
|
||||
events = PersistenceFactory.getInstance(this).getEvents();
|
||||
|
||||
events = ExampleDataClient.getExampleEvents1();
|
||||
RecyclerView recyclerView = findViewById(R.id.events_list);
|
||||
assert recyclerView != null;
|
||||
eventsAdapter = new EventsAdapter();
|
||||
|
|
@ -83,7 +87,7 @@ public class SelectEventsActivity extends AppCompatActivity {
|
|||
holder.tvId.setText(event.getId());
|
||||
holder.tvName.setText(event.getName());
|
||||
holder.tvDescription.setText(event.getDescription());
|
||||
holder.tvEcu.setText(event.getEcu());
|
||||
holder.tvEcu.setText(event.getEcuId());
|
||||
holder.tvTimestamp.setText(dateFormat.format(new Date(event.getTimestamp())));
|
||||
if (isSelected(position)) {
|
||||
holder.itemView.setBackgroundResource(R.color.grey4);
|
||||
|
|
|
|||
|
|
@ -47,14 +47,14 @@ public class RetrofitApiClientTest {
|
|||
request.addEvent(ExampleDataClient.exampleEvent1.getId(),
|
||||
ExampleDataClient.exampleEvent1.getName(),
|
||||
ExampleDataClient.exampleEvent1.getDescription(),
|
||||
ExampleDataClient.exampleEvent1.getEcu(),
|
||||
ExampleDataClient.exampleEvent1.getEcuId(),
|
||||
ExampleDataClient.exampleEvent1.getVehicle(),
|
||||
ExampleDataClient.exampleEvent1.getTimestamp());
|
||||
|
||||
request.addEvent(ExampleDataClient.exampleEvent2.getId(),
|
||||
ExampleDataClient.exampleEvent2.getName(),
|
||||
ExampleDataClient.exampleEvent2.getDescription(),
|
||||
ExampleDataClient.exampleEvent2.getEcu(),
|
||||
ExampleDataClient.exampleEvent2.getEcuId(),
|
||||
ExampleDataClient.exampleEvent2.getVehicle(),
|
||||
ExampleDataClient.exampleEvent2.getTimestamp());
|
||||
|
||||
|
|
|
|||
|
|
@ -2,7 +2,14 @@ plugins {
|
|||
id 'java-library'
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation 'org.projectlombok:lombok:1.18.20'
|
||||
annotationProcessor 'org.projectlombok:lombok:1.18.20'
|
||||
|
||||
|
||||
}
|
||||
|
||||
java {
|
||||
sourceCompatibility = JavaVersion.VERSION_1_7
|
||||
targetCompatibility = JavaVersion.VERSION_1_7
|
||||
sourceCompatibility = JavaVersion.VERSION_1_8
|
||||
targetCompatibility = JavaVersion.VERSION_1_8
|
||||
}
|
||||
|
|
@ -1,4 +1,27 @@
|
|||
package eu.csc.ssv.core.services;
|
||||
|
||||
public class CustomerVehicle {
|
||||
import eu.csc.vehown.data.model.ICustomerVehicle;
|
||||
import eu.csc.vehown.data.model.LocalStorageIdentifier;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@NoArgsConstructor
|
||||
public class CustomerVehicle extends LocalStorageIdentifier<Long> implements Serializable, ICustomerVehicle {
|
||||
|
||||
private String vin;
|
||||
private String licenseplate;
|
||||
private String model;
|
||||
private String brand;
|
||||
|
||||
public CustomerVehicle(String vin, String licenseplate, String model, String brand) {
|
||||
this.vin = vin;
|
||||
this.licenseplate = licenseplate;
|
||||
this.model = model;
|
||||
this.brand = brand;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,30 @@
|
|||
package eu.csc.ssv.core.services;
|
||||
|
||||
import eu.csc.vehown.data.model.IEvent;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@NoArgsConstructor
|
||||
public class VehicleEvent implements IEvent {
|
||||
|
||||
private String name;
|
||||
private String description;
|
||||
private String ecuId;
|
||||
private String vehicle;
|
||||
private Long timestamp;
|
||||
private EventStatus status;
|
||||
private EventSeverity severity;
|
||||
|
||||
public VehicleEvent(String name, String description, String ecuId, String vehicle, long timestamp, EventStatus status, EventSeverity severity) {
|
||||
this.name = name;
|
||||
this.description = description;
|
||||
this.ecuId = ecuId;
|
||||
this.vehicle = vehicle;
|
||||
this.timestamp = timestamp;
|
||||
this.status = status;
|
||||
this.severity = severity;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,21 @@
|
|||
package eu.csc.vehown.data;
|
||||
|
||||
import eu.csc.ssv.core.services.CustomerVehicle;
|
||||
import eu.csc.ssv.core.services.VehicleEvent;
|
||||
import eu.csc.vehown.data.model.ICustomerVehicle;
|
||||
import eu.csc.vehown.data.model.IEvent;
|
||||
|
||||
public abstract class TestUtil {
|
||||
|
||||
public static ICustomerVehicle getDodgeChargerVehicle(){
|
||||
return new CustomerVehicle("2C3CDXHGXJH265621", "265G21", "Charger", "Dodge");
|
||||
}
|
||||
|
||||
|
||||
public static final IEvent exampleEvent1 = new VehicleEvent("P0100", "Mass or Volume Air Flow 'A' Circuit", "OBDII1", "Dodge Charger '265G21'", 1620649836986L, IEvent.EventStatus.CONFIRMED, IEvent.EventSeverity.HIGH);
|
||||
public static final IEvent exampleEvent2 = new VehicleEvent("P0200", "Injector Circuit/Open", "OBDII1", "Dodge Charger '265G21'", 1620649836987L, IEvent.EventStatus.CONFIRMED, IEvent.EventSeverity.HIGH);
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,24 @@
|
|||
package eu.csc.vehown.data.model;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
public interface IEvent {
|
||||
enum EventStatus { UNDEFINED, PERMANENT, PENDING, CONFIRMED }
|
||||
enum EventSeverity { LOW, MEDIUM, HIGH }
|
||||
|
||||
String getName();
|
||||
String getDescription();
|
||||
String getVehicle();
|
||||
Long getTimestamp();
|
||||
|
||||
String getEcuId();
|
||||
EventStatus getStatus();
|
||||
EventSeverity getSeverity();
|
||||
;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,15 @@
|
|||
package eu.csc.vehown.data.model;
|
||||
|
||||
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@NoArgsConstructor
|
||||
public abstract class LocalStorageIdentifier<T> {
|
||||
|
||||
private T localIdentifier;
|
||||
|
||||
}
|
||||
|
|
@ -44,6 +44,7 @@ dependencies {
|
|||
|
||||
|
||||
|
||||
implementation project(":services:core")
|
||||
|
||||
|
||||
compileOnly 'org.projectlombok:lombok:1.18.16'
|
||||
|
|
|
|||
|
|
@ -0,0 +1,86 @@
|
|||
package eu.csc.vehown.persist.localstorage.service;
|
||||
|
||||
import android.content.Context;
|
||||
import androidx.room.Room;
|
||||
import androidx.test.core.app.ApplicationProvider;
|
||||
import eu.csc.ssv.core.services.VehicleEvent;
|
||||
import eu.csc.vehown.data.TestUtil;
|
||||
import eu.csc.vehown.data.model.ICustomerVehicle;
|
||||
import eu.csc.vehown.persist.localstorage.VehicleOwnerDatabase;
|
||||
import eu.csc.vehown.persist.localstorage.exception.EntityExistsException;
|
||||
import org.junit.After;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
|
||||
public class LocalStorageServiceImplTest {
|
||||
|
||||
private VehicleOwnerDatabase db;
|
||||
private LocalStorageServiceImpl persistenceService;
|
||||
|
||||
@Before
|
||||
public void setUp() throws Exception {
|
||||
Context context = ApplicationProvider.getApplicationContext();
|
||||
db = Room.inMemoryDatabaseBuilder(context, VehicleOwnerDatabase.class).build();
|
||||
|
||||
this.persistenceService = new LocalStorageServiceImpl(db);
|
||||
}
|
||||
|
||||
@After
|
||||
public void tearDown() throws Exception {
|
||||
db.close();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void storeVehicleSystems(){
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void storeEvent() throws EntityExistsException {
|
||||
ICustomerVehicle testVehicle = TestUtil.getDodgeChargerVehicle();
|
||||
|
||||
|
||||
Long vehicleId = storeVehicle(testVehicle);
|
||||
|
||||
persistenceService.storeEvent(TestUtil.exampleEvent1, testVehicle.getVin());
|
||||
|
||||
assertEquals(1, persistenceService.getVehicleEvents(vehicleId).events.size());
|
||||
|
||||
|
||||
persistenceService.storeEvent(TestUtil.exampleEvent1, testVehicle.getVin());
|
||||
|
||||
|
||||
|
||||
assertEquals(2, persistenceService.getVehicleEvents(vehicleId).events.size());
|
||||
}
|
||||
|
||||
|
||||
private Long storeVehicle(ICustomerVehicle customerVehicle) throws EntityExistsException {
|
||||
return persistenceService.storeNewVehicle(customerVehicle, new ArrayList<>());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void storeVehicle() {
|
||||
|
||||
try {
|
||||
Long id = storeVehicle(TestUtil.getDodgeChargerVehicle());
|
||||
|
||||
assertNotNull(id);
|
||||
} catch (EntityExistsException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
|
||||
try {
|
||||
Long id = persistenceService.storeNewVehicle(TestUtil.getDodgeChargerVehicle(), new ArrayList<>());
|
||||
assertNotNull(id);
|
||||
} catch (EntityExistsException e) {
|
||||
assertNotNull(e);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,22 @@
|
|||
package eu.csc.vehown.persist.localstorage;
|
||||
|
||||
import eu.csc.vehown.data.model.ICustomerVehicle;
|
||||
import eu.csc.vehown.data.model.IVehicleSystem;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@NoArgsConstructor
|
||||
@Getter
|
||||
public class ExampleVehicle {
|
||||
|
||||
private ICustomerVehicle vehicle;
|
||||
private List<IVehicleSystem> vehicleSystems;
|
||||
|
||||
public ExampleVehicle(ICustomerVehicle vehicle, List<? extends IVehicleSystem> vehicleSystems) {
|
||||
this.vehicle = vehicle;
|
||||
this.vehicleSystems = new ArrayList<>(vehicleSystems);
|
||||
}
|
||||
}
|
||||
|
|
@ -3,7 +3,8 @@ package eu.csc.vehown.persist.localstorage;
|
|||
import android.content.Context;
|
||||
import android.util.Log;
|
||||
import androidx.room.Room;
|
||||
|
||||
import eu.csc.vehown.persist.localstorage.exception.EntityExistsException;
|
||||
import eu.csc.vehown.persist.localstorage.service.LocalStorageServiceImpl;
|
||||
|
||||
|
||||
public class PersistenceFactory {
|
||||
|
|
@ -11,35 +12,36 @@ public class PersistenceFactory {
|
|||
private static final String TAG = PersistenceFactory.class.getSimpleName();
|
||||
|
||||
|
||||
|
||||
public static VehicleOwnerDatabase generateDatabase(Context context){
|
||||
VehicleOwnerDatabase db = Room.databaseBuilder(context,
|
||||
VehicleOwnerDatabase.class, VehicleOwnerDatabase.dbName).build();
|
||||
|
||||
VehicleOwnerDatabase.class, VehicleOwnerDatabase.dbName)
|
||||
.allowMainThreadQueries()
|
||||
.build();
|
||||
|
||||
|
||||
return db;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
public static void LoadExampleData(Context context){
|
||||
public static void LoadExampleData(Context context, ExampleVehicle exampleVehicle) throws EntityExistsException {
|
||||
|
||||
Log.d(TAG, "START LOADING EXAMPLE DATA");
|
||||
try{
|
||||
VehicleOwnerDatabase database = generateDatabase(context);
|
||||
|
||||
LocalStorageServiceImpl localStorageService = new LocalStorageServiceImpl(database);
|
||||
|
||||
|
||||
|
||||
database.vehicleDao().deleteAll();
|
||||
|
||||
localStorageService.storeNewVehicle(exampleVehicle.getVehicle(), exampleVehicle.getVehicleSystems());
|
||||
|
||||
|
||||
|
||||
}
|
||||
catch (Exception ex){
|
||||
Log.d(TAG, ex.toString());
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -39,6 +39,8 @@ public class TestUtil {
|
|||
|
||||
|
||||
|
||||
|
||||
|
||||
public static VehicleEntity getExampleVehicle(){
|
||||
VehicleEntity vehicleEntity = new VehicleEntity("ASD", "FORD", "FOCUS");
|
||||
|
||||
|
|
|
|||
|
|
@ -2,10 +2,7 @@ package eu.csc.vehown.persist.localstorage;
|
|||
|
||||
import androidx.room.Database;
|
||||
import androidx.room.RoomDatabase;
|
||||
import eu.csc.vehown.persist.localstorage.dao.EventDao;
|
||||
import eu.csc.vehown.persist.localstorage.dao.LeaseEntityDao;
|
||||
import eu.csc.vehown.persist.localstorage.dao.VehicleDao;
|
||||
import eu.csc.vehown.persist.localstorage.dao.VehicleInfoDao;
|
||||
import eu.csc.vehown.persist.localstorage.dao.*;
|
||||
import eu.csc.vehown.persist.localstorage.entity.events.EventEntity;
|
||||
import eu.csc.vehown.persist.localstorage.entity.lease.LeaseEntity;
|
||||
import eu.csc.vehown.persist.localstorage.entity.lease.LeaseInfoEntity;
|
||||
|
|
@ -40,6 +37,7 @@ public abstract class VehicleOwnerDatabase extends RoomDatabase {
|
|||
public abstract VehicleDao vehicleDao();
|
||||
public abstract LeaseEntityDao leaseDao();
|
||||
public abstract VehicleInfoDao vehicleInfoDao();
|
||||
public abstract VehicleSystemDao vehicleSystemDao();
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -1,20 +0,0 @@
|
|||
package eu.csc.vehown.persist.localstorage.converter;
|
||||
|
||||
import androidx.room.TypeConverter;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
public class Converters {
|
||||
@TypeConverter
|
||||
public static Date fromTimestamp(Long value) {
|
||||
return value == null ? null : new Date(value);
|
||||
}
|
||||
|
||||
@TypeConverter
|
||||
public static Long dateToTimestamp(Date date) {
|
||||
return date == null ? null : date.getTime();
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,30 @@
|
|||
package eu.csc.vehown.persist.localstorage.converter;
|
||||
|
||||
import androidx.room.TypeConverter;
|
||||
import eu.csc.vehown.data.model.IEvent;
|
||||
|
||||
public class EventConverters {
|
||||
|
||||
@TypeConverter
|
||||
public static IEvent.EventStatus toEventStatus(String value)
|
||||
{
|
||||
return IEvent.EventStatus.valueOf(value);
|
||||
}
|
||||
|
||||
@TypeConverter
|
||||
public static String fromEventStatus(IEvent.EventStatus value){
|
||||
return value.name();
|
||||
}
|
||||
|
||||
@TypeConverter
|
||||
public static IEvent.EventSeverity toEventSeverity(String value)
|
||||
{
|
||||
return IEvent.EventSeverity.valueOf(value);
|
||||
}
|
||||
|
||||
@TypeConverter
|
||||
public static String fromEventSeverity(IEvent.EventSeverity value){
|
||||
return value.name();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -17,6 +17,6 @@ public interface LeaseEntityDao extends BaseDao<LeaseEntity> {
|
|||
|
||||
|
||||
@Query("SELECT * FROM leaseentity where leaseId = :leaseId")
|
||||
LeaseWithSystems getLeaseWithSystemsByLeaseId(long leaseId);
|
||||
LeaseWithSystems getLeaseWithSystemsByLeaseId(Long leaseId);
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -19,8 +19,11 @@ import java.util.List;
|
|||
@Dao
|
||||
public interface VehicleDao {
|
||||
|
||||
|
||||
|
||||
|
||||
@Insert
|
||||
void insert(VehicleEntity entity);
|
||||
Long insert(VehicleEntity entity);
|
||||
|
||||
@Query("DELETE FROM VehicleEntity")
|
||||
void deleteAll();
|
||||
|
|
@ -50,4 +53,8 @@ public interface VehicleDao {
|
|||
@Transaction
|
||||
@Query("SELECT * FROM VehicleEntity WHERE vehicleId = :vehicleId")
|
||||
public VehicleWithSystems getVehicleWithSystemsByVehicleId(long vehicleId);
|
||||
|
||||
|
||||
@Query("SELECT EXISTS(SELECT * FROM VehicleEntity WHERE vin=:vin)")
|
||||
public boolean checkIfVehicleExistsByVin(String vin);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@ public interface VehicleInfoDao {
|
|||
@Insert
|
||||
void insert(List<VehicleInfoEntity> items);
|
||||
|
||||
@Query("SeLECT * FROM VehicleInfoEntity")
|
||||
@Query("SELECT * FROM VehicleInfoEntity")
|
||||
List<VehicleInfoEntity> getAll();
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,20 @@
|
|||
package eu.csc.vehown.persist.localstorage.dao;
|
||||
|
||||
import androidx.room.Dao;
|
||||
import androidx.room.Insert;
|
||||
import androidx.room.Query;
|
||||
import eu.csc.vehown.persist.localstorage.entity.vehicle.VehicleInfoEntity;
|
||||
import eu.csc.vehown.persist.localstorage.entity.vehicle.VehicleSystemEntity;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Dao
|
||||
public interface VehicleSystemDao {
|
||||
|
||||
@Insert
|
||||
void insert(List<VehicleSystemEntity> values);
|
||||
|
||||
@Query("DELETE FROM VehicleSystemEntity WHERE vehicleId=:vehicleId")
|
||||
void removeSystemsByVehicleId(long vehicleId);
|
||||
|
||||
}
|
||||
|
|
@ -2,10 +2,13 @@ package eu.csc.vehown.persist.localstorage.entity.events;
|
|||
|
||||
import androidx.room.*;
|
||||
|
||||
import eu.csc.vehown.data.model.IEvent;
|
||||
import eu.csc.vehown.persist.localstorage.converter.EventConverters;
|
||||
import eu.csc.vehown.persist.localstorage.converter.TimestampConverter;
|
||||
import eu.csc.vehown.persist.localstorage.entity.vehicle.VehicleEntity;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.NonNull;
|
||||
import lombok.Setter;
|
||||
|
||||
import java.util.Date;
|
||||
|
|
@ -22,11 +25,9 @@ import java.util.Date;
|
|||
onDelete = ForeignKey.SET_NULL)})
|
||||
public class EventEntity {
|
||||
|
||||
|
||||
@PrimaryKey(autoGenerate = true)
|
||||
private int id;
|
||||
|
||||
|
||||
@ColumnInfo(name = "created_at")
|
||||
@TypeConverters({TimestampConverter.class})
|
||||
private Date createdAt;
|
||||
|
|
@ -37,7 +38,6 @@ public class EventEntity {
|
|||
@ColumnInfo(name = "description")
|
||||
private String description;
|
||||
|
||||
|
||||
@ColumnInfo(name = "ecu")
|
||||
private String ecu;
|
||||
|
||||
|
|
@ -48,4 +48,20 @@ public class EventEntity {
|
|||
private Long vehicleId;
|
||||
|
||||
|
||||
@ColumnInfo(name = "severity")
|
||||
@TypeConverters({EventConverters.class})
|
||||
private IEvent.EventSeverity severity;
|
||||
|
||||
|
||||
@ColumnInfo(name = "status")
|
||||
@TypeConverters({EventConverters.class})
|
||||
private IEvent.EventStatus status;
|
||||
|
||||
|
||||
public void setVehicleReference(@NonNull VehicleEntity vehicleEntity) {
|
||||
this.vehicleId = vehicleEntity.getVehicleId();
|
||||
|
||||
this.vehicle = vehicleEntity.getVin();
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@ import androidx.room.ColumnInfo;
|
|||
import androidx.room.Entity;
|
||||
import androidx.room.ForeignKey;
|
||||
|
||||
import eu.csc.vehown.data.model.IVehicleSystem;
|
||||
import eu.csc.vehown.persist.localstorage.entity.BaseIdentifiable;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
|
@ -33,4 +34,11 @@ public class VehicleSystemEntity extends BaseIdentifiable {
|
|||
this.systemId = systemId;
|
||||
this.systemName = systemName;
|
||||
}
|
||||
|
||||
|
||||
public VehicleSystemEntity(IVehicleSystem system, long vehicleId){
|
||||
this.vehicleId = vehicleId;
|
||||
this.systemId = system.getId();
|
||||
this.systemName = system.getName();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,11 @@
|
|||
package eu.csc.vehown.persist.localstorage.exception;
|
||||
|
||||
import eu.csc.vehown.persist.localstorage.entity.vehicle.VehicleEntity;
|
||||
|
||||
public class EntityExistsException extends Throwable {
|
||||
public EntityExistsException(Class clazz) {
|
||||
super(String.format("Entity %s already exists", clazz.getSimpleName()));
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
|
@ -1,7 +1,114 @@
|
|||
package eu.csc.vehown.persist.localstorage.service;
|
||||
|
||||
import eu.csc.vehown.data.model.ICustomerVehicle;
|
||||
import eu.csc.vehown.data.model.IEvent;
|
||||
import eu.csc.vehown.data.model.IVehicleSystem;
|
||||
import eu.csc.vehown.persist.localstorage.VehicleOwnerDatabase;
|
||||
import eu.csc.vehown.persist.localstorage.dao.EventDao;
|
||||
import eu.csc.vehown.persist.localstorage.dao.VehicleDao;
|
||||
import eu.csc.vehown.persist.localstorage.dao.VehicleInfoDao;
|
||||
import eu.csc.vehown.persist.localstorage.dao.VehicleSystemDao;
|
||||
import eu.csc.vehown.persist.localstorage.entity.events.EventEntity;
|
||||
import eu.csc.vehown.persist.localstorage.entity.vehicle.VehicleEntity;
|
||||
import eu.csc.vehown.persist.localstorage.entity.vehicle.VehicleSystemEntity;
|
||||
import eu.csc.vehown.persist.localstorage.entity.vehicle.VehicleWithEvents;
|
||||
import eu.csc.vehown.persist.localstorage.exception.EntityExistsException;
|
||||
import lombok.var;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
public class LocalStorageServiceImpl {
|
||||
|
||||
private final VehicleDao vehicleRepo;
|
||||
private final EventDao eventRepo;
|
||||
private final VehicleInfoDao vehicleInfoRepo;
|
||||
private final VehicleSystemDao vehicleSystemRepo;
|
||||
private VehicleOwnerDatabase vehicleOwnerDatabase;
|
||||
|
||||
public LocalStorageServiceImpl(VehicleOwnerDatabase vehicleOwnerDatabase) {
|
||||
this.vehicleOwnerDatabase = vehicleOwnerDatabase;
|
||||
|
||||
this.vehicleRepo = vehicleOwnerDatabase.vehicleDao();
|
||||
this.eventRepo = vehicleOwnerDatabase.eventDao();
|
||||
this.vehicleInfoRepo = vehicleOwnerDatabase.vehicleInfoDao();
|
||||
this.vehicleSystemRepo = vehicleOwnerDatabase.vehicleSystemDao();
|
||||
}
|
||||
|
||||
|
||||
public Long storeEvent(IEvent event, String vehicleVin) {
|
||||
EventEntity eventEntity = new EventEntity();
|
||||
|
||||
eventEntity.setEcu(event.getEcuId());
|
||||
|
||||
eventEntity.setCreatedAt(convertTimestampToDate(event.getTimestamp()));
|
||||
|
||||
|
||||
eventEntity.setVehicleReference(vehicleOwnerDatabase.vehicleDao().loadVehicleEntityByVin(vehicleVin));
|
||||
|
||||
eventEntity.setSeverity(event.getSeverity());
|
||||
eventEntity.setStatus(event.getStatus());
|
||||
eventEntity.setName(event.getName());
|
||||
eventEntity.setDescription(event.getDescription());
|
||||
|
||||
|
||||
return eventRepo.insert(eventEntity);
|
||||
}
|
||||
|
||||
public void storeVehicleSystems(ICustomerVehicle customerVehicle, List<IVehicleSystem> vehicleSystems) throws EntityExistsException {
|
||||
if (!vehicleOwnerDatabase.vehicleDao().checkIfVehicleExistsByVin(customerVehicle.getVin())) {
|
||||
throw new EntityExistsException(VehicleEntity.class);
|
||||
}
|
||||
|
||||
VehicleEntity ve = getVehicleByVin(customerVehicle.getVin());
|
||||
|
||||
vehicleSystemRepo.removeSystemsByVehicleId(ve.getVehicleId());
|
||||
|
||||
List<VehicleSystemEntity> vehicleSystemEntities = new ArrayList<>();
|
||||
|
||||
vehicleSystems.forEach(x -> {
|
||||
vehicleSystemEntities.add(new VehicleSystemEntity(x, ve.getVehicleId()));
|
||||
});
|
||||
|
||||
vehicleSystemRepo.insert(vehicleSystemEntities);
|
||||
}
|
||||
|
||||
|
||||
public VehicleEntity getVehicleByVin(String vin) {
|
||||
return vehicleRepo.loadVehicleEntityByVin(vin);
|
||||
}
|
||||
|
||||
public Long storeNewVehicle(ICustomerVehicle customerVehicle, List<IVehicleSystem> systems) throws EntityExistsException {
|
||||
|
||||
if (vehicleOwnerDatabase.vehicleDao().checkIfVehicleExistsByVin(customerVehicle.getVin())) {
|
||||
throw new EntityExistsException(VehicleEntity.class);
|
||||
}
|
||||
|
||||
|
||||
VehicleEntity vehicleEntity = new VehicleEntity();
|
||||
|
||||
vehicleEntity.setBrand(customerVehicle.getBrand());
|
||||
vehicleEntity.setLicensePlate(customerVehicle.getLicenseplate());
|
||||
vehicleEntity.setModel(customerVehicle.getModel());
|
||||
vehicleEntity.setVin(customerVehicle.getVin());
|
||||
|
||||
|
||||
long id = vehicleOwnerDatabase.vehicleDao().insert(vehicleEntity);
|
||||
storeVehicleSystems(customerVehicle, systems);
|
||||
return id;
|
||||
}
|
||||
|
||||
|
||||
private Date convertTimestampToDate(long ts) {
|
||||
|
||||
var calender = new GregorianCalendar();
|
||||
calender.setTimeInMillis(ts);
|
||||
|
||||
return calender.getTime();
|
||||
|
||||
}
|
||||
|
||||
|
||||
public VehicleWithEvents getVehicleEvents(Long vehicleId) {
|
||||
return vehicleRepo.getVehicleEvents(vehicleId);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,26 @@
|
|||
package eu.csc.vehown.persist.localstorage.service;
|
||||
|
||||
import org.junit.After;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
|
||||
public class LocalStorageServiceImplTest {
|
||||
|
||||
@Before
|
||||
public void setUp() throws Exception {
|
||||
}
|
||||
|
||||
@After
|
||||
public void tearDown() throws Exception {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void storeEvent() {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void storeVehicle() {
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue