1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package net.sf.webphotos.util.legacy;
17
18 import java.io.*;
19 import java.util.*;
20 import net.sf.webphotos.util.Util;
21
22
23
24
25
26
27
28
29
30 public class CacheFTP extends ArrayList<ComandoFTP> {
31
32 private static final long serialVersionUID = -3489616830358888490L;
33
34
35
36 public static final int UPLOAD = 1;
37
38
39
40 public static final int DOWNLOAD = 2;
41
42
43
44 public static final int DELETE = 3;
45 private static File arquivoControle = new File("CacheFTP.txt");
46 private static final CacheFTP instancia = new CacheFTP();
47
48 private CacheFTP() {
49 super();
50 Util.log("Inicializando Cache FTP");
51 Util.out.println();
52 loadFile();
53 sort();
54 }
55
56
57
58
59
60 public static CacheFTP getCache() {
61 return instancia;
62 }
63
64
65
66
67
68
69
70 public void addCommand(int acao, int album, int foto) {
71 if (album == 0) {
72 return;
73 }
74 if (acao != UPLOAD && acao != DOWNLOAD && acao != DELETE) {
75 return;
76 }
77
78 if ((this.add(new ComandoFTP(acao, album, foto)) == true)) {
79 sort();
80 Util.log("Comando FTP adicionado. (" + acao + " " + album + " " + foto + ")");
81 } else {
82 Util.log("Comando FTP é redundante. Não foi adicionado");
83 }
84 }
85
86 private void sort() {
87 Collections.<ComandoFTP>sort((List<ComandoFTP>) this);
88 }
89
90
91
92
93
94
95
96
97 @Override
98 public boolean add(ComandoFTP a) {
99 ComandoFTP b = a;
100
101
102 if (this.contains(a)) {
103 return false;
104 }
105
106 int acao = b.getOperacao();
107 int albumID = b.getAlbumID();
108 int fotoID = b.getFotoID();
109
110
111 if (!(acao == UPLOAD)
112 && !(acao == DOWNLOAD)
113 && !(acao == DELETE)) {
114 return false;
115 }
116
117
118 Iterator<ComandoFTP> i = this.iterator();
119 ComandoFTP l;
120
121
122 if (fotoID == 0) {
123 i = this.iterator();
124
125 while (i.hasNext()) {
126 l = i.next();
127
128 if ((l.getOperacao() == acao && l.getAlbumID() == albumID)
129 || (acao == DELETE && l.getOperacao() == UPLOAD && l.getAlbumID() == albumID)) {
130 i.remove();
131 }
132
133 }
134 }
135
136
137
138 i = this.iterator();
139 while (i.hasNext()) {
140 l = (ComandoFTP) i.next();
141 if (!l.recebe(b)) {
142 return false;
143 }
144 }
145 super.add(b);
146 return true;
147 }
148
149
150 private void loadFile() {
151 String linha;
152
153
154 if (arquivoControle.isFile() && arquivoControle.canRead()) {
155 try {
156 Util.out.println("load file: " + arquivoControle.getCanonicalPath());
157 StringTokenizer tok;
158 BufferedReader entrada = new BufferedReader(new FileReader(arquivoControle));
159 while ((linha = entrada.readLine()) != null) {
160 if (!linha.startsWith("#")) {
161 Util.out.println("processando linha:" + linha);
162 tok = new StringTokenizer(linha);
163 if (tok.countTokens() == 3) {
164 add(new ComandoFTP(
165 Integer.parseInt(tok.nextToken()),
166 Integer.parseInt(tok.nextToken()),
167 Integer.parseInt(tok.nextToken())));
168 }
169 tok = null;
170 }
171 }
172 entrada.close();
173 entrada = null;
174 } catch (IOException e) {
175 Util.log("[CacheFTP.loadFile]/ERRO:" + e.getMessage());
176 }
177 }
178 }
179
180
181
182
183
184
185
186 public void saveFile() {
187
188 BufferedWriter saida;
189 Util.out.println("escrevendo arquivo de Cache FTP: " + arquivoControle.getAbsolutePath());
190
191 if (!arquivoControle.isFile()) {
192
193 try {
194 saida = new BufferedWriter(new FileWriter(arquivoControle));
195 saida.write("# arquivo de envio / exclusão ftp - não deve ser alterado manualmente\r\n");
196 saida.write("# 1-Upload (envio) 2-Download (recepção) 3-Delete (apagar)\r\n");
197 saida.flush();
198
199 } catch (IOException e) {
200 Util.log("[CacheFTP.getArquivoSaida]/ERRO: não foi possível criar ou escrever no novo arquivo de controle de FTP " + e.getMessage());
201 return;
202 }
203
204 } else {
205
206 if (!arquivoControle.canWrite()) {
207 Util.log("[CacheFTP.getArquivoSaida]/ERRO: o arquivo está protegido contra gravação");
208 return;
209 }
210
211 try {
212 saida = new BufferedWriter(new FileWriter(arquivoControle, false));
213 } catch (Exception e) {
214 Util.log("[CacheFTP.getArquivoSaida]/ERRO: não foi possível abrir o arquivo para adição.");
215 return;
216 }
217 }
218
219
220 Iterator<ComandoFTP> i = this.iterator();
221 ComandoFTP l;
222
223 while (i.hasNext()) {
224 l = i.next();
225 try {
226 saida.write(l.getOperacao() + " " + l.getAlbumID() + " " + l.getFotoID() + "\r\n");
227 } catch (Exception e) {
228 Util.log("[CacheFTP.saveFile.1]/ERRO: " + e.getMessage());
229 }
230 }
231 try {
232 saida.flush();
233 saida.close();
234 } catch (Exception e) {
235 Util.log("[CacheFTP.saveFile.2]/ERRO: " + e.getMessage());
236 }
237 saida = null;
238 l = null;
239 i = null;
240 }
241
242
243
244
245
246 @Override
247 public String toString() {
248 Iterator<ComandoFTP> i = this.iterator();
249 ComandoFTP l;
250 String t = this.size() + " comando(s)\n-------------------------------------\n";
251
252 while (i.hasNext()) {
253 l = i.next();
254 t += l.getOperacao() + " " + l.getAlbumID() + " " + l.getFotoID() + "\n";
255 }
256 return t + "-------------------------------------\n";
257 }
258 }
259