Skip to content

Commit 991877e

Browse files
Dodanie dobrze dzialajacej mozliwosci zmiany nazw plikow, oraz dopuszczenia powtarzania nazw plikow w obrebie roznych folderow
1 parent 211c261 commit 991877e

File tree

5 files changed

+184
-28
lines changed

5 files changed

+184
-28
lines changed

src/main/java/pl/dfs/distributedfilesystem/configuration/OnFinishLoading.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import org.springframework.context.event.ContextRefreshedEvent;
66
import org.springframework.stereotype.Component;
77
import pl.dfs.distributedfilesystem.files.FilesRepository;
8+
import pl.dfs.distributedfilesystem.models.ToChangeRepository;
89

910

1011
@Component
@@ -14,11 +15,14 @@ public class OnFinishLoading
1415
@Autowired
1516
FilesRepository filesRepository;
1617

18+
@Autowired
19+
ToChangeRepository toChangeRepository;
20+
1721
public void onApplicationEvent(ContextRefreshedEvent event) {
1822
filesRepository.initializeDataNodesSizes();
19-
2023
filesRepository.checkCohesion();
21-
2224
filesRepository.tryToDelete();
25+
26+
toChangeRepository.tryToExecuteCommands();
2327
}
2428
}

src/main/java/pl/dfs/distributedfilesystem/controllers/FilesAccessController.java

Lines changed: 41 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414
import pl.dfs.distributedfilesystem.folders.FoldersRepository;
1515
import pl.dfs.distributedfilesystem.models.DataNodeOnTheList;
1616
import pl.dfs.distributedfilesystem.models.ObjectOnTheList;
17+
import pl.dfs.distributedfilesystem.models.ToChange;
18+
import pl.dfs.distributedfilesystem.models.ToChangeRepository;
1719
import pl.dfs.distributedfilesystem.nodes.DataNodesRepository;
1820
import pl.dfs.distributedfilesystem.files.FilesRepository;
1921
import pl.dfs.distributedfilesystem.files.SingleFile;
@@ -37,6 +39,9 @@ public class FilesAccessController {
3739
@Autowired
3840
FoldersRepository foldersRepository;
3941

42+
@Autowired
43+
ToChangeRepository toChangeRepository;
44+
4045

4146
@RequestMapping("/")
4247
public String mainPage(Model model, HttpSession session) {
@@ -183,7 +188,6 @@ else if(filename.endsWith(".zip"))
183188
public String fileUpload(@RequestParam("file") MultipartFile file,HttpSession session,HttpServletRequest request) {
184189
checkSession(session);
185190
if(dataNodesRepository.getNumber()!=0) {
186-
187191
if (!file.isEmpty()) {
188192
if (!filesRepository.checkIfExist(session.getAttribute("path") + file.getOriginalFilename() + "/")) {
189193
try {
@@ -392,27 +396,40 @@ public String changeFolder(@RequestParam String file,@RequestParam String folder
392396

393397
@RequestMapping("changeFolderName")
394398
public String changeFolderName(Model model, HttpSession session,@RequestParam String oldFolderName,@RequestParam String newFolderName) {
395-
//
396-
// ArrayList<String> subfoldersWithoutSelectedOne = foldersRepository.subfoldersOfFolder(session.getAttribute("path").toString());
397-
// subfoldersWithoutSelectedOne.remove(oldFolderName);
398-
// if(subfoldersWithoutSelectedOne.contains(newFolderName)) {
399-
// session.setAttribute("error","folderNameAlreadyExists");
400-
// return "redirect:/";
401-
// }
402-
// else {
403-
// String path = session.getAttribute("path").toString();
404-
//
405-
// foldersRepository.renameFolder(path,oldFolderName,newFolderName);
406-
//
407-
// for(int i = 0; i < filesRepository.getAllFiles().size();i++) {
408-
// if(filesRepository.getAllFiles().get(i).getPath().startsWith(path + oldFolderName + "/")) {
409-
// filesRepository.getAllFiles().get(i).setPath(filesRepository.getAllFiles().get(i).getPath().replaceFirst(path + oldFolderName + "/",path + newFolderName + "/"));
410-
// }
411-
// }
412-
//
413-
// filesRepository.writeFilesInformationFile();
399+
400+
ArrayList<String> subfoldersWithoutSelectedOne = foldersRepository.subfoldersOfFolder(session.getAttribute("path").toString());
401+
subfoldersWithoutSelectedOne.remove(oldFolderName);
402+
if(subfoldersWithoutSelectedOne.contains(newFolderName)) {
403+
session.setAttribute("error","folderNameAlreadyExists");
404+
return "redirect:/";
405+
}
406+
else {
407+
String path = session.getAttribute("path").toString();
408+
409+
foldersRepository.renameFolder(path,oldFolderName,newFolderName);
410+
411+
for(int i = 0; i < filesRepository.getAllFiles().size();i++) {
412+
if(filesRepository.getAllFiles().get(i).getPath().startsWith(path + oldFolderName + "/")) {
413+
filesRepository.getAllFiles().get(i).setPath(filesRepository.getAllFiles().get(i).getPath().replaceFirst(path + oldFolderName + "/",path + newFolderName + "/"));
414+
}
415+
}
416+
417+
for(int i = 0; i < dataNodesRepository.getNumber();i++) {
418+
String address = "";
419+
try {
420+
address = dataNodesRepository.get(i).getAddress();
421+
dataNodesRepository.get(address).writeString("renameFolder ");
422+
dataNodesRepository.get(address).writeString("\"" + session.getAttribute("path") + oldFolderName + "/" + "\" ");
423+
dataNodesRepository.get(address).writeString("\"" + session.getAttribute("path") + newFolderName + "/" + "\" ");
424+
dataNodesRepository.get(address).writeFlush();
425+
String response = dataNodesRepository.get(address).readResponse();
426+
} catch (Exception e) {
427+
toChangeRepository.add(new ToChange(address,"renameFolder ","\"" + session.getAttribute("path") + oldFolderName + "/" + "\" ","\"" + session.getAttribute("path") + newFolderName + "/" + "\" "));
428+
}
429+
}
430+
filesRepository.writeFilesInformationFile();
414431
return "redirect:/";
415-
//}
432+
}
416433
}
417434

418435
@RequestMapping("changeFileName")
@@ -434,7 +451,7 @@ public String changeFileName(Model model, HttpSession session,@RequestParam Stri
434451
for(int j = divided.size()-1;j>=0;j--) {
435452
String address = divided.get(j);
436453
try {
437-
dataNodesRepository.get(address).writeString("rename ");
454+
dataNodesRepository.get(address).writeString("renameFile ");
438455
dataNodesRepository.get(address).writeString("\"" +session.getAttribute("path") + oldFileName + "/" + "\" ");
439456
dataNodesRepository.get(address).writeString("\"" +session.getAttribute("path") + newFileName + "/" + "\" ");
440457
dataNodesRepository.get(address).writeFlush();
@@ -443,8 +460,8 @@ public String changeFileName(Model model, HttpSession session,@RequestParam Stri
443460
divided.remove(i);
444461
}
445462
} catch (Exception e){
446-
// filesRepository.toDelete.add(new Pair<>(filename,address));
447-
// filesRepository.rewriteFileToDelete();
463+
//TODO Spójność zmiany nazwy między węzłami
464+
toChangeRepository.add(new ToChange(address,"renameFile ","\"" +session.getAttribute("path") + oldFileName + "/" + "\" ","\"" +session.getAttribute("path") + newFileName + "/" + "\" "));
448465
}
449466
}
450467

src/main/java/pl/dfs/distributedfilesystem/files/FilesRepository.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -240,10 +240,9 @@ public void tryToDelete() {
240240

241241
}
242242

243-
244243
private ArrayList<SingleFile> fileArrayList;
245244

246245
String rootPath = System.getProperty("user.home") + File.separator + "dsfNameNode";
247246

248247
public ArrayList<Pair<String,String>> toDelete = new ArrayList<>();
249-
}
248+
}
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
package pl.dfs.distributedfilesystem.models;
2+
3+
public class ToChange {
4+
private String address;
5+
private String command;
6+
private String from;
7+
private String to;
8+
9+
public ToChange(String address, String command, String from, String to) {
10+
this.address = address;
11+
this.command = command;
12+
this.from = from;
13+
this.to = to;
14+
}
15+
16+
public String getAddress() {
17+
return address;
18+
}
19+
20+
public void setAddress(String address) {
21+
this.address = address;
22+
}
23+
24+
public String getCommand() {
25+
return command;
26+
}
27+
28+
public void setCommand(String command) {
29+
this.command = command;
30+
}
31+
32+
public String getFrom() {
33+
return from;
34+
}
35+
36+
public void setFrom(String from) {
37+
this.from = from;
38+
}
39+
40+
public String getTo() {
41+
return to;
42+
}
43+
44+
public void setTo(String to) {
45+
this.to = to;
46+
}
47+
}
Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
package pl.dfs.distributedfilesystem.models;
2+
3+
import org.springframework.beans.factory.annotation.Autowired;
4+
import org.springframework.stereotype.Component;
5+
import pl.dfs.distributedfilesystem.files.FilesRepository;
6+
import pl.dfs.distributedfilesystem.nodes.DataNodesRepository;
7+
8+
import java.io.File;
9+
import java.io.PrintWriter;
10+
import java.util.ArrayList;
11+
import java.util.Scanner;
12+
13+
@Component
14+
public class ToChangeRepository {
15+
16+
@Autowired
17+
DataNodesRepository dataNodesRepository;
18+
19+
public ToChangeRepository(){
20+
try {
21+
File nameNodePath = new File(rootPath);
22+
toChangeArrayList = new ArrayList<>();
23+
if (!nameNodePath.exists())
24+
nameNodePath.mkdir();
25+
26+
File nameNodeFilesInformationPath = new File(rootPath + File.separator + "files");
27+
28+
if (!nameNodeFilesInformationPath.exists())
29+
nameNodeFilesInformationPath.mkdir();
30+
31+
if (!new File(rootPath + File.separator + "files" + File.separator + "toChangeInformation").exists()) {
32+
new File(rootPath + File.separator + "files" + File.separator + "toChangeInformation").createNewFile();
33+
}
34+
Scanner in = new Scanner(new File(rootPath + File.separator +"files" + File.separator + "toChangeInformation"));
35+
while(in.hasNextLine()) {
36+
String line = in.nextLine();
37+
String divided[] = line.split(",");
38+
toChangeArrayList.add(new ToChange(divided[0],divided[1],divided[2],divided[3]));
39+
}
40+
} catch (Exception e) {
41+
42+
}
43+
}
44+
45+
public void add(ToChange toChange){
46+
toChangeArrayList.add(toChange);
47+
writeToFile();
48+
}
49+
50+
public void tryToExecuteCommands(){
51+
ArrayList<Integer> indexesToDelete = new ArrayList<>();
52+
String address;
53+
for(int i = 0;i<toChangeArrayList.size();i++) {
54+
try {
55+
address = toChangeArrayList.get(i).getAddress();
56+
dataNodesRepository.get(address).writeString(toChangeArrayList.get(i).getCommand());
57+
dataNodesRepository.get(address).writeString(toChangeArrayList.get(i).getFrom());
58+
dataNodesRepository.get(address).writeString(toChangeArrayList.get(i).getTo());
59+
dataNodesRepository.get(address).writeFlush();
60+
String response = dataNodesRepository.get(address).readResponse();
61+
if (response.equals("success")) {
62+
indexesToDelete.add(i);
63+
}
64+
} catch (Exception e){}
65+
}
66+
67+
for(int i = indexesToDelete.size()-1;i>=0;i--) {
68+
indexesToDelete.remove(indexesToDelete.get(i));
69+
}
70+
writeToFile();
71+
72+
}
73+
74+
public void writeToFile(){
75+
try {
76+
PrintWriter writer = new PrintWriter(new File(rootPath + File.separator + "files" + File.separator + "toChangeInformation"));
77+
for(int i = 0; i < toChangeArrayList.size();i++){
78+
writer.println(toChangeArrayList.get(i).getAddress() + "," + toChangeArrayList.get(i).getCommand()+","+toChangeArrayList.get(i).getFrom()+","+toChangeArrayList.get(i).getTo());
79+
}
80+
writer.close();
81+
}
82+
catch (Exception e){}
83+
}
84+
85+
86+
String rootPath = System.getProperty("user.home") + File.separator + "dsfNameNode";
87+
88+
private ArrayList<ToChange> toChangeArrayList;
89+
}

0 commit comments

Comments
 (0)