/** Main actions invoked by key "Enter" */
 private void enterKeyEvent() {
   String input = txtCommandInput.getText();
   // If the input is empty, return to the normal task list.
   if (input == null || input.isEmpty() || input.trim().length() == 0) {
     logic.setIsSearchOp(false);
     taskTableView.setItems(mainApp.getTaskData());
   } else {
     // for command stack
     pastCommands.push(input);
     // Differentiate different command types.Handle help windows here.
     if (input.equalsIgnoreCase("exit")) {
       mainApp.exit();
       txtCommandInput.clear();
     } else if (input.equalsIgnoreCase("help")) {
       mainApp.indexHelp();
       txtCommandInput.clear();
     } else if (input.equalsIgnoreCase("sos")) {
       mainApp.sos();
       txtCommandInput.clear();
     } else if (input.equalsIgnoreCase("basic") || input.equalsIgnoreCase("`hb")) {
       mainApp.basic();
       txtCommandInput.clear();
     } else if (input.equalsIgnoreCase("advance") || input.equalsIgnoreCase("`ha")) {
       mainApp.advance();
       txtCommandInput.clear();
     } else if (input.equalsIgnoreCase("shortcut")
         || input.equalsIgnoreCase("shortcuts")
         || input.equalsIgnoreCase("shortform")
         || input.equalsIgnoreCase("shortforms")
         || input.equalsIgnoreCase("`sc")) {
       mainApp.shortForm();
       txtCommandInput.clear();
     } else if (input.equalsIgnoreCase("credit") || input.equalsIgnoreCase("`cd")) {
       mainApp.credit();
       txtCommandInput.clear();
     } else {
       // if the command does not belong to any commands above, pass it to the parser and logic
       String inputCommand = txtCommandInput.getText().trim();
       logger.log(Level.INFO, "Here comes a command.");
       execute(inputCommand);
     }
   }
 }
 /**
  * This is the method to pass the package from parser to the logic for execution.
  *
  * @param input User's input string
  */
 private void execute(String input) {
   CommandPackage cmdPack = cmdParser.getCommandPackage(input);
   logger.log(Level.INFO, "CommandParser parses the command.");
   if (cmdPack == null) {
     System.out.println("input: " + input);
     feedback.setText(invalidMsg);
   } else {
     assert (cmdPack != null);
     try {
       System.out.println(input);
       String result = logic.executeCommand(cmdPack);
       feedback.setText(result);
       txtCommandInput.clear();
       taskTableView.setItems(mainApp.getTaskData());
       logger.log(Level.INFO, "Update the table view.");
     } catch (InvalidCommandException e) {
       feedback.setText(e.getMessage());
     }
   }
 }
 /**
  * Is called by the main application to give a reference back to itself.
  *
  * @param mainApp
  */
 public void setMainApp(MainApp mainApp) {
   this.mainApp = mainApp;
   logger.log(Level.INFO, "Set MainApp.");
   // Add observable list data to the table
   taskTableView.setItems(mainApp.getTaskData());
 }