package org.openslx.imagemaster.serverconnection; import java.io.IOException; import java.util.Iterator; import java.util.List; import java.util.Timer; import java.util.TimerTask; import org.apache.log4j.Logger; import org.openslx.imagemaster.crcchecker.CRCChecker; /** * Class to schedule crc checks. */ public class CRCScheduler extends TimerTask { private static Logger log = Logger.getLogger( CRCScheduler.class ); @Override public void run() { log.debug( "Starting checks..." ); List list = ImageProcessor.getImagesToCheck(); log.debug( list ); Iterator iter = list.iterator(); while ( iter.hasNext() ) { UploadingImage image = iter.next(); log.debug( "Checking blocks of " + image.getDbImage().imageName ); CRCChecker crcChecker = new CRCChecker( image.getImageFile(), image.getCrcFile() ); log.debug( "CRCFile is valid: " + crcChecker.hasValidCrcFile() ); for ( int block = 0; block < image.getNumberOfBlocks(); block++ ) { if ( image.needsCheck( block ) ) { try { if ( crcChecker.checkBlock( block ) ) { image.setValid( block ); log.debug( block + " was valid" ); } else { image.setNeedsRequest( block ); log.debug( block + " was NOT valid" ); } } catch ( IOException e ) { // TODO: Handle that crc file or image file could not be read. // CRC file read error: tell client to resend? // image file read error: tell server admin to check file permissions log.debug( "Error: " + e.getMessage() ); } } } image.updateDb(); } log.debug( "... done" ); } public static void startScheduling() { Timer timer = new Timer( "CRCScheduler" ); // start now and fire every 60 s timer.schedule( new CRCScheduler(), 0, 60000L ); } }