-
Notifications
You must be signed in to change notification settings - Fork 0
/
Cache.java
129 lines (119 loc) · 3.2 KB
/
Cache.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
import java.util.Hashtable;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.File;
import java.util.Date;
import java.io.FileNotFoundException;
import java.io.IOException;
public class Cache
{
public String basePath = null;
public Hashtable htable;
/*
* Contrutor
*/
public Cache()
{
htable = new Hashtable();
// Criação do directorio cache
File cacheDir = new File("Cache");
cacheDir.mkdirs();
basePath = cacheDir.getAbsolutePath();
File file = new File(basePath);;
// obtem toda a lista de ficheiro exustente na cache
String files[] = file.list();
}
/*
* Verifica se o url pode ser inserido na cache (url com ? ou !)
*/
public boolean IsCachable(String urlRecebido)
{
return (getFileName(urlRecebido) != null);
}
/*
* Verifica se o url esta presente na cache
*/
public boolean IsCached(String urlRecebido)
{
String filename = getFileName(urlRecebido);
if (filename == null)
return false;
// Procura na hastable
if (htable.get(filename) != null)
{
return true;
}else{
return false;
}
}
/*
* Esse método é chamado quando se acede a cache para ir buscar os ficheiros
* necessario
* E atualiza-se a data dos ficheiros.
*/
public FileInputStream getFileInputStream(String urlRecebido)
{
FileInputStream fileStream = null;
try
{
String filename = getFileName(urlRecebido);
htable.put(filename,new Date());
fileStream = new FileInputStream(filename);
}
catch (FileNotFoundException filenotfound)
{
try
{
System.out.println("File Not Found:"+getFileName(urlRecebido)+" "+filenotfound);
}
catch (Exception e)
{
}
}
finally
{
return fileStream;
}
}
/*
* Método chamada quando queremos criar um novo objeto na cache
*/
public FileOutputStream getFileOutputStream(String urlRecebido)
{
FileOutputStream fileStream = null;
String filename;
try
{
filename = getFileName(urlRecebido);
fileStream = new FileOutputStream(filename);
}
catch (IOException e)
{
}
finally
{
return fileStream;
}
}
/*
* Permite adicionar mas uma entrada na hastable
*/
public synchronized void AddToTable(String rawUrl)
{
String filename = getFileName(rawUrl);
htable.put(filename,new Date());
}
/*
* Convert o url para uma nova string mas só se o url da para inserir na cache
* Todos os url com ? , cgi-bin não são inseridos na cache
*/
private String getFileName(String rawUrl)
{
String filename = basePath + File.separatorChar + rawUrl.substring(7).replace('/','@');
if (filename.indexOf('?') != -1 || filename.indexOf("cgi-bin") != -1)
{
return null;
}
return filename;
}
}