package com.elminster.retrieve.psn.parser;
import java.util.ArrayList;
import java.util.List;
import com.elminster.common.constants.Constants.StringConstants;
import com.elminster.common.parser.IParser;
import com.elminster.common.parser.ParseException;
import com.elminster.common.util.CollectionUtil;
import com.elminster.common.util.StringUtil;
import com.elminster.retrieve.psn.data.game.Platform;
import com.elminster.retrieve.psn.data.json.JsonGame;
import com.elminster.retrieve.psn.data.json.JsonGameList;
import com.elminster.retrieve.psn.data.json.JsonTrophy;
import com.elminster.retrieve.psn.data.user.PSNUserGame;
public class UserGameListParser extends BaseParser implements IParser<JsonGameList, List<PSNUserGame>> {
private static final String PLATFORM_SPLIT = StringConstants.COMMA;
@Override
public List<PSNUserGame> parse(JsonGameList json) throws ParseException {
if (null == json) {
return null;
}
List<PSNUserGame> userGames = new ArrayList<PSNUserGame>();
List<JsonGame> list = json.getList();
if (CollectionUtil.isNotEmpty(list)) {
for (JsonGame jg : list) {
PSNUserGame userGame = new PSNUserGame();
int completion = jg.getProgress();
userGame.setCompletionByPercent((byte)completion);
JsonTrophy jt = jg.getTrophies();
if (null != jt) {
int bronze = jt.getBronze();
int gold = jt.getGold();
int platinum = jt.getPlatinum();
int silver = jt.getSilver();
userGame.setEarnedBronze((byte) bronze);
userGame.setEarnedGold((byte) gold);
userGame.setEarnedPlatinum((byte) platinum);
userGame.setEarnedSilver((byte) silver);
if (100 == completion) {
userGame.setGoldCount((byte) gold);
userGame.setBronzeCount((byte) bronze);
userGame.setPlatinumCount((byte) platinum);
userGame.setSilverCount((byte) silver);
}
}
userGame.setGameId(jg.getGameId());
userGame.setImageUrl(parseUrl(jg.getImgUrl()));
userGame.setPlatform(parsePlatform(jg.getPlatform()));
userGame.setTitle(jg.getTitle());
userGames.add(userGame);
}
}
return userGames;
}
private List<Platform> parsePlatform(String platform) {
List<Platform> list = null;
if (StringUtil.isNotEmpty(platform)) {
list = new ArrayList<Platform>();
String[] split = platform.split(PLATFORM_SPLIT);
for (String s : split) {
list.add(Platform.getPlatformFromString(s));
}
}
return list;
}
}