1 18 package org.drftpd.mirroring.archivetypes; 19 20 import java.io.FileInputStream ; 21 import java.io.IOException ; 22 import java.util.ArrayList ; 23 import java.util.HashSet ; 24 import java.util.Iterator ; 25 import java.util.Properties ; 26 27 import org.apache.log4j.Logger; 28 import org.drftpd.mirroring.ArchiveType; 29 import org.drftpd.sections.SectionInterface; 30 31 import net.sf.drftpd.ObjectNotFoundException; 32 import net.sf.drftpd.event.listeners.Archive; 33 import net.sf.drftpd.master.config.FtpConfig; 34 import net.sf.drftpd.mirroring.Job; 35 import net.sf.drftpd.remotefile.LinkedRemoteFileInterface; 36 37 41 public class MoveReleaseToSpecificSlaves extends ArchiveType { 42 43 private HashSet _destSlaves; 44 private static final Logger logger = Logger.getLogger(MoveReleaseToSpecificSlaves.class); 45 private int _numOfSlaves; 46 47 public MoveReleaseToSpecificSlaves(Archive archive, SectionInterface section) { 48 super(archive,section); 49 Properties props = new Properties (); 50 try { 51 props.load(new FileInputStream ("conf/archive.conf")); 52 } catch (IOException e) { 53 throw new RuntimeException (e); 54 } 55 _destSlaves = new HashSet (); 56 for (int i = 1;; i++) { 57 String slavename = null; 58 try { 59 slavename = FtpConfig.getProperty(props, getSection().getName() + ".slavename." + i); 60 } catch (NullPointerException e) { 61 _numOfSlaves = i-1; 62 break; } 64 try { 65 _destSlaves.add(_parent.getConnectionManager().getSlaveManager().getSlave(slavename)); 66 } catch (ObjectNotFoundException e) { 67 logger.debug("Unable to get slave " + slavename + " from the SlaveManager"); 68 } 69 } 70 if (_destSlaves.isEmpty()) { 71 throw new NullPointerException ("Cannot continue, 0 destination slaves found for MoveReleaseToSpecificSlave for section " + getSection().getName()); 72 } 73 } 74 75 public HashSet findDestinationSlaves() { 76 return _destSlaves; 77 } 78 79 public void cleanup(ArrayList jobList) { 80 for (Iterator iter = jobList.iterator(); iter.hasNext();) { 81 Job job = (Job) iter.next(); 82 job.getFile().deleteOthers(getRSlaves()); 83 } 84 } 85 86 protected boolean isArchivedDir(LinkedRemoteFileInterface lrf) 87 throws IncompleteDirectoryException, OfflineSlaveException { 88 return isArchivedToXSlaves(lrf,_numOfSlaves); 89 } 90 91 public void waitForSendOfFiles(ArrayList jobQueue) { 92 while (true) { 93 for (Iterator iter = jobQueue.iterator(); iter.hasNext();) { 94 Job job = (Job) iter.next(); 95 if (job.isDone()) { 96 logger.debug( 97 "File " 98 + job.getFile().getPath() 99 + " is done being sent"); 100 iter.remove(); 101 } 102 } 103 try { 104 Thread.sleep(10000); 105 } catch (InterruptedException e) { 106 } 107 if (jobQueue.isEmpty()) { 108 break; 109 } 110 } 111 } 112 public String toString() { 113 return "MoveReleaseToSpecificSlaves=[directory=[" + getDirectory().getPath() + "]dest=[" + outputSlaves(getRSlaves()) + "]numOfSlaves=[" + _numOfSlaves + "]]"; 114 } 115 } 116 | Popular Tags |