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();
}
}