Skip to content

Commit

Permalink
Merge pull request #114 from GlenWong97/master
Browse files Browse the repository at this point in the history
v1.3: Implemented DeleteNoteCommand and refactored mainwindow
  • Loading branch information
GlenWong97 authored Oct 29, 2019
2 parents 7278484 + 3949773 commit 639129b
Show file tree
Hide file tree
Showing 8 changed files with 344 additions and 94 deletions.
10 changes: 6 additions & 4 deletions src/main/java/javacake/Parser.java
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
package javacake;


import javacake.commands.AddCommand;
import javacake.commands.ChangeColorCommand;
import javacake.commands.BackCommand;
import javacake.commands.Command;
import javacake.commands.CreateNoteCommand;
import javacake.commands.DeleteNoteCommand;
import javacake.commands.EditNoteCommand;
import javacake.commands.ExitCommand;
import javacake.commands.GoToCommand;
Expand All @@ -17,7 +17,6 @@
import javacake.commands.ResetCommand;
import javacake.commands.ScoreCommand;
import javacake.exceptions.DukeException;
import javacake.notes.NoteList;
import javacake.ui.MainWindow;

public class Parser {
Expand Down Expand Up @@ -59,6 +58,8 @@ public static Command parse(String inputCommand) throws DukeException {
return new EditNoteCommand(inputCommand);
} else if (input.equals("listnote")) {
return new ListNoteCommand();
} else if (input.equals("deletenote")) {
return new DeleteNoteCommand(inputCommand);
} else if (input.equals("deadline")) {
return new AddCommand(inputCommand);
} else if (input.equals("reminder")) {
Expand All @@ -78,8 +79,9 @@ public static Command parse(String inputCommand) throws DukeException {
* 2) if user accidentally types extra or less letter, eg. treee or tre instead of tree.
*/
private static void helper(String input) throws DukeException {
String[] commands = {"exit", "list", "back", "help", "score", "reset",
"goto", "overview", "deadline", "editnote", "createnote"};
String[] commands = {"exit", "list", "back", "help", "score", "reset", "goto",
"overview", "deadline", "editnote", "createnote", "listnote", "deletenote"};

for (int i = 0; i < commands.length; i++) {
boolean isTypo = false;
String command = commands[i];
Expand Down
3 changes: 2 additions & 1 deletion src/main/java/javacake/commands/Command.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,8 @@ public abstract class Command {
*/
public enum CmdType {
EXIT, LIST, FIND, DONE, DELETE, TODO, DEADLINE, REMIND, VIEWSCH,
EDIT, BACK, GOTO, QUIZ, HELP, TREE, CREATENOTE, EDITNOTE
EDIT, BACK, GOTO, QUIZ, HELP, TREE, CREATENOTE, EDITNOTE, LISTNOTE,
DELETENOTE
}

public abstract String execute(Logic logic, Ui ui, StorageManager storageManager)
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/javacake/commands/CreateNoteCommand.java
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,7 @@ private boolean validCommandWithNoSpecifiedFileName(String inputCommand) {
* @param inputFileName Specified file name by user.
* @return True if file name does not contains illegal characters.
*/
private boolean containsIllegals(String inputFileName) {
public static boolean containsIllegals(String inputFileName) {
for (char illegalChar : ILLEGAL_CHARACTERS) {
if (inputFileName.indexOf(illegalChar) >= 0) {
return true;
Expand Down
105 changes: 105 additions & 0 deletions src/main/java/javacake/commands/DeleteNoteCommand.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,105 @@
package javacake.commands;

import javacake.Logic;
import javacake.exceptions.DukeException;
import javacake.storage.StorageManager;
import javacake.ui.Ui;

import java.io.File;

public class DeleteNoteCommand extends Command {

private static String fileName;
private static String fullFilePath;

/**
* Constructor for DeleteNoteCommand.
* Command used to delete a specific existing notes.
* @param inputCommand Command input from the user.
* @throws DukeException If user does not input parameter.
*/
public DeleteNoteCommand(String inputCommand) throws DukeException {
try {
String[] parametersInCommand = inputCommand.split("\\s+");
String inputFileName = parametersInCommand[1];
processFile(inputFileName);
type = CmdType.DELETENOTE;
} catch (NullPointerException e) {
throw new DukeException(e.getMessage());
}
}

/**
* Executes the deleting process.
* Verifies if the file specified by the user has been deleted.
* @param logic TaskList containing current tasks
* @param ui the Ui responsible for outputting messages
* @param storageManager storage container
* @return Notification messages depending delete outcome.
* @throws DukeException If file does not exist.
*/
@Override
public String execute(Logic logic, Ui ui, StorageManager storageManager) throws DukeException {
try {
File tempFile = new File(fullFilePath);
if (tempFile.delete()) {
return fileName + ".txt has been deleted succesfully!";
} else {
return "Unable to delete " + fileName + ".txt";
}
} catch (Exception e) {
throw new DukeException(e.getMessage());
}
}

/**
* Method used for verification process.
* Checks for illegal characters and if file exists.
* Assigns inputFileName to fileName to prepare for deletion.
* @param inputFileName Name of file user wants to delete.
* @throws DukeException If illegal character or invalid file name detected.
*/
private void processFile(String inputFileName) throws DukeException {
if (containsIllegalCharacters(inputFileName)) {
throw new DukeException("Invalid file name: Illegal character in file name detected!");
} else if (fileDoesNotExist(inputFileName)) {
throw new DukeException("Invalid file name: No such file!");
} else {
fileName = inputFileName;
}
}

/**
* Method to generate full file path to the file to be deleted.
* Concatenates the desired file name with the default path to notes.
* @param inputFileName name of file user wants to delete.
* @return Full file path to the file to be deleted.
*/
private String processFilePath(String inputFileName) {
String filePath = "data/notes/";
fullFilePath = filePath + inputFileName + ".txt" + "/";
return fullFilePath;
}

/**
* Checks for illegal characters in file name given by users.
* Ensures no illegal access to other files in other directories.
* @param inputFileName name of file user wants to delete.
* @return true if inputFileName contains illegal characters.
*/
private boolean containsIllegalCharacters(String inputFileName) {
return CreateNoteCommand.containsIllegals(inputFileName);
}

/**
* Checks if file exists in the note storage.
* @param inputFileName name of file user wants to delete.
* @return True if file does not exist.
*/
private boolean fileDoesNotExist(String inputFileName) {
String fullFilePath = processFilePath(inputFileName);
File tempFile = new File(fullFilePath);
return (!tempFile.exists());
}

}
1 change: 1 addition & 0 deletions src/main/java/javacake/commands/DoneCommand.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import javacake.storage.Storage;

public class DoneCommand extends Command {

public DoneCommand(String str) {
type = CmdType.DONE;
input = str;
Expand Down
135 changes: 107 additions & 28 deletions src/main/java/javacake/commands/HelpCommand.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,99 +2,178 @@

import javacake.Logic;
import javacake.exceptions.DukeException;
import javacake.storage.Profile;
import javacake.storage.Storage;
import javacake.storage.StorageManager;
import javacake.ui.Ui;

public class HelpCommand extends Command {

private StringBuilder stringBuilder = new StringBuilder();

/**
* Constructor for HelpCommand.
* @param str Input command from user.
*/
public HelpCommand(String str) {
type = CmdType.HELP;
input = str;
}

/**
* Execute S.O.S.
* @param logic TaskList containing current tasks
* @param logic tracks current location in program
* @param ui the Ui responsible for outputting messages
* @param storageManager storage container
* @throws DukeException Error thrown when unable to close reader
* @return
* @return method for the related help requested.
*/
@Override
public String execute(Logic logic, Ui ui, StorageManager storageManager) throws DukeException {
if (input.length() == 4) {
return mainHelp();
} else if (input.equals("help back")) {
return backHelp();
} else if (input.equals("help exit")) {
return exitHelp();
} else if (input.equals("help goto")) {
return gotoHelp();
} else if (input.equals("help help")) {
return helpHelp();
} else if (input.equals("help list")) {
return listHelp();
} else if (input.equals("help score")) {
return scoreHelp();
} else {
throw new DukeException("No such command found. Try again.");
switch (input) {
case "help" : return mainHelp();
case "help back" : return exitHelp();
case "help goto": return gotoHelp();
case "help help": return helpHelp();
case "help list": return listHelp();
case "help score": return scoreHelp();
case "help overview": return overviewHelp();
case "help createnote": return createNoteHelp();
case "help editnote": return editNoteHelp();
case "help listnote": return listNoteHelp();
default: throw new DukeException("No such command found. Try again.");
}
}

/**
* Displays list of built-in commands.
* @return List of commands that users can execute.
*/
private String mainHelp() {
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("Here is the list of available commands:\n\n");
stringBuilder.append("- ").append("back").append("\n");
stringBuilder.append("- ").append("exit").append("\n");
stringBuilder.append("- ").append("goto 'X' [X = {1,2,..}]").append("\n");
stringBuilder.append("- ").append("help").append("\n");
stringBuilder.append("- ").append("list").append("\n");
stringBuilder.append("- ").append("overview").append("\n");
stringBuilder.append("- ").append("score").append("\n");
stringBuilder.append("\nType ~help 'COMMAND_NAME'~ to learn more in-depth!\n");
stringBuilder.append("- ").append("createnote").append("\n");
stringBuilder.append("- ").append("editnote").append("\n");
stringBuilder.append("- ").append("listnote").append("\n");
stringBuilder.append("\nType 'help COMMAND_NAME' to learn more in-depth!\n");
return stringBuilder.toString();
}

/**
* Provides a brief explanation on how back command work.
* @return String of instructions to guide user on back command.
*/
private String backHelp() {
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("- ").append("back").append("\n");
stringBuilder.append("Command to jump back to previous state after calling 'goto X'").append("\n");
return stringBuilder.toString();
}

/**
* Provides a brief explanation on how exit command work.
* @return String of instructions to guide user on exit command.
*/
private String exitHelp() {
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("- ").append("exit").append("\n");
stringBuilder.append("Command to exit from the program").append("\n");
return stringBuilder.toString();
}

/**
* Provides a brief explanation on how goto command work.
* @return String of instructions to guide user on goto command.
*/
private String gotoHelp() {
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("- ").append("'goto X' OR 'goto X.Y' [X and Y are positive integers]").append("\n");
stringBuilder.append("Command to jump to next index of contents displayed after calling 'list'").append("\n");
stringBuilder.append("Command to jump to next index of content!").append("\n");
stringBuilder.append("\n");
stringBuilder.append("- ").append("E.g. goto '1' will bring you to the content in index 1.").append("\n");
stringBuilder.append("- ").append("E.g. goto '1.2' will bring you to ");
stringBuilder.append("- ").append("index 1 followed by 2!").append("\n");
stringBuilder.append("- ").append("You get the point!").append("\n");
return stringBuilder.toString();
}

/**
* Provides a brief explanation on how help command work.
* @return String of instructions to guide user on help command.
*/
private String helpHelp() {
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("- ").append("help").append("\n");
stringBuilder.append("I am trying to help you!!!").append("\n");
return stringBuilder.toString();
}

/**
* Provides a brief explanation on how list command work.
* @return String of instructions to guide user on list command.
*/
private String listHelp() {
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("- ").append("list").append("\n");
stringBuilder.append("Command to display table-of-contents").append("\n");
return stringBuilder.toString();
}

/**
* Provides a brief explanation on how score command work.
* @return String of instructions to guide user on score command.
*/
private String scoreHelp() {
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("- ").append("score").append("\n");
stringBuilder.append("Command to get your current overall score for JavaCake!").append("\n");
return stringBuilder.toString();
}

/**
* Provides a brief explanation on how overview command work.
* @return String of instructions to guide user on overview command.
*/
private String overviewHelp() {
stringBuilder.append("- ").append("overview").append("\n");
stringBuilder.append("Command to view all the content installed in JavaCake!").append("\n");
return stringBuilder.toString();
}

/**
* Provides a brief explanation on how createnote command work.
* @return String of instructions to guide user on createnote command.
*/
private String createNoteHelp() {
stringBuilder.append("- ").append("createnote").append("\n");
stringBuilder.append("Command to create your own notes in JavaCake!").append("\n");
stringBuilder.append("Simply type in 'createnote' or 'createnote [desired name of note]'!").append("\n");
stringBuilder.append("And please keep your file name in alphanumeric to avoid illegal characters!")
.append("\n");
return stringBuilder.toString();
}

/**
* Provides a brief explanation on how editnote command work.
* @return String of instructions to guide user on editnote command.
*/
private String editNoteHelp() {
stringBuilder.append("- ").append("editnote").append("\n");
stringBuilder.append("Command to edit the pre-existing note created by you!").append("\n");
stringBuilder.append("View the notes available on the right window!").append("\n");
stringBuilder.append("Simply type in 'editnote [name of note]' to edit!").append("\n");
stringBuilder.append("Remember '.txt' must be omitted!").append("\n");
return stringBuilder.toString();
}

/**
* Provides a brief explanation on how listnote command work.
* @return String of instructions to guide user on listnote command.
*/
private String listNoteHelp() {
stringBuilder.append("- ").append("listnote").append("\n");
stringBuilder.append("Command to list all the pre-existing note created by you!").append("\n");
stringBuilder.append("Simply type in 'listnote' to refresh the list of notes!").append("\n");
return stringBuilder.toString();
}

}
Loading

0 comments on commit 639129b

Please sign in to comment.