Refactor QuestItemFetcher, remove commons-io dependency

This commit is contained in:
P0nk
2022-08-11 01:15:34 +02:00
parent 7aba5f4578
commit 58277574b5
2 changed files with 26 additions and 24 deletions

View File

@@ -31,7 +31,6 @@
<junit.version>5.8.2</junit.version> <!-- Unit test --> <junit.version>5.8.2</junit.version> <!-- Unit test -->
<yamlbeans.version>1.15</yamlbeans.version> <!-- Config file --> <yamlbeans.version>1.15</yamlbeans.version> <!-- Config file -->
<jcip-annotations.version>1.0</jcip-annotations.version> <!-- Annotations for concurrency documentation --> <jcip-annotations.version>1.0</jcip-annotations.version> <!-- Annotations for concurrency documentation -->
<commons-io.version>2.11.0</commons-io.version> <!-- Util library used by some of our tools -->
<HikariCP.version>5.0.1</HikariCP.version> <!-- Database connection pool --> <HikariCP.version>5.0.1</HikariCP.version> <!-- Database connection pool -->
<mysql-connector-java.version>8.0.30</mysql-connector-java.version> <!-- MySQL JDBC driver --> <mysql-connector-java.version>8.0.30</mysql-connector-java.version> <!-- MySQL JDBC driver -->
</properties> </properties>
@@ -47,11 +46,6 @@
<artifactId>jcip-annotations</artifactId> <artifactId>jcip-annotations</artifactId>
<version>${jcip-annotations.version}</version> <version>${jcip-annotations.version}</version>
</dependency> </dependency>
<dependency> <!-- only used for some tools -->
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>${commons-io.version}</version>
</dependency>
<!-- Database --> <!-- Database -->
<dependency> <dependency>

View File

@@ -1,13 +1,14 @@
package tools.mapletools; package tools.mapletools;
import org.apache.commons.io.FileUtils;
import provider.wz.WZFiles; import provider.wz.WZFiles;
import server.ItemInformationProvider; import server.ItemInformationProvider;
import tools.DatabaseConnection; import tools.DatabaseConnection;
import tools.Pair; import tools.Pair;
import java.io.*; import java.io.BufferedReader;
import java.nio.charset.StandardCharsets; import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.PrintWriter;
import java.nio.file.Files; import java.nio.file.Files;
import java.nio.file.Path; import java.nio.file.Path;
import java.sql.Connection; import java.sql.Connection;
@@ -19,7 +20,7 @@ import java.util.*;
/** /**
* @author RonanLana * @author RonanLana
* <p> * <p>
* 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. * and update the questid from items that are labeled as "Quest Item" on the DB.
* <p> * <p>
* Running it should generate a report file under "output" folder with the search results. * Running it should generate a report file under "output" folder with the search results.
@@ -28,6 +29,7 @@ import java.util.*;
*/ */
public class QuestItemFetcher { public class QuestItemFetcher {
private static final Path OUTPUT_FILE = ToolConstants.getOutputFile("quest_report.txt"); private static final Path OUTPUT_FILE = ToolConstants.getOutputFile("quest_report.txt");
private static final Collection<String> RELEVANT_FILE_EXTENSIONS = Set.of(".sql", ".js", ".txt", ".java");
private static final int INITIAL_STRING_LENGTH = 50; private static final int INITIAL_STRING_LENGTH = 50;
private static final int INITIAL_LENGTH = 200; 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 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<Pair<Integer, Integer>> itemsWithQuest) { private static void filterDirectorySearchMatchingData(String filePath, List<Pair<Integer, Integer>> itemsWithQuest) {
Iterator<File> iter = FileUtils.iterateFiles(new File(path), new String[]{"sql", "js", "txt", "java"}, true); try {
Files.walk(Path.of(filePath))
while (iter.hasNext()) { .filter(QuestItemFetcher::isRelevantFile)
File file = iter.next(); .forEach(path -> fileSearchMatchingData(path, itemsWithQuest));
fileSearchMatchingData(file, 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) { private static boolean foundMatchingDataOnFile(String fileContent, String searchStr) {
return fileContent.contains(searchStr); return fileContent.contains(searchStr);
} }
private static void fileSearchMatchingData(File file, List<Pair<Integer, Integer>> itemsWithQuest) { private static void fileSearchMatchingData(Path file, List<Pair<Integer, Integer>> itemsWithQuest) {
try { try {
String fileContent = FileUtils.readFileToString(file, StandardCharsets.UTF_8); String fileContent = Files.readString(file);
List<Pair<Integer, Integer>> copyItemsWithQuest = new ArrayList<>(itemsWithQuest); List<Pair<Integer, Integer>> copyItemsWithQuest = new ArrayList<>(itemsWithQuest);
for (Pair<Integer, Integer> iq : copyItemsWithQuest) { for (Pair<Integer, Integer> iq : copyItemsWithQuest) {
@@ -359,7 +367,7 @@ public class QuestItemFetcher {
} }
} }
} catch (IOException ioe) { } 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(); ioe.printStackTrace();
} }
} }
@@ -374,7 +382,7 @@ public class QuestItemFetcher {
List<Map.Entry<Integer, Integer>> list = new ArrayList<>(map.size()); List<Map.Entry<Integer, Integer>> list = new ArrayList<>(map.size());
list.addAll(map.entrySet()); list.addAll(map.entrySet());
list.sort((o1, o2) -> o1.getKey() - o2.getKey()); list.sort(Comparator.comparingInt(Map.Entry::getKey));
return list; return list;
} }
@@ -383,7 +391,7 @@ public class QuestItemFetcher {
List<Map.Entry<Integer, int[]>> list = new ArrayList<>(map.size()); List<Map.Entry<Integer, int[]>> list = new ArrayList<>(map.size());
list.addAll(map.entrySet()); list.addAll(map.entrySet());
list.sort((o1, o2) -> o1.getKey() - o2.getKey()); list.sort(Comparator.comparingInt(Map.Entry::getKey));
return list; return list;
} }
@@ -394,12 +402,12 @@ public class QuestItemFetcher {
List<Integer> il = new ArrayList<>(2); List<Integer> il = new ArrayList<>(2);
il.addAll(e.getValue()); il.addAll(e.getValue());
il.sort((o1, o2) -> o1 - o2); il.sort(Comparator.comparingInt(o -> o));
list.add(new Pair<>(e.getKey(), il)); list.add(new Pair<>(e.getKey(), il));
} }
list.sort((o1, o2) -> o1.getLeft() - o2.getLeft()); list.sort(Comparator.comparingInt(Pair::getLeft));
return list; return list;
} }
@@ -446,7 +454,7 @@ public class QuestItemFetcher {
System.out.println("Filtering drops on project files..."); System.out.println("Filtering drops on project files...");
// finally, filter whether this item is mentioned on the source code or not. // finally, filter whether this item is mentioned on the source code or not.
filterDirectorySearchMatchingData("scripts", itemsWithQuest); filterDirectorySearchMatchingData("scripts", itemsWithQuest);
filterDirectorySearchMatchingData("sql", itemsWithQuest); filterDirectorySearchMatchingData("database/sql", itemsWithQuest);
filterDirectorySearchMatchingData("src", itemsWithQuest); filterDirectorySearchMatchingData("src", itemsWithQuest);
System.out.println("Reporting results..."); System.out.println("Reporting results...");