package pt.utl.ist.scripts.runOnce.photograph; import java.sql.Connection; import java.sql.ResultSet; import java.sql.Statement; import java.util.HashSet; import java.util.Iterator; import java.util.Set; import net.sourceforge.fenixedu.domain.Photograph; import net.sourceforge.fenixedu.domain.PhotographContentSize; import net.sourceforge.fenixedu.domain.exceptions.DomainException; import net.sourceforge.fenixedu.domain.photograph.PictureOriginal; import net.sourceforge.fenixedu.util.ByteArray; import net.sourceforge.fenixedu.util.ContentType; import pt.ist.fenixframework.CallableWithoutException; import pt.ist.fenixframework.FenixFramework; import pt.utl.ist.scripts.commons.AtomicScript; public class PhotographContentToPictureConverter extends AtomicScript { private static final int NUM_TO_PROCESS_PER_TX = 5; private static final Set oids = new HashSet(); public static void main(String[] args) throws InterruptedException { process(new PhotographContentToPictureConverter()); System.out.println("Found " + oids.size() + " photos that need conversion."); int counter = 0; long s = System.currentTimeMillis(); long e = -1; while (!oids.isEmpty()) { Thread t = new GenerateAvatars(); t.start(); t.join(); if (++counter % 20 == 0) { e = System.currentTimeMillis(); logger.info("[PROCESSED] " + counter + " threads in " + (e - s) + "ms. " + oids.size() + " oid's left."); s = System.currentTimeMillis(); } } e = System.currentTimeMillis(); logger.info("[PROCESSED] " + counter + " in " + (e - s) + "ms."); s = System.currentTimeMillis(); System.exit(0); } @Override protected void run() throws Exception { Connection connection = getConnection(); Statement stmt = connection.createStatement(); ResultSet rs = stmt.executeQuery("SELECT OID FROM PHOTOGRAPH"); while (rs.next()) { oids.add(rs.getString("OID")); } rs.close(); stmt.close(); } private static class GenerateAvatars extends Thread { private void doIt() { // TODO Auto-generated method stub for (int i = 0; i < NUM_TO_PROCESS_PER_TX && !oids.isEmpty(); i++) { final Photograph photo = pop(); byte[] bytes = null; if (photo.getOriginal() == null) { try { bytes = photo.getContents(PhotographContentSize.RAW); } catch (DomainException de) { } if (bytes == null) { bytes = photo.getContents(); } new PictureOriginal(photo, new ByteArray(bytes), (photo.getContentType() != null) ? photo .getContentType() : ContentType.JPG); } ByteArray original = photo.getOriginal().getPictureData(); // // PictureAvatar.createAvatars(photo, original); // if (!photo.hasAvatar(AspectRatio.ª1_by_1, PictureSize.MEDIUM, PictureMode.FIT)) { // PictureAvatar.createAvatar(photo, original, PictureMode.FIT, AspectRatio.ª1_by_1, PictureSize.MEDIUM); // } // if (!photo.hasAvatar(AspectRatio.ª9_by_10, PictureSize.LARGE, PictureMode.FIT)) { // PictureAvatar.createAvatar(photo, original, PictureMode.FIT, AspectRatio.ª9_by_10, PictureSize.LARGE); // } // /* // * For SOTIS if the GenericFile refactoring hasn't been done yet // * // * */ // if (!photo.hasAvatar(AspectRatio.ª1_by_1, PictureSize.SMALL, PictureMode.ZOOM)) { // PictureAvatar.createAvatar(photo, original, PictureMode.ZOOM, AspectRatio.ª1_by_1, PictureSize.SMALL); // } // if (!photo.hasAvatar(AspectRatio.ª1_by_1, PictureSize.LARGE, PictureMode.ZOOM)) { // PictureAvatar.createAvatar(photo, original, PictureMode.ZOOM, AspectRatio.ª1_by_1, PictureSize.LARGE); // } } } @Override public void run() { FenixFramework.getTransactionManager().withTransaction(new CallableWithoutException() { @Override public Void call() { doIt(); return null; } }); } protected Photograph pop() { final Iterator iterator = oids.iterator(); if (iterator.hasNext()) { final String oid = iterator.next(); iterator.remove(); return FenixFramework.getDomainObject(oid); } return null; } } }