0
|
1 package cachingfilter;
|
|
2
|
|
3 import java.io.File;
|
|
4 import java.io.IOException;
|
|
5 import org.slf4j.Logger;
|
|
6 import org.slf4j.LoggerFactory;
|
|
7
|
|
8
|
|
9 final class CachedDir implements CachedPage {
|
|
10 private static final Logger logger = LoggerFactory.getLogger(CachedDir.class);
|
|
11 private static final long tooLong = 1000L*60*10; // 10 minutes
|
|
12 private final File dir;
|
|
13 private File newFile;
|
|
14
|
|
15 CachedDir( File parent, String child ) {
|
|
16 this.dir = new File(parent,child);
|
|
17 }
|
|
18
|
|
19 public String name() {
|
|
20 return dir.getName();
|
|
21 }
|
|
22
|
|
23 public boolean exists() {
|
|
24 if( !dir.exists() )
|
|
25 return false;
|
|
26 File[] files = dir.listFiles();
|
|
27 if( files == null )
|
|
28 throw new RuntimeException("error doing listFiles of "+dir);
|
|
29 return files.length >= 1;
|
|
30 }
|
|
31
|
|
32 public File lastFile() {
|
|
33 File[] files = dir.listFiles();
|
|
34 if( files.length == 1 ) {
|
|
35 return files[0];
|
|
36 }
|
|
37 int n = 0;
|
|
38 File lastFile = null;
|
|
39 for( File file : files ) {
|
|
40 String name = file.getName();
|
|
41 int i = Integer.parseInt(name);
|
|
42 if( n < i ) {
|
|
43 if( lastFile != null )
|
|
44 lastFile.delete();
|
|
45 n = i;
|
|
46 lastFile = file;
|
|
47 } else {
|
|
48 file.delete();
|
|
49 }
|
|
50 }
|
|
51 if( lastFile==null )
|
|
52 throw new RuntimeException(dir.toString());
|
|
53 return lastFile;
|
|
54 }
|
|
55
|
|
56 public File newFile() throws IOException {
|
|
57 if( !dir.exists() && !dir.mkdir() )
|
|
58 throw new RuntimeException("couldn't create "+dir);
|
|
59 int n = 0;
|
|
60 for( File file : dir.listFiles() ) {
|
|
61 String name = file.getName();
|
|
62 int i = Integer.parseInt(name);
|
|
63 if( n < i )
|
|
64 n = i;
|
|
65 file.delete();
|
|
66 }
|
|
67 newFile = new File( dir, Integer.toString( n + 1 ) );
|
|
68 if( !newFile.createNewFile() )
|
|
69 throw new RuntimeException("couldn't create "+newFile);
|
|
70 return newFile;
|
|
71 }
|
|
72
|
|
73 public void deleteNewFile() {
|
|
74 if( !newFile.delete() )
|
|
75 throw new RuntimeException("couldn't delete new file "+newFile);
|
|
76 }
|
|
77
|
|
78 public boolean delete() {
|
|
79 File die = new File(dir.getParentFile(),"~die");
|
|
80 if( die.exists() ) {
|
|
81 for( File f : die.listFiles() ) {
|
|
82 if( !f.delete() ) {
|
|
83 logger.error("couldn't delete "+f);
|
|
84 return false;
|
|
85 }
|
|
86 }
|
|
87 if( !die.delete() ) {
|
|
88 logger.error("couldn't delete "+die);
|
|
89 return false;
|
|
90 }
|
|
91 }
|
|
92 return dir.renameTo(die);
|
|
93 }
|
|
94
|
|
95 public String toString() {
|
|
96 return dir.toString();
|
|
97 }
|
|
98
|
|
99 }
|