package com.nbs.client.assassins.models; import java.util.List; import com.nbs.client.assassins.utils.Bus; import android.content.Context; import android.util.Log; public class RepositoryImpl implements Repository { private static final String TAG = "RepositoryImpl"; private Db db; private Context context; private User user; public RepositoryImpl(Context c) { context = c; db = new DbImpl(this.context); } //for mocking //TODO: inject Db dependency once the // android annotations dependency is removed public void setDb(Db db) { this.db = db; } public Db getDb() { if (db == null) { db = new DbImpl(this.context); } return db; } @Override public void onMatchEnd(Match m) { db.updateMatch(m); Bus.post(context, m.id, MatchMapper.toExtras(m)); } @Override public void onLogin(String username, String token) { User user = getUser(); user.login(username, token); } @Override public void onLogout() { User user = getUser(); user.logout(); } @Override public User getUser() { if(user == null) { user = new User(context); } return user; } @Override public Player getMyFocusedPlayer() { String focusedMatchId = getUser().getFocusedMatch(); Log.d(TAG, "getting focused match id: " + focusedMatchId); return getMyPlayer(focusedMatchId); } @Override public Player getMyPlayer(String matchId) { return db.getPlayer(matchId, getUser().getUsername()); } @Override public List<Player> getMyPlayers() { return db.getPlayers(getUser().getUsername()); } @Override public Player getPlayer(long id) { return db.getPlayer(id); } @Override public Player getPlayer(String matchId, String username) { return db.getPlayer(matchId, username); } @Override public List<Player> getActivePlayers(String username) { // TODO Auto-generated method stub return null; } @Override public void createOrUpdatePlayer(Player player) { if(db.getPlayer(player.matchId, player.username) != null) { updatePlayer(player); } else { long pid = db.createPlayer(player.matchId, player); player.id = pid; Bus.post(context, player.matchId + "." + Repository.NEW_PLAYER, PlayerMapper.toExtras(player)); } } @Override public void updatePlayer(Player player) { long pid = db.updatePlayer(player); player.id = pid; Bus.post(context, player.matchId + "." + player.username, PlayerMapper.toExtras(player)); } @Override public Match getFocusedMatch() { String matchId = getUser().getFocusedMatch(); if(matchId == null) { Match m = db.getFirstMatch(); if(m != null) { getUser().setFocusedMatch(m.id); return m; } } return db.getMatch(matchId); } @Override public void setFocusedMatch(String matchId) { getUser().setFocusedMatch(matchId); } @Override public void createOrUpdateMatch(Match match) { if(db.getMatch(match.id) != null) { updateMatch(match); } else { db.createMatch(match); Bus.post(context, Repository.NEW_MATCH, MatchMapper.toExtras(match)); if(match.players != null) { for (Player p : match.players) { createOrUpdatePlayer(p); } } } } @Override public Match getMatch(String matchId) { return db.getMatch(matchId); } @Override public List<Match> getMatches() { return db.getAllMatches(); } @Override public List<Match> getPendingMatches() { // TODO Auto-generated method stub return null; } @Override public List<Match> getActiveMatches() { // TODO Auto-generated method stub return null; } @Override public void updateMatch(Match m) { db.updateMatch(m); Bus.post(context, m.id, MatchMapper.toExtras(m)); if(m.players != null) { for(Player p : m.players) { createOrUpdatePlayer(p); } } } @Override public boolean inMatch() { // TODO Auto-generated method stub return false; } @Override public boolean inPendingMatch() { // TODO Auto-generated method stub return false; } @Override public boolean inActiveMatch() { // TODO Auto-generated method stub return false; } }