1
0
mirror of https://codeberg.org/Freeyourgadget/Gadgetbridge synced 2024-08-25 00:30:37 +02:00

Add Activity Description table and order samples

This commit is contained in:
cpfeiffer 2016-05-23 23:31:22 +02:00
parent 0267ddb356
commit 4504c5b5a4
2 changed files with 59 additions and 9 deletions

View File

@ -34,6 +34,8 @@ public class GBDaoGenerator {
public static void main(String[] args) throws Exception { public static void main(String[] args) throws Exception {
Schema schema = new Schema(7, MAIN_PACKAGE + ".entities"); Schema schema = new Schema(7, MAIN_PACKAGE + ".entities");
addActivityDescription(schema);
Entity userAttributes = addUserAttributes(schema); Entity userAttributes = addUserAttributes(schema);
Entity user = addUserInfo(schema, userAttributes); Entity user = addUserInfo(schema, userAttributes);
@ -46,6 +48,14 @@ public class GBDaoGenerator {
new DaoGenerator().generateAll(schema, "app/src/main/java"); new DaoGenerator().generateAll(schema, "app/src/main/java");
} }
private static Entity addActivityDescription(Schema schema) {
Entity activityDescription = addEntity(schema, "ActivityDescription");
activityDescription.addIdProperty();
activityDescription.addIntProperty("fromTimestamp").notNull();
activityDescription.addIntProperty("toTimestamp");
return activityDescription;
}
private static Entity addUserInfo(Schema schema, Entity userAttributes) { private static Entity addUserInfo(Schema schema, Entity userAttributes) {
Entity user = addEntity(schema, "User"); Entity user = addEntity(schema, "User");
user.addIdProperty(); user.addIdProperty();
@ -53,11 +63,23 @@ public class GBDaoGenerator {
user.addDateProperty("birthday").notNull(); user.addDateProperty("birthday").notNull();
user.addIntProperty("gender").notNull(); user.addIntProperty("gender").notNull();
Property userId = userAttributes.addLongProperty("userId").notNull().getProperty(); Property userId = userAttributes.addLongProperty("userId").notNull().getProperty();
user.addToMany(userAttributes, userId);
// sorted by the from-date, newest first
Property userAttributesSortProperty = getPropertyByName(userAttributes, VALID_FROM_UTC);
user.addToMany(userAttributes, userId).orderDesc(userAttributesSortProperty);
return user; return user;
} }
private static Property getPropertyByName(Entity entity, String propertyName) {
for (Property prop : entity.getProperties()) {
if (propertyName.equals(prop.getPropertyName())) {
return prop;
}
}
throw new IllegalStateException("Could not find property " + propertyName + " in entity " + entity.getClassName());
}
private static Entity addUserAttributes(Schema schema) { private static Entity addUserAttributes(Schema schema) {
// additional properties of a user, which may change during the lifetime of a user // additional properties of a user, which may change during the lifetime of a user
// this allows changing attributes while preserving user identity // this allows changing attributes while preserving user identity
@ -80,7 +102,9 @@ public class GBDaoGenerator {
device.addStringProperty("manufacturer").notNull(); device.addStringProperty("manufacturer").notNull();
device.addStringProperty("identifier").notNull().unique().javaDocGetterAndSetter("The fixed identifier, i.e. MAC address of the device."); device.addStringProperty("identifier").notNull().unique().javaDocGetterAndSetter("The fixed identifier, i.e. MAC address of the device.");
Property deviceId = deviceAttributes.addLongProperty("deviceId").notNull().getProperty(); Property deviceId = deviceAttributes.addLongProperty("deviceId").notNull().getProperty();
device.addToMany(deviceAttributes, deviceId); // sorted by the from-date, newest first
Property deviceAttributesSortProperty = getPropertyByName(deviceAttributes, VALID_FROM_UTC);
device.addToMany(deviceAttributes, deviceId).orderDesc(deviceAttributesSortProperty);
return device; return device;
} }

View File

@ -134,22 +134,35 @@ public class DBHelper {
public static User getUser(DaoSession session) { public static User getUser(DaoSession session) {
UserDao userDao = session.getUserDao(); UserDao userDao = session.getUserDao();
List<User> users = userDao.loadAll(); List<User> users = userDao.loadAll();
ActivityUser prefsUser = new ActivityUser();
User user;
if (users.isEmpty()) { if (users.isEmpty()) {
User user = createUser(session); user = createUser(prefsUser, session);
return user; } else {
user = users.get(0); // TODO: multiple users support?
} }
return users.get(0); // TODO: multiple users support? ensureUserAttributes(user, prefsUser, session);
return user;
} }
private static User createUser(DaoSession session) { private static User createUser(ActivityUser prefsUser, DaoSession session) {
ActivityUser prefsUser = new ActivityUser();
User user = new User(); User user = new User();
user.setName(prefsUser.getName()); user.setName(prefsUser.getName());
user.setBirthday(prefsUser.getUserBirthday()); user.setBirthday(prefsUser.getUserBirthday());
user.setGender(prefsUser.getGender()); user.setGender(prefsUser.getGender());
session.getUserDao().insert(user); session.getUserDao().insert(user);
List<UserAttributes> userAttributes = user.getUserAttributesList();
ensureUserAttributes(user, prefsUser, session);
return user;
}
private static void ensureUserAttributes(User user, ActivityUser prefsUser, DaoSession session) {
List<UserAttributes> userAttributes = user.getUserAttributesList();
if (hasUpToDateUserAttributes(userAttributes, prefsUser)) {
return;
}
UserAttributes attributes = new UserAttributes(); UserAttributes attributes = new UserAttributes();
attributes.setValidFromUTC(DateTimeUtils.todayUTC()); attributes.setValidFromUTC(DateTimeUtils.todayUTC());
attributes.setHeightCM(prefsUser.getHeightCm()); attributes.setHeightCM(prefsUser.getHeightCm());
@ -158,8 +171,21 @@ public class DBHelper {
session.getUserAttributesDao().insert(attributes); session.getUserAttributesDao().insert(attributes);
userAttributes.add(attributes); userAttributes.add(attributes);
}
return user; private static boolean hasUpToDateUserAttributes(List<UserAttributes> userAttributes, ActivityUser prefsUser) {
for (UserAttributes attr : userAttributes) {
if (!isActive(attr)) {
return false;
}
if (isEqual(attr, prefsUser)) {
return true;
}
}
return false;
}
private static boolean isEqual(UserAttributes attr, ActivityUser prefsUser) {
} }
public static Device getDevice(GBDevice gbDevice, DaoSession session) { public static Device getDevice(GBDevice gbDevice, DaoSession session) {