package pt.utl.ist.scripts.runOnce; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.ArrayList; import java.util.Collection; import net.sourceforge.fenixedu.domain.util.email.Recipient; import pt.ist.fenixframework.FenixFramework; import pt.utl.ist.scripts.commons.AtomicScript; public class RemoveIdInternalsFromRecipient extends AtomicScript { private static final int RECIPIENTS_PER_ITERATION = 1000; @Override protected void run() throws Exception { long begin = System.currentTimeMillis(); int currentIteration = 0; while (true) { System.out.println("Iteration " + currentIteration); Collection oids = getOidsForIteration(currentIteration++); if (oids.isEmpty()) { System.out.println("All done..."); break; } for (String oid : oids) { Recipient recipient = FenixFramework.getDomainObject(oid); if (recipient.getMembers() == null) { continue; } try { recipient.getMembers().getExpression(); recipient.setMembers(recipient.getMembers()); } catch (Exception e) { System.out.println("Cannot write group of Recipient: " + oid + " -> " + e); } } } long total = System.currentTimeMillis() - begin; System.out.println("Migration took " + total + " ms"); } @SuppressWarnings("resource") private Collection getOidsForIteration(int i) throws SQLException { Connection con = null; Statement stmt = con.createStatement(); String query = "SELECT OID FROM RECIPIENT LIMIT " + i * RECIPIENTS_PER_ITERATION + "," + RECIPIENTS_PER_ITERATION; ResultSet rs = stmt.executeQuery(query); Collection oids = new ArrayList(); while (rs.next()) { oids.add(rs.getString(1)); } rs.close(); stmt.close(); System.out.println("Got " + oids.size() + " items"); return oids; } public static void main(String[] args) { processWriteTransaction(new RemoveIdInternalsFromRecipient()); } }