Skip to content

Commit

Permalink
Merge pull request #135 from f0fz/FixNusMods
Browse files Browse the repository at this point in the history
Put NUSMods in resource folder
  • Loading branch information
SimJunYou authored Oct 28, 2020
2 parents 64a2850 + 888f88e commit 2a8b4b9
Show file tree
Hide file tree
Showing 5 changed files with 62 additions and 9 deletions.
8 changes: 8 additions & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,14 @@ test {
}
}

sourceSets {
main {
resources {
srcDirs "src/main/resources"
}
}
}

application {
mainClassName = "seedu.duke.Duke"
}
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/seedu/duke/Duke.java
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ public void run(String[] args) throws FileNotFoundException {
start(args);
runCommandLoopUntilExitCommand();
InputOutputManager.save();
InputOutputManager.saveNusMods();
//InputOutputManager.saveNusMods();
logger.getLogger().info("PROGRAM TERMINATED SUCCESSFULLY");
}

Expand Down
3 changes: 3 additions & 0 deletions src/main/java/seedu/duke/data/Module.java
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,9 @@ public void setModuleCode(String moduleCode) {
}

public String getModuleGrade() {
if (grade == null){
return "No grade yet";
}
return grade;
}

Expand Down
27 changes: 27 additions & 0 deletions src/main/java/seedu/duke/data/storage/Decoder.java
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@
import com.alibaba.fastjson.JSON;
import seedu.duke.data.TimeTable;

import static seedu.duke.data.storage.InputOutputManager.nusModuleFile;

/**
* Manages all outputs from files, and the conversion from String in file to Object in memory.
* Throws exceptions to InputOutputManager and handles none.
Expand Down Expand Up @@ -84,6 +86,31 @@ public static ArrayList<Task> loadTasks(String dataFileName) {
return new ArrayList<>(tasksList);
}

/**
* Loads NUSMods list from the JAR file's resources folder.
*
* @return
* The HashMap of Module objects (from NUSMods)
*/
public static HashMap<String, Module> loadNusModsFromJar() throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(
Decoder.class.getResourceAsStream(nusModuleFile)));
String jsonStr = "";
while (br.ready()) {
jsonStr += br.readLine();
}
if (jsonStr != null) {
jsonStr = "[" + jsonStr + "]";
}
System.out.println(jsonStr);
List<Module> modulesList = JSON.parseArray(jsonStr, Module.class);
HashMap<String, Module> retrievedNusModsList = new HashMap<>();
for (Module eachModule : modulesList) {
retrievedNusModsList.put(eachModule.getModuleCode(), eachModule);
}
return retrievedNusModsList;
}

/**
* Pulls JSON from the NUSMods API, parses it, and returns the HashMap of Module objects.
*
Expand Down
31 changes: 23 additions & 8 deletions src/main/java/seedu/duke/data/storage/InputOutputManager.java
Original file line number Diff line number Diff line change
@@ -1,14 +1,17 @@
package seedu.duke.data.storage;

import seedu.duke.data.Module;
import seedu.duke.data.ModuleManager;
import seedu.duke.data.TimeTableManager;
import seedu.duke.util.FileName;
import seedu.duke.data.TaskManager;
import seedu.duke.DukeLogger;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.nio.file.Files;

import java.util.HashMap;
import java.util.logging.Level;

/**
Expand All @@ -21,6 +24,7 @@
public class InputOutputManager {
static final String root = System.getProperty("user.dir");
static final java.nio.file.Path dirPath = java.nio.file.Paths.get(root, "data");
static final java.nio.file.Path resourceDirPath = java.nio.file.Paths.get(root, "src/main/resources");

static final String userModuleFileName = FileName.MOD_SAVE_FILE_NAME + FileName.FILE_EXT;
static final String userTaskFileName = FileName.TASK_SAVE_FILE_NAME + FileName.FILE_EXT;
Expand All @@ -31,10 +35,9 @@ public class InputOutputManager {
java.nio.file.Paths.get(String.valueOf(dirPath),userModuleFileName);
static final java.nio.file.Path userTaskFile =
java.nio.file.Paths.get(String.valueOf(dirPath), userTaskFileName);
static final java.nio.file.Path nusModuleFile =
java.nio.file.Paths.get(String.valueOf(dirPath), nusModuleFileName);
static final java.nio.file.Path timetableFile =
java.nio.file.Paths.get(String.valueOf(dirPath), timetableFileName);
static final String nusModuleFile = "/" + nusModuleFileName;

private static final DukeLogger logger = new DukeLogger(InputOutputManager.class.getName());

Expand Down Expand Up @@ -70,20 +73,32 @@ public static void start() {
} else {
logger.getLogger().info("Skipping timetable save; file does not exist: " + timetableFile);
}
loadNusModSave(); // will load from NUSMods API if file not found
}
loadNusModSave(); // will load from NUSMods API if file not found
}

/**
* Loads NUS Modules from the given file.
*/
public static void loadNusModSave() {
logger.getLogger().info("Loading NUS modules from " + nusModuleFileName);
if (!Files.exists(nusModuleFile)) {
ModuleManager.loadNusMods(Decoder.generateNusModsList());
} else {
ModuleManager.loadNusMods(Decoder.loadModules(nusModuleFile.toString()));
try {
logger.getLogger().info("Loading NUS modules from JAR file resources folder " + nusModuleFileName);
ModuleManager.loadNusMods(Decoder.loadNusModsFromJar());
logger.getLogger().info("Successfully loaded from JAR!");
} catch (IOException | NullPointerException e) {
try {
logger.getLogger().warning("Couldn't load NUSMods from JAR directory, trying normal directory...");
ModuleManager.loadNusMods(Decoder.loadModules(nusModuleFile.toString()));
logger.getLogger().info("Successfully loaded from normal directory!");
} catch (Exception e2) {
logger.getLogger().warning("Can't load from normal location! " + e2.getMessage());
logger.getLogger().warning("Loading from NUSMods API...");
ModuleManager.loadNusMods(Decoder.generateNusModsList());
logger.getLogger().info("Successfully loaded from NUSMods API!");
}

}
// }
}

/**
Expand Down

0 comments on commit 2a8b4b9

Please sign in to comment.