iter = FileUtils.iterateFiles(mapDirectory, new String[]{"xml"}, true);
- System.out.println("Parsing map area " + mapArea);
-
- while (iter.hasNext()) {
- File file = iter.next();
- searchMapFile(file);
- }
- } catch (UncheckedIOException e) {
- System.err.println("Directory " + mapDirectory.getPath() + " does not exist");
+ Files.walk(mapDirectory)
+ .filter(MapInfoRetriever::isRelevantFile)
+ .forEach(MapInfoRetriever::searchMapFile);
+ } catch (UncheckedIOException | IOException e) {
+ System.err.println("Directory " + mapDirectory.getFileName().toString() + " does not exist");
}
}
- private static void searchMapFile(File file) {
+ private static boolean isRelevantFile(Path file) {
+ return file.getFileName().toString().endsWith(".xml");
+ }
+
+ private static void searchMapFile(Path file) {
// This will reference one line at a time
String line = null;
- try {
- InputStreamReader fileReader = new InputStreamReader(new FileInputStream(file), StandardCharsets.UTF_8);
- bufferedReader = new BufferedReader(fileReader);
-
+ try (BufferedReader reader = Files.newBufferedReader(file)) {
hasInfo = false;
status = 0;
- while ((line = bufferedReader.readLine()) != null) {
- if (translateToken(line)) {
+ while ((line = reader.readLine()) != null) {
+ if (translateToken(reader, line)) {
break;
}
}
if (!hasInfo) {
- missingInfo.add(Integer.valueOf(file.getName().split(".img.xml")[0]));
+ missingInfo.add(Integer.valueOf(file.getFileName().toString().split(".img.xml")[0]));
}
-
- bufferedReader.close();
- fileReader.close();
} catch (IOException ex) {
- System.out.println("Error reading file '" + file.getName() + "'");
+ System.out.println("Error reading file '" + file.getFileName().toString() + "'");
} catch (Exception e) {
e.printStackTrace();
}
diff --git a/src/main/java/tools/mapletools/QuestItemFetcher.java b/src/main/java/tools/mapletools/QuestItemFetcher.java
index 440e96fd26..130ba51de9 100644
--- a/src/main/java/tools/mapletools/QuestItemFetcher.java
+++ b/src/main/java/tools/mapletools/QuestItemFetcher.java
@@ -1,13 +1,14 @@
package tools.mapletools;
-import org.apache.commons.io.FileUtils;
import provider.wz.WZFiles;
import server.ItemInformationProvider;
import tools.DatabaseConnection;
import tools.Pair;
-import java.io.*;
-import java.nio.charset.StandardCharsets;
+import java.io.BufferedReader;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.PrintWriter;
import java.nio.file.Files;
import java.nio.file.Path;
import java.sql.Connection;
@@ -19,7 +20,7 @@ import java.util.*;
/**
* @author RonanLana
*
- * This application haves 2 objectives: fetch missing drop data relevant to quests,
+ * This application has 2 objectives: fetch missing drop data relevant to quests,
* and update the questid from items that are labeled as "Quest Item" on the DB.
*
* Running it should generate a report file under "output" folder with the search results.
@@ -28,6 +29,7 @@ import java.util.*;
*/
public class QuestItemFetcher {
private static final Path OUTPUT_FILE = ToolConstants.getOutputFile("quest_report.txt");
+ private static final Collection RELEVANT_FILE_EXTENSIONS = Set.of(".sql", ".js", ".txt", ".java");
private static final int INITIAL_STRING_LENGTH = 50;
private static final int INITIAL_LENGTH = 200;
private static final boolean DISPLAY_EXTRA_INFO = true; // display items with zero quantity over the quest act WZ
@@ -335,22 +337,28 @@ public class QuestItemFetcher {
}
}
- private static void filterDirectorySearchMatchingData(String path, List> itemsWithQuest) {
- Iterator iter = FileUtils.iterateFiles(new File(path), new String[]{"sql", "js", "txt", "java"}, true);
-
- while (iter.hasNext()) {
- File file = iter.next();
- fileSearchMatchingData(file, itemsWithQuest);
+ private static void filterDirectorySearchMatchingData(String filePath, List> itemsWithQuest) {
+ try {
+ Files.walk(Path.of(filePath))
+ .filter(QuestItemFetcher::isRelevantFile)
+ .forEach(path -> fileSearchMatchingData(path, itemsWithQuest));
+ } catch (IOException e) {
+ throw new RuntimeException("Error during recursive file walk", e);
}
}
+ private static boolean isRelevantFile(Path file) {
+ String fileName = file.getFileName().toString();
+ return RELEVANT_FILE_EXTENSIONS.stream().anyMatch(fileName::endsWith);
+ }
+
private static boolean foundMatchingDataOnFile(String fileContent, String searchStr) {
return fileContent.contains(searchStr);
}
- private static void fileSearchMatchingData(File file, List> itemsWithQuest) {
+ private static void fileSearchMatchingData(Path file, List> itemsWithQuest) {
try {
- String fileContent = FileUtils.readFileToString(file, StandardCharsets.UTF_8);
+ String fileContent = Files.readString(file);
List> copyItemsWithQuest = new ArrayList<>(itemsWithQuest);
for (Pair iq : copyItemsWithQuest) {
@@ -359,7 +367,7 @@ public class QuestItemFetcher {
}
}
} catch (IOException ioe) {
- System.out.println("Failed to read file: " + file.getAbsolutePath());
+ System.out.println("Failed to read file: " + file.getFileName().toAbsolutePath().toString());
ioe.printStackTrace();
}
}
@@ -374,7 +382,7 @@ public class QuestItemFetcher {
List> list = new ArrayList<>(map.size());
list.addAll(map.entrySet());
- list.sort((o1, o2) -> o1.getKey() - o2.getKey());
+ list.sort(Comparator.comparingInt(Map.Entry::getKey));
return list;
}
@@ -383,7 +391,7 @@ public class QuestItemFetcher {
List> list = new ArrayList<>(map.size());
list.addAll(map.entrySet());
- list.sort((o1, o2) -> o1.getKey() - o2.getKey());
+ list.sort(Comparator.comparingInt(Map.Entry::getKey));
return list;
}
@@ -394,12 +402,12 @@ public class QuestItemFetcher {
List il = new ArrayList<>(2);
il.addAll(e.getValue());
- il.sort((o1, o2) -> o1 - o2);
+ il.sort(Comparator.comparingInt(o -> o));
list.add(new Pair<>(e.getKey(), il));
}
- list.sort((o1, o2) -> o1.getLeft() - o2.getLeft());
+ list.sort(Comparator.comparingInt(Pair::getLeft));
return list;
}
@@ -446,7 +454,7 @@ public class QuestItemFetcher {
System.out.println("Filtering drops on project files...");
// finally, filter whether this item is mentioned on the source code or not.
filterDirectorySearchMatchingData("scripts", itemsWithQuest);
- filterDirectorySearchMatchingData("sql", itemsWithQuest);
+ filterDirectorySearchMatchingData("database/sql", itemsWithQuest);
filterDirectorySearchMatchingData("src", itemsWithQuest);
System.out.println("Reporting results...");