Skip to content
This repository has been archived by the owner on Oct 23, 2019. It is now read-only.

Commit

Permalink
Add converters, and a database
Browse files Browse the repository at this point in the history
  • Loading branch information
hso132 authored and Roosembert Palacios committed Dec 18, 2018
1 parent 9d633fe commit 65dedc7
Show file tree
Hide file tree
Showing 10 changed files with 165 additions and 10 deletions.
3 changes: 2 additions & 1 deletion app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -117,7 +117,6 @@ dependencies {
androidTestImplementation "com.android.support.test:rules:${depVersionAndroidTest}"
androidTestImplementation "com.android.support.test:runner:${depVersionAndroidTest}"
androidTestImplementation "org.mockito:mockito-android:${depVersionMockito}"
annotationProcessor "android.arch.persistence.room:compiler:${depVersionRoom}"
annotationProcessor "com.github.stephanenicolas.toothpick:toothpick-compiler:${depVersionToothpick}"
annotationProcessor "com.jakewharton:butterknife-compiler:${depVersionButterknife}"
annotationProcessor "org.projectlombok:lombok:${depVersionLombok}"
Expand Down Expand Up @@ -151,6 +150,8 @@ dependencies {
exclude group: 'org.hamcrest'
}
testImplementation "org.powermock:powermock-module-junit4:${depVersionPowermock}"

annotationProcessor "android.arch.persistence.room:compiler:${depVersionRoom}"
}

tasks.withType(Test) {
Expand Down
14 changes: 14 additions & 0 deletions app/src/main/java/ch/epfl/sweng/erpa/database/ERPADatabase.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package ch.epfl.sweng.erpa.database;

import android.arch.persistence.room.Database;
import android.arch.persistence.room.RoomDatabase;
import android.arch.persistence.room.TypeConverters;

import ch.epfl.sweng.erpa.database.converter.*;
import ch.epfl.sweng.erpa.model.*;

@Database(entities = {Game.class, PlayerJoinGameRequest.class, UserAuth.class, Username.class, UserProfile.class, UserSessionToken.class}, version = 1)
@TypeConverters({Converters.class})
public abstract class ERPADatabase extends RoomDatabase {
public abstract GameDao gameDao();
}
15 changes: 15 additions & 0 deletions app/src/main/java/ch/epfl/sweng/erpa/database/GameDao.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package ch.epfl.sweng.erpa.database;

import android.arch.persistence.room.Dao;
import android.arch.persistence.room.Insert;
import android.arch.persistence.room.Query;

import java.util.List;

import ch.epfl.sweng.erpa.model.*;

@Dao
public interface GameDao {
@Query("SELECT * FROM game") List<Game> getAll();
@Insert void insertAll(Game... games);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
package ch.epfl.sweng.erpa.database.converter;

import android.arch.persistence.room.TypeConverter;

import com.annimon.stream.Optional;
import com.google.common.collect.BiMap;
import com.google.common.collect.HashBiMap;

import ch.epfl.sweng.erpa.model.Game;
import ch.epfl.sweng.erpa.model.PlayerJoinGameRequest;

public class Converters {

@TypeConverter
public static Integer toInteger(Optional<Integer> optional) {
return optional.orElse(null);
}

@TypeConverter
public static Optional<Integer> fromInteger(Integer value) {
return Optional.ofNullable(value);
}


@TypeConverter
public static PlayerJoinGameRequest.RequestStatus toRequestStatus(Integer value) {
return requestStatusConversionMap.get(value);
}

@TypeConverter
public static Integer fromRequestStatus(PlayerJoinGameRequest.RequestStatus requestStatus) {
return requestStatusConversionMap.inverse().get(requestStatus);
}


@TypeConverter
public static Game.GameStatus toGameStatus(Integer value) {
return gameStatusConversionMap.get(value);
}
@TypeConverter
public static Integer fromGameStatus(Game.GameStatus gameStatus) {
return gameStatusConversionMap.inverse().get(gameStatus);
}

@TypeConverter
public static Integer fromDifficulty(Game.Difficulty difficulty) {
return difficultyConversionMap.inverse().get(difficulty);
}

@TypeConverter
public static Game.Difficulty toDifficulty(Integer value) {
return difficultyConversionMap.get(value);
}


private static final BiMap<Integer, PlayerJoinGameRequest.RequestStatus> requestStatusConversionMap = genRequestStatusConversionMap();
private static final BiMap<Integer, Game.GameStatus> gameStatusConversionMap = genGameStatusConversionMap();
private static final BiMap<Integer, Game.Difficulty> difficultyConversionMap = genDifficultyConversionMap();

private static BiMap<Integer, Game.Difficulty> genDifficultyConversionMap() {
BiMap<Integer, Game.Difficulty> result = HashBiMap.create();
result.put(10, Game.Difficulty.NOOB);
result.put(20, Game.Difficulty.CHILL);
result.put(30, Game.Difficulty.HARD);
assert conversionMapHasAll(result, Game.Difficulty.values());
return result;
}

/**
* Builds a conversion map for the GameStatus enum
*/
private static BiMap<Integer, Game.GameStatus> genGameStatusConversionMap() {
BiMap<Integer, Game.GameStatus> result = HashBiMap.create();
result.put(10, Game.GameStatus.CANCELED);
result.put(20, Game.GameStatus.CONFIRMED);
result.put(30, Game.GameStatus.CREATED);
result.put(40, Game.GameStatus.FINISHED);
result.put(50, Game.GameStatus.IN_PROGRESS);
assert conversionMapHasAll(result, Game.GameStatus.values());
return result;
}

/**
* Builds a conversion map for the RequestStatus enum
*/
private static BiMap<Integer, PlayerJoinGameRequest.RequestStatus> genRequestStatusConversionMap() {
BiMap<Integer, PlayerJoinGameRequest.RequestStatus> result = HashBiMap.create();
result.put(10, PlayerJoinGameRequest.RequestStatus.CONFIRMED);
result.put(20, PlayerJoinGameRequest.RequestStatus.HAS_QUIT);
result.put(30, PlayerJoinGameRequest.RequestStatus.REJECTED);
result.put(40, PlayerJoinGameRequest.RequestStatus.REMOVED);
result.put(50, PlayerJoinGameRequest.RequestStatus.REQUEST_TO_JOIN);
assert conversionMapHasAll(result, PlayerJoinGameRequest.RequestStatus.values());
return result;
}

private static <T> boolean conversionMapHasAll(BiMap<?, T> result, T[] values) {
for (T t : values) {
if (!result.inverse().containsKey(t)) {
return false;
}
}

return false;
}
}
2 changes: 1 addition & 1 deletion app/src/main/java/ch/epfl/sweng/erpa/model/Game.java
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
@NoArgsConstructor
@AllArgsConstructor
public class Game implements UuidObject {
@PrimaryKey @NonNull private String uuid;
@android.support.annotation.NonNull @PrimaryKey @NonNull private String uuid = "";
@ForeignKey(entity = UserProfile.class, parentColumns = "uuid", childColumns = "gm_user_uuid")
@NonNull private String gmUserUuid;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package ch.epfl.sweng.erpa.model;

import android.arch.persistence.room.ColumnInfo;
import android.arch.persistence.room.Entity;
import android.arch.persistence.room.ForeignKey;
import android.arch.persistence.room.PrimaryKey;

Expand All @@ -14,9 +15,13 @@
@Builder(toBuilder = true)
@NoArgsConstructor
@AllArgsConstructor
@Entity
public class PlayerJoinGameRequest {
@PrimaryKey @NonNull private String joinRequestId;
@ColumnInfo(name = "request_status") @NonNull private RequestStatus requestStatus;
@android.support.annotation.NonNull @PrimaryKey @NonNull private String joinRequestId = "";

@ColumnInfo(name = "request_status")
@NonNull private RequestStatus requestStatus;

@ForeignKey(entity = Game.class, parentColumns = "uuid", childColumns = "game_uuid")
@NonNull private String gameUuid;

Expand Down
7 changes: 5 additions & 2 deletions app/src/main/java/ch/epfl/sweng/erpa/model/UserAuth.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
package ch.epfl.sweng.erpa.model;

import android.arch.persistence.room.ColumnInfo;
import android.arch.persistence.room.Entity;
import android.arch.persistence.room.ForeignKey;
import android.arch.persistence.room.PrimaryKey;

import lombok.AllArgsConstructor;
import lombok.Data;
Expand All @@ -11,12 +13,13 @@
@Data
@AllArgsConstructor
@NoArgsConstructor
@Entity
public class UserAuth {
@ForeignKey(entity = UserProfile.class, parentColumns = "uuid", childColumns = "user_uuid")
@NonNull private String userUuid;

@ColumnInfo(name = "public_key")
@NonNull private String publicKey;
@PrimaryKey @ColumnInfo(name = "public_key")
@android.support.annotation.NonNull @NonNull private String publicKey = "";
@ColumnInfo(name = "authentication_strategy")
@NonNull private String authenticationStrategy = "Grenouille";
}
6 changes: 4 additions & 2 deletions app/src/main/java/ch/epfl/sweng/erpa/model/UserProfile.java
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
package ch.epfl.sweng.erpa.model;

import android.arch.persistence.room.ColumnInfo;
import android.arch.persistence.room.Entity;
import android.arch.persistence.room.PrimaryKey;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
Expand All @@ -14,8 +14,10 @@
@Builder
@NoArgsConstructor
@RequiredArgsConstructor
@Entity
public class UserProfile implements UuidObject {
@PrimaryKey @NonNull String uuid;
@PrimaryKey @android.support.annotation.NonNull @NonNull String uuid;
@ColumnInfo(name = "is_gm") @NonNull private Boolean isGm;
@ColumnInfo(name = "is_player") @NonNull private Boolean isPlayer;
public enum Experience {Noob, Casual, Expert}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
package ch.epfl.sweng.erpa.model;

import android.arch.persistence.room.Entity;
import android.arch.persistence.room.ForeignKey;
import android.arch.persistence.room.PrimaryKey;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
Expand All @@ -9,8 +13,10 @@
@Data
@AllArgsConstructor
@NoArgsConstructor
@Entity
@ToString(exclude = "sessionToken")
public class UserSessionToken {
@ForeignKey(entity = UserProfile.class, parentColumns = "uuid", childColumns = "user_uuid")
@NonNull private String userUuid;
@NonNull private String sessionToken;
@PrimaryKey @android.support.annotation.NonNull @NonNull private String sessionToken = "";
}
5 changes: 4 additions & 1 deletion app/src/main/java/ch/epfl/sweng/erpa/model/Username.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
package ch.epfl.sweng.erpa.model;

import android.arch.persistence.room.ColumnInfo;
import android.arch.persistence.room.Entity;
import android.arch.persistence.room.ForeignKey;
import android.arch.persistence.room.PrimaryKey;

import lombok.AllArgsConstructor;
import lombok.Data;
Expand All @@ -11,9 +13,10 @@
@Data
@AllArgsConstructor
@NoArgsConstructor
@Entity
public class Username {
@ForeignKey(entity = UserProfile.class, parentColumns = "uuid", childColumns = "user_uuid")
@NonNull private String userUuid;
@ColumnInfo
@NonNull private String username;
@android.support.annotation.NonNull @PrimaryKey @NonNull private String username = "";
}

0 comments on commit 65dedc7

Please sign in to comment.