Project

General

Profile

Statistics
| Revision:

root / DistributedBackupService / src / chunk / FileManager.java @ 1

History | View | Annotate | Download (3.49 KB)

1 1 up20130859
package chunk;
2
3
import java.io.File;
4
import java.io.FileInputStream;
5
import java.io.IOException;
6
import java.io.ObjectInputStream;
7
import java.io.Serializable;
8
import java.util.HashMap;
9
import java.util.Map;
10
import java.util.Set;
11
import java.util.concurrent.ConcurrentHashMap;
12
import java.util.concurrent.ConcurrentMap;
13
14
@SuppressWarnings("serial")
15
public class FileManager implements Serializable {
16
17
        private ConcurrentMap<String, FileManager> fileRepository;
18
        private ConcurrentMap<String, ConcurrentMap<Integer, Chunk>> chunkRepository;
19
20
        public FileManager() {
21
                fileRepository = new ConcurrentHashMap<>();
22
                chunkRepository = new ConcurrentHashMap<>();
23
        }
24
25
        private String fileID;
26
        private String pathName;
27
        private String fileName;
28
        private int numChunks;
29
        private int wantedReplication;
30
        private HashMap<String, Chunk> chunkMap;
31
32
        public FileManager( File file, String fileID, int replicationDegree, HashMap<String, Chunk> chunksInfo ) {
33
                this.fileID = fileID;
34
                this.fileName = file.getName();
35
                this.pathName = file.getPath();
36
                this.numChunks = chunksInfo.size();
37
                this.wantedReplication = replicationDegree;
38
                this.chunkMap = chunksInfo;
39
        }
40
41
        public String getFileID() {
42
                return fileID;
43
        }
44
45
        public int getNumChunks() {
46
                return numChunks;
47
        }
48
49
        public String getPathname() {
50
                return pathName;
51
        }
52
53
        public String getFileName() {
54
                return fileName;
55
        }
56
57
        public int getWantedReplication() {
58
                return wantedReplication;
59
        }
60
61
        public HashMap<String, Chunk> getChunks() {
62
                return chunkMap;
63
        }
64
65
        synchronized public static FileManager loadDatabase(File file) throws ClassNotFoundException {
66
                FileManager db = null;
67
68
                try {
69
                        final ObjectInputStream inputStream = new ObjectInputStream(new FileInputStream(file));
70
                        db = (FileManager) inputStream.readObject();
71
                        inputStream.close();
72
                } catch (final IOException pE) {
73
                        pE.printStackTrace();
74
                }
75
                return db;
76
        }
77
78
        public void addFile( String pathName, FileManager fileInfo ) {
79
                fileRepository.put(pathName, fileInfo);
80
        }
81
82
        public void removeFile( String pathName ) {
83
                fileRepository.remove(pathName);
84
        }
85
86
        public FileManager getFileInformation( String pathName)
87
        {
88
                return fileRepository.get( pathName);
89
        }
90
91
        public void addChunk( Chunk chunk )
92
        {
93
94
                String fileID = chunk.getFileID();
95
                int chunkNo = chunk.getChunkNo();
96
97
                ConcurrentMap<Integer, Chunk> fileChunks;
98
                fileChunks = chunkRepository.getOrDefault(fileID, new ConcurrentHashMap<>());
99
                fileChunks.putIfAbsent(chunkNo, chunk);
100
101
                chunkRepository.putIfAbsent(fileID, fileChunks);
102
103
        }
104
105
        public Chunk getChunkInformation( String fileID, int chunkNo )
106
        {
107
                Map<Integer, Chunk> fileChunks = chunkRepository.get(fileID);
108
109
                return fileChunks != null ? fileChunks.get(chunkNo) : null;
110
        }
111
112
        public void deleteChunk( String fileID, int chunkNo)
113
        {
114
                if (!chunkRepository.containsKey(fileID))
115
                        return;
116
117
                chunkRepository.get(fileID).remove(chunkNo);
118
        }
119
120
        public void deleteFileBackedUp( String fileID)
121
        {
122
                if (!chunkRepository.containsKey( fileID))
123
                        return;
124
125
                chunkRepository.remove(fileID);
126
        }
127
128
        public int getNumChunks(String pathname) {
129
                return fileRepository.get(pathname).getNumChunks();
130
        }
131
132
        public Integer getRecognizedReplication(String fileID, int chunkNo)
133
        {
134
                int ret;
135
                try
136
                {
137
                        ret = chunkRepository.get(fileID).get(chunkNo).getNumChunks();
138
                } catch (NullPointerException e) {
139
                        return null;
140
                }
141
                return ret;
142
        }
143
144
        public boolean chunkExists(String fileID) {
145
                return chunkRepository.containsKey(fileID);
146
        }
147
148
        public Set<Integer> getFileChunksKey(String fileID) {
149
                return chunkRepository.get(fileID).keySet();
150
        }
151
152
}