From: <bra...@us...> - 2011-11-16 22:09:12
|
Revision: 3557 http://archive-access.svn.sourceforge.net/archive-access/?rev=3557&view=rev Author: bradtofel Date: 2011-11-16 22:09:06 +0000 (Wed, 16 Nov 2011) Log Message: ----------- INITIAL REV: class which monitors a set of files, and indicates when a file in the group has changed Added Paths: ----------- trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/util/MonitoredFileSet.java trunk/archive-access/projects/wayback/wayback-core/src/test/java/org/archive/wayback/util/MonitoredFileSetTest.java Added: trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/util/MonitoredFileSet.java =================================================================== --- trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/util/MonitoredFileSet.java (rev 0) +++ trunk/archive-access/projects/wayback/wayback-core/src/main/java/org/archive/wayback/util/MonitoredFileSet.java 2011-11-16 22:09:06 UTC (rev 3557) @@ -0,0 +1,50 @@ +package org.archive.wayback.util; + +import java.io.File; +import java.util.Date; +import java.util.HashMap; +import java.util.List; + +public class MonitoredFileSet { + List<String> files; + + public MonitoredFileSet(List<String> files) { + this.files = files; + } + public boolean isChanged(FileState fileState) { + FileState currentFileState = getFileState(); + return currentFileState.isChanged(fileState); + } + public FileState getFileState() { + FileState fileState = new FileState(); + + for(String path : files) { + File file = new File(path); + if(file.isFile()) { + fileState.put(path, new Date(file.lastModified())); + } else { + fileState.put(path, null); + } + } + return fileState; + } + + public class FileState extends HashMap<String,Date> { + public boolean isChanged(FileState other) { + for(String path : keySet()) { + if(other.containsKey(path)) { + Date otherDate = other.get(path); + Date thisDate = get(path); + if((otherDate == null) && (thisDate == null)) { + // treat both missing as the same.. + continue; + } + if(!otherDate.equals(thisDate)) { + return true; + } + } + } + return false; + } + } +} Added: trunk/archive-access/projects/wayback/wayback-core/src/test/java/org/archive/wayback/util/MonitoredFileSetTest.java =================================================================== --- trunk/archive-access/projects/wayback/wayback-core/src/test/java/org/archive/wayback/util/MonitoredFileSetTest.java (rev 0) +++ trunk/archive-access/projects/wayback/wayback-core/src/test/java/org/archive/wayback/util/MonitoredFileSetTest.java 2011-11-16 22:09:06 UTC (rev 3557) @@ -0,0 +1,43 @@ +package org.archive.wayback.util; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.util.ArrayList; + +import junit.framework.TestCase; + +public class MonitoredFileSetTest extends TestCase { + + public void testIsChanged() throws IOException, InterruptedException { + File f1 = new File("/tmp/file-set-1.tmp"); + File f2 = new File("/tmp/file-set-2.tmp"); + writeFile(f1,"one"); + writeFile(f2,"two"); + ArrayList<String> l = new ArrayList<String>(); + l.add(f1.getAbsolutePath()); + l.add(f2.getAbsolutePath()); + + MonitoredFileSet fs = new MonitoredFileSet(l); + MonitoredFileSet.FileState s1 = fs.getFileState(); + MonitoredFileSet.FileState s2 = fs.getFileState(); + assertFalse(fs.isChanged(s1)); + assertFalse(fs.isChanged(s2)); + Thread.sleep(1001); + writeFile(f2,"two2"); + MonitoredFileSet.FileState s3 = fs.getFileState(); + assertTrue(fs.isChanged(s2)); + assertTrue(s3.isChanged(s2)); + Thread.sleep(1001); + assertTrue(fs.isChanged(s2)); + assertFalse(fs.isChanged(s3)); + } + private void writeFile(File f, String stuff) throws IOException { + if(f.exists()) { + f.delete(); + } + FileOutputStream fos = new FileOutputStream(f,false); + fos.write(stuff.getBytes()); + fos.close(); + } +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |