1 18 package org.drftpd.slaveselection.filter; 19 20 import java.net.InetAddress ; 21 import java.util.ArrayList ; 22 import java.util.Collection ; 23 import java.util.Collections ; 24 import java.util.Hashtable ; 25 import java.util.Iterator ; 26 import java.util.Properties ; 27 28 import net.sf.drftpd.NoAvailableSlaveException; 29 import net.sf.drftpd.ObjectNotFoundException; 30 import net.sf.drftpd.master.RemoteSlave; 31 import net.sf.drftpd.master.config.FtpConfig; 32 import net.sf.drftpd.master.usermanager.User; 33 import net.sf.drftpd.remotefile.LinkedRemoteFileInterface; 34 35 import org.drftpd.remotefile.LinkedRemoteFileUtils; 36 import org.drftpd.sections.SectionInterface; 37 import org.drftpd.slaveselection.filter.ScoreChart.SlaveScore; 38 39 43 public class SlavetopFilter extends Filter { 44 45 private long _assign; 46 47 private FilterChain _fc; 48 49 private int _topslaves; 50 51 public SlavetopFilter(FilterChain fc, int i, Properties p) { 52 _fc = fc; 53 _topslaves = 54 Integer.parseInt(FtpConfig.getProperty(p, i + ".topslaves")); 55 _assign = Long.parseLong(FtpConfig.getProperty(p, i + ".assign")); 56 } 57 58 public void process( 59 ScoreChart scorechart, 60 User user, 61 InetAddress peer, 62 char direction, 63 LinkedRemoteFileInterface dir) 64 throws NoAvailableSlaveException { 65 66 String path = dir.getPath(); 67 68 SectionInterface section = 70 _fc 71 .getSlaveManager() 72 .getConnectionManager() 73 .getSectionManager() 74 .lookup( 75 path); 76 77 LinkedRemoteFileInterface rls = section.getFirstDirInSection(dir); 78 92 93 Hashtable slavesmap = new Hashtable (); 94 for (Iterator iter = 95 scorechart.getSlaveScores().iterator(); 96 iter.hasNext(); 97 ) { 98 RemoteSlave rslave = ((ScoreChart.SlaveScore) iter.next()).getRSlave(); 99 slavesmap.put(rslave, new ScoreChart.SlaveScore(rslave)); 100 } 101 102 Collection files = LinkedRemoteFileUtils.getAllFiles(rls); 103 for (Iterator iter = files.iterator(); iter.hasNext();) { 104 LinkedRemoteFileInterface file = 105 (LinkedRemoteFileInterface) iter.next(); 106 for (Iterator iterator = file.getSlaves().iterator(); 107 iterator.hasNext(); 108 ) { 109 RemoteSlave rslave = (RemoteSlave) iterator.next(); 110 ScoreChart.SlaveScore score = 111 (SlaveScore) slavesmap.get(rslave); 112 if (score == null) 113 continue; 114 score.addScore(1); 115 } 116 } 117 118 ArrayList slavescores = new ArrayList (slavesmap.values()); 119 Collections.sort(slavescores, Collections.reverseOrder()); 120 Iterator iter = slavescores.iterator(); 121 for (int i = 0; i < _topslaves && iter.hasNext(); i++) { 122 ScoreChart.SlaveScore score = (SlaveScore) iter.next(); 123 try { 124 scorechart.getSlaveScore(score.getRSlave()).addScore(_assign); 125 } catch (ObjectNotFoundException e1) { 126 throw new RuntimeException (e1); 127 } 128 } 129 } 130 } 131 | Popular Tags |