Project

General

Profile

Statistics
| Revision:

root / BackupFile.java

History | View | Annotate | Download (2.42 KB)

1 1 up20150476
import java.io.File;
2
import java.nio.charset.StandardCharsets;
3
import java.security.MessageDigest;
4
import java.security.NoSuchAlgorithmException;
5
import java.util.concurrent.ConcurrentHashMap;
6
7
/**
8
 * BackupFile
9
 */
10
public class BackupFile {
11
    private File file;
12
    private String fileId;
13
    private int desiredReplicationDegree;
14
    private ConcurrentHashMap<Integer, Chunk> chunksMap = new ConcurrentHashMap<>();
15
16
    public BackupFile(String fileId) {
17
        this.fileId = fileId;
18
    }
19
20
    public void addChunk(int chunkNo, Chunk chunk) {
21
        this.chunksMap.put(chunkNo, chunk);
22
    }
23
24
    public BackupFile(String pathname, int desiredReplicationDegree)
25
            throws NoSuchAlgorithmException {
26
        this.file = new File(pathname);
27
        this.desiredReplicationDegree = desiredReplicationDegree;
28
        this.fileId = generateFileId(this.getPathname(), this.file.lastModified());
29
30
    }
31
32
    //Generates a unique FileId with the combined pathname & last modified info
33
    public static String generateFileId(String pathname, long lastModified) throws NoSuchAlgorithmException {
34
        String str = pathname + lastModified;
35
36
        MessageDigest digest = MessageDigest.getInstance("SHA-256");
37
        byte[] hash = digest.digest(str.getBytes(StandardCharsets.UTF_8));
38
39
        StringBuffer hexString = new StringBuffer();
40
        for (int i = 0; i < hash.length; i++) {
41
            String hex = Integer.toHexString(0xff & hash[i]);
42
            if (hex.length() == 1)
43
                hexString.append('0');
44
            hexString.append(hex);
45
        }
46
        return hexString.toString();
47
    }
48
49
    /**
50
     * @return the desiredReplicationDegree
51
     */
52
    public int getDesiredReplicationDegree() {
53
        return desiredReplicationDegree;
54
    }
55
56
    /**
57
     * @return the pathname
58
     */
59
    public String getPathname() {
60
        return this.file.getPath();
61
    }
62
63
    /**
64
     * @return the fileId
65
     */
66
    public String getFileId() {
67
        return fileId;
68
    }
69
70
    public File getFile() {
71
        return this.file;
72
    }
73
74
    public ConcurrentHashMap<Integer, Chunk> getChunksMap() {
75
                return this.chunksMap;
76
    }
77
78
    public void removeChunk(int chunkNo, Peer peer){
79
        this.chunksMap.remove(chunkNo);
80
        File chunk = new File("Peer-" + peer.getSenderId() + File.separator + "Chunks" + File.separator + this.fileId + File.separator + chunkNo);
81
        peer.removeStorage(chunk.length());
82
        chunk.delete();
83
    }
84
85
86
}