diff --git a/.github/workflows/gradle.yml b/.github/workflows/gradle.yml
index fd8c44d086..bfb95ed668 100644
--- a/.github/workflows/gradle.yml
+++ b/.github/workflows/gradle.yml
@@ -1,50 +1,50 @@
-name: Java CI
-
-on: [push, pull_request]
-
-jobs:
- build:
- strategy:
- matrix:
- platform: [ubuntu-latest, macos-latest, windows-latest]
- runs-on: ${{ matrix.platform }}
-
- steps:
- - name: Set up repository
- uses: actions/checkout@master
-
- - name: Set up repository
- uses: actions/checkout@master
- with:
- ref: master
-
- - name: Merge to master
- run: git checkout --progress --force ${{ github.sha }}
-
- - name: Validate Gradle Wrapper
- uses: gradle/wrapper-validation-action@v1
-
- - name: Setup JDK 11
- uses: actions/setup-java@v1
- with:
- java-version: '11'
- java-package: jdk+fx
-
- - name: Build and check with Gradle
- run: ./gradlew check
-
- - name: Perform IO redirection test (*NIX)
- if: runner.os == 'Linux'
- working-directory: ${{ github.workspace }}/text-ui-test
- run: ./runtest.sh
-
- - name: Perform IO redirection test (MacOS)
- if: always() && runner.os == 'macOS'
- working-directory: ${{ github.workspace }}/text-ui-test
- run: ./runtest.sh
-
- - name: Perform IO redirection test (Windows)
- if: always() && runner.os == 'Windows'
- working-directory: ${{ github.workspace }}/text-ui-test
- shell: cmd
+name: Java CI
+
+on: [push, pull_request]
+
+jobs:
+ build:
+ strategy:
+ matrix:
+ platform: [ubuntu-latest, macos-latest, windows-latest]
+ runs-on: ${{ matrix.platform }}
+
+ steps:
+ - name: Set up repository
+ uses: actions/checkout@master
+
+ - name: Set up repository
+ uses: actions/checkout@master
+ with:
+ ref: master
+
+ - name: Merge to master
+ run: git checkout --progress --force ${{ github.sha }}
+
+ - name: Validate Gradle Wrapper
+ uses: gradle/wrapper-validation-action@v1
+
+ - name: Setup JDK 11
+ uses: actions/setup-java@v1
+ with:
+ java-version: '11'
+ java-package: jdk+fx
+
+ - name: Build and check with Gradle
+ run: ./gradlew check
+
+ - name: Perform IO redirection test (*NIX)
+ if: runner.os == 'Linux'
+ working-directory: ${{ github.workspace }}/text-ui-test
+ run: ./runtest.sh
+
+ - name: Perform IO redirection test (MacOS)
+ if: always() && runner.os == 'macOS'
+ working-directory: ${{ github.workspace }}/text-ui-test
+ run: ./runtest.sh
+
+ - name: Perform IO redirection test (Windows)
+ if: always() && runner.os == 'Windows'
+ working-directory: ${{ github.workspace }}/text-ui-test
+ shell: cmd
run: runtest.bat
\ No newline at end of file
diff --git a/.gitignore b/.gitignore
index f69985ef1f..3a15cdf59e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,17 +1,17 @@
-# IDEA files
-/.idea/
-/out/
-/*.iml
-
-# Gradle build files
-/.gradle/
-/build/
-src/main/resources/docs/
-
-# MacOS custom attributes files created by Finder
-.DS_Store
-*.iml
-bin/
-
-/text-ui-test/ACTUAL.txt
-text-ui-test/EXPECTED-UNIX.TXT
+# IDEA files
+/.idea/
+/out/
+/*.iml
+
+# Gradle build files
+/.gradle/
+/build/
+src/main/resources/docs/
+
+# MacOS custom attributes files created by Finder
+.DS_Store
+*.iml
+bin/
+
+/text-ui-test/ACTUAL.txt
+text-ui-test/EXPECTED-UNIX.TXT
diff --git a/CONTRIBUTORS.md b/CONTRIBUTORS.md
index 8e359a0145..419450f2f6 100644
--- a/CONTRIBUTORS.md
+++ b/CONTRIBUTORS.md
@@ -1,9 +1,9 @@
-# Contributors
-
-Display | Name | Github Profile | Homepage
----|:---:|:---:|:---:
- | Jeffry Lum | [Github](https://github.com/j-lum/) | [Homepage](https://se.kasugano.moe)
- | Damith C. Rajapakse | [Github](https://github.com/damithc/) | [Homepage](https://www.comp.nus.edu.sg/~damithch/)
-# I would like to join this list. How can I help the project
-
-For more information, please refer to our [contributor's guide](https://oss-generic.github.io/process/).
+# Contributors
+
+Display | Name | Github Profile | Homepage
+---|:---:|:---:|:---:
+ | Jeffry Lum | [Github](https://github.com/j-lum/) | [Homepage](https://se.kasugano.moe)
+ | Damith C. Rajapakse | [Github](https://github.com/damithc/) | [Homepage](https://www.comp.nus.edu.sg/~damithch/)
+# I would like to join this list. How can I help the project
+
+For more information, please refer to our [contributor's guide](https://oss-generic.github.io/process/).
diff --git a/Canteen Dataset.xls b/Canteen Dataset.xls
new file mode 100644
index 0000000000..39f1508256
Binary files /dev/null and b/Canteen Dataset.xls differ
diff --git a/META-INF/MANIFEST.MF b/META-INF/MANIFEST.MF
new file mode 100644
index 0000000000..a118b371fa
--- /dev/null
+++ b/META-INF/MANIFEST.MF
@@ -0,0 +1,3 @@
+Manifest-Version: 1.0
+Main-Class: Logic
+
diff --git a/Order Record.xls b/Order Record.xls
new file mode 100644
index 0000000000..903ee9f059
Binary files /dev/null and b/Order Record.xls differ
diff --git a/README.md b/README.md
index 698b938529..de413ae14b 100644
--- a/README.md
+++ b/README.md
@@ -1,64 +1,65 @@
-# Duke project template
-
-This is a project template for a greenfield Java project. It's named after the Java mascot _Duke_. Given below are instructions on how to use it.
-
-## Setting up in Intellij
-
-Prerequisites: JDK 11 (use the exact version), update Intellij to the most recent version.
-
-1. **Configure Intellij for JDK 11**, as described [here](https://se-education.org/guides/tutorials/intellijJdk.html).
-1. **Import the project _as a Gradle project_**, as described [here](https://se-education.org/guides/tutorials/intellijImportGradleProject.html).
-1. **Verify the set up**: After the importing is complete, locate the `src/main/java/seedu/duke/Duke.java` file, right-click it, and choose `Run Duke.main()`. If the setup is correct, you should see something like the below:
- ```
- > Task :compileJava
- > Task :processResources NO-SOURCE
- > Task :classes
-
- > Task :Duke.main()
- Hello from
- ____ _
- | _ \ _ _| | _____
- | | | | | | | |/ / _ \
- | |_| | |_| | < __/
- |____/ \__,_|_|\_\___|
-
- What is your name?
- ```
- Type some word and press enter to let the execution proceed to the end.
-
-## Build automation using Gradle
-
-* This project uses Gradle for build automation and dependency management. It includes a basic build script as well (i.e. the `build.gradle` file).
-* If you are new to Gradle, refer to the [Gradle Tutorial at se-education.org/guides](https://se-education.org/guides/tutorials/gradle.html).
-
-## Testing
-
-### I/O redirection tests
-
-* To run _I/O redirection_ tests (aka _Text UI tests_), navigate to the `text-ui-test` and run the `runtest(.bat/.sh)` script.
-
-### JUnit tests
-
-* A skeleton JUnit test (`src/test/java/seedu/duke/DukeTest.java`) is provided with this project template.
-* If you are new to JUnit, refer to the [JUnit Tutorial at se-education.org/guides](https://se-education.org/guides/tutorials/junit.html).
-
-## Checkstyle
-
-* A sample CheckStyle rule configuration is provided in this project.
-* If you are new to Checkstyle, refer to the [Checkstyle Tutorial at se-education.org/guides](https://se-education.org/guides/tutorials/checkstyle.html).
-
-## CI using GitHub Actions
-
-The project uses [GitHub actions](https://github.com/features/actions) for CI. When you push a commit to this repo or PR against it, GitHub actions will run automatically to build and verify the code as updated by the commit/PR.
-
-## Documentation
-
-`/docs` folder contains a skeleton version of the project documentation.
-
-Steps for publishing documentation to the public:
-1. If you are using this project template for an individual project, go your fork on GitHub.
- If you are using this project template for a team project, go to the team fork on GitHub.
-1. Click on the `settings` tab.
-1. Scroll down to the `GitHub Pages` section.
-1. Set the `source` as `master branch /docs folder`.
-1. Optionally, use the `choose a theme` button to choose a theme for your documentation.
+# Canteenhelper
+
+During peak hours, people may not be able to know the dining situation and the density of the canteen they want to go to. To solve this problem, we want to create a program to store and display basic information of stalls in each canteen (e.g. Open hours, current menu, change order etc) to all their potential users. CanteenHelper is a command line (CLI) application that helps students, staff and even tourists order food in canteens efficiently. CanteenHelper will allow users to choose their favorite dishes from different stalls in different canteens based on the date and time provided by the users. They also can check the comments of the dishes and operating hours of the stalls and canteens.
+
+## Setting up in Intellij
+
+Prerequisites: JDK 11 (use the exact version), update Intellij to the most recent version.
+
+1. **Configure Intellij for JDK 11**, as described [here](https://se-education.org/guides/tutorials/intellijJdk.html).
+1. **Import the project _as a Gradle project_**, as described [here](https://se-education.org/guides/tutorials/intellijImportGradleProject.html).
+1. **Verify the set up**: After the importing is complete, locate the `src/main/java/Logic.java` file, right-click it, and choose `Run Logic.main()`. If the setup is correct, you should see something like the below:
+ ```
+ > Task :compileJava
+ > Task :processResources NO-SOURCE
+ > Task :classes
+
+ > Task :Logic.main()
+ ____________________________________________________________
+
+ Hello! I'm Canteenhelper
+
+ What can I do for you?
+
+____________________________________________________________
+
+Please enter your name/day of week/time arrive:
+
+Type some word and press enter to let the execution proceed to the end.
+
+## Build automation using Gradle
+
+* This project uses Gradle for build automation and dependency management. It includes a basic build script as well (i.e. the `build.gradle` file).
+* If you are new to Gradle, refer to the [Gradle Tutorial at se-education.org/guides](https://se-education.org/guides/tutorials/gradle.html).
+
+## Testing
+
+### I/O redirection tests
+
+* To run _I/O redirection_ tests (aka _Text UI tests_), navigate to the `text-ui-test` and run the `runtest(.bat/.sh)` script.
+
+### JUnit tests
+
+* A skeleton JUnit test (`src/test/java/seedu/duke/DukeTest.java`) is provided with this project template.
+* If you are new to JUnit, refer to the [JUnit Tutorial at se-education.org/guides](https://se-education.org/guides/tutorials/junit.html).
+
+## Checkstyle
+
+* A sample CheckStyle rule configuration is provided in this project.
+* If you are new to Checkstyle, refer to the [Checkstyle Tutorial at se-education.org/guides](https://se-education.org/guides/tutorials/checkstyle.html).
+
+## CI using GitHub Actions
+
+The project uses [GitHub actions](https://github.com/features/actions) for CI. When you push a commit to this repo or PR against it, GitHub actions will run automatically to build and verify the code as updated by the commit/PR.
+
+## Documentation
+
+`/docs` folder contains a skeleton version of the project documentation.
+
+Steps for publishing documentation to the public:
+1. If you are using this project template for an individual project, go your fork on GitHub.
+ If you are using this project template for a team project, go to the team fork on GitHub.
+1. Click on the `settings` tab.
+1. Scroll down to the `GitHub Pages` section.
+1. Set the `source` as `master branch /docs folder`.
+1. Optionally, use the `choose a theme` button to choose a theme for your documentation.
diff --git a/[CS2113-T16-2][Canteen].jar b/[CS2113-T16-2][Canteen].jar
new file mode 100644
index 0000000000..5753d31358
Binary files /dev/null and b/[CS2113-T16-2][Canteen].jar differ
diff --git a/build.gradle b/build.gradle
index b0c5528fb5..74aa13f5e8 100644
--- a/build.gradle
+++ b/build.gradle
@@ -1,46 +1,49 @@
-plugins {
- id 'java'
- id 'application'
- id 'checkstyle'
- id 'com.github.johnrengelman.shadow' version '5.1.0'
-}
-
-repositories {
- mavenCentral()
-}
-
-dependencies {
- testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-api', version: '5.5.0'
- testRuntimeOnly group: 'org.junit.jupiter', name: 'junit-jupiter-engine', version: '5.5.0'
-}
-
-test {
- useJUnitPlatform()
-
- testLogging {
- events "passed", "skipped", "failed"
-
- showExceptions true
- exceptionFormat "full"
- showCauses true
- showStackTraces true
- showStandardStreams = false
- }
-}
-
-application {
- mainClassName = "seedu.duke.Duke"
-}
-
-shadowJar {
- archiveBaseName = "duke"
- archiveClassifier = null
-}
-
-checkstyle {
- toolVersion = '8.23'
-}
-
-run{
- standardInput = System.in
-}
+plugins {
+ id 'java'
+ id 'application'
+ id 'checkstyle'
+ id 'com.github.johnrengelman.shadow' version '5.1.0'
+}
+
+repositories {
+ mavenCentral()
+}
+
+dependencies {
+ compile group: 'org.apache.poi', name: 'poi', version: '3.17'
+ compile group: 'org.apache.poi', name: 'poi-ooxml', version: '3.17'
+ testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-api', version: '5.5.0'
+ testRuntimeOnly group: 'org.junit.jupiter', name: 'junit-jupiter-engine', version: '5.5.0'
+
+}
+
+test {
+ useJUnitPlatform()
+
+ testLogging {
+ events "passed", "skipped", "failed"
+
+ showExceptions true
+ exceptionFormat "full"
+ showCauses true
+ showStackTraces true
+ showStandardStreams = false
+ }
+}
+
+application {
+ mainClassName = "seedu.duke.Duke"
+}
+
+shadowJar {
+ archiveBaseName = "duke"
+ archiveClassifier = null
+}
+
+checkstyle {
+ toolVersion = '8.23'
+}
+
+run{
+ standardInput = System.in
+}
diff --git a/config/checkstyle/checkstyle.xml b/config/checkstyle/checkstyle.xml
index 7e1ce222a9..3343417195 100644
--- a/config/checkstyle/checkstyle.xml
+++ b/config/checkstyle/checkstyle.xml
@@ -1,252 +1,252 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/docs/AboutUs.md b/docs/AboutUs.md
index 0f072953ea..ed64a1c217 100644
--- a/docs/AboutUs.md
+++ b/docs/AboutUs.md
@@ -1,9 +1,8 @@
-# About us
-
-Display | Name | Github Profile | Portfolio
---------|:----:|:--------------:|:---------:
- | John Doe | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md)
- | Don Joe | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md)
- | Ron John | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md)
- | John Roe | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md)
- | Don Roe | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md)
+# About us
+
+Display | Name | Github Profile | Portfolio
+--------|:----:|:--------------:|:---------:
+ | Wang Ying | [Github](https://github.com/WYing333) | [Portfolio](team/wying333.md)
+ | Zhou Zeyu | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md)
+ | Feng Qingyu | [Github](https://github.com/Louis-Feng/) | [Portfolio](https://github.com/Louis-Feng/)
+
diff --git a/docs/DG Draft.pdf b/docs/DG Draft.pdf
new file mode 100644
index 0000000000..9992514c27
Binary files /dev/null and b/docs/DG Draft.pdf differ
diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md
index 0ec3db103d..8829810841 100644
--- a/docs/DeveloperGuide.md
+++ b/docs/DeveloperGuide.md
@@ -1,34 +1,550 @@
-# Developer Guide
-
-## Design & implementation
-
-{Describe the design and implementation of the product. Use UML diagrams and short code snippets where applicable.}
-
-
-## Product scope
-### Target user profile
-
-{Describe the target user profile}
-
-### Value proposition
-
-{Describe the value proposition: what problem does it solve?}
-
-## User Stories
-
-|Version| As a ... | I want to ... | So that I can ...|
-|--------|----------|---------------|------------------|
-|v1.0|new user|see usage instructions|refer to them when I forget how to use the application|
-|v2.0|user|find a to-do item by name|locate a to-do without having to go through the entire list|
-
-## Non-Functional Requirements
-
-{Give non-functional requirements}
-
-## Glossary
-
-* *glossary item* - Definition
-
-## Instructions for manual testing
-
-{Give instructions on how to do a manual product testing e.g., how to load sample data to be used for testing}
+# Developer Guide
+
+## Table of content
+### [1. Introduction](#1-Introduction-1)
+#### [1.1 Software Overview](#11-Software-Overview-1)
+#### [1.2 Purpose](#12-Purpose-1)
+#### [1.3 Scope](#13-Scope-1)
+### [2. Setting up and getting started](#2-Setting-up-and-getting-started-1)
+### [3. Design](#3-Design-1)
+#### [3.1 Architecture](#31-Architecture-1)
+#### [3.2 Classes](#32-Classes-1)
+##### [3.2.1 Logic class](#321-Logic-class-1)
+##### [3.2.2 UI class](#322-UI-class-1)
+##### [3.2.3 Parser class](#323-Parser-class-1)
+##### [3.2.4 Customer class](#324-Customer-class-1)
+##### [3.2.5 Order class](#325-Order-class-1)
+##### [3.2.6 Canteen class](#326-Canteen-class-1)
+##### [3.2.7 Stall class](#327-Stall-class-1)
+##### [3.2.8 Dish class](#328-Dish-class-1)
+##### [3.2.9 Exception class](#329-Exception-class-1)
+### [4. Implementation](#4-Implementation-1)
+### [5. Testing](#5-Testing-1)
+### [6. Appendix: Requirements](#6-Appendix-Requirements-1)
+#### [6.1 Product scope](#61-Product-scope-1)
+#### [6.1.1 Target user profile](#611-Target-user-profile-1)
+#### [6.1.2 Value proposition](#612-Value-proposition-1)
+#### [6.2 User stories](#62-User-stories-1)
+#### [6.3 Non-Functional Requirements](#63-Non-Functional-Requirements-1)
+#### [6.4 Glossary](#64-Gloossary-1)
+#### [6.5 Instructions for manual testing](#65-Instructions-for-manual-testing-1)
+
+
+## 1. Introduction
+
+### 1.1 Software Overview
+During peak hours, people may not be able to know the dining situation and the density of the canteen they want to go to. To solve this problem, we want to create a program to store and display basic information of stalls in each canteen (e.g. Open hours, current menu, change order etc) to all their potential users. CanteenHelper is a command line (CLI) application that helps students, staff and even tourists order food in canteens efficiently. CanteenHelper will allow users to choose their favorite dishes from different stalls in different canteens based on the date and time provided by the users. They also can check the comments of the dishes and operating hours of the stalls and canteens.
+
+
+### 1.2 Purpose
+This document describes the architecture and software design of CanteenHelper. The goal of this document is to cover the high-level system architecture and design.
+The document is divided into three main parts: design, implementation and documantation. The design includes the architecture diagram and the introduction of each class. The implementation consists of some details on how certain features are implemented and how the users go through our app. The documentation details the logging, testing and configuration of CanteenHelper. It also includes the requirement and the instructions for manual testing in the appendices.
+
+### 1.3 Scope
+The intended audience of this document is the developers, designers, and software testers of CanteenHelper.
+
+
+## 2. Setting up and getting started
+
+Before you start: Please ensure you have Java 11 installed in you computer.
+1) Fork this repo from this link: https://github.com/AY2021S1-CS2113-T16-2/tp
+2) Clone the fork to your own computer. You are highly recommended to use Git tool (like Sourcetree) to track your work.
+3) Use your own IDEA to program. You are highly recommended to use IntelliJ IDEA. Please check whether you have correct JDK version (JDK 11) in your computer and congiure the JDK.
+ If you are using IntelliJ IDEA:
+ -Open IntelliJ
+ -Set up JDK 11 for Gradle
+ Click Configure -> Project Defaults -> Project Structure
+ Click New... and set it to the directory of the JDK 11 installed
+4) Import the project as a Gradle project.
+ If you are using IntelliJ IDEA:
+ -Click Import Project (or Open or Import in newer version of Intellij).
+ -Locate the build.gradle file (not the root folder as you would do in a normal importing) and select it. Click OK.
+ -Click OK to accept the default settings but do ensure that the selected version of Gradle JVM matches the JDK being used for the project.
+ -Wait for importing process to complete
+
+5) Do the testing. Please follow the testing guide.
+
+## 3. Design
+
+### 3.1 Architecture
+
+
+Figure 1.Architecture Diagram
+
+The Architecture Diagram given above explains the high-level design of our App. Below are the main components of our product.
+
+Main(Logic): The main logic flow of our whole App.
+
+Initializer: Initialize the whole app to start waiting for the input from the users.
+
+UI: The user interface of our App.
+
+Parser: Change the user input to something meaningful to the app.
+
+Exception: Throw different kinds of exception that user may make.
+
+The following section is a more detailed description of these four components.
+
+### 3.2 Classes
+The CanteenHelper consists of six classes:
+* `Logic`
+* `UI`
+* `Parser`
+* `Customer`
+* `Order`
+* `Canteen`
+* `Stall`
+* `Dish`
+* `Exception`
+
+#### 3.2.1 Logic class
+
+Figure 2.Main Logic Diagram
+
+Main logic of the whole app.
+
+Main method inside: main(String[] args)
+
+#### 3.2.2 UI class
+Mainly managed in MainPage, which contains several parts: showCommand, displayInfo, getInput. All of these should inherit from an abstract class UserInterface class. And this class can
+1. Show all possible executable commands in numeric order
+ E.g. 1: Get open canteens
+ 2: Get open stalls
+2. Get user input (number) and use the Logic component to execute the corresponding user’s command
+3. Display the results of user and program interactions
+
+Main method inside:
+
+order(List canteens, Customer customer,Scanner sc, ArrayList Order);
+
+getCustomer(Scanner sc);
+
+getOrder(Customer customer, Canteen canteenChoosed, Stall stallChoosed, List orderedDishes,Scanner sc, ArrayList Order);
+
+getDishes(Stall stallChoosed, Scanner sc);
+
+getYN(Scanner sc);
+
+getNumOfDishes(int count,Scanner sc);
+
+getStall(Customer customer, Canteen canteenChoosed, Scanner sc);
+
+getCanteen(List canteens, Customer customer, Scanner sc);
+
+greet();
+
+bye();
+
+help();
+
+checkComment(List dCs);
+
+checkCanteenOperatingTime(List canteens,Customer customer,Scanner sc);
+
+checkStallOperatingTime(List canteens,Customer customer,Scanner sc);
+
+changeOrder(Customer customer,String input,ArrayList Order);
+
+printOrder(String input,ArrayList Order);
+
+deleteOrder(String input,ArrayList Order);
+
+findDishinOrder(String input,ArrayList Order);
+
+
+#### 3.2.3 Parser class
+Deals with making sense of the user's command and pass the command to certain functions.
+
+Main method inside:
+parseCustomer(String inputMessage)
+
+#### 3.2.4 Customer class
+Customer contains the list of open canteens and initializes Order objects.
+
+Main method inside:
+checkOpenStalls(Canteen canteen);
+
+checkOpenCanteens(List ListCanteen);
+
+checkDish(List ListDish);
+
+checkWaitingTime(Stall stall);
+
+
+#### 3.2.5 Order class
+Order contains the list of dishes that are ordered.
+
+#### 3.2.6 Canteen class
+Canteen contains the list of stalls.
+
+Main method inside:
+
+isOpen (int dayOfWeek, int time);
+
+#### 3.2.7 Stall class
+Stall contains the list of dishes.
+
+Main method inside:
+
+isOpen (int dayOfWeek, int time);
+
+printDishes()
+
+#### 3.2.8 Dish class
+Dishes that can be ordered by the user.
+
+#### 3.2.9 Exception class
+Exceptions that can catch user unexpected input.
+
+### 3.3 Overall Sequence Diagram
+
+
+
+Figure 3.Overall Sequence diagram
+
+
+## 4. Implementation
+#### Feature: order
+The user types command “order” to make an order from a stall in a canteen. The order method will be activated and print open stalls through checkOpenCanteens method in Customer class in this manner:
+
+
+
+User just type the corresponding index before the canteen to select canteen. Then the open stalls in this canteen will be printed through checkOpenStalls method in Customer class in this manner:
+
+
+
+User just type the corresponding index before the stall to select stall. Then the available dishes and price in this stall will be printed through getDish() method in Stall class in this manner:
+
+
+
+User just type number of dishes he wants to order and chooses dishes in the same way as they select canteen and stall.
+
+After that, user will be asked whether he wants to see the comment of the dish.
+
+Finally, after choosing dine in, take away or delivery, an order object will be created and added into the order list.
+
+#### Feature: delete order
+The user enters the command: delete [number] to delete an order in the order list. The main will enable the deleteOrder () method. The Parser will make sense of the command and delete the corresponding order from the order list.
+e.g. delete 1 means delete the first order in the order list.
+
+
+
+Figure 4.Sequence diagram for deleteOrder()
+
+#### Feature: find order
+The user enters the command: find [dish name] to find the order contains this dish in the order list. The main will enable the findDishinOrder() method. The Parser will make sense of the command and iterate the order list and dish list to print the order containing this dish.
+e.g. find chicken rice means find all orders containing chicken rice in the order list.
+
+
+
+Figure 5.Sequence diagram for findDishinOrder()
+
+#### Feature: list order
+The user enters the command: list to print all the orders in the order list . The main will enable the printOrder() method. The printOrder() method will iterate the whole order list and print all the orders
+
+
+
+Figure 6.Sequence diagram for printOrder()
+
+#### Feature: change order (change dine in, take away or delivery)
+The user enters the command: change/number/type to change the order type of one order in the order list. The main will enable the changeOrder() method. The Parser will make sense of the command and change the corresponding order’s order type.
+e.g. change/1/Dine in: change order 1 to dine in
+
+
+
+Figure 7.Sequence diagram for changeOrder()
+
+#### Feature: check Canteen Operating Time
+The user enters the command: checkcanteen to check the operating time of an open canteen. The main will enable the checkCanteenOperatingTime() method. It prints open canteens through checkOpenCanteens method in Customer class in this manner:
+
+
+
+User can type the number before the canteen name to check its operating time.
+
+
+
+Figure 8.Sequence diagram for checkCanteenOperatingTime()
+
+#### Feature: check Stall Operating Time
+The user enters the command: checkstall to check the operating time of an open stall. The main will enable the checkStallOperatingTime() method. It prints open canteens through checkOpenCanteens method in Customer class in this manner:
+
+
+
+User can type the number before the canteen name to display the stalls inside the canteen in this manner.
+
+User can type the number before the stall name to check its operating time.
+
+
+
+Figure 9.Sequence diagram for checkStallOperatingTime()
+
+#### Feature: help
+The user enters the command: help to view all commands that are available. The main will enable the help() method. It prints all available commands.
+
+
+## 5. Testing
+### To perform manual testing, please follow the instructions bellow
+
+
+### 5.1 Before the order: `[name]/[day of week]/[time]`
+
+Format: `[name]/[day of week]/[time]`
+
+Example of usage:
+'wy/2/1800'
+‘fqy/1/1200
+
+* day of week should between 1-7 (includes)
+* time should follow this format: 900 or 1600, represent 09:00 and 16:00 respectively.
+
+Result is like this:
+
+
+
+### 5.2 Begin the order: `order`
+begin the order of a customer
+
+#### 5.2.1 Firstly
+
+Format: `order`
+
+Example of usage:
+'order'
+
+Result is like this:
+
+
+
+#### 5.2.2 The order method will be activated and print open stalls, user just type the corresponding index before the canteen to select canteen.
+
+Format: `[number]`
+
+Example of usage:
+'2'
+
+Result is like this:
+
+
+
+#### 5.2.3 Then the open stalls in this canteen will be printed, user just type the corresponding index before the stall to select stall.
+
+Format: `[number]`
+
+Example of usage:
+'1'
+
+Result is like this:
+
+
+
+#### 5.2.4 Then the available dishes and price in this stall will be printed, user just type number of dishes he wants to order.
+
+Format: `[number]`
+
+Example of usage:
+'2'
+
+Result is like this:
+
+
+
+#### 5.2.5 User chooses dishes in the same way as they select canteen and stall.
+
+Format: `[number]`
+
+Example of usage:
+'2'
+
+Result is like this:
+
+
+
+#### 5.2.6 User will be asked whether he wants to see the comment of the dish, just type y/n.
+
+Format: `y/n`
+
+Example of usage:
+'y', 'n'
+
+Result is like this:
+
+
+
+#### 5.2.7 User choose the order type by typing the corresponding index before the type.
+
+Format: `[number]`
+
+Example of usage:
+'2'
+
+Result is like this:
+
+
+
+### 5.3 delete the specific order: `delete [number]`
+delete the order based on the number from user
+user needs to input the number of order
+
+Format: `delete [number]`
+
+Example of usage:
+'delete 1'
+
+Result is like this:
+
+
+
+### 5.4 find the specific order: `find [dish name]`
+find the specific dish based on the user input dish name
+from the order list made by the user
+
+Format: `find [dish name]`
+
+Example of usage:
+'find Hawaiian'
+
+Result is like this:
+
+
+
+### 5.5 list all the orders: `list`
+check all the orders made by this user
+
+Format: `list`
+
+Example of usage:
+'list'
+
+Result is like this:
+
+
+
+### 5.6 change the order: `change/[number]/[type]`
+Change the order type to the type user inputed
+
+Format: `change/[number]/[type]`
+
+type should choose from:
+1. dine in
+2. delivery
+3. take away
+
+Example of usage:
+'change/2/dine in'
+'change/1/delivery
+
+* order type is case sensitive
+
+Result is like this:
+
+
+
+### 5.7 check Canteen Operating Time: `checkcanteen`
+check the operating hours of a canteen
+
+#### 5.7.1 Firstly
+
+Format: `checkcanteen`
+
+Example of usage:
+'checkcanteen'
+
+#### 5.7.2 User enters the number before canteen to check that specific canteen
+
+Format: `[number]`
+
+Example of usage:
+'4'
+
+Result is like this:
+
+
+
+### 5.8 check Stall Operating Time: `checkstall`
+check the operating hours of a stall
+
+#### 5.8.1 Firstly
+
+Format: `checkstall`
+
+Example of usage:
+'checkstall'
+
+#### 5.8.2 User enters the number before canteen to check that specific canteen
+
+Format: `[number]`
+
+Example of usage:
+'3'
+
+#### 5.8.3 User enters the number before stall to check that specific stall
+
+Format: `[number]`
+
+Example of usage:
+'2'
+
+Result is like this:
+
+
+
+### 5.9 view all available commands: `help`
+print all the commands with required format that the user can input
+
+Format: `help`
+
+Example of usage:
+'help'
+
+Result is like this:
+
+
+
+### 5.10 quit the system: `bye`
+quit the system
+
+Format: `bye`
+
+Example of usage:
+'bye'
+
+Result is like this:
+
+
+
+
+## 6. Appendix: Requirements
+
+### 6.1 Product scope
+
+#### 6.1.1 Target user profile
+All the NTU undergraduate, graduate and faculty who need to dine at NTU canteens.
+
+#### 6.1.2 Value proposition
+CanteenHelper aims to assist the target audience with:
+ordering the meals in one application efficiently
+
+### 6.2 User stories
+
+|Version| As a/an ... | I want to ... | So that I can ...|
+|--------|----------|---------------|------------------|
+|v1.0|user|view which canteens are open now|decide which canteen to go to now|
+|v1.0|user|view which stalls are available currently|make my order|
+|v1.0|hungry person who wants to dine now|check the menus of some stalls at the current time|I can order my preferred meal in the menus|
+|v1.0|user who is deciding what to have for the next meal|view the menus of the stalls in advance|I can know what to eat for that meal in the future|
+|v2.0|user|check the operating time of canteens|I can go to the canteen which is open|
+|v2.0|user who wants to try a new dish|check the comments made by others|I can have a brief idea about it|
+|v2.0|user|change the order type of my order|fit my time schedule more|
+
+
+### 6.3 Non-Functional Requirements
+1. The app should be able to work on any mainstream OS with Java 11 or above installed.
+2. Commands entered should follow the user guide.
+
+### 6.4 Glossary
+* *Sequence Diagram* - A sequence diagram shows object interactions arranged in time sequence.
+* *mainstream O* - Linux, Windows, Unix.
+
+### 6.5 Instructions for manual testing
+Try different inputs with variations of the format, to check whether the exceptions are being correctly thrown.
+
diff --git a/docs/README.md b/docs/README.md
index bbcc99c1e7..6b56b66f81 100644
--- a/docs/README.md
+++ b/docs/README.md
@@ -1,8 +1,8 @@
-# Duke
-
-{Give product intro here}
-
-Useful links:
-* [User Guide](UserGuide.md)
-* [Developer Guide](DeveloperGuide.md)
-* [About Us](AboutUs.md)
+# CanteenHelper
+
+During peak hours, people may not be able to know the dining situation and the density of the canteen they want to go to. To solve this problem, we want to create a program to store and display basic information of stalls in each canteen (e.g. Open hours, current menu, change order etc) to all their potential users. CanteenHelper is a command line (CLI) application that helps students, staff and even tourists order food in canteens efficiently. CanteenHelper will allow users to choose their favorite dishes from different stalls in different canteens based on the date and time provided by the users. They also can check the comments of the dishes and operating hours of the stalls and canteens.
+
+Useful links:
+* [User Guide](UserGuide.md)
+* [Developer Guide](DeveloperGuide.md)
+* [About Us](AboutUs.md)
diff --git a/docs/UserGuide.md b/docs/UserGuide.md
index abd9fbe891..957c6e1121 100644
--- a/docs/UserGuide.md
+++ b/docs/UserGuide.md
@@ -1,42 +1,292 @@
-# User Guide
-
-## Introduction
-
-{Give a product intro}
-
-## Quick Start
-
-{Give steps to get started quickly}
-
-1. Ensure that you have Java 11 or above installed.
-1. Down the latest version of `Duke` from [here](http://link.to/duke).
-
-## Features
-
-{Give detailed description of each feature}
-
-### Adding a todo: `todo`
-Adds a new item to the list of todo items.
-
-Format: `todo n/TODO_NAME d/DEADLINE`
-
-* The `DEADLINE` can be in a natural language format.
-* The `TODO_NAME` cannot contain punctuation.
-
-Example of usage:
-
-`todo n/Write the rest of the User Guide d/next week`
-
-`todo n/Refactor the User Guide to remove passive voice d/13/04/2020`
-
-## FAQ
-
-**Q**: How do I transfer my data to another computer?
-
-**A**: {your answer here}
-
-## Command Summary
-
-{Give a 'cheat sheet' of commands here}
-
-* Add todo `todo n/TODO_NAME d/DEADLINE`
+# User Guide
+
+## Table of content
+### [1. Introduction](#1-Introduction-1)
+### [2. Quick start](#2-Quick-start-1)
+### [3. Features](#3-Features-1)
+#### [3.1 Before the order](#31-Before-the-order-1)
+#### [3.2 Begin the order](#32-Begin-the-order-1)
+##### [3.2.1 Firstly](#321-Firstly-1)
+##### [3.2.2 The order method will be activated and print open stalls, user just type the corresponding index before the canteen to select canteen](#322-The-order-method-will-be-activated-and-print-open-stalls,-user-just-type-the-corresponding-index-before-the-canteen-to-select-canteen-1)
+##### [3.2.3 Then the open stalls in this canteen will be printed, user just type the corresponding index before the stall to select stall](#323-Then-the-open-stalls-in-this-canteen-will-be-printed,-user-just-type-the-corresponding-index-before-the-stall-to-select-stall-1)
+##### [3.2.4 Then the available dishes and price in this stall will be printed, user just type number of dishes he wants to order](#324-Then-the-available-dishes-and-price-in-this-stall-will-be-printed,-user-just-type-number-of-dishes-he-wants-to-order-1)
+##### [3.2.5 User chooses dishes in the same way as they select canteen and stall](#325-User-chooses-dishes-in-the-same-way-as-they-select-canteen-and-stall-1)
+##### [3.2.6 User will be asked whether he wants to see the comment of the dish, just type y/n](#326-User-will-be-asked-whether-he-wants-to-see-the-comment-of-the-dish,-just-type-y/n-1)
+##### [3.2.7 User choose the order type by typing the corresponding index before the type](#327-User-choose-the-order-type-by-typing-the-corresponding-index-before-the-type-1)
+#### [3.3 delete the specific order](#33-delete-the-specific-order-1)
+#### [3.4 find the specific order](#34-find-the-specific-order-1)
+#### [3.5 list all the orders](#35-list-all-the-orders-1)
+#### [3.6 change the order](#36-change-the-order-1)
+#### [3.7 check Canteen Operating Time](#37-check-Canteen-Operating-Time-1)
+##### [3.7.1 Firstly](#371-Firstly-1)
+##### [3.7.2 User enters the number before canteen to check that specific canteen](#372-User-enters-the-number-before-canteen-to-check-that-specific-canteen-1)
+#### [3.8 ccheck Stall Operating Time](#38-check-Stall-Operating-Time-1)
+##### [3.8.1 Firstly](#381-Firstly-1)
+##### [3.8.2 User enters the number before canteen to check that specific canteen](#382-User-enters-the-number-before-canteen-to-check-that-specific-canteen-1)
+##### [3.8.3 User enters the number before stall to check that specific stall](#383-User-enters-the-number-before-stall-to-check-that-specific-stall-1)
+#### [3.9 view all available commands](#39-view-all-available-commands-1)
+#### [3.10 quit the system](#310-quit-the-system-1)
+### [4. Command Summary](#4-Command-Summary-1)
+
+
+## 1. Introduction
+
+During peak hours, people may not be able to know the dining situation and the density of the canteen they want to go to. To solve this problem, we want to create a program to store and display basic information of stalls in each canteen (e.g. Open hours, current menu, change order etc) to all their potential users. CanteenHelper is a command line (CLI) application that helps students, staff and even tourists order food in canteens efficiently. CanteenHelper will allow users to choose their favorite dishes from different stalls in different canteens based on the date and time provided by the users. They also can check the comments of the dishes and operating hours of the stalls and canteens.
+
+
+## 2. Quick Start
+
+1. Ensure that you have Java 11 or above installed.
+1. Down the latest version of `CanteenHelper` from [here](https://github.com/AY2021S1-CS2113-T16-2/tp/releases/tag/v2.1).
+
+
+## 3. Features
+
+### 3.1 Before the order:
+`[name]/[day of week]/[time]`
+
+Format: `[name]/[day of week]/[time]`
+
+Example of usage:
+'wy/2/1800'
+‘fqy/1/1200
+
+* day of week should between 1-7 (includes)
+* time should follow this format: 900 or 1600, represent 09:00 and 16:00 respectively.
+
+Result is like this:
+
+
+
+### 3.2 Begin the order:
+`order`
+begin the order of a customer
+
+#### 3.2.1 Firstly
+
+Format: `order`
+
+Example of usage:
+'order'
+
+Result is like this:
+
+
+
+#### 3.2.2 The order method will be activated and print open stalls, user just type the corresponding index before the canteen to select canteen.
+
+Format: `[number]`
+
+Example of usage:
+'2'
+
+Result is like this:
+
+
+
+#### 3.2.3 Then the open stalls in this canteen will be printed, user just type the corresponding index before the stall to select stall.
+
+Format: `[number]`
+
+Example of usage:
+'1'
+
+Result is like this:
+
+
+
+#### 3.2.4 Then the available dishes and price in this stall will be printed, user just type number of dishes he wants to order.
+
+Format: `[number]`
+
+Example of usage:
+'2'
+
+Result is like this:
+
+
+
+#### 3.2.5 User chooses dishes in the same way as they select canteen and stall.
+
+Format: `[number]`
+
+Example of usage:
+'2'
+
+Result is like this:
+
+
+
+#### 3.2.6 User will be asked whether he wants to see the comment of the dish, just type y/n.
+
+Format: `y/n`
+
+Example of usage:
+'y', 'n'
+
+Result is like this:
+
+
+
+#### 3.2.7 User choose the order type by typing the corresponding index before the type.
+
+Format: `[number]`
+
+Example of usage:
+'2'
+
+Result is like this:
+
+
+
+### 3.3 delete the specific order:
+`delete [number]`
+delete the order based on the number from user
+user needs to input the number of order
+
+Format: `delete [number]`
+
+Example of usage:
+'delete 1'
+
+Result is like this:
+
+
+
+### 3.4 find the specific order:
+`find [dish name]`
+find the specific dish based on the user input dish name
+from the order list made by the user
+
+Format: `find [dish name]`
+
+Example of usage:
+'find Hawaiian'
+
+Result is like this:
+
+
+
+### 3.5 list all the orders:
+`list`
+check all the orders made by this user
+
+Format: `list`
+
+Example of usage:
+'list'
+
+Result is like this:
+
+
+
+### 3.6 change the order:
+`change/[number]/[type]`
+Change the order type to the type user inputed
+
+Format: `change/[number]/[type]`
+
+type should choose from:
+1. dine in
+2. delivery
+3. take away
+
+Example of usage:
+'change/2/dine in'
+'change/1/delivery
+
+* order type is case sensitive
+
+Result is like this:
+
+
+
+### 3.7 check Canteen Operating Time:
+`checkcanteen`
+check the operating hours of a canteen
+
+#### 3.7.1 Firstly
+
+Format: `checkcanteen`
+
+Example of usage:
+'checkcanteen'
+
+#### 3.7.2 User enters the number before canteen to check that specific canteen
+
+Format: `[number]`
+
+Example of usage:
+'4'
+
+Result is like this:
+
+
+
+### 3.8 check Stall Operating Time:
+`checkstall`
+check the operating hours of a stall
+
+#### 3.8.1 Firstly
+
+Format: `checkstall`
+
+Example of usage:
+'checkstall'
+
+#### 3.8.2 User enters the number before canteen to check that specific canteen
+
+Format: `[number]`
+
+Example of usage:
+'3'
+
+#### 3.8.3 User enters the number before stall to check that specific stall
+
+Format: `[number]`
+
+Example of usage:
+'2'
+
+Result is like this:
+
+
+
+### 3.9 view all available commands:
+`help`
+print all the commands with required format that the user can input
+
+Format: `help`
+
+Example of usage:
+'help'
+
+
+
+### 3.10 quit the system:
+`bye`
+quit the system
+
+Format: `bye`
+
+Example of usage:
+'bye'
+
+Result is like this:
+
+
+
+
+## 4. Command Summary
+
+|Action|Command|Example|
+|------|-------|-------|
+|order|`order`|`order`|
+|delete|`delete [number]`|`delete 2`|
+|find|`find [dish name]`|`find Pork Chop`|
+|list|`list`|`list`|
+|change|`change/[number]/[type]`|`change/3/take away`|
+|check Canteen Operating Time|`checkcanteen`|`checkcanteen`|
+|check Stall Operating Time|`checkstall`|`checkstall`|
+|help|`help`|`help`|
+
diff --git a/docs/_config.yml b/docs/_config.yml
new file mode 100644
index 0000000000..c50ff38dab
--- /dev/null
+++ b/docs/_config.yml
@@ -0,0 +1 @@
+theme: jekyll-theme-merlot
\ No newline at end of file
diff --git a/docs/img/UML.png b/docs/img/UML.png
new file mode 100644
index 0000000000..a4fdb98724
Binary files /dev/null and b/docs/img/UML.png differ
diff --git a/docs/img/arch dia.png b/docs/img/arch dia.png
new file mode 100644
index 0000000000..58a7bd95c7
Binary files /dev/null and b/docs/img/arch dia.png differ
diff --git a/docs/img/before.png b/docs/img/before.png
new file mode 100644
index 0000000000..81081a6348
Binary files /dev/null and b/docs/img/before.png differ
diff --git a/docs/img/bye.png b/docs/img/bye.png
new file mode 100644
index 0000000000..79542d1e8e
Binary files /dev/null and b/docs/img/bye.png differ
diff --git a/docs/img/canteen.png b/docs/img/canteen.png
new file mode 100644
index 0000000000..9da8998a9a
Binary files /dev/null and b/docs/img/canteen.png differ
diff --git a/docs/img/changeorder.png b/docs/img/changeorder.png
new file mode 100644
index 0000000000..66573f9683
Binary files /dev/null and b/docs/img/changeorder.png differ
diff --git a/docs/img/changeorderr.png b/docs/img/changeorderr.png
new file mode 100644
index 0000000000..1b862efe99
Binary files /dev/null and b/docs/img/changeorderr.png differ
diff --git a/docs/img/checkcanteen.png b/docs/img/checkcanteen.png
new file mode 100644
index 0000000000..5ae37b1c59
Binary files /dev/null and b/docs/img/checkcanteen.png differ
diff --git a/docs/img/checkopencanteen.png b/docs/img/checkopencanteen.png
new file mode 100644
index 0000000000..a145427327
Binary files /dev/null and b/docs/img/checkopencanteen.png differ
diff --git a/docs/img/checkopenstall.png b/docs/img/checkopenstall.png
new file mode 100644
index 0000000000..73844b7f6d
Binary files /dev/null and b/docs/img/checkopenstall.png differ
diff --git a/docs/img/checkstall.png b/docs/img/checkstall.png
new file mode 100644
index 0000000000..93f01ecdb2
Binary files /dev/null and b/docs/img/checkstall.png differ
diff --git a/docs/img/comment.png b/docs/img/comment.png
new file mode 100644
index 0000000000..4763c51fa4
Binary files /dev/null and b/docs/img/comment.png differ
diff --git a/docs/img/ddlete.png b/docs/img/ddlete.png
new file mode 100644
index 0000000000..e267e2d9b5
Binary files /dev/null and b/docs/img/ddlete.png differ
diff --git a/docs/img/delete.png b/docs/img/delete.png
new file mode 100644
index 0000000000..7712669775
Binary files /dev/null and b/docs/img/delete.png differ
diff --git a/docs/img/dish.png b/docs/img/dish.png
new file mode 100644
index 0000000000..ae126df834
Binary files /dev/null and b/docs/img/dish.png differ
diff --git a/docs/img/find.png b/docs/img/find.png
new file mode 100644
index 0000000000..bc49c4d77d
Binary files /dev/null and b/docs/img/find.png differ
diff --git a/docs/img/findd.png b/docs/img/findd.png
new file mode 100644
index 0000000000..17b0d02041
Binary files /dev/null and b/docs/img/findd.png differ
diff --git a/docs/img/help.png b/docs/img/help.png
new file mode 100644
index 0000000000..3d09599935
Binary files /dev/null and b/docs/img/help.png differ
diff --git a/docs/img/image1.png b/docs/img/image1.png
new file mode 100644
index 0000000000..1478e98dd1
Binary files /dev/null and b/docs/img/image1.png differ
diff --git a/docs/img/image2.png b/docs/img/image2.png
new file mode 100644
index 0000000000..7cb61f4d10
Binary files /dev/null and b/docs/img/image2.png differ
diff --git a/docs/img/image3.png b/docs/img/image3.png
new file mode 100644
index 0000000000..2678ef475e
Binary files /dev/null and b/docs/img/image3.png differ
diff --git a/docs/img/lis.png b/docs/img/lis.png
new file mode 100644
index 0000000000..87cda44d53
Binary files /dev/null and b/docs/img/lis.png differ
diff --git a/docs/img/logic dia.png b/docs/img/logic dia.png
new file mode 100644
index 0000000000..af05f1f736
Binary files /dev/null and b/docs/img/logic dia.png differ
diff --git a/docs/img/num.png b/docs/img/num.png
new file mode 100644
index 0000000000..46a92c44b2
Binary files /dev/null and b/docs/img/num.png differ
diff --git a/docs/img/order.png b/docs/img/order.png
new file mode 100644
index 0000000000..213bb317c0
Binary files /dev/null and b/docs/img/order.png differ
diff --git a/docs/img/overall.png b/docs/img/overall.png
new file mode 100644
index 0000000000..a4fdb98724
Binary files /dev/null and b/docs/img/overall.png differ
diff --git a/docs/img/print.png b/docs/img/print.png
new file mode 100644
index 0000000000..0f354265d7
Binary files /dev/null and b/docs/img/print.png differ
diff --git a/docs/img/stall.png b/docs/img/stall.png
new file mode 100644
index 0000000000..0354963a31
Binary files /dev/null and b/docs/img/stall.png differ
diff --git a/docs/img/type.png b/docs/img/type.png
new file mode 100644
index 0000000000..421b2be3be
Binary files /dev/null and b/docs/img/type.png differ
diff --git a/docs/team/johndoe.md b/docs/team/johndoe.md
deleted file mode 100644
index ab75b391b8..0000000000
--- a/docs/team/johndoe.md
+++ /dev/null
@@ -1,6 +0,0 @@
-# John Doe - Project Portfolio Page
-
-## Overview
-
-
-### Summary of Contributions
diff --git a/docs/team/louis-feng.md b/docs/team/louis-feng.md
new file mode 100644
index 0000000000..1dcb7d02be
--- /dev/null
+++ b/docs/team/louis-feng.md
@@ -0,0 +1,15 @@
+# Feng Qingyu's Project Portfolio Page
+## Project: CanteenHelper
+During peak hours, people may not be able to know the dining situation and the density of the canteen they want to go to.
+To solve this problem, we want to create a program to store and display basic information of stalls in each canteen (e.g. Open hours, current menu, change order etc) to all their potential users.
+CanteenHelper is a command line (CLI) application that helps students, staff and even tourists order food in canteens efficiently.
+CanteenHelper will allow users to choose their favorite dishes from different stalls in different canteens based on the date and time provided by the users.
+They also can check the comments of the dishes and operating hours of the stalls and canteens.
+
+### Summary of Contributions
+Code contributed: see from [here](https://nus-cs2113-ay2021s1.github.io/tp-dashboard/#breakdown=true&search=louis-feng&sort=groupTitle&sortWithin=title&since=2020-09-27&timeframe=commit&mergegroup=&groupSelect=groupByRepos&checkedFileTypes=docs~functional-code~test-code~other).
+### Contributions to the DG: Implementation part including the UML diagrams.
+### Contributions to the UG: Instructions for order part.
+### Enhancements to existing features: 1. Wrote most assertions and Junit tests 2. Implement UI class, Logic class and Customer class.
+### Contributions to team-based tasks: We work as a team, we always meet and work together. Everyone tried to contribute to every part. Thank you!
+
diff --git a/docs/team/wying333.md b/docs/team/wying333.md
new file mode 100644
index 0000000000..2d232e162a
--- /dev/null
+++ b/docs/team/wying333.md
@@ -0,0 +1,28 @@
+# Wang Ying‘s - Project Portfolio Page
+
+## Overview--Project: CanteenHelper
+
+During peak hours, people may not be able to know the dining situation and the density of the canteen they want to go to. To solve this problem, we want to create a program to store and display basic information of stalls in each canteen (e.g. Open hours, current menu, change order etc) to all their potential users. CanteenHelper is a command line (CLI) application that helps students, staff and even tourists order food in canteens efficiently. CanteenHelper will allow users to choose their favorite dishes from different stalls in different canteens based on the date and time provided by the users. They also can check the comments of the dishes and operating hours of the stalls and canteens.
+
+## Summary of Contributions
+
+### Code contributed: RepoSense link see from [here](https://nus-cs2113-ay2021s1.github.io/tp-dashboard/#breakdown=true&search=&sort=groupTitle&sortWithin=title&since=2020-09-27&timeframe=commit&mergegroup=&groupSelect=groupByRepos&checkedFileTypes=docs~functional-code~test-code~other&tabOpen=true&tabType=authorship&zFR=false&tabAuthor=WYing333&tabRepo=AY2021S1-CS2113-T16-2%2Ftp%5Bmaster%5D&authorshipIsMergeGroup=false&authorshipFileTypes=docs~functional-code~test-code).
+
+### Contributions to documentation:
+#### User Guide:
+Created the table of content of User Guide and wrote the detailed explanation after content 3.5. Added most pictures and managed their links.
+#### Developer Guide:
+Created the table of content of Developer Guide and wrote the detailed explanation except content 4, which is implementation part. Added most pictures including UML diagrams of find, delete, and print order and managed their links.
+
+### Project management:
+Managed releases v2.1 on GitHub. (1 release)
+
+### Enhancements to existing features:
+1. Wrote JUnit tests for existing features to increase test coverage.
+2. Implemented order class, deliveryOrder class, takeAwayOrder class, dineInOrder class, Dish class, Initializer class and features in Logic class and UI class.
+
+
+
+### Contributions to team-based tasks:
+We work as a team, we always meet and work together. Everyone tried to contribute to every part. Thank you!
+
diff --git a/docs/team/xX-Conan-Xx.md b/docs/team/xX-Conan-Xx.md
new file mode 100644
index 0000000000..f2ec8a7274
--- /dev/null
+++ b/docs/team/xX-Conan-Xx.md
@@ -0,0 +1,18 @@
+# Zhou Zeyu's Project Portfolio Page
+## Project: CanteenHelper
+During peak hours, people may not be able to know the dining situation and the density of the canteen they want to go to.
+To solve this problem, we want to create a program to store and display basic information of stalls in each canteen (e.g. Open hours, current menu, change order etc) to all their potential users.
+CanteenHelper is a command line (CLI) application that helps students, staff and even tourists order food in canteens efficiently.
+CanteenHelper will allow users to choose their favorite dishes from different stalls in different canteens based on the date and time provided by the users.
+They also can check the comments of the dishes and operating hours of the stalls and canteens.
+
+### Summary of Contributions
+Code contributed: see from [here](https://nus-cs2113-ay2021s1.github.io/tp-dashboard/#breakdown=true&search=xX-Conan-Xx&sort=groupTitle&sortWithin=title&since=2020-09-27&timeframe=commit&mergegroup=&groupSelect=groupByRepos&checkedFileTypes=docs~functional-code~test-code~other).
+### Contributions to the DG: UML diagrams.
+### Contributions to the UG: Wrote User Guide from 2 to 3.4
+### Enhancements to existing features:
+1. Wrote Junit tests
+2. add try exception block
+3. Wrote UI class
+4. debug
+### Contributions to team-based tasks: We work as a team, we always meet and work together. Everyone tried to contribute to every part. Thank you!
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index b7c8c5dbf5..1c08ce3e78 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -1,5 +1,5 @@
-distributionBase=GRADLE_USER_HOME
-distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-6.2-bin.zip
-zipStoreBase=GRADLE_USER_HOME
-zipStorePath=wrapper/dists
+distributionBase=GRADLE_USER_HOME
+distributionPath=wrapper/dists
+distributionUrl=https\://services.gradle.org/distributions/gradle-6.2-bin.zip
+zipStoreBase=GRADLE_USER_HOME
+zipStorePath=wrapper/dists
diff --git a/gradlew b/gradlew
index 2fe81a7d95..accc54f884 100755
--- a/gradlew
+++ b/gradlew
@@ -1,183 +1,183 @@
-#!/usr/bin/env sh
-
-#
-# Copyright 2015 the original author or authors.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# https://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-##############################################################################
-##
-## Gradle start up script for UN*X
-##
-##############################################################################
-
-# Attempt to set APP_HOME
-# Resolve links: $0 may be a link
-PRG="$0"
-# Need this for relative symlinks.
-while [ -h "$PRG" ] ; do
- ls=`ls -ld "$PRG"`
- link=`expr "$ls" : '.*-> \(.*\)$'`
- if expr "$link" : '/.*' > /dev/null; then
- PRG="$link"
- else
- PRG=`dirname "$PRG"`"/$link"
- fi
-done
-SAVED="`pwd`"
-cd "`dirname \"$PRG\"`/" >/dev/null
-APP_HOME="`pwd -P`"
-cd "$SAVED" >/dev/null
-
-APP_NAME="Gradle"
-APP_BASE_NAME=`basename "$0"`
-
-# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
-DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
-
-# Use the maximum available, or set MAX_FD != -1 to use that value.
-MAX_FD="maximum"
-
-warn () {
- echo "$*"
-}
-
-die () {
- echo
- echo "$*"
- echo
- exit 1
-}
-
-# OS specific support (must be 'true' or 'false').
-cygwin=false
-msys=false
-darwin=false
-nonstop=false
-case "`uname`" in
- CYGWIN* )
- cygwin=true
- ;;
- Darwin* )
- darwin=true
- ;;
- MINGW* )
- msys=true
- ;;
- NONSTOP* )
- nonstop=true
- ;;
-esac
-
-CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
-
-# Determine the Java command to use to start the JVM.
-if [ -n "$JAVA_HOME" ] ; then
- if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
- # IBM's JDK on AIX uses strange locations for the executables
- JAVACMD="$JAVA_HOME/jre/sh/java"
- else
- JAVACMD="$JAVA_HOME/bin/java"
- fi
- if [ ! -x "$JAVACMD" ] ; then
- die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
-
-Please set the JAVA_HOME variable in your environment to match the
-location of your Java installation."
- fi
-else
- JAVACMD="java"
- which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
-
-Please set the JAVA_HOME variable in your environment to match the
-location of your Java installation."
-fi
-
-# Increase the maximum file descriptors if we can.
-if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
- MAX_FD_LIMIT=`ulimit -H -n`
- if [ $? -eq 0 ] ; then
- if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
- MAX_FD="$MAX_FD_LIMIT"
- fi
- ulimit -n $MAX_FD
- if [ $? -ne 0 ] ; then
- warn "Could not set maximum file descriptor limit: $MAX_FD"
- fi
- else
- warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
- fi
-fi
-
-# For Darwin, add options to specify how the application appears in the dock
-if $darwin; then
- GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
-fi
-
-# For Cygwin or MSYS, switch paths to Windows format before running java
-if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then
- APP_HOME=`cygpath --path --mixed "$APP_HOME"`
- CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
- JAVACMD=`cygpath --unix "$JAVACMD"`
-
- # We build the pattern for arguments to be converted via cygpath
- ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
- SEP=""
- for dir in $ROOTDIRSRAW ; do
- ROOTDIRS="$ROOTDIRS$SEP$dir"
- SEP="|"
- done
- OURCYGPATTERN="(^($ROOTDIRS))"
- # Add a user-defined pattern to the cygpath arguments
- if [ "$GRADLE_CYGPATTERN" != "" ] ; then
- OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
- fi
- # Now convert the arguments - kludge to limit ourselves to /bin/sh
- i=0
- for arg in "$@" ; do
- CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
- CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
-
- if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
- eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
- else
- eval `echo args$i`="\"$arg\""
- fi
- i=`expr $i + 1`
- done
- case $i in
- 0) set -- ;;
- 1) set -- "$args0" ;;
- 2) set -- "$args0" "$args1" ;;
- 3) set -- "$args0" "$args1" "$args2" ;;
- 4) set -- "$args0" "$args1" "$args2" "$args3" ;;
- 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
- 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
- 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
- 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
- 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
- esac
-fi
-
-# Escape application args
-save () {
- for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
- echo " "
-}
-APP_ARGS=`save "$@"`
-
-# Collect all arguments for the java command, following the shell quoting and substitution rules
-eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
-
-exec "$JAVACMD" "$@"
+#!/usr/bin/env sh
+
+#
+# Copyright 2015 the original author or authors.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# https://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+##############################################################################
+##
+## Gradle start up script for UN*X
+##
+##############################################################################
+
+# Attempt to set APP_HOME
+# Resolve links: $0 may be a link
+PRG="$0"
+# Need this for relative symlinks.
+while [ -h "$PRG" ] ; do
+ ls=`ls -ld "$PRG"`
+ link=`expr "$ls" : '.*-> \(.*\)$'`
+ if expr "$link" : '/.*' > /dev/null; then
+ PRG="$link"
+ else
+ PRG=`dirname "$PRG"`"/$link"
+ fi
+done
+SAVED="`pwd`"
+cd "`dirname \"$PRG\"`/" >/dev/null
+APP_HOME="`pwd -P`"
+cd "$SAVED" >/dev/null
+
+APP_NAME="Gradle"
+APP_BASE_NAME=`basename "$0"`
+
+# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
+
+# Use the maximum available, or set MAX_FD != -1 to use that value.
+MAX_FD="maximum"
+
+warn () {
+ echo "$*"
+}
+
+die () {
+ echo
+ echo "$*"
+ echo
+ exit 1
+}
+
+# OS specific support (must be 'true' or 'false').
+cygwin=false
+msys=false
+darwin=false
+nonstop=false
+case "`uname`" in
+ CYGWIN* )
+ cygwin=true
+ ;;
+ Darwin* )
+ darwin=true
+ ;;
+ MINGW* )
+ msys=true
+ ;;
+ NONSTOP* )
+ nonstop=true
+ ;;
+esac
+
+CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
+
+# Determine the Java command to use to start the JVM.
+if [ -n "$JAVA_HOME" ] ; then
+ if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
+ # IBM's JDK on AIX uses strange locations for the executables
+ JAVACMD="$JAVA_HOME/jre/sh/java"
+ else
+ JAVACMD="$JAVA_HOME/bin/java"
+ fi
+ if [ ! -x "$JAVACMD" ] ; then
+ die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+ fi
+else
+ JAVACMD="java"
+ which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+fi
+
+# Increase the maximum file descriptors if we can.
+if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
+ MAX_FD_LIMIT=`ulimit -H -n`
+ if [ $? -eq 0 ] ; then
+ if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
+ MAX_FD="$MAX_FD_LIMIT"
+ fi
+ ulimit -n $MAX_FD
+ if [ $? -ne 0 ] ; then
+ warn "Could not set maximum file descriptor limit: $MAX_FD"
+ fi
+ else
+ warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
+ fi
+fi
+
+# For Darwin, add options to specify how the application appears in the dock
+if $darwin; then
+ GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
+fi
+
+# For Cygwin or MSYS, switch paths to Windows format before running java
+if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then
+ APP_HOME=`cygpath --path --mixed "$APP_HOME"`
+ CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
+ JAVACMD=`cygpath --unix "$JAVACMD"`
+
+ # We build the pattern for arguments to be converted via cygpath
+ ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
+ SEP=""
+ for dir in $ROOTDIRSRAW ; do
+ ROOTDIRS="$ROOTDIRS$SEP$dir"
+ SEP="|"
+ done
+ OURCYGPATTERN="(^($ROOTDIRS))"
+ # Add a user-defined pattern to the cygpath arguments
+ if [ "$GRADLE_CYGPATTERN" != "" ] ; then
+ OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
+ fi
+ # Now convert the arguments - kludge to limit ourselves to /bin/sh
+ i=0
+ for arg in "$@" ; do
+ CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
+ CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
+
+ if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
+ eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
+ else
+ eval `echo args$i`="\"$arg\""
+ fi
+ i=`expr $i + 1`
+ done
+ case $i in
+ 0) set -- ;;
+ 1) set -- "$args0" ;;
+ 2) set -- "$args0" "$args1" ;;
+ 3) set -- "$args0" "$args1" "$args2" ;;
+ 4) set -- "$args0" "$args1" "$args2" "$args3" ;;
+ 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
+ 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
+ 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
+ 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
+ 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
+ esac
+fi
+
+# Escape application args
+save () {
+ for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
+ echo " "
+}
+APP_ARGS=`save "$@"`
+
+# Collect all arguments for the java command, following the shell quoting and substitution rules
+eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
+
+exec "$JAVACMD" "$@"
diff --git a/gradlew.bat b/gradlew.bat
index 62bd9b9cce..9109989e3c 100644
--- a/gradlew.bat
+++ b/gradlew.bat
@@ -1,103 +1,103 @@
-@rem
-@rem Copyright 2015 the original author or authors.
-@rem
-@rem Licensed under the Apache License, Version 2.0 (the "License");
-@rem you may not use this file except in compliance with the License.
-@rem You may obtain a copy of the License at
-@rem
-@rem https://www.apache.org/licenses/LICENSE-2.0
-@rem
-@rem Unless required by applicable law or agreed to in writing, software
-@rem distributed under the License is distributed on an "AS IS" BASIS,
-@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-@rem See the License for the specific language governing permissions and
-@rem limitations under the License.
-@rem
-
-@if "%DEBUG%" == "" @echo off
-@rem ##########################################################################
-@rem
-@rem Gradle startup script for Windows
-@rem
-@rem ##########################################################################
-
-@rem Set local scope for the variables with windows NT shell
-if "%OS%"=="Windows_NT" setlocal
-
-set DIRNAME=%~dp0
-if "%DIRNAME%" == "" set DIRNAME=.
-set APP_BASE_NAME=%~n0
-set APP_HOME=%DIRNAME%
-
-@rem Resolve any "." and ".." in APP_HOME to make it shorter.
-for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
-
-@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
-set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
-
-@rem Find java.exe
-if defined JAVA_HOME goto findJavaFromJavaHome
-
-set JAVA_EXE=java.exe
-%JAVA_EXE% -version >NUL 2>&1
-if "%ERRORLEVEL%" == "0" goto init
-
-echo.
-echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
-echo.
-echo Please set the JAVA_HOME variable in your environment to match the
-echo location of your Java installation.
-
-goto fail
-
-:findJavaFromJavaHome
-set JAVA_HOME=%JAVA_HOME:"=%
-set JAVA_EXE=%JAVA_HOME%/bin/java.exe
-
-if exist "%JAVA_EXE%" goto init
-
-echo.
-echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
-echo.
-echo Please set the JAVA_HOME variable in your environment to match the
-echo location of your Java installation.
-
-goto fail
-
-:init
-@rem Get command-line arguments, handling Windows variants
-
-if not "%OS%" == "Windows_NT" goto win9xME_args
-
-:win9xME_args
-@rem Slurp the command line arguments.
-set CMD_LINE_ARGS=
-set _SKIP=2
-
-:win9xME_args_slurp
-if "x%~1" == "x" goto execute
-
-set CMD_LINE_ARGS=%*
-
-:execute
-@rem Setup the command line
-
-set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
-
-@rem Execute Gradle
-"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
-
-:end
-@rem End local scope for the variables with windows NT shell
-if "%ERRORLEVEL%"=="0" goto mainEnd
-
-:fail
-rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
-rem the _cmd.exe /c_ return code!
-if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
-exit /b 1
-
-:mainEnd
-if "%OS%"=="Windows_NT" endlocal
-
-:omega
+@rem
+@rem Copyright 2015 the original author or authors.
+@rem
+@rem Licensed under the Apache License, Version 2.0 (the "License");
+@rem you may not use this file except in compliance with the License.
+@rem You may obtain a copy of the License at
+@rem
+@rem https://www.apache.org/licenses/LICENSE-2.0
+@rem
+@rem Unless required by applicable law or agreed to in writing, software
+@rem distributed under the License is distributed on an "AS IS" BASIS,
+@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+@rem See the License for the specific language governing permissions and
+@rem limitations under the License.
+@rem
+
+@if "%DEBUG%" == "" @echo off
+@rem ##########################################################################
+@rem
+@rem Gradle startup script for Windows
+@rem
+@rem ##########################################################################
+
+@rem Set local scope for the variables with windows NT shell
+if "%OS%"=="Windows_NT" setlocal
+
+set DIRNAME=%~dp0
+if "%DIRNAME%" == "" set DIRNAME=.
+set APP_BASE_NAME=%~n0
+set APP_HOME=%DIRNAME%
+
+@rem Resolve any "." and ".." in APP_HOME to make it shorter.
+for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
+
+@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
+
+@rem Find java.exe
+if defined JAVA_HOME goto findJavaFromJavaHome
+
+set JAVA_EXE=java.exe
+%JAVA_EXE% -version >NUL 2>&1
+if "%ERRORLEVEL%" == "0" goto init
+
+echo.
+echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:findJavaFromJavaHome
+set JAVA_HOME=%JAVA_HOME:"=%
+set JAVA_EXE=%JAVA_HOME%/bin/java.exe
+
+if exist "%JAVA_EXE%" goto init
+
+echo.
+echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:init
+@rem Get command-line arguments, handling Windows variants
+
+if not "%OS%" == "Windows_NT" goto win9xME_args
+
+:win9xME_args
+@rem Slurp the command line arguments.
+set CMD_LINE_ARGS=
+set _SKIP=2
+
+:win9xME_args_slurp
+if "x%~1" == "x" goto execute
+
+set CMD_LINE_ARGS=%*
+
+:execute
+@rem Setup the command line
+
+set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
+
+@rem Execute Gradle
+"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
+
+:end
+@rem End local scope for the variables with windows NT shell
+if "%ERRORLEVEL%"=="0" goto mainEnd
+
+:fail
+rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
+rem the _cmd.exe /c_ return code!
+if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
+exit /b 1
+
+:mainEnd
+if "%OS%"=="Windows_NT" endlocal
+
+:omega
diff --git a/hs_err_pid14708.log b/hs_err_pid14708.log
new file mode 100644
index 0000000000..78fe56eedf
--- /dev/null
+++ b/hs_err_pid14708.log
@@ -0,0 +1,665 @@
+#
+# There is insufficient memory for the Java Runtime Environment to continue.
+# Native memory allocation (malloc) failed to allocate 1048576 bytes for AllocateHeap
+# Possible reasons:
+# The system is out of physical RAM or swap space
+# The process is running with CompressedOops enabled, and the Java Heap may be blocking the growth of the native heap
+# Possible solutions:
+# Reduce memory load on the system
+# Increase physical memory or swap space
+# Check if swap backing store is full
+# Decrease Java heap size (-Xmx/-Xms)
+# Decrease number of Java threads
+# Decrease Java thread stack sizes (-Xss)
+# Set larger code cache with -XX:ReservedCodeCacheSize=
+# JVM is running with Unscaled Compressed Oops mode in which the Java heap is
+# placed in the first 4GB address space. The Java Heap base address is the
+# maximum limit for the native heap growth. Please use -XX:HeapBaseMinAddress
+# to set the Java Heap base and to place the Java Heap above 4GB virtual address.
+# This output file may be truncated or incomplete.
+#
+# Out of Memory Error (t:/workspace/open/src/hotspot/share/memory/allocation.cpp:46), pid=14708, tid=13144
+#
+# JRE version: Java(TM) SE Runtime Environment (11.0.1+13) (build 11.0.1+13-LTS)
+# Java VM: Java HotSpot(TM) 64-Bit Server VM (11.0.1+13-LTS, mixed mode, tiered, compressed oops, g1 gc, windows-amd64)
+# No core dump will be written. Minidumps are not enabled by default on client versions of Windows
+#
+
+--------------- S U M M A R Y ------------
+
+Command Line: -XX:MaxMetaspaceSize=256m -XX:+HeapDumpOnOutOfMemoryError -agentlib:jdwp=transport=dt_socket,server=n,suspend=y,address=127.0.0.1:60754 --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.lang.invoke=ALL-UNNAMED --add-opens=java.prefs/java.util.prefs=ALL-UNNAMED -Xms256m -Xmx512m -Dfile.encoding=GBK -Duser.country=SG -Duser.language=zh -Duser.variant org.gradle.launcher.daemon.bootstrap.GradleDaemon 6.2
+
+Host: Intel(R) Core(TM) i5-7200U CPU @ 2.50GHz, 4 cores, 7G, Windows 10 , 64 bit Build 18362 (10.0.18362.1110)
+Time: Sat Oct 31 15:33:34 2020 ?D1��������?����?? elapsed time: 3 seconds (0d 0h 0m 3s)
+
+--------------- T H R E A D ---------------
+
+Current thread (0x000002317d476800): VMThread "VM Thread" [stack: 0x000000af27b00000,0x000000af27c00000] [id=13144]
+
+Stack: [0x000000af27b00000,0x000000af27c00000]
+[error occurred during error reporting (printing stack bounds), id 0xc0000005, EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x0000023108250bad]
+
+Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
+V [jvm.dll+0x63c21a]
+V [jvm.dll+0x7797df]
+V [jvm.dll+0x77adca]
+V [jvm.dll+0x77b3e5]
+V [jvm.dll+0x77b39b]
+V [jvm.dll+0x63b916]
+V [jvm.dll+0x63bce8]
+C [ntdll.dll+0xa121f]
+C [ntdll.dll+0x6a259]
+C [ntdll.dll+0x9fe8e]
+C 0x0000023108250bad
+
+VM_Operation (0x000000af292fba80): CollectForMetadataAllocation, mode: safepoint, requested by thread 0x000002317f484000
+
+
+--------------- P R O C E S S ---------------
+
+Threads class SMR info:
+_java_thread_list=0x00000231176d92a0, length=23, elements={
+0x0000023179bb3000, 0x000002317d479800, 0x000002317d4a7800, 0x000002317d4c6000,
+0x000002317dd1f000, 0x000002317dd22000, 0x000002317dd2b000, 0x000002317d4c8000,
+0x000002317de88800, 0x000002317deae000, 0x000002317dec2000, 0x000002317dec3000,
+0x000002317dee2000, 0x000002317e886000, 0x000002317f2d0800, 0x000002317ebbb800,
+0x000002317f198000, 0x000002317f330800, 0x00000231179f4800, 0x000002317f484000,
+0x000002317f342000, 0x000002317f1e6800, 0x000002311732d800
+}
+
+Java Threads: ( => current thread )
+ 0x0000023179bb3000 JavaThread "main" [_thread_blocked, id=21496, stack(0x000000af27500000,0x000000af27600000)]
+ 0x000002317d479800 JavaThread "Reference Handler" daemon [_thread_blocked, id=18412, stack(0x000000af27c00000,0x000000af27d00000)]
+ 0x000002317d4a7800 JavaThread "Finalizer" daemon [_thread_blocked, id=1416, stack(0x000000af27d00000,0x000000af27e00000)]
+ 0x000002317d4c6000 JavaThread "Signal Dispatcher" daemon [_thread_blocked, id=22080, stack(0x000000af27e00000,0x000000af27f00000)]
+ 0x000002317dd1f000 JavaThread "Attach Listener" daemon [_thread_blocked, id=16912, stack(0x000000af27f00000,0x000000af28000000)]
+ 0x000002317dd22000 JavaThread "C2 CompilerThread0" daemon [_thread_blocked, id=13912, stack(0x000000af28000000,0x000000af28100000)]
+ 0x000002317dd2b000 JavaThread "C1 CompilerThread0" daemon [_thread_blocked, id=6024, stack(0x000000af28100000,0x000000af28200000)]
+ 0x000002317d4c8000 JavaThread "Sweeper thread" daemon [_thread_blocked, id=26872, stack(0x000000af28200000,0x000000af28300000)]
+ 0x000002317de88800 JavaThread "Common-Cleaner" daemon [_thread_blocked, id=11296, stack(0x000000af28300000,0x000000af28400000)]
+ 0x000002317deae000 JavaThread "JDWP Transport Listener: dt_socket" daemon [_thread_blocked, id=24548, stack(0x000000af28400000,0x000000af28500000)]
+ 0x000002317dec2000 JavaThread "JDWP Event Helper Thread" daemon [_thread_blocked, id=27052, stack(0x000000af28500000,0x000000af28600000)]
+ 0x000002317dec3000 JavaThread "JDWP Command Reader" daemon [_thread_in_native, id=14040, stack(0x000000af28600000,0x000000af28700000)]
+ 0x000002317dee2000 JavaThread "Service Thread" daemon [_thread_blocked, id=13480, stack(0x000000af28700000,0x000000af28800000)]
+ 0x000002317e886000 JavaThread "Daemon health stats" [_thread_blocked, id=23888, stack(0x000000af28d00000,0x000000af28e00000)]
+ 0x000002317f2d0800 JavaThread "Incoming local TCP Connector on port 60759" [_thread_in_native, id=21140, stack(0x000000af28c00000,0x000000af28d00000)]
+ 0x000002317ebbb800 JavaThread "Daemon periodic checks" [_thread_blocked, id=6608, stack(0x000000af28e00000,0x000000af28f00000)]
+ 0x000002317f198000 JavaThread "Daemon" [_thread_blocked, id=2848, stack(0x000000af28f00000,0x000000af29000000)]
+ 0x000002317f330800 JavaThread "Handler for socket connection from /127.0.0.1:60759 to /127.0.0.1:60760" [_thread_in_native, id=13360, stack(0x000000af29000000,0x000000af29100000)]
+ 0x00000231179f4800 JavaThread "Cancel handler" [_thread_blocked, id=15728, stack(0x000000af29100000,0x000000af29200000)]
+ 0x000002317f484000 JavaThread "Daemon worker" [_thread_blocked, id=19096, stack(0x000000af29200000,0x000000af29300000)]
+ 0x000002317f342000 JavaThread "Asynchronous log dispatcher for DefaultDaemonConnection: socket connection from /127.0.0.1:60759 to /127.0.0.1:60760" [_thread_blocked, id=17188, stack(0x000000af29300000,0x000000af29400000)]
+ 0x000002317f1e6800 JavaThread "Stdin handler" [_thread_blocked, id=11108, stack(0x000000af29400000,0x000000af29500000)]
+ 0x000002311732d800 JavaThread "Thread-8" [_thread_blocked, id=10304, stack(0x000000af29500000,0x000000af29600000)]
+
+Other Threads:
+=>0x000002317d476800 VMThread "VM Thread" [stack: 0x000000af27b00000,0x000000af27c00000] [id=13144]
+ 0x000002317dee3000 WatcherThread [stack: 0x000000af28800000,0x000000af28900000] [id=19716]
+ 0x0000023179bcb000 GCTaskThread "GC Thread#0" [stack: 0x000000af27600000,0x000000af27700000] [id=20316]
+ 0x000002317e610000 GCTaskThread "GC Thread#1" [stack: 0x000000af28900000,0x000000af28a00000] [id=27568]
+ 0x000002317e611000 GCTaskThread "GC Thread#2" [stack: 0x000000af28a00000,0x000000af28b00000] [id=26748]
+ 0x000002317e633800 GCTaskThread "GC Thread#3" [stack: 0x000000af28b00000,0x000000af28c00000] [id=20872]
+ 0x0000023179bdc800 ConcurrentGCThread "G1 Logic Marker" [stack: 0x000000af27700000,0x000000af27800000] [id=13708]
+ 0x0000023179bde800 ConcurrentGCThread "G1 Conc#0" [stack: 0x000000af27800000,0x000000af27900000] [id=18752]
+ 0x000002317d316800 ConcurrentGCThread "G1 Refine#0" [stack: 0x000000af27900000,0x000000af27a00000] [id=15744]
+ 0x000002317d317800 ConcurrentGCThread "G1 Young RemSet Sampling" [stack: 0x000000af27a00000,0x000000af27b00000] [id=17028]
+
+Threads with active compile tasks:
+C1 CompilerThread01780 3 java.util.AbstractList::subListRangeCheck (110 bytes)
+
+VM state:at safepoint (normal execution)
+
+VM Mutex/Monitor currently owned by a thread: ([mutex/lock_event])
+[0x0000023179bb1ba0] Threads_lock - owner thread: 0x000002317d476800
+[0x0000023179bb1e70] Heap_lock - owner thread: 0x000002317f484000
+
+Heap address: 0x00000000e0000000, size: 512 MB, Compressed Oops mode: 32-bit
+Narrow klass base: 0x0000000000000000, Narrow klass shift: 3
+Compressed class space size: 260046848 Address: 0x0000000100000000
+
+Heap:
+ garbage-first heap total 262144K, used 15795K [0x00000000e0000000, 0x0000000100000000)
+ region size 1024K, 4 young (4096K), 4 survivors (4096K)
+ Metaspace used 19091K, capacity 19561K, committed 19712K, reserved 282624K
+ class space used 2295K, capacity 2465K, committed 2560K, reserved 253952K
+Heap Regions: E=young(eden), S=young(survivor), O=old, HS=humongous(starts), HC=humongous(continues), CS=collection set, F=free, A=archive, TAMS=top-at-mark-start (previous, next)
+| 0|0x00000000e0000000, 0x00000000e0100000, 0x00000000e0100000|100%| O| |TAMS 0x00000000e0000000, 0x00000000e0100000| Untracked
+| 1|0x00000000e0100000, 0x00000000e0200000, 0x00000000e0200000|100%| O| |TAMS 0x00000000e0100000, 0x00000000e0200000| Untracked
+| 2|0x00000000e0200000, 0x00000000e0300000, 0x00000000e0300000|100%| O| |TAMS 0x00000000e0200000, 0x00000000e0300000| Untracked
+| 3|0x00000000e0300000, 0x00000000e0400000, 0x00000000e0400000|100%|HS| |TAMS 0x00000000e0300000, 0x00000000e0400000| Complete
+| 4|0x00000000e0400000, 0x00000000e0500000, 0x00000000e0500000|100%|HC| |TAMS 0x00000000e0400000, 0x00000000e0500000| Complete
+| 5|0x00000000e0500000, 0x00000000e0600000, 0x00000000e0600000|100%|HC| |TAMS 0x00000000e0500000, 0x00000000e0600000| Complete
+| 6|0x00000000e0600000, 0x00000000e0700000, 0x00000000e0700000|100%| O| |TAMS 0x00000000e0600000, 0x00000000e0700000| Untracked
+| 7|0x00000000e0700000, 0x00000000e0800000, 0x00000000e0800000|100%| O| |TAMS 0x00000000e0700000, 0x00000000e0800000| Untracked
+| 8|0x00000000e0800000, 0x00000000e0900000, 0x00000000e0900000|100%| O| |TAMS 0x00000000e0800000, 0x00000000e0900000| Untracked
+| 9|0x00000000e0900000, 0x00000000e0a00000, 0x00000000e0a00000|100%| O| |TAMS 0x00000000e0900000, 0x00000000e0a00000| Untracked
+| 10|0x00000000e0a00000, 0x00000000e0b00000, 0x00000000e0b00000|100%| O| |TAMS 0x00000000e0a00000, 0x00000000e0b00000| Untracked
+| 11|0x00000000e0b00000, 0x00000000e0c00000, 0x00000000e0c00000|100%| O| |TAMS 0x00000000e0b00000, 0x00000000e0c00000| Untracked
+| 12|0x00000000e0c00000, 0x00000000e0c30c00, 0x00000000e0d00000| 19%| O| |TAMS 0x00000000e0c00000, 0x00000000e0c30c00| Untracked
+| 13|0x00000000e0d00000, 0x00000000e0d00000, 0x00000000e0e00000| 0%| F| |TAMS 0x00000000e0d00000, 0x00000000e0d00000| Untracked
+| 14|0x00000000e0e00000, 0x00000000e0e00000, 0x00000000e0f00000| 0%| F| |TAMS 0x00000000e0e00000, 0x00000000e0e00000| Untracked
+| 15|0x00000000e0f00000, 0x00000000e0f00000, 0x00000000e1000000| 0%| F| |TAMS 0x00000000e0f00000, 0x00000000e0f00000| Untracked
+| 16|0x00000000e1000000, 0x00000000e1000000, 0x00000000e1100000| 0%| F| |TAMS 0x00000000e1000000, 0x00000000e1000000| Untracked
+| 17|0x00000000e1100000, 0x00000000e1100000, 0x00000000e1200000| 0%| F| |TAMS 0x00000000e1100000, 0x00000000e1100000| Untracked
+| 18|0x00000000e1200000, 0x00000000e1200000, 0x00000000e1300000| 0%| F| |TAMS 0x00000000e1200000, 0x00000000e1200000| Untracked
+| 19|0x00000000e1300000, 0x00000000e1300000, 0x00000000e1400000| 0%| F| |TAMS 0x00000000e1300000, 0x00000000e1300000| Untracked
+| 20|0x00000000e1400000, 0x00000000e1400000, 0x00000000e1500000| 0%| F| |TAMS 0x00000000e1400000, 0x00000000e1400000| Untracked
+| 21|0x00000000e1500000, 0x00000000e1500000, 0x00000000e1600000| 0%| F| |TAMS 0x00000000e1500000, 0x00000000e1500000| Untracked
+| 22|0x00000000e1600000, 0x00000000e1600000, 0x00000000e1700000| 0%| F| |TAMS 0x00000000e1600000, 0x00000000e1600000| Untracked
+| 23|0x00000000e1700000, 0x00000000e1700000, 0x00000000e1800000| 0%| F| |TAMS 0x00000000e1700000, 0x00000000e1700000| Untracked
+| 24|0x00000000e1800000, 0x00000000e1800000, 0x00000000e1900000| 0%| F| |TAMS 0x00000000e1800000, 0x00000000e1800000| Untracked
+| 25|0x00000000e1900000, 0x00000000e1900000, 0x00000000e1a00000| 0%| F| |TAMS 0x00000000e1900000, 0x00000000e1900000| Untracked
+| 26|0x00000000e1a00000, 0x00000000e1a00000, 0x00000000e1b00000| 0%| F| |TAMS 0x00000000e1a00000, 0x00000000e1a00000| Untracked
+| 27|0x00000000e1b00000, 0x00000000e1b00000, 0x00000000e1c00000| 0%| F| |TAMS 0x00000000e1b00000, 0x00000000e1b00000| Untracked
+| 28|0x00000000e1c00000, 0x00000000e1c00000, 0x00000000e1d00000| 0%| F| |TAMS 0x00000000e1c00000, 0x00000000e1c00000| Untracked
+| 29|0x00000000e1d00000, 0x00000000e1d00000, 0x00000000e1e00000| 0%| F| |TAMS 0x00000000e1d00000, 0x00000000e1d00000| Untracked
+| 30|0x00000000e1e00000, 0x00000000e1e00000, 0x00000000e1f00000| 0%| F| |TAMS 0x00000000e1e00000, 0x00000000e1e00000| Untracked
+| 31|0x00000000e1f00000, 0x00000000e1f00000, 0x00000000e2000000| 0%| F| |TAMS 0x00000000e1f00000, 0x00000000e1f00000| Untracked
+| 32|0x00000000e2000000, 0x00000000e2000000, 0x00000000e2100000| 0%| F| |TAMS 0x00000000e2000000, 0x00000000e2000000| Untracked
+| 33|0x00000000e2100000, 0x00000000e2100000, 0x00000000e2200000| 0%| F| |TAMS 0x00000000e2100000, 0x00000000e2100000| Untracked
+| 34|0x00000000e2200000, 0x00000000e2200000, 0x00000000e2300000| 0%| F| |TAMS 0x00000000e2200000, 0x00000000e2200000| Untracked
+| 35|0x00000000e2300000, 0x00000000e2300000, 0x00000000e2400000| 0%| F| |TAMS 0x00000000e2300000, 0x00000000e2300000| Untracked
+| 36|0x00000000e2400000, 0x00000000e2400000, 0x00000000e2500000| 0%| F| |TAMS 0x00000000e2400000, 0x00000000e2400000| Untracked
+| 37|0x00000000e2500000, 0x00000000e2500000, 0x00000000e2600000| 0%| F| |TAMS 0x00000000e2500000, 0x00000000e2500000| Untracked
+| 38|0x00000000e2600000, 0x00000000e2600000, 0x00000000e2700000| 0%| F| |TAMS 0x00000000e2600000, 0x00000000e2600000| Untracked
+| 39|0x00000000e2700000, 0x00000000e2700000, 0x00000000e2800000| 0%| F| |TAMS 0x00000000e2700000, 0x00000000e2700000| Untracked
+| 40|0x00000000e2800000, 0x00000000e2800000, 0x00000000e2900000| 0%| F| |TAMS 0x00000000e2800000, 0x00000000e2800000| Untracked
+| 41|0x00000000e2900000, 0x00000000e2900000, 0x00000000e2a00000| 0%| F| |TAMS 0x00000000e2900000, 0x00000000e2900000| Untracked
+| 42|0x00000000e2a00000, 0x00000000e2a00000, 0x00000000e2b00000| 0%| F| |TAMS 0x00000000e2a00000, 0x00000000e2a00000| Untracked
+| 43|0x00000000e2b00000, 0x00000000e2b00000, 0x00000000e2c00000| 0%| F| |TAMS 0x00000000e2b00000, 0x00000000e2b00000| Untracked
+| 44|0x00000000e2c00000, 0x00000000e2c00000, 0x00000000e2d00000| 0%| F| |TAMS 0x00000000e2c00000, 0x00000000e2c00000| Untracked
+| 45|0x00000000e2d00000, 0x00000000e2d00000, 0x00000000e2e00000| 0%| F| |TAMS 0x00000000e2d00000, 0x00000000e2d00000| Untracked
+| 46|0x00000000e2e00000, 0x00000000e2e00000, 0x00000000e2f00000| 0%| F| |TAMS 0x00000000e2e00000, 0x00000000e2e00000| Untracked
+| 47|0x00000000e2f00000, 0x00000000e2f00000, 0x00000000e3000000| 0%| F| |TAMS 0x00000000e2f00000, 0x00000000e2f00000| Untracked
+| 48|0x00000000e3000000, 0x00000000e3000000, 0x00000000e3100000| 0%| F| |TAMS 0x00000000e3000000, 0x00000000e3000000| Untracked
+| 49|0x00000000e3100000, 0x00000000e3100000, 0x00000000e3200000| 0%| F| |TAMS 0x00000000e3100000, 0x00000000e3100000| Untracked
+| 50|0x00000000e3200000, 0x00000000e3200000, 0x00000000e3300000| 0%| F| |TAMS 0x00000000e3200000, 0x00000000e3200000| Untracked
+| 51|0x00000000e3300000, 0x00000000e3300000, 0x00000000e3400000| 0%| F| |TAMS 0x00000000e3300000, 0x00000000e3300000| Untracked
+| 52|0x00000000e3400000, 0x00000000e3400000, 0x00000000e3500000| 0%| F| |TAMS 0x00000000e3400000, 0x00000000e3400000| Untracked
+| 53|0x00000000e3500000, 0x00000000e3500000, 0x00000000e3600000| 0%| F| |TAMS 0x00000000e3500000, 0x00000000e3500000| Untracked
+| 54|0x00000000e3600000, 0x00000000e3600000, 0x00000000e3700000| 0%| F| |TAMS 0x00000000e3600000, 0x00000000e3600000| Untracked
+| 55|0x00000000e3700000, 0x00000000e3700000, 0x00000000e3800000| 0%| F| |TAMS 0x00000000e3700000, 0x00000000e3700000| Untracked
+| 56|0x00000000e3800000, 0x00000000e3800000, 0x00000000e3900000| 0%| F| |TAMS 0x00000000e3800000, 0x00000000e3800000| Untracked
+| 57|0x00000000e3900000, 0x00000000e3900000, 0x00000000e3a00000| 0%| F| |TAMS 0x00000000e3900000, 0x00000000e3900000| Untracked
+| 58|0x00000000e3a00000, 0x00000000e3a00000, 0x00000000e3b00000| 0%| F| |TAMS 0x00000000e3a00000, 0x00000000e3a00000| Untracked
+| 59|0x00000000e3b00000, 0x00000000e3b00000, 0x00000000e3c00000| 0%| F| |TAMS 0x00000000e3b00000, 0x00000000e3b00000| Untracked
+| 60|0x00000000e3c00000, 0x00000000e3c00000, 0x00000000e3d00000| 0%| F| |TAMS 0x00000000e3c00000, 0x00000000e3c00000| Untracked
+| 61|0x00000000e3d00000, 0x00000000e3d00000, 0x00000000e3e00000| 0%| F| |TAMS 0x00000000e3d00000, 0x00000000e3d00000| Untracked
+| 62|0x00000000e3e00000, 0x00000000e3e00000, 0x00000000e3f00000| 0%| F| |TAMS 0x00000000e3e00000, 0x00000000e3e00000| Untracked
+| 63|0x00000000e3f00000, 0x00000000e3f00000, 0x00000000e4000000| 0%| F| |TAMS 0x00000000e3f00000, 0x00000000e3f00000| Untracked
+| 64|0x00000000e4000000, 0x00000000e4000000, 0x00000000e4100000| 0%| F| |TAMS 0x00000000e4000000, 0x00000000e4000000| Untracked
+| 65|0x00000000e4100000, 0x00000000e4100000, 0x00000000e4200000| 0%| F| |TAMS 0x00000000e4100000, 0x00000000e4100000| Untracked
+| 66|0x00000000e4200000, 0x00000000e4200000, 0x00000000e4300000| 0%| F| |TAMS 0x00000000e4200000, 0x00000000e4200000| Untracked
+| 67|0x00000000e4300000, 0x00000000e4300000, 0x00000000e4400000| 0%| F| |TAMS 0x00000000e4300000, 0x00000000e4300000| Untracked
+| 68|0x00000000e4400000, 0x00000000e4400000, 0x00000000e4500000| 0%| F| |TAMS 0x00000000e4400000, 0x00000000e4400000| Untracked
+| 69|0x00000000e4500000, 0x00000000e4500000, 0x00000000e4600000| 0%| F| |TAMS 0x00000000e4500000, 0x00000000e4500000| Untracked
+| 70|0x00000000e4600000, 0x00000000e4600000, 0x00000000e4700000| 0%| F| |TAMS 0x00000000e4600000, 0x00000000e4600000| Untracked
+| 71|0x00000000e4700000, 0x00000000e4700000, 0x00000000e4800000| 0%| F| |TAMS 0x00000000e4700000, 0x00000000e4700000| Untracked
+| 72|0x00000000e4800000, 0x00000000e4800000, 0x00000000e4900000| 0%| F| |TAMS 0x00000000e4800000, 0x00000000e4800000| Untracked
+| 73|0x00000000e4900000, 0x00000000e4900000, 0x00000000e4a00000| 0%| F| |TAMS 0x00000000e4900000, 0x00000000e4900000| Untracked
+| 74|0x00000000e4a00000, 0x00000000e4a00000, 0x00000000e4b00000| 0%| F| |TAMS 0x00000000e4a00000, 0x00000000e4a00000| Untracked
+| 75|0x00000000e4b00000, 0x00000000e4b00000, 0x00000000e4c00000| 0%| F| |TAMS 0x00000000e4b00000, 0x00000000e4b00000| Untracked
+| 76|0x00000000e4c00000, 0x00000000e4c00000, 0x00000000e4d00000| 0%| F| |TAMS 0x00000000e4c00000, 0x00000000e4c00000| Untracked
+| 77|0x00000000e4d00000, 0x00000000e4d00000, 0x00000000e4e00000| 0%| F| |TAMS 0x00000000e4d00000, 0x00000000e4d00000| Untracked
+| 78|0x00000000e4e00000, 0x00000000e4e00000, 0x00000000e4f00000| 0%| F| |TAMS 0x00000000e4e00000, 0x00000000e4e00000| Untracked
+| 79|0x00000000e4f00000, 0x00000000e4f00000, 0x00000000e5000000| 0%| F| |TAMS 0x00000000e4f00000, 0x00000000e4f00000| Untracked
+| 80|0x00000000e5000000, 0x00000000e5000000, 0x00000000e5100000| 0%| F| |TAMS 0x00000000e5000000, 0x00000000e5000000| Untracked
+| 81|0x00000000e5100000, 0x00000000e5100000, 0x00000000e5200000| 0%| F| |TAMS 0x00000000e5100000, 0x00000000e5100000| Untracked
+| 82|0x00000000e5200000, 0x00000000e5200000, 0x00000000e5300000| 0%| F| |TAMS 0x00000000e5200000, 0x00000000e5200000| Untracked
+| 83|0x00000000e5300000, 0x00000000e5300000, 0x00000000e5400000| 0%| F| |TAMS 0x00000000e5300000, 0x00000000e5300000| Untracked
+| 84|0x00000000e5400000, 0x00000000e5400000, 0x00000000e5500000| 0%| F| |TAMS 0x00000000e5400000, 0x00000000e5400000| Untracked
+| 85|0x00000000e5500000, 0x00000000e5500000, 0x00000000e5600000| 0%| F| |TAMS 0x00000000e5500000, 0x00000000e5500000| Untracked
+| 86|0x00000000e5600000, 0x00000000e5600000, 0x00000000e5700000| 0%| F| |TAMS 0x00000000e5600000, 0x00000000e5600000| Untracked
+| 87|0x00000000e5700000, 0x00000000e5700000, 0x00000000e5800000| 0%| F| |TAMS 0x00000000e5700000, 0x00000000e5700000| Untracked
+| 88|0x00000000e5800000, 0x00000000e5800000, 0x00000000e5900000| 0%| F| |TAMS 0x00000000e5800000, 0x00000000e5800000| Untracked
+| 89|0x00000000e5900000, 0x00000000e5900000, 0x00000000e5a00000| 0%| F| |TAMS 0x00000000e5900000, 0x00000000e5900000| Untracked
+| 90|0x00000000e5a00000, 0x00000000e5a00000, 0x00000000e5b00000| 0%| F| |TAMS 0x00000000e5a00000, 0x00000000e5a00000| Untracked
+| 91|0x00000000e5b00000, 0x00000000e5b00000, 0x00000000e5c00000| 0%| F| |TAMS 0x00000000e5b00000, 0x00000000e5b00000| Untracked
+| 92|0x00000000e5c00000, 0x00000000e5c00000, 0x00000000e5d00000| 0%| F| |TAMS 0x00000000e5c00000, 0x00000000e5c00000| Untracked
+| 93|0x00000000e5d00000, 0x00000000e5d00000, 0x00000000e5e00000| 0%| F| |TAMS 0x00000000e5d00000, 0x00000000e5d00000| Untracked
+| 94|0x00000000e5e00000, 0x00000000e5e00000, 0x00000000e5f00000| 0%| F| |TAMS 0x00000000e5e00000, 0x00000000e5e00000| Untracked
+| 95|0x00000000e5f00000, 0x00000000e5f00000, 0x00000000e6000000| 0%| F| |TAMS 0x00000000e5f00000, 0x00000000e5f00000| Untracked
+| 96|0x00000000e6000000, 0x00000000e6000000, 0x00000000e6100000| 0%| F| |TAMS 0x00000000e6000000, 0x00000000e6000000| Untracked
+| 97|0x00000000e6100000, 0x00000000e6100000, 0x00000000e6200000| 0%| F| |TAMS 0x00000000e6100000, 0x00000000e6100000| Untracked
+| 98|0x00000000e6200000, 0x00000000e6200000, 0x00000000e6300000| 0%| F| |TAMS 0x00000000e6200000, 0x00000000e6200000| Untracked
+| 99|0x00000000e6300000, 0x00000000e6300000, 0x00000000e6400000| 0%| F| |TAMS 0x00000000e6300000, 0x00000000e6300000| Untracked
+| 100|0x00000000e6400000, 0x00000000e6400000, 0x00000000e6500000| 0%| F| |TAMS 0x00000000e6400000, 0x00000000e6400000| Untracked
+| 101|0x00000000e6500000, 0x00000000e6500000, 0x00000000e6600000| 0%| F| |TAMS 0x00000000e6500000, 0x00000000e6500000| Untracked
+| 102|0x00000000e6600000, 0x00000000e6600000, 0x00000000e6700000| 0%| F| |TAMS 0x00000000e6600000, 0x00000000e6600000| Untracked
+| 103|0x00000000e6700000, 0x00000000e6700000, 0x00000000e6800000| 0%| F| |TAMS 0x00000000e6700000, 0x00000000e6700000| Untracked
+| 104|0x00000000e6800000, 0x00000000e6800000, 0x00000000e6900000| 0%| F| |TAMS 0x00000000e6800000, 0x00000000e6800000| Untracked
+| 105|0x00000000e6900000, 0x00000000e6900000, 0x00000000e6a00000| 0%| F| |TAMS 0x00000000e6900000, 0x00000000e6900000| Untracked
+| 106|0x00000000e6a00000, 0x00000000e6a00000, 0x00000000e6b00000| 0%| F| |TAMS 0x00000000e6a00000, 0x00000000e6a00000| Untracked
+| 107|0x00000000e6b00000, 0x00000000e6b00000, 0x00000000e6c00000| 0%| F| |TAMS 0x00000000e6b00000, 0x00000000e6b00000| Untracked
+| 108|0x00000000e6c00000, 0x00000000e6c00000, 0x00000000e6d00000| 0%| F| |TAMS 0x00000000e6c00000, 0x00000000e6c00000| Untracked
+| 109|0x00000000e6d00000, 0x00000000e6d00000, 0x00000000e6e00000| 0%| F| |TAMS 0x00000000e6d00000, 0x00000000e6d00000| Untracked
+| 110|0x00000000e6e00000, 0x00000000e6e00000, 0x00000000e6f00000| 0%| F| |TAMS 0x00000000e6e00000, 0x00000000e6e00000| Untracked
+| 111|0x00000000e6f00000, 0x00000000e6f00000, 0x00000000e7000000| 0%| F| |TAMS 0x00000000e6f00000, 0x00000000e6f00000| Untracked
+| 112|0x00000000e7000000, 0x00000000e7000000, 0x00000000e7100000| 0%| F| |TAMS 0x00000000e7000000, 0x00000000e7000000| Untracked
+| 113|0x00000000e7100000, 0x00000000e7100000, 0x00000000e7200000| 0%| F| |TAMS 0x00000000e7100000, 0x00000000e7100000| Untracked
+| 114|0x00000000e7200000, 0x00000000e7200000, 0x00000000e7300000| 0%| F| |TAMS 0x00000000e7200000, 0x00000000e7200000| Untracked
+| 115|0x00000000e7300000, 0x00000000e7300000, 0x00000000e7400000| 0%| F| |TAMS 0x00000000e7300000, 0x00000000e7300000| Untracked
+| 116|0x00000000e7400000, 0x00000000e7400000, 0x00000000e7500000| 0%| F| |TAMS 0x00000000e7400000, 0x00000000e7400000| Untracked
+| 117|0x00000000e7500000, 0x00000000e7500000, 0x00000000e7600000| 0%| F| |TAMS 0x00000000e7500000, 0x00000000e7500000| Untracked
+| 118|0x00000000e7600000, 0x00000000e7600000, 0x00000000e7700000| 0%| F| |TAMS 0x00000000e7600000, 0x00000000e7600000| Untracked
+| 119|0x00000000e7700000, 0x00000000e7700000, 0x00000000e7800000| 0%| F| |TAMS 0x00000000e7700000, 0x00000000e7700000| Untracked
+| 120|0x00000000e7800000, 0x00000000e7800000, 0x00000000e7900000| 0%| F| |TAMS 0x00000000e7800000, 0x00000000e7800000| Untracked
+| 121|0x00000000e7900000, 0x00000000e7900000, 0x00000000e7a00000| 0%| F| |TAMS 0x00000000e7900000, 0x00000000e7900000| Untracked
+| 122|0x00000000e7a00000, 0x00000000e7a00000, 0x00000000e7b00000| 0%| F| |TAMS 0x00000000e7a00000, 0x00000000e7a00000| Untracked
+| 123|0x00000000e7b00000, 0x00000000e7b00000, 0x00000000e7c00000| 0%| F| |TAMS 0x00000000e7b00000, 0x00000000e7b00000| Untracked
+| 124|0x00000000e7c00000, 0x00000000e7c00000, 0x00000000e7d00000| 0%| F| |TAMS 0x00000000e7c00000, 0x00000000e7c00000| Untracked
+| 125|0x00000000e7d00000, 0x00000000e7d00000, 0x00000000e7e00000| 0%| F| |TAMS 0x00000000e7d00000, 0x00000000e7d00000| Untracked
+| 126|0x00000000e7e00000, 0x00000000e7e00000, 0x00000000e7f00000| 0%| F| |TAMS 0x00000000e7e00000, 0x00000000e7e00000| Untracked
+| 127|0x00000000e7f00000, 0x00000000e7f00000, 0x00000000e8000000| 0%| F| |TAMS 0x00000000e7f00000, 0x00000000e7f00000| Untracked
+| 128|0x00000000e8000000, 0x00000000e8000000, 0x00000000e8100000| 0%| F| |TAMS 0x00000000e8000000, 0x00000000e8000000| Untracked
+| 129|0x00000000e8100000, 0x00000000e8100000, 0x00000000e8200000| 0%| F| |TAMS 0x00000000e8100000, 0x00000000e8100000| Untracked
+| 130|0x00000000e8200000, 0x00000000e8200000, 0x00000000e8300000| 0%| F| |TAMS 0x00000000e8200000, 0x00000000e8200000| Untracked
+| 131|0x00000000e8300000, 0x00000000e8300000, 0x00000000e8400000| 0%| F| |TAMS 0x00000000e8300000, 0x00000000e8300000| Untracked
+| 132|0x00000000e8400000, 0x00000000e8400000, 0x00000000e8500000| 0%| F| |TAMS 0x00000000e8400000, 0x00000000e8400000| Untracked
+| 133|0x00000000e8500000, 0x00000000e8500000, 0x00000000e8600000| 0%| F| |TAMS 0x00000000e8500000, 0x00000000e8500000| Untracked
+| 134|0x00000000e8600000, 0x00000000e8600000, 0x00000000e8700000| 0%| F| |TAMS 0x00000000e8600000, 0x00000000e8600000| Untracked
+| 135|0x00000000e8700000, 0x00000000e8700000, 0x00000000e8800000| 0%| F| |TAMS 0x00000000e8700000, 0x00000000e8700000| Untracked
+| 136|0x00000000e8800000, 0x00000000e8800000, 0x00000000e8900000| 0%| F| |TAMS 0x00000000e8800000, 0x00000000e8800000| Untracked
+| 137|0x00000000e8900000, 0x00000000e8900000, 0x00000000e8a00000| 0%| F| |TAMS 0x00000000e8900000, 0x00000000e8900000| Untracked
+| 138|0x00000000e8a00000, 0x00000000e8a00000, 0x00000000e8b00000| 0%| F| |TAMS 0x00000000e8a00000, 0x00000000e8a00000| Untracked
+| 139|0x00000000e8b00000, 0x00000000e8b00000, 0x00000000e8c00000| 0%| F| |TAMS 0x00000000e8b00000, 0x00000000e8b00000| Untracked
+| 140|0x00000000e8c00000, 0x00000000e8c00000, 0x00000000e8d00000| 0%| F| |TAMS 0x00000000e8c00000, 0x00000000e8c00000| Untracked
+| 141|0x00000000e8d00000, 0x00000000e8d00000, 0x00000000e8e00000| 0%| F| |TAMS 0x00000000e8d00000, 0x00000000e8d00000| Untracked
+| 142|0x00000000e8e00000, 0x00000000e8e00000, 0x00000000e8f00000| 0%| F| |TAMS 0x00000000e8e00000, 0x00000000e8e00000| Untracked
+| 143|0x00000000e8f00000, 0x00000000e8f00000, 0x00000000e9000000| 0%| F| |TAMS 0x00000000e8f00000, 0x00000000e8f00000| Untracked
+| 144|0x00000000e9000000, 0x00000000e9000000, 0x00000000e9100000| 0%| F| |TAMS 0x00000000e9000000, 0x00000000e9000000| Untracked
+| 145|0x00000000e9100000, 0x00000000e9100000, 0x00000000e9200000| 0%| F| |TAMS 0x00000000e9100000, 0x00000000e9100000| Untracked
+| 146|0x00000000e9200000, 0x00000000e9200000, 0x00000000e9300000| 0%| F| |TAMS 0x00000000e9200000, 0x00000000e9200000| Untracked
+| 147|0x00000000e9300000, 0x00000000e9300000, 0x00000000e9400000| 0%| F| |TAMS 0x00000000e9300000, 0x00000000e9300000| Untracked
+| 148|0x00000000e9400000, 0x00000000e9400000, 0x00000000e9500000| 0%| F| |TAMS 0x00000000e9400000, 0x00000000e9400000| Untracked
+| 149|0x00000000e9500000, 0x00000000e9500000, 0x00000000e9600000| 0%| F| |TAMS 0x00000000e9500000, 0x00000000e9500000| Untracked
+| 150|0x00000000e9600000, 0x00000000e9600000, 0x00000000e9700000| 0%| F| |TAMS 0x00000000e9600000, 0x00000000e9600000| Untracked
+| 151|0x00000000e9700000, 0x00000000e9700000, 0x00000000e9800000| 0%| F| |TAMS 0x00000000e9700000, 0x00000000e9700000| Untracked
+| 152|0x00000000e9800000, 0x00000000e9800000, 0x00000000e9900000| 0%| F| |TAMS 0x00000000e9800000, 0x00000000e9800000| Untracked
+| 153|0x00000000e9900000, 0x00000000e9900000, 0x00000000e9a00000| 0%| F| |TAMS 0x00000000e9900000, 0x00000000e9900000| Untracked
+| 154|0x00000000e9a00000, 0x00000000e9a00000, 0x00000000e9b00000| 0%| F| |TAMS 0x00000000e9a00000, 0x00000000e9a00000| Untracked
+| 155|0x00000000e9b00000, 0x00000000e9b00000, 0x00000000e9c00000| 0%| F| |TAMS 0x00000000e9b00000, 0x00000000e9b00000| Untracked
+| 156|0x00000000e9c00000, 0x00000000e9c00000, 0x00000000e9d00000| 0%| F| |TAMS 0x00000000e9c00000, 0x00000000e9c00000| Untracked
+| 157|0x00000000e9d00000, 0x00000000e9d00000, 0x00000000e9e00000| 0%| F| |TAMS 0x00000000e9d00000, 0x00000000e9d00000| Untracked
+| 158|0x00000000e9e00000, 0x00000000e9e00000, 0x00000000e9f00000| 0%| F| |TAMS 0x00000000e9e00000, 0x00000000e9e00000| Untracked
+| 159|0x00000000e9f00000, 0x00000000e9f00000, 0x00000000ea000000| 0%| F| |TAMS 0x00000000e9f00000, 0x00000000e9f00000| Untracked
+| 160|0x00000000ea000000, 0x00000000ea000000, 0x00000000ea100000| 0%| F| |TAMS 0x00000000ea000000, 0x00000000ea000000| Untracked
+| 161|0x00000000ea100000, 0x00000000ea100000, 0x00000000ea200000| 0%| F| |TAMS 0x00000000ea100000, 0x00000000ea100000| Untracked
+| 162|0x00000000ea200000, 0x00000000ea200000, 0x00000000ea300000| 0%| F| |TAMS 0x00000000ea200000, 0x00000000ea200000| Untracked
+| 163|0x00000000ea300000, 0x00000000ea300000, 0x00000000ea400000| 0%| F| |TAMS 0x00000000ea300000, 0x00000000ea300000| Untracked
+| 164|0x00000000ea400000, 0x00000000ea400000, 0x00000000ea500000| 0%| F| |TAMS 0x00000000ea400000, 0x00000000ea400000| Untracked
+| 165|0x00000000ea500000, 0x00000000ea500000, 0x00000000ea600000| 0%| F| |TAMS 0x00000000ea500000, 0x00000000ea500000| Untracked
+| 166|0x00000000ea600000, 0x00000000ea600000, 0x00000000ea700000| 0%| F| |TAMS 0x00000000ea600000, 0x00000000ea600000| Untracked
+| 167|0x00000000ea700000, 0x00000000ea700000, 0x00000000ea800000| 0%| F| |TAMS 0x00000000ea700000, 0x00000000ea700000| Untracked
+| 168|0x00000000ea800000, 0x00000000ea800000, 0x00000000ea900000| 0%| F| |TAMS 0x00000000ea800000, 0x00000000ea800000| Untracked
+| 169|0x00000000ea900000, 0x00000000ea900000, 0x00000000eaa00000| 0%| F| |TAMS 0x00000000ea900000, 0x00000000ea900000| Untracked
+| 170|0x00000000eaa00000, 0x00000000eaa00000, 0x00000000eab00000| 0%| F| |TAMS 0x00000000eaa00000, 0x00000000eaa00000| Untracked
+| 171|0x00000000eab00000, 0x00000000eab00000, 0x00000000eac00000| 0%| F| |TAMS 0x00000000eab00000, 0x00000000eab00000| Untracked
+| 172|0x00000000eac00000, 0x00000000eac00000, 0x00000000ead00000| 0%| F| |TAMS 0x00000000eac00000, 0x00000000eac00000| Untracked
+| 173|0x00000000ead00000, 0x00000000ead00000, 0x00000000eae00000| 0%| F| |TAMS 0x00000000ead00000, 0x00000000ead00000| Untracked
+| 174|0x00000000eae00000, 0x00000000eae00000, 0x00000000eaf00000| 0%| F| |TAMS 0x00000000eae00000, 0x00000000eae00000| Untracked
+| 175|0x00000000eaf00000, 0x00000000eaf00000, 0x00000000eb000000| 0%| F| |TAMS 0x00000000eaf00000, 0x00000000eaf00000| Untracked
+| 176|0x00000000eb000000, 0x00000000eb000000, 0x00000000eb100000| 0%| F| |TAMS 0x00000000eb000000, 0x00000000eb000000| Untracked
+| 177|0x00000000eb100000, 0x00000000eb100000, 0x00000000eb200000| 0%| F| |TAMS 0x00000000eb100000, 0x00000000eb100000| Untracked
+| 178|0x00000000eb200000, 0x00000000eb200000, 0x00000000eb300000| 0%| F| |TAMS 0x00000000eb200000, 0x00000000eb200000| Untracked
+| 179|0x00000000eb300000, 0x00000000eb300000, 0x00000000eb400000| 0%| F| |TAMS 0x00000000eb300000, 0x00000000eb300000| Untracked
+| 180|0x00000000eb400000, 0x00000000eb400000, 0x00000000eb500000| 0%| F| |TAMS 0x00000000eb400000, 0x00000000eb400000| Untracked
+| 181|0x00000000eb500000, 0x00000000eb500000, 0x00000000eb600000| 0%| F| |TAMS 0x00000000eb500000, 0x00000000eb500000| Untracked
+| 182|0x00000000eb600000, 0x00000000eb600000, 0x00000000eb700000| 0%| F| |TAMS 0x00000000eb600000, 0x00000000eb600000| Untracked
+| 183|0x00000000eb700000, 0x00000000eb700000, 0x00000000eb800000| 0%| F| |TAMS 0x00000000eb700000, 0x00000000eb700000| Untracked
+| 184|0x00000000eb800000, 0x00000000eb800000, 0x00000000eb900000| 0%| F| |TAMS 0x00000000eb800000, 0x00000000eb800000| Untracked
+| 185|0x00000000eb900000, 0x00000000eb900000, 0x00000000eba00000| 0%| F| |TAMS 0x00000000eb900000, 0x00000000eb900000| Untracked
+| 186|0x00000000eba00000, 0x00000000eba00000, 0x00000000ebb00000| 0%| F| |TAMS 0x00000000eba00000, 0x00000000eba00000| Untracked
+| 187|0x00000000ebb00000, 0x00000000ebb00000, 0x00000000ebc00000| 0%| F| |TAMS 0x00000000ebb00000, 0x00000000ebb00000| Untracked
+| 188|0x00000000ebc00000, 0x00000000ebc00000, 0x00000000ebd00000| 0%| F| |TAMS 0x00000000ebc00000, 0x00000000ebc00000| Untracked
+| 189|0x00000000ebd00000, 0x00000000ebd00000, 0x00000000ebe00000| 0%| F| |TAMS 0x00000000ebd00000, 0x00000000ebd00000| Untracked
+| 190|0x00000000ebe00000, 0x00000000ebe00000, 0x00000000ebf00000| 0%| F| |TAMS 0x00000000ebe00000, 0x00000000ebe00000| Untracked
+| 191|0x00000000ebf00000, 0x00000000ebf00000, 0x00000000ec000000| 0%| F| |TAMS 0x00000000ebf00000, 0x00000000ebf00000| Untracked
+| 192|0x00000000ec000000, 0x00000000ec000000, 0x00000000ec100000| 0%| F| |TAMS 0x00000000ec000000, 0x00000000ec000000| Untracked
+| 193|0x00000000ec100000, 0x00000000ec100000, 0x00000000ec200000| 0%| F| |TAMS 0x00000000ec100000, 0x00000000ec100000| Untracked
+| 194|0x00000000ec200000, 0x00000000ec200000, 0x00000000ec300000| 0%| F| |TAMS 0x00000000ec200000, 0x00000000ec200000| Untracked
+| 195|0x00000000ec300000, 0x00000000ec300000, 0x00000000ec400000| 0%| F| |TAMS 0x00000000ec300000, 0x00000000ec300000| Untracked
+| 196|0x00000000ec400000, 0x00000000ec400000, 0x00000000ec500000| 0%| F| |TAMS 0x00000000ec400000, 0x00000000ec400000| Untracked
+| 197|0x00000000ec500000, 0x00000000ec500000, 0x00000000ec600000| 0%| F| |TAMS 0x00000000ec500000, 0x00000000ec500000| Untracked
+| 198|0x00000000ec600000, 0x00000000ec600000, 0x00000000ec700000| 0%| F| |TAMS 0x00000000ec600000, 0x00000000ec600000| Untracked
+| 199|0x00000000ec700000, 0x00000000ec700000, 0x00000000ec800000| 0%| F| |TAMS 0x00000000ec700000, 0x00000000ec700000| Untracked
+| 200|0x00000000ec800000, 0x00000000ec800000, 0x00000000ec900000| 0%| F| |TAMS 0x00000000ec800000, 0x00000000ec800000| Untracked
+| 201|0x00000000ec900000, 0x00000000ec900000, 0x00000000eca00000| 0%| F| |TAMS 0x00000000ec900000, 0x00000000ec900000| Untracked
+| 202|0x00000000eca00000, 0x00000000eca00000, 0x00000000ecb00000| 0%| F| |TAMS 0x00000000eca00000, 0x00000000eca00000| Untracked
+| 203|0x00000000ecb00000, 0x00000000ecb00000, 0x00000000ecc00000| 0%| F| |TAMS 0x00000000ecb00000, 0x00000000ecb00000| Untracked
+| 204|0x00000000ecc00000, 0x00000000ecc00000, 0x00000000ecd00000| 0%| F| |TAMS 0x00000000ecc00000, 0x00000000ecc00000| Untracked
+| 205|0x00000000ecd00000, 0x00000000ecd00000, 0x00000000ece00000| 0%| F| |TAMS 0x00000000ecd00000, 0x00000000ecd00000| Untracked
+| 206|0x00000000ece00000, 0x00000000ece00000, 0x00000000ecf00000| 0%| F| |TAMS 0x00000000ece00000, 0x00000000ece00000| Untracked
+| 207|0x00000000ecf00000, 0x00000000ecf00000, 0x00000000ed000000| 0%| F| |TAMS 0x00000000ecf00000, 0x00000000ecf00000| Untracked
+| 208|0x00000000ed000000, 0x00000000ed000000, 0x00000000ed100000| 0%| F| |TAMS 0x00000000ed000000, 0x00000000ed000000| Untracked
+| 209|0x00000000ed100000, 0x00000000ed100000, 0x00000000ed200000| 0%| F| |TAMS 0x00000000ed100000, 0x00000000ed100000| Untracked
+| 210|0x00000000ed200000, 0x00000000ed200000, 0x00000000ed300000| 0%| F| |TAMS 0x00000000ed200000, 0x00000000ed200000| Untracked
+| 211|0x00000000ed300000, 0x00000000ed300000, 0x00000000ed400000| 0%| F| |TAMS 0x00000000ed300000, 0x00000000ed300000| Untracked
+| 212|0x00000000ed400000, 0x00000000ed400000, 0x00000000ed500000| 0%| F| |TAMS 0x00000000ed400000, 0x00000000ed400000| Untracked
+| 213|0x00000000ed500000, 0x00000000ed500000, 0x00000000ed600000| 0%| F| |TAMS 0x00000000ed500000, 0x00000000ed500000| Untracked
+| 214|0x00000000ed600000, 0x00000000ed600000, 0x00000000ed700000| 0%| F| |TAMS 0x00000000ed600000, 0x00000000ed600000| Untracked
+| 215|0x00000000ed700000, 0x00000000ed700000, 0x00000000ed800000| 0%| F| |TAMS 0x00000000ed700000, 0x00000000ed700000| Untracked
+| 216|0x00000000ed800000, 0x00000000ed800000, 0x00000000ed900000| 0%| F| |TAMS 0x00000000ed800000, 0x00000000ed800000| Untracked
+| 217|0x00000000ed900000, 0x00000000ed900000, 0x00000000eda00000| 0%| F| |TAMS 0x00000000ed900000, 0x00000000ed900000| Untracked
+| 218|0x00000000eda00000, 0x00000000eda00000, 0x00000000edb00000| 0%| F| |TAMS 0x00000000eda00000, 0x00000000eda00000| Untracked
+| 219|0x00000000edb00000, 0x00000000edb00000, 0x00000000edc00000| 0%| F| |TAMS 0x00000000edb00000, 0x00000000edb00000| Untracked
+| 220|0x00000000edc00000, 0x00000000edc00000, 0x00000000edd00000| 0%| F| |TAMS 0x00000000edc00000, 0x00000000edc00000| Untracked
+| 221|0x00000000edd00000, 0x00000000edd00000, 0x00000000ede00000| 0%| F| |TAMS 0x00000000edd00000, 0x00000000edd00000| Untracked
+| 222|0x00000000ede00000, 0x00000000ede00000, 0x00000000edf00000| 0%| F| |TAMS 0x00000000ede00000, 0x00000000ede00000| Untracked
+| 223|0x00000000edf00000, 0x00000000edf00000, 0x00000000ee000000| 0%| F| |TAMS 0x00000000edf00000, 0x00000000edf00000| Untracked
+| 224|0x00000000ee000000, 0x00000000ee000000, 0x00000000ee100000| 0%| F| |TAMS 0x00000000ee000000, 0x00000000ee000000| Untracked
+| 225|0x00000000ee100000, 0x00000000ee100000, 0x00000000ee200000| 0%| F| |TAMS 0x00000000ee100000, 0x00000000ee100000| Untracked
+| 226|0x00000000ee200000, 0x00000000ee200000, 0x00000000ee300000| 0%| F| |TAMS 0x00000000ee200000, 0x00000000ee200000| Untracked
+| 227|0x00000000ee300000, 0x00000000ee300000, 0x00000000ee400000| 0%| F| |TAMS 0x00000000ee300000, 0x00000000ee300000| Untracked
+| 228|0x00000000ee400000, 0x00000000ee400000, 0x00000000ee500000| 0%| F| |TAMS 0x00000000ee400000, 0x00000000ee400000| Untracked
+| 229|0x00000000ee500000, 0x00000000ee500000, 0x00000000ee600000| 0%| F| |TAMS 0x00000000ee500000, 0x00000000ee500000| Untracked
+| 230|0x00000000ee600000, 0x00000000ee600000, 0x00000000ee700000| 0%| F| |TAMS 0x00000000ee600000, 0x00000000ee600000| Untracked
+| 231|0x00000000ee700000, 0x00000000ee700000, 0x00000000ee800000| 0%| F| |TAMS 0x00000000ee700000, 0x00000000ee700000| Untracked
+| 232|0x00000000ee800000, 0x00000000ee800000, 0x00000000ee900000| 0%| F| |TAMS 0x00000000ee800000, 0x00000000ee800000| Untracked
+| 233|0x00000000ee900000, 0x00000000ee900000, 0x00000000eea00000| 0%| F| |TAMS 0x00000000ee900000, 0x00000000ee900000| Untracked
+| 234|0x00000000eea00000, 0x00000000eea00000, 0x00000000eeb00000| 0%| F| |TAMS 0x00000000eea00000, 0x00000000eea00000| Untracked
+| 235|0x00000000eeb00000, 0x00000000eeb00000, 0x00000000eec00000| 0%| F| |TAMS 0x00000000eeb00000, 0x00000000eeb00000| Untracked
+| 236|0x00000000eec00000, 0x00000000eec00000, 0x00000000eed00000| 0%| F| |TAMS 0x00000000eec00000, 0x00000000eec00000| Untracked
+| 237|0x00000000eed00000, 0x00000000eed00000, 0x00000000eee00000| 0%| F| |TAMS 0x00000000eed00000, 0x00000000eed00000| Untracked
+| 238|0x00000000eee00000, 0x00000000eee00000, 0x00000000eef00000| 0%| F| |TAMS 0x00000000eee00000, 0x00000000eee00000| Untracked
+| 239|0x00000000eef00000, 0x00000000eef00000, 0x00000000ef000000| 0%| F| |TAMS 0x00000000eef00000, 0x00000000eef00000| Untracked
+| 240|0x00000000ef000000, 0x00000000ef000000, 0x00000000ef100000| 0%| F| |TAMS 0x00000000ef000000, 0x00000000ef000000| Untracked
+| 241|0x00000000ef100000, 0x00000000ef100000, 0x00000000ef200000| 0%| F| |TAMS 0x00000000ef100000, 0x00000000ef100000| Untracked
+| 242|0x00000000ef200000, 0x00000000ef200000, 0x00000000ef300000| 0%| F| |TAMS 0x00000000ef200000, 0x00000000ef200000| Untracked
+| 243|0x00000000ef300000, 0x00000000ef300000, 0x00000000ef400000| 0%| F| |TAMS 0x00000000ef300000, 0x00000000ef300000| Untracked
+| 244|0x00000000ef400000, 0x00000000ef400000, 0x00000000ef500000| 0%| F| |TAMS 0x00000000ef400000, 0x00000000ef400000| Untracked
+| 245|0x00000000ef500000, 0x00000000ef500000, 0x00000000ef600000| 0%| F| |TAMS 0x00000000ef500000, 0x00000000ef500000| Untracked
+| 246|0x00000000ef600000, 0x00000000ef63c390, 0x00000000ef700000| 23%| S|CS|TAMS 0x00000000ef600000, 0x00000000ef600000| Complete
+| 247|0x00000000ef700000, 0x00000000ef800000, 0x00000000ef800000|100%| S|CS|TAMS 0x00000000ef700000, 0x00000000ef700000| Complete
+| 248|0x00000000ef800000, 0x00000000ef900000, 0x00000000ef900000|100%| S|CS|TAMS 0x00000000ef800000, 0x00000000ef800000| Complete
+| 249|0x00000000ef900000, 0x00000000efa00000, 0x00000000efa00000|100%| S|CS|TAMS 0x00000000ef900000, 0x00000000ef900000| Complete
+| 250|0x00000000efa00000, 0x00000000efa00000, 0x00000000efb00000| 0%| F| |TAMS 0x00000000efa00000, 0x00000000efa00000| Untracked
+| 251|0x00000000efb00000, 0x00000000efb00000, 0x00000000efc00000| 0%| F| |TAMS 0x00000000efb00000, 0x00000000efb00000| Untracked
+| 252|0x00000000efc00000, 0x00000000efc00000, 0x00000000efd00000| 0%| F| |TAMS 0x00000000efc00000, 0x00000000efc00000| Untracked
+| 253|0x00000000efd00000, 0x00000000efd00000, 0x00000000efe00000| 0%| F| |TAMS 0x00000000efd00000, 0x00000000efd00000| Untracked
+| 254|0x00000000efe00000, 0x00000000efe00000, 0x00000000eff00000| 0%| F| |TAMS 0x00000000efe00000, 0x00000000efe00000| Untracked
+| 255|0x00000000eff00000, 0x00000000eff00000, 0x00000000f0000000| 0%| F| |TAMS 0x00000000eff00000, 0x00000000eff00000| Untracked
+
+Card table byte_map: [0x0000023179c90000,0x0000023179d90000] _byte_map_base: 0x0000023179590000
+
+Marking Bits (Prev, Next): (CMBitMap*) 0x0000023179bd9908, (CMBitMap*) 0x0000023179bd9940
+ Prev Bits: [0x0000023179e90000, 0x000002317a690000)
+ Next Bits: [0x000002317a690000, 0x000002317ae90000)
+
+Polling page: 0x0000023179390000
+
+Metaspace:
+
+Usage:
+ Non-class: 16.70 MB capacity, 16.40 MB ( 98%) used, 266.47 KB ( 2%) free+waste, 34.06 KB ( <1%) overhead.
+ Class: 2.41 MB capacity, 2.24 MB ( 93%) used, 152.52 KB ( 6%) free+waste, 16.56 KB ( <1%) overhead.
+ Both: 19.10 MB capacity, 18.64 MB ( 98%) used, 418.99 KB ( 2%) free+waste, 50.63 KB ( <1%) overhead.
+
+Virtual space:
+ Non-class space: 28.00 MB reserved, 16.75 MB ( 60%) committed
+ Class space: 248.00 MB reserved, 2.50 MB ( 1%) committed
+ Both: 276.00 MB reserved, 19.25 MB ( 7%) committed
+
+Chunk freelists:
+ Non-Class: 7.00 KB
+ Class: 0 bytes
+ Both: 7.00 KB
+
+CodeHeap 'non-profiled nmethods': size=120064Kb used=823Kb max_used=823Kb free=119240Kb
+ bounds [0x000002310fd10000, 0x000002310ff80000, 0x0000023117250000]
+CodeHeap 'profiled nmethods': size=120000Kb used=3602Kb max_used=3619Kb free=116397Kb
+ bounds [0x00000231087e0000, 0x0000023108b70000, 0x000002310fd10000]
+CodeHeap 'non-nmethods': size=5696Kb used=1206Kb max_used=1221Kb free=4490Kb
+ bounds [0x0000023108250000, 0x00000231084c0000, 0x00000231087e0000]
+ total_blobs=2643 nmethods=1671 adapters=363
+ compilation: enabled
+ stopped_count=0, restarted_count=0
+ full_count=0
+
+Compilation events (10 events):
+Event: 3.626 Thread 0x000002317dd2b000 nmethod 1787 0x00000231088a8910 code [0x00000231088a8b00, 0x00000231088a9190]
+Event: 3.626 Thread 0x000002317dd2b000 1789 3 java.lang.CharacterDataLatin1::digit (32 bytes)
+Event: 3.626 Thread 0x000002317dd2b000 nmethod 1789 0x000002310887ac10 code [0x000002310887ade0, 0x000002310887b078]
+Event: 3.626 Thread 0x000002317dd2b000 1783 3 java.lang.Character::digit (6 bytes)
+Event: 3.626 Thread 0x000002317dd2b000 nmethod 1783 0x000002310887eb10 code [0x000002310887ece0, 0x000002310887ef80]
+Event: 3.626 Thread 0x000002317dd2b000 1790 3 java.lang.Integer::parseInt (7 bytes)
+Event: 3.626 Thread 0x000002317dd2b000 nmethod 1790 0x0000023108868110 code [0x00000231088682c0, 0x0000023108868450]
+Event: 3.626 Thread 0x000002317dd2b000 1786 3 java.lang.Character::digit (10 bytes)
+Event: 3.626 Thread 0x000002317dd2b000 nmethod 1786 0x0000023108880590 code [0x0000023108880760, 0x00000231088809a0]
+Event: 3.626 Thread 0x000002317dd2b000 1780 3 java.util.AbstractList::subListRangeCheck (110 bytes)
+
+GC Heap History (10 events):
+Event: 0.756 GC heap before
+{Heap before GC invocations=0 (full 0):
+ garbage-first heap total 262144K, used 19456K [0x00000000e0000000, 0x0000000100000000)
+ region size 1024K, 14 young (14336K), 0 survivors (0K)
+ Metaspace used 7497K, capacity 7679K, committed 7936K, reserved 262144K
+ class space used 685K, capacity 748K, committed 768K, reserved 253952K
+}
+Event: 0.760 GC heap after
+{Heap after GC invocations=1 (full 0):
+ garbage-first heap total 262144K, used 7875K [0x00000000e0000000, 0x0000000100000000)
+ region size 1024K, 2 young (2048K), 2 survivors (2048K)
+ Metaspace used 7497K, capacity 7679K, committed 7936K, reserved 262144K
+ class space used 685K, capacity 748K, committed 768K, reserved 253952K
+}
+Event: 1.201 GC heap before
+{Heap before GC invocations=1 (full 0):
+ garbage-first heap total 262144K, used 18115K [0x00000000e0000000, 0x0000000100000000)
+ region size 1024K, 12 young (12288K), 2 survivors (2048K)
+ Metaspace used 10686K, capacity 11015K, committed 11264K, reserved 264192K
+ class space used 1118K, capacity 1201K, committed 1280K, reserved 253952K
+}
+Event: 1.204 GC heap after
+{Heap after GC invocations=2 (full 0):
+ garbage-first heap total 262144K, used 8798K [0x00000000e0000000, 0x0000000100000000)
+ region size 1024K, 1 young (1024K), 1 survivors (1024K)
+ Metaspace used 10686K, capacity 11015K, committed 11264K, reserved 264192K
+ class space used 1118K, capacity 1201K, committed 1280K, reserved 253952K
+}
+Event: 1.686 GC heap before
+{Heap before GC invocations=2 (full 0):
+ garbage-first heap total 262144K, used 34398K [0x00000000e0000000, 0x0000000100000000)
+ region size 1024K, 27 young (27648K), 1 survivors (1024K)
+ Metaspace used 10962K, capacity 11275K, committed 11520K, reserved 264192K
+ class space used 1133K, capacity 1202K, committed 1280K, reserved 253952K
+}
+Event: 1.689 GC heap after
+{Heap after GC invocations=3 (full 0):
+ garbage-first heap total 262144K, used 12608K [0x00000000e0000000, 0x0000000100000000)
+ region size 1024K, 4 young (4096K), 4 survivors (4096K)
+ Metaspace used 10962K, capacity 11275K, committed 11520K, reserved 264192K
+ class space used 1133K, capacity 1202K, committed 1280K, reserved 253952K
+}
+Event: 3.513 GC heap before
+{Heap before GC invocations=3 (full 0):
+ garbage-first heap total 262144K, used 51520K [0x00000000e0000000, 0x0000000100000000)
+ region size 1024K, 42 young (43008K), 4 survivors (4096K)
+ Metaspace used 18068K, capacity 18578K, committed 18816K, reserved 270336K
+ class space used 2156K, capacity 2328K, committed 2432K, reserved 253952K
+}
+Event: 3.520 GC heap after
+{Heap after GC invocations=4 (full 0):
+ garbage-first heap total 262144K, used 15555K [0x00000000e0000000, 0x0000000100000000)
+ region size 1024K, 3 young (3072K), 3 survivors (3072K)
+ Metaspace used 18068K, capacity 18578K, committed 18816K, reserved 270336K
+ class space used 2156K, capacity 2328K, committed 2432K, reserved 253952K
+}
+Event: 3.627 GC heap before
+{Heap before GC invocations=4 (full 0):
+ garbage-first heap total 262144K, used 20675K [0x00000000e0000000, 0x0000000100000000)
+ region size 1024K, 9 young (9216K), 3 survivors (3072K)
+ Metaspace used 19091K, capacity 19561K, committed 19712K, reserved 280576K
+ class space used 2295K, capacity 2465K, committed 2560K, reserved 253952K
+}
+Event: 3.631 GC heap after
+{Heap after GC invocations=5 (full 0):
+ garbage-first heap total 262144K, used 15795K [0x00000000e0000000, 0x0000000100000000)
+ region size 1024K, 4 young (4096K), 4 survivors (4096K)
+ Metaspace used 19091K, capacity 19561K, committed 19712K, reserved 280576K
+ class space used 2295K, capacity 2465K, committed 2560K, reserved 253952K
+}
+
+Deoptimization events (10 events):
+Event: 3.220 Thread 0x0000023179bb3000 Uncommon trap: reason=unstable_if action=reinterpret pc=0x000002310fd22b5c method=java.lang.StringUTF16.compress([CI[BII)I @ 20 c2
+Event: 3.242 Thread 0x000002317f2d0800 Uncommon trap: reason=bimorphic_or_optimized_type_check action=maybe_recompile pc=0x000002310fd73a50 method=java.util.AbstractList$Itr.hasNext()Z @ 8 c2
+Event: 3.242 Thread 0x000002317f2d0800 Uncommon trap: reason=bimorphic_or_optimized_type_check action=maybe_recompile pc=0x000002310fd742b0 method=java.util.AbstractList$Itr.next()Ljava/lang/Object; @ 14 c2
+Event: 3.273 Thread 0x000002317f330800 Uncommon trap: reason=unstable_if action=reinterpret pc=0x000002310fda36a0 method=java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object; @ 231 c2
+Event: 3.334 Thread 0x000002317f484000 Uncommon trap: reason=bimorphic_or_optimized_type_check action=maybe_recompile pc=0x000002310fdb8a2c method=java.util.HashMap.putVal(ILjava/lang/Object;Ljava/lang/Object;ZZ)Ljava/lang/Object; @ 253 c2
+Event: 3.335 Thread 0x000002317f484000 Uncommon trap: reason=bimorphic_or_optimized_type_check action=maybe_recompile pc=0x000002310fdb8a2c method=java.util.HashMap.putVal(ILjava/lang/Object;Ljava/lang/Object;ZZ)Ljava/lang/Object; @ 253 c2
+Event: 3.335 Thread 0x000002317f484000 Uncommon trap: reason=bimorphic_or_optimized_type_check action=maybe_recompile pc=0x000002310fdb8a2c method=java.util.HashMap.putVal(ILjava/lang/Object;Ljava/lang/Object;ZZ)Ljava/lang/Object; @ 253 c2
+Event: 3.335 Thread 0x000002317f484000 Uncommon trap: reason=bimorphic_or_optimized_type_check action=maybe_recompile pc=0x000002310fdb8a2c method=java.util.HashMap.putVal(ILjava/lang/Object;Ljava/lang/Object;ZZ)Ljava/lang/Object; @ 253 c2
+Event: 3.587 Thread 0x000002317f484000 Uncommon trap: reason=unstable_if action=reinterpret pc=0x000002310fd73044 method=java.util.regex.Matcher.reset()Ljava/util/regex/Matcher; @ 71 c2
+Event: 3.588 Thread 0x000002317f484000 Uncommon trap: reason=unstable_if action=reinterpret pc=0x000002310fd681c4 method=java.util.regex.Matcher.reset()Ljava/util/regex/Matcher; @ 71 c2
+
+Classes redefined (0 events):
+No events
+
+Internal exceptions (10 events):
+Event: 3.279 Thread 0x000002317f330800 Exception > (0x00000000ee7fa3c0) thrown at [t:/workspace/open/src/hotspot/share/prims/jni.cpp, line 1364]
+Event: 3.294 Thread 0x000002317f330800 Exception > (0x00000000ee643ac0) thrown at [t:/workspace/open/src/hotspot/share/prims/jni.cpp, line 1364]
+Event: 3.300 Thread 0x000002317f330800 Exception > (0x00000000ee67fb28) thrown at [t:/workspace/open/src/hotspot/share/prims/jni.cpp, line 1364]
+Event: 3.305 Thread 0x000002317f330800 Exception > (0x00000000ee6b2d88) thrown at [t:/workspace/open/src/hotspot/share/prims/jni.cpp, line 1364]
+Event: 3.307 Thread 0x000002317f330800 Exception > (0x00000000ee6be290) thrown at [t:/workspace/open/src/hotspot/share/prims/jni.cpp, line 1364]
+Event: 3.370 Thread 0x000002317f484000 Exception (0x00000000edf6b6e0) thrown at [t:/workspace/open/src/hot
+Event: 3.376 Thread 0x000002317f484000 Exception (0x00000000edfa1d70) thrown at [t:/workspace/open/src/hotspot/share/interpreter/linkResolver
+Event: 3.380 Thread 0x000002317f484000 Exception (0x
+Event: 3.488 Thread 0x000002317f484000 Exception (0x00000000ed745388) thrown at [t:/workspace/open/src/hotsp
+Event: 3.608 Thread 0x000002317f484000 Exception (0x00000000efbde488) thrown at [t:/workspace/open/src/hotspot/share/interpreter/linkResolver.cpp, line 772]
+
+Events (10 events):
+Event: 3.621 Thread 0x000002317f484000 DEOPT UNPACKING pc=0x000002310828d44e sp=0x000000af292f9a18 mode 1
+Event: 3.621 Thread 0x000002317f484000 DEOPT PACKING pc=0x0000023108904021 sp=0x000000af292fa4b0
+Event: 3.621 Thread 0x000002317f484000 DEOPT UNPACKING pc=0x000002310828d44e sp=0x000000af292f9998 mode 1
+Event: 3.621 Thread 0x000002317f484000 DEOPT PACKING pc=0x00000231088ce6ec sp=0x000000af292fa610
+Event: 3.621 Thread 0x000002317f484000 DEOPT UNPACKING pc=0x000002310828d44e sp=0x000000af292f9ba8 mode 1
+Event: 3.621 Thread 0x000002317f484000 DEOPT PACKING pc=0x0000023108904021 sp=0x000000af292fa640
+Event: 3.621 Thread 0x000002317f484000 DEOPT UNPACKING pc=0x000002310828d44e sp=0x000000af292f9b28 mode 1
+Event: 3.621 Thread 0x000002317f484000 DEOPT PACKING pc=0x00000231088ce6ec sp=0x000000af292fa7a0
+Event: 3.621 Thread 0x000002317f484000 DEOPT UNPACKING pc=0x000002310828d44e sp=0x000000af292f9d38 mode 1
+Event: 3.627 Executing VM operation: CollectForMetadataAllocation
+
+
+Dynamic libraries:
+0x00007ff68f3b0000 - 0x00007ff68f3f7000 C:\Program Files\Java\jdk-11.0.1\bin\java.exe
+0x00007ffd0c000000 - 0x00007ffd0c1f0000 C:\WINDOWS\SYSTEM32\ntdll.dll
+0x00007ffd0a7e0000 - 0x00007ffd0a892000 C:\WINDOWS\System32\KERNEL32.DLL
+0x00007ffd08ff0000 - 0x00007ffd09295000 C:\WINDOWS\System32\KERNELBASE.dll
+0x00007ffd0a730000 - 0x00007ffd0a7d3000 C:\WINDOWS\System32\ADVAPI32.dll
+0x00007ffd0a690000 - 0x00007ffd0a72e000 C:\WINDOWS\System32\msvcrt.dll
+0x00007ffd0b800000 - 0x00007ffd0b897000 C:\WINDOWS\System32\sechost.dll
+0x00007ffd0a210000 - 0x00007ffd0a330000 C:\WINDOWS\System32\RPCRT4.dll
+0x00007ffd0b640000 - 0x00007ffd0b7d4000 C:\WINDOWS\System32\USER32.dll
+0x00007ffd09cf0000 - 0x00007ffd09d11000 C:\WINDOWS\System32\win32u.dll
+0x00007ffd0be10000 - 0x00007ffd0be36000 C:\WINDOWS\System32\GDI32.dll
+0x00007ffd09ec0000 - 0x00007ffd0a056000 C:\WINDOWS\System32\gdi32full.dll
+0x00007ffd092a0000 - 0x00007ffd0933e000 C:\WINDOWS\System32\msvcp_win.dll
+0x00007ffd09bf0000 - 0x00007ffd09cea000 C:\WINDOWS\System32\ucrtbase.dll
+0x00007ffcf3660000 - 0x00007ffcf38e4000 C:\WINDOWS\WinSxS\amd64_microsoft.windows.common-controls_6595b64144ccf1df_6.0.18362.1139_none_9e7bf2d3e4605ac6\COMCTL32.dll
+0x00007ffd0b8a0000 - 0x00007ffd0bbd5000 C:\WINDOWS\System32\combase.dll
+0x00007ffcfb780000 - 0x00007ffcfb78a000 C:\WINDOWS\SYSTEM32\VERSION.dll
+0x00007ffd09b70000 - 0x00007ffd09bf0000 C:\WINDOWS\System32\bcryptPrimitives.dll
+0x00007ffd0a330000 - 0x00007ffd0a35e000 C:\WINDOWS\System32\IMM32.DLL
+0x00007ffd00110000 - 0x00007ffd00126000 C:\Program Files\Java\jdk-11.0.1\bin\vcruntime140.dll
+0x00007ffccfbf0000 - 0x00007ffccfc9a000 C:\Program Files\Java\jdk-11.0.1\bin\msvcp140.dll
+0x00007ffc91390000 - 0x00007ffc91ed2000 C:\Program Files\Java\jdk-11.0.1\bin\server\jvm.dll
+0x00007ffd0a900000 - 0x00007ffd0a908000 C:\WINDOWS\System32\PSAPI.DLL
+0x00007ffcef250000 - 0x00007ffcef274000 C:\WINDOWS\SYSTEM32\WINMM.dll
+0x00007ffcf97c0000 - 0x00007ffcf97c9000 C:\WINDOWS\SYSTEM32\WSOCK32.dll
+0x00007ffd0aed0000 - 0x00007ffd0af3f000 C:\WINDOWS\System32\WS2_32.dll
+0x00007ffcf80c0000 - 0x00007ffcf80ed000 C:\WINDOWS\SYSTEM32\WINMMBASE.dll
+0x00007ffd0a060000 - 0x00007ffd0a0aa000 C:\WINDOWS\System32\cfgmgr32.dll
+0x00007ffd08ed0000 - 0x00007ffd08ee1000 C:\WINDOWS\System32\kernel.appcore.dll
+0x00007ffcf1ab0000 - 0x00007ffcf1ac1000 C:\Program Files\Java\jdk-11.0.1\bin\verify.dll
+0x00007ffd07750000 - 0x00007ffd07944000 C:\WINDOWS\SYSTEM32\DBGHELP.DLL
+0x00007ffcfc420000 - 0x00007ffcfc44a000 C:\WINDOWS\SYSTEM32\dbgcore.DLL
+0x00007ffcf1a80000 - 0x00007ffcf1aa9000 C:\Program Files\Java\jdk-11.0.1\bin\java.dll
+0x00007ffce00b0000 - 0x00007ffce00e7000 C:\Program Files\Java\jdk-11.0.1\bin\jdwp.dll
+0x00007ffcf1a60000 - 0x00007ffcf1a76000 C:\Program Files\Java\jdk-11.0.1\bin\zip.dll
+0x00007ffcf90f0000 - 0x00007ffcf90fa000 C:\Program Files\Java\jdk-11.0.1\bin\jimage.dll
+0x00007ffd0af40000 - 0x00007ffd0b627000 C:\WINDOWS\System32\SHELL32.dll
+0x00007ffd0bf10000 - 0x00007ffd0bfb9000 C:\WINDOWS\System32\shcore.dll
+0x00007ffd09340000 - 0x00007ffd09ac0000 C:\WINDOWS\System32\windows.storage.dll
+0x00007ffd08f60000 - 0x00007ffd08f83000 C:\WINDOWS\System32\profapi.dll
+0x00007ffd08ef0000 - 0x00007ffd08f3a000 C:\WINDOWS\System32\powrprof.dll
+0x00007ffd08ec0000 - 0x00007ffd08ed0000 C:\WINDOWS\System32\UMPDC.dll
+0x00007ffd0a8a0000 - 0x00007ffd0a8f2000 C:\WINDOWS\System32\shlwapi.dll
+0x00007ffd09e70000 - 0x00007ffd09e87000 C:\WINDOWS\System32\cryptsp.dll
+0x00007ffd02070000 - 0x00007ffd0207a000 C:\Program Files\Java\jdk-11.0.1\bin\dt_socket.dll
+0x00007ffd086b0000 - 0x00007ffd08717000 C:\WINDOWS\system32\mswsock.dll
+0x00007ffcef370000 - 0x00007ffcef389000 C:\Program Files\Java\jdk-11.0.1\bin\net.dll
+0x00007ffd01b30000 - 0x00007ffd01c20000 C:\WINDOWS\SYSTEM32\WINHTTP.dll
+0x00007ffceb0f0000 - 0x00007ffceb103000 C:\Program Files\Java\jdk-11.0.1\bin\nio.dll
+0x00007ffcf1ad0000 - 0x00007ffcf1afa000 C:\Users\23535\.gradle\native\36\windows-amd64\native-platform.dll
+0x00007ffd02290000 - 0x00007ffd02299000 C:\Program Files\Java\jdk-11.0.1\bin\management.dll
+0x00007ffcfbc50000 - 0x00007ffcfbc5c000 C:\Program Files\Java\jdk-11.0.1\bin\management_ext.dll
+0x00007ffd08220000 - 0x00007ffd08253000 C:\WINDOWS\system32\rsaenh.dll
+0x00007ffd09e90000 - 0x00007ffd09eb6000 C:\WINDOWS\System32\bcrypt.dll
+0x00007ffd08da0000 - 0x00007ffd08dc5000 C:\WINDOWS\SYSTEM32\USERENV.dll
+0x00007ffd08880000 - 0x00007ffd0888c000 C:\WINDOWS\SYSTEM32\CRYPTBASE.dll
+0x00007ffd083c0000 - 0x00007ffd083fa000 C:\WINDOWS\SYSTEM32\IPHLPAPI.DLL
+0x00007ffd0a910000 - 0x00007ffd0a918000 C:\WINDOWS\System32\NSI.dll
+0x00007ffcff1b0000 - 0x00007ffcff1c6000 C:\WINDOWS\SYSTEM32\dhcpcsvc6.DLL
+0x00007ffcff190000 - 0x00007ffcff1ac000 C:\WINDOWS\SYSTEM32\dhcpcsvc.DLL
+0x00007ffd08410000 - 0x00007ffd084db000 C:\WINDOWS\SYSTEM32\DNSAPI.dll
+
+dbghelp: loaded successfully - version: 4.0.5 - missing functions: none
+symbol engine: initialized successfully - sym options: 0x614 - pdb path: .;C:\Program Files\Java\jdk-11.0.1\bin;C:\WINDOWS\SYSTEM32;C:\WINDOWS\WinSxS\amd64_microsoft.windows.common-controls_6595b64144ccf1df_6.0.18362.1139_none_9e7bf2d3e4605ac6;C:\Program Files\Java\jdk-11.0.1\bin\server;C:\Users\23535\.gradle\native\36\windows-amd64
+
+VM Arguments:
+jvm_args: -XX:MaxMetaspaceSize=256m -XX:+HeapDumpOnOutOfMemoryError -agentlib:jdwp=transport=dt_socket,server=n,suspend=y,address=127.0.0.1:60754 --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.lang.invoke=ALL-UNNAMED --add-opens=java.prefs/java.util.prefs=ALL-UNNAMED -Xms256m -Xmx512m -Dfile.encoding=GBK -Duser.country=SG -Duser.language=zh -Duser.variant
+java_command: org.gradle.launcher.daemon.bootstrap.GradleDaemon 6.2
+java_class_path (initial): C:\Users\23535\.gradle\wrapper\dists\gradle-6.2-bin\6zaomcc3lf3gnwxgkllci1muk\gradle-6.2\lib\gradle-launcher-6.2.jar
+Launcher Type: SUN_STANDARD
+
+[Global flags]
+ intx CICompilerCount = 3 {product} {ergonomic}
+ size_t CompressedClassSpaceSize = 260046848 {product} {ergonomic}
+ uint ConcGCThreads = 1 {product} {ergonomic}
+ uint G1ConcRefinementThreads = 4 {product} {ergonomic}
+ size_t G1HeapRegionSize = 1048576 {product} {ergonomic}
+ uintx GCDrainStackTargetSize = 64 {product} {ergonomic}
+ bool HeapDumpOnOutOfMemoryError = true {manageable} {command line}
+ size_t InitialHeapSize = 268435456 {product} {command line}
+ size_t MarkStackSize = 4194304 {product} {ergonomic}
+ size_t MaxHeapSize = 536870912 {product} {command line}
+ size_t MaxMetaspaceSize = 268435456 {product} {command line}
+ size_t MaxNewSize = 321912832 {product} {ergonomic}
+ size_t MinHeapDeltaBytes = 1048576 {product} {ergonomic}
+ uintx NonNMethodCodeHeapSize = 5830092 {pd product} {ergonomic}
+ uintx NonProfiledCodeHeapSize = 122914074 {pd product} {ergonomic}
+ uintx ProfiledCodeHeapSize = 122914074 {pd product} {ergonomic}
+ uintx ReservedCodeCacheSize = 251658240 {pd product} {ergonomic}
+ bool SegmentedCodeCache = true {product} {ergonomic}
+ bool UseCompressedClassPointers = true {lp64_product} {ergonomic}
+ bool UseCompressedOops = true {lp64_product} {ergonomic}
+ bool UseG1GC = true {product} {ergonomic}
+ bool UseLargePagesIndividualAllocation = false {pd product} {ergonomic}
+
+Logging:
+Log output configuration:
+ #0: stdout all=warning uptime,level,tags
+ #1: stderr all=off uptime,level,tags
+
+Environment Variables:
+PATH=C:\Program Files\Common Files\Oracle\Java\javapath;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\WINDOWS\System32\OpenSSH\;C:\Program Files\nodejs\;C:\Program Files\dotnet\;C:\Program Files\Git\cmd;C:\Users\23535\AppData\Local\Programs\Python\Python38-32\Scripts\;C:\Users\23535\AppData\Local\Programs\Python\Python38-32\;C:\python\scripts;C:\Users\23535\.dotnet\tools;C:\Users\23535\AppData\Local\GitHubDesktop\bin
+USERNAME=23535
+OS=Windows_NT
+PROCESSOR_IDENTIFIER=Intel64 Family 6 Model 142 Stepping 9, GenuineIntel
+
+
+
+--------------- S Y S T E M ---------------
+
+OS: Windows 10 , 64 bit Build 18362 (10.0.18362.1110)
+
+CPU:total 4 (initial active 4) (2 cores per cpu, 2 threads per core) family 6 model 142 stepping 9, cmov, cx8, fxsr, mmx, sse, sse2, sse3, ssse3, sse4.1, sse4.2, popcnt, avx, avx2, aes, clmul, erms, 3dnowpref, lzcnt, ht, tsc, tscinvbit, bmi1, bmi2, adx, fma
+
+Memory: 4k page, system-wide physical 8113M (1145M free)
+TotalPageFile size 11438M (AvailPageFile size 4M)
+current process WorkingSet (physical memory assigned to process): 143M, peak: 143M
+current process commit charge ("private bytes"): 378M, peak: 379M
+
+vm_info: Java HotSpot(TM) 64-Bit Server VM (11.0.1+13-LTS) for windows-amd64 JRE (11.0.1+13-LTS), built on Oct 6 2018 13:20:16 by "mach5one" with MS VC++ 15.5 (VS2017)
+
+END.
diff --git a/src/main/java/Canteen.java b/src/main/java/Canteen.java
new file mode 100644
index 0000000000..af2c6ecd49
--- /dev/null
+++ b/src/main/java/Canteen.java
@@ -0,0 +1,82 @@
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ *
+ * a class represents a canteen
+ */
+public class Canteen {
+ private String canteenName;
+ public List stallList;
+ private List openTime;
+ private List closeTime;
+
+ /**
+ * constructor
+ * @param canteenName
+ * @param stallList
+ * @param openTime
+ * @param closeTime
+ */
+ Canteen(String canteenName, List stallList, List openTime,List closeTime){
+ this.canteenName = canteenName;
+ this.stallList = stallList;
+ this.openTime = openTime;
+ this.closeTime = closeTime;
+ }
+
+ /**
+ * a method to get the open time of the canteen
+ * @param dayOfWeek
+ * @return int
+ */
+ public int getOpenTime(int dayOfWeek){
+ return openTime.get(dayOfWeek);
+ }
+
+ /**
+ * a method to get the close time of the canteen
+ * @param dayOfWeek
+ * @return int
+ */
+ public int getCloseTime(int dayOfWeek) {
+ return closeTime.get(dayOfWeek);
+ }
+
+ /**
+ *
+ * a method to get all the stalls
+ * in a list
+ * @return List
+ */
+ public List getStallList() {
+ return stallList;
+ }
+
+// List checkOpenStall(int dayOfWeek, int time){
+ /**
+ * a method to check if this canteen is open based on
+ * given dayOfWeek and time
+ *
+ * @param dayOfWeek
+ * @param time
+ * @return boolean
+ */
+ boolean isOpen (int dayOfWeek, int time) {
+ if(time>=this.openTime.get(dayOfWeek)&&time<=this.closeTime.get(dayOfWeek)){
+ return true;
+ }
+ else{return false;}
+ }
+
+
+
+ public String getCanteenName() {
+ return canteenName;
+ }
+
+ @Override
+ public String toString() {
+ return canteenName;
+ }
+}
diff --git a/src/main/java/Customer.java b/src/main/java/Customer.java
new file mode 100644
index 0000000000..e94af72a26
--- /dev/null
+++ b/src/main/java/Customer.java
@@ -0,0 +1,157 @@
+import exception.OrderTypeException;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Scanner;
+
+/**
+ *
+ * a class represent a customer
+ */
+public class Customer {
+
+ public String name;
+ public int ID;
+ public int arriveTime;
+
+ public String getName() {
+ return name;
+ }
+
+ public int getID() {
+ return ID;
+ }
+
+ public int getArriveTime() {
+ return arriveTime;
+ }
+
+ /**
+ * a method to get which day of week the customer comes
+ * @return int
+ */
+ public int getDayOfWeek() {
+ return dayOfWeek;
+ }
+
+ public int dayOfWeek;
+
+ /**
+ * constructor
+ * @param name
+ * @param ID
+ * @param arriveTime
+ * @param dayOfWeek
+ */
+ public Customer(String name, int ID, int arriveTime, int dayOfWeek) {
+ this.name = name;
+ this.ID = ID;
+ this.arriveTime = arriveTime;
+ this.dayOfWeek = dayOfWeek;
+ }
+
+// public void printStalls(){
+// openStalls = this.canteen.checkOpenStall(this.dayOfWeek,this.arriveTime);
+// for(int i=0;i CheckOpenStalls(){
+// openStalls = this.canteen.checkOpenStall(this.dayOfWeek,this.arriveTime);
+// return openStalls;
+// }
+
+ /**
+ * a method to check open stalls based on
+ * a given choosen canteen
+ * return a list of stalls
+ * @param canteen
+ * @return List
+ */
+ public List checkOpenStalls(Canteen canteen){
+ List openStallList = new ArrayList<>();
+ for(Stall stall:canteen.stallList){
+ if(stall.isOpen(this.dayOfWeek, this.arriveTime)){
+ openStallList.add(stall);
+ }
+ }
+ return openStallList;
+ }
+
+ /**
+ * a method to check open stalls based on
+ * a given list of canteens
+ * return a list of open canteens
+ * @param ListCanteen
+ * @return
+ */
+ public List checkOpenCanteens(List ListCanteen){
+ List openCanteens=new ArrayList<>();
+ for(Canteen canteen:ListCanteen){
+ if(canteen.isOpen(this.dayOfWeek, this.arriveTime)){
+ openCanteens.add(canteen);
+ }
+ }
+ return openCanteens;
+ }
+
+ /**
+ * a method to check dishes
+ * @param ListDish
+ * @return
+ */
+ public List checkDish(List ListDish){
+ List dishList = new ArrayList<>();
+ for(Dish dish: ListDish){
+ dishList.add(dish);
+ }
+ return dishList;
+ }
+
+ /**
+ * a method to check waiting time
+ * @param stall
+ * @return
+ */
+ public int checkWaitingTime(Stall stall){
+ return stall.queue * stall.servingTimePerPersom;
+ }
+
+ /**
+ * a method to make the order according to the type of order
+ * @param canteen
+ * @param stall
+ * @param dish
+ * @param typeOfOrder
+ * @return
+ */
+ public Order order(Canteen canteen,Stall stall,List dish, String typeOfOrder) throws OrderTypeException {
+
+ if(typeOfOrder.compareTo("Delivery")==0){
+ return new deliveryOrder(canteen,stall,dish,this,true);
+ }
+ if(typeOfOrder.compareTo("Dine in")==0){
+ return new dineInOrder(canteen,stall,dish,this,true);
+ }
+ if(typeOfOrder.compareTo("Take away")==0){
+ return new takeAwayOrder(canteen,stall,dish,this,true);
+ }else{
+ throw new OrderTypeException();
+ }
+ }
+
+ @Override
+ public String toString(){
+ return this.name + " arrives at " +this.arriveTime ;
+ }
+}
+
+
diff --git a/src/main/java/Dish.java b/src/main/java/Dish.java
new file mode 100644
index 0000000000..4de1c3cc2e
--- /dev/null
+++ b/src/main/java/Dish.java
@@ -0,0 +1,111 @@
+import java.util.List;
+
+/**
+ * a class represents dish
+ */
+public class Dish {
+
+ private String dishName;
+ private double price;
+ private String stallName;
+ private String canteenName;
+ private String type;
+ private String comment;
+ private double openTime;
+ private double closeTime;
+ private List openDayOfWeek;
+ private int stallID;
+ private String stallLocation;
+ private int servingTime;
+
+// /**
+// * constructor
+// * @param dishName
+// * @param price
+// * @param comment
+// */
+// Dish(String dishName, double price, String comment) {
+// this.dishName = dishName;
+// this.price = price;
+// this.comment = comment;
+// }
+
+
+ public Dish(String dishName, double price, String stallName, String canteenName, String type, String comment, double openTime, double closeTime, List openDayOfWeek, int stallID, String stallLocation, int servingTime) {
+ this.dishName = dishName;
+ this.price = price;
+ this.stallName = stallName;
+ this.canteenName = canteenName;
+ this.type = type;
+ this.comment = comment;
+ this.openTime = openTime;
+ this.closeTime = closeTime;
+ this.openDayOfWeek = openDayOfWeek;
+ this.stallID = stallID;
+ this.stallLocation = stallLocation;
+ this.servingTime = servingTime;
+ }
+
+ public int getStallID() {
+ return stallID;
+ }
+
+ public String getStallLocation() {
+ return stallLocation;
+ }
+
+ public int getServingTime() {
+ return servingTime;
+ }
+
+ public String getStallName() {
+ return stallName;
+ }
+
+ public String getCanteenName() {
+ return canteenName;
+ }
+
+ public String getType() {
+ return type;
+ }
+
+ public double getOpenTime() {
+ return openTime;
+ }
+
+ public double getCloseTime() {
+ return closeTime;
+ }
+
+ public List getOpenDayOfWeek() {
+ return openDayOfWeek;
+ }
+
+ /**
+ * return the name of this dish
+ * @return String
+ */
+ public String getDishName() {
+ return this.dishName;
+ }
+ /**
+ * return the price of this dish
+ * @return double
+ */
+ public double getPrice() {
+ return this.price;
+ }
+ /**
+ * return the comment of this dish
+ * @return String
+ */
+ public String getComment(){
+ return this.comment;
+ }
+
+ @Override
+ public String toString() {
+ return this.dishName + " price: " + this.price;
+ }
+}
diff --git a/src/main/java/Initializer.java b/src/main/java/Initializer.java
new file mode 100644
index 0000000000..5bd481f63d
--- /dev/null
+++ b/src/main/java/Initializer.java
@@ -0,0 +1,77 @@
+import org.apache.poi.hssf.usermodel.HSSFSheet;
+import org.apache.poi.hssf.usermodel.HSSFWorkbook;
+import org.apache.poi.ss.usermodel.Cell;
+import org.apache.poi.ss.usermodel.DataFormatter;
+import org.apache.poi.ss.usermodel.Row;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * class Initializer
+ * for initializing the canteen information
+ * at the start of the program
+ */
+public class Initializer {
+ public List initialize() throws IOException {
+ FileInputStream fis=new FileInputStream(new File("Canteen Dataset.xls"));
+ HSSFWorkbook wb=new HSSFWorkbook(fis);
+ HSSFSheet sheet=wb.getSheetAt(0);
+ DataFormatter dataFormatter = new DataFormatter();
+ ArrayList dishes = new ArrayList<>();
+ for (Row row: sheet) {
+ ArrayList values = new ArrayList<>();
+ for(Cell cell: row) {
+ String cellValue = dataFormatter.formatCellValue(cell);
+ values.add(cellValue);
+ }
+ if(!values.get(0).equals("Dish.No.")){
+ dishes.add(new Dish(values.get(1),Double.parseDouble(values.get(2)),values.get(3),values.get(4),values.get(5),values.get(6),Integer.parseInt(values.get(7)),Integer.parseInt(values.get(8)),Parser.parseList(values.get(9)),Integer.parseInt(values.get(10)),values.get(11),Integer.parseInt(values.get(12))));
+ }
+ }
+ ArrayList stalls = new ArrayList<>();
+ String temp = "";
+ while(dishes.size()!=0){
+ if(temp.equals("")){
+ temp = dishes.get(0).getStallName();
+ }
+ ArrayList dishes1 = new ArrayList<>();
+ for(int i = 0; i < dishes.size(); i++){
+ if(dishes.get(i).getStallName().equals(temp)){
+ dishes1.add(dishes.get(i));
+ }else{
+ break;
+ }
+ }
+ for(Dish dish:dishes1){
+ dishes.remove(dish);
+ }
+ stalls.add(new Stall(dishes1.get(0).getStallName(),dishes1.get(0).getStallID(),dishes1.get(0).getStallLocation(),(int)dishes1.get(0).getOpenTime(),(int)dishes1.get(0).getCloseTime(),dishes1.get(0).getOpenDayOfWeek(),dishes1,dishes1.get(0).getServingTime(),dishes1.get(0).getCanteenName()));
+ temp="";
+ }
+ ArrayList canteens = new ArrayList<>();
+ while(stalls.size()!=0){
+ if(temp.equals("")){
+ temp = stalls.get(0).getCanteenName();
+ }
+ ArrayList stalls1 = new ArrayList<>();
+ for(int i = 0; i < stalls.size(); i++){
+ if(stalls.get(i).getCanteenName().equals(temp)){
+ stalls1.add(stalls.get(i));
+ }else{
+ break;
+ }
+ }
+ for(Stall stall:stalls1){
+ stalls.remove(stall);
+ }
+ canteens.add(new Canteen(stalls1.get(0).getCanteenName(),stalls1, Arrays.asList(730,730,730,730,730,1100,1000),Arrays.asList(2130,2130,2200,2200,2200,2200,2000)));
+ temp="";
+ }
+ return canteens;
+ }
+}
diff --git a/src/main/java/Logic.java b/src/main/java/Logic.java
new file mode 100644
index 0000000000..3f5fff8800
--- /dev/null
+++ b/src/main/java/Logic.java
@@ -0,0 +1,251 @@
+//import necessary libraries
+
+import exception.NoCanteenException;
+import exception.NoStallException;
+import org.apache.poi.hssf.usermodel.HSSFRow;
+import org.apache.poi.hssf.usermodel.HSSFSheet;
+import org.apache.poi.hssf.usermodel.HSSFWorkbook;
+import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
+import org.apache.poi.ss.usermodel.Cell;
+import org.apache.poi.ss.usermodel.DataFormatter;
+import org.apache.poi.ss.usermodel.Row;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Scanner;
+
+/**
+ * Main logic of the whole program
+ */
+public class Logic {
+ public static String input;
+ //input is for each statement input
+ public static Scanner in = new Scanner(System.in);
+ protected static List canteens = new ArrayList<>();
+ protected static Scanner sc = new Scanner(System.in);
+ public static FileInputStream inputFile;
+ public static ArrayList Order = new ArrayList();
+
+ /**
+ * main method
+ * @param args
+ */
+ public static void main(String[] args) throws IOException, InvalidFormatException {
+ Initializer initializer = new Initializer();
+ List canteens = initializer.initialize();
+ main(canteens);
+ }
+
+ private static List readOrders(List canteens) throws IOException {
+ try{
+ File f = new File("Order Record.xls");
+ FileInputStream fis=new FileInputStream(f);
+ HSSFWorkbook w=new HSSFWorkbook(fis);
+ HSSFSheet sheet=w.getSheetAt(0);
+ DataFormatter dataFormatter = new DataFormatter();
+ ArrayList orders = new ArrayList<>();
+ for (Row row: sheet) {
+ ArrayList values = new ArrayList<>();
+ for(Cell cell: row) {
+ String cellValue = dataFormatter.formatCellValue(cell);
+ values.add(cellValue);
+ }
+ if(!values.get(0).equals("UserName")){
+ ArrayList orderedDishes;
+ orderedDishes = (ArrayList) Parser.parseDish(values.get(5),canteens);
+ Canteen canteenInOrder = null;
+ for(Canteen canteen:canteens){
+ if(canteen.getCanteenName().equals(values.get(3))){
+ canteenInOrder = canteen;
+ break;
+ }
+ }
+ Stall stallInOrder = null;
+ for(Canteen canteen:canteens){
+ for(Stall stall:canteen.getStallList()){
+ if(stall.getStall_name().equals(values.get(4))){
+ stallInOrder = stall;
+ break;
+ }
+ }
+ }
+ switch (values.get(6)){
+ case "Take Away":
+ orders.add(new takeAwayOrder(canteenInOrder,stallInOrder,orderedDishes,new Customer(values.get(0),Integer.parseInt(values.get(7)),Integer.parseInt(values.get(2)),Integer.parseInt(values.get(1))),true));
+ break;
+ case "Dine In":
+ orders.add(new dineInOrder(canteenInOrder,stallInOrder,orderedDishes,new Customer(values.get(0),Integer.parseInt(values.get(7)),Integer.parseInt(values.get(2)),Integer.parseInt(values.get(1))),true));
+ break;
+ case "Delivery":
+ orders.add(new deliveryOrder(canteenInOrder,stallInOrder,orderedDishes,new Customer(values.get(0),Integer.parseInt(values.get(7)),Integer.parseInt(values.get(2)),Integer.parseInt(values.get(1))),true));
+ break;
+ }
+ }
+ }
+ f.delete();
+ return orders;
+ }catch(Exception e){
+ //declare file name to be create
+ String filename = "Order Record.xls";
+//creating an instance of HSSFWorkbook class
+ HSSFWorkbook workbook = new HSSFWorkbook();
+//invoking creatSheet() method and passing the name of the sheet to be created
+ HSSFSheet sheet = workbook.createSheet("0");
+//creating the 0th row using the createRow() method
+ HSSFRow rowhead = sheet.createRow((short)0);
+//creating cell by using the createCell() method and setting the values to the cell by using the setCellValue() method
+ rowhead.createCell(0).setCellValue("UserName");
+ rowhead.createCell(1).setCellValue("Day Of Week");
+ rowhead.createCell(2).setCellValue("Arrival Time");
+ rowhead.createCell(3).setCellValue("Canteen");
+ rowhead.createCell(4).setCellValue("Stall");
+ rowhead.createCell(5).setCellValue("Dishes");
+ rowhead.createCell(6).setCellValue("Order Type");
+ rowhead.createCell(7).setCellValue("ID");
+ FileOutputStream fileOut = new FileOutputStream(filename);
+ workbook.write(fileOut);
+//closing the Stream
+ fileOut.close();
+//closing the workbook
+ workbook.close();
+//prints the message on the console
+ System.out.println("Excel file has been generated successfully.");
+ return new ArrayList();
+ }
+ }
+
+ private static void main(List canteens) {
+ try{
+ Order.addAll(readOrders(canteens));
+ UI.greet();
+ // call greet() method to greet
+ Customer customer = UI.getCustomer(sc);
+ System.out.println("Please enter your command. (Type help for instruction.)");
+ input=sc.nextLine();
+ while(!input.equals("bye")) {
+ //if input is not "bye"
+ /** print the list of tasks*/
+ if (input.equals("list")) {
+ UI.printOrder(input, Order);
+ }
+ else if (input.equals("help")) {
+ UI.help();
+ }
+ else if (input.equals("checkcanteen")) {
+ UI.checkCanteenOperatingTime(canteens,customer,sc);
+ }
+ else if (input.equals("checkstall")) {
+ UI.checkStallOperatingTime(canteens,customer,sc);
+ }
+ /** mark one task as done */
+ /** delete one task */
+ else if (input.startsWith("delete")) {
+ UI.deleteOrder(input,Order);
+ }
+ /** to find tasks containing a certain keyword*/
+ else if (input.startsWith("find")) {
+ UI.findDishinOrder(input, Order);
+ }
+ /** user decides to make orders*/
+ else if (input.startsWith("order"))
+ {
+ UI.order(canteens,customer,sc,Order);
+ }
+ else if (input.startsWith("change"))
+ {
+ UI.changeOrder(customer,input,Order);
+ }
+ else if (input.startsWith("search"))
+ {
+ UI.searchKeyword(input,canteens);
+ }
+
+ else{
+ //dealing with undefined type of input
+ System.out.println("____________________________________________________________\n");
+ System.out.println(" OOPS!!! I'm sorry, but I don't know what that means :-(\n");
+ System.out.println("____________________________________________________________\n");
+ }
+ /*exception handling of wrong input*/
+ input=sc.nextLine();
+ // get next input statement
+
+ }
+ UI.bye();
+ print();
+
+ }catch(NoStallException e){
+ sc.nextLine();
+ System.out.println("____________________________________________________________\n");
+ System.out.println(" OOPS!!! No stall opens at that time. Please change your time. :-(\n");
+ System.out.println("____________________________________________________________\n");
+ main(canteens);
+ }catch (NoCanteenException e){
+ System.out.println("____________________________________________________________\n");
+ System.out.println(" OOPS!!! No canteen opens at that time. Please change your time. :-(\n");
+ System.out.println("____________________________________________________________\n");
+ main(canteens);
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ private static void print(){
+ try
+ {
+//declare file name to be create
+ String filename = "Order Record.xls";
+//creating an instance of HSSFWorkbook class
+ HSSFWorkbook workbook = new HSSFWorkbook();
+//invoking creatSheet() method and passing the name of the sheet to be created
+ HSSFSheet sheet = workbook.createSheet("0");
+//creating the 0th row using the createRow() method
+ HSSFRow rowhead = sheet.createRow((short)0);
+//creating cell by using the createCell() method and setting the values to the cell by using the setCellValue() method
+ rowhead.createCell(0).setCellValue("UserName");
+ rowhead.createCell(1).setCellValue("Day Of Week");
+ rowhead.createCell(2).setCellValue("Arrival Time");
+ rowhead.createCell(3).setCellValue("Canteen");
+ rowhead.createCell(4).setCellValue("Stall");
+ rowhead.createCell(5).setCellValue("Dishes");
+ rowhead.createCell(6).setCellValue("Order Type");
+ rowhead.createCell(7).setCellValue("ID");
+ int count = 0;
+ for(Order order:Order){
+ HSSFRow row = sheet.createRow((short)count);
+ row.createCell(0).setCellValue(order.getCustomer().getName());
+ row.createCell(1).setCellValue(order.getCustomer().dayOfWeek);
+ row.createCell(2).setCellValue(order.getCustomer().getArriveTime());
+ row.createCell(3).setCellValue(order.getCanteen().getCanteenName());
+ row.createCell(4).setCellValue(order.getStall().getStall_name());
+ row.createCell(5).setCellValue(order.getDishes());
+ if(order instanceof dineInOrder){
+ row.createCell(6).setCellValue("Dine in");
+ }else if(order instanceof takeAwayOrder){
+ row.createCell(6).setCellValue("Take Away");
+ }else{
+ row.createCell(6).setCellValue("Delivery");
+ }
+ row.createCell(7).setCellValue(order.getCustomer().getID());
+ count++;
+ }
+ FileOutputStream fileOut = new FileOutputStream(filename);
+ workbook.write(fileOut);
+//closing the Stream
+ fileOut.close();
+//closing the workbook
+ workbook.close();
+//prints the message on the console
+ System.out.println("Excel file has been generated successfully.");
+ }
+ catch (Exception e)
+ {
+ e.printStackTrace();
+ }
+ }
+
+
+}
\ No newline at end of file
diff --git a/src/main/java/Main.java b/src/main/java/Main.java
new file mode 100644
index 0000000000..171598d263
--- /dev/null
+++ b/src/main/java/Main.java
@@ -0,0 +1,77 @@
+import org.apache.poi.hssf.usermodel.HSSFSheet;
+import org.apache.poi.hssf.usermodel.HSSFWorkbook;
+import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
+import org.apache.poi.ss.usermodel.Cell;
+import org.apache.poi.ss.usermodel.DataFormatter;
+import org.apache.poi.ss.usermodel.Row;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
+
+public class Main {
+ public static void main(String args[]) throws IOException, InvalidFormatException {
+ FileInputStream fis=new FileInputStream(new File("Canteen Dataset.xls"));
+ HSSFWorkbook wb=new HSSFWorkbook(fis);
+ HSSFSheet sheet=wb.getSheetAt(0);
+ DataFormatter dataFormatter = new DataFormatter();
+ ArrayList dishes = new ArrayList<>();
+ for (Row row: sheet) {
+ ArrayList values = new ArrayList<>();
+ loop(dataFormatter, row, values);
+ if(!values.get(0).equals("Dish.No.")){
+// new Dish(values.get(1),Integer.parseInt(values.get(2)),values.get(3),values.get(4),values.get(5),values.get(6),Integer.parseInt(values.get(7)),Integer.parseInt(values.get(8)),Parser.parseList(values.get(9)),Integer.parseInt(values.get(10)),values.get(11),Integer.parseInt(values.get(12)));
+ dishes.add(new Dish(values.get(1),Double.parseDouble(values.get(2)),values.get(3),values.get(4),values.get(5),values.get(6),Integer.parseInt(values.get(7)),Integer.parseInt(values.get(8)),Parser.parseList(values.get(9)),Integer.parseInt(values.get(10)),values.get(11),Integer.parseInt(values.get(12))));
+ }
+ System.out.println();
+ }
+ ArrayList stalls = new ArrayList<>();
+ String temp = "";
+ while(dishes.size()!=0){
+ if(temp.equals("")){
+ temp = dishes.get(0).getStallName();
+ }
+ ArrayList dishes1 = new ArrayList<>();
+ for(int i = 0; i < dishes.size(); i++){
+ if(dishes.get(i).getStallName().equals(temp)){
+ dishes1.add(dishes.get(i));
+ }else{
+ break;
+ }
+ }
+ for(Dish dish:dishes1){
+ dishes.remove(dish);
+ }
+ stalls.add(new Stall(dishes1.get(0).getStallName(),dishes1.get(0).getStallID(),dishes1.get(0).getStallLocation(),(int)dishes1.get(0).getOpenTime(),(int)dishes1.get(0).getCloseTime(),dishes1.get(0).getOpenDayOfWeek(),dishes1,dishes1.get(0).getServingTime(),dishes1.get(0).getCanteenName()));
+ temp="";
+ }
+ ArrayList canteens = new ArrayList<>();
+ while(stalls.size()!=0){
+ if(temp.equals("")){
+ temp = stalls.get(0).getCanteenName();
+ }
+ ArrayList stalls1 = new ArrayList<>();
+ for(int i = 0; i < stalls.size(); i++){
+ if(stalls.get(i).getCanteenName().equals(temp)){
+ stalls1.add(stalls.get(i));
+ }else{
+ break;
+ }
+ }
+ for(Stall stall:stalls1){
+ stalls.remove(stall);
+ }
+ canteens.add(new Canteen(stalls1.get(0).getCanteenName(),stalls1, Arrays.asList(730,730,730,730,730,1100,1000),Arrays.asList(2130,2130,2200,2200,2200,2200,2000)));
+ temp="";
+ }
+ }
+
+ private static void loop(DataFormatter dataFormatter, Row row, ArrayList values) {
+ for(Cell cell: row) {
+ String cellValue = dataFormatter.formatCellValue(cell);
+ values.add(cellValue);
+ }
+ }
+}
diff --git a/src/main/java/Order.java b/src/main/java/Order.java
new file mode 100644
index 0000000000..83da2c4f06
--- /dev/null
+++ b/src/main/java/Order.java
@@ -0,0 +1,75 @@
+import java.util.List;
+
+/**
+ *
+ * a class represents an order
+ */
+public class Order {
+
+ private Canteen canteen;
+ private Stall stall;
+ private List dishes;
+ private Customer customer;
+
+ public Customer getCustomer() {
+ return customer;
+ }
+
+ public String getDishes() {
+ String s = "";
+ for(Dish dish:dishes){
+ s = s + dish.getDishName() + ",";
+ }
+ return s.substring(0,s.length()-1);
+ }
+
+ /**
+ * Constructor of the Order class
+ * @param canteen canteen name of the order
+ * @param stall stall name of the order
+ * @param dishes dishes that the customer ordered
+ * @param customer customer name who did the order
+ */
+ Order(Canteen canteen, Stall stall, List dishes, Customer customer) {
+ this.canteen = canteen;
+ this.stall = stall;
+ this.dishes = dishes;
+ this.customer = customer;
+ }
+
+ /**
+ * Get the canteen of the order
+ * @return the canteen
+ */
+ public Canteen getCanteen() {
+ return this.canteen;
+ }
+
+ /**
+ * Get the stall of the order
+ * @return the stall
+ */
+ public Stall getStall() {
+ return this.stall;
+ }
+
+ /**
+ * Get the list of dishes that the customer order
+ * @return the list of dishes
+ */
+ public List getDish() {
+ return this.dishes;
+ }
+
+ /**
+ * Format the meaningful string for user to see
+ * @return the formatted string
+ */
+ public String toString() {
+ String dishString = "1. " + dishes.get(0).getDishName() + "\n";
+ for(int i=1; i=7||dayOfWeek<0){
+ throw new DayOfWeekException();
+ }
+ int arriveTime = Integer.parseInt(inputWords[2]);
+ if(arriveTime<0||arriveTime>=2400){
+ throw new ArriveTimeException();
+ }
+ return new Customer(customerName,1,arriveTime,dayOfWeek);
+ }
+ public static List parseList(String inputMessage){
+ String s = inputMessage.substring(1,inputMessage.indexOf("]"));
+ String sList[] = s.split(", ");
+ ArrayList nList = new ArrayList<>();
+ for(String ss:sList){
+ nList.add(Integer.parseInt(ss));
+ }
+ return nList;
+ }
+ public static List parseDish(String inputMessage, List canteens){
+ String sList[] = inputMessage.split(",");
+ ArrayList dishList = new ArrayList<>();
+ for(String s : sList){
+ for(Canteen canteen: canteens){
+ for(Stall stall:canteen.getStallList()){
+ for(Dish dish:stall.getDish()){
+ if(dish.getDishName().equals(s)){
+ dishList.add(dish);
+ }
+ }
+ }
+ }
+ }
+ return dishList;
+ }
+}
diff --git a/src/main/java/Stall.java b/src/main/java/Stall.java
new file mode 100644
index 0000000000..2858ab5362
--- /dev/null
+++ b/src/main/java/Stall.java
@@ -0,0 +1,134 @@
+
+import java.util.List;
+
+/**
+ * a class represents a stall in a canteen
+ *
+ */
+public class Stall {
+
+
+ public String stall_name;
+ private int stallID;
+ private String stallLocation;
+ private int openTime;
+ private int closeTime;
+
+
+
+ private List openDayOfWeek;
+ private List dishes;
+ public int queue;
+ public int servingTimePerPersom;
+ private String canteenName;
+ /**
+ * a method to get the open time of this stall
+ * @return int
+ */
+ public int getOpenTime() {
+ return openTime;
+ }
+
+ /**
+ * a method to get the close time of this stall
+ * @return int
+ */
+ public int getCloseTime() {
+ return closeTime;
+ }
+
+ /**
+ * constructor for Stall class
+ * @param stall_name
+ * @param stallID
+ * @param stallLocation
+ * @param openTime
+ * @param closeTime
+ * @param openDayOfWeek
+ * @param dishes
+ * @param servingTimePerPersom
+ */
+ public Stall(String stall_name, int stallID, String stallLocation, int openTime, int closeTime, List openDayOfWeek, List dishes, int servingTimePerPersom, String canteenName) {
+ this.stall_name = stall_name;
+ this.stallID = stallID;
+ this.stallLocation = stallLocation;
+ this.openTime = openTime;
+ this.closeTime = closeTime;
+ this.openDayOfWeek = openDayOfWeek;
+ this.dishes = dishes;
+ this.servingTimePerPersom = servingTimePerPersom;
+ this.queue = 0;
+ this.canteenName = canteenName;
+ }
+
+ public int getStallID() {
+ return stallID;
+ }
+
+ public String getStallLocation() {
+ return stallLocation;
+ }
+
+ public int getServingTimePerPersom() {
+ return servingTimePerPersom;
+ }
+
+ /**
+ * a method to return all the dishes in this stall
+ * in a list
+ * @return List
+ */
+ public List getDish(){
+ return this.dishes;
+ }
+ public List getOpenDayOfWeek() {
+ return openDayOfWeek;
+ }
+ public String getStall_name() {
+ return stall_name;
+ }
+ public void setQueue(int queue) {
+ this.queue = queue;
+ }
+
+ public int getQueue() {
+ return queue;
+ }
+
+ /**
+ * a method to check if this stall is open based on
+ * given dayOfWeek and time
+ *
+ * @param dayOfWeek
+ * @param time
+ * @return boolean
+ */
+ boolean isOpen (int dayOfWeek, int time) {
+ for(Integer day:this.openDayOfWeek){
+ if(day == dayOfWeek){
+ if(time>=this.openTime&&time<=this.closeTime){
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ /**
+ * a method to print all the dishes in this stall
+ */
+ public void printDishes(){
+ for(int i=0;i canteens, Customer customer,Scanner sc, ArrayList Order) throws NoStallException, NoCanteenException{
+
+ Canteen canteenChoosed = getCanteen(canteens, customer,sc);
+
+ Stall stallChoosed = getStall(customer, canteenChoosed,sc);
+
+ List orderedDishes = getDishes(stallChoosed,sc);
+
+ Order order = getOrder(customer, canteenChoosed, stallChoosed, orderedDishes,sc,Order);
+
+ System.out.println("Your order created! Thanks.");
+ System.out.println(order);
+ sc.nextLine();
+ System.out.println("____________________________________________________________\n");
+
+ }
+
+ /**
+ * when a user starts our app,
+ * collect his basic information
+ * including name,day of week and time arrive
+ * user needs input following the format name/day of week/time arrive
+ * @param sc
+ * @return
+ */
+ public static Customer getCustomer(Scanner sc) {
+ try{
+ System.out.println("Please enter your name/day of week/time arrive:");
+ String inputMessage = sc.nextLine();
+ Customer customer = Parser.parseCustomer(inputMessage);
+ return customer;
+ } catch(DayOfWeekException e){
+ System.out.println("____________________________________________________________\n");
+ System.out.println(" OOPS!!! Wrong day of week! Please enter again. :-(\n");
+ System.out.println("____________________________________________________________\n");
+ return getCustomer(sc);
+ }catch(ArriveTimeException e){
+ System.out.println("____________________________________________________________\n");
+ System.out.println(" OOPS!!! Wrong time! Please enter again. :-(\n");
+ System.out.println("____________________________________________________________\n");
+ return getCustomer(sc);
+ } catch(Exception e){
+ System.out.println("____________________________________________________________\n");
+ System.out.println(" OOPS!!! Wrong format! Please enter again. :-(\n");
+ System.out.println("____________________________________________________________\n");
+ return getCustomer(sc);
+ }
+ }
+
+ /**
+ * method to get the order type
+ * for creating an order
+ * @param customer
+ * @param canteenChoosed
+ * @param stallChoosed
+ * @param orderedDishes
+ * @param sc
+ * @param Order
+ * @return
+ */
+ private static Order getOrder(Customer customer, Canteen canteenChoosed, Stall stallChoosed, List orderedDishes,Scanner sc, ArrayList Order) {
+ try{
+ System.out.println("Please choose your order type:\n\t1.Dine in.\n\t2.Take away.\n\t3.delivery.");
+ int typeChoosed = sc.nextInt();
+ String orderType= "Dine in";
+ if (typeChoosed == 1) {
+ orderType = "Dine in";
+ }
+ else if (typeChoosed == 2) {
+ orderType = "Take away";
+ }
+ else if (typeChoosed == 3){
+ orderType = "Delivery";
+ }else{
+ throw new WrongNumberException();
+ }
+ Order order = customer.order(canteenChoosed, stallChoosed, orderedDishes,orderType);
+ Order.add(order);
+ return order;
+ }catch (WrongNumberException e){
+ System.out.println("____________________________________________________________\n");
+ System.out.println(" OOPS!!! Wrong number. Please enter correct number. :-(\n");
+ System.out.println("____________________________________________________________\n");
+ return getOrder(customer,canteenChoosed,stallChoosed,orderedDishes,sc, Order);
+ }catch (Exception e){
+ sc.nextLine();
+ System.out.println("____________________________________________________________\n");
+ System.out.println(" OOPS!!! Please enter number. :-(\n");
+ System.out.println("____________________________________________________________\n");
+ return getOrder(customer,canteenChoosed,stallChoosed,orderedDishes,sc, Order);
+ }
+ }
+
+ /**
+ * a method to get
+ * what dishes the user orders
+ * @param stallChoosed
+ * @param sc
+ * @return
+ */
+ private static List getDishes(Stall stallChoosed, Scanner sc) {
+ try{
+ int dishCount;
+ System.out.println(stallChoosed + " provides following dishes:");
+ dishCount = 0;
+ List dishinStall = stallChoosed.getDish();
+ for (Dish d : dishinStall) {
+ dishCount++;
+ System.out.println(dishCount +". " + d);
+ }
+ int numOfDishes = getNumOfDishes(dishCount,sc);
+ System.out.println("Please choose what you want:");
+ List orderedDishes = new ArrayList<>();
+ for(int num=0;numdishCount){
+ throw new WrongNumberException();
+ }
+ Dish dishChoosed = dishinStall.get(dishIdChoosed - 1);
+ orderedDishes.add(dishChoosed);
+ }
+ String dummy = sc.nextLine();
+ String isComment = getYN(sc);
+ if (isComment.equals("y")) {
+ checkComment(orderedDishes);
+ }
+ return orderedDishes;
+ }catch(WrongNumberException e){
+ System.out.println("____________________________________________________________\n");
+ System.out.println(" OOPS!!! Wrong number of dish! Please enter again. :-(\n");
+ System.out.println("____________________________________________________________\n");
+ return getDishes(stallChoosed,sc);
+ }catch(Exception e){
+ sc.nextLine();
+ System.out.println("____________________________________________________________\n");
+ System.out.println(" OOPS!!! Wrong information! Please enter again. :-(\n");
+ System.out.println("____________________________________________________________\n");
+ return getDishes(stallChoosed,sc);
+ }
+ }
+
+ /**
+ * a method to ask user whether he/she wants to know the comments
+ * of the selected dish
+ * @param sc
+ * @return
+ */
+ private static String getYN(Scanner sc) {
+ try{
+ System.out.println("Do you want to check the comment for this stall? (y/n)");
+ String isComment = sc.nextLine();
+ if((!isComment.equals("y"))&&(!isComment.equals("n"))){
+ throw new YNException();
+ }
+ return isComment;
+ }catch (YNException e){
+ System.out.println("____________________________________________________________\n");
+ System.out.println(" OOPS!!! Wrong input! Please enter y or n. :-(\n");
+ System.out.println("____________________________________________________________\n");
+ return getYN(sc);
+ }catch (Exception e){
+ System.out.println("____________________________________________________________\n");
+ System.out.println(" OOPS!!! Wrong input! Please enter y or n. :-(\n");
+ System.out.println("____________________________________________________________\n");
+ return getYN(sc);
+ }
+ }
+
+ /**
+ * a method to know how many dishes user wants to order
+ * @param count
+ * @param sc
+ * @return
+ */
+ private static int getNumOfDishes(int count,Scanner sc) {
+ try{
+ System.out.println("How many dishes you want to order please?");
+ int numberOfDishes = sc.nextInt();
+ if (numberOfDishes<=0||numberOfDishes>count){
+ throw new WrongNumberException();
+ }
+ return numberOfDishes;
+ }catch (WrongNumberException e){
+ System.out.println("____________________________________________________________\n");
+ System.out.println(" OOPS!!! Wrong dishes number! Please enter again. :-(\n");
+ System.out.println("____________________________________________________________\n");
+ return getNumOfDishes(count,sc);
+ }catch (Exception e){
+ sc.nextLine();
+ System.out.println("____________________________________________________________\n");
+ System.out.println(" OOPS!!! Wrong format! Please enter again. :-(\n");
+ System.out.println("____________________________________________________________\n");
+ return getNumOfDishes(count,sc);
+ }
+ }
+
+ /**
+ * a method to get which stall the user selects
+ * @param customer
+ * @param canteenChoosed
+ * @param sc
+ * @return
+ */
+ private static Stall getStall(Customer customer, Canteen canteenChoosed, Scanner sc) throws NoStallException{
+ try{
+ System.out.println("The avaliable stalls in " + canteenChoosed + " are:");
+ int stallCount;
+ List openStall = customer.checkOpenStalls(canteenChoosed);
+ stallCount = 0;
+ for (Stall stall : openStall) {
+ stallCount++;
+ System.out.println(stallCount + ". " + stall);
+ }
+ if(stallCount == 0){
+ throw new NoStallException();
+ }
+ System.out.println("Please choose a stall:");
+ int stallIdChoosed = sc.nextInt();
+ if(stallIdChoosed<=0||stallIdChoosed>stallCount){
+ throw new WrongNumberException();
+ }
+ Stall stallChoosed = openStall.get(stallIdChoosed - 1);
+ return stallChoosed;
+ }catch(WrongNumberException e){
+ System.out.println("____________________________________________________________\n");
+ System.out.println(" OOPS!!! Wrong stall number! Please enter again. :-(\n");
+ System.out.println("____________________________________________________________\n");
+ return getStall(customer,canteenChoosed,sc);
+ }catch(InputMismatchException e){
+ sc.nextLine();
+ System.out.println("____________________________________________________________\n");
+ System.out.println(" OOPS!!! Not number! Please enter again. :-(\n");
+ System.out.println("____________________________________________________________\n");
+ return getStall(customer,canteenChoosed,sc);
+ }
+ }
+
+ /**
+ * a method to know which canteen the user selects
+ * @param canteens
+ * @param customer
+ * @param sc
+ * @return
+ */
+ private static Canteen getCanteen(List canteens, Customer customer, Scanner sc) throws NoCanteenException{
+ try{
+ System.out.println("Dear " + customer.name + ",");
+ System.out.println("Please choose a canteen from the list:");
+ List openCanteens = customer.checkOpenCanteens(canteens);//list of canteens
+ int canteenCount = 0;
+ for(Canteen canteen:openCanteens) {
+ canteenCount++;
+ System.out.println(canteenCount +". " + canteen);
+ }
+ if(canteenCount == 0){
+ throw new NoCanteenException();
+ }
+ System.out.println("Enter the number in front to choose:");
+ int canteenIdChoosed = sc.nextInt();
+ if(canteenIdChoosed<=0||canteenIdChoosed>canteenCount){
+ throw new WrongNumberException();
+ }
+ Canteen canteenChoosed = openCanteens.get(canteenIdChoosed - 1);
+ return canteenChoosed;
+ }catch(WrongNumberException e){
+ System.out.println("____________________________________________________________\n");
+ System.out.println(" OOPS!!! Wrong canteen number! Please enter again. :-(\n");
+ System.out.println("____________________________________________________________\n");
+ return getCanteen(canteens, customer,sc);
+ }catch(InputMismatchException e){
+ sc.nextLine();
+ System.out.println("____________________________________________________________\n");
+ System.out.println(" OOPS!!! Not number! Please enter again. :-(\n");
+ System.out.println("____________________________________________________________\n");
+ return getCanteen(canteens, customer,sc);
+ }
+ }
+
+ /**
+ * a method to greet the user at the start of the program
+ */
+ public static void greet(){
+ System.out.println("____________________________________________________________\n");
+ System.out.println(" Hello! I'm Canteenhelper\n");
+ System.out.println(" What can I do for you?\n");
+ System.out.println("____________________________________________________________\n");
+ }
+ /**
+ * method to say bye
+ * @return void
+ */
+ public static void bye(){
+ System.out.println("____________________________________________________________\n");
+ System.out.println("Bye. Hope to see you again soon!");
+ System.out.println("____________________________________________________________\n");
+ }
+
+ /**
+ * a method to display help information for the user
+ * if the user does not know what to do next
+ */
+ public static void help() {
+ System.out.println("____________________________________________________________\n");
+ System.out.println("Hello! Here is a list of commands you can try:");
+ System.out.println("1. Order dish: 'order'");
+ System.out.println("2. Delete order: 'delete [order number]'");
+ System.out.println("3. Find order: 'find [keyword]'");
+ System.out.println("4. List order: 'list'");
+ System.out.println("5. Change order: 'change/[number]/[type]'");
+ System.out.println("6. Check Canteen Operating Time: 'checkcanteen'");
+ System.out.println("7. Check Stall Operating Time: 'checkstall '");
+ System.out.println("8. Exit program: 'bye' ");
+ System.out.println("____________________________________________________________\n");
+ }
+
+ /**
+ * method to check comments
+ * based on list of dishes
+ * user needs to choose y/n
+ * @param dCs
+ */
+ public static void checkComment(List dCs) {
+ for (int i = 0; i < dCs.size(); i++) {
+ System.out.println(dCs.get(i).getComment());
+ }
+ }
+
+ /**
+ * a method to check the operating time of a canteen
+ * prints operating time of user selected canteen
+ * user needs to choose the number before canteen list
+ * @param canteens
+ * @param customer
+ * @param sc
+ */
+ public static void checkCanteenOperatingTime(List canteens,Customer customer,Scanner sc){
+ System.out.println("Choose the canteen you want to check:");
+ List openCanteens = customer.checkOpenCanteens(canteens);//list of canteens
+ int j = 0;
+ for(Canteen canteen:openCanteens) {
+ j++;
+ System.out.println(j +". " + canteen);
+ }
+ System.out.println("Enter the number in front to choose:");
+ int canteenIdChoosed = sc.nextInt();
+ Canteen canteenChoosed = openCanteens.get(canteenIdChoosed - 1);
+ System.out.println("Operating hours for the canteen you choosed is: \n");
+ System.out.println("Open Time: " + canteenChoosed.getOpenTime(customer.getDayOfWeek())/100 + ":00");
+ System.out.println("Closing Time: " + canteenChoosed.getCloseTime(customer.getDayOfWeek())/100 +":" +
+ canteenChoosed.getCloseTime(customer.getDayOfWeek())%100 );
+ System.out.println("____________________________________________________________\n");
+ sc.nextLine();
+ }
+
+ /**
+ * a method to check the operating time of a stall
+ * prints operating time of user selected stall
+ * user needs to choose the number before the canteen list
+ * and stall list
+ * to get the corresponding one
+ * @param canteens
+ * @param customer
+ * @param sc
+ */
+ public static void checkStallOperatingTime(List canteens,Customer customer,Scanner sc){
+ System.out.println("Input the canteen which your desired stall belongs to: \n");
+ List openCanteens = customer.checkOpenCanteens(canteens);//list of canteens
+ int j = 0;
+ for(Canteen canteen:openCanteens) {
+ j++;
+ System.out.println(j +". " + canteen);
+ }
+ System.out.println("Enter the number in front to choose:");
+ int canteenIdChoosed = sc.nextInt();
+ Canteen canteenChoosed = openCanteens.get(canteenIdChoosed - 1);
+ List openStall = customer.checkOpenStalls(canteenChoosed);
+ j = 0;
+ for (Stall stall : openStall) {
+ j++;
+ System.out.println(j +". " + stall);
+ }
+ System.out.println("Please choose a stall:");
+ int stallIdChoosed = sc.nextInt();
+ Stall stallChoosed = openStall.get(stallIdChoosed - 1);
+ System.out.println("Operating hours for the stall you chose is: \n");
+ System.out.println("Open Time: " + stallChoosed.getOpenTime()/100 + ":00" );
+ System.out.println("Closing Time: " + stallChoosed.getCloseTime()/100 + ":"
+ + String.format("%02d",stallChoosed.getCloseTime()%100));
+ sc.nextLine();
+ System.out.println("____________________________________________________________\n");
+ }
+
+ /**
+ * a method to change order
+ * if the user wants to change type of order
+ * user needs to input index of order and what order type he/she wants to change to
+ * @param customer
+ * @param input
+ * @param Order
+ */
+ public static void changeOrder(Customer customer,String input,ArrayList Order)
+ {
+ try{
+ String[] inputWords = input.split("/"); //split the input message
+ if(!inputWords[0].equals("change")){
+ throw new Exception();
+ }
+ String orderNumberchenged = inputWords[1];
+ int orderNumberchanged = Integer.parseInt(orderNumberchenged) - 1;
+ if(orderNumberchanged>=Order.size()||orderNumberchanged<0){
+ throw new Exception();
+ }
+ String changedtype = inputWords[2];
+ System.out.println("____________________________________________________________\n");
+ System.out.println("Noted. I've changed this order: \n");
+ System.out.println(Order.get(orderNumberchanged) + "\n");
+ Canteen can = Order.get(orderNumberchanged).getCanteen();
+ Stall stall = Order.get(orderNumberchanged).getStall();
+ List dishes = Order.get(orderNumberchanged).getDish();
+ Order changedOrder = customer.order(can,stall,dishes,changedtype);
+ Order.set(orderNumberchanged,changedOrder);
+
+ System.out.println("to \n");
+ System.out.println(Order.get(orderNumberchanged) + "\n");
+ System.out.println("____________________________________________________________\n");
+ }catch(Exception e){
+ System.out.println("____________________________________________________________\n");
+ System.out.println(" OOPS!!! Error! Please enter again. :-(\n");
+ System.out.println("____________________________________________________________\n");
+ }
+
+ }
+
+ /**
+ * a method to print all the orders made by the user
+ * @param input
+ * @param Order
+ */
+ public static void printOrder(String input,ArrayList Order) {
+ System.out.println("____________________________________________________________\n");
+ for (int i = 0; i < Order.size(); i++) {
+ System.out.println("____________________________________________________________\n");
+ if (Order.get(i) instanceof dineInOrder) {
+ System.out.println((i + 1) + ":" + (dineInOrder) Order.get(i));
+ }
+ if (Order.get(i) instanceof deliveryOrder) {
+ System.out.println((i + 1) + ":" + (deliveryOrder) Order.get(i));
+ }
+ if (Order.get(i) instanceof takeAwayOrder) {
+ System.out.println((i + 1) + ":" + (takeAwayOrder) Order.get(i));
+ }
+ System.out.println("____________________________________________________________\n");
+
+ }
+ System.out.println("____________________________________________________________\n");
+
+ }
+
+ /**
+ * a method to delete one order
+ * if user wants to delete one order from what he had ordered
+ * user needs to provide order index to delete
+ * @param input
+ * @param Order
+ */
+ public static void deleteOrder(String input,ArrayList Order) {
+ System.out.println("____________________________________________________________\n");
+ System.out.println("Noted. I've removed this order: ");
+ int orderNumberdeleted = Integer.parseInt(input.replaceAll("\\D+", "")) - 1; //find the corresponding index of task to be deleted
+ System.out.println(Order.get(orderNumberdeleted));
+ Order.remove(orderNumberdeleted); //remove that task from arrayList
+ System.out.println("Now you have " + Order.size() + " orders in the list. ");
+ System.out.println("____________________________________________________________\n");
+ }
+
+ /**
+ * a method for user to find all the orders containing certain dish
+ * user needs to input dish name
+ * @param input
+ * @param Order
+ */
+ public static void findDishinOrder(String input,ArrayList Order) {
+ System.out.println("____________________________________________________________\n");
+ System.out.println("Here are the matching orders in your list:\n");
+ String keyword = input.substring(5); // to get the keyword string
+ int count = 1;
+ /*iterate the task arrayList to find corresponding items*/
+ for(int i=0;i< Order.size();i++){
+ for(int j=0;j canteens) {
+ boolean canteenFound = false;
+ boolean stallFound = false;
+ boolean dishFound = false;
+ List days = new ArrayList<>();
+ days.add("Monday");
+ days.add("Tuesday");
+ days.add("Wednesday");
+ days.add("Thursday");
+ days.add("Friday");
+ days.add("Saturday");
+ days.add("Sunday");
+ System.out.println("____________________________________________________________\n");
+ System.out.println("Here are the matching items:\n");
+ String keyword = input.substring(7);
+ System.out.println("Related canteens:\n");
+ for(int i=0;i temporaryDishes = temporaryStall.getDish();
+ for(int x = 0 ; x dishes, Customer customer, boolean isDeliveryOrder) {
+ super(canteen, stall, dishes, customer);
+ this.isDeliveryOrder = isDeliveryOrder;
+ }
+
+ /**
+ * Get the order type
+ * @return whether the order is delivery type or not
+ */
+ public boolean getIsDeliveryOrder() {
+ return this.isDeliveryOrder;
+ }
+
+ /**
+ * Get the carrier fee of the delivery order
+ * @return the carrier fee
+ */
+ public double getCarrierFee() {
+ return this.carrierFee;
+ }
+
+ /**
+ * Get the delivery fee of the delivery order
+ * @return the delivery fee
+ */
+ public double getDeliveryFee() {
+ return this.deliveryFee;
+ }
+
+ /**
+ * Format the meaningful string for user to see
+ * @return the formatted string
+ */
+ @Override
+ public String toString() {
+ if (isDeliveryOrder) {
+ return super.toString() + "(Delivery)";
+ }
+ else {
+ return super.toString() + "(Not Delivery Order)";
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/dineInOrder.java b/src/main/java/dineInOrder.java
new file mode 100644
index 0000000000..22292fa400
--- /dev/null
+++ b/src/main/java/dineInOrder.java
@@ -0,0 +1,44 @@
+import java.util.List;
+
+/**
+ * a class represents a dine in order which extends order class
+ */
+public class dineInOrder extends Order {
+
+ private boolean isDineIn;
+
+ /**
+ * Constructor of the dine in order
+ * @param canteen canteen name of the order
+ * @param stall stall name of the order
+ * @param dishes dishes that the customer ordered
+ * @param customer customer name who did the order
+ * @param isDineIn order type
+ */
+ dineInOrder(Canteen canteen, Stall stall, List dishes, Customer customer, boolean isDineIn) {
+ super(canteen, stall, dishes, customer);
+ this.isDineIn = isDineIn;
+ }
+
+ /**
+ * Get the order type
+ * @return whether the order is dine in type or not
+ */
+ public boolean getIsDineIn() {
+ return this.isDineIn;
+ }
+
+ /**
+ * Format the meaningful string for user to see
+ * @return the formatted string
+ */
+ @Override
+ public String toString() {
+ if (this.isDineIn) {
+ return super.toString() + "(Dine In)";
+ }
+ else {
+ return super.toString() + "(Not Dine In)";
+ }
+ }
+}
diff --git a/src/main/java/exception/ArriveTimeException.java b/src/main/java/exception/ArriveTimeException.java
new file mode 100644
index 0000000000..2eb1ce5823
--- /dev/null
+++ b/src/main/java/exception/ArriveTimeException.java
@@ -0,0 +1,8 @@
+package exception;
+
+/**
+ * a class represents an arrive time Exception which extends from the exception
+ */
+public class ArriveTimeException extends Exception{
+
+}
diff --git a/src/main/java/exception/DayOfWeekException.java b/src/main/java/exception/DayOfWeekException.java
new file mode 100644
index 0000000000..20dae44877
--- /dev/null
+++ b/src/main/java/exception/DayOfWeekException.java
@@ -0,0 +1,8 @@
+package exception;
+
+/**
+ * a class represents a day of week Exception which extends from the exception
+ */
+public class DayOfWeekException extends Exception{
+
+}
diff --git a/src/main/java/exception/NoCanteenException.java b/src/main/java/exception/NoCanteenException.java
new file mode 100644
index 0000000000..8f4ab086e4
--- /dev/null
+++ b/src/main/java/exception/NoCanteenException.java
@@ -0,0 +1,4 @@
+package exception;
+
+public class NoCanteenException extends Exception{
+}
diff --git a/src/main/java/exception/NoStallException.java b/src/main/java/exception/NoStallException.java
new file mode 100644
index 0000000000..2e3f11479c
--- /dev/null
+++ b/src/main/java/exception/NoStallException.java
@@ -0,0 +1,4 @@
+package exception;
+
+public class NoStallException extends Exception{
+}
diff --git a/src/main/java/exception/OrderTypeException.java b/src/main/java/exception/OrderTypeException.java
new file mode 100644
index 0000000000..3091fc59db
--- /dev/null
+++ b/src/main/java/exception/OrderTypeException.java
@@ -0,0 +1,4 @@
+package exception;
+
+public class OrderTypeException extends Exception{
+}
diff --git a/src/main/java/exception/WrongNumberException.java b/src/main/java/exception/WrongNumberException.java
new file mode 100644
index 0000000000..55667ea49e
--- /dev/null
+++ b/src/main/java/exception/WrongNumberException.java
@@ -0,0 +1,8 @@
+package exception;
+
+/**
+ * a class represents a wrong number Exception which extends from the exception
+ */
+public class WrongNumberException extends Exception{
+
+}
diff --git a/src/main/java/exception/YNException.java b/src/main/java/exception/YNException.java
new file mode 100644
index 0000000000..f28df38808
--- /dev/null
+++ b/src/main/java/exception/YNException.java
@@ -0,0 +1,8 @@
+package exception;
+
+/**
+ * a class represents a yes or no Exception which extends from the exception
+ */
+public class YNException extends Exception{
+
+}
diff --git a/src/main/java/seedu/duke/Duke.java b/src/main/java/seedu/duke/Duke.java
index 5c74e68d59..7decfcf280 100644
--- a/src/main/java/seedu/duke/Duke.java
+++ b/src/main/java/seedu/duke/Duke.java
@@ -1,21 +1,22 @@
-package seedu.duke;
-
-import java.util.Scanner;
-
-public class Duke {
- /**
- * Main entry-point for the java.duke.Duke application.
- */
- public static void main(String[] args) {
- String logo = " ____ _ \n"
- + "| _ \\ _ _| | _____ \n"
- + "| | | | | | | |/ / _ \\\n"
- + "| |_| | |_| | < __/\n"
- + "|____/ \\__,_|_|\\_\\___|\n";
- System.out.println("Hello from\n" + logo);
- System.out.println("What is your name?");
-
- Scanner in = new Scanner(System.in);
- System.out.println("Hello " + in.nextLine());
- }
-}
+package seedu.duke;//for pull request
+
+import java.util.Scanner;
+
+public class Duke {
+ /**
+ * Main entry-point for the java.duke.seedu.duke.Duke application.
+ */
+ public static void main(String[] args) {
+ String logo = " ____ _ \n"
+ + "| _ \\ _ _| | _____ \n"
+ + "| | | | | | | |/ / _ \\\n"
+ + "| |_| | |_| | < __/\n"
+ + "|____/ \\__,_|_|\\_\\___|\n";
+ System.out.println("Hello from\n" + logo);
+ System.out.println("What is your name?");
+
+ Scanner in = new Scanner(System.in);
+ System.out.println("Hello " + in.nextLine());
+ in.close();
+ }
+}
diff --git a/src/main/java/takeAwayOrder.java b/src/main/java/takeAwayOrder.java
new file mode 100644
index 0000000000..4cb473b006
--- /dev/null
+++ b/src/main/java/takeAwayOrder.java
@@ -0,0 +1,53 @@
+import java.util.List;
+
+/**
+ * a class represents a take away order which extends order class
+ */
+public class takeAwayOrder extends Order {
+
+ private boolean isTakeAway;
+ private final static double carrierFee = 0.3;
+
+ /**
+ * Constructor of the delivery order
+ * @param canteen canteen name of the order
+ * @param stall stall name of the order
+ * @param dishes dishes that the customer ordered
+ * @param customer customer name who did the order
+ * @param isTakeAway order type
+ */
+ takeAwayOrder(Canteen canteen, Stall stall, List dishes, Customer customer, boolean isTakeAway) {
+ super(canteen, stall, dishes, customer);
+ this.isTakeAway = isTakeAway;
+ }
+
+ /**
+ * Get the order type
+ * @return whether the order is take away type or not
+ */
+ public boolean getIsTakeAway() {
+ return this.isTakeAway;
+ }
+
+ /**
+ * Get the carrier fee of the delivery order
+ * @return the carrier fee
+ */
+ public double getCarrierFee() {
+ return this.carrierFee;
+ }
+
+ /**
+ * Format the meaningful string for user to see
+ * @return the formatted string
+ */
+ @Override
+ public String toString() {
+ if(isTakeAway) {
+ return super.toString() + "(Take Away)";
+ }
+ else {
+ return super.toString() + "(Not Take Away)";
+ }
+ }
+}
diff --git a/src/test/java/CanteenTest.java b/src/test/java/CanteenTest.java
new file mode 100644
index 0000000000..755169b090
--- /dev/null
+++ b/src/test/java/CanteenTest.java
@@ -0,0 +1,212 @@
+import org.junit.jupiter.api.Test;
+
+import java.util.Arrays;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+class CanteenTest {
+
+ @Test
+ void getOpenTime() {
+ Dish pattaya = new Dish("Pattaya", 5.5,
+ "First try, quite impressive to me!");
+ Dish plainThosai = new Dish("Plain Thosai", 2.0,
+ "Quite good, bu I like butter one more.");
+ Dish prata = new Dish("Prata", 3.0,
+ "Recommended by my friends, after this try, I will also recommend this to others.");
+ Stall indian = new Stall("Indian", 10,"Jurong West 964",
+ 1000,2000, Arrays.asList(2,3,5,7),
+ Arrays.asList(pattaya,plainThosai,prata),4);
+
+ Dish plainWaffle = new Dish("Plain Waffle", 1.8,
+ "Like other flavor more, but this one is cheap :)");
+ Dish chocoBanaWaffle = new Dish("Choco Banana Waffle", 2.2,
+ "The flavor of the chocolate and banana are so good!!!");
+ Dish oreoCheese = new Dish("Oreo Cheese Waffle", 2.2,
+ "Very suitable for the cheese lovers.");
+ Stall waffles = new Stall("Waffles",11,"North Spine Level 1",
+ 730,2130,Arrays.asList(1,2,3,4,5),
+ Arrays.asList(plainWaffle,chocoBanaWaffle,oreoCheese),4);
+
+ Dish milo = new Dish("Coffee",1.2,
+ "Normal milo lol");
+ Dish watermelon = new Dish("Watermelon Drink", 1.8,
+ "Really like this since eat watermelon is quite mafan.");
+ Dish milkshade = new Dish("Milk shade",1.8,
+ "A bit too sweet for me.");
+ Stall drinks = new Stall("Drinks",12,"Jurong West Ave 5",
+ 1100,2200,Arrays.asList(3,4,5,6),
+ Arrays.asList(milo,watermelon,milkshade),4);
+
+ Canteen canteen4 = new Canteen("Canteen 4",Arrays.asList(indian,waffles,drinks),
+ Arrays.asList(730,730,730,730,730,1100,1000), Arrays.asList(2130,2130,2200,2200,2200,2200,2000));
+ assertEquals(730,canteen4.getOpenTime(1));
+ assertEquals(730,canteen4.getOpenTime(2));
+ assertEquals(730,canteen4.getOpenTime(3));
+ assertEquals(730,canteen4.getOpenTime(4));
+ assertEquals(730,canteen4.getOpenTime(5));
+ assertEquals(1100,canteen4.getOpenTime(6));
+ assertEquals(1000,canteen4.getOpenTime(7));
+
+ }
+
+ @Test
+ void getCloseTime() {
+ Dish pattaya = new Dish("Pattaya", 5.5,
+ "First try, quite impressive to me!");
+ Dish plainThosai = new Dish("Plain Thosai", 2.0,
+ "Quite good, bu I like butter one more.");
+ Dish prata = new Dish("Prata", 3.0,
+ "Recommended by my friends, after this try, I will also recommend this to others.");
+ Stall indian = new Stall("Indian", 10,"Jurong West 964",
+ 1000,2000, Arrays.asList(2,3,5,7),
+ Arrays.asList(pattaya,plainThosai,prata),4);
+
+ Dish plainWaffle = new Dish("Plain Waffle", 1.8,
+ "Like other flavor more, but this one is cheap :)");
+ Dish chocoBanaWaffle = new Dish("Choco Banana Waffle", 2.2,
+ "The flavor of the chocolate and banana are so good!!!");
+ Dish oreoCheese = new Dish("Oreo Cheese Waffle", 2.2,
+ "Very suitable for the cheese lovers.");
+ Stall waffles = new Stall("Waffles",11,"North Spine Level 1",
+ 730,2130,Arrays.asList(1,2,3,4,5),
+ Arrays.asList(plainWaffle,chocoBanaWaffle,oreoCheese),4);
+
+ Dish milo = new Dish("Coffee",1.2,
+ "Normal milo lol");
+ Dish watermelon = new Dish("Watermelon Drink", 1.8,
+ "Really like this since eat watermelon is quite mafan.");
+ Dish milkshade = new Dish("Milk shade",1.8,
+ "A bit too sweet for me.");
+ Stall drinks = new Stall("Drinks",12,"Jurong West Ave 5",
+ 1100,2200,Arrays.asList(3,4,5,6),
+ Arrays.asList(milo,watermelon,milkshade),4);
+
+ Canteen canteen4 = new Canteen("Canteen 4",Arrays.asList(indian,waffles,drinks),
+ Arrays.asList(730,730,730,730,730,1100,1000), Arrays.asList(2130,2130,2200,2200,2200,2200,2000));
+ assertEquals(2130,canteen4.getCloseTime(1));
+ assertEquals(2130,canteen4.getCloseTime(2));
+ assertEquals(2200,canteen4.getCloseTime(3));
+ assertEquals(2200,canteen4.getCloseTime(4));
+ assertEquals(2200,canteen4.getCloseTime(5));
+ assertEquals(2200,canteen4.getCloseTime(6));
+ assertEquals(2000,canteen4.getCloseTime(7));
+ }
+
+ @Test
+ void getStallList() {
+ Dish pattaya = new Dish("Pattaya", 5.5,
+ "First try, quite impressive to me!");
+ Dish plainThosai = new Dish("Plain Thosai", 2.0,
+ "Quite good, bu I like butter one more.");
+ Dish prata = new Dish("Prata", 3.0,
+ "Recommended by my friends, after this try, I will also recommend this to others.");
+ Stall indian = new Stall("Indian", 10,"Jurong West 964",
+ 1000,2000, Arrays.asList(2,3,5,7),
+ Arrays.asList(pattaya,plainThosai,prata),4);
+
+ Dish plainWaffle = new Dish("Plain Waffle", 1.8,
+ "Like other flavor more, but this one is cheap :)");
+ Dish chocoBanaWaffle = new Dish("Choco Banana Waffle", 2.2,
+ "The flavor of the chocolate and banana are so good!!!");
+ Dish oreoCheese = new Dish("Oreo Cheese Waffle", 2.2,
+ "Very suitable for the cheese lovers.");
+ Stall waffles = new Stall("Waffles",11,"North Spine Level 1",
+ 730,2130,Arrays.asList(1,2,3,4,5),
+ Arrays.asList(plainWaffle,chocoBanaWaffle,oreoCheese),4);
+
+ Dish milo = new Dish("Coffee",1.2,
+ "Normal milo lol");
+ Dish watermelon = new Dish("Watermelon Drink", 1.8,
+ "Really like this since eat watermelon is quite mafan.");
+ Dish milkshade = new Dish("Milk shade",1.8,
+ "A bit too sweet for me.");
+ Stall drinks = new Stall("Drinks",12,"Jurong West Ave 5",
+ 1100,2200,Arrays.asList(3,4,5,6),
+ Arrays.asList(milo,watermelon,milkshade),4);
+
+ Canteen canteen4 = new Canteen("Canteen 4",Arrays.asList(indian,waffles,drinks),
+ Arrays.asList(730,730,730,730,730,1100,1000), Arrays.asList(2130,2130,2200,2200,2200,2200,2000));
+ assertEquals(indian,canteen4.getStallList().get(0));
+ assertEquals(waffles,canteen4.getStallList().get(1));
+ assertEquals(drinks,canteen4.getStallList().get(2));
+
+ }
+
+ @Test
+ void isOpen() {
+ Dish pattaya = new Dish("Pattaya", 5.5,
+ "First try, quite impressive to me!");
+ Dish plainThosai = new Dish("Plain Thosai", 2.0,
+ "Quite good, bu I like butter one more.");
+ Dish prata = new Dish("Prata", 3.0,
+ "Recommended by my friends, after this try, I will also recommend this to others.");
+ Stall indian = new Stall("Indian", 10,"Jurong West 964",
+ 1000,2000, Arrays.asList(2,3,5,7),
+ Arrays.asList(pattaya,plainThosai,prata),4);
+
+ Dish plainWaffle = new Dish("Plain Waffle", 1.8,
+ "Like other flavor more, but this one is cheap :)");
+ Dish chocoBanaWaffle = new Dish("Choco Banana Waffle", 2.2,
+ "The flavor of the chocolate and banana are so good!!!");
+ Dish oreoCheese = new Dish("Oreo Cheese Waffle", 2.2,
+ "Very suitable for the cheese lovers.");
+ Stall waffles = new Stall("Waffles",11,"North Spine Level 1",
+ 730,2130,Arrays.asList(1,2,3,4,5),
+ Arrays.asList(plainWaffle,chocoBanaWaffle,oreoCheese),4);
+
+ Dish milo = new Dish("Coffee",1.2,
+ "Normal milo lol");
+ Dish watermelon = new Dish("Watermelon Drink", 1.8,
+ "Really like this since eat watermelon is quite mafan.");
+ Dish milkshade = new Dish("Milk shade",1.8,
+ "A bit too sweet for me.");
+ Stall drinks = new Stall("Drinks",12,"Jurong West Ave 5",
+ 1100,2200,Arrays.asList(3,4,5,6),
+ Arrays.asList(milo,watermelon,milkshade),4);
+
+ Canteen canteen4 = new Canteen("Canteen 4",Arrays.asList(indian,waffles,drinks),
+ Arrays.asList(730,730,730,730,730,1100,1000), Arrays.asList(2130,2130,2200,2200,2200,2200,2000));
+ assertEquals(true,canteen4.isOpen(1,1200));
+ assertEquals(false,canteen4.isOpen(1,0000));
+ assertEquals(true,canteen4.isOpen(5,1500));
+ }
+
+ @Test
+ void getCanteenName() {
+ Dish pattaya = new Dish("Pattaya", 5.5,
+ "First try, quite impressive to me!");
+ Dish plainThosai = new Dish("Plain Thosai", 2.0,
+ "Quite good, bu I like butter one more.");
+ Dish prata = new Dish("Prata", 3.0,
+ "Recommended by my friends, after this try, I will also recommend this to others.");
+ Stall indian = new Stall("Indian", 10,"Jurong West 964",
+ 1000,2000, Arrays.asList(2,3,5,7),
+ Arrays.asList(pattaya,plainThosai,prata),4);
+
+ Dish plainWaffle = new Dish("Plain Waffle", 1.8,
+ "Like other flavor more, but this one is cheap :)");
+ Dish chocoBanaWaffle = new Dish("Choco Banana Waffle", 2.2,
+ "The flavor of the chocolate and banana are so good!!!");
+ Dish oreoCheese = new Dish("Oreo Cheese Waffle", 2.2,
+ "Very suitable for the cheese lovers.");
+ Stall waffles = new Stall("Waffles",11,"North Spine Level 1",
+ 730,2130,Arrays.asList(1,2,3,4,5),
+ Arrays.asList(plainWaffle,chocoBanaWaffle,oreoCheese),4);
+
+ Dish milo = new Dish("Coffee",1.2,
+ "Normal milo lol");
+ Dish watermelon = new Dish("Watermelon Drink", 1.8,
+ "Really like this since eat watermelon is quite mafan.");
+ Dish milkshade = new Dish("Milk shade",1.8,
+ "A bit too sweet for me.");
+ Stall drinks = new Stall("Drinks",12,"Jurong West Ave 5",
+ 1100,2200,Arrays.asList(3,4,5,6),
+ Arrays.asList(milo,watermelon,milkshade),4);
+
+ Canteen canteen4 = new Canteen("Canteen 4",Arrays.asList(indian,waffles,drinks),
+ Arrays.asList(730,730,730,730,730,1100,1000), Arrays.asList(2130,2130,2200,2200,2200,2200,2000));
+ assertEquals("Canteen 4",canteen4.getCanteenName());
+
+ }
+}
\ No newline at end of file
diff --git a/src/test/java/CustomerTest.java b/src/test/java/CustomerTest.java
new file mode 100644
index 0000000000..98232a7bc2
--- /dev/null
+++ b/src/test/java/CustomerTest.java
@@ -0,0 +1,119 @@
+import org.junit.jupiter.api.Test;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import static org.junit.jupiter.api.Assertions.*;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+class CustomerTest {
+
+ @Test
+ void getName() {
+ Customer customer = new Customer("Louis",1,1200,1);
+ assertEquals("Louis",customer.getName());
+ }
+
+ @Test
+ void getID() {
+ Customer customer = new Customer("Louis",1,1200,1);
+ assertEquals(1,customer.getID());
+ }
+
+ @Test
+ void getArriveTime() {
+ Customer customer = new Customer("Louis",1,1200,1);
+ assertEquals(1200,customer.getArriveTime());
+ }
+
+ @Test
+ void getDayOfWeek() {
+ Customer customer = new Customer("Louis",1,1200,1);
+ assertEquals(1,customer.getDayOfWeek());
+ }
+
+ @Test
+ void checkOpenStalls() {
+ Customer customer = new Customer("Louis",1,1200,1);
+ Dish pattaya = new Dish("Pattaya", 5.5,
+ "First try, quite impressive to me!");
+ Dish plainThosai = new Dish("Plain Thosai", 2.0,
+ "Quite good, bu I like butter one more.");
+ Dish prata = new Dish("Prata", 3.0,
+ "Recommended by my friends, after this try, I will also recommend this to others.");
+ Stall indian = new Stall("Indian", 10,"Jurong West 964",
+ 1000,2000, Arrays.asList(2,3,5,7),
+ Arrays.asList(pattaya,plainThosai,prata),4);
+
+ Dish plainWaffle = new Dish("Plain Waffle", 1.8,
+ "Like other flavor more, but this one is cheap :)");
+ Dish chocoBanaWaffle = new Dish("Choco Banana Waffle", 2.2,
+ "The flavor of the chocolate and banana are so good!!!");
+ Dish oreoCheese = new Dish("Oreo Cheese Waffle", 2.2,
+ "Very suitable for the cheese lovers.");
+ Stall waffles = new Stall("Waffles",11,"North Spine Level 1",
+ 730,2130,Arrays.asList(1,2,3,4,5),
+ Arrays.asList(plainWaffle,chocoBanaWaffle,oreoCheese),4);
+
+ Dish milo = new Dish("Coffee",1.2,
+ "Normal milo lol");
+ Dish watermelon = new Dish("Watermelon Drink", 1.8,
+ "Really like this since eat watermelon is quite mafan.");
+ Dish milkshade = new Dish("Milk shade",1.8,
+ "A bit too sweet for me.");
+ Stall drinks = new Stall("Drinks",12,"Jurong West Ave 5",
+ 1100,2200,Arrays.asList(3,4,5,6),
+ Arrays.asList(milo,watermelon,milkshade),4);
+
+ Canteen canteen4 = new Canteen("Canteen 4",Arrays.asList(indian,waffles,drinks),
+ Arrays.asList(730,730,730,730,730,1100,1000), Arrays.asList(2130,2130,2200,2200,2200,2200,2000));
+ assertEquals(1,customer.checkOpenStalls(canteen4).size());
+ assertEquals(waffles,customer.checkOpenStalls(canteen4).get(0));
+
+
+ }
+
+ @Test
+ void checkOpenCanteens() {
+ Customer customer = new Customer("Louis",1,1200,1);
+ Dish pattaya = new Dish("Pattaya", 5.5,
+ "First try, quite impressive to me!");
+ Dish plainThosai = new Dish("Plain Thosai", 2.0,
+ "Quite good, bu I like butter one more.");
+ Dish prata = new Dish("Prata", 3.0,
+ "Recommended by my friends, after this try, I will also recommend this to others.");
+ Stall indian = new Stall("Indian", 10,"Jurong West 964",
+ 1000,2000, Arrays.asList(2,3,5,7),
+ Arrays.asList(pattaya,plainThosai,prata),4);
+
+ Dish plainWaffle = new Dish("Plain Waffle", 1.8,
+ "Like other flavor more, but this one is cheap :)");
+ Dish chocoBanaWaffle = new Dish("Choco Banana Waffle", 2.2,
+ "The flavor of the chocolate and banana are so good!!!");
+ Dish oreoCheese = new Dish("Oreo Cheese Waffle", 2.2,
+ "Very suitable for the cheese lovers.");
+ Stall waffles = new Stall("Waffles",11,"North Spine Level 1",
+ 730,2130,Arrays.asList(1,2,3,4,5),
+ Arrays.asList(plainWaffle,chocoBanaWaffle,oreoCheese),4);
+
+ Dish milo = new Dish("Coffee",1.2,
+ "Normal milo lol");
+ Dish watermelon = new Dish("Watermelon Drink", 1.8,
+ "Really like this since eat watermelon is quite mafan.");
+ Dish milkshade = new Dish("Milk shade",1.8,
+ "A bit too sweet for me.");
+ Stall drinks = new Stall("Drinks",12,"Jurong West Ave 5",
+ 1100,2200,Arrays.asList(3,4,5,6),
+ Arrays.asList(milo,watermelon,milkshade),4);
+
+ Canteen canteen4 = new Canteen("Canteen 4",Arrays.asList(indian,waffles,drinks),
+ Arrays.asList(730,730,730,730,730,1100,1000), Arrays.asList(2130,2130,2200,2200,2200,2200,2000));
+ List canteenList = new ArrayList<>();
+ canteenList.add(canteen4);
+ assertEquals(1,customer.checkOpenCanteens(canteenList).size());
+ assertEquals(canteen4,customer.checkOpenCanteens(canteenList).get(0));
+ }
+
+
+}
\ No newline at end of file
diff --git a/src/test/java/DishTest.java b/src/test/java/DishTest.java
new file mode 100644
index 0000000000..8797835725
--- /dev/null
+++ b/src/test/java/DishTest.java
@@ -0,0 +1,28 @@
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+class DishTest {
+
+ @Test
+ void getDishName() {
+ Dish dish = new Dish("Chicken rice",5,"so nice!");
+ assertEquals("Chicken rice",dish.getDishName());
+ }
+
+ @Test
+ void getPrice() {
+ Dish dish = new Dish("Chicken rice",5,"so nice!");
+ assertEquals(5,dish.getPrice());
+ }
+
+ @Test
+ void getComment() {
+ Dish dish = new Dish("Chicken rice",5,"so nice!");
+ assertEquals("so nice!",dish.getComment());
+ }
+
+ @Test
+ void testToString() {
+ }
+}
\ No newline at end of file
diff --git a/src/test/java/OrderTest.java b/src/test/java/OrderTest.java
new file mode 100644
index 0000000000..572236d769
--- /dev/null
+++ b/src/test/java/OrderTest.java
@@ -0,0 +1,131 @@
+import org.junit.jupiter.api.Test;
+
+import java.util.Arrays;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+class OrderTest {
+
+ @Test
+ void getCanteen() {
+ Dish porkChop = new Dish("Pork Chop",4,
+ "Sugar, spice, and everything nice.");
+ Dish fishNChip = new Dish("Fish & Chip",4,
+ "Very crispy, makes me feel the happiness of eating!");
+ Dish chickenCutLet = new Dish("Chicken Cutlet",3.5,
+ "Not very good tasting, I think the meat is a bit hard to eat.");
+ Stall westernStall = new Stall("Western Stall", 1,
+ "Hall of Residence 1, 21 Nanyang Cir, Singapore 639778",
+ 900,1800, Arrays.asList(1,2,3,5,6,7),
+ Arrays.asList(porkChop,fishNChip,chickenCutLet),1);
+
+ Dish espresso = new Dish("Espresso",5,
+ "The coffee smells good but it is a bit bitter for me.");
+ Dish caramelFrappuccino = new Dish("Caramel Frappuccino",7.5,
+ "I don't taste any coffee. Extremely sweet");
+ Dish signatureHotChocolateckenCutLet = new Dish("Signature Hot Chocolate",6,
+ "The cake is accompanied by a slight bitterness from the dark chocolate " +
+ "that lingers at the back of your throat. It is super addictive for a chocolate lover like myself.");
+ Stall starbucks = new Stall("Starbucks", 2,
+ "Hall of Residence 1, 21 Nanyang Cir, Singapore 639778",
+ 900,1830, Arrays.asList(2,3,4,5,6,7),
+ Arrays.asList(espresso,caramelFrappuccino,signatureHotChocolateckenCutLet),1);
+
+ Dish sweetNSourPorkRice = new Dish("Sweet & Sour Pork Rice",4.5,
+ "The meat is good taste, but the rice is not very good");
+ Dish curryChickenRice = new Dish("Curry Chicken Rice",3.5,
+ "The curry is sooooo delicious!!!!");
+ Dish friedRiceWithBeef = new Dish("Fried Rice with Beef",5,
+ "I think there is too much oil in this dish");
+ Stall claypotRice = new Stall("ClaypotRice", 3,
+ "Hall of Residence 1, 21 Nanyang Cir, Singapore 639778",
+ 800,2000, Arrays.asList(3,4,5,6,7),
+ Arrays.asList(sweetNSourPorkRice,curryChickenRice,friedRiceWithBeef),1);
+
+ Canteen canteen1 = new Canteen("Canteen 1", Arrays.asList(westernStall,starbucks,claypotRice),
+ Arrays.asList(900,900,800,800,800,800,800),Arrays.asList(1800,1830,2000,2000,2000,2000,2000));
+
+ assertEquals(canteen1, new Order(canteen1,starbucks,Arrays.asList(espresso),
+ new Customer("w",1,900,2)).getCanteen());
+
+ }
+
+ @Test
+ void getStall() {
+ Dish kimchiFriedRice = new Dish("Kimchi Fried Rice", 3.50,
+ "As a korean, I find the taste in my home country.");
+ Dish spicyChickenSet = new Dish("Spicy Chicken Set", 5.00,
+ "The chicken tastes good but it is too spicy for me.");
+ Dish kimchiRamen = new Dish("Kimchi Ramen", 4.00,
+ "The kimchi is really delicious as this is my first time to eat this.");
+ Stall koreanStall = new Stall("KoreanStall", 4, "35 Students Walk",
+ 830, 1730, Arrays.asList(1,2,3,4),
+ Arrays.asList(kimchiFriedRice, spicyChickenSet, kimchiRamen), 2);
+
+ Dish pepperoni = new Dish("Pepperoni", 8.50,
+ "This dish made me feel like diving in the sea.");
+ Dish hawaiian = new Dish("Hawaiian", 9.50,
+ "I love this hawaii pizza. I want to marry it and eat it at the wedding.");
+ Dish aglioOlio = new Dish("Aglio Olio",10.50,
+ "The preparation of this dish is easy and quick. Pasta is made in many colors, different shapes" +
+ " and is known by many names in a different country.");
+ Stall pizzaHut = new Stall("PizzaHut",5, "35 Students Walk", 900, 1800,
+ Arrays.asList(1,2,4,5,6), Arrays.asList(pepperoni, hawaiian, aglioOlio),2);
+
+ Dish mcChicken = new Dish("Mc Chicken", 2,
+ "The most classic hamburger in the world!");
+ Dish mcNuggets = new Dish("Mc Nuggets", 4,
+ "This is really my favorite among all fast food.");
+ Dish applePie = new Dish("Apple Pie", 2,
+ "this one is good but i prefer the other flavor's pie :)");
+ Stall macDonalds = new Stall("MacDonalds",6, "35 Students Walk",
+ 930, 1830, Arrays.asList(2,3,4,7),
+ Arrays.asList(mcChicken, mcNuggets, applePie),2);
+
+ Canteen canteen2 =new Canteen("Canteen 2",Arrays.asList(koreanStall,pizzaHut,macDonalds),
+ Arrays.asList(830,830,830,830,900,900,930), Arrays.asList(1730,1830,1830,1830,1800,1800,1830));
+
+ assertEquals(pizzaHut, new Order(canteen2,pizzaHut,Arrays.asList(hawaiian),
+ new Customer("y",2,830,3)).getStall());
+ }
+
+ @Test
+ void getDish() {
+ Dish beefNoodle = new Dish("Beef Noodle",3,
+ "The beef is really good, but I think this dish is a bit salty :(");
+ Dish tomatoEggNoodle = new Dish("Tomato Egg Noodle", 2.5,
+ "Really tasteful!!! After this, I know the reason why most Chinese like tomato and egg.");
+ Dish noodlesWithSoyBeanPaste = new Dish ("Noodles with Soy Bean Paste",3,
+ "Although my Chinese friends like this very much, but as an Indian I do not like this.");
+ Stall noodles = new Stall("Noodles",7,"20 Nanyang Cres",
+ 830,1930,Arrays.asList(1,2,3,6),
+ Arrays.asList(beefNoodle,tomatoEggNoodle,noodlesWithSoyBeanPaste),3);
+
+ Dish sweetAndSourMeet = new Dish("Sweet&Sour Meet",5,
+ "The taste of the sweetness and sour are just right.");
+ Dish kungPaoTofu = new Dish("Kung Pao Tofu", 4.5,
+ "Really good, worth try, but not understand the name of this dish.");
+ Dish boiledFish = new Dish("Boiled Fish", 5.5,
+ "First try! Really spicy!!");
+ Stall siChuan = new Stall("Si Chuan",8,"24 Nanyang Ave",
+ 900,1830,Arrays.asList(1,2,3,4,5),
+ Arrays.asList(sweetAndSourMeet,kungPaoTofu,boiledFish),3);
+
+ Dish spicyChicken = new Dish("Spicy Chicken",3.5,
+ "Very crispy and spicy!");
+ Dish saltedEggChicken = new Dish("Salted Egg Chicken",4,
+ "Really like this taste of chicken with salted egg.");
+ Dish mapoTofu = new Dish("Mapo Tofu",2.5,
+ "Heard of this dish before, really good.");
+ Stall mixedRice = new Stall("Mixed Rice",9,"32 Nanyang Cres",
+ 800,1900,Arrays.asList(1,2,5,7),
+ Arrays.asList(spicyChicken,saltedEggChicken,mapoTofu),3);
+
+ Canteen canteen3 = new Canteen("Canteen 3",Arrays.asList(noodles,siChuan,mixedRice),
+ Arrays.asList(800,800,830,900,800,830,800), Arrays.asList(1830,1830,1830,1830,1830,1930,1900));
+
+ assertEquals(spicyChicken, new Order(canteen3,mixedRice,Arrays.asList(spicyChicken),
+ new Customer("q",3,900,4)).getDish().get(0));
+
+ }
+}
\ No newline at end of file
diff --git a/src/test/java/ParserTest.java b/src/test/java/ParserTest.java
new file mode 100644
index 0000000000..cd6765e8c9
--- /dev/null
+++ b/src/test/java/ParserTest.java
@@ -0,0 +1,22 @@
+import exception.ArriveTimeException;
+import exception.DayOfWeekException;
+import org.junit.jupiter.api.Test;
+
+import java.util.Arrays;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+class ParserTest {
+
+ @Test
+ void parseCustomer() throws DayOfWeekException, ArriveTimeException {
+ assertEquals("z", Parser.parseCustomer("z/2/1200").name);
+ assertEquals(1, Parser.parseCustomer("z/2/1200").dayOfWeek);
+ assertEquals(1200, Parser.parseCustomer("z/2/1200").arriveTime);
+ }
+
+ @Test
+ void parseList() {
+ assertEquals(Arrays.asList(1,2,3),Parser.parseList("[1,2,3]"));
+ }
+}
\ No newline at end of file
diff --git a/src/test/java/StallTest.java b/src/test/java/StallTest.java
new file mode 100644
index 0000000000..3f29065131
--- /dev/null
+++ b/src/test/java/StallTest.java
@@ -0,0 +1,71 @@
+import org.junit.jupiter.api.Test;
+
+import java.util.Arrays;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+class StallTest {
+
+ @Test
+ void getOpenTime() {
+ Dish plainWaffle = new Dish("Plain Waffle", 1.8,
+ "Like other flavor more, but this one is cheap :)");
+ Dish chocoBanaWaffle = new Dish("Choco Banana Waffle", 2.2,
+ "The flavor of the chocolate and banana are so good!!!");
+ Dish oreoCheese = new Dish("Oreo Cheese Waffle", 2.2,
+ "Very suitable for the cheese lovers.");
+ Stall waffles = new Stall("Waffles",11,"North Spine Level 1",
+ 730,2130, Arrays.asList(1,2,3,4,5),
+ Arrays.asList(plainWaffle,chocoBanaWaffle,oreoCheese),4);
+ assertEquals(730,waffles.getOpenTime());
+ }
+
+ @Test
+ void getCloseTime() {
+ Dish plainWaffle = new Dish("Plain Waffle", 1.8,
+ "Like other flavor more, but this one is cheap :)");
+ Dish chocoBanaWaffle = new Dish("Choco Banana Waffle", 2.2,
+ "The flavor of the chocolate and banana are so good!!!");
+ Dish oreoCheese = new Dish("Oreo Cheese Waffle", 2.2,
+ "Very suitable for the cheese lovers.");
+ Stall waffles = new Stall("Waffles",11,"North Spine Level 1",
+ 730,2130, Arrays.asList(1,2,3,4,5),
+ Arrays.asList(plainWaffle,chocoBanaWaffle,oreoCheese),4);
+ assertEquals(2130,waffles.getCloseTime());
+
+ }
+
+ @Test
+ void getDish() {
+ Dish plainWaffle = new Dish("Plain Waffle", 1.8,
+ "Like other flavor more, but this one is cheap :)");
+ Dish chocoBanaWaffle = new Dish("Choco Banana Waffle", 2.2,
+ "The flavor of the chocolate and banana are so good!!!");
+ Dish oreoCheese = new Dish("Oreo Cheese Waffle", 2.2,
+ "Very suitable for the cheese lovers.");
+ Stall waffles = new Stall("Waffles",11,"North Spine Level 1",
+ 730,2130, Arrays.asList(1,2,3,4,5),
+ Arrays.asList(plainWaffle,chocoBanaWaffle,oreoCheese),4);
+ assertEquals(plainWaffle,waffles.getDish().get(0));
+ assertEquals(chocoBanaWaffle,waffles.getDish().get(1));
+ assertEquals(oreoCheese,waffles.getDish().get(2));
+ }
+
+
+
+ @Test
+ void isOpen() {
+ Dish plainWaffle = new Dish("Plain Waffle", 1.8,
+ "Like other flavor more, but this one is cheap :)");
+ Dish chocoBanaWaffle = new Dish("Choco Banana Waffle", 2.2,
+ "The flavor of the chocolate and banana are so good!!!");
+ Dish oreoCheese = new Dish("Oreo Cheese Waffle", 2.2,
+ "Very suitable for the cheese lovers.");
+ Stall waffles = new Stall("Waffles",11,"North Spine Level 1",
+ 730,2130, Arrays.asList(1,2,3,4,5),
+ Arrays.asList(plainWaffle,chocoBanaWaffle,oreoCheese),4);
+ assertEquals(true,waffles.isOpen(2,1200));
+ }
+
+
+}
\ No newline at end of file
diff --git a/src/test/java/UITest.java b/src/test/java/UITest.java
new file mode 100644
index 0000000000..72a9b70769
--- /dev/null
+++ b/src/test/java/UITest.java
@@ -0,0 +1,25 @@
+import org.junit.jupiter.api.Test;
+
+import java.util.Scanner;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+class UITest {
+
+ protected static Scanner sc = new Scanner(System.in);
+ @Test
+ void getCustomer() {
+ try {
+ assertEquals("z", UI.getCustomer(sc).name);
+ assertEquals(1, UI.getCustomer(sc).dayOfWeek);
+ assertEquals(1200, UI.getCustomer(sc).arriveTime);
+ fail(); // the test should not reach this line
+ } catch (Exception e) {
+ assertEquals("Wrong Message", e.getMessage());
+ }
+ }
+ @Test
+ void getOrder(){
+
+ }
+}
\ No newline at end of file
diff --git a/src/test/java/deliveryOrderTest.java b/src/test/java/deliveryOrderTest.java
new file mode 100644
index 0000000000..45fb8207ab
--- /dev/null
+++ b/src/test/java/deliveryOrderTest.java
@@ -0,0 +1,129 @@
+import org.junit.jupiter.api.Test;
+
+import java.util.Arrays;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+class deliveryOrderTest {
+
+ @Test
+ void getIsDeliveryOrder() {
+ Dish porkChop = new Dish("Pork Chop",4,
+ "Sugar, spice, and everything nice.");
+ Dish fishNChip = new Dish("Fish & Chip",4,
+ "Very crispy, makes me feel the happiness of eating!");
+ Dish chickenCutLet = new Dish("Chicken Cutlet",3.5,
+ "Not very good tasting, I think the meat is a bit hard to eat.");
+ Stall westernStall = new Stall("Western Stall", 1,
+ "Hall of Residence 1, 21 Nanyang Cir, Singapore 639778",
+ 900,1800, Arrays.asList(1,2,3,5,6,7),
+ Arrays.asList(porkChop,fishNChip,chickenCutLet),1);
+
+ Dish espresso = new Dish("Espresso",5,
+ "The coffee smells good but it is a bit bitter for me.");
+ Dish caramelFrappuccino = new Dish("Caramel Frappuccino",7.5,
+ "I don't taste any coffee. Extremely sweet");
+ Dish signatureHotChocolateckenCutLet = new Dish("Signature Hot Chocolate",6,
+ "The cake is accompanied by a slight bitterness from the dark chocolate " +
+ "that lingers at the back of your throat. It is super addictive for a chocolate lover like myself.");
+ Stall starbucks = new Stall("Starbucks", 2,
+ "Hall of Residence 1, 21 Nanyang Cir, Singapore 639778",
+ 900,1830, Arrays.asList(2,3,4,5,6,7),
+ Arrays.asList(espresso,caramelFrappuccino,signatureHotChocolateckenCutLet),1);
+
+ Dish sweetNSourPorkRice = new Dish("Sweet & Sour Pork Rice",4.5,
+ "The meat is good taste, but the rice is not very good");
+ Dish curryChickenRice = new Dish("Curry Chicken Rice",3.5,
+ "The curry is sooooo delicious!!!!");
+ Dish friedRiceWithBeef = new Dish("Fried Rice with Beef",5,
+ "I think there is too much oil in this dish");
+ Stall claypotRice = new Stall("ClaypotRice", 3,
+ "Hall of Residence 1, 21 Nanyang Cir, Singapore 639778",
+ 800,2000, Arrays.asList(3,4,5,6,7),
+ Arrays.asList(sweetNSourPorkRice,curryChickenRice,friedRiceWithBeef),1);
+
+ Canteen canteen1 = new Canteen("Canteen 1", Arrays.asList(westernStall,starbucks,claypotRice),
+ Arrays.asList(900,900,800,800,800,800,800),Arrays.asList(1800,1830,2000,2000,2000,2000,2000));
+
+ assertEquals(true, new deliveryOrder(canteen1,claypotRice,Arrays.asList(curryChickenRice),
+ new Customer("r",4,900,6),true).getIsDeliveryOrder());
+ }
+
+ @Test
+ void getCarrierFee() {
+ Dish kimchiFriedRice = new Dish("Kimchi Fried Rice", 3.50,
+ "As a korean, I find the taste in my home country.");
+ Dish spicyChickenSet = new Dish("Spicy Chicken Set", 5.00,
+ "The chicken tastes good but it is too spicy for me.");
+ Dish kimchiRamen = new Dish("Kimchi Ramen", 4.00,
+ "The kimchi is really delicious as this is my first time to eat this.");
+ Stall koreanStall = new Stall("KoreanStall", 4, "35 Students Walk",
+ 830, 1730, Arrays.asList(1,2,3,4),
+ Arrays.asList(kimchiFriedRice, spicyChickenSet, kimchiRamen), 2);
+
+ Dish pepperoni = new Dish("Pepperoni", 8.50,
+ "This dish made me feel like diving in the sea.");
+ Dish hawaiian = new Dish("Hawaiian", 9.50,
+ "I love this hawaii pizza. I want to marry it and eat it at the wedding.");
+ Dish aglioOlio = new Dish("Aglio Olio",10.50,
+ "The preparation of this dish is easy and quick. Pasta is made in many colors, different shapes" +
+ " and is known by many names in a different country.");
+ Stall pizzaHut = new Stall("PizzaHut",5, "35 Students Walk", 900, 1800,
+ Arrays.asList(1,2,4,5,6), Arrays.asList(pepperoni, hawaiian, aglioOlio),2);
+
+ Dish mcChicken = new Dish("Mc Chicken", 2,
+ "The most classic hamburger in the world!");
+ Dish mcNuggets = new Dish("Mc Nuggets", 4,
+ "This is really my favorite among all fast food.");
+ Dish applePie = new Dish("Apple Pie", 2,
+ "this one is good but i prefer the other flavor's pie :)");
+ Stall macDonalds = new Stall("MacDonalds",6, "35 Students Walk",
+ 930, 1830, Arrays.asList(2,3,4,7),
+ Arrays.asList(mcChicken, mcNuggets, applePie),2);
+
+ Canteen canteen2 =new Canteen("Canteen 2",Arrays.asList(koreanStall,pizzaHut,macDonalds),
+ Arrays.asList(830,830,830,830,900,900,930), Arrays.asList(1730,1830,1830,1830,1800,1800,1830));
+
+ assertEquals(0.3, new deliveryOrder(canteen2,macDonalds,Arrays.asList(mcNuggets),
+ new Customer("t",5,1000,2),true).getCarrierFee());
+ }
+
+ @Test
+ void getDeliveryFee() {
+ Dish beefNoodle = new Dish("Beef Noodle",3,
+ "The beef is really good, but I think this dish is a bit salty :(");
+ Dish tomatoEggNoodle = new Dish("Tomato Egg Noodle", 2.5,
+ "Really tasteful!!! After this, I know the reason why most Chinese like tomato and egg.");
+ Dish noodlesWithSoyBeanPaste = new Dish ("Noodles with Soy Bean Paste",3,
+ "Although my Chinese friends like this very much, but as an Indian I do not like this.");
+ Stall noodles = new Stall("Noodles",7,"20 Nanyang Cres",
+ 830,1930,Arrays.asList(1,2,3,6),
+ Arrays.asList(beefNoodle,tomatoEggNoodle,noodlesWithSoyBeanPaste),3);
+
+ Dish sweetAndSourMeet = new Dish("Sweet&Sour Meet",5,
+ "The taste of the sweetness and sour are just right.");
+ Dish kungPaoTofu = new Dish("Kung Pao Tofu", 4.5,
+ "Really good, worth try, but not understand the name of this dish.");
+ Dish boiledFish = new Dish("Boiled Fish", 5.5,
+ "First try! Really spicy!!");
+ Stall siChuan = new Stall("Si Chuan",8,"24 Nanyang Ave",
+ 900,1830,Arrays.asList(1,2,3,4,5),
+ Arrays.asList(sweetAndSourMeet,kungPaoTofu,boiledFish),3);
+
+ Dish spicyChicken = new Dish("Spicy Chicken",3.5,
+ "Very crispy and spicy!");
+ Dish saltedEggChicken = new Dish("Salted Egg Chicken",4,
+ "Really like this taste of chicken with salted egg.");
+ Dish mapoTofu = new Dish("Mapo Tofu",2.5,
+ "Heard of this dish before, really good.");
+ Stall mixedRice = new Stall("Mixed Rice",9,"32 Nanyang Cres",
+ 800,1900,Arrays.asList(1,2,5,7),
+ Arrays.asList(spicyChicken,saltedEggChicken,mapoTofu),3);
+
+ Canteen canteen3 = new Canteen("Canteen 3",Arrays.asList(noodles,siChuan,mixedRice),
+ Arrays.asList(800,800,830,900,800,830,800), Arrays.asList(1830,1830,1830,1830,1830,1930,1900));
+
+ assertEquals(2.0, new deliveryOrder(canteen3,siChuan,Arrays.asList(boiledFish ),
+ new Customer("a",6,1200,5),true).getDeliveryFee());
+ }
+}
\ No newline at end of file
diff --git a/src/test/java/dineInOrderTest.java b/src/test/java/dineInOrderTest.java
new file mode 100644
index 0000000000..9e728b4e35
--- /dev/null
+++ b/src/test/java/dineInOrderTest.java
@@ -0,0 +1,47 @@
+import org.junit.jupiter.api.Test;
+
+import java.util.Arrays;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+class dineInOrderTest {
+
+ @Test
+ void getIsDineIn() {
+ Dish kimchiFriedRice = new Dish("Kimchi Fried Rice", 3.50,
+ "As a korean, I find the taste in my home country.");
+ Dish spicyChickenSet = new Dish("Spicy Chicken Set", 5.00,
+ "The chicken tastes good but it is too spicy for me.");
+ Dish kimchiRamen = new Dish("Kimchi Ramen", 4.00,
+ "The kimchi is really delicious as this is my first time to eat this.");
+ Stall koreanStall = new Stall("KoreanStall", 4, "35 Students Walk",
+ 830, 1730, Arrays.asList(1,2,3,4),
+ Arrays.asList(kimchiFriedRice, spicyChickenSet, kimchiRamen), 2);
+
+ Dish pepperoni = new Dish("Pepperoni", 8.50,
+ "This dish made me feel like diving in the sea.");
+ Dish hawaiian = new Dish("Hawaiian", 9.50,
+ "I love this hawaii pizza. I want to marry it and eat it at the wedding.");
+ Dish aglioOlio = new Dish("Aglio Olio",10.50,
+ "The preparation of this dish is easy and quick. Pasta is made in many colors, different shapes" +
+ " and is known by many names in a different country.");
+ Stall pizzaHut = new Stall("PizzaHut",5, "35 Students Walk", 900, 1800,
+ Arrays.asList(1,2,4,5,6), Arrays.asList(pepperoni, hawaiian, aglioOlio),2);
+
+ Dish mcChicken = new Dish("Mc Chicken", 2,
+ "The most classic hamburger in the world!");
+ Dish mcNuggets = new Dish("Mc Nuggets", 4,
+ "This is really my favorite among all fast food.");
+ Dish applePie = new Dish("Apple Pie", 2,
+ "this one is good but i prefer the other flavor's pie :)");
+ Stall macDonalds = new Stall("MacDonalds",6, "35 Students Walk",
+ 930, 1830, Arrays.asList(2,3,4,7),
+ Arrays.asList(mcChicken, mcNuggets, applePie),2);
+
+ Canteen canteen2 =new Canteen("Canteen 2",Arrays.asList(koreanStall,pizzaHut,macDonalds),
+ Arrays.asList(830,830,830,830,900,900,930), Arrays.asList(1730,1830,1830,1830,1800,1800,1830));
+
+ assertEquals(true, new dineInOrder(canteen2,koreanStall,Arrays.asList(kimchiRamen),
+ new Customer("c",10,1600,4),true).getIsDineIn());
+ }
+}
\ No newline at end of file
diff --git a/src/test/java/seedu/duke/DukeTest.java b/src/test/java/seedu/duke/DukeTest.java
index 2dda5fd651..0637c48a5d 100644
--- a/src/test/java/seedu/duke/DukeTest.java
+++ b/src/test/java/seedu/duke/DukeTest.java
@@ -1,12 +1,12 @@
-package seedu.duke;
-
-import static org.junit.jupiter.api.Assertions.assertTrue;
-
-import org.junit.jupiter.api.Test;
-
-class DukeTest {
- @Test
- public void sampleTest() {
- assertTrue(true);
- }
-}
+package seedu.duke;
+
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+import org.junit.jupiter.api.Test;
+
+class DukeTest {
+ @Test
+ public void sampleTest() {
+ assertTrue(true);
+ }
+}
diff --git a/src/test/java/takeAwayOrderTest.java b/src/test/java/takeAwayOrderTest.java
new file mode 100644
index 0000000000..a45aa65ffe
--- /dev/null
+++ b/src/test/java/takeAwayOrderTest.java
@@ -0,0 +1,90 @@
+import org.junit.jupiter.api.Test;
+
+import java.util.Arrays;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+class takeAwayOrderTest {
+
+ @Test
+ void getIsTakeAway() {
+ Dish pattaya = new Dish("Pattaya", 5.5,
+ "First try, quite impressive to me!");
+ Dish plainThosai = new Dish("Plain Thosai", 2.0,
+ "Quite good, bu I like butter one more.");
+ Dish prata = new Dish("Prata", 3.0,
+ "Recommended by my friends, after this try, I will also recommend this to others.");
+ Stall indian = new Stall("Indian", 10,"Jurong West 964",
+ 1000,2000, Arrays.asList(2,3,5,7),
+ Arrays.asList(pattaya,plainThosai,prata),4);
+
+ Dish plainWaffle = new Dish("Plain Waffle", 1.8,
+ "Like other flavor more, but this one is cheap :)");
+ Dish chocoBanaWaffle = new Dish("Choco Banana Waffle", 2.2,
+ "The flavor of the chocolate and banana are so good!!!");
+ Dish oreoCheese = new Dish("Oreo Cheese Waffle", 2.2,
+ "Very suitable for the cheese lovers.");
+ Stall waffles = new Stall("Waffles",11,"North Spine Level 1",
+ 730,2130,Arrays.asList(1,2,3,4,5),
+ Arrays.asList(plainWaffle,chocoBanaWaffle,oreoCheese),4);
+
+ Dish milo = new Dish("Coffee",1.2,
+ "Normal milo lol");
+ Dish watermelon = new Dish("Watermelon Drink", 1.8,
+ "Really like this since eat watermelon is quite mafan.");
+ Dish milkshade = new Dish("Milk shade",1.8,
+ "A bit too sweet for me.");
+ Stall drinks = new Stall("Drinks",12,"Jurong West Ave 5",
+ 1100,2200,Arrays.asList(3,4,5,6),
+ Arrays.asList(milo,watermelon,milkshade),4);
+
+ Canteen canteen4 = new Canteen("Canteen 4",Arrays.asList(indian,waffles,drinks),
+ Arrays.asList(730,730,730,730,730,1100,1000), Arrays.asList(2130,2130,2200,2200,2200,2200,2000));
+
+ assertEquals(true, new takeAwayOrder(canteen4,drinks,Arrays.asList(milo),
+ new Customer("u",9,800,4),true).getIsTakeAway());
+ }
+
+ @Test
+ void getCarrierFee() {
+ Dish porkChop = new Dish("Pork Chop",4,
+ "Sugar, spice, and everything nice.");
+ Dish fishNChip = new Dish("Fish & Chip",4,
+ "Very crispy, makes me feel the happiness of eating!");
+ Dish chickenCutLet = new Dish("Chicken Cutlet",3.5,
+ "Not very good tasting, I think the meat is a bit hard to eat.");
+ Stall westernStall = new Stall("Western Stall", 1,
+ "Hall of Residence 1, 21 Nanyang Cir, Singapore 639778",
+ 900,1800, Arrays.asList(1,2,3,5,6,7),
+ Arrays.asList(porkChop,fishNChip,chickenCutLet),1);
+
+ Dish espresso = new Dish("Espresso",5,
+ "The coffee smells good but it is a bit bitter for me.");
+ Dish caramelFrappuccino = new Dish("Caramel Frappuccino",7.5,
+ "I don't taste any coffee. Extremely sweet");
+ Dish signatureHotChocolateckenCutLet = new Dish("Signature Hot Chocolate",6,
+ "The cake is accompanied by a slight bitterness from the dark chocolate " +
+ "that lingers at the back of your throat. It is super addictive for a chocolate lover like myself.");
+ Stall starbucks = new Stall("Starbucks", 2,
+ "Hall of Residence 1, 21 Nanyang Cir, Singapore 639778",
+ 900,1830, Arrays.asList(2,3,4,5,6,7),
+ Arrays.asList(espresso,caramelFrappuccino,signatureHotChocolateckenCutLet),1);
+
+ Dish sweetNSourPorkRice = new Dish("Sweet & Sour Pork Rice",4.5,
+ "The meat is good taste, but the rice is not very good");
+ Dish curryChickenRice = new Dish("Curry Chicken Rice",3.5,
+ "The curry is sooooo delicious!!!!");
+ Dish friedRiceWithBeef = new Dish("Fried Rice with Beef",5,
+ "I think there is too much oil in this dish");
+ Stall claypotRice = new Stall("ClaypotRice", 3,
+ "Hall of Residence 1, 21 Nanyang Cir, Singapore 639778",
+ 800,2000, Arrays.asList(3,4,5,6,7),
+ Arrays.asList(sweetNSourPorkRice,curryChickenRice,friedRiceWithBeef),1);
+
+ Canteen canteen1 = new Canteen("Canteen 1", Arrays.asList(westernStall,starbucks,claypotRice),
+ Arrays.asList(900,900,800,800,800,800,800),Arrays.asList(1800,1830,2000,2000,2000,2000,2000));
+
+ assertEquals(0.3, new takeAwayOrder(canteen1,westernStall,Arrays.asList(fishNChip),
+ new Customer("d",11,1500,7),true).getCarrierFee());
+ }
+}
\ No newline at end of file
diff --git a/text-ui-test/EXPECTED.TXT b/text-ui-test/EXPECTED.TXT
index 892cb6cae7..c73737c783 100644
--- a/text-ui-test/EXPECTED.TXT
+++ b/text-ui-test/EXPECTED.TXT
@@ -1,9 +1,9 @@
-Hello from
- ____ _
-| _ \ _ _| | _____
-| | | | | | | |/ / _ \
-| |_| | |_| | < __/
-|____/ \__,_|_|\_\___|
-
-What is your name?
-Hello James Gosling
+Hello from
+ ____ _
+| _ \ _ _| | _____
+| | | | | | | |/ / _ \
+| |_| | |_| | < __/
+|____/ \__,_|_|\_\___|
+
+What is your name?
+Hello James Gosling
diff --git a/text-ui-test/runtest.bat b/text-ui-test/runtest.bat
index 25ac7a2989..d319847d3f 100644
--- a/text-ui-test/runtest.bat
+++ b/text-ui-test/runtest.bat
@@ -1,19 +1,19 @@
-@echo off
-setlocal enableextensions
-pushd %~dp0
-
-cd ..
-call gradlew clean shadowJar
-
-cd build\libs
-for /f "tokens=*" %%a in (
- 'dir /b *.jar'
-) do (
- set jarloc=%%a
-)
-
-java -jar %jarloc% < ..\..\text-ui-test\input.txt > ..\..\text-ui-test\ACTUAL.TXT
-
-cd ..\..\text-ui-test
-
-FC ACTUAL.TXT EXPECTED.TXT >NUL && ECHO Test passed! || Echo Test failed!
+@echo off
+setlocal enableextensions
+pushd %~dp0
+
+cd ..
+call gradlew clean shadowJar
+
+cd build\libs
+for /f "tokens=*" %%a in (
+ 'dir /b *.jar'
+) do (
+ set jarloc=%%a
+)
+
+java -jar %jarloc% < ..\..\text-ui-test\input.txt > ..\..\text-ui-test\ACTUAL.TXT
+
+cd ..\..\text-ui-test
+
+FC ACTUAL.TXT EXPECTED.TXT >NUL && ECHO Test passed! || Echo Test failed!
diff --git a/text-ui-test/runtest.sh b/text-ui-test/runtest.sh
index 1dcbd12021..0ce44dba9b 100755
--- a/text-ui-test/runtest.sh
+++ b/text-ui-test/runtest.sh
@@ -1,23 +1,23 @@
-#!/usr/bin/env bash
-
-# change to script directory
-cd "${0%/*}"
-
-cd ..
-./gradlew clean shadowJar
-
-cd text-ui-test
-
-java -jar $(find ../build/libs/ -mindepth 1 -print -quit) < input.txt > ACTUAL.TXT
-
-cp EXPECTED.TXT EXPECTED-UNIX.TXT
-dos2unix EXPECTED-UNIX.TXT ACTUAL.TXT
-diff EXPECTED-UNIX.TXT ACTUAL.TXT
-if [ $? -eq 0 ]
-then
- echo "Test passed!"
- exit 0
-else
- echo "Test failed!"
- exit 1
-fi
+#!/usr/bin/env bash
+
+# change to script directory
+cd "${0%/*}"
+
+cd ..
+./gradlew clean shadowJar
+
+cd text-ui-test
+
+java -jar $(find ../build/libs/ -mindepth 1 -print -quit) < input.txt > ACTUAL.TXT
+
+cp EXPECTED.TXT EXPECTED-UNIX.TXT
+dos2unix EXPECTED-UNIX.TXT ACTUAL.TXT
+diff EXPECTED-UNIX.TXT ACTUAL.TXT
+if [ $? -eq 0 ]
+then
+ echo "Test passed!"
+ exit 0
+else
+ echo "Test failed!"
+ exit 1
+fi