package zeta.tool;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import zeta.util.DatabaseUtils;
import zeta.util.Properties;
import zeta.util.ThrowableHandler;
public class Trust {
public static void main(String[] args) {
try {
Trust trust = new Trust();
trust.trust();
} catch (Exception e) {
ThrowableHandler.handle(e);
}
}
public Trust() throws Exception {
Class.forName("COM.ibm.db2.jdbc.app.DB2Driver").newInstance();
}
public void trust() {
Statement stmt = null;
Connection connection = null;
try {
Properties properties = new Properties();
connection = DriverManager.getConnection("jdbc:db2:zeta", properties.get("db_user", ""), properties.get("db_password", ""));
int serverId = properties.get("server_id", 1);
stmt = connection.createStatement();
int[] trust = null;
ResultSet rs = stmt.executeQuery("SELECT MAX(id) FROM zeta.user WHERE server_id=" + serverId);
if (rs.next()) {
trust = new int[rs.getInt(1)+1];
}
rs.close();
if (trust == null) {
return;
}
StringBuffer trustedUsers = new StringBuffer(8*trust.length);
trustedUsers.append('(');
rs = stmt.executeQuery("SELECT id,trust FROM zeta.user WHERE server_id=" + serverId + " AND NOT (name='anonymous' AND email='')");
while (rs.next()) {
int userId = rs.getInt(1);
int trustValue = rs.getInt(2);
trust[userId] = trustValue;
if (trustValue >= 2) {
if (trustedUsers.length() > 1) {
trustedUsers.append(',');
}
trustedUsers.append(userId);
}
}
rs.close();
trustedUsers.append(')');
StringBuffer users1 = new StringBuffer(8*trust.length);
users1.append('(');
rs = stmt.executeQuery("SELECT a.user_id,SUM(CAST(a.range AS DECIMAL(15, 0))) FROM zeta.computation a WHERE a.server_id=" + serverId
+ " AND a.work_unit_id IN (SELECT work_unit_id FROM zeta.result WHERE task_id=a.task_id AND work_unit_id=a.work_unit_id)"
+ ((trustedUsers.length() > 2)? " AND a.user_id NOT IN " + trustedUsers.toString() : "")
+ " GROUP BY a.user_id");
trustedUsers.delete(1, trustedUsers.length());
while (rs.next()) {
int userId = rs.getInt(1);
long range = rs.getLong(2);
if (range >= 100000000) {
if (trustedUsers.length() > 1) {
trustedUsers.append(',');
}
trustedUsers.append(userId);
} else if (range >= 10000000 && trust[userId] == 0) {
if (users1.length() > 1) {
users1.append(',');
}
users1.append(userId);
}
}
rs.close();
trustedUsers.append(')');
users1.append(')');
if (trustedUsers.length() > 2) {
DatabaseUtils.executeAndLogUpdate(serverId, stmt, "UPDATE zeta.user SET trust=2 WHERE server_id=" + serverId + " AND id IN " + trustedUsers.toString());
}
if (users1.length() > 2) {
DatabaseUtils.executeAndLogUpdate(serverId, stmt, "UPDATE zeta.user SET trust=1 WHERE server_id=" + serverId + " AND id IN " + users1.toString());
}
} catch (Exception e) {
ThrowableHandler.handle(e);
} finally {
DatabaseUtils.close(stmt);
DatabaseUtils.close(connection);
}
}
}