package com.sap.pto.importers; import org.apache.commons.lang3.StringUtils; import org.w3c.dom.Document; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import com.sap.pto.dao.PlayerDAO; import com.sap.pto.dao.PlayerStatDAO; import com.sap.pto.dao.TeamDAO; import com.sap.pto.dao.TeamStatDAO; import com.sap.pto.dao.entities.Competition; import com.sap.pto.dao.entities.Player; import com.sap.pto.dao.entities.PlayerStat; import com.sap.pto.dao.entities.Season; import com.sap.pto.dao.entities.Team; import com.sap.pto.dao.entities.TeamStat; import com.sap.pto.util.XmlUtilsExt; public class OptaStatsImporter extends BasicImporter { @Override public void importData(Document doc) { Competition competition = extractCompetition(doc, "SeasonStatistics"); Season season = extractSeason(doc, "SeasonStatistics"); NodeList teamList = XmlUtilsExt.getXPathResultSet(doc, "//SeasonStatistics/Team"); for (int i = 0; i < teamList.getLength(); i++) { Node node = teamList.item(i); Team team = extractTeam(node, competition, season); extractTeamStats(node, team); extractPlayerStats(node, team); } } private void extractTeamStats(Node node, Team team) { NodeList statsList = XmlUtilsExt.getXPathResultSet(node, "./Stat"); for (int i = 0; i < statsList.getLength(); i++) { Node reportNode = statsList.item(i); extractTeamStat(reportNode, team); } } private TeamStat extractTeamStat(Node node, Team team) { String key = getAttribute(node.getAttributes(), "name"); String value = node.getTextContent(); TeamStat teamStat = TeamStatDAO.getForTeam(team, key); if (teamStat == null) { // create new teamStat = new TeamStat(); } teamStat.setTeam(team); teamStat.setStatKey(key); teamStat.setStatValue(value); teamStat = TeamStatDAO.save(teamStat); return teamStat; } private void extractPlayerStats(Node node, Team team) { NodeList statsList = XmlUtilsExt.getXPathResultSet(node, "./Player/Stat"); for (int i = 0; i < statsList.getLength(); i++) { Node reportNode = statsList.item(i); extractPlayerStat(reportNode, team); } } private PlayerStat extractPlayerStat(Node node, Team team) { String extId = stripId(getAttribute(node.getParentNode().getAttributes(), "player_id")); String position = getAttribute(node.getParentNode().getAttributes(), "position"); String jerseyNumber = getAttribute(node.getParentNode().getAttributes(), "shirtNumber"); String firstName = getAttribute(node.getParentNode().getAttributes(), "first_name"); String lastName = getAttribute(node.getParentNode().getAttributes(), "last_name"); String nickName = getAttribute(node.getParentNode().getAttributes(), "known_name"); String key = getAttribute(node.getAttributes(), "name"); String value = node.getTextContent(); Player player = new PlayerDAO().getByExtId(extId); if (player == null) { player = new Player(extId); player.setTeam(team); player.setPosition(position); player.setFirstName(firstName); player.setLastName(lastName); player.setNickName(nickName); if (StringUtils.isNumeric(jerseyNumber)) { player.setJerseyNumber(Integer.valueOf(jerseyNumber)); } PlayerDAO.saveNew(player); } PlayerStat playerStat = PlayerStatDAO.getForPlayer(player, key); if (playerStat == null) { // create new playerStat = new PlayerStat(); } playerStat.setPlayer(player); playerStat.setStatKey(key); playerStat.setStatValue(value); playerStat = TeamStatDAO.save(playerStat); return playerStat; } private Team extractTeam(Node node, Competition competition, Season season) { String extId = stripId(XmlUtilsExt.getXPathResultValue(node, "@id")); String name = XmlUtilsExt.getXPathResultValue(node, "@name"); Team team = new TeamDAO().getByExtId(extId); if (team == null) { // create new team = new Team(extId); } team.setCompetition(competition); team.setSeason(season); team.setName(name); team = TeamDAO.save(team); return team; } }