package mediawiki.task.config.pdata; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; import org.json.JSONException; import mediawiki.info.Article; import mediawiki.info.Language; import mediawiki.info.wikibase.Entity; import mediawiki.info.wikibase.Property; import mediawiki.info.wikibase.snaks.DateSnak; import mediawiki.info.wikibase.snaks.ItemSnak; public class DatabaseTracker implements PersondataTracker { private Connection connection; public DatabaseTracker(Connection con) throws SQLException { connection = con; } @Override public void trackAlias(Article article, Entity item, Language language, String alias) throws SQLException { PreparedStatement statement = connection.prepareStatement("INSERT INTO aliases (`entity`,`article`,`language`,`value`) VALUES (?, ?, ?, ?)"); statement.setString(1, item == null ? null : item.getID()); statement.setString(2, article.getTitle()); statement.setString(3, language.getName()); statement.setString(4, alias); statement.executeUpdate(); statement.closeOnCompletion(); } @Override public void trackDescription(Article article, Entity item, Language language, String description, boolean conflict) throws SQLException { PreparedStatement statement = connection.prepareStatement("INSERT INTO descriptions (`entity`,`article`,`language`,`value`) VALUES (?, ?, ?, ?)"); statement.setString(1, item == null ? null : item.getID()); statement.setString(2, article.getTitle()); statement.setString(3, language.getName()); statement.setString(4, description); statement.executeUpdate(); statement.closeOnCompletion(); } @Override public void trackPlace(Article article, Entity item, Property property, ItemSnak snak, boolean conflict) throws SQLException, JSONException { PreparedStatement statement = connection.prepareStatement("INSERT INTO claims (`entity`,`article`,`property`,`claim`) VALUES (?, ?, ?, ?)"); statement.setString(1, item == null ? null : item.getID()); statement.setString(2, article.getTitle()); statement.setString(3, "P"+property.getID()); statement.setString(4, snak.toClaimRepresentation().toString()); statement.executeUpdate(); statement.closeOnCompletion(); } @Override public void trackDate(Article article, Entity item, Property property, DateSnak snak, boolean conflict) throws SQLException, JSONException { PreparedStatement statement = connection.prepareStatement("INSERT INTO claims (`entity`,`article`,`property`,`claim`) VALUES (?, ?, ?, ?)"); statement.setString(1, item == null ? null : item.getID()); statement.setString(2, article.getTitle()); statement.setString(3, "P"+property.getID()); statement.setString(4, snak.toClaimRepresentation().toString()); statement.executeUpdate(); statement.closeOnCompletion(); } @Override public void trackUnparsable(Article article, Entity item, Property property, String value) throws SQLException { PreparedStatement statement = connection.prepareStatement("INSERT INTO unparsable (`entity`,`article`,`property`,`value`) VALUES (?, ?, ?, ?)"); statement.setString(1, item == null ? null : item.getID()); statement.setString(2, article.getTitle()); statement.setString(3, "P"+property.getID()); statement.setString(4, value); statement.executeUpdate(); statement.closeOnCompletion(); } }