diff --git a/pom.xml b/pom.xml
index 50ce3e5..51125d4 100644
--- a/pom.xml
+++ b/pom.xml
@@ -10,7 +10,7 @@
com.cloud
NetworkCloudDrive
- 0.4.8
+ 0.4.9-SNAPSHOT
NetworkCloudDrive
NetworkCloudDrive project built with Spring Boot
diff --git a/reset.sh b/reset.sh
deleted file mode 100755
index 17fa77f..0000000
--- a/reset.sh
+++ /dev/null
@@ -1,8 +0,0 @@
-#/bin/bash
-rm -rf ./root #remove entire folder and contents
-echo "removed root folder"
-
-rm filedatabase.db
-echo "removed db file"
-
-#can combine rm command into single line: rm -rf ./root filedatabase.db
\ No newline at end of file
diff --git a/src/main/java/com/cloud/NetworkCloudDrive/DAO/SQLiteDAO.java b/src/main/java/com/cloud/NetworkCloudDrive/DAO/SQLiteDAO.java
index 23ac419..4d96a85 100644
--- a/src/main/java/com/cloud/NetworkCloudDrive/DAO/SQLiteDAO.java
+++ b/src/main/java/com/cloud/NetworkCloudDrive/DAO/SQLiteDAO.java
@@ -19,7 +19,6 @@
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
-import java.io.FileNotFoundException;
import java.nio.file.FileSystemException;
import java.sql.SQLException;
import java.util.List;
@@ -333,7 +332,7 @@ public FolderMetadata getFolderMetadataFromIdPathAndName(String idPath, String n
dummyFolderMetadata.setPath(idPath);
dummyFolderMetadata.setId(null);
dummyFolderMetadata.setCreatedAt(null);
- dummyFolderMetadata.setUserid(userId); //current logged in user id
+ dummyFolderMetadata.setUserid(userId); //current logged-in user id
Example folderMetadataExample = Example.of(dummyFolderMetadata);
Optional optionalFolderMetadata = sqLiteFolderRepository.findOne(folderMetadataExample);
if (optionalFolderMetadata.isEmpty())
diff --git a/src/main/java/com/cloud/NetworkCloudDrive/Models/DTO/FileListItemDTO.java b/src/main/java/com/cloud/NetworkCloudDrive/Models/DTO/FileListItemDTO.java
index 17ba7f9..b49d30c 100644
--- a/src/main/java/com/cloud/NetworkCloudDrive/Models/DTO/FileListItemDTO.java
+++ b/src/main/java/com/cloud/NetworkCloudDrive/Models/DTO/FileListItemDTO.java
@@ -1,10 +1,11 @@
package com.cloud.NetworkCloudDrive.Models.DTO;
import com.cloud.NetworkCloudDrive.Models.FileMetadata;
+import com.cloud.NetworkCloudDrive.Models.Implementations.AlphanumericalSorter;
import java.time.Instant;
-public class FileListItemDTO {
+public class FileListItemDTO extends AlphanumericalSorter implements Comparable {
private long id;
private String name;
private String mimeType;
@@ -60,4 +61,9 @@ public boolean isHasThumbnail() {
public void setHasThumbnail(boolean hasThumbnail) {
this.hasThumbnail = hasThumbnail;
}
+
+ @Override
+ public int compareTo(FileListItemDTO fl2) {
+ return Integer.compare(calculateRank(this.name.toLowerCase()), calculateRank(fl2.getName().toLowerCase()));
+ }
}
diff --git a/src/main/java/com/cloud/NetworkCloudDrive/Models/DTO/FolderListItemDTO.java b/src/main/java/com/cloud/NetworkCloudDrive/Models/DTO/FolderListItemDTO.java
index 20c96c9..cc41d0f 100644
--- a/src/main/java/com/cloud/NetworkCloudDrive/Models/DTO/FolderListItemDTO.java
+++ b/src/main/java/com/cloud/NetworkCloudDrive/Models/DTO/FolderListItemDTO.java
@@ -1,10 +1,11 @@
package com.cloud.NetworkCloudDrive.Models.DTO;
import com.cloud.NetworkCloudDrive.Models.FolderMetadata;
+import com.cloud.NetworkCloudDrive.Models.Implementations.AlphanumericalSorter;
import java.time.Instant;
-public class FolderListItemDTO {
+public class FolderListItemDTO extends AlphanumericalSorter implements Comparable {
private long id;
private String name;
private String path;
@@ -43,4 +44,10 @@ public Instant getCreatedAt() {
public void setCreatedAt(Instant createdAt) {
this.createdAt = createdAt;
}
+
+ @Override
+ public int compareTo(FolderListItemDTO f2) {
+ return Integer.compare(calculateRank(this.name.toLowerCase()), calculateRank(f2.getName().toLowerCase()));
+ }
}
+
diff --git a/src/main/java/com/cloud/NetworkCloudDrive/Models/Implementations/ASCIIRanker.java b/src/main/java/com/cloud/NetworkCloudDrive/Models/Implementations/ASCIIRanker.java
new file mode 100644
index 0000000..ccec34e
--- /dev/null
+++ b/src/main/java/com/cloud/NetworkCloudDrive/Models/Implementations/ASCIIRanker.java
@@ -0,0 +1,54 @@
+package com.cloud.NetworkCloudDrive.Models.Implementations;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class ASCIIRanker {
+
+ public int compareByGroups(String firstItem, String secondItem) {
+ boolean secondIsBigger = false;
+ int length;
+ if (firstItem.length() > secondItem.length()) {
+ length = secondItem.length();
+ } else {
+ secondIsBigger = true;
+ length = firstItem.length();
+ }
+
+ List digits = new ArrayList<>();
+ List characters = new ArrayList<>();
+
+ for (int i = 0; i < length; i++) {
+ /*
+ file1.txt !^
+ fil2.txt <-- *** ^^^
+
+ fil2.txt
+ file1.txt
+
+ file1.txt
+ file2.txt
+ file12.txt
+ */
+ char firstStringChar = firstItem.charAt(i);
+ char secondStringChar = secondItem.charAt(i);
+ if (Character.isDigit(firstStringChar)) {
+
+ }
+ }
+ return 1;
+ }
+
+ /*
+ should only be used when all characters in comparing strings are same
+ then can be used to rank them between each other using ASCII scores
+ */
+ public int calculateRank(String word) {
+ int rank = 0;
+ for (int i = 0; i < word.length(); i++) {
+ char ch = word.charAt(i);
+ rank += ch;
+ }
+ return rank;
+ }
+}
diff --git a/src/main/java/com/cloud/NetworkCloudDrive/Models/Implementations/AlphanumericalSorter.java b/src/main/java/com/cloud/NetworkCloudDrive/Models/Implementations/AlphanumericalSorter.java
new file mode 100644
index 0000000..80c35e5
--- /dev/null
+++ b/src/main/java/com/cloud/NetworkCloudDrive/Models/Implementations/AlphanumericalSorter.java
@@ -0,0 +1,64 @@
+package com.cloud.NetworkCloudDrive.Models.Implementations;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class AlphanumericalSorter {
+
+ public int compareByGroups(String firstItem, String secondItem) {
+ boolean secondIsBigger = false;
+ int length;
+ if (firstItem.length() > secondItem.length()) {
+ length = secondItem.length();
+ } else {
+ secondIsBigger = true;
+ length = firstItem.length();
+ }
+
+ List digits = new ArrayList<>();
+ List characters = new ArrayList<>();
+
+ for (int i = 0; i < length; i++) {
+ /*
+ file1.txt !^
+ fil2.txt <-- *** ^^^
+
+ fil2.txt
+ file1.txt
+
+ file1.txt
+ file2.txt
+ file12.txt
+ */
+ char firstStringChar = firstItem.charAt(i);
+ char secondStringChar = secondItem.charAt(i);
+ if (Character.isDigit(firstStringChar)) {
+ digits.add(firstStringChar - '0');
+ continue;
+ }
+ characters.add(new Character[]{firstStringChar, secondStringChar});
+ }
+ return 1;
+ }
+
+ private boolean handleStrings(char[] firstChars, char[] secondChars) {
+ for (int i = 0; i < firstChars.length; i++) {
+ int j = i + 1;
+
+ }
+ return false;
+ }
+
+ /*
+ should only be used when all characters in comparing strings are same
+ then can be used to rank them between each other using ASCII scores
+ */
+ public int calculateRank(String word) {
+ int rank = 0;
+ for (int i = 0; i < word.length(); i++) {
+ char ch = word.charAt(i);
+ rank += ch;
+ }
+ return rank;
+ }
+}
diff --git a/src/main/java/com/cloud/NetworkCloudDrive/Services/FileSystemService.java b/src/main/java/com/cloud/NetworkCloudDrive/Services/FileSystemService.java
index 328c3b1..0441b39 100644
--- a/src/main/java/com/cloud/NetworkCloudDrive/Services/FileSystemService.java
+++ b/src/main/java/com/cloud/NetworkCloudDrive/Services/FileSystemService.java
@@ -100,8 +100,8 @@ public Map> getListOfMetadataFromPath(List filePaths, Sort
List> results = checkAndCollectFilesAndFolders(filePaths);
return sortAndFilterUtility.sortFileList(
sortListEnum,
- (Stream) results.get(0).stream(),
- (Stream) results.get(1).stream()
+ (List) results.get(0),
+ (List) results.get(1)
);
}
diff --git a/src/main/java/com/cloud/NetworkCloudDrive/Services/Tasks/MaintenanceService.java b/src/main/java/com/cloud/NetworkCloudDrive/Services/Tasks/MaintenanceService.java
index b38ffa2..177952d 100644
--- a/src/main/java/com/cloud/NetworkCloudDrive/Services/Tasks/MaintenanceService.java
+++ b/src/main/java/com/cloud/NetworkCloudDrive/Services/Tasks/MaintenanceService.java
@@ -146,8 +146,6 @@ public boolean scanDirectory(Path startingPath, Predicate filter, boolean
public ThumbnailScanResults recursiveThumbnailScanInvoker(long folderId) throws SQLException {
ThumbnailScanResults thumbnailScanResults = new ThumbnailScanResults();
List folderMetadataContainingPath = sqLiteDAO.findAllStartsWithIdPathReturnsLongList(sqLiteDAO.getIdPath(folderId));
- logger.info("size {}", folderMetadataContainingPath.size());
- folderMetadataContainingPath.forEach(l -> logger.info("item {}", l));
//temp
if (folderId == 0) {
folderMetadataContainingPath.add(0L);
diff --git a/src/main/java/com/cloud/NetworkCloudDrive/Utilities/SortAndFilterUtility.java b/src/main/java/com/cloud/NetworkCloudDrive/Utilities/SortAndFilterUtility.java
index efcae25..9caff89 100644
--- a/src/main/java/com/cloud/NetworkCloudDrive/Utilities/SortAndFilterUtility.java
+++ b/src/main/java/com/cloud/NetworkCloudDrive/Utilities/SortAndFilterUtility.java
@@ -6,11 +6,9 @@
import com.cloud.NetworkCloudDrive.Models.Enum.SortListEnum;
import org.springframework.stereotype.Component;
-import java.util.Comparator;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
import java.util.function.Predicate;
+import java.util.stream.Collectors;
import java.util.stream.Stream;
@Component
@@ -18,49 +16,55 @@ public class SortAndFilterUtility {
public SortAndFilterUtility() {}
- public Map> sortFileList(SortListEnum sortListEnum, Stream fileList, Stream folderList) {
- Comparator fileListItemDTOComparator = null;
- Comparator folderListItemDTOComparator = null;
+ public Map> sortFileList(SortListEnum sortListEnum, List fileList, List folderList) {
switch (sortListEnum) {
- case ALPHABETICAL:
- fileListItemDTOComparator = Comparator.comparing(f -> f.getName().toLowerCase());
- folderListItemDTOComparator = Comparator.comparing(fl -> fl.getName().toLowerCase());
- break;
- case REVERSE_ALPHABETICAL:
- fileListItemDTOComparator = Comparator.comparing(f -> f.getName().toLowerCase(), Comparator.reverseOrder());
- folderListItemDTOComparator = Comparator.comparing(fl -> fl.getName().toLowerCase(), Comparator.reverseOrder());
- break;
+ case ALPHABETICAL, REVERSE_ALPHABETICAL:
+ return sortName(sortListEnum, fileList, folderList);
case NEWEST:
- fileListItemDTOComparator = Comparator.comparing(FileListItemDTO::getCreatedAt, Comparator.reverseOrder());
- folderListItemDTOComparator = Comparator.comparing(FolderListItemDTO::getCreatedAt, Comparator.reverseOrder());
+ fileList.sort(Comparator.comparing(FileListItemDTO::getCreatedAt).reversed());
+ folderList.sort(Comparator.comparing(FolderListItemDTO::getCreatedAt).reversed());
break;
case OLDEST:
- fileListItemDTOComparator = Comparator.comparing(FileListItemDTO::getCreatedAt);
- folderListItemDTOComparator = Comparator.comparing(FolderListItemDTO::getCreatedAt);
+ fileList.sort(Comparator.comparing(FileListItemDTO::getCreatedAt));
+ folderList.sort(Comparator.comparing(FolderListItemDTO::getCreatedAt));
break;
case FOLDERS_FIRST:
LinkedHashMap> linkedHashMap = new LinkedHashMap<>();
- linkedHashMap.put("folders", folderList.toList());
- linkedHashMap.put("files", fileList.toList());
+ linkedHashMap.put("folders", folderList);
+ linkedHashMap.put("files", fileList);
return linkedHashMap;
case SIZE:
- fileListItemDTOComparator = Comparator.comparingLong(FileListItemDTO::getSize).reversed();
+ fileList.sort(Comparator.comparing(FileListItemDTO::getCreatedAt).reversed());
break;
case SIZE_LOWEST:
- fileListItemDTOComparator = Comparator.comparingLong(FileListItemDTO::getSize);
+ fileList.sort(Comparator.comparing(FileListItemDTO::getCreatedAt));
break;
- default:
- return Map.of(
- "files", fileList.toList(),
- "folders", folderList.toList()
- );
}
+ return returnMappedLists(fileList, folderList);
+ }
+
+ private Map> returnMappedLists(List fileListItemDTO, List folderListItemDTO) {
return Map.of(
- "files", (fileListItemDTOComparator != null ? fileList.sorted(fileListItemDTOComparator).toList() : fileList.toList()),
- "folders", (folderListItemDTOComparator != null ? folderList.sorted(folderListItemDTOComparator).toList() : folderList.toList())
+ "files", fileListItemDTO,
+ "folders", folderListItemDTO
);
}
+ private Map> sortName(SortListEnum sortOption, List fileListItemDTO, List folderListItemDTO) {
+
+ switch (sortOption) {
+ case ALPHABETICAL:
+ fileListItemDTO.sort(Comparator.naturalOrder());
+ folderListItemDTO.sort(Comparator.naturalOrder());
+ break;
+ case REVERSE_ALPHABETICAL:
+ fileListItemDTO.sort(Comparator.reverseOrder());
+ folderListItemDTO.sort(Comparator.reverseOrder());
+ break;
+ }
+ return returnMappedLists(fileListItemDTO, folderListItemDTO);
+ }
+
public Map> filterFileList(FilterListEnum filterListEnum, Stream fileList, Stream folderList, String filterCase) {
Predicate fileListItemDTOPredicate = null;
Predicate folderListItemDTOPredicate = null;