package com.sap.pto.importers;
import java.io.IOException;
import java.net.URI;
import org.apache.commons.lang3.StringUtils;
import org.w3c.dom.Document;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import com.sap.pto.dao.CompetitionDAO;
import com.sap.pto.dao.SeasonDAO;
import com.sap.pto.dao.entities.Competition;
import com.sap.pto.dao.entities.Season;
import com.sap.pto.util.XmlUtilsExt;
public abstract class BasicImporter {
public void importData(URI uri) throws IOException {
Document doc = XmlUtilsExt.loadXMLDoc(uri.toString());
importData(doc);
}
public void importData(String content) throws IOException {
Document doc = XmlUtilsExt.parseXMLString(content);
importData(doc);
}
public void importData(Document doc) {
}
Season extractSeason(Document doc) {
return extractSeason(doc, "SoccerDocument");
}
Season extractSeason(Document doc, String nodeName) {
String seasonId = stripId(XmlUtilsExt.getXPathResultValue(doc, "//" + nodeName + "/@season_id"));
String seasonName = XmlUtilsExt.getXPathResultValue(doc, "//" + nodeName + "/@season_name");
Season season = new SeasonDAO().getByExtId(seasonId);
if (season == null) {
season = new Season(seasonId);
}
season.setName(seasonName);
season = SeasonDAO.save(season);
return season;
}
Competition extractCompetition(Document doc) {
return extractCompetition(doc, "SoccerDocument");
}
Competition extractCompetition(Document doc, String nodeName) {
String competitionId = stripId(XmlUtilsExt.getXPathResultValue(doc, "//" + nodeName + "/@competition_id"));
String competitionCode = XmlUtilsExt.getXPathResultValue(doc, "//" + nodeName + "/@competition_code");
String competitionName = XmlUtilsExt.getXPathResultValue(doc, "//" + nodeName + "/@competition_name");
Competition competition = new CompetitionDAO().getByExtId(competitionId);
if (competition == null) {
competition = new Competition(competitionId);
}
if (StringUtils.isNotBlank(competitionCode)) {
competition.setCode(competitionCode);
}
competition.setName(competitionName);
competition = CompetitionDAO.save(competition);
return competition;
}
/**
* Removes leading non-numeric character due to format inconsistencies
*/
String stripId(String extId) {
while (!StringUtils.isBlank(extId) && !StringUtils.isNumeric(extId.substring(0, 1))) {
extId = extId.substring(1);
}
return extId;
}
String getAttribute(NamedNodeMap attributes, String name) {
Node value = attributes.getNamedItem(name);
return (value == null) ? null : value.getTextContent();
}
}