From 01fb06dc8b2251020cd6ed3b53855f249654072d Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 15 Oct 2024 15:08:17 +0000 Subject: [PATCH] deploy: 4905482fb55a11a379e389010aab00a3d7a6af52 --- AboutUs.html | 4 +- AboutUs.page-vue-render.js | 2 +- Configuration.html | 4 +- Configuration.page-vue-render.js | 2 +- DevOps.html | 4 +- DevOps.page-vue-render.js | 4 +- DeveloperGuide.html | 10 ++--- DeveloperGuide.page-vue-render.js | 42 ++++++++++----------- Documentation.html | 4 +- Documentation.page-vue-render.js | 2 +- Logging.html | 4 +- Logging.page-vue-render.js | 2 +- SettingUp.html | 6 +-- SettingUp.page-vue-render.js | 4 +- Testing.html | 4 +- Testing.page-vue-render.js | 2 +- UserGuide.html | 10 ++--- UserGuide.page-vue-render.js | 14 +++---- diagrams/ArchitectureSequenceDiagram.png | Bin 14423 -> 14581 bytes diagrams/ArchitectureSequenceDiagram.puml | 2 +- diagrams/BetterModelClassDiagram.png | Bin 13418 -> 13482 bytes diagrams/BetterModelClassDiagram.puml | 4 +- diagrams/CommitActivityDiagram.png | Bin 16334 -> 16378 bytes diagrams/CommitActivityDiagram.puml | 6 +-- diagrams/DeleteSequenceDiagram.png | Bin 26912 -> 26759 bytes diagrams/DeleteSequenceDiagram.puml | 20 +++++----- diagrams/ModelClassDiagram.png | Bin 26947 -> 27402 bytes diagrams/ModelClassDiagram.puml | 12 +++--- diagrams/ParserClasses.png | Bin 28747 -> 28869 bytes diagrams/ParserClasses.puml | 8 ++-- diagrams/StorageClassDiagram.png | Bin 28710 -> 29391 bytes diagrams/StorageClassDiagram.puml | 18 ++++----- diagrams/UndoRedoState0.png | Bin 6122 -> 6178 bytes diagrams/UndoRedoState0.puml | 6 +-- diagrams/UndoRedoState1.png | Bin 6926 -> 7119 bytes diagrams/UndoRedoState1.puml | 6 +-- diagrams/UndoRedoState2.png | Bin 7501 -> 7884 bytes diagrams/UndoRedoState2.puml | 6 +-- diagrams/UndoRedoState3.png | Bin 7087 -> 7435 bytes diagrams/UndoRedoState3.puml | 6 +-- diagrams/UndoRedoState4.png | Bin 7112 -> 7463 bytes diagrams/UndoRedoState4.puml | 6 +-- diagrams/UndoRedoState5.png | Bin 8855 -> 9133 bytes diagrams/UndoRedoState5.puml | 6 +-- diagrams/UndoSequenceDiagram-Logic.png | Bin 17045 -> 17837 bytes diagrams/UndoSequenceDiagram-Logic.puml | 16 ++++---- diagrams/UndoSequenceDiagram-Model.png | Bin 10176 -> 10760 bytes diagrams/UndoSequenceDiagram-Model.puml | 14 +++---- diagrams/tracing/LogicSequenceDiagram.puml | 2 +- index.html | 4 +- index.page-vue-render.js | 4 +- siteData.json | 18 +++------ team/blackpanther9229.html | 4 +- team/blackpanther9229.page-vue-render.js | 4 +- team/cyx22222003.html | 4 +- team/cyx22222003.page-vue-render.js | 2 +- team/johndoe.html | 30 --------------- team/johndoe.page-vue-render.js | 13 ------- team/justin.html | 4 +- team/justin.page-vue-render.js | 4 +- team/krashkart.html | 6 +-- team/krashkart.page-vue-render.js | 4 +- 62 files changed, 156 insertions(+), 207 deletions(-) delete mode 100644 team/johndoe.html delete mode 100644 team/johndoe.page-vue-render.js diff --git a/AboutUs.html b/AboutUs.html index c8cd6442700..b383117f351 100644 --- a/AboutUs.html +++ b/AboutUs.html @@ -4,7 +4,7 @@ - CampusConnect - About Us - AddressBook Level-3 + CampusConnect - About Us - CampusConnect Level-3 @@ -20,7 +20,7 @@ [portfolio]

Justin Jiang

[github] [portfolio]

Zheng Jie

[github] [portfolio]

Chen Yixun

[github] [portfolio]

Christopher Tan

[github] -[portfolio]

+[portfolio]

diff --git a/AboutUs.page-vue-render.js b/AboutUs.page-vue-render.js index cacdf0c1cfb..748648173da 100644 --- a/AboutUs.page-vue-render.js +++ b/AboutUs.page-vue-render.js @@ -8,6 +8,6 @@ with(this){return _c('div',{attrs:{"id":"app"}},[_c('header',{attrs:{"sticky":"" with(this){return _c('div',{attrs:{"id":"content-wrapper"}},[_c('h1',{attrs:{"id":"about-us"}},[_v("About Us"),_c('a',{staticClass:"fa fa-anchor",attrs:{"href":"#about-us","onclick":"event.stopPropagation()"}})]),_v(" "),_c('p',[_v("We are a team based in the "),_c('a',{attrs:{"href":"http://www.comp.nus.edu.sg"}},[_v("School of Computing, National University of Singapore")]),_v(".")]),_v(" "),_c('p',[_v("You can reach us at the email "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("seer[at]comp.nus.edu.sg")])]),_v(" "),_c('h2',{attrs:{"id":"project-team"}},[_v("Project team"),_c('a',{staticClass:"fa fa-anchor",attrs:{"href":"#project-team","onclick":"event.stopPropagation()"}})]),_v(" "),_c('p',[_v("AY2425S1-CS2103T-F14a-4")]),_v(" "),_c('h3',{attrs:{"id":"nguyen-tien-hoang"}},[_v("Nguyen Tien Hoang"),_c('a',{staticClass:"fa fa-anchor",attrs:{"href":"#nguyen-tien-hoang","onclick":"event.stopPropagation()"}})]),_v(" "),_c('img',{attrs:{"src":"/tp/images/blackpanther9229.png","width":"200px"}}),_v(" "),_c('p',[_v("["),_c('a',{attrs:{"href":"https://github.com/blackpanther9229"}},[_v("github")]),_v("]\n["),_c('a',{attrs:{"href":"/tp/team/blackpanther9229.html"}},[_v("portfolio")]),_v("]")]),_v(" "),_c('ul',[_c('li',[_v("Role: Team Lead")]),_v(" "),_c('li',[_v("Responsibilities: UI")])]),_v(" "),_c('h3',{attrs:{"id":"justin-jiang"}},[_v("Justin Jiang"),_c('a',{staticClass:"fa fa-anchor",attrs:{"href":"#justin-jiang","onclick":"event.stopPropagation()"}})]),_v(" "),_c('img',{attrs:{"src":"/tp/images/yooplo.png","width":"200px"}}),_v(" "),_c('p',[_v("["),_c('a',{attrs:{"href":"http://github.com/yooplo"}},[_v("github")]),_v("]\n["),_c('a',{attrs:{"href":"/tp/team/justin.html"}},[_v("portfolio")]),_v("]")]),_v(" "),_c('ul',[_c('li',[_v("Role: Developer")]),_v(" "),_c('li',[_v("Responsibilities: UI")])]),_v(" "),_c('h3',{attrs:{"id":"zheng-jie"}},[_v("Zheng Jie"),_c('a',{staticClass:"fa fa-anchor",attrs:{"href":"#zheng-jie","onclick":"event.stopPropagation()"}})]),_v(" "),_c('img',{attrs:{"src":"/tp/images/krashkart.png","width":"200px"}}),_v(" "),_c('p',[_v("["),_c('a',{attrs:{"href":"https://github.com/KrashKart"}},[_v("github")]),_v("] ["),_c('a',{attrs:{"href":"/tp/team/krashkart.html"}},[_v("portfolio")]),_v("]")]),_v(" "),_c('ul',[_c('li',[_v("Role: Developer")]),_v(" "),_c('li',[_v("Responsibilities: Data")])]),_v(" "),_c('h3',{attrs:{"id":"chen-yixun"}},[_v("Chen Yixun"),_c('a',{staticClass:"fa fa-anchor",attrs:{"href":"#chen-yixun","onclick":"event.stopPropagation()"}})]),_v(" "),_c('img',{attrs:{"src":"/tp/images/cyx22222003.png","width":"200px"}}),_v(" "),_c('p',[_v("["),_c('a',{attrs:{"href":"http://github.com/cyx22222003"}},[_v("github")]),_v("]\n["),_c('a',{attrs:{"href":"/tp/team/cyx22222003.html"}},[_v("portfolio")]),_v("]")]),_v(" "),_c('ul',[_c('li',[_v("Role: Developer")]),_v(" "),_c('li',[_v("Responsibilities: Dev Ops + Threading")])]),_v(" "),_c('h3',{attrs:{"id":"christopher-tan"}},[_v("Christopher Tan"),_c('a',{staticClass:"fa fa-anchor",attrs:{"href":"#christopher-tan","onclick":"event.stopPropagation()"}})]),_v(" "),_c('img',{attrs:{"src":"/tp/images/chrisjohntan.png","width":"200px"}}),_v(" "),_c('p',[_v("["),_c('a',{attrs:{"href":"http://github.com/chrisjohntan"}},[_v("github")]),_v("]\n["),_c('a',{attrs:{"href":"/tp/team/chrisjohntan.html"}},[_v("portfolio")]),_v("]")]),_v(" "),_c('ul',[_c('li',[_v("Role: Developer")]),_v(" "),_c('li',[_v("Responsibilities: Integration")])])])} },function anonymous( ) { -with(this){return _c('footer',[_c('div',{staticClass:"text-center"},[_c('small',[_v("["),_c('span',[_c('strong',[_v("Powered by")])]),_v(" "),_c('img',{attrs:{"src":"https://markbind.org/favicon.ico","width":"30"}}),_v(" "),_c('a',{attrs:{"href":"https://markbind.org/"}},[_v("MarkBind 5.5.3")]),_v(", generated on Tue, 15 Oct 2024, 19:35:50 GMT+8]")])])])} +with(this){return _c('footer',[_c('div',{staticClass:"text-center"},[_c('small',[_v("["),_c('span',[_c('strong',[_v("Powered by")])]),_v(" "),_c('img',{attrs:{"src":"https://markbind.org/favicon.ico","width":"30"}}),_v(" "),_c('a',{attrs:{"href":"https://markbind.org/"}},[_v("MarkBind 5.5.3")]),_v(", generated on Tue, 15 Oct 2024, 23:08:02 GMT+8]")])])])} }]; \ No newline at end of file diff --git a/Configuration.html b/Configuration.html index 8cbe8992d6e..ec261c67684 100644 --- a/Configuration.html +++ b/Configuration.html @@ -4,7 +4,7 @@ - CampusConnect - Configuration guide - AddressBook Level-3 + CampusConnect - Configuration guide - CampusConnect Level-3 @@ -16,7 +16,7 @@ Search

Configuration guide

Certain properties of the application can be controlled (e.g user preferences file location, logging level) through the configuration file (default: config.json).

+
  • Configuration guide

    Certain properties of the application can be controlled (e.g user preferences file location, logging level) through the configuration file (default: config.json).

    diff --git a/Configuration.page-vue-render.js b/Configuration.page-vue-render.js index 443a55581d7..755f35a951e 100644 --- a/Configuration.page-vue-render.js +++ b/Configuration.page-vue-render.js @@ -8,6 +8,6 @@ with(this){return _c('div',{attrs:{"id":"app"}},[_c('header',{attrs:{"sticky":"" with(this){return _c('div',{attrs:{"id":"content-wrapper"}},[_c('h1',{attrs:{"id":"configuration-guide"}},[_v("Configuration guide"),_c('a',{staticClass:"fa fa-anchor",attrs:{"href":"#configuration-guide","onclick":"event.stopPropagation()"}})]),_v(" "),_c('p',[_v("Certain properties of the application can be controlled (e.g user preferences file location, logging level) through the configuration file (default: "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("config.json")]),_v(").")])])} },function anonymous( ) { -with(this){return _c('footer',[_c('div',{staticClass:"text-center"},[_c('small',[_v("["),_c('span',[_c('strong',[_v("Powered by")])]),_v(" "),_c('img',{attrs:{"src":"https://markbind.org/favicon.ico","width":"30"}}),_v(" "),_c('a',{attrs:{"href":"https://markbind.org/"}},[_v("MarkBind 5.5.3")]),_v(", generated on Tue, 15 Oct 2024, 19:35:50 GMT+8]")])])])} +with(this){return _c('footer',[_c('div',{staticClass:"text-center"},[_c('small',[_v("["),_c('span',[_c('strong',[_v("Powered by")])]),_v(" "),_c('img',{attrs:{"src":"https://markbind.org/favicon.ico","width":"30"}}),_v(" "),_c('a',{attrs:{"href":"https://markbind.org/"}},[_v("MarkBind 5.5.3")]),_v(", generated on Tue, 15 Oct 2024, 23:08:02 GMT+8]")])])])} }]; \ No newline at end of file diff --git a/DevOps.html b/DevOps.html index f9370748beb..381b907882e 100644 --- a/DevOps.html +++ b/DevOps.html @@ -4,7 +4,7 @@ - CampusConnect - DevOps guide - AddressBook Level-3 + CampusConnect - DevOps guide - CampusConnect Level-3 @@ -18,7 +18,7 @@
  • DevOps guide

    Build automation

    This project uses Gradle for build automation and dependency management. You are recommended to read this Gradle Tutorial from the se-edu/guides.

    Given below are how to use Gradle for some important project tasks.


    Continuous integration (CI)

    This project uses GitHub Actions for CI. The project comes with the necessary GitHub Actions configurations files (in the .github/workflows folder). No further setting up required.

    Code coverage

    As part of CI, this project uses Codecov to generate coverage reports. When CI runs, it will generate code coverage data (based on the tests run by CI) and upload that data to the CodeCov website, which in turn can provide you more info about the coverage of your tests.

    However, because Codecov is known to run into intermittent problems (e.g., report upload fails) due to issues on the Codecov service side, the CI is configured to pass even if the Codecov task failed. Therefore, developers are advised to check the code coverage levels periodically and take corrective actions if the coverage level falls below desired levels.

    To enable Codecov for forks of this project, follow the steps given in this se-edu guide.

    Repository-wide checks

    In addition to running Gradle checks, CI includes some repository-wide checks. Unlike the Gradle checks which only cover files used in the build process, these repository-wide checks cover all files in the repository. They check for repository rules which are hard to enforce on development machines such as line ending requirements.

    These checks are implemented as POSIX shell scripts, and thus can only be run on POSIX-compliant operating systems such as macOS and Linux. To run all checks locally on these operating systems, execute the following in the repository root directory:

    ./config/travis/run-checks.sh

    Any warnings or errors will be printed out to the console.

    If adding new checks:


    Making a release

    Here are the steps to create a new release.

    1. Update the version number in MainApp.java.
    2. Generate a fat JAR file using Gradle (i.e., gradlew shadowJar).
    3. Tag the repo with the version number. e.g. v0.1
    4. Create a new release using GitHub. Upload the JAR file you created.
    +e.g. ./gradlew shadowJar.

  • run: Builds and runs the application.
    runShadow: Builds the application as a fat JAR, and then runs it.

  • checkstyleMain: Runs the code style check for the main code base.
    checkstyleTest: Runs the code style check for the test code base.

  • test: Runs all tests.


  • Continuous integration (CI)

    This project uses GitHub Actions for CI. The project comes with the necessary GitHub Actions configurations files (in the .github/workflows folder). No further setting up required.

    Code coverage

    As part of CI, this project uses Codecov to generate coverage reports. When CI runs, it will generate code coverage data (based on the tests run by CI) and upload that data to the CodeCov website, which in turn can provide you more info about the coverage of your tests.

    However, because Codecov is known to run into intermittent problems (e.g., report upload fails) due to issues on the Codecov service side, the CI is configured to pass even if the Codecov task failed. Therefore, developers are advised to check the code coverage levels periodically and take corrective actions if the coverage level falls below desired levels.

    To enable Codecov for forks of this project, follow the steps given in this se-edu guide.

    Repository-wide checks

    In addition to running Gradle checks, CI includes some repository-wide checks. Unlike the Gradle checks which only cover files used in the build process, these repository-wide checks cover all files in the repository. They check for repository rules which are hard to enforce on development machines such as line ending requirements.

    These checks are implemented as POSIX shell scripts, and thus can only be run on POSIX-compliant operating systems such as macOS and Linux. To run all checks locally on these operating systems, execute the following in the repository root directory:

    ./config/travis/run-checks.sh

    Any warnings or errors will be printed out to the console.

    If adding new checks:


    Making a release

    Here are the steps to create a new release.

    1. Update the version number in MainApp.java.
    2. Generate a fat JAR file using Gradle (i.e., gradlew shadowJar).
    3. Tag the repo with the version number. e.g. v0.1
    4. Create a new release using GitHub. Upload the JAR file you created.
    diff --git a/DevOps.page-vue-render.js b/DevOps.page-vue-render.js index 765a1f28444..cfda7726ef1 100644 --- a/DevOps.page-vue-render.js +++ b/DevOps.page-vue-render.js @@ -5,9 +5,9 @@ with(this){return _c('div',{attrs:{"id":"app"}},[_c('header',{attrs:{"sticky":"" }; var pageVueStaticRenderFns = [function anonymous( ) { -with(this){return _c('div',{attrs:{"id":"content-wrapper"}},[_c('h1',{attrs:{"id":"devops-guide"}},[_v("DevOps guide"),_c('a',{staticClass:"fa fa-anchor",attrs:{"href":"#devops-guide","onclick":"event.stopPropagation()"}})]),_v(" "),_c('div',{pre:true,attrs:{"class":"page-nav-print d-none d-print-block"}}),_v(" "),_c('h2',{attrs:{"id":"build-automation"}},[_v("Build automation"),_c('a',{staticClass:"fa fa-anchor",attrs:{"href":"#build-automation","onclick":"event.stopPropagation()"}})]),_v(" "),_c('p',[_v("This project uses Gradle for "),_c('strong',[_v("build automation and dependency management")]),_v(". "),_c('strong',[_v("You are recommended to read "),_c('a',{attrs:{"href":"https://se-education.org/guides/tutorials/gradle.html"}},[_v("this Gradle Tutorial from the se-edu/guides")])]),_v(".")]),_v(" "),_c('p',[_v("Given below are how to use Gradle for some important project tasks.")]),_v(" "),_c('ul',[_c('li',[_c('p',[_c('strong',[_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("clean")])]),_v(": Deletes the files created during the previous build tasks (e.g. files in the "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("build")]),_v(" folder)."),_c('br'),_v("\ne.g. "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("./gradlew clean")])])]),_v(" "),_c('li',[_c('p',[_c('strong',[_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("shadowJar")])]),_v(": Uses the ShadowJar plugin to creat a fat JAR file in the "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("build/lib")]),_v(" folder, "),_c('em',[_v("if the current file is outdated")]),_v("."),_c('br'),_v("\ne.g. "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("./gradlew shadowJar")]),_v(".")])]),_v(" "),_c('li',[_c('p',[_c('strong',[_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("run")])]),_v(": Builds and runs the application."),_c('br'),_v(" "),_c('strong',[_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("runShadow")])]),_v(": Builds the application as a fat JAR, and then runs it.")])]),_v(" "),_c('li',[_c('p',[_c('strong',[_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("checkstyleMain")])]),_v(": Runs the code style check for the main code base."),_c('br'),_v(" "),_c('strong',[_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("checkstyleTest")])]),_v(": Runs the code style check for the test code base.")])]),_v(" "),_c('li',[_c('p',[_c('strong',[_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("test")])]),_v(": Runs all tests.")]),_v(" "),_c('ul',[_c('li',[_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("./gradlew test")]),_v(" — Runs all tests")]),_v(" "),_c('li',[_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("./gradlew clean test")]),_v(" — Cleans the project and runs tests")])])])]),_v(" "),_c('hr'),_v(" "),_c('h2',{attrs:{"id":"continuous-integration-ci"}},[_v("Continuous integration (CI)"),_c('a',{staticClass:"fa fa-anchor",attrs:{"href":"#continuous-integration-ci","onclick":"event.stopPropagation()"}})]),_v(" "),_c('p',[_v("This project uses GitHub Actions for CI. The project comes with the necessary GitHub Actions configurations files (in the "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v(".github/workflows")]),_v(" folder). No further setting up required.")]),_v(" "),_c('h3',{attrs:{"id":"code-coverage"}},[_v("Code coverage"),_c('a',{staticClass:"fa fa-anchor",attrs:{"href":"#code-coverage","onclick":"event.stopPropagation()"}})]),_v(" "),_c('p',[_v("As part of CI, this project uses Codecov to generate coverage reports. When CI runs, it will generate code coverage data (based on the tests run by CI) and upload that data to the CodeCov website, which in turn can provide you more info about the coverage of your tests.")]),_v(" "),_c('p',[_v("However, because Codecov is known to run into intermittent problems (e.g., report upload fails) due to issues on the Codecov service side, the CI is configured to pass even if the Codecov task failed. Therefore, developers are advised to check the code coverage levels periodically and take corrective actions if the coverage level falls below desired levels.")]),_v(" "),_c('p',[_v("To enable Codecov for forks of this project, follow the steps given in "),_c('a',{attrs:{"href":"https://se-education.org/guides/tutorials/codecov.html"}},[_v("this se-edu guide")]),_v(".")]),_v(" "),_c('h3',{attrs:{"id":"repository-wide-checks"}},[_v("Repository-wide checks"),_c('a',{staticClass:"fa fa-anchor",attrs:{"href":"#repository-wide-checks","onclick":"event.stopPropagation()"}})]),_v(" "),_c('p',[_v("In addition to running Gradle checks, CI includes some repository-wide checks. Unlike the Gradle checks which only cover files used in the build process, these repository-wide checks cover all files in the repository. They check for repository rules which are hard to enforce on development machines such as line ending requirements.")]),_v(" "),_c('p',[_v("These checks are implemented as POSIX shell scripts, and thus can only be run on POSIX-compliant operating systems such as macOS and Linux. To run all checks locally on these operating systems, execute the following in the repository root directory:")]),_v(" "),_c('p',[_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("./config/travis/run-checks.sh")])]),_v(" "),_c('p',[_v("Any warnings or errors will be printed out to the console.")]),_v(" "),_c('p',[_c('strong',[_v("If adding new checks:")])]),_v(" "),_c('ul',[_c('li',[_c('p',[_v("Checks are implemented as executable "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("check-*")]),_v(" scripts within the "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v(".github")]),_v(" directory. The "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("run-checks.sh")]),_v(" script will automatically pick up and run files named as such. That is, you can add more such files if you need and the CI will do the rest.")])]),_v(" "),_c('li',[_c('p',[_v("Check scripts should print out errors in the format "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("SEVERITY:FILENAME:LINE: MESSAGE")])]),_v(" "),_c('ul',[_c('li',[_v("SEVERITY is either ERROR or WARN.")]),_v(" "),_c('li',[_v("FILENAME is the path to the file relative to the current directory.")]),_v(" "),_c('li',[_v("LINE is the line of the file where the error occurred and MESSAGE is the message explaining the error.")])])]),_v(" "),_c('li',[_c('p',[_v("Check scripts must exit with a non-zero exit code if any errors occur.")])])]),_v(" "),_c('hr'),_v(" "),_c('h2',{attrs:{"id":"making-a-release"}},[_v("Making a release"),_c('a',{staticClass:"fa fa-anchor",attrs:{"href":"#making-a-release","onclick":"event.stopPropagation()"}})]),_v(" "),_c('p',[_v("Here are the steps to create a new release.")]),_v(" "),_c('ol',[_c('li',[_v("Update the version number in "),_c('a',{attrs:{"href":"https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/MainApp.java"}},[_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("MainApp.java")])]),_v(".")]),_v(" "),_c('li',[_v("Generate a fat JAR file using Gradle (i.e., "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("gradlew shadowJar")]),_v(").")]),_v(" "),_c('li',[_v("Tag the repo with the version number. e.g. "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("v0.1")])]),_v(" "),_c('li',[_c('a',{attrs:{"href":"https://help.github.com/articles/creating-releases/"}},[_v("Create a new release using GitHub")]),_v(". Upload the JAR file you created.")])])])} +with(this){return _c('div',{attrs:{"id":"content-wrapper"}},[_c('h1',{attrs:{"id":"devops-guide"}},[_v("DevOps guide"),_c('a',{staticClass:"fa fa-anchor",attrs:{"href":"#devops-guide","onclick":"event.stopPropagation()"}})]),_v(" "),_c('div',{pre:true,attrs:{"class":"page-nav-print d-none d-print-block"}}),_v(" "),_c('h2',{attrs:{"id":"build-automation"}},[_v("Build automation"),_c('a',{staticClass:"fa fa-anchor",attrs:{"href":"#build-automation","onclick":"event.stopPropagation()"}})]),_v(" "),_c('p',[_v("This project uses Gradle for "),_c('strong',[_v("build automation and dependency management")]),_v(". "),_c('strong',[_v("You are recommended to read "),_c('a',{attrs:{"href":"https://se-education.org/guides/tutorials/gradle.html"}},[_v("this Gradle Tutorial from the se-edu/guides")])]),_v(".")]),_v(" "),_c('p',[_v("Given below are how to use Gradle for some important project tasks.")]),_v(" "),_c('ul',[_c('li',[_c('p',[_c('strong',[_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("clean")])]),_v(": Deletes the files created during the previous build tasks (e.g. files in the "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("build")]),_v(" folder)."),_c('br'),_v("\ne.g. "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("./gradlew clean")])])]),_v(" "),_c('li',[_c('p',[_c('strong',[_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("shadowJar")])]),_v(": Uses the ShadowJar plugin to creat a fat JAR file in the "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("build/lib")]),_v(" folder, "),_c('em',[_v("if the current file is outdated")]),_v("."),_c('br'),_v("\ne.g. "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("./gradlew shadowJar")]),_v(".")])]),_v(" "),_c('li',[_c('p',[_c('strong',[_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("run")])]),_v(": Builds and runs the application."),_c('br'),_v(" "),_c('strong',[_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("runShadow")])]),_v(": Builds the application as a fat JAR, and then runs it.")])]),_v(" "),_c('li',[_c('p',[_c('strong',[_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("checkstyleMain")])]),_v(": Runs the code style check for the main code base."),_c('br'),_v(" "),_c('strong',[_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("checkstyleTest")])]),_v(": Runs the code style check for the test code base.")])]),_v(" "),_c('li',[_c('p',[_c('strong',[_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("test")])]),_v(": Runs all tests.")]),_v(" "),_c('ul',[_c('li',[_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("./gradlew test")]),_v(" — Runs all tests")]),_v(" "),_c('li',[_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("./gradlew clean test")]),_v(" — Cleans the project and runs tests")])])])]),_v(" "),_c('hr'),_v(" "),_c('h2',{attrs:{"id":"continuous-integration-ci"}},[_v("Continuous integration (CI)"),_c('a',{staticClass:"fa fa-anchor",attrs:{"href":"#continuous-integration-ci","onclick":"event.stopPropagation()"}})]),_v(" "),_c('p',[_v("This project uses GitHub Actions for CI. The project comes with the necessary GitHub Actions configurations files (in the "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v(".github/workflows")]),_v(" folder). No further setting up required.")]),_v(" "),_c('h3',{attrs:{"id":"code-coverage"}},[_v("Code coverage"),_c('a',{staticClass:"fa fa-anchor",attrs:{"href":"#code-coverage","onclick":"event.stopPropagation()"}})]),_v(" "),_c('p',[_v("As part of CI, this project uses Codecov to generate coverage reports. When CI runs, it will generate code coverage data (based on the tests run by CI) and upload that data to the CodeCov website, which in turn can provide you more info about the coverage of your tests.")]),_v(" "),_c('p',[_v("However, because Codecov is known to run into intermittent problems (e.g., report upload fails) due to issues on the Codecov service side, the CI is configured to pass even if the Codecov task failed. Therefore, developers are advised to check the code coverage levels periodically and take corrective actions if the coverage level falls below desired levels.")]),_v(" "),_c('p',[_v("To enable Codecov for forks of this project, follow the steps given in "),_c('a',{attrs:{"href":"https://se-education.org/guides/tutorials/codecov.html"}},[_v("this se-edu guide")]),_v(".")]),_v(" "),_c('h3',{attrs:{"id":"repository-wide-checks"}},[_v("Repository-wide checks"),_c('a',{staticClass:"fa fa-anchor",attrs:{"href":"#repository-wide-checks","onclick":"event.stopPropagation()"}})]),_v(" "),_c('p',[_v("In addition to running Gradle checks, CI includes some repository-wide checks. Unlike the Gradle checks which only cover files used in the build process, these repository-wide checks cover all files in the repository. They check for repository rules which are hard to enforce on development machines such as line ending requirements.")]),_v(" "),_c('p',[_v("These checks are implemented as POSIX shell scripts, and thus can only be run on POSIX-compliant operating systems such as macOS and Linux. To run all checks locally on these operating systems, execute the following in the repository root directory:")]),_v(" "),_c('p',[_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("./config/travis/run-checks.sh")])]),_v(" "),_c('p',[_v("Any warnings or errors will be printed out to the console.")]),_v(" "),_c('p',[_c('strong',[_v("If adding new checks:")])]),_v(" "),_c('ul',[_c('li',[_c('p',[_v("Checks are implemented as executable "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("check-*")]),_v(" scripts within the "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v(".github")]),_v(" directory. The "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("run-checks.sh")]),_v(" script will automatically pick up and run files named as such. That is, you can add more such files if you need and the CI will do the rest.")])]),_v(" "),_c('li',[_c('p',[_v("Check scripts should print out errors in the format "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("SEVERITY:FILENAME:LINE: MESSAGE")])]),_v(" "),_c('ul',[_c('li',[_v("SEVERITY is either ERROR or WARN.")]),_v(" "),_c('li',[_v("FILENAME is the path to the file relative to the current directory.")]),_v(" "),_c('li',[_v("LINE is the line of the file where the error occurred and MESSAGE is the message explaining the error.")])])]),_v(" "),_c('li',[_c('p',[_v("Check scripts must exit with a non-zero exit code if any errors occur.")])])]),_v(" "),_c('hr'),_v(" "),_c('h2',{attrs:{"id":"making-a-release"}},[_v("Making a release"),_c('a',{staticClass:"fa fa-anchor",attrs:{"href":"#making-a-release","onclick":"event.stopPropagation()"}})]),_v(" "),_c('p',[_v("Here are the steps to create a new release.")]),_v(" "),_c('ol',[_c('li',[_v("Update the version number in "),_c('a',{attrs:{"href":"https://github.com/se-edu/CampusConnect/tree/master/src/main/java/seedu/address/MainApp.java"}},[_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("MainApp.java")])]),_v(".")]),_v(" "),_c('li',[_v("Generate a fat JAR file using Gradle (i.e., "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("gradlew shadowJar")]),_v(").")]),_v(" "),_c('li',[_v("Tag the repo with the version number. e.g. "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("v0.1")])]),_v(" "),_c('li',[_c('a',{attrs:{"href":"https://help.github.com/articles/creating-releases/"}},[_v("Create a new release using GitHub")]),_v(". Upload the JAR file you created.")])])])} },function anonymous( ) { -with(this){return _c('footer',[_c('div',{staticClass:"text-center"},[_c('small',[_v("["),_c('span',[_c('strong',[_v("Powered by")])]),_v(" "),_c('img',{attrs:{"src":"https://markbind.org/favicon.ico","width":"30"}}),_v(" "),_c('a',{attrs:{"href":"https://markbind.org/"}},[_v("MarkBind 5.5.3")]),_v(", generated on Tue, 15 Oct 2024, 19:35:50 GMT+8]")])])])} +with(this){return _c('footer',[_c('div',{staticClass:"text-center"},[_c('small',[_v("["),_c('span',[_c('strong',[_v("Powered by")])]),_v(" "),_c('img',{attrs:{"src":"https://markbind.org/favicon.ico","width":"30"}}),_v(" "),_c('a',{attrs:{"href":"https://markbind.org/"}},[_v("MarkBind 5.5.3")]),_v(", generated on Tue, 15 Oct 2024, 23:08:02 GMT+8]")])])])} }]; \ No newline at end of file diff --git a/DeveloperGuide.html b/DeveloperGuide.html index 7bfdf7ce57b..4084d0bb99c 100644 --- a/DeveloperGuide.html +++ b/DeveloperGuide.html @@ -4,7 +4,7 @@ - CampusConnect - Developer Guide - AddressBook Level-3 + CampusConnect - Developer Guide - CampusConnect Level-3 @@ -16,16 +16,16 @@ Search

    AB-3 Developer Guide


    Acknowledgements

    { list here sources of all reused/adapted ideas, code, documentation, and third-party libraries -- include links to the original source as well }


    Setting up, getting started

    Refer to the guide Setting up and getting started.


    Design

    Architecture

    The Architecture Diagram given above explains the high-level design of the App.

    Given below is a quick overview of main components and how they interact with each other.

    Main components of the architecture

    Main (consisting of classes Main and MainApp) is in charge of the app launch and shut down.

    The bulk of the app's work is done by the following four components:

    Commons represents a collection of classes used by multiple other components.

    How the architecture components interact with each other

    The Sequence Diagram below shows how the components interact with each other for the scenario where the user issues the command delete 1.

    Each of the four main components (also shown in the diagram above),

    For example, the Logic component defines its API in the Logic.java interface and implements its functionality using the LogicManager.java class which follows the Logic interface. Other components interact with a given component through its interface rather than the concrete class (reason: to prevent outside component's being coupled to the implementation of a component), as illustrated in the (partial) class diagram below.

    The sections below give more details of each component.

    UI component

    The API of this component is specified in Ui.java

    Structure of the UI Component

    The UI consists of a MainWindow that is made up of parts e.g.CommandBox, ResultDisplay, PersonListPanel, StatusBarFooter etc. All these, including the MainWindow, inherit from the abstract UiPart class which captures the commonalities between classes that represent parts of the visible GUI.

    The UI component uses the JavaFx UI framework. The layout of these UI parts are defined in matching .fxml files that are in the src/main/resources/view folder. For example, the layout of the MainWindow is specified in MainWindow.fxml

    The UI component,

    Logic component

    API : Logic.java

    Here's a (partial) class diagram of the Logic component:

    The sequence diagram below illustrates the interactions within the Logic component, taking execute("delete 1") API call as an example.

    Interactions Inside the Logic Component for the `delete 1` Command

    Note: The lifeline for DeleteCommandParser should end at the destroy marker (X) but due to a limitation of PlantUML, the lifeline continues till the end of diagram.

    How the Logic component works:

    1. When Logic is called upon to execute a command, it is passed to an AddressBookParser object which in turn creates a parser that matches the command (e.g., DeleteCommandParser) and uses it to parse the command.
    2. This results in a Command object (more precisely, an object of one of its subclasses e.g., DeleteCommand) which is executed by the LogicManager.
    3. The command can communicate with the Model when it is executed (e.g. to delete a person).
      -Note that although this is shown as a single step in the diagram above (for simplicity), in the code it can take several interactions (between the command object and the Model) to achieve.
    4. The result of the command execution is encapsulated as a CommandResult object which is returned back from Logic.

    Here are the other classes in Logic (omitted from the class diagram above) that are used for parsing a user command:

    How the parsing works:

    Model component

    API : Model.java

    The Model component,

    Note: An alternative (arguably, a more OOP) model is given below. It has a Tag list in the AddressBook, which Person references. This allows AddressBook to only require one Tag object per unique tag, instead of each Person needing their own Tag objects.

    Storage component

    API : Storage.java

    The Storage component,

    Common classes

    Classes used by multiple components are in the seedu.address.commons package.


    Implementation

    This section describes some noteworthy details on how certain features are implemented.

    [Proposed] Undo/redo feature

    Proposed Implementation

    The proposed undo/redo mechanism is facilitated by VersionedAddressBook. It extends AddressBook with an undo/redo history, stored internally as an addressBookStateList and currentStatePointer. Additionally, it implements the following operations:

    These operations are exposed in the Model interface as Model#commitAddressBook(), Model#undoAddressBook() and Model#redoAddressBook() respectively.

    Given below is an example usage scenario and how the undo/redo mechanism behaves at each step.

    Step 1. The user launches the application for the first time. The VersionedAddressBook will be initialized with the initial address book state, and the currentStatePointer pointing to that single address book state.

    UndoRedoState0

    Step 2. The user executes delete 5 command to delete the 5th person in the address book. The delete command calls Model#commitAddressBook(), causing the modified state of the address book after the delete 5 command executes to be saved in the addressBookStateList, and the currentStatePointer is shifted to the newly inserted address book state.

    UndoRedoState1

    Step 3. The user executes add n/David …​ to add a new person. The add command also calls Model#commitAddressBook(), causing another modified address book state to be saved into the addressBookStateList.

    UndoRedoState2

    Note: If a command fails its execution, it will not call Model#commitAddressBook(), so the address book state will not be saved into the addressBookStateList.

    Step 4. The user now decides that adding the person was a mistake, and decides to undo that action by executing the undo command. The undo command will call Model#undoAddressBook(), which will shift the currentStatePointer once to the left, pointing it to the previous address book state, and restores the address book to that state.

    UndoRedoState3

    Note: If the currentStatePointer is at index 0, pointing to the initial AddressBook state, then there are no previous AddressBook states to restore. The undo command uses Model#canUndoAddressBook() to check if this is the case. If so, it will return an error to the user rather -than attempting to perform the undo.

    The following sequence diagram shows how an undo operation goes through the Logic component:

    UndoSequenceDiagram-Logic

    Note: The lifeline for UndoCommand should end at the destroy marker (X) but due to a limitation of PlantUML, the lifeline reaches the end of diagram.

    Similarly, how an undo operation goes through the Model component is shown below:

    UndoSequenceDiagram-Model

    The redo command does the opposite — it calls Model#redoAddressBook(), which shifts the currentStatePointer once to the right, pointing to the previously undone state, and restores the address book to that state.

    Note: If the currentStatePointer is at index addressBookStateList.size() - 1, pointing to the latest address book state, then there are no undone AddressBook states to restore. The redo command uses Model#canRedoAddressBook() to check if this is the case. If so, it will return an error to the user rather than attempting to perform the redo.

    Step 5. The user then decides to execute the command list. Commands that do not modify the address book, such as list, will usually not call Model#commitAddressBook(), Model#undoAddressBook() or Model#redoAddressBook(). Thus, the addressBookStateList remains unchanged.

    UndoRedoState4

    Step 6. The user executes clear, which calls Model#commitAddressBook(). Since the currentStatePointer is not pointing at the end of the addressBookStateList, all address book states after the currentStatePointer will be purged. Reason: It no longer makes sense to redo the add n/David …​ command. This is the behavior that most modern desktop applications follow.

    UndoRedoState5

    The following activity diagram summarizes what happens when a user executes a new command:

    Design considerations:

    Aspect: How undo & redo executes:

  • AB-3 Developer Guide


    Acknowledgements

    { list here sources of all reused/adapted ideas, code, documentation, and third-party libraries -- include links to the original source as well }


    Setting up, getting started

    Refer to the guide Setting up and getting started.


    Design

    Architecture

    The Architecture Diagram given above explains the high-level design of the App.

    Given below is a quick overview of main components and how they interact with each other.

    Main components of the architecture

    Main (consisting of classes Main and MainApp) is in charge of the app launch and shut down.

    The bulk of the app's work is done by the following four components:

    Commons represents a collection of classes used by multiple other components.

    How the architecture components interact with each other

    The Sequence Diagram below shows how the components interact with each other for the scenario where the user issues the command delete 1.

    Each of the four main components (also shown in the diagram above),

    For example, the Logic component defines its API in the Logic.java interface and implements its functionality using the LogicManager.java class which follows the Logic interface. Other components interact with a given component through its interface rather than the concrete class (reason: to prevent outside component's being coupled to the implementation of a component), as illustrated in the (partial) class diagram below.

    The sections below give more details of each component.

    UI component

    The API of this component is specified in Ui.java

    Structure of the UI Component

    The UI consists of a MainWindow that is made up of parts e.g.CommandBox, ResultDisplay, PersonListPanel, StatusBarFooter etc. All these, including the MainWindow, inherit from the abstract UiPart class which captures the commonalities between classes that represent parts of the visible GUI.

    The UI component uses the JavaFx UI framework. The layout of these UI parts are defined in matching .fxml files that are in the src/main/resources/view folder. For example, the layout of the MainWindow is specified in MainWindow.fxml

    The UI component,

    Logic component

    API : Logic.java

    Here's a (partial) class diagram of the Logic component:

    The sequence diagram below illustrates the interactions within the Logic component, taking execute("delete 1") API call as an example.

    Interactions Inside the Logic Component for the `delete 1` Command

    Note: The lifeline for DeleteCommandParser should end at the destroy marker (X) but due to a limitation of PlantUML, the lifeline continues till the end of diagram.

    How the Logic component works:

    1. When Logic is called upon to execute a command, it is passed to an CampusConnectParser object which in turn creates a parser that matches the command (e.g., DeleteCommandParser) and uses it to parse the command.
    2. This results in a Command object (more precisely, an object of one of its subclasses e.g., DeleteCommand) which is executed by the LogicManager.
    3. The command can communicate with the Model when it is executed (e.g. to delete a person).
      +Note that although this is shown as a single step in the diagram above (for simplicity), in the code it can take several interactions (between the command object and the Model) to achieve.
    4. The result of the command execution is encapsulated as a CommandResult object which is returned back from Logic.

    Here are the other classes in Logic (omitted from the class diagram above) that are used for parsing a user command:

    How the parsing works:

    Model component

    API : Model.java

    The Model component,

    Note: An alternative (arguably, a more OOP) model is given below. It has a Tag list in the CampusConnect, which Person references. This allows CampusConnect to only require one Tag object per unique tag, instead of each Person needing their own Tag objects.

    Storage component

    API : Storage.java

    The Storage component,

    Common classes

    Classes used by multiple components are in the seedu.address.commons package.


    Implementation

    This section describes some noteworthy details on how certain features are implemented.

    [Proposed] Undo/redo feature

    Proposed Implementation

    The proposed undo/redo mechanism is facilitated by VersionedCampusConnect. It extends CampusConnect with an undo/redo history, stored internally as an CampusConnectStateList and currentStatePointer. Additionally, it implements the following operations:

    These operations are exposed in the Model interface as Model#commitCampusConnect(), Model#undoCampusConnect() and Model#redoCampusConnect() respectively.

    Given below is an example usage scenario and how the undo/redo mechanism behaves at each step.

    Step 1. The user launches the application for the first time. The VersionedCampusConnect will be initialized with the initial CampusConnect state, and the currentStatePointer pointing to that single address book state.

    UndoRedoState0

    Step 2. The user executes delete 5 command to delete the 5th person in the address book. The delete command calls Model#commitCampusConnect(), causing the modified state of the address book after the delete 5 command executes to be saved in the campusConnectStateList, and the currentStatePointer is shifted to the newly inserted address book state.

    UndoRedoState1

    Step 3. The user executes add n/David …​ to add a new person. The add command also calls Model#commitCampusConnect(), causing another modified address book state to be saved into the campusConnectStateList.

    UndoRedoState2

    Note: If a command fails its execution, it will not call Model#commitCampusConnect(), so the CampusConnect state will not be saved into the campusConnectStateList.

    Step 4. The user now decides that adding the person was a mistake, and decides to undo that action by executing the undo command. The undo command will call Model#undoCampusConnect(), which will shift the currentStatePointer once to the left, pointing it to the previous address book state, and restores the address book to that state.

    UndoRedoState3

    Note: If the currentStatePointer is at index 0, pointing to the initial CampusConnect state, then there are no previous CampusConnect states to restore. The undo command uses Model#canUndoCampusConnect() to check if this is the case. If so, it will return an error to the user rather +than attempting to perform the undo.

    The following sequence diagram shows how an undo operation goes through the Logic component:

    UndoSequenceDiagram-Logic

    Note: The lifeline for UndoCommand should end at the destroy marker (X) but due to a limitation of PlantUML, the lifeline reaches the end of diagram.

    Similarly, how an undo operation goes through the Model component is shown below:

    UndoSequenceDiagram-Model

    The redo command does the opposite — it calls Model#redoCampusConnect(), which shifts the currentStatePointer once to the right, pointing to the previously undone state, and restores the address book to that state.

    Note: If the currentStatePointer is at index campusConnectStateList.size() - 1, pointing to the latest CampusConnect state, then there are no undone CampusConnect states to restore. The redo command uses Model#canRedoCampusConnect() to check if this is the case. If so, it will return an error to the user rather than attempting to perform the redo.

    Step 5. The user then decides to execute the command list. Commands that do not modify the address book, such as list, will usually not call Model#commitCampusConnect(), Model#undoCampusConnect() or Model#redoCampusConnect(). Thus, the campusConnectStateList remains unchanged.

    UndoRedoState4

    Step 6. The user executes clear, which calls Model#commitCampusConnect(). Since the currentStatePointer is not pointing at the end of the campusConnectStateList, all address book states after the currentStatePointer will be purged. Reason: It no longer makes sense to redo the add n/David …​ command. This is the behavior that most modern desktop applications follow.

    UndoRedoState5

    The following activity diagram summarizes what happens when a user executes a new command:

    Design considerations:

    Aspect: How undo & redo executes:

    {more aspects and alternatives to be added}

    [Proposed] Data archiving

    {Explain here how the data archiving feature will be implemented}


    Documentation, logging, testing, configuration, dev-ops


    Appendix: Requirements

    Product scope

    Target user profile: university students

    Value proposition:

    User stories

    Priorities: High (must have) - * * *, Medium (nice to have) - * *, Low (unlikely to have) - *

    Priority As a …​ I want to …​ So that I can…​
    * * * new user see usage instructions refer to instructions when I forget how to use the App
    * * * user add a new contact easily connect with them
    * * * user delete a contact remove entries that I no longer need
    * * * user find a person by name locate details of persons without having to go through the entire list
    * * user hide private contact details minimize chance of someone else seeing them by accident
    * * user update my contacts information always keep an updated version of contact information
    * user with many contacts search contacts by name locate a contact easily
    * user add a tag information to contacts easily locate and connect with individuals such as classmates or club members
    * student filter contacts by tags such as "group project" or "internship" easily access related contacts
    * user export my contacts in a CSV format use them in other applications or share them with others or backup my data
    * user import contacts from a CSV format easily upload contacts from an existing list or a spreadsheet in bulk
    * student add notes to my contacts remember the context of the contact
    * student modify the notes of contacts always update the context of the contact
    * user undo my last action prevent the accidental deletion of all my contacts
    * user bookmark my contacts easily access important of frequently used contacts

    {More to be added}

    Use cases

    (For all use cases below, the System is CampusConnect and the Actor is the user, unless specified otherwise)

    Use case: UC01 - Add a person's contact

    MSS

    1. User requests to add contact.

    2. CampusConnect adds new contact to contact list.

    3. CampusConnect displays success message.

      Use case ends.

    Extensions

    Use case: UC02 - Delete a person's contact

    MSS

    1. User requests to delete contact.

    2. CampusConnect finds and deletes contact.

    3. CampusConnect displays success message.

      Use case ends.

    Extensions

    Use case: UC03 - Find a person's contact

    MSS

    1. User requests to find contact.

    2. CampusConnect searches the contact list and displays the details of the contact found.

      Use case ends.

    Extensions

    Use case: UC04 - Add notes to a contact
    Precondition: Contact to add notes to already exists

    MSS

    1. User requests to add notes to a contact.

    2. CampusConnect searches the contact list and finds the correct contact.

    3. CampusConnect add notes to the contact.

    4. CampusConnect displays success message.

      Use case ends.

    Extensions

    Use case: UC05 - Sort contacts by criterion

    MSS

    1. User requests to sort list by criterion.

    2. CampusConnect sorts the list.

    3. CampusConnect displays the sorted list.

      Use case ends.

    Extensions

    Use case: UC06 - Pin contacts to the top of the list
    Precondition: Contact list is not empty

    MSS

    1. User requests to pin contact to the top of the list.

    2. CampusConnect marks contact as pinned.

    3. CampusConnect displays success message.

      Use case ends.

    Extensions

    Non-Functional Requirements

    1. Should work on any mainstream OS as long as it has Java 17 or above installed.
    2. Should be able to hold up to 1000 persons without a noticeable sluggishness in performance for typical usage.
    3. A user with above average typing speed for regular English text (i.e. not code, not system admin commands) should be able to accomplish most of the tasks faster using commands than using the mouse.
    4. The application should respond within two seconds after user input commands.
    5. The application is not required to interact any other online system or applications.
    6. The application should not use offensive and obscene images or visuals.
    7. The record should bot be lost when a system fault occurs.

    Glossary


    Appendix: Instructions for manual testing

    Given below are instructions to test the app manually.

    Note: These instructions only provide a starting point for testers to work on; testers are expected to do more exploratory testing.

    Launch and shutdown

    1. Initial launch

      1. Download the jar file and copy into an empty folder

      2. Double-click the jar file Expected: Shows the GUI with a set of sample contacts. The window size may not be optimum.

    2. Saving window preferences

      1. Resize the window to an optimum size. Move the window to a different location. Close the window.

      2. Re-launch the app by double-clicking the jar file.
        Expected: The most recent window size and location is retained.

    3. { more test cases …​ }

    Deleting a person

    1. Deleting a person while all persons are being shown

      1. Prerequisites: List all persons using the list command. Multiple persons in the list.

      2. Test case: delete 1
        Expected: First contact is deleted from the list. Details of the deleted contact shown in the status message. Timestamp in the status bar is updated.

      3. Test case: delete 0
        Expected: No person is deleted. Error details shown in the status message. Status bar remains the same.

      4. Other incorrect delete commands to try: delete, delete x, ... (where x is larger than the list size)
        -Expected: Similar to previous.

    2. { more test cases …​ }

    Saving data

    1. Dealing with missing/corrupted data files

      1. {explain how to simulate a missing/corrupted file, and the expected behavior}
    2. { more test cases …​ }

    +Expected: Similar to previous.

  • { more test cases …​ }

  • Saving data

    1. Dealing with missing/corrupted data files

      1. {explain how to simulate a missing/corrupted file, and the expected behavior}
    2. { more test cases …​ }

    diff --git a/DeveloperGuide.page-vue-render.js b/DeveloperGuide.page-vue-render.js index a3ed84d91dd..889ec1c695c 100644 --- a/DeveloperGuide.page-vue-render.js +++ b/DeveloperGuide.page-vue-render.js @@ -1,7 +1,7 @@ var pageVueRenderFn = function anonymous( ) { -with(this){return _c('div',{attrs:{"id":"app"}},[_c('header',{attrs:{"sticky":""}},[_c('navbar',{attrs:{"type":"dark"},scopedSlots:_u([{key:"brand",fn:function(){return [_c('a',{staticClass:"navbar-brand",attrs:{"href":"/tp/index.html","title":"Home"}},[_v("CampusConnect")])]},proxy:true},{key:"right",fn:function(){return [_c('li',[_c('form',{staticClass:"navbar-form"},[_c('searchbar',{attrs:{"data":searchData,"placeholder":"Search","on-hit":searchCallback,"menu-align-right":""}})],1)])]},proxy:true}])},[_v(" "),_c('li',[_c('a',{staticClass:"nav-link",attrs:{"href":"/tp/index.html"}},[_v("Home")])]),_v(" "),_c('li',[_c('a',{staticClass:"nav-link",attrs:{"href":"/tp/UserGuide.html"}},[_v("User Guide")])]),_v(" "),_c('li',[_c('a',{staticClass:"nav-link",attrs:{"href":"/tp/DeveloperGuide.html"}},[_v("Developer Guide")])]),_v(" "),_c('li',[_c('a',{staticClass:"nav-link",attrs:{"href":"/tp/AboutUs.html"}},[_v("About Us")])]),_v(" "),_c('li',[_c('a',{staticClass:"nav-link",attrs:{"href":"https://github.com/AY2425S1-CS2103T-F14a-4/tp","target":"_blank"}},[_c('span',[_c('span',{staticClass:"fab fa-github",attrs:{"aria-hidden":"true"}})])])])])],1),_v(" "),_c('div',{attrs:{"id":"flex-body"}},[_c('overlay-source',{attrs:{"id":"site-nav","tag-name":"nav","to":"site-nav"}},[_c('div',{staticClass:"site-nav-top"},[_c('div',{staticClass:"fw-bold mb-2",staticStyle:{"font-size":"1.25rem"}},[_v("Site Map")])]),_v(" "),_c('div',{staticClass:"nav-component slim-scroll"},[_c('site-nav',[_c('overlay-source',{staticClass:"site-nav-list site-nav-list-root",attrs:{"tag-name":"ul","to":"mb-site-nav"}},[_c('li',[_c('div',{staticClass:"site-nav-default-list-item site-nav-list-item-0",attrs:{"onclick":"handleSiteNavClick(this)"}},[_c('a',{attrs:{"href":"/tp/index.html"}},[_v("Home")])])]),_v(" "),_c('li',[_c('div',{staticClass:"site-nav-default-list-item site-nav-list-item-0",attrs:{"onclick":"handleSiteNavClick(this)"}},[_c('a',{attrs:{"href":"/tp/UserGuide.html"}},[_v("User Guide")]),_v(" "),_c('div',{staticClass:"site-nav-dropdown-btn-container"},[_c('i',{staticClass:"site-nav-dropdown-btn-icon site-nav-rotate-icon",attrs:{"onclick":"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();"}},[_c('span',{staticClass:"glyphicon glyphicon-menu-down",attrs:{"aria-hidden":"true"}})])])]),_c('ul',{staticClass:"site-nav-dropdown-container site-nav-dropdown-container-open site-nav-list"},[_c('li',[_c('div',{staticClass:"site-nav-default-list-item site-nav-list-item-1",attrs:{"onclick":"handleSiteNavClick(this)"}},[_c('a',{attrs:{"href":"/tp/UserGuide.html#quick-start"}},[_v("Quick Start")])])]),_v(" "),_c('li',[_c('div',{staticClass:"site-nav-default-list-item site-nav-list-item-1",attrs:{"onclick":"handleSiteNavClick(this)"}},[_c('a',{attrs:{"href":"/tp/UserGuide.html#features"}},[_v("Features")])])]),_v(" "),_c('li',[_c('div',{staticClass:"site-nav-default-list-item site-nav-list-item-1",attrs:{"onclick":"handleSiteNavClick(this)"}},[_c('a',{attrs:{"href":"/tp/UserGuide.html#faq"}},[_v("FAQ")])])]),_v(" "),_c('li',[_c('div',{staticClass:"site-nav-default-list-item site-nav-list-item-1",attrs:{"onclick":"handleSiteNavClick(this)"}},[_c('a',{attrs:{"href":"/tp/UserGuide.html#faq"}},[_v("Command Summary")])])])])]),_v(" "),_c('li',[_c('div',{staticClass:"site-nav-default-list-item site-nav-list-item-0",attrs:{"onclick":"handleSiteNavClick(this)"}},[_c('a',{attrs:{"href":"/tp/DeveloperGuide.html"}},[_v("Developer Guide")]),_v(" "),_c('div',{staticClass:"site-nav-dropdown-btn-container"},[_c('i',{staticClass:"site-nav-dropdown-btn-icon site-nav-rotate-icon",attrs:{"onclick":"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();"}},[_c('span',{staticClass:"glyphicon glyphicon-menu-down",attrs:{"aria-hidden":"true"}})])])]),_c('ul',{staticClass:"site-nav-dropdown-container site-nav-dropdown-container-open site-nav-list"},[_c('li',[_c('div',{staticClass:"site-nav-default-list-item site-nav-list-item-1",attrs:{"onclick":"handleSiteNavClick(this)"}},[_c('a',{attrs:{"href":"/tp/DeveloperGuide.html#acknowledgements"}},[_v("Acknowledgements")])])]),_v(" "),_c('li',[_c('div',{staticClass:"site-nav-default-list-item site-nav-list-item-1",attrs:{"onclick":"handleSiteNavClick(this)"}},[_c('a',{attrs:{"href":"/tp/DeveloperGuide.html#setting-up-getting-started"}},[_v("Setting Up")])])]),_v(" "),_c('li',[_c('div',{staticClass:"site-nav-default-list-item site-nav-list-item-1",attrs:{"onclick":"handleSiteNavClick(this)"}},[_c('a',{attrs:{"href":"/tp/DeveloperGuide.html#design"}},[_v("Design")])])]),_v(" "),_c('li',[_c('div',{staticClass:"site-nav-default-list-item site-nav-list-item-1",attrs:{"onclick":"handleSiteNavClick(this)"}},[_c('a',{attrs:{"href":"/tp/DeveloperGuide.html#implementation"}},[_v("Implementation")])])]),_v(" "),_c('li',[_c('div',{staticClass:"site-nav-default-list-item site-nav-list-item-1",attrs:{"onclick":"handleSiteNavClick(this)"}},[_c('a',{attrs:{"href":"/tp/DeveloperGuide.html#documentation-logging-testing-configuration-dev-ops"}},[_v("Documentation, logging, testing, configuration, dev-ops")])])]),_v(" "),_c('li',[_c('div',{staticClass:"site-nav-default-list-item site-nav-list-item-1",attrs:{"onclick":"handleSiteNavClick(this)"}},[_c('a',{attrs:{"href":"/tp/DeveloperGuide.html#appendix-requirements"}},[_v("Appendix: Requirements")])])]),_v(" "),_c('li',[_c('div',{staticClass:"site-nav-default-list-item site-nav-list-item-1",attrs:{"onclick":"handleSiteNavClick(this)"}},[_c('a',{attrs:{"href":"/tp/DeveloperGuide.html#appendix-instructions-for-manual-testing"}},[_v("Appendix: Instructions for manual testing")])])])])]),_v(" "),_c('li',[_c('div',{staticClass:"site-nav-default-list-item site-nav-list-item-0",attrs:{"onclick":"handleSiteNavClick(this)"}},[_v("Tutorials\n\n"),_c('div',{staticClass:"site-nav-dropdown-btn-container"},[_c('i',{staticClass:"site-nav-dropdown-btn-icon",attrs:{"onclick":"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();"}},[_c('span',{staticClass:"glyphicon glyphicon-menu-down",attrs:{"aria-hidden":"true"}})])])]),_c('ul',{staticClass:"site-nav-dropdown-container site-nav-list"},[_c('li',[_c('div',{staticClass:"site-nav-default-list-item site-nav-list-item-1",attrs:{"onclick":"handleSiteNavClick(this)"}},[_c('a',{attrs:{"href":"/tp/tutorials/TracingCode.html"}},[_v("Tracing code")])])]),_v(" "),_c('li',[_c('div',{staticClass:"site-nav-default-list-item site-nav-list-item-1",attrs:{"onclick":"handleSiteNavClick(this)"}},[_c('a',{attrs:{"href":"/tp/tutorials/AddRemark.html"}},[_v("Adding a command")])])]),_v(" "),_c('li',[_c('div',{staticClass:"site-nav-default-list-item site-nav-list-item-1",attrs:{"onclick":"handleSiteNavClick(this)"}},[_c('a',{attrs:{"href":"/tp/tutorials/RemovingFields.html"}},[_v("Removing Fields")])])])])]),_v(" "),_c('li',[_c('div',{staticClass:"site-nav-default-list-item site-nav-list-item-0",attrs:{"onclick":"handleSiteNavClick(this)"}},[_c('a',{attrs:{"href":"/tp/AboutUs.html"}},[_v("About Us")])])])])],1)],1)]),_v(" "),_c('div',{attrs:{"id":"content-wrapper"}},[_m(0),_v(" "),_c('div',{pre:true,attrs:{"class":"page-nav-print d-none d-print-block"}}),_v(" "),_c('hr'),_v(" "),_m(1),_v(" "),_m(2),_v(" "),_c('hr'),_v(" "),_m(3),_v(" "),_m(4),_v(" "),_c('hr'),_v(" "),_m(5),_v(" "),_m(6),_v(" "),_c('pic',{attrs:{"src":"/tp/diagrams/ArchitectureDiagram.png","width":"280"}}),_v(" "),_m(7),_v(" "),_c('p',[_v("Given below is a quick overview of main components and how they interact with each other.")]),_v(" "),_m(8),_v(" "),_m(9),_v(" "),_m(10),_v(" "),_c('p',[_v("The bulk of the app's work is done by the following four components:")]),_v(" "),_m(11),_v(" "),_m(12),_v(" "),_m(13),_v(" "),_m(14),_v(" "),_c('pic',{attrs:{"src":"/tp/diagrams/ArchitectureSequenceDiagram.png","width":"574"}}),_v(" "),_c('p',[_v("Each of the four main components (also shown in the diagram above),")]),_v(" "),_m(15),_v(" "),_m(16),_v(" "),_c('pic',{attrs:{"src":"/tp/diagrams/ComponentManagers.png","width":"300"}}),_v(" "),_c('p',[_v("The sections below give more details of each component.")]),_v(" "),_m(17),_v(" "),_m(18),_v(" "),_c('pic',{attrs:{"src":"/tp/diagrams/UiClassDiagram.png","alt":"Structure of the UI Component"}}),_v(" "),_m(19),_v(" "),_m(20),_v(" "),_m(21),_v(" "),_m(22),_v(" "),_m(23),_v(" "),_m(24),_v(" "),_m(25),_v(" "),_c('pic',{attrs:{"src":"/tp/diagrams/LogicClassDiagram.png","width":"550"}}),_v(" "),_m(26),_v(" "),_c('pic',{attrs:{"src":"/tp/diagrams/DeleteSequenceDiagram.png","alt":"Interactions Inside the Logic Component for the `delete 1` Command"}}),_v(" "),_c('box',{attrs:{"type":"info","seamless":""}},[_c('p',[_c('strong',[_v("Note:")]),_v(" The lifeline for "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("DeleteCommandParser")]),_v(" should end at the destroy marker (X) but due to a limitation of PlantUML, the lifeline continues till the end of diagram.")])]),_v(" "),_m(27),_v(" "),_m(28),_v(" "),_m(29),_v(" "),_c('pic',{attrs:{"src":"/tp/diagrams/ParserClasses.png","width":"600"}}),_v(" "),_c('p',[_v("How the parsing works:")]),_v(" "),_m(30),_v(" "),_m(31),_v(" "),_m(32),_v(" "),_c('pic',{attrs:{"src":"/tp/diagrams/ModelClassDiagram.png","width":"450"}}),_v(" "),_m(33),_v(" "),_m(34),_v(" "),_c('box',{attrs:{"type":"info","seamless":""}},[_c('p',[_c('strong',[_v("Note:")]),_v(" An alternative (arguably, a more OOP) model is given below. It has a "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("Tag")]),_v(" list in the "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("AddressBook")]),_v(", which "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("Person")]),_v(" references. This allows "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("AddressBook")]),_v(" to only require one "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("Tag")]),_v(" object per unique tag, instead of each "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("Person")]),_v(" needing their own "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("Tag")]),_v(" objects."),_c('br')]),_v(" "),_c('pic',{attrs:{"src":"/tp/diagrams/BetterModelClassDiagram.png","width":"450"}})],1),_v(" "),_m(35),_v(" "),_m(36),_v(" "),_c('pic',{attrs:{"src":"/tp/diagrams/StorageClassDiagram.png","width":"550"}}),_v(" "),_m(37),_v(" "),_m(38),_v(" "),_m(39),_v(" "),_m(40),_v(" "),_c('hr'),_v(" "),_m(41),_v(" "),_c('p',[_v("This section describes some noteworthy details on how certain features are implemented.")]),_v(" "),_m(42),_v(" "),_m(43),_v(" "),_m(44),_v(" "),_m(45),_v(" "),_m(46),_v(" "),_c('p',[_v("Given below is an example usage scenario and how the undo/redo mechanism behaves at each step.")]),_v(" "),_m(47),_v(" "),_c('pic',{attrs:{"src":"/tp/diagrams/UndoRedoState0.png","alt":"UndoRedoState0"}}),_v(" "),_m(48),_v(" "),_c('pic',{attrs:{"src":"/tp/diagrams/UndoRedoState1.png","alt":"UndoRedoState1"}}),_v(" "),_m(49),_v(" "),_c('pic',{attrs:{"src":"/tp/diagrams/UndoRedoState2.png","alt":"UndoRedoState2"}}),_v(" "),_c('box',{attrs:{"type":"info","seamless":""}},[_c('p',[_c('strong',[_v("Note:")]),_v(" If a command fails its execution, it will not call "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("Model#commitAddressBook()")]),_v(", so the address book state will not be saved into the "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("addressBookStateList")]),_v(".")])]),_v(" "),_m(50),_v(" "),_c('pic',{attrs:{"src":"/tp/diagrams/UndoRedoState3.png","alt":"UndoRedoState3"}}),_v(" "),_c('box',{attrs:{"type":"info","seamless":""}},[_c('p',[_c('strong',[_v("Note:")]),_v(" If the "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("currentStatePointer")]),_v(" is at index 0, pointing to the initial AddressBook state, then there are no previous AddressBook states to restore. The "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("undo")]),_v(" command uses "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("Model#canUndoAddressBook()")]),_v(" to check if this is the case. If so, it will return an error to the user rather\nthan attempting to perform the undo.")])]),_v(" "),_m(51),_v(" "),_c('pic',{attrs:{"src":"/tp/diagrams/UndoSequenceDiagram-Logic.png","alt":"UndoSequenceDiagram-Logic"}}),_v(" "),_c('box',{attrs:{"type":"info","seamless":""}},[_c('p',[_c('strong',[_v("Note:")]),_v(" The lifeline for "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("UndoCommand")]),_v(" should end at the destroy marker (X) but due to a limitation of PlantUML, the lifeline reaches the end of diagram.")])]),_v(" "),_m(52),_v(" "),_c('pic',{attrs:{"src":"/tp/diagrams/UndoSequenceDiagram-Model.png","alt":"UndoSequenceDiagram-Model"}}),_v(" "),_m(53),_v(" "),_c('box',{attrs:{"type":"info","seamless":""}},[_c('p',[_c('strong',[_v("Note:")]),_v(" If the "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("currentStatePointer")]),_v(" is at index "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("addressBookStateList.size() - 1")]),_v(", pointing to the latest address book state, then there are no undone AddressBook states to restore. The "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("redo")]),_v(" command uses "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("Model#canRedoAddressBook()")]),_v(" to check if this is the case. If so, it will return an error to the user rather than attempting to perform the redo.")])]),_v(" "),_m(54),_v(" "),_c('pic',{attrs:{"src":"/tp/diagrams/UndoRedoState4.png","alt":"UndoRedoState4"}}),_v(" "),_m(55),_v(" "),_c('pic',{attrs:{"src":"/tp/diagrams/UndoRedoState5.png","alt":"UndoRedoState5"}}),_v(" "),_c('p',[_v("The following activity diagram summarizes what happens when a user executes a new command:")]),_v(" "),_c('pic',{attrs:{"src":"/tp/diagrams/CommitActivityDiagram.png","width":"250"}}),_v(" "),_m(56),_v(" "),_m(57),_v(" "),_m(58),_v(" "),_m(59),_v(" "),_m(60),_v(" "),_m(61),_v(" "),_c('hr'),_v(" "),_m(62),_v(" "),_m(63),_v(" "),_c('hr'),_v(" "),_m(64),_v(" "),_m(65),_v(" "),_m(66),_v(" "),_m(67),_v(" "),_m(68),_v(" "),_m(69),_v(" "),_m(70),_v(" "),_m(71),_v(" "),_m(72),_m(73),_v(" "),_m(74),_v(" "),_m(75),_v(" "),_m(76),_v(" "),_m(77),_v(" "),_m(78),_v(" "),_m(79),_v(" "),_m(80),_v(" "),_m(81),_v(" "),_m(82),_v(" "),_m(83),_v(" "),_m(84),_v(" "),_m(85),_v(" "),_m(86),_v(" "),_m(87),_v(" "),_m(88),_v(" "),_m(89),_v(" "),_m(90),_v(" "),_m(91),_v(" "),_m(92),_v(" "),_m(93),_v(" "),_m(94),_v(" "),_m(95),_v(" "),_m(96),_v(" "),_m(97),_v(" "),_m(98),_v(" "),_m(99),_v(" "),_m(100),_v(" "),_m(101),_v(" "),_m(102),_v(" "),_m(103),_v(" "),_m(104),_v(" "),_m(105),_v(" "),_m(106),_v(" "),_m(107),_v(" "),_m(108),_v(" "),_m(109),_v(" "),_c('hr'),_v(" "),_m(110),_v(" "),_c('p',[_v("Given below are instructions to test the app manually.")]),_v(" "),_c('box',{attrs:{"type":"info","seamless":""}},[_c('p',[_c('strong',[_v("Note:")]),_v(" These instructions only provide a starting point for testers to work on;\ntesters are expected to do more "),_c('em',[_v("exploratory")]),_v(" testing.")])]),_v(" "),_m(111),_v(" "),_m(112),_v(" "),_m(113),_v(" "),_m(114),_v(" "),_m(115),_v(" "),_m(116)],1),_v(" "),_c('overlay-source',{attrs:{"id":"page-nav","tag-name":"nav","to":"page-nav"}},[_c('div',{staticClass:"nav-component slim-scroll"},[_c('overlay-source',{staticClass:"nav nav-pills flex-column my-0 small no-flex-wrap",attrs:{"id":"mb-page-nav","tag-name":"nav","to":"mb-page-nav"}},[_c('a',{pre:true,attrs:{"class":"nav-link py-1","href":"#ab-3-developer-guide"}},[_v("AB-3 Developer Guide‎")]),_v(" "),_c('nav',{staticClass:"nav nav-pills flex-column my-0 nested no-flex-wrap"},[_c('a',{pre:true,attrs:{"class":"nav-link py-1","href":"#acknowledgements"}},[_v("Acknowledgements‎")]),_v(" "),_c('a',{pre:true,attrs:{"class":"nav-link py-1","href":"#setting-up-getting-started"}},[_v("Setting up, getting started‎")]),_v(" "),_c('a',{pre:true,attrs:{"class":"nav-link py-1","href":"#design"}},[_v("Design‎")]),_v(" "),_c('nav',{staticClass:"nav nav-pills flex-column my-0 nested no-flex-wrap"},[_c('a',{pre:true,attrs:{"class":"nav-link py-1","href":"#architecture"}},[_v("Architecture‎")]),_v(" "),_c('a',{pre:true,attrs:{"class":"nav-link py-1","href":"#ui-component"}},[_v("UI component‎")]),_v(" "),_c('a',{pre:true,attrs:{"class":"nav-link py-1","href":"#logic-component"}},[_v("Logic component‎")]),_v(" "),_c('a',{pre:true,attrs:{"class":"nav-link py-1","href":"#model-component"}},[_v("Model component‎")]),_v(" "),_c('a',{pre:true,attrs:{"class":"nav-link py-1","href":"#storage-component"}},[_v("Storage component‎")]),_v(" "),_c('a',{pre:true,attrs:{"class":"nav-link py-1","href":"#common-classes"}},[_v("Common classes‎")])]),_v(" "),_c('a',{pre:true,attrs:{"class":"nav-link py-1","href":"#implementation"}},[_v("Implementation‎")]),_v(" "),_c('nav',{staticClass:"nav nav-pills flex-column my-0 nested no-flex-wrap"},[_c('a',{pre:true,attrs:{"class":"nav-link py-1","href":"#proposed-undo-redo-feature"}},[_v("[Proposed] Undo/redo feature‎")]),_v(" "),_c('a',{pre:true,attrs:{"class":"nav-link py-1","href":"#proposed-data-archiving"}},[_v("[Proposed] Data archiving‎")])]),_v(" "),_c('a',{pre:true,attrs:{"class":"nav-link py-1","href":"#documentation-logging-testing-configuration-dev-ops"}},[_v("Documentation, logging, testing, configuration, dev-ops‎")]),_v(" "),_c('a',{pre:true,attrs:{"class":"nav-link py-1","href":"#appendix-requirements"}},[_v("Appendix: Requirements‎")]),_v(" "),_c('nav',{staticClass:"nav nav-pills flex-column my-0 nested no-flex-wrap"},[_c('a',{pre:true,attrs:{"class":"nav-link py-1","href":"#product-scope"}},[_v("Product scope‎")]),_v(" "),_c('a',{pre:true,attrs:{"class":"nav-link py-1","href":"#user-stories"}},[_v("User stories‎")]),_v(" "),_c('a',{pre:true,attrs:{"class":"nav-link py-1","href":"#use-cases"}},[_v("Use cases‎")]),_v(" "),_c('a',{pre:true,attrs:{"class":"nav-link py-1","href":"#non-functional-requirements"}},[_v("Non-Functional Requirements‎")]),_v(" "),_c('a',{pre:true,attrs:{"class":"nav-link py-1","href":"#glossary"}},[_v("Glossary‎")])]),_v(" "),_c('a',{pre:true,attrs:{"class":"nav-link py-1","href":"#appendix-instructions-for-manual-testing"}},[_v("Appendix: Instructions for manual testing‎")]),_v(" "),_c('nav',{staticClass:"nav nav-pills flex-column my-0 nested no-flex-wrap"},[_c('a',{pre:true,attrs:{"class":"nav-link py-1","href":"#launch-and-shutdown"}},[_v("Launch and shutdown‎")]),_v(" "),_c('a',{pre:true,attrs:{"class":"nav-link py-1","href":"#deleting-a-person"}},[_v("Deleting a person‎")]),_v(" "),_c('a',{pre:true,attrs:{"class":"nav-link py-1","href":"#saving-data"}},[_v("Saving data‎")])])])])],1)]),_v(" "),_c('scroll-top-button')],1),_v(" "),_m(117)])} +with(this){return _c('div',{attrs:{"id":"app"}},[_c('header',{attrs:{"sticky":""}},[_c('navbar',{attrs:{"type":"dark"},scopedSlots:_u([{key:"brand",fn:function(){return [_c('a',{staticClass:"navbar-brand",attrs:{"href":"/tp/index.html","title":"Home"}},[_v("CampusConnect")])]},proxy:true},{key:"right",fn:function(){return [_c('li',[_c('form',{staticClass:"navbar-form"},[_c('searchbar',{attrs:{"data":searchData,"placeholder":"Search","on-hit":searchCallback,"menu-align-right":""}})],1)])]},proxy:true}])},[_v(" "),_c('li',[_c('a',{staticClass:"nav-link",attrs:{"href":"/tp/index.html"}},[_v("Home")])]),_v(" "),_c('li',[_c('a',{staticClass:"nav-link",attrs:{"href":"/tp/UserGuide.html"}},[_v("User Guide")])]),_v(" "),_c('li',[_c('a',{staticClass:"nav-link",attrs:{"href":"/tp/DeveloperGuide.html"}},[_v("Developer Guide")])]),_v(" "),_c('li',[_c('a',{staticClass:"nav-link",attrs:{"href":"/tp/AboutUs.html"}},[_v("About Us")])]),_v(" "),_c('li',[_c('a',{staticClass:"nav-link",attrs:{"href":"https://github.com/AY2425S1-CS2103T-F14a-4/tp","target":"_blank"}},[_c('span',[_c('span',{staticClass:"fab fa-github",attrs:{"aria-hidden":"true"}})])])])])],1),_v(" "),_c('div',{attrs:{"id":"flex-body"}},[_c('overlay-source',{attrs:{"id":"site-nav","tag-name":"nav","to":"site-nav"}},[_c('div',{staticClass:"site-nav-top"},[_c('div',{staticClass:"fw-bold mb-2",staticStyle:{"font-size":"1.25rem"}},[_v("Site Map")])]),_v(" "),_c('div',{staticClass:"nav-component slim-scroll"},[_c('site-nav',[_c('overlay-source',{staticClass:"site-nav-list site-nav-list-root",attrs:{"tag-name":"ul","to":"mb-site-nav"}},[_c('li',[_c('div',{staticClass:"site-nav-default-list-item site-nav-list-item-0",attrs:{"onclick":"handleSiteNavClick(this)"}},[_c('a',{attrs:{"href":"/tp/index.html"}},[_v("Home")])])]),_v(" "),_c('li',[_c('div',{staticClass:"site-nav-default-list-item site-nav-list-item-0",attrs:{"onclick":"handleSiteNavClick(this)"}},[_c('a',{attrs:{"href":"/tp/UserGuide.html"}},[_v("User Guide")]),_v(" "),_c('div',{staticClass:"site-nav-dropdown-btn-container"},[_c('i',{staticClass:"site-nav-dropdown-btn-icon site-nav-rotate-icon",attrs:{"onclick":"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();"}},[_c('span',{staticClass:"glyphicon glyphicon-menu-down",attrs:{"aria-hidden":"true"}})])])]),_c('ul',{staticClass:"site-nav-dropdown-container site-nav-dropdown-container-open site-nav-list"},[_c('li',[_c('div',{staticClass:"site-nav-default-list-item site-nav-list-item-1",attrs:{"onclick":"handleSiteNavClick(this)"}},[_c('a',{attrs:{"href":"/tp/UserGuide.html#quick-start"}},[_v("Quick Start")])])]),_v(" "),_c('li',[_c('div',{staticClass:"site-nav-default-list-item site-nav-list-item-1",attrs:{"onclick":"handleSiteNavClick(this)"}},[_c('a',{attrs:{"href":"/tp/UserGuide.html#features"}},[_v("Features")])])]),_v(" "),_c('li',[_c('div',{staticClass:"site-nav-default-list-item site-nav-list-item-1",attrs:{"onclick":"handleSiteNavClick(this)"}},[_c('a',{attrs:{"href":"/tp/UserGuide.html#faq"}},[_v("FAQ")])])]),_v(" "),_c('li',[_c('div',{staticClass:"site-nav-default-list-item site-nav-list-item-1",attrs:{"onclick":"handleSiteNavClick(this)"}},[_c('a',{attrs:{"href":"/tp/UserGuide.html#faq"}},[_v("Command Summary")])])])])]),_v(" "),_c('li',[_c('div',{staticClass:"site-nav-default-list-item site-nav-list-item-0",attrs:{"onclick":"handleSiteNavClick(this)"}},[_c('a',{attrs:{"href":"/tp/DeveloperGuide.html"}},[_v("Developer Guide")]),_v(" "),_c('div',{staticClass:"site-nav-dropdown-btn-container"},[_c('i',{staticClass:"site-nav-dropdown-btn-icon site-nav-rotate-icon",attrs:{"onclick":"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();"}},[_c('span',{staticClass:"glyphicon glyphicon-menu-down",attrs:{"aria-hidden":"true"}})])])]),_c('ul',{staticClass:"site-nav-dropdown-container site-nav-dropdown-container-open site-nav-list"},[_c('li',[_c('div',{staticClass:"site-nav-default-list-item site-nav-list-item-1",attrs:{"onclick":"handleSiteNavClick(this)"}},[_c('a',{attrs:{"href":"/tp/DeveloperGuide.html#acknowledgements"}},[_v("Acknowledgements")])])]),_v(" "),_c('li',[_c('div',{staticClass:"site-nav-default-list-item site-nav-list-item-1",attrs:{"onclick":"handleSiteNavClick(this)"}},[_c('a',{attrs:{"href":"/tp/DeveloperGuide.html#setting-up-getting-started"}},[_v("Setting Up")])])]),_v(" "),_c('li',[_c('div',{staticClass:"site-nav-default-list-item site-nav-list-item-1",attrs:{"onclick":"handleSiteNavClick(this)"}},[_c('a',{attrs:{"href":"/tp/DeveloperGuide.html#design"}},[_v("Design")])])]),_v(" "),_c('li',[_c('div',{staticClass:"site-nav-default-list-item site-nav-list-item-1",attrs:{"onclick":"handleSiteNavClick(this)"}},[_c('a',{attrs:{"href":"/tp/DeveloperGuide.html#implementation"}},[_v("Implementation")])])]),_v(" "),_c('li',[_c('div',{staticClass:"site-nav-default-list-item site-nav-list-item-1",attrs:{"onclick":"handleSiteNavClick(this)"}},[_c('a',{attrs:{"href":"/tp/DeveloperGuide.html#documentation-logging-testing-configuration-dev-ops"}},[_v("Documentation, logging, testing, configuration, dev-ops")])])]),_v(" "),_c('li',[_c('div',{staticClass:"site-nav-default-list-item site-nav-list-item-1",attrs:{"onclick":"handleSiteNavClick(this)"}},[_c('a',{attrs:{"href":"/tp/DeveloperGuide.html#appendix-requirements"}},[_v("Appendix: Requirements")])])]),_v(" "),_c('li',[_c('div',{staticClass:"site-nav-default-list-item site-nav-list-item-1",attrs:{"onclick":"handleSiteNavClick(this)"}},[_c('a',{attrs:{"href":"/tp/DeveloperGuide.html#appendix-instructions-for-manual-testing"}},[_v("Appendix: Instructions for manual testing")])])])])]),_v(" "),_c('li',[_c('div',{staticClass:"site-nav-default-list-item site-nav-list-item-0",attrs:{"onclick":"handleSiteNavClick(this)"}},[_v("Tutorials\n\n"),_c('div',{staticClass:"site-nav-dropdown-btn-container"},[_c('i',{staticClass:"site-nav-dropdown-btn-icon",attrs:{"onclick":"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();"}},[_c('span',{staticClass:"glyphicon glyphicon-menu-down",attrs:{"aria-hidden":"true"}})])])]),_c('ul',{staticClass:"site-nav-dropdown-container site-nav-list"},[_c('li',[_c('div',{staticClass:"site-nav-default-list-item site-nav-list-item-1",attrs:{"onclick":"handleSiteNavClick(this)"}},[_c('a',{attrs:{"href":"/tp/tutorials/TracingCode.html"}},[_v("Tracing code")])])]),_v(" "),_c('li',[_c('div',{staticClass:"site-nav-default-list-item site-nav-list-item-1",attrs:{"onclick":"handleSiteNavClick(this)"}},[_c('a',{attrs:{"href":"/tp/tutorials/AddRemark.html"}},[_v("Adding a command")])])]),_v(" "),_c('li',[_c('div',{staticClass:"site-nav-default-list-item site-nav-list-item-1",attrs:{"onclick":"handleSiteNavClick(this)"}},[_c('a',{attrs:{"href":"/tp/tutorials/RemovingFields.html"}},[_v("Removing Fields")])])])])]),_v(" "),_c('li',[_c('div',{staticClass:"site-nav-default-list-item site-nav-list-item-0",attrs:{"onclick":"handleSiteNavClick(this)"}},[_c('a',{attrs:{"href":"/tp/AboutUs.html"}},[_v("About Us")])])])])],1)],1)]),_v(" "),_c('div',{attrs:{"id":"content-wrapper"}},[_m(0),_v(" "),_c('div',{pre:true,attrs:{"class":"page-nav-print d-none d-print-block"}}),_v(" "),_c('hr'),_v(" "),_m(1),_v(" "),_m(2),_v(" "),_c('hr'),_v(" "),_m(3),_v(" "),_m(4),_v(" "),_c('hr'),_v(" "),_m(5),_v(" "),_m(6),_v(" "),_c('pic',{attrs:{"src":"/tp/diagrams/ArchitectureDiagram.png","width":"280"}}),_v(" "),_m(7),_v(" "),_c('p',[_v("Given below is a quick overview of main components and how they interact with each other.")]),_v(" "),_m(8),_v(" "),_m(9),_v(" "),_m(10),_v(" "),_c('p',[_v("The bulk of the app's work is done by the following four components:")]),_v(" "),_m(11),_v(" "),_m(12),_v(" "),_m(13),_v(" "),_m(14),_v(" "),_c('pic',{attrs:{"src":"/tp/diagrams/ArchitectureSequenceDiagram.png","width":"574"}}),_v(" "),_c('p',[_v("Each of the four main components (also shown in the diagram above),")]),_v(" "),_m(15),_v(" "),_m(16),_v(" "),_c('pic',{attrs:{"src":"/tp/diagrams/ComponentManagers.png","width":"300"}}),_v(" "),_c('p',[_v("The sections below give more details of each component.")]),_v(" "),_m(17),_v(" "),_m(18),_v(" "),_c('pic',{attrs:{"src":"/tp/diagrams/UiClassDiagram.png","alt":"Structure of the UI Component"}}),_v(" "),_m(19),_v(" "),_m(20),_v(" "),_m(21),_v(" "),_m(22),_v(" "),_m(23),_v(" "),_m(24),_v(" "),_m(25),_v(" "),_c('pic',{attrs:{"src":"/tp/diagrams/LogicClassDiagram.png","width":"550"}}),_v(" "),_m(26),_v(" "),_c('pic',{attrs:{"src":"/tp/diagrams/DeleteSequenceDiagram.png","alt":"Interactions Inside the Logic Component for the `delete 1` Command"}}),_v(" "),_c('box',{attrs:{"type":"info","seamless":""}},[_c('p',[_c('strong',[_v("Note:")]),_v(" The lifeline for "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("DeleteCommandParser")]),_v(" should end at the destroy marker (X) but due to a limitation of PlantUML, the lifeline continues till the end of diagram.")])]),_v(" "),_m(27),_v(" "),_m(28),_v(" "),_m(29),_v(" "),_c('pic',{attrs:{"src":"/tp/diagrams/ParserClasses.png","width":"600"}}),_v(" "),_c('p',[_v("How the parsing works:")]),_v(" "),_m(30),_v(" "),_m(31),_v(" "),_m(32),_v(" "),_c('pic',{attrs:{"src":"/tp/diagrams/ModelClassDiagram.png","width":"450"}}),_v(" "),_m(33),_v(" "),_m(34),_v(" "),_c('box',{attrs:{"type":"info","seamless":""}},[_c('p',[_c('strong',[_v("Note:")]),_v(" An alternative (arguably, a more OOP) model is given below. It has a "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("Tag")]),_v(" list in the "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("CampusConnect")]),_v(", which "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("Person")]),_v(" references. This allows "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("CampusConnect")]),_v(" to only require one "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("Tag")]),_v(" object per unique tag, instead of each "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("Person")]),_v(" needing their own "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("Tag")]),_v(" objects."),_c('br')]),_v(" "),_c('pic',{attrs:{"src":"/tp/diagrams/BetterModelClassDiagram.png","width":"450"}})],1),_v(" "),_m(35),_v(" "),_m(36),_v(" "),_c('pic',{attrs:{"src":"/tp/diagrams/StorageClassDiagram.png","width":"550"}}),_v(" "),_m(37),_v(" "),_m(38),_v(" "),_m(39),_v(" "),_m(40),_v(" "),_c('hr'),_v(" "),_m(41),_v(" "),_c('p',[_v("This section describes some noteworthy details on how certain features are implemented.")]),_v(" "),_m(42),_v(" "),_m(43),_v(" "),_m(44),_v(" "),_m(45),_v(" "),_m(46),_v(" "),_c('p',[_v("Given below is an example usage scenario and how the undo/redo mechanism behaves at each step.")]),_v(" "),_m(47),_v(" "),_c('pic',{attrs:{"src":"/tp/diagrams/UndoRedoState0.png","alt":"UndoRedoState0"}}),_v(" "),_m(48),_v(" "),_c('pic',{attrs:{"src":"/tp/diagrams/UndoRedoState1.png","alt":"UndoRedoState1"}}),_v(" "),_m(49),_v(" "),_c('pic',{attrs:{"src":"/tp/diagrams/UndoRedoState2.png","alt":"UndoRedoState2"}}),_v(" "),_c('box',{attrs:{"type":"info","seamless":""}},[_c('p',[_c('strong',[_v("Note:")]),_v(" If a command fails its execution, it will not call "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("Model#commitCampusConnect()")]),_v(", so the CampusConnect state will not be saved into the "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("campusConnectStateList")]),_v(".")])]),_v(" "),_m(50),_v(" "),_c('pic',{attrs:{"src":"/tp/diagrams/UndoRedoState3.png","alt":"UndoRedoState3"}}),_v(" "),_c('box',{attrs:{"type":"info","seamless":""}},[_c('p',[_c('strong',[_v("Note:")]),_v(" If the "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("currentStatePointer")]),_v(" is at index 0, pointing to the initial CampusConnect state, then there are no previous CampusConnect states to restore. The "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("undo")]),_v(" command uses "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("Model#canUndoCampusConnect()")]),_v(" to check if this is the case. If so, it will return an error to the user rather\nthan attempting to perform the undo.")])]),_v(" "),_m(51),_v(" "),_c('pic',{attrs:{"src":"/tp/diagrams/UndoSequenceDiagram-Logic.png","alt":"UndoSequenceDiagram-Logic"}}),_v(" "),_c('box',{attrs:{"type":"info","seamless":""}},[_c('p',[_c('strong',[_v("Note:")]),_v(" The lifeline for "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("UndoCommand")]),_v(" should end at the destroy marker (X) but due to a limitation of PlantUML, the lifeline reaches the end of diagram.")])]),_v(" "),_m(52),_v(" "),_c('pic',{attrs:{"src":"/tp/diagrams/UndoSequenceDiagram-Model.png","alt":"UndoSequenceDiagram-Model"}}),_v(" "),_m(53),_v(" "),_c('box',{attrs:{"type":"info","seamless":""}},[_c('p',[_c('strong',[_v("Note:")]),_v(" If the "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("currentStatePointer")]),_v(" is at index "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("campusConnectStateList.size() - 1")]),_v(", pointing to the latest CampusConnect state, then there are no undone CampusConnect states to restore. The "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("redo")]),_v(" command uses "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("Model#canRedoCampusConnect()")]),_v(" to check if this is the case. If so, it will return an error to the user rather than attempting to perform the redo.")])]),_v(" "),_m(54),_v(" "),_c('pic',{attrs:{"src":"/tp/diagrams/UndoRedoState4.png","alt":"UndoRedoState4"}}),_v(" "),_m(55),_v(" "),_c('pic',{attrs:{"src":"/tp/diagrams/UndoRedoState5.png","alt":"UndoRedoState5"}}),_v(" "),_c('p',[_v("The following activity diagram summarizes what happens when a user executes a new command:")]),_v(" "),_c('pic',{attrs:{"src":"/tp/diagrams/CommitActivityDiagram.png","width":"250"}}),_v(" "),_m(56),_v(" "),_m(57),_v(" "),_m(58),_v(" "),_m(59),_v(" "),_m(60),_v(" "),_m(61),_v(" "),_c('hr'),_v(" "),_m(62),_v(" "),_m(63),_v(" "),_c('hr'),_v(" "),_m(64),_v(" "),_m(65),_v(" "),_m(66),_v(" "),_m(67),_v(" "),_m(68),_v(" "),_m(69),_v(" "),_m(70),_v(" "),_m(71),_v(" "),_m(72),_m(73),_v(" "),_m(74),_v(" "),_m(75),_v(" "),_m(76),_v(" "),_m(77),_v(" "),_m(78),_v(" "),_m(79),_v(" "),_m(80),_v(" "),_m(81),_v(" "),_m(82),_v(" "),_m(83),_v(" "),_m(84),_v(" "),_m(85),_v(" "),_m(86),_v(" "),_m(87),_v(" "),_m(88),_v(" "),_m(89),_v(" "),_m(90),_v(" "),_m(91),_v(" "),_m(92),_v(" "),_m(93),_v(" "),_m(94),_v(" "),_m(95),_v(" "),_m(96),_v(" "),_m(97),_v(" "),_m(98),_v(" "),_m(99),_v(" "),_m(100),_v(" "),_m(101),_v(" "),_m(102),_v(" "),_m(103),_v(" "),_m(104),_v(" "),_m(105),_v(" "),_m(106),_v(" "),_m(107),_v(" "),_m(108),_v(" "),_m(109),_v(" "),_c('hr'),_v(" "),_m(110),_v(" "),_c('p',[_v("Given below are instructions to test the app manually.")]),_v(" "),_c('box',{attrs:{"type":"info","seamless":""}},[_c('p',[_c('strong',[_v("Note:")]),_v(" These instructions only provide a starting point for testers to work on;\ntesters are expected to do more "),_c('em',[_v("exploratory")]),_v(" testing.")])]),_v(" "),_m(111),_v(" "),_m(112),_v(" "),_m(113),_v(" "),_m(114),_v(" "),_m(115),_v(" "),_m(116)],1),_v(" "),_c('overlay-source',{attrs:{"id":"page-nav","tag-name":"nav","to":"page-nav"}},[_c('div',{staticClass:"nav-component slim-scroll"},[_c('overlay-source',{staticClass:"nav nav-pills flex-column my-0 small no-flex-wrap",attrs:{"id":"mb-page-nav","tag-name":"nav","to":"mb-page-nav"}},[_c('a',{pre:true,attrs:{"class":"nav-link py-1","href":"#ab-3-developer-guide"}},[_v("AB-3 Developer Guide‎")]),_v(" "),_c('nav',{staticClass:"nav nav-pills flex-column my-0 nested no-flex-wrap"},[_c('a',{pre:true,attrs:{"class":"nav-link py-1","href":"#acknowledgements"}},[_v("Acknowledgements‎")]),_v(" "),_c('a',{pre:true,attrs:{"class":"nav-link py-1","href":"#setting-up-getting-started"}},[_v("Setting up, getting started‎")]),_v(" "),_c('a',{pre:true,attrs:{"class":"nav-link py-1","href":"#design"}},[_v("Design‎")]),_v(" "),_c('nav',{staticClass:"nav nav-pills flex-column my-0 nested no-flex-wrap"},[_c('a',{pre:true,attrs:{"class":"nav-link py-1","href":"#architecture"}},[_v("Architecture‎")]),_v(" "),_c('a',{pre:true,attrs:{"class":"nav-link py-1","href":"#ui-component"}},[_v("UI component‎")]),_v(" "),_c('a',{pre:true,attrs:{"class":"nav-link py-1","href":"#logic-component"}},[_v("Logic component‎")]),_v(" "),_c('a',{pre:true,attrs:{"class":"nav-link py-1","href":"#model-component"}},[_v("Model component‎")]),_v(" "),_c('a',{pre:true,attrs:{"class":"nav-link py-1","href":"#storage-component"}},[_v("Storage component‎")]),_v(" "),_c('a',{pre:true,attrs:{"class":"nav-link py-1","href":"#common-classes"}},[_v("Common classes‎")])]),_v(" "),_c('a',{pre:true,attrs:{"class":"nav-link py-1","href":"#implementation"}},[_v("Implementation‎")]),_v(" "),_c('nav',{staticClass:"nav nav-pills flex-column my-0 nested no-flex-wrap"},[_c('a',{pre:true,attrs:{"class":"nav-link py-1","href":"#proposed-undo-redo-feature"}},[_v("[Proposed] Undo/redo feature‎")]),_v(" "),_c('a',{pre:true,attrs:{"class":"nav-link py-1","href":"#proposed-data-archiving"}},[_v("[Proposed] Data archiving‎")])]),_v(" "),_c('a',{pre:true,attrs:{"class":"nav-link py-1","href":"#documentation-logging-testing-configuration-dev-ops"}},[_v("Documentation, logging, testing, configuration, dev-ops‎")]),_v(" "),_c('a',{pre:true,attrs:{"class":"nav-link py-1","href":"#appendix-requirements"}},[_v("Appendix: Requirements‎")]),_v(" "),_c('nav',{staticClass:"nav nav-pills flex-column my-0 nested no-flex-wrap"},[_c('a',{pre:true,attrs:{"class":"nav-link py-1","href":"#product-scope"}},[_v("Product scope‎")]),_v(" "),_c('a',{pre:true,attrs:{"class":"nav-link py-1","href":"#user-stories"}},[_v("User stories‎")]),_v(" "),_c('a',{pre:true,attrs:{"class":"nav-link py-1","href":"#use-cases"}},[_v("Use cases‎")]),_v(" "),_c('a',{pre:true,attrs:{"class":"nav-link py-1","href":"#non-functional-requirements"}},[_v("Non-Functional Requirements‎")]),_v(" "),_c('a',{pre:true,attrs:{"class":"nav-link py-1","href":"#glossary"}},[_v("Glossary‎")])]),_v(" "),_c('a',{pre:true,attrs:{"class":"nav-link py-1","href":"#appendix-instructions-for-manual-testing"}},[_v("Appendix: Instructions for manual testing‎")]),_v(" "),_c('nav',{staticClass:"nav nav-pills flex-column my-0 nested no-flex-wrap"},[_c('a',{pre:true,attrs:{"class":"nav-link py-1","href":"#launch-and-shutdown"}},[_v("Launch and shutdown‎")]),_v(" "),_c('a',{pre:true,attrs:{"class":"nav-link py-1","href":"#deleting-a-person"}},[_v("Deleting a person‎")]),_v(" "),_c('a',{pre:true,attrs:{"class":"nav-link py-1","href":"#saving-data"}},[_v("Saving data‎")])])])])],1)]),_v(" "),_c('scroll-top-button')],1),_v(" "),_m(117)])} }; var pageVueStaticRenderFns = [function anonymous( ) { @@ -32,7 +32,7 @@ with(this){return _c('p',[_v("The "),_c('em',[_c('strong',[_v("Architecture Diag with(this){return _c('p',[_c('strong',[_v("Main components of the architecture")])])} },function anonymous( ) { -with(this){return _c('p',[_c('strong',[_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("Main")])]),_v(" (consisting of classes "),_c('a',{attrs:{"href":"https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/Main.java"}},[_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("Main")])]),_v(" and "),_c('a',{attrs:{"href":"https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/MainApp.java"}},[_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("MainApp")])]),_v(") is in charge of the app launch and shut down.")])} +with(this){return _c('p',[_c('strong',[_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("Main")])]),_v(" (consisting of classes "),_c('a',{attrs:{"href":"https://github.com/se-edu/CampusConnect/tree/master/src/main/java/seedu/address/Main.java"}},[_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("Main")])]),_v(" and "),_c('a',{attrs:{"href":"https://github.com/se-edu/CampusConnect/tree/master/src/main/java/seedu/address/MainApp.java"}},[_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("MainApp")])]),_v(") is in charge of the app launch and shut down.")])} },function anonymous( ) { with(this){return _c('ul',[_c('li',[_v("At app launch, it initializes the other components in the correct sequence, and connects them up with each other.")]),_v(" "),_c('li',[_v("At shut down, it shuts down the other components and invokes cleanup methods where necessary.")])])} @@ -59,13 +59,13 @@ with(this){return _c('p',[_v("For example, the "),_c('code',{pre:true,attrs:{"cl with(this){return _c('h3',{attrs:{"id":"ui-component"}},[_v("UI component"),_c('a',{staticClass:"fa fa-anchor",attrs:{"href":"#ui-component","onclick":"event.stopPropagation()"}})])} },function anonymous( ) { -with(this){return _c('p',[_v("The "),_c('strong',[_v("API")]),_v(" of this component is specified in "),_c('a',{attrs:{"href":"https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/ui/Ui.java"}},[_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("Ui.java")])])])} +with(this){return _c('p',[_v("The "),_c('strong',[_v("API")]),_v(" of this component is specified in "),_c('a',{attrs:{"href":"https://github.com/se-edu/CampusConnect/tree/master/src/main/java/seedu/address/ui/Ui.java"}},[_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("Ui.java")])])])} },function anonymous( ) { with(this){return _c('p',[_v("The UI consists of a "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("MainWindow")]),_v(" that is made up of parts e.g."),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("CommandBox")]),_v(", "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("ResultDisplay")]),_v(", "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("PersonListPanel")]),_v(", "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("StatusBarFooter")]),_v(" etc. All these, including the "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("MainWindow")]),_v(", inherit from the abstract "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("UiPart")]),_v(" class which captures the commonalities between classes that represent parts of the visible GUI.")])} },function anonymous( ) { -with(this){return _c('p',[_v("The "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("UI")]),_v(" component uses the JavaFx UI framework. The layout of these UI parts are defined in matching "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v(".fxml")]),_v(" files that are in the "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("src/main/resources/view")]),_v(" folder. For example, the layout of the "),_c('a',{attrs:{"href":"https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/ui/MainWindow.java"}},[_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("MainWindow")])]),_v(" is specified in "),_c('a',{attrs:{"href":"https://github.com/se-edu/addressbook-level3/tree/master/src/main/resources/view/MainWindow.fxml"}},[_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("MainWindow.fxml")])])])} +with(this){return _c('p',[_v("The "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("UI")]),_v(" component uses the JavaFx UI framework. The layout of these UI parts are defined in matching "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v(".fxml")]),_v(" files that are in the "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("src/main/resources/view")]),_v(" folder. For example, the layout of the "),_c('a',{attrs:{"href":"https://github.com/se-edu/CampusConnect/tree/master/src/main/java/seedu/address/ui/MainWindow.java"}},[_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("MainWindow")])]),_v(" is specified in "),_c('a',{attrs:{"href":"https://github.com/se-edu/CampusConnect/tree/master/src/main/resources/view/MainWindow.fxml"}},[_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("MainWindow.fxml")])])])} },function anonymous( ) { with(this){return _c('p',[_v("The "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("UI")]),_v(" component,")])} @@ -77,7 +77,7 @@ with(this){return _c('ul',[_c('li',[_v("executes user commands using the "),_c(' with(this){return _c('h3',{attrs:{"id":"logic-component"}},[_v("Logic component"),_c('a',{staticClass:"fa fa-anchor",attrs:{"href":"#logic-component","onclick":"event.stopPropagation()"}})])} },function anonymous( ) { -with(this){return _c('p',[_c('strong',[_v("API")]),_v(" : "),_c('a',{attrs:{"href":"https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/logic/Logic.java"}},[_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("Logic.java")])])])} +with(this){return _c('p',[_c('strong',[_v("API")]),_v(" : "),_c('a',{attrs:{"href":"https://github.com/se-edu/CampusConnect/tree/master/src/main/java/seedu/address/logic/Logic.java"}},[_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("Logic.java")])])])} },function anonymous( ) { with(this){return _c('p',[_v("Here's a (partial) class diagram of the "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("Logic")]),_v(" component:")])} @@ -89,19 +89,19 @@ with(this){return _c('p',[_v("The sequence diagram below illustrates the interac with(this){return _c('p',[_v("How the "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("Logic")]),_v(" component works:")])} },function anonymous( ) { -with(this){return _c('ol',[_c('li',[_v("When "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("Logic")]),_v(" is called upon to execute a command, it is passed to an "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("AddressBookParser")]),_v(" object which in turn creates a parser that matches the command (e.g., "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("DeleteCommandParser")]),_v(") and uses it to parse the command.")]),_v(" "),_c('li',[_v("This results in a "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("Command")]),_v(" object (more precisely, an object of one of its subclasses e.g., "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("DeleteCommand")]),_v(") which is executed by the "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("LogicManager")]),_v(".")]),_v(" "),_c('li',[_v("The command can communicate with the "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("Model")]),_v(" when it is executed (e.g. to delete a person)."),_c('br'),_v("\nNote that although this is shown as a single step in the diagram above (for simplicity), in the code it can take several interactions (between the command object and the "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("Model")]),_v(") to achieve.")]),_v(" "),_c('li',[_v("The result of the command execution is encapsulated as a "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("CommandResult")]),_v(" object which is returned back from "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("Logic")]),_v(".")])])} +with(this){return _c('ol',[_c('li',[_v("When "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("Logic")]),_v(" is called upon to execute a command, it is passed to an "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("CampusConnectParser")]),_v(" object which in turn creates a parser that matches the command (e.g., "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("DeleteCommandParser")]),_v(") and uses it to parse the command.")]),_v(" "),_c('li',[_v("This results in a "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("Command")]),_v(" object (more precisely, an object of one of its subclasses e.g., "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("DeleteCommand")]),_v(") which is executed by the "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("LogicManager")]),_v(".")]),_v(" "),_c('li',[_v("The command can communicate with the "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("Model")]),_v(" when it is executed (e.g. to delete a person)."),_c('br'),_v("\nNote that although this is shown as a single step in the diagram above (for simplicity), in the code it can take several interactions (between the command object and the "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("Model")]),_v(") to achieve.")]),_v(" "),_c('li',[_v("The result of the command execution is encapsulated as a "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("CommandResult")]),_v(" object which is returned back from "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("Logic")]),_v(".")])])} },function anonymous( ) { with(this){return _c('p',[_v("Here are the other classes in "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("Logic")]),_v(" (omitted from the class diagram above) that are used for parsing a user command:")])} },function anonymous( ) { -with(this){return _c('ul',[_c('li',[_v("When called upon to parse a user command, the "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("AddressBookParser")]),_v(" class creates an "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("XYZCommandParser")]),_v(" ("),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("XYZ")]),_v(" is a placeholder for the specific command name e.g., "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("AddCommandParser")]),_v(") which uses the other classes shown above to parse the user command and create a "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("XYZCommand")]),_v(" object (e.g., "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("AddCommand")]),_v(") which the "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("AddressBookParser")]),_v(" returns back as a "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("Command")]),_v(" object.")]),_v(" "),_c('li',[_v("All "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("XYZCommandParser")]),_v(" classes (e.g., "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("AddCommandParser")]),_v(", "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("DeleteCommandParser")]),_v(", ...) inherit from the "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("Parser")]),_v(" interface so that they can be treated similarly where possible e.g, during testing.")])])} +with(this){return _c('ul',[_c('li',[_v("When called upon to parse a user command, the "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("CampusConnectParser")]),_v(" class creates an "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("XYZCommandParser")]),_v(" ("),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("XYZ")]),_v(" is a placeholder for the specific command name e.g., "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("AddCommandParser")]),_v(") which uses the other classes shown above to parse the user command and create a "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("XYZCommand")]),_v(" object (e.g., "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("AddCommand")]),_v(") which the "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("CampusConnectParser")]),_v(" returns back as a "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("Command")]),_v(" object.")]),_v(" "),_c('li',[_v("All "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("XYZCommandParser")]),_v(" classes (e.g., "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("AddCommandParser")]),_v(", "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("DeleteCommandParser")]),_v(", ...) inherit from the "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("Parser")]),_v(" interface so that they can be treated similarly where possible e.g, during testing.")])])} },function anonymous( ) { with(this){return _c('h3',{attrs:{"id":"model-component"}},[_v("Model component"),_c('a',{staticClass:"fa fa-anchor",attrs:{"href":"#model-component","onclick":"event.stopPropagation()"}})])} },function anonymous( ) { -with(this){return _c('p',[_c('strong',[_v("API")]),_v(" : "),_c('a',{attrs:{"href":"https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/model/Model.java"}},[_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("Model.java")])])])} +with(this){return _c('p',[_c('strong',[_v("API")]),_v(" : "),_c('a',{attrs:{"href":"https://github.com/se-edu/CampusConnect/tree/master/src/main/java/seedu/address/model/Model.java"}},[_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("Model.java")])])])} },function anonymous( ) { with(this){return _c('p',[_v("The "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("Model")]),_v(" component,")])} @@ -113,13 +113,13 @@ with(this){return _c('ul',[_c('li',[_v("stores the address book data i.e., all " with(this){return _c('h3',{attrs:{"id":"storage-component"}},[_v("Storage component"),_c('a',{staticClass:"fa fa-anchor",attrs:{"href":"#storage-component","onclick":"event.stopPropagation()"}})])} },function anonymous( ) { -with(this){return _c('p',[_c('strong',[_v("API")]),_v(" : "),_c('a',{attrs:{"href":"https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/storage/Storage.java"}},[_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("Storage.java")])])])} +with(this){return _c('p',[_c('strong',[_v("API")]),_v(" : "),_c('a',{attrs:{"href":"https://github.com/se-edu/CampusConnect/tree/master/src/main/java/seedu/address/storage/Storage.java"}},[_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("Storage.java")])])])} },function anonymous( ) { with(this){return _c('p',[_v("The "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("Storage")]),_v(" component,")])} },function anonymous( ) { -with(this){return _c('ul',[_c('li',[_v("can save both address book data and user preference data in JSON format, and read them back into corresponding objects.")]),_v(" "),_c('li',[_v("inherits from both "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("AddressBookStorage")]),_v(" and "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("UserPrefStorage")]),_v(", which means it can be treated as either one (if only the functionality of only one is needed).")]),_v(" "),_c('li',[_v("depends on some classes in the "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("Model")]),_v(" component (because the "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("Storage")]),_v(" component's job is to save/retrieve objects that belong to the "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("Model")]),_v(")")])])} +with(this){return _c('ul',[_c('li',[_v("can save both address book data and user preference data in JSON format, and read them back into corresponding objects.")]),_v(" "),_c('li',[_v("inherits from both "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("CampusConnectStorage")]),_v(" and "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("UserPrefStorage")]),_v(", which means it can be treated as either one (if only the functionality of only one is needed).")]),_v(" "),_c('li',[_v("depends on some classes in the "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("Model")]),_v(" component (because the "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("Storage")]),_v(" component's job is to save/retrieve objects that belong to the "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("Model")]),_v(")")])])} },function anonymous( ) { with(this){return _c('h3',{attrs:{"id":"common-classes"}},[_v("Common classes"),_c('a',{staticClass:"fa fa-anchor",attrs:{"href":"#common-classes","onclick":"event.stopPropagation()"}})])} @@ -137,25 +137,25 @@ with(this){return _c('h3',{attrs:{"id":"proposed-undo-redo-feature"}},[_v("[Prop with(this){return _c('h4',{attrs:{"id":"proposed-implementation"}},[_v("Proposed Implementation"),_c('a',{staticClass:"fa fa-anchor",attrs:{"href":"#proposed-implementation","onclick":"event.stopPropagation()"}})])} },function anonymous( ) { -with(this){return _c('p',[_v("The proposed undo/redo mechanism is facilitated by "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("VersionedAddressBook")]),_v(". It extends "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("AddressBook")]),_v(" with an undo/redo history, stored internally as an "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("addressBookStateList")]),_v(" and "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("currentStatePointer")]),_v(". Additionally, it implements the following operations:")])} +with(this){return _c('p',[_v("The proposed undo/redo mechanism is facilitated by "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("VersionedCampusConnect")]),_v(". It extends "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("CampusConnect")]),_v(" with an undo/redo history, stored internally as an "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("CampusConnectStateList")]),_v(" and "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("currentStatePointer")]),_v(". Additionally, it implements the following operations:")])} },function anonymous( ) { -with(this){return _c('ul',[_c('li',[_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("VersionedAddressBook#commit()")]),_v(" — Saves the current address book state in its history.")]),_v(" "),_c('li',[_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("VersionedAddressBook#undo()")]),_v(" — Restores the previous address book state from its history.")]),_v(" "),_c('li',[_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("VersionedAddressBook#redo()")]),_v(" — Restores a previously undone address book state from its history.")])])} +with(this){return _c('ul',[_c('li',[_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("VersionedCampusConnect#commit()")]),_v(" — Saves the current address book state in its history.")]),_v(" "),_c('li',[_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("VersionedCampusConnect#undo()")]),_v(" — Restores the previous address book state from its history.")]),_v(" "),_c('li',[_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("VersionedCampusConnect#redo()")]),_v(" — Restores a previously undone address book state from its history.")])])} },function anonymous( ) { -with(this){return _c('p',[_v("These operations are exposed in the "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("Model")]),_v(" interface as "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("Model#commitAddressBook()")]),_v(", "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("Model#undoAddressBook()")]),_v(" and "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("Model#redoAddressBook()")]),_v(" respectively.")])} +with(this){return _c('p',[_v("These operations are exposed in the "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("Model")]),_v(" interface as "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("Model#commitCampusConnect()")]),_v(", "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("Model#undoCampusConnect()")]),_v(" and "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("Model#redoCampusConnect()")]),_v(" respectively.")])} },function anonymous( ) { -with(this){return _c('p',[_v("Step 1. The user launches the application for the first time. The "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("VersionedAddressBook")]),_v(" will be initialized with the initial address book state, and the "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("currentStatePointer")]),_v(" pointing to that single address book state.")])} +with(this){return _c('p',[_v("Step 1. The user launches the application for the first time. The "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("VersionedCampusConnect")]),_v(" will be initialized with the initial CampusConnect state, and the "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("currentStatePointer")]),_v(" pointing to that single address book state.")])} },function anonymous( ) { -with(this){return _c('p',[_v("Step 2. The user executes "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("delete 5")]),_v(" command to delete the 5th person in the address book. The "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("delete")]),_v(" command calls "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("Model#commitAddressBook()")]),_v(", causing the modified state of the address book after the "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("delete 5")]),_v(" command executes to be saved in the "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("addressBookStateList")]),_v(", and the "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("currentStatePointer")]),_v(" is shifted to the newly inserted address book state.")])} +with(this){return _c('p',[_v("Step 2. The user executes "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("delete 5")]),_v(" command to delete the 5th person in the address book. The "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("delete")]),_v(" command calls "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("Model#commitCampusConnect()")]),_v(", causing the modified state of the address book after the "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("delete 5")]),_v(" command executes to be saved in the "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("campusConnectStateList")]),_v(", and the "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("currentStatePointer")]),_v(" is shifted to the newly inserted address book state.")])} },function anonymous( ) { -with(this){return _c('p',[_v("Step 3. The user executes "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("add n/David …​")]),_v(" to add a new person. The "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("add")]),_v(" command also calls "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("Model#commitAddressBook()")]),_v(", causing another modified address book state to be saved into the "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("addressBookStateList")]),_v(".")])} +with(this){return _c('p',[_v("Step 3. The user executes "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("add n/David …​")]),_v(" to add a new person. The "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("add")]),_v(" command also calls "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("Model#commitCampusConnect()")]),_v(", causing another modified address book state to be saved into the "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("campusConnectStateList")]),_v(".")])} },function anonymous( ) { -with(this){return _c('p',[_v("Step 4. The user now decides that adding the person was a mistake, and decides to undo that action by executing the "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("undo")]),_v(" command. The "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("undo")]),_v(" command will call "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("Model#undoAddressBook()")]),_v(", which will shift the "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("currentStatePointer")]),_v(" once to the left, pointing it to the previous address book state, and restores the address book to that state.")])} +with(this){return _c('p',[_v("Step 4. The user now decides that adding the person was a mistake, and decides to undo that action by executing the "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("undo")]),_v(" command. The "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("undo")]),_v(" command will call "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("Model#undoCampusConnect()")]),_v(", which will shift the "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("currentStatePointer")]),_v(" once to the left, pointing it to the previous address book state, and restores the address book to that state.")])} },function anonymous( ) { with(this){return _c('p',[_v("The following sequence diagram shows how an undo operation goes through the "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("Logic")]),_v(" component:")])} @@ -164,13 +164,13 @@ with(this){return _c('p',[_v("The following sequence diagram shows how an undo o with(this){return _c('p',[_v("Similarly, how an undo operation goes through the "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("Model")]),_v(" component is shown below:")])} },function anonymous( ) { -with(this){return _c('p',[_v("The "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("redo")]),_v(" command does the opposite — it calls "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("Model#redoAddressBook()")]),_v(", which shifts the "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("currentStatePointer")]),_v(" once to the right, pointing to the previously undone state, and restores the address book to that state.")])} +with(this){return _c('p',[_v("The "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("redo")]),_v(" command does the opposite — it calls "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("Model#redoCampusConnect()")]),_v(", which shifts the "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("currentStatePointer")]),_v(" once to the right, pointing to the previously undone state, and restores the address book to that state.")])} },function anonymous( ) { -with(this){return _c('p',[_v("Step 5. The user then decides to execute the command "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("list")]),_v(". Commands that do not modify the address book, such as "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("list")]),_v(", will usually not call "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("Model#commitAddressBook()")]),_v(", "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("Model#undoAddressBook()")]),_v(" or "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("Model#redoAddressBook()")]),_v(". Thus, the "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("addressBookStateList")]),_v(" remains unchanged.")])} +with(this){return _c('p',[_v("Step 5. The user then decides to execute the command "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("list")]),_v(". Commands that do not modify the address book, such as "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("list")]),_v(", will usually not call "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("Model#commitCampusConnect()")]),_v(", "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("Model#undoCampusConnect()")]),_v(" or "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("Model#redoCampusConnect()")]),_v(". Thus, the "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("campusConnectStateList")]),_v(" remains unchanged.")])} },function anonymous( ) { -with(this){return _c('p',[_v("Step 6. The user executes "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("clear")]),_v(", which calls "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("Model#commitAddressBook()")]),_v(". Since the "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("currentStatePointer")]),_v(" is not pointing at the end of the "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("addressBookStateList")]),_v(", all address book states after the "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("currentStatePointer")]),_v(" will be purged. Reason: It no longer makes sense to redo the "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("add n/David …​")]),_v(" command. This is the behavior that most modern desktop applications follow.")])} +with(this){return _c('p',[_v("Step 6. The user executes "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("clear")]),_v(", which calls "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("Model#commitCampusConnect()")]),_v(". Since the "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("currentStatePointer")]),_v(" is not pointing at the end of the "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("campusConnectStateList")]),_v(", all address book states after the "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("currentStatePointer")]),_v(" will be purged. Reason: It no longer makes sense to redo the "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("add n/David …​")]),_v(" command. This is the behavior that most modern desktop applications follow.")])} },function anonymous( ) { with(this){return _c('h4',{attrs:{"id":"design-considerations"}},[_v("Design considerations:"),_c('a',{staticClass:"fa fa-anchor",attrs:{"href":"#design-considerations","onclick":"event.stopPropagation()"}})])} @@ -356,6 +356,6 @@ with(this){return _c('h3',{attrs:{"id":"saving-data"}},[_v("Saving data"),_c('a' with(this){return _c('ol',[_c('li',[_c('p',[_v("Dealing with missing/corrupted data files")]),_v(" "),_c('ol',[_c('li',[_c('em',[_v("{explain how to simulate a missing/corrupted file, and the expected behavior}")])])])]),_v(" "),_c('li',[_c('p',[_c('em',[_v("{ more test cases …​ }")])])])])} },function anonymous( ) { -with(this){return _c('footer',[_c('div',{staticClass:"text-center"},[_c('small',[_v("["),_c('span',[_c('strong',[_v("Powered by")])]),_v(" "),_c('img',{attrs:{"src":"https://markbind.org/favicon.ico","width":"30"}}),_v(" "),_c('a',{attrs:{"href":"https://markbind.org/"}},[_v("MarkBind 5.5.3")]),_v(", generated on Tue, 15 Oct 2024, 19:35:50 GMT+8]")])])])} +with(this){return _c('footer',[_c('div',{staticClass:"text-center"},[_c('small',[_v("["),_c('span',[_c('strong',[_v("Powered by")])]),_v(" "),_c('img',{attrs:{"src":"https://markbind.org/favicon.ico","width":"30"}}),_v(" "),_c('a',{attrs:{"href":"https://markbind.org/"}},[_v("MarkBind 5.5.3")]),_v(", generated on Tue, 15 Oct 2024, 23:08:02 GMT+8]")])])])} }]; \ No newline at end of file diff --git a/Documentation.html b/Documentation.html index aad598c84b9..be6793385e3 100644 --- a/Documentation.html +++ b/Documentation.html @@ -4,7 +4,7 @@ - CampusConnect - Documentation guide - AddressBook Level-3 + CampusConnect - Documentation guide - CampusConnect Level-3 @@ -16,7 +16,7 @@ Search

    Documentation Guide

    Style guidance:

    Converting to PDF

    +
  • Documentation Guide

    Style guidance:

    Converting to PDF

    diff --git a/Documentation.page-vue-render.js b/Documentation.page-vue-render.js index 5a6dc7206ec..02f3778633c 100644 --- a/Documentation.page-vue-render.js +++ b/Documentation.page-vue-render.js @@ -8,6 +8,6 @@ with(this){return _c('div',{attrs:{"id":"app"}},[_c('header',{attrs:{"sticky":"" with(this){return _c('div',{attrs:{"id":"content-wrapper"}},[_c('h1',{attrs:{"id":"documentation-guide"}},[_v("Documentation Guide"),_c('a',{staticClass:"fa fa-anchor",attrs:{"href":"#documentation-guide","onclick":"event.stopPropagation()"}})]),_v(" "),_c('ul',[_c('li',[_v("We use "),_c('a',{attrs:{"href":"https://markbind.org/"}},[_c('strong',[_v("MarkBind")])]),_v(" to manage documentation.")]),_v(" "),_c('li',[_v("The "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("docs/")]),_v(" folder contains the source files for the documentation website.")]),_v(" "),_c('li',[_v("To learn how set it up and maintain the project website, follow the guide "),_c('a',{attrs:{"href":"https://se-education.org/guides/tutorials/markbind-forked-sites.html"}},[_v("[se-edu/guides] Working with Forked MarkBind sites")]),_v(" for project documentation.")])]),_v(" "),_c('p',[_c('strong',[_v("Style guidance:")])]),_v(" "),_c('ul',[_c('li',[_v("Follow the "),_c('a',{attrs:{"href":"https://developers.google.com/style"}},[_c('strong',[_c('em',[_v("Google developer documentation style guide")])])]),_v(".")]),_v(" "),_c('li',[_v("Also relevant is the "),_c('a',{attrs:{"href":"https://se-education.org/guides/conventions/markdown.html"}},[_c('em',[_v("se-edu/guides "),_c('strong',[_v("Markdown coding standard")])])]),_v(".")])]),_v(" "),_c('p',[_c('strong',[_v("Converting to PDF")])]),_v(" "),_c('ul',[_c('li',[_v("See the guide "),_c('a',{attrs:{"href":"https://se-education.org/guides/tutorials/savingPdf.html"}},[_c('em',[_v("se-edu/guides "),_c('strong',[_v("Saving web documents as PDF files")])])]),_v(".")])])])} },function anonymous( ) { -with(this){return _c('footer',[_c('div',{staticClass:"text-center"},[_c('small',[_v("["),_c('span',[_c('strong',[_v("Powered by")])]),_v(" "),_c('img',{attrs:{"src":"https://markbind.org/favicon.ico","width":"30"}}),_v(" "),_c('a',{attrs:{"href":"https://markbind.org/"}},[_v("MarkBind 5.5.3")]),_v(", generated on Tue, 15 Oct 2024, 19:35:50 GMT+8]")])])])} +with(this){return _c('footer',[_c('div',{staticClass:"text-center"},[_c('small',[_v("["),_c('span',[_c('strong',[_v("Powered by")])]),_v(" "),_c('img',{attrs:{"src":"https://markbind.org/favicon.ico","width":"30"}}),_v(" "),_c('a',{attrs:{"href":"https://markbind.org/"}},[_v("MarkBind 5.5.3")]),_v(", generated on Tue, 15 Oct 2024, 23:08:02 GMT+8]")])])])} }]; \ No newline at end of file diff --git a/Logging.html b/Logging.html index b00b8410d64..a292c9bb845 100644 --- a/Logging.html +++ b/Logging.html @@ -4,7 +4,7 @@ - CampusConnect - Logging guide - AddressBook Level-3 + CampusConnect - Logging guide - CampusConnect Level-3 @@ -16,7 +16,7 @@ Search

    Logging guide

    +
  • Logging guide

    diff --git a/Logging.page-vue-render.js b/Logging.page-vue-render.js index 01db80e7753..6ff24ac5216 100644 --- a/Logging.page-vue-render.js +++ b/Logging.page-vue-render.js @@ -8,6 +8,6 @@ with(this){return _c('div',{attrs:{"id":"app"}},[_c('header',{attrs:{"sticky":"" with(this){return _c('div',{attrs:{"id":"content-wrapper"}},[_c('h1',{attrs:{"id":"logging-guide"}},[_v("Logging guide"),_c('a',{staticClass:"fa fa-anchor",attrs:{"href":"#logging-guide","onclick":"event.stopPropagation()"}})]),_v(" "),_c('ul',[_c('li',[_v("We are using "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("java.util.logging")]),_v(" package for logging.")]),_v(" "),_c('li',[_v("The "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("LogsCenter")]),_v(" class is used to manage the logging levels and logging destinations.")]),_v(" "),_c('li',[_v("The "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("Logger")]),_v(" for a class can be obtained using "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("LogsCenter.getLogger(Class)")]),_v(" which will log messages according to the specified logging level.")]),_v(" "),_c('li',[_v("Log messages are output through the console and to a "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v(".log")]),_v(" file.")]),_v(" "),_c('li',[_v("The output logging level can be controlled using the "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("logLevel")]),_v(" setting in the configuration file (See the "),_c('a',{attrs:{"href":"/tp/Configuration.html"}},[_v("Configuration guide")]),_v(" section).")]),_v(" "),_c('li',[_c('strong',[_v("When choosing a level for a log message")]),_v(", follow the conventions given in "),_c('a',{attrs:{"href":"https://se-education.org/guides/conventions/java/logging.html"}},[_c('em',[_v("[se-edu/guides] Java: Logging conventions")])]),_v(".")])])])} },function anonymous( ) { -with(this){return _c('footer',[_c('div',{staticClass:"text-center"},[_c('small',[_v("["),_c('span',[_c('strong',[_v("Powered by")])]),_v(" "),_c('img',{attrs:{"src":"https://markbind.org/favicon.ico","width":"30"}}),_v(" "),_c('a',{attrs:{"href":"https://markbind.org/"}},[_v("MarkBind 5.5.3")]),_v(", generated on Tue, 15 Oct 2024, 19:35:50 GMT+8]")])])])} +with(this){return _c('footer',[_c('div',{staticClass:"text-center"},[_c('small',[_v("["),_c('span',[_c('strong',[_v("Powered by")])]),_v(" "),_c('img',{attrs:{"src":"https://markbind.org/favicon.ico","width":"30"}}),_v(" "),_c('a',{attrs:{"href":"https://markbind.org/"}},[_v("MarkBind 5.5.3")]),_v(", generated on Tue, 15 Oct 2024, 23:08:02 GMT+8]")])])])} }]; \ No newline at end of file diff --git a/SettingUp.html b/SettingUp.html index 1eaac01cc6b..8058df30545 100644 --- a/SettingUp.html +++ b/SettingUp.html @@ -4,7 +4,7 @@ - CampusConnect - Setting up and getting started - AddressBook Level-3 + CampusConnect - Setting up and getting started - CampusConnect Level-3 @@ -21,8 +21,8 @@ Note: Importing a Gradle project is slightly different from importing a normal Java project.
  • Verify the setup:
    1. Run the seedu.address.Main and try a few commands.
    2. Run the tests to ensure they all pass.

  • Before writing code

    1. Configure the coding style

      If using IDEA, follow the guide [se-edu/guides] IDEA: Configuring the code style to set up IDEA's coding style to match ours.

      Tip: -Optionally, you can follow the guide [se-edu/guides] Using Checkstyle to find how to use the CheckStyle within IDEA e.g., to report problems as you write code.

    2. Set up CI

      This project comes with a GitHub Actions config files (in .github/workflows folder). When GitHub detects those files, it will run the CI for your project automatically at each push to the master branch or to any PR. No set up required.

    3. Learn the design

      When you are ready to start coding, we recommend that you get some sense of the overall design by reading about AddressBook’s architecture.

    4. Do the tutorials -These tutorials will help you get acquainted with the codebase.

    +Optionally, you can follow the guide [se-edu/guides] Using Checkstyle to find how to use the CheckStyle within IDEA e.g., to report problems as you write code.

  • Set up CI

    This project comes with a GitHub Actions config files (in .github/workflows folder). When GitHub detects those files, it will run the CI for your project automatically at each push to the master branch or to any PR. No set up required.

  • Learn the design

    When you are ready to start coding, we recommend that you get some sense of the overall design by reading about CampusConnect’s architecture.

  • Do the tutorials +These tutorials will help you get acquainted with the codebase.

  • diff --git a/SettingUp.page-vue-render.js b/SettingUp.page-vue-render.js index a8938ae5930..a06937e4498 100644 --- a/SettingUp.page-vue-render.js +++ b/SettingUp.page-vue-render.js @@ -35,12 +35,12 @@ with(this){return _c('p',[_v("If using IDEA, follow the guide "),_c('a',{attrs:{ with(this){return _c('li',[_c('p',[_c('strong',[_v("Set up CI")])]),_v(" "),_c('p',[_v("This project comes with a GitHub Actions config files (in "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v(".github/workflows")]),_v(" folder). When GitHub detects those files, it will run the CI for your project automatically at each push to the "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("master")]),_v(" branch or to any PR. No set up required.")])])} },function anonymous( ) { -with(this){return _c('li',[_c('p',[_c('strong',[_v("Learn the design")])]),_v(" "),_c('p',[_v("When you are ready to start coding, we recommend that you get some sense of the overall design by reading about "),_c('a',{attrs:{"href":"/tp/DeveloperGuide.html#architecture"}},[_v("AddressBook’s architecture")]),_v(".")])])} +with(this){return _c('li',[_c('p',[_c('strong',[_v("Learn the design")])]),_v(" "),_c('p',[_v("When you are ready to start coding, we recommend that you get some sense of the overall design by reading about "),_c('a',{attrs:{"href":"/tp/DeveloperGuide.html#architecture"}},[_v("CampusConnect’s architecture")]),_v(".")])])} },function anonymous( ) { with(this){return _c('li',[_c('p',[_c('strong',[_v("Do the tutorials")]),_v("\nThese tutorials will help you get acquainted with the codebase.")]),_v(" "),_c('ul',[_c('li',[_c('a',{attrs:{"href":"/tp/tutorials/TracingCode.html"}},[_v("Tracing code")])]),_v(" "),_c('li',[_c('a',{attrs:{"href":"/tp/tutorials/AddRemark.html"}},[_v("Adding a new command")])]),_v(" "),_c('li',[_c('a',{attrs:{"href":"/tp/tutorials/RemovingFields.html"}},[_v("Removing fields")])])])])} },function anonymous( ) { -with(this){return _c('footer',[_c('div',{staticClass:"text-center"},[_c('small',[_v("["),_c('span',[_c('strong',[_v("Powered by")])]),_v(" "),_c('img',{attrs:{"src":"https://markbind.org/favicon.ico","width":"30"}}),_v(" "),_c('a',{attrs:{"href":"https://markbind.org/"}},[_v("MarkBind 5.5.3")]),_v(", generated on Tue, 15 Oct 2024, 19:35:50 GMT+8]")])])])} +with(this){return _c('footer',[_c('div',{staticClass:"text-center"},[_c('small',[_v("["),_c('span',[_c('strong',[_v("Powered by")])]),_v(" "),_c('img',{attrs:{"src":"https://markbind.org/favicon.ico","width":"30"}}),_v(" "),_c('a',{attrs:{"href":"https://markbind.org/"}},[_v("MarkBind 5.5.3")]),_v(", generated on Tue, 15 Oct 2024, 23:08:02 GMT+8]")])])])} }]; \ No newline at end of file diff --git a/Testing.html b/Testing.html index b8135fe6fd3..d999d55b5e3 100644 --- a/Testing.html +++ b/Testing.html @@ -4,7 +4,7 @@ - CampusConnect - Testing guide - AddressBook Level-3 + CampusConnect - Testing guide - CampusConnect Level-3 @@ -20,7 +20,7 @@ test class, or a test and choose Run 'ABC'
  • Method 2: Using Gradle
  • Link: Read this Gradle Tutorial from the se-edu/guides to learn more about using Gradle.


    Types of tests

    This project has three types of tests:

    1. Unit tests targeting the lowest level methods/classes.
      e.g. seedu.address.commons.StringUtilTest
    2. Integration tests that are checking the integration of multiple code units (those code units are assumed to be working).
      e.g. seedu.address.storage.StorageManagerTest
    3. Hybrids of unit and integration tests. These test are checking multiple code units as well as how the are connected together.
      -e.g. seedu.address.logic.LogicManagerTest
    +e.g. seedu.address.logic.LogicManagerTest diff --git a/Testing.page-vue-render.js b/Testing.page-vue-render.js index 8b132b22eda..426da7d1216 100644 --- a/Testing.page-vue-render.js +++ b/Testing.page-vue-render.js @@ -20,6 +20,6 @@ with(this){return _c('h2',{attrs:{"id":"types-of-tests"}},[_v("Types of tests"), with(this){return _c('ol',[_c('li',[_c('em',[_v("Unit tests")]),_v(" targeting the lowest level methods/classes."),_c('br'),_v("\ne.g. "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("seedu.address.commons.StringUtilTest")])]),_v(" "),_c('li',[_c('em',[_v("Integration tests")]),_v(" that are checking the integration of multiple code units (those code units are assumed to be working)."),_c('br'),_v("\ne.g. "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("seedu.address.storage.StorageManagerTest")])]),_v(" "),_c('li',[_v("Hybrids of unit and integration tests. These test are checking multiple code units as well as how the are connected together."),_c('br'),_v("\ne.g. "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("seedu.address.logic.LogicManagerTest")])])])} },function anonymous( ) { -with(this){return _c('footer',[_c('div',{staticClass:"text-center"},[_c('small',[_v("["),_c('span',[_c('strong',[_v("Powered by")])]),_v(" "),_c('img',{attrs:{"src":"https://markbind.org/favicon.ico","width":"30"}}),_v(" "),_c('a',{attrs:{"href":"https://markbind.org/"}},[_v("MarkBind 5.5.3")]),_v(", generated on Tue, 15 Oct 2024, 19:35:50 GMT+8]")])])])} +with(this){return _c('footer',[_c('div',{staticClass:"text-center"},[_c('small',[_v("["),_c('span',[_c('strong',[_v("Powered by")])]),_v(" "),_c('img',{attrs:{"src":"https://markbind.org/favicon.ico","width":"30"}}),_v(" "),_c('a',{attrs:{"href":"https://markbind.org/"}},[_v("MarkBind 5.5.3")]),_v(", generated on Tue, 15 Oct 2024, 23:08:02 GMT+8]")])])])} }]; \ No newline at end of file diff --git a/UserGuide.html b/UserGuide.html index 6e4a5c1746d..28610ce2f3c 100644 --- a/UserGuide.html +++ b/UserGuide.html @@ -4,7 +4,7 @@ - CampusConnect - User Guide - AddressBook Level-3 + CampusConnect - User Guide - CampusConnect Level-3 @@ -16,7 +16,7 @@ Search

    AB-3 User Guide

    AddressBook Level 3 (AB3) is a desktop app for managing contacts, optimized for use via a Line Interface (CLI) while still having the benefits of a Graphical User Interface (GUI). If you can type fast, AB3 can get your contact management tasks done faster than traditional GUI apps.


    Quick start

    1. Ensure you have Java 17 or above installed in your Computer.

    2. Download the latest .jar file from here.

    3. Copy the file to the folder you want to use as the home folder for your AddressBook.

    4. Open a command terminal, cd into the folder you put the jar file in, and use the java -jar addressbook.jar command to run the application.
      +

  • CampusConnect User Guide

    CampusConnect(CC) is a desktop app for managing contacts, optimized for use via a Line Interface (CLI) while still having the benefits of a Graphical User Interface (GUI). If you can type fast, AB3 can get your contact management tasks done faster than traditional GUI apps.


    Quick start

    1. Ensure you have Java 17 or above installed in your Computer.

    2. Download the latest .jar file from here.

    3. Copy the file to the folder you want to use as the home folder for your CampusConnect.

    4. Open a command terminal, cd into the folder you put the jar file in, and use the java -jar CampusConnect.jar command to run the application.
      A GUI similar to the below should appear in a few seconds. Note how the app contains some sample data.
      Ui

    5. Type the command in the command box and press Enter to execute it. e.g. typing help and pressing Enter will open the help window.
      Some example commands you can try:

      • list : Lists all contacts.

      • add n/John Doe p/98765432 e/johnd@example.com a/John street, block 123, #01-01 : Adds a contact named John Doe to the Address Book.

      • delete 3 : Deletes the 3rd contact shown in the current list.

      • clear : Deletes all contacts.

      • exit : Exits the app.

    6. Refer to the Features below for details of each command.


    Features

    Notes about the command format:

    • Words in UPPER_CASE are the parameters to be supplied by the user.
      e.g. in add n/NAME, NAME is a parameter which can be used as add n/John Doe.

    • Items in square brackets are optional.
      @@ -25,9 +25,9 @@ e.g. if the command specifies n/NAME p/PHONE_NUMBER, p/PHONE_NUMBER n/NAME is also acceptable.

    • Extraneous parameters for commands that do not take in parameters (such as help, list, exit and clear) will be ignored.
      e.g. if the command specifies help 123, it will be interpreted as help.

    • If you are using a PDF version of this document, be careful when copying and pasting commands that span multiple lines as space characters surrounding line-breaks may be omitted when copied over to the application.

    Viewing help : help

    Shows a message explaning how to access the help page.

    help message

    Format: help

    Adding a person: add

    Adds a person to the address book.

    Format: add n/NAME p/PHONE_NUMBER e/EMAIL a/ADDRESS [t/TAG]…​

    Tip: A person can have any number of tags (including 0)

    Examples:

    Listing all persons : list

    Shows a list of all persons in the address book.

    Format: list

    Editing a person : edit

    Edits an existing person in the address book.

    Format: edit INDEX [n/NAME] [p/PHONE] [e/EMAIL] [a/ADDRESS] [t/TAG]…​

    Examples:

    Locating persons by name: find

    Finds persons whose names contain any of the given keywords.

    Format: find KEYWORD [MORE_KEYWORDS]

    Examples:

    Deleting a person : delete

    Deletes the specified person from the address book.

    Format: delete INDEX

    Examples:

    Clearing all entries : clear

    Clears all entries from the address book.

    Format: clear

    Exiting the program : exit

    Exits the program.

    Format: exit

    Saving the data

    AddressBook data are saved in the hard disk automatically after any command that changes the data. There is no need to save manually.

    Editing the data file

    AddressBook data are saved automatically as a JSON file [JAR file location]/data/addressbook.json. Advanced users are welcome to update data directly by editing that data file.

    Caution: -If your changes to the data file makes its format invalid, AddressBook will discard all data and start with an empty data file at the next run. Hence, it is recommended to take a backup of the file before editing it.
    -Furthermore, certain edits can cause the AddressBook to behave in unexpected ways (e.g., if a value entered is outside the acceptable range). Therefore, edit the data file only if you are confident that you can update it correctly.

    Archiving data files [coming in v2.0]

    Details coming soon ...


    FAQ

    Q: How do I transfer my data to another Computer?
    A: Install the app in the other computer and overwrite the empty data file it creates with the file that contains the data of your previous AddressBook home folder.


    Known issues

    1. When using multiple screens, if you move the application to a secondary screen, and later switch to using only the primary screen, the GUI will open off-screen. The remedy is to delete the preferences.json file created by the application before running the application again.
    2. If you minimize the Help Window and then run the help command (or use the Help menu, or the keyboard shortcut F1) again, the original Help Window will remain minimized, and no new Help Window will appear. The remedy is to manually restore the minimized Help Window.

    Command summary

    Action Format, Examples
    Add add n/NAME p/PHONE_NUMBER e/EMAIL a/ADDRESS [t/TAG]…​
    e.g., add n/James Ho p/22224444 e/jamesho@example.com a/123, Clementi Rd, 1234665 t/friend t/colleague
    Clear clear
    Delete delete INDEX
    e.g., delete 3
    Edit edit INDEX [n/NAME] [p/PHONE_NUMBER] [e/EMAIL] [a/ADDRESS] [t/TAG]…​
    e.g.,edit 2 n/James Lee e/jameslee@example.com
    Find find KEYWORD [MORE_KEYWORDS]
    e.g., find James Jake
    List list
    Help help
    +e.g. Hans Bo will return Hans Gruber, Bo Yang

    Examples:

    Deleting a person : delete

    Deletes the specified person from the address book.

    Format: delete INDEX

    Examples:

    Clearing all entries : clear

    Clears all entries from the address book.

    Format: clear

    Exiting the program : exit

    Exits the program.

    Format: exit

    Saving the data

    CampusConnect data are saved in the hard disk automatically after any command that changes the data. There is no need to save manually.

    Editing the data file

    CampusConnect data are saved automatically as a JSON file [JAR file location]/data/CampusConnect.json. Advanced users are welcome to update data directly by editing that data file.

    Caution: +If your changes to the data file makes its format invalid, CampusConnect will discard all data and start with an empty data file at the next run. Hence, it is recommended to take a backup of the file before editing it.
    +Furthermore, certain edits can cause the CampusConnect to behave in unexpected ways (e.g., if a value entered is outside the acceptable range). Therefore, edit the data file only if you are confident that you can update it correctly.

    Archiving data files [coming in v2.0]

    Details coming soon ...


    FAQ

    Q: How do I transfer my data to another Computer?
    A: Install the app in the other computer and overwrite the empty data file it creates with the file that contains the data of your previous CampusConnect home folder.


    Known issues

    1. When using multiple screens, if you move the application to a secondary screen, and later switch to using only the primary screen, the GUI will open off-screen. The remedy is to delete the preferences.json file created by the application before running the application again.
    2. If you minimize the Help Window and then run the help command (or use the Help menu, or the keyboard shortcut F1) again, the original Help Window will remain minimized, and no new Help Window will appear. The remedy is to manually restore the minimized Help Window.

    Command summary

    Action Format, Examples
    Add add n/NAME p/PHONE_NUMBER e/EMAIL a/ADDRESS [t/TAG]…​
    e.g., add n/James Ho p/22224444 e/jamesho@example.com a/123, Clementi Rd, 1234665 t/friend t/colleague
    Clear clear
    Delete delete INDEX
    e.g., delete 3
    Edit edit INDEX [n/NAME] [p/PHONE_NUMBER] [e/EMAIL] [a/ADDRESS] [t/TAG]…​
    e.g.,edit 2 n/James Lee e/jameslee@example.com
    Find find KEYWORD [MORE_KEYWORDS]
    e.g., find James Jake
    List list
    Help help
    diff --git a/UserGuide.page-vue-render.js b/UserGuide.page-vue-render.js index 906224b67a8..6e1c717660f 100644 --- a/UserGuide.page-vue-render.js +++ b/UserGuide.page-vue-render.js @@ -1,20 +1,20 @@ var pageVueRenderFn = function anonymous( ) { -with(this){return _c('div',{attrs:{"id":"app"}},[_c('header',{attrs:{"sticky":""}},[_c('navbar',{attrs:{"type":"dark"},scopedSlots:_u([{key:"brand",fn:function(){return [_c('a',{staticClass:"navbar-brand",attrs:{"href":"/tp/index.html","title":"Home"}},[_v("CampusConnect")])]},proxy:true},{key:"right",fn:function(){return [_c('li',[_c('form',{staticClass:"navbar-form"},[_c('searchbar',{attrs:{"data":searchData,"placeholder":"Search","on-hit":searchCallback,"menu-align-right":""}})],1)])]},proxy:true}])},[_v(" "),_c('li',[_c('a',{staticClass:"nav-link",attrs:{"href":"/tp/index.html"}},[_v("Home")])]),_v(" "),_c('li',[_c('a',{staticClass:"nav-link",attrs:{"href":"/tp/UserGuide.html"}},[_v("User Guide")])]),_v(" "),_c('li',[_c('a',{staticClass:"nav-link",attrs:{"href":"/tp/DeveloperGuide.html"}},[_v("Developer Guide")])]),_v(" "),_c('li',[_c('a',{staticClass:"nav-link",attrs:{"href":"/tp/AboutUs.html"}},[_v("About Us")])]),_v(" "),_c('li',[_c('a',{staticClass:"nav-link",attrs:{"href":"https://github.com/AY2425S1-CS2103T-F14a-4/tp","target":"_blank"}},[_c('span',[_c('span',{staticClass:"fab fa-github",attrs:{"aria-hidden":"true"}})])])])])],1),_v(" "),_c('div',{attrs:{"id":"flex-body"}},[_c('overlay-source',{attrs:{"id":"site-nav","tag-name":"nav","to":"site-nav"}},[_c('div',{staticClass:"site-nav-top"},[_c('div',{staticClass:"fw-bold mb-2",staticStyle:{"font-size":"1.25rem"}},[_v("Site Map")])]),_v(" "),_c('div',{staticClass:"nav-component slim-scroll"},[_c('site-nav',[_c('overlay-source',{staticClass:"site-nav-list site-nav-list-root",attrs:{"tag-name":"ul","to":"mb-site-nav"}},[_c('li',[_c('div',{staticClass:"site-nav-default-list-item site-nav-list-item-0",attrs:{"onclick":"handleSiteNavClick(this)"}},[_c('a',{attrs:{"href":"/tp/index.html"}},[_v("Home")])])]),_v(" "),_c('li',[_c('div',{staticClass:"site-nav-default-list-item site-nav-list-item-0",attrs:{"onclick":"handleSiteNavClick(this)"}},[_c('a',{attrs:{"href":"/tp/UserGuide.html"}},[_v("User Guide")]),_v(" "),_c('div',{staticClass:"site-nav-dropdown-btn-container"},[_c('i',{staticClass:"site-nav-dropdown-btn-icon site-nav-rotate-icon",attrs:{"onclick":"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();"}},[_c('span',{staticClass:"glyphicon glyphicon-menu-down",attrs:{"aria-hidden":"true"}})])])]),_c('ul',{staticClass:"site-nav-dropdown-container site-nav-dropdown-container-open site-nav-list"},[_c('li',[_c('div',{staticClass:"site-nav-default-list-item site-nav-list-item-1",attrs:{"onclick":"handleSiteNavClick(this)"}},[_c('a',{attrs:{"href":"/tp/UserGuide.html#quick-start"}},[_v("Quick Start")])])]),_v(" "),_c('li',[_c('div',{staticClass:"site-nav-default-list-item site-nav-list-item-1",attrs:{"onclick":"handleSiteNavClick(this)"}},[_c('a',{attrs:{"href":"/tp/UserGuide.html#features"}},[_v("Features")])])]),_v(" "),_c('li',[_c('div',{staticClass:"site-nav-default-list-item site-nav-list-item-1",attrs:{"onclick":"handleSiteNavClick(this)"}},[_c('a',{attrs:{"href":"/tp/UserGuide.html#faq"}},[_v("FAQ")])])]),_v(" "),_c('li',[_c('div',{staticClass:"site-nav-default-list-item site-nav-list-item-1",attrs:{"onclick":"handleSiteNavClick(this)"}},[_c('a',{attrs:{"href":"/tp/UserGuide.html#faq"}},[_v("Command Summary")])])])])]),_v(" "),_c('li',[_c('div',{staticClass:"site-nav-default-list-item site-nav-list-item-0",attrs:{"onclick":"handleSiteNavClick(this)"}},[_c('a',{attrs:{"href":"/tp/DeveloperGuide.html"}},[_v("Developer Guide")]),_v(" "),_c('div',{staticClass:"site-nav-dropdown-btn-container"},[_c('i',{staticClass:"site-nav-dropdown-btn-icon site-nav-rotate-icon",attrs:{"onclick":"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();"}},[_c('span',{staticClass:"glyphicon glyphicon-menu-down",attrs:{"aria-hidden":"true"}})])])]),_c('ul',{staticClass:"site-nav-dropdown-container site-nav-dropdown-container-open site-nav-list"},[_c('li',[_c('div',{staticClass:"site-nav-default-list-item site-nav-list-item-1",attrs:{"onclick":"handleSiteNavClick(this)"}},[_c('a',{attrs:{"href":"/tp/DeveloperGuide.html#acknowledgements"}},[_v("Acknowledgements")])])]),_v(" "),_c('li',[_c('div',{staticClass:"site-nav-default-list-item site-nav-list-item-1",attrs:{"onclick":"handleSiteNavClick(this)"}},[_c('a',{attrs:{"href":"/tp/DeveloperGuide.html#setting-up-getting-started"}},[_v("Setting Up")])])]),_v(" "),_c('li',[_c('div',{staticClass:"site-nav-default-list-item site-nav-list-item-1",attrs:{"onclick":"handleSiteNavClick(this)"}},[_c('a',{attrs:{"href":"/tp/DeveloperGuide.html#design"}},[_v("Design")])])]),_v(" "),_c('li',[_c('div',{staticClass:"site-nav-default-list-item site-nav-list-item-1",attrs:{"onclick":"handleSiteNavClick(this)"}},[_c('a',{attrs:{"href":"/tp/DeveloperGuide.html#implementation"}},[_v("Implementation")])])]),_v(" "),_c('li',[_c('div',{staticClass:"site-nav-default-list-item site-nav-list-item-1",attrs:{"onclick":"handleSiteNavClick(this)"}},[_c('a',{attrs:{"href":"/tp/DeveloperGuide.html#documentation-logging-testing-configuration-dev-ops"}},[_v("Documentation, logging, testing, configuration, dev-ops")])])]),_v(" "),_c('li',[_c('div',{staticClass:"site-nav-default-list-item site-nav-list-item-1",attrs:{"onclick":"handleSiteNavClick(this)"}},[_c('a',{attrs:{"href":"/tp/DeveloperGuide.html#appendix-requirements"}},[_v("Appendix: Requirements")])])]),_v(" "),_c('li',[_c('div',{staticClass:"site-nav-default-list-item site-nav-list-item-1",attrs:{"onclick":"handleSiteNavClick(this)"}},[_c('a',{attrs:{"href":"/tp/DeveloperGuide.html#appendix-instructions-for-manual-testing"}},[_v("Appendix: Instructions for manual testing")])])])])]),_v(" "),_c('li',[_c('div',{staticClass:"site-nav-default-list-item site-nav-list-item-0",attrs:{"onclick":"handleSiteNavClick(this)"}},[_v("Tutorials\n\n"),_c('div',{staticClass:"site-nav-dropdown-btn-container"},[_c('i',{staticClass:"site-nav-dropdown-btn-icon",attrs:{"onclick":"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();"}},[_c('span',{staticClass:"glyphicon glyphicon-menu-down",attrs:{"aria-hidden":"true"}})])])]),_c('ul',{staticClass:"site-nav-dropdown-container site-nav-list"},[_c('li',[_c('div',{staticClass:"site-nav-default-list-item site-nav-list-item-1",attrs:{"onclick":"handleSiteNavClick(this)"}},[_c('a',{attrs:{"href":"/tp/tutorials/TracingCode.html"}},[_v("Tracing code")])])]),_v(" "),_c('li',[_c('div',{staticClass:"site-nav-default-list-item site-nav-list-item-1",attrs:{"onclick":"handleSiteNavClick(this)"}},[_c('a',{attrs:{"href":"/tp/tutorials/AddRemark.html"}},[_v("Adding a command")])])]),_v(" "),_c('li',[_c('div',{staticClass:"site-nav-default-list-item site-nav-list-item-1",attrs:{"onclick":"handleSiteNavClick(this)"}},[_c('a',{attrs:{"href":"/tp/tutorials/RemovingFields.html"}},[_v("Removing Fields")])])])])]),_v(" "),_c('li',[_c('div',{staticClass:"site-nav-default-list-item site-nav-list-item-0",attrs:{"onclick":"handleSiteNavClick(this)"}},[_c('a',{attrs:{"href":"/tp/AboutUs.html"}},[_v("About Us")])])])])],1)],1)]),_v(" "),_c('div',{attrs:{"id":"content-wrapper"}},[_m(0),_v(" "),_m(1),_v(" "),_c('div',{pre:true,attrs:{"class":"page-nav-print d-none d-print-block"}}),_v(" "),_c('hr'),_v(" "),_m(2),_v(" "),_m(3),_v(" "),_c('hr'),_v(" "),_m(4),_v(" "),_c('box',{attrs:{"type":"info","seamless":""}},[_c('p',[_c('strong',[_v("Notes about the command format:")]),_c('br')]),_v(" "),_c('ul',[_c('li',[_c('p',[_v("Words in "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("UPPER_CASE")]),_v(" are the parameters to be supplied by the user."),_c('br'),_v("\ne.g. in "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("add n/NAME")]),_v(", "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("NAME")]),_v(" is a parameter which can be used as "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("add n/John Doe")]),_v(".")])]),_v(" "),_c('li',[_c('p',[_v("Items in square brackets are optional."),_c('br'),_v("\ne.g "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("n/NAME [t/TAG]")]),_v(" can be used as "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("n/John Doe t/friend")]),_v(" or as "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("n/John Doe")]),_v(".")])]),_v(" "),_c('li',[_c('p',[_v("Items with "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("…")]),_v("​ after them can be used multiple times including zero times."),_c('br'),_v("\ne.g. "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("[t/TAG]…​")]),_v(" can be used as "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}}),_v(" (i.e. 0 times), "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("t/friend")]),_v(", "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("t/friend t/family")]),_v(" etc.")])]),_v(" "),_c('li',[_c('p',[_v("Parameters can be in any order."),_c('br'),_v("\ne.g. if the command specifies "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("n/NAME p/PHONE_NUMBER")]),_v(", "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("p/PHONE_NUMBER n/NAME")]),_v(" is also acceptable.")])]),_v(" "),_c('li',[_c('p',[_v("Extraneous parameters for commands that do not take in parameters (such as "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("help")]),_v(", "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("list")]),_v(", "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("exit")]),_v(" and "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("clear")]),_v(") will be ignored."),_c('br'),_v("\ne.g. if the command specifies "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("help 123")]),_v(", it will be interpreted as "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("help")]),_v(".")])]),_v(" "),_c('li',[_c('p',[_v("If you are using a PDF version of this document, be careful when copying and pasting commands that span multiple lines as space characters surrounding line-breaks may be omitted when copied over to the application.")])])])]),_v(" "),_m(5),_v(" "),_c('p',[_v("Shows a message explaning how to access the help page.")]),_v(" "),_m(6),_v(" "),_m(7),_v(" "),_m(8),_v(" "),_c('p',[_v("Adds a person to the address book.")]),_v(" "),_m(9),_v(" "),_c('box',{attrs:{"type":"tip","seamless":""}},[_c('p',[_c('strong',[_v("Tip:")]),_v(" A person can have any number of tags (including 0)")])]),_v(" "),_c('p',[_v("Examples:")]),_v(" "),_m(10),_v(" "),_m(11),_v(" "),_c('p',[_v("Shows a list of all persons in the address book.")]),_v(" "),_m(12),_v(" "),_m(13),_v(" "),_c('p',[_v("Edits an existing person in the address book.")]),_v(" "),_m(14),_v(" "),_m(15),_v(" "),_c('p',[_v("Examples:")]),_v(" "),_m(16),_v(" "),_m(17),_v(" "),_c('p',[_v("Finds persons whose names contain any of the given keywords.")]),_v(" "),_m(18),_v(" "),_m(19),_v(" "),_c('p',[_v("Examples:")]),_v(" "),_m(20),_v(" "),_m(21),_v(" "),_c('p',[_v("Deletes the specified person from the address book.")]),_v(" "),_m(22),_v(" "),_m(23),_v(" "),_c('p',[_v("Examples:")]),_v(" "),_m(24),_v(" "),_m(25),_v(" "),_c('p',[_v("Clears all entries from the address book.")]),_v(" "),_m(26),_v(" "),_m(27),_v(" "),_c('p',[_v("Exits the program.")]),_v(" "),_m(28),_v(" "),_m(29),_v(" "),_c('p',[_v("AddressBook data are saved in the hard disk automatically after any command that changes the data. There is no need to save manually.")]),_v(" "),_m(30),_v(" "),_m(31),_v(" "),_c('box',{attrs:{"type":"warning","seamless":""}},[_c('p',[_c('strong',[_v("Caution:")]),_v("\nIf your changes to the data file makes its format invalid, AddressBook will discard all data and start with an empty data file at the next run. Hence, it is recommended to take a backup of the file before editing it."),_c('br'),_v("\nFurthermore, certain edits can cause the AddressBook to behave in unexpected ways (e.g., if a value entered is outside the acceptable range). Therefore, edit the data file only if you are confident that you can update it correctly.")])]),_v(" "),_m(32),_v(" "),_m(33),_v(" "),_c('hr'),_v(" "),_m(34),_v(" "),_m(35),_v(" "),_c('hr'),_v(" "),_m(36),_v(" "),_m(37),_v(" "),_c('hr'),_v(" "),_m(38),_v(" "),_m(39)],1),_v(" "),_c('overlay-source',{attrs:{"id":"page-nav","tag-name":"nav","to":"page-nav"}},[_c('div',{staticClass:"nav-component slim-scroll"},[_c('overlay-source',{staticClass:"nav nav-pills flex-column my-0 small no-flex-wrap",attrs:{"id":"mb-page-nav","tag-name":"nav","to":"mb-page-nav"}},[_c('a',{pre:true,attrs:{"class":"nav-link py-1","href":"#ab-3-user-guide"}},[_v("AB-3 User Guide‎")]),_v(" "),_c('nav',{staticClass:"nav nav-pills flex-column my-0 nested no-flex-wrap"},[_c('a',{pre:true,attrs:{"class":"nav-link py-1","href":"#quick-start"}},[_v("Quick start‎")]),_v(" "),_c('a',{pre:true,attrs:{"class":"nav-link py-1","href":"#features"}},[_v("Features‎")]),_v(" "),_c('nav',{staticClass:"nav nav-pills flex-column my-0 nested no-flex-wrap"},[_c('a',{pre:true,attrs:{"class":"nav-link py-1","href":"#viewing-help-help"}},[_v("Viewing help : help‎")]),_v(" "),_c('a',{pre:true,attrs:{"class":"nav-link py-1","href":"#adding-a-person-add"}},[_v("Adding a person: add‎")]),_v(" "),_c('a',{pre:true,attrs:{"class":"nav-link py-1","href":"#listing-all-persons-list"}},[_v("Listing all persons : list‎")]),_v(" "),_c('a',{pre:true,attrs:{"class":"nav-link py-1","href":"#editing-a-person-edit"}},[_v("Editing a person : edit‎")]),_v(" "),_c('a',{pre:true,attrs:{"class":"nav-link py-1","href":"#locating-persons-by-name-find"}},[_v("Locating persons by name: find‎")]),_v(" "),_c('a',{pre:true,attrs:{"class":"nav-link py-1","href":"#deleting-a-person-delete"}},[_v("Deleting a person : delete‎")]),_v(" "),_c('a',{pre:true,attrs:{"class":"nav-link py-1","href":"#clearing-all-entries-clear"}},[_v("Clearing all entries : clear‎")]),_v(" "),_c('a',{pre:true,attrs:{"class":"nav-link py-1","href":"#exiting-the-program-exit"}},[_v("Exiting the program : exit‎")]),_v(" "),_c('a',{pre:true,attrs:{"class":"nav-link py-1","href":"#saving-the-data"}},[_v("Saving the data‎")]),_v(" "),_c('a',{pre:true,attrs:{"class":"nav-link py-1","href":"#editing-the-data-file"}},[_v("Editing the data file‎")]),_v(" "),_c('a',{pre:true,attrs:{"class":"nav-link py-1","href":"#archiving-data-files-coming-in-v2-0"}},[_v("Archiving data files [coming in v2.0]‎")])]),_v(" "),_c('a',{pre:true,attrs:{"class":"nav-link py-1","href":"#faq"}},[_v("FAQ‎")]),_v(" "),_c('a',{pre:true,attrs:{"class":"nav-link py-1","href":"#known-issues"}},[_v("Known issues‎")]),_v(" "),_c('a',{pre:true,attrs:{"class":"nav-link py-1","href":"#command-summary"}},[_v("Command summary‎")])])])],1)]),_v(" "),_c('scroll-top-button')],1),_v(" "),_m(40)])} +with(this){return _c('div',{attrs:{"id":"app"}},[_c('header',{attrs:{"sticky":""}},[_c('navbar',{attrs:{"type":"dark"},scopedSlots:_u([{key:"brand",fn:function(){return [_c('a',{staticClass:"navbar-brand",attrs:{"href":"/tp/index.html","title":"Home"}},[_v("CampusConnect")])]},proxy:true},{key:"right",fn:function(){return [_c('li',[_c('form',{staticClass:"navbar-form"},[_c('searchbar',{attrs:{"data":searchData,"placeholder":"Search","on-hit":searchCallback,"menu-align-right":""}})],1)])]},proxy:true}])},[_v(" "),_c('li',[_c('a',{staticClass:"nav-link",attrs:{"href":"/tp/index.html"}},[_v("Home")])]),_v(" "),_c('li',[_c('a',{staticClass:"nav-link",attrs:{"href":"/tp/UserGuide.html"}},[_v("User Guide")])]),_v(" "),_c('li',[_c('a',{staticClass:"nav-link",attrs:{"href":"/tp/DeveloperGuide.html"}},[_v("Developer Guide")])]),_v(" "),_c('li',[_c('a',{staticClass:"nav-link",attrs:{"href":"/tp/AboutUs.html"}},[_v("About Us")])]),_v(" "),_c('li',[_c('a',{staticClass:"nav-link",attrs:{"href":"https://github.com/AY2425S1-CS2103T-F14a-4/tp","target":"_blank"}},[_c('span',[_c('span',{staticClass:"fab fa-github",attrs:{"aria-hidden":"true"}})])])])])],1),_v(" "),_c('div',{attrs:{"id":"flex-body"}},[_c('overlay-source',{attrs:{"id":"site-nav","tag-name":"nav","to":"site-nav"}},[_c('div',{staticClass:"site-nav-top"},[_c('div',{staticClass:"fw-bold mb-2",staticStyle:{"font-size":"1.25rem"}},[_v("Site Map")])]),_v(" "),_c('div',{staticClass:"nav-component slim-scroll"},[_c('site-nav',[_c('overlay-source',{staticClass:"site-nav-list site-nav-list-root",attrs:{"tag-name":"ul","to":"mb-site-nav"}},[_c('li',[_c('div',{staticClass:"site-nav-default-list-item site-nav-list-item-0",attrs:{"onclick":"handleSiteNavClick(this)"}},[_c('a',{attrs:{"href":"/tp/index.html"}},[_v("Home")])])]),_v(" "),_c('li',[_c('div',{staticClass:"site-nav-default-list-item site-nav-list-item-0",attrs:{"onclick":"handleSiteNavClick(this)"}},[_c('a',{attrs:{"href":"/tp/UserGuide.html"}},[_v("User Guide")]),_v(" "),_c('div',{staticClass:"site-nav-dropdown-btn-container"},[_c('i',{staticClass:"site-nav-dropdown-btn-icon site-nav-rotate-icon",attrs:{"onclick":"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();"}},[_c('span',{staticClass:"glyphicon glyphicon-menu-down",attrs:{"aria-hidden":"true"}})])])]),_c('ul',{staticClass:"site-nav-dropdown-container site-nav-dropdown-container-open site-nav-list"},[_c('li',[_c('div',{staticClass:"site-nav-default-list-item site-nav-list-item-1",attrs:{"onclick":"handleSiteNavClick(this)"}},[_c('a',{attrs:{"href":"/tp/UserGuide.html#quick-start"}},[_v("Quick Start")])])]),_v(" "),_c('li',[_c('div',{staticClass:"site-nav-default-list-item site-nav-list-item-1",attrs:{"onclick":"handleSiteNavClick(this)"}},[_c('a',{attrs:{"href":"/tp/UserGuide.html#features"}},[_v("Features")])])]),_v(" "),_c('li',[_c('div',{staticClass:"site-nav-default-list-item site-nav-list-item-1",attrs:{"onclick":"handleSiteNavClick(this)"}},[_c('a',{attrs:{"href":"/tp/UserGuide.html#faq"}},[_v("FAQ")])])]),_v(" "),_c('li',[_c('div',{staticClass:"site-nav-default-list-item site-nav-list-item-1",attrs:{"onclick":"handleSiteNavClick(this)"}},[_c('a',{attrs:{"href":"/tp/UserGuide.html#faq"}},[_v("Command Summary")])])])])]),_v(" "),_c('li',[_c('div',{staticClass:"site-nav-default-list-item site-nav-list-item-0",attrs:{"onclick":"handleSiteNavClick(this)"}},[_c('a',{attrs:{"href":"/tp/DeveloperGuide.html"}},[_v("Developer Guide")]),_v(" "),_c('div',{staticClass:"site-nav-dropdown-btn-container"},[_c('i',{staticClass:"site-nav-dropdown-btn-icon site-nav-rotate-icon",attrs:{"onclick":"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();"}},[_c('span',{staticClass:"glyphicon glyphicon-menu-down",attrs:{"aria-hidden":"true"}})])])]),_c('ul',{staticClass:"site-nav-dropdown-container site-nav-dropdown-container-open site-nav-list"},[_c('li',[_c('div',{staticClass:"site-nav-default-list-item site-nav-list-item-1",attrs:{"onclick":"handleSiteNavClick(this)"}},[_c('a',{attrs:{"href":"/tp/DeveloperGuide.html#acknowledgements"}},[_v("Acknowledgements")])])]),_v(" "),_c('li',[_c('div',{staticClass:"site-nav-default-list-item site-nav-list-item-1",attrs:{"onclick":"handleSiteNavClick(this)"}},[_c('a',{attrs:{"href":"/tp/DeveloperGuide.html#setting-up-getting-started"}},[_v("Setting Up")])])]),_v(" "),_c('li',[_c('div',{staticClass:"site-nav-default-list-item site-nav-list-item-1",attrs:{"onclick":"handleSiteNavClick(this)"}},[_c('a',{attrs:{"href":"/tp/DeveloperGuide.html#design"}},[_v("Design")])])]),_v(" "),_c('li',[_c('div',{staticClass:"site-nav-default-list-item site-nav-list-item-1",attrs:{"onclick":"handleSiteNavClick(this)"}},[_c('a',{attrs:{"href":"/tp/DeveloperGuide.html#implementation"}},[_v("Implementation")])])]),_v(" "),_c('li',[_c('div',{staticClass:"site-nav-default-list-item site-nav-list-item-1",attrs:{"onclick":"handleSiteNavClick(this)"}},[_c('a',{attrs:{"href":"/tp/DeveloperGuide.html#documentation-logging-testing-configuration-dev-ops"}},[_v("Documentation, logging, testing, configuration, dev-ops")])])]),_v(" "),_c('li',[_c('div',{staticClass:"site-nav-default-list-item site-nav-list-item-1",attrs:{"onclick":"handleSiteNavClick(this)"}},[_c('a',{attrs:{"href":"/tp/DeveloperGuide.html#appendix-requirements"}},[_v("Appendix: Requirements")])])]),_v(" "),_c('li',[_c('div',{staticClass:"site-nav-default-list-item site-nav-list-item-1",attrs:{"onclick":"handleSiteNavClick(this)"}},[_c('a',{attrs:{"href":"/tp/DeveloperGuide.html#appendix-instructions-for-manual-testing"}},[_v("Appendix: Instructions for manual testing")])])])])]),_v(" "),_c('li',[_c('div',{staticClass:"site-nav-default-list-item site-nav-list-item-0",attrs:{"onclick":"handleSiteNavClick(this)"}},[_v("Tutorials\n\n"),_c('div',{staticClass:"site-nav-dropdown-btn-container"},[_c('i',{staticClass:"site-nav-dropdown-btn-icon",attrs:{"onclick":"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();"}},[_c('span',{staticClass:"glyphicon glyphicon-menu-down",attrs:{"aria-hidden":"true"}})])])]),_c('ul',{staticClass:"site-nav-dropdown-container site-nav-list"},[_c('li',[_c('div',{staticClass:"site-nav-default-list-item site-nav-list-item-1",attrs:{"onclick":"handleSiteNavClick(this)"}},[_c('a',{attrs:{"href":"/tp/tutorials/TracingCode.html"}},[_v("Tracing code")])])]),_v(" "),_c('li',[_c('div',{staticClass:"site-nav-default-list-item site-nav-list-item-1",attrs:{"onclick":"handleSiteNavClick(this)"}},[_c('a',{attrs:{"href":"/tp/tutorials/AddRemark.html"}},[_v("Adding a command")])])]),_v(" "),_c('li',[_c('div',{staticClass:"site-nav-default-list-item site-nav-list-item-1",attrs:{"onclick":"handleSiteNavClick(this)"}},[_c('a',{attrs:{"href":"/tp/tutorials/RemovingFields.html"}},[_v("Removing Fields")])])])])]),_v(" "),_c('li',[_c('div',{staticClass:"site-nav-default-list-item site-nav-list-item-0",attrs:{"onclick":"handleSiteNavClick(this)"}},[_c('a',{attrs:{"href":"/tp/AboutUs.html"}},[_v("About Us")])])])])],1)],1)]),_v(" "),_c('div',{attrs:{"id":"content-wrapper"}},[_m(0),_v(" "),_m(1),_v(" "),_c('div',{pre:true,attrs:{"class":"page-nav-print d-none d-print-block"}}),_v(" "),_c('hr'),_v(" "),_m(2),_v(" "),_m(3),_v(" "),_c('hr'),_v(" "),_m(4),_v(" "),_c('box',{attrs:{"type":"info","seamless":""}},[_c('p',[_c('strong',[_v("Notes about the command format:")]),_c('br')]),_v(" "),_c('ul',[_c('li',[_c('p',[_v("Words in "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("UPPER_CASE")]),_v(" are the parameters to be supplied by the user."),_c('br'),_v("\ne.g. in "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("add n/NAME")]),_v(", "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("NAME")]),_v(" is a parameter which can be used as "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("add n/John Doe")]),_v(".")])]),_v(" "),_c('li',[_c('p',[_v("Items in square brackets are optional."),_c('br'),_v("\ne.g "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("n/NAME [t/TAG]")]),_v(" can be used as "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("n/John Doe t/friend")]),_v(" or as "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("n/John Doe")]),_v(".")])]),_v(" "),_c('li',[_c('p',[_v("Items with "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("…")]),_v("​ after them can be used multiple times including zero times."),_c('br'),_v("\ne.g. "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("[t/TAG]…​")]),_v(" can be used as "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}}),_v(" (i.e. 0 times), "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("t/friend")]),_v(", "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("t/friend t/family")]),_v(" etc.")])]),_v(" "),_c('li',[_c('p',[_v("Parameters can be in any order."),_c('br'),_v("\ne.g. if the command specifies "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("n/NAME p/PHONE_NUMBER")]),_v(", "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("p/PHONE_NUMBER n/NAME")]),_v(" is also acceptable.")])]),_v(" "),_c('li',[_c('p',[_v("Extraneous parameters for commands that do not take in parameters (such as "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("help")]),_v(", "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("list")]),_v(", "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("exit")]),_v(" and "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("clear")]),_v(") will be ignored."),_c('br'),_v("\ne.g. if the command specifies "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("help 123")]),_v(", it will be interpreted as "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("help")]),_v(".")])]),_v(" "),_c('li',[_c('p',[_v("If you are using a PDF version of this document, be careful when copying and pasting commands that span multiple lines as space characters surrounding line-breaks may be omitted when copied over to the application.")])])])]),_v(" "),_m(5),_v(" "),_c('p',[_v("Shows a message explaning how to access the help page.")]),_v(" "),_m(6),_v(" "),_m(7),_v(" "),_m(8),_v(" "),_c('p',[_v("Adds a person to the address book.")]),_v(" "),_m(9),_v(" "),_c('box',{attrs:{"type":"tip","seamless":""}},[_c('p',[_c('strong',[_v("Tip:")]),_v(" A person can have any number of tags (including 0)")])]),_v(" "),_c('p',[_v("Examples:")]),_v(" "),_m(10),_v(" "),_m(11),_v(" "),_c('p',[_v("Shows a list of all persons in the address book.")]),_v(" "),_m(12),_v(" "),_m(13),_v(" "),_c('p',[_v("Edits an existing person in the address book.")]),_v(" "),_m(14),_v(" "),_m(15),_v(" "),_c('p',[_v("Examples:")]),_v(" "),_m(16),_v(" "),_m(17),_v(" "),_c('p',[_v("Finds persons whose names contain any of the given keywords.")]),_v(" "),_m(18),_v(" "),_m(19),_v(" "),_c('p',[_v("Examples:")]),_v(" "),_m(20),_v(" "),_m(21),_v(" "),_c('p',[_v("Deletes the specified person from the address book.")]),_v(" "),_m(22),_v(" "),_m(23),_v(" "),_c('p',[_v("Examples:")]),_v(" "),_m(24),_v(" "),_m(25),_v(" "),_c('p',[_v("Clears all entries from the address book.")]),_v(" "),_m(26),_v(" "),_m(27),_v(" "),_c('p',[_v("Exits the program.")]),_v(" "),_m(28),_v(" "),_m(29),_v(" "),_c('p',[_v("CampusConnect data are saved in the hard disk automatically after any command that changes the data. There is no need to save manually.")]),_v(" "),_m(30),_v(" "),_m(31),_v(" "),_c('box',{attrs:{"type":"warning","seamless":""}},[_c('p',[_c('strong',[_v("Caution:")]),_v("\nIf your changes to the data file makes its format invalid, CampusConnect will discard all data and start with an empty data file at the next run. Hence, it is recommended to take a backup of the file before editing it."),_c('br'),_v("\nFurthermore, certain edits can cause the CampusConnect to behave in unexpected ways (e.g., if a value entered is outside the acceptable range). Therefore, edit the data file only if you are confident that you can update it correctly.")])]),_v(" "),_m(32),_v(" "),_m(33),_v(" "),_c('hr'),_v(" "),_m(34),_v(" "),_m(35),_v(" "),_c('hr'),_v(" "),_m(36),_v(" "),_m(37),_v(" "),_c('hr'),_v(" "),_m(38),_v(" "),_m(39)],1),_v(" "),_c('overlay-source',{attrs:{"id":"page-nav","tag-name":"nav","to":"page-nav"}},[_c('div',{staticClass:"nav-component slim-scroll"},[_c('overlay-source',{staticClass:"nav nav-pills flex-column my-0 small no-flex-wrap",attrs:{"id":"mb-page-nav","tag-name":"nav","to":"mb-page-nav"}},[_c('a',{pre:true,attrs:{"class":"nav-link py-1","href":"#campusconnect-user-guide"}},[_v("CampusConnect User Guide‎")]),_v(" "),_c('nav',{staticClass:"nav nav-pills flex-column my-0 nested no-flex-wrap"},[_c('a',{pre:true,attrs:{"class":"nav-link py-1","href":"#quick-start"}},[_v("Quick start‎")]),_v(" "),_c('a',{pre:true,attrs:{"class":"nav-link py-1","href":"#features"}},[_v("Features‎")]),_v(" "),_c('nav',{staticClass:"nav nav-pills flex-column my-0 nested no-flex-wrap"},[_c('a',{pre:true,attrs:{"class":"nav-link py-1","href":"#viewing-help-help"}},[_v("Viewing help : help‎")]),_v(" "),_c('a',{pre:true,attrs:{"class":"nav-link py-1","href":"#adding-a-person-add"}},[_v("Adding a person: add‎")]),_v(" "),_c('a',{pre:true,attrs:{"class":"nav-link py-1","href":"#listing-all-persons-list"}},[_v("Listing all persons : list‎")]),_v(" "),_c('a',{pre:true,attrs:{"class":"nav-link py-1","href":"#editing-a-person-edit"}},[_v("Editing a person : edit‎")]),_v(" "),_c('a',{pre:true,attrs:{"class":"nav-link py-1","href":"#locating-persons-by-name-find"}},[_v("Locating persons by name: find‎")]),_v(" "),_c('a',{pre:true,attrs:{"class":"nav-link py-1","href":"#deleting-a-person-delete"}},[_v("Deleting a person : delete‎")]),_v(" "),_c('a',{pre:true,attrs:{"class":"nav-link py-1","href":"#clearing-all-entries-clear"}},[_v("Clearing all entries : clear‎")]),_v(" "),_c('a',{pre:true,attrs:{"class":"nav-link py-1","href":"#exiting-the-program-exit"}},[_v("Exiting the program : exit‎")]),_v(" "),_c('a',{pre:true,attrs:{"class":"nav-link py-1","href":"#saving-the-data"}},[_v("Saving the data‎")]),_v(" "),_c('a',{pre:true,attrs:{"class":"nav-link py-1","href":"#editing-the-data-file"}},[_v("Editing the data file‎")]),_v(" "),_c('a',{pre:true,attrs:{"class":"nav-link py-1","href":"#archiving-data-files-coming-in-v2-0"}},[_v("Archiving data files [coming in v2.0]‎")])]),_v(" "),_c('a',{pre:true,attrs:{"class":"nav-link py-1","href":"#faq"}},[_v("FAQ‎")]),_v(" "),_c('a',{pre:true,attrs:{"class":"nav-link py-1","href":"#known-issues"}},[_v("Known issues‎")]),_v(" "),_c('a',{pre:true,attrs:{"class":"nav-link py-1","href":"#command-summary"}},[_v("Command summary‎")])])])],1)]),_v(" "),_c('scroll-top-button')],1),_v(" "),_m(40)])} }; var pageVueStaticRenderFns = [function anonymous( ) { -with(this){return _c('h1',{attrs:{"id":"ab-3-user-guide"}},[_v("AB-3 User Guide"),_c('a',{staticClass:"fa fa-anchor",attrs:{"href":"#ab-3-user-guide","onclick":"event.stopPropagation()"}})])} +with(this){return _c('h1',{attrs:{"id":"campusconnect-user-guide"}},[_v("CampusConnect User Guide"),_c('a',{staticClass:"fa fa-anchor",attrs:{"href":"#campusconnect-user-guide","onclick":"event.stopPropagation()"}})])} },function anonymous( ) { -with(this){return _c('p',[_v("AddressBook Level 3 (AB3) is a "),_c('strong',[_v("desktop app for managing contacts, optimized for use via a Line Interface")]),_v(" (CLI) while still having the benefits of a Graphical User Interface (GUI). If you can type fast, AB3 can get your contact management tasks done faster than traditional GUI apps.")])} +with(this){return _c('p',[_v("CampusConnect(CC) is a "),_c('strong',[_v("desktop app for managing contacts, optimized for use via a Line Interface")]),_v(" (CLI) while still having the benefits of a Graphical User Interface (GUI). If you can type fast, AB3 can get your contact management tasks done faster than traditional GUI apps.")])} },function anonymous( ) { with(this){return _c('h2',{attrs:{"id":"quick-start"}},[_v("Quick start"),_c('a',{staticClass:"fa fa-anchor",attrs:{"href":"#quick-start","onclick":"event.stopPropagation()"}})])} },function anonymous( ) { -with(this){return _c('ol',[_c('li',[_c('p',[_v("Ensure you have Java "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("17")]),_v(" or above installed in your Computer.")])]),_v(" "),_c('li',[_c('p',[_v("Download the latest "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v(".jar")]),_v(" file from "),_c('a',{attrs:{"href":"https://github.com/se-edu/addressbook-level3/releases"}},[_v("here")]),_v(".")])]),_v(" "),_c('li',[_c('p',[_v("Copy the file to the folder you want to use as the "),_c('em',[_v("home folder")]),_v(" for your AddressBook.")])]),_v(" "),_c('li',[_c('p',[_v("Open a command terminal, "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("cd")]),_v(" into the folder you put the jar file in, and use the "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("java -jar addressbook.jar")]),_v(" command to run the application."),_c('br'),_v("\nA GUI similar to the below should appear in a few seconds. Note how the app contains some sample data."),_c('br'),_v(" "),_c('a',{attrs:{"href":"/tp/images/Ui.png","target":"_self"}},[_c('img',{staticClass:"img-fluid",attrs:{"src":"/tp/images/Ui.png","alt":"Ui"}})])])]),_v(" "),_c('li',[_c('p',[_v("Type the command in the command box and press Enter to execute it. e.g. typing "),_c('strong',[_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("help")])]),_v(" and pressing Enter will open the help window."),_c('br'),_v("\nSome example commands you can try:")]),_v(" "),_c('ul',[_c('li',[_c('p',[_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("list")]),_v(" : Lists all contacts.")])]),_v(" "),_c('li',[_c('p',[_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("add n/John Doe p/98765432 e/johnd@example.com a/John street, block 123, #01-01")]),_v(" : Adds a contact named "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("John Doe")]),_v(" to the Address Book.")])]),_v(" "),_c('li',[_c('p',[_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("delete 3")]),_v(" : Deletes the 3rd contact shown in the current list.")])]),_v(" "),_c('li',[_c('p',[_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("clear")]),_v(" : Deletes all contacts.")])]),_v(" "),_c('li',[_c('p',[_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("exit")]),_v(" : Exits the app.")])])])]),_v(" "),_c('li',[_c('p',[_v("Refer to the "),_c('a',{attrs:{"href":"#features"}},[_v("Features")]),_v(" below for details of each command.")])])])} +with(this){return _c('ol',[_c('li',[_c('p',[_v("Ensure you have Java "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("17")]),_v(" or above installed in your Computer.")])]),_v(" "),_c('li',[_c('p',[_v("Download the latest "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v(".jar")]),_v(" file from "),_c('a',{attrs:{"href":"https://github.com/se-edu/CampusConnect/releases"}},[_v("here")]),_v(".")])]),_v(" "),_c('li',[_c('p',[_v("Copy the file to the folder you want to use as the "),_c('em',[_v("home folder")]),_v(" for your CampusConnect.")])]),_v(" "),_c('li',[_c('p',[_v("Open a command terminal, "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("cd")]),_v(" into the folder you put the jar file in, and use the "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("java -jar CampusConnect.jar")]),_v(" command to run the application."),_c('br'),_v("\nA GUI similar to the below should appear in a few seconds. Note how the app contains some sample data."),_c('br'),_v(" "),_c('a',{attrs:{"href":"/tp/images/Ui.png","target":"_self"}},[_c('img',{staticClass:"img-fluid",attrs:{"src":"/tp/images/Ui.png","alt":"Ui"}})])])]),_v(" "),_c('li',[_c('p',[_v("Type the command in the command box and press Enter to execute it. e.g. typing "),_c('strong',[_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("help")])]),_v(" and pressing Enter will open the help window."),_c('br'),_v("\nSome example commands you can try:")]),_v(" "),_c('ul',[_c('li',[_c('p',[_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("list")]),_v(" : Lists all contacts.")])]),_v(" "),_c('li',[_c('p',[_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("add n/John Doe p/98765432 e/johnd@example.com a/John street, block 123, #01-01")]),_v(" : Adds a contact named "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("John Doe")]),_v(" to the Address Book.")])]),_v(" "),_c('li',[_c('p',[_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("delete 3")]),_v(" : Deletes the 3rd contact shown in the current list.")])]),_v(" "),_c('li',[_c('p',[_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("clear")]),_v(" : Deletes all contacts.")])]),_v(" "),_c('li',[_c('p',[_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("exit")]),_v(" : Exits the app.")])])])]),_v(" "),_c('li',[_c('p',[_v("Refer to the "),_c('a',{attrs:{"href":"#features"}},[_v("Features")]),_v(" below for details of each command.")])])])} },function anonymous( ) { with(this){return _c('h2',{attrs:{"id":"features"}},[_v("Features"),_c('a',{staticClass:"fa fa-anchor",attrs:{"href":"#features","onclick":"event.stopPropagation()"}})])} @@ -98,7 +98,7 @@ with(this){return _c('h3',{attrs:{"id":"saving-the-data"}},[_v("Saving the data" with(this){return _c('h3',{attrs:{"id":"editing-the-data-file"}},[_v("Editing the data file"),_c('a',{staticClass:"fa fa-anchor",attrs:{"href":"#editing-the-data-file","onclick":"event.stopPropagation()"}})])} },function anonymous( ) { -with(this){return _c('p',[_v("AddressBook data are saved automatically as a JSON file "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("[JAR file location]/data/addressbook.json")]),_v(". Advanced users are welcome to update data directly by editing that data file.")])} +with(this){return _c('p',[_v("CampusConnect data are saved automatically as a JSON file "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("[JAR file location]/data/CampusConnect.json")]),_v(". Advanced users are welcome to update data directly by editing that data file.")])} },function anonymous( ) { with(this){return _c('h3',{attrs:{"id":"archiving-data-files-coming-in-v2-0"}},[_v("Archiving data files "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("[coming in v2.0]")]),_c('a',{staticClass:"fa fa-anchor",attrs:{"href":"#archiving-data-files-coming-in-v2-0","onclick":"event.stopPropagation()"}})])} @@ -110,7 +110,7 @@ with(this){return _c('p',[_c('em',[_v("Details coming soon ...")])])} with(this){return _c('h2',{attrs:{"id":"faq"}},[_v("FAQ"),_c('a',{staticClass:"fa fa-anchor",attrs:{"href":"#faq","onclick":"event.stopPropagation()"}})])} },function anonymous( ) { -with(this){return _c('p',[_c('strong',[_v("Q")]),_v(": How do I transfer my data to another Computer?"),_c('br'),_v(" "),_c('strong',[_v("A")]),_v(": Install the app in the other computer and overwrite the empty data file it creates with the file that contains the data of your previous AddressBook home folder.")])} +with(this){return _c('p',[_c('strong',[_v("Q")]),_v(": How do I transfer my data to another Computer?"),_c('br'),_v(" "),_c('strong',[_v("A")]),_v(": Install the app in the other computer and overwrite the empty data file it creates with the file that contains the data of your previous CampusConnect home folder.")])} },function anonymous( ) { with(this){return _c('h2',{attrs:{"id":"known-issues"}},[_v("Known issues"),_c('a',{staticClass:"fa fa-anchor",attrs:{"href":"#known-issues","onclick":"event.stopPropagation()"}})])} @@ -125,6 +125,6 @@ with(this){return _c('h2',{attrs:{"id":"command-summary"}},[_v("Command summary" with(this){return _c('div',{staticClass:"table-responsive"},[_c('table',{staticClass:"markbind-table table table-bordered table-striped"},[_c('thead',[_c('tr',[_c('th',[_v("Action")]),_v(" "),_c('th',[_v("Format, Examples")])])]),_v(" "),_c('tbody',[_c('tr',[_c('td',[_c('strong',[_v("Add")])]),_v(" "),_c('td',[_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("add n/NAME p/PHONE_NUMBER e/EMAIL a/ADDRESS [t/TAG]…​")]),_v(" "),_c('br'),_v(" e.g., "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("add n/James Ho p/22224444 e/jamesho@example.com a/123, Clementi Rd, 1234665 t/friend t/colleague")])])]),_v(" "),_c('tr',[_c('td',[_c('strong',[_v("Clear")])]),_v(" "),_c('td',[_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("clear")])])]),_v(" "),_c('tr',[_c('td',[_c('strong',[_v("Delete")])]),_v(" "),_c('td',[_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("delete INDEX")]),_c('br'),_v(" e.g., "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("delete 3")])])]),_v(" "),_c('tr',[_c('td',[_c('strong',[_v("Edit")])]),_v(" "),_c('td',[_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("edit INDEX [n/NAME] [p/PHONE_NUMBER] [e/EMAIL] [a/ADDRESS] [t/TAG]…​")]),_c('br'),_v(" e.g.,"),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("edit 2 n/James Lee e/jameslee@example.com")])])]),_v(" "),_c('tr',[_c('td',[_c('strong',[_v("Find")])]),_v(" "),_c('td',[_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("find KEYWORD [MORE_KEYWORDS]")]),_c('br'),_v(" e.g., "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("find James Jake")])])]),_v(" "),_c('tr',[_c('td',[_c('strong',[_v("List")])]),_v(" "),_c('td',[_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("list")])])]),_v(" "),_c('tr',[_c('td',[_c('strong',[_v("Help")])]),_v(" "),_c('td',[_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("help")])])])])])])} },function anonymous( ) { -with(this){return _c('footer',[_c('div',{staticClass:"text-center"},[_c('small',[_v("["),_c('span',[_c('strong',[_v("Powered by")])]),_v(" "),_c('img',{attrs:{"src":"https://markbind.org/favicon.ico","width":"30"}}),_v(" "),_c('a',{attrs:{"href":"https://markbind.org/"}},[_v("MarkBind 5.5.3")]),_v(", generated on Tue, 15 Oct 2024, 19:35:50 GMT+8]")])])])} +with(this){return _c('footer',[_c('div',{staticClass:"text-center"},[_c('small',[_v("["),_c('span',[_c('strong',[_v("Powered by")])]),_v(" "),_c('img',{attrs:{"src":"https://markbind.org/favicon.ico","width":"30"}}),_v(" "),_c('a',{attrs:{"href":"https://markbind.org/"}},[_v("MarkBind 5.5.3")]),_v(", generated on Tue, 15 Oct 2024, 23:08:02 GMT+8]")])])])} }]; \ No newline at end of file diff --git a/diagrams/ArchitectureSequenceDiagram.png b/diagrams/ArchitectureSequenceDiagram.png index 359eb6c23bfcc5d6328633fcc711e0c6bbfeb2f6..dda6553b1378bbcb509d6bef47943a83fb5ac3e6 100644 GIT binary patch literal 14581 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 diff --git a/diagrams/ArchitectureSequenceDiagram.puml b/diagrams/ArchitectureSequenceDiagram.puml index 48b6cc4333c..0ee4f7b76bc 100644 --- a/diagrams/ArchitectureSequenceDiagram.puml +++ b/diagrams/ArchitectureSequenceDiagram.puml @@ -20,7 +20,7 @@ activate model MODEL_COLOR model -[MODEL_COLOR]-> logic deactivate model -logic -[LOGIC_COLOR]> storage : saveAddressBook(addressBook) +logic -[LOGIC_COLOR]> storage : saveCampusConnect(campusConnect) activate storage STORAGE_COLOR storage -[STORAGE_COLOR]> storage : Save to file diff --git a/diagrams/BetterModelClassDiagram.png b/diagrams/BetterModelClassDiagram.png index 6b4dba2de4378e69ce889902742b38b05bcc4e53..ef69eec53b7755efe038d715674b91e58071f999 100644 GIT binary patch literal 13482 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 literal 13418 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 XGjrl-wD7^-5Fseasy;83HVOVeDQ`nV diff --git a/diagrams/BetterModelClassDiagram.puml b/diagrams/BetterModelClassDiagram.puml index 598474a5c82..eb630665c94 100644 --- a/diagrams/BetterModelClassDiagram.puml +++ b/diagrams/BetterModelClassDiagram.puml @@ -4,8 +4,8 @@ skinparam arrowThickness 1.1 skinparam arrowColor MODEL_COLOR skinparam classBackgroundColor MODEL_COLOR -AddressBook *-right-> "1" UniquePersonList -AddressBook *-right-> "1" UniqueTagList +CampusConnect *-right-> "1" UniquePersonList +CampusConnect *-right-> "1" UniqueTagList UniqueTagList -[hidden]down- UniquePersonList UniqueTagList -[hidden]down- UniquePersonList diff --git a/diagrams/CommitActivityDiagram.png b/diagrams/CommitActivityDiagram.png index cc95eaabda3dad4dffa145e7bbbeef5a0eceeb20..009f6893748b737c2693d37d3961550573fd155d 100644 GIT binary patch literal 16378 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 diff --git a/diagrams/CommitActivityDiagram.puml b/diagrams/CommitActivityDiagram.puml index 8c0892d6a70..3823313f3ae 100644 --- a/diagrams/CommitActivityDiagram.puml +++ b/diagrams/CommitActivityDiagram.puml @@ -8,10 +8,10 @@ start 'Since the beta syntax does not support placing the condition outside the 'diamond we place it as the true branch instead. -if () then ([command commits AddressBook]) +if () then ([command commits CampusConnect]) :Purge redundant states; - :Save AddressBook to - addressBookStateList; + :Save CampusConnect to + campusConnectStateList; else ([else]) endif stop diff --git a/diagrams/DeleteSequenceDiagram.png b/diagrams/DeleteSequenceDiagram.png index c80d0c7159137cdfabe5e219e455332350143e17..9d25755e93309b27cd37026d31059b1193b32cd4 100644 GIT binary patch literal 26759 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 %}MB( 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 LogicManager : execute("delete 1") activate LogicManager -LogicManager -> AddressBookParser : parseCommand("delete 1") -activate AddressBookParser +LogicManager -> CampusConnectParser : parseCommand("delete 1") +activate CampusConnectParser create DeleteCommandParser -AddressBookParser -> DeleteCommandParser +CampusConnectParser -> DeleteCommandParser activate DeleteCommandParser -DeleteCommandParser --> AddressBookParser +DeleteCommandParser --> CampusConnectParser deactivate DeleteCommandParser -AddressBookParser -> DeleteCommandParser : parse("1") +CampusConnectParser -> DeleteCommandParser : parse("1") activate DeleteCommandParser create DeleteCommand @@ -37,14 +37,14 @@ activate DeleteCommand DeleteCommand --> DeleteCommandParser : deactivate DeleteCommand -DeleteCommandParser --> AddressBookParser : d +DeleteCommandParser --> CampusConnectParser : d deactivate DeleteCommandParser 'Hidden arrow to position the destroy marker below the end of the activation bar. -DeleteCommandParser -[hidden]-> AddressBookParser +DeleteCommandParser -[hidden]-> CampusConnectParser destroy DeleteCommandParser -AddressBookParser --> LogicManager : d -deactivate AddressBookParser +CampusConnectParser --> LogicManager : d +deactivate CampusConnectParser LogicManager -> DeleteCommand : execute(m) activate DeleteCommand diff --git a/diagrams/ModelClassDiagram.png b/diagrams/ModelClassDiagram.png index 70fc3d654a10d863e6fca08ce5c45cb34786fb3b..4048f0ada48b2e05cfa7a135ba7c9c96bf987e23 100644 GIT binary patch literal 27402 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 literal 26947 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 -Class "<>\nReadOnlyAddressBook" as ReadOnlyAddressBook +Class "<>\nReadOnlyCampusConnect" as ReadOnlyCampusConnect Class "<>\nReadOnlyUserPrefs" as ReadOnlyUserPrefs Class "<>\nModel" as Model -Class AddressBook +Class CampusConnect Class ModelManager Class UserPrefs @@ -26,16 +26,16 @@ Class I #FFFFFF Class HiddenOutside #FFFFFF HiddenOutside ..> Model -AddressBook .up.|> ReadOnlyAddressBook +CampusConnect .up.|> ReadOnlyCampusConnect ModelManager .up.|> Model Model .right.> ReadOnlyUserPrefs -Model .left.> ReadOnlyAddressBook -ModelManager -left-> "1" AddressBook +Model .left.> ReadOnlyCampusConnect +ModelManager -left-> "1" CampusConnect ModelManager -right-> "1" UserPrefs UserPrefs .up.|> ReadOnlyUserPrefs -AddressBook *--> "1" UniquePersonList +CampusConnect *--> "1" UniquePersonList UniquePersonList --> "~* all" Person Person *--> Name Person *--> Phone diff --git a/diagrams/ParserClasses.png b/diagrams/ParserClasses.png index 5fb2d23b992ec9ff33b2dd43905ea1edade0aa43..553d2a3eedf3c1e696770abf2c0c96329b8c9562 100644 GIT binary patch literal 28869 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 LmMW5b`S$+-_gHko literal 28747 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 diff --git a/diagrams/ParserClasses.puml b/diagrams/ParserClasses.puml index ce4c5ce8c8d..4e756fe94c0 100644 --- a/diagrams/ParserClasses.puml +++ b/diagrams/ParserClasses.puml @@ -9,7 +9,7 @@ Class XYZCommand package "Parser classes"{ Class "<>\nParser" as Parser -Class AddressBookParser +Class CampusConnectParser Class XYZCommandParser Class CliSyntax Class ParserUtil @@ -19,12 +19,12 @@ Class Prefix } Class HiddenOutside #FFFFFF -HiddenOutside ..> AddressBookParser +HiddenOutside ..> CampusConnectParser -AddressBookParser .down.> XYZCommandParser: <> +CampusConnectParser .down.> XYZCommandParser: <> XYZCommandParser ..> XYZCommand : <> -AddressBookParser ..> Command : <> +CampusConnectParser ..> Command : <> XYZCommandParser .up.|> Parser XYZCommandParser ..> ArgumentMultimap XYZCommandParser ..> ArgumentTokenizer diff --git a/diagrams/StorageClassDiagram.png b/diagrams/StorageClassDiagram.png index 8fd62e1309ce4e7592bfb25267e43965ba14e899..2b6e22ba41bd35f63e9ec8a3debd11dc7ec58bc3 100644 GIT binary patch literal 29391 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 diff --git a/diagrams/StorageClassDiagram.puml b/diagrams/StorageClassDiagram.puml index a821e06458c..052c052b858 100644 --- a/diagrams/StorageClassDiagram.puml +++ b/diagrams/StorageClassDiagram.puml @@ -14,10 +14,10 @@ Class JsonUserPrefsStorage Class "<>\nStorage" as Storage Class StorageManager -package "AddressBook Storage" #F4F6F6{ -Class "<>\nAddressBookStorage" as AddressBookStorage -Class JsonAddressBookStorage -Class JsonSerializableAddressBook +package "CampusConnect Storage" #F4F6F6{ +Class "<>\nCampusConnectStorage" as CampusConnectStorage +Class JsonCampusConnectStorage +Class JsonSerializableCampusConnect Class JsonAdaptedPerson Class JsonAdaptedTag } @@ -29,15 +29,15 @@ HiddenOutside ..> Storage StorageManager .up.|> Storage StorageManager -up-> "1" UserPrefsStorage -StorageManager -up-> "1" AddressBookStorage +StorageManager -up-> "1" CampusConnectStorage Storage -left-|> UserPrefsStorage -Storage -right-|> AddressBookStorage +Storage -right-|> CampusConnectStorage JsonUserPrefsStorage .up.|> UserPrefsStorage -JsonAddressBookStorage .up.|> AddressBookStorage -JsonAddressBookStorage ..> JsonSerializableAddressBook -JsonSerializableAddressBook --> "*" JsonAdaptedPerson +JsonCampusConnectStorage .up.|> CampusConnectStorage +JsonCampusConnectStorage ..> JsonSerializableCampusConnect +JsonSerializableCampusConnect --> "*" JsonAdaptedPerson JsonAdaptedPerson --> "*" JsonAdaptedTag @enduml diff --git a/diagrams/UndoRedoState0.png b/diagrams/UndoRedoState0.png index e347c509c4c594c21d51309239ab3d3e9e9bdb92..e62a327786612e58996cf7cb3a19d5279425c9ee 100644 GIT binary patch literal 6178 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 literal 6122 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 ko$)5ab0:AddressBook" - class State2 as "ab1:AddressBook" - class State3 as "ab2:AddressBook" + class State1 as "ab0:CampusConnect" + class State2 as "ab1:CampusConnect" + class State3 as "ab2:CampusConnect" } State1 -[hidden]right-> State2 State2 -[hidden]right-> State3 diff --git a/diagrams/UndoRedoState1.png b/diagrams/UndoRedoState1.png index 906089b51a7cbce863ae3426587be078c74799be..20dfd2e66ef90ce98c1297f68d883bc0ab68daad 100644 GIT binary patch literal 7119 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 RgM&JVx{8i+$vvAt{tZ(FHiQ5G literal 6926 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 diff --git a/diagrams/UndoRedoState1.puml b/diagrams/UndoRedoState1.puml index 5a41e9e1651..560177304f8 100644 --- a/diagrams/UndoRedoState1.puml +++ b/diagrams/UndoRedoState1.puml @@ -7,9 +7,9 @@ skinparam ClassBackgroundColor #FFFFAA title After command "delete 5" package States <> { - class State1 as "ab0:AddressBook" - class State2 as "ab1:AddressBook" - class State3 as "ab2:AddressBook" + class State1 as "ab0:CampusConnect" + class State2 as "ab1:CampusConnect" + class State3 as "ab2:CampusConnect" } State1 -[hidden]right-> State2 diff --git a/diagrams/UndoRedoState2.png b/diagrams/UndoRedoState2.png index dfee540b4c93f14df2e532835929d427ead5213b..3cbdadbd57fe0b08295ee4697859414437bbbc95 100644 GIT binary patch literal 7884 zcmeHscT|(#wr$h{s7RBhR0V!i0Z}>vN)?peyV85Fp{f)WA<_k;w?HUDC=wu1R63y~ zbO9-$L@ClcZ{s=VzI*SuW887ixbMH0F(Bm2=G)(1d#*L-n){WurYgl{rppirghK71 zk}d>tUK9M?cJVy;jZl3j2Z699sVP0s542pFBsZrYLX&yU#zhEQzP`+1t;Y8fMmNn< zjXk*QFxeB-maABb%wwI0_!&RBPh#0r5J zv*c5POO!ff5C}sI`~n0LtB5}biTHMt2!VW>rS^kBo_M{K2E!%)<8WzPTU#X+6%=@V ze6p}Kr>k6E!MTyuZN~gQByhtJ5_dc1hY$$~Np^O&uTNgMlZhh*Ie9^G73L(PVphB` zYu=nsBT>$KgMv^YmLck-8$-$J8nC12;maiEOvlD1XZ`i1+eH1VmhB`en1?|sArk_B ziuzrLD8YUV%PCs3sa-Bq_oD|uW>6nfk zf1@dySj-8}e*5>_Ro=W6XZf~CKa>zuckG$p13*EUc=Uw zYvs0(kdUBY+_sTvka|*o`#_$X*oyg7myJfEQ9@FZB5O@eO)_?fdBRmO`bu5~9~N*w+qZ8?+#30mzF%e!^`HZHAK2Obg~^*;pZP*(<2GKKrXd>`w zD6p%>q^_Ay@juaswox?gR(4VdG&ikib)vXRvW^_$Jj_e_O^g%^!Hrkd5L zN&)Vn!5h4prDn#)*Uaq92n!1}2I_XEMGi{!(oa4?Ol1StZ2%iFL@uOh7 zFVk~#j}dh)C@`?rdFZwKZhcv%oS+`Xx0FHEk85xbMc)ydlzS2q66n)7W{EwGzqwLv zDe;Pry88MQa-&$02GGlS24%Jg*G1R$t}^di^<@nXVPSGnp&-FV(=;v0FIZ`&afMR<64 zaKzbfu}=G00aJN|SF}7e++htUQmS0m1?r>j)+q8ZH|6zVGY`H{w2IF;aiS zj5qp}bY}?{u8(?PPYy;fH3lquqDJv_>$-&|6BKksjXA~)1g#{btSsEFpP zCpH&4-*skspqF*GpWQuf@|;m9%KpD0Rf%U&lSuaaIeckbUvaxYCC(br8papOkB9oST}R`$JpP)5qt=G=ZFs?bb#?H_x3egH+)-2D9kj3T7$YkT|J zXtko#RevFq6wynFwA2WtLtYEtljlxSZ>`^gkxb{~@pbr{QBT6sKzZy`51TKpKL8 zwtG0`)Y&MB;2qbl5_$o{e8M+A_gx*?kTZGY@R=Vo;RH>Xg(qRu7ka;?T7EW7aPCzWXbH} zOZEOi9K(P(469a~|8UlB*zrN=zauRtC#Ukd@Y9o8lwCIiH20p*!eeJ={?jo&$T|=> z*ohBM6}7dgAMq(r8PB!DFuu!IT?|SXt7>WzO~16Zj+UYBMzIXNm-KpGG3f482dKn# zXk;YKa9M2?)TE&aNQCT5=?K$Cuer8Li>Ab+q~qgb6Z5~gxof!npoGOm*!8>7VY%iO z7A69MlEm+D9ZtheA0Ho^3Lq7pis1#t#r@mfTwml0@XoKhefPeEnRICHy~={*UIzb< zrK6|Ung1IpY0VHBTj2eN!aJolK|xZ2?DApnVG@3e=Pr5W(oHX!+1RY?OSTOKHkpRxw)3+=GNBM zRADQuM5#=YFnaGfB@H$8eHo8w^f6FkRP1s+8Q$LB+>hT;v$1Ig1L*g9gda}CG79rE z|C#7NrPY6@ZvQui6Xl3q-Q5no88r0t3+EYTi9{ym2|gYk)#j<~3&@Vd+p)Pj?=zMC z*!_TzRM%WhOKZT}PefQ3C1#&kKYq;f8#+SO!+~Jv;Yc25-;K4HkiqnEOjUrN)lDz9yMGyN+A@o#l_*3#1&d^_F>ot(&pg-t2Ov>hL> zoffQqNn@3GwEpyxAGX5Q=Nw({sN&4z^&z^-0<;F%2Zk}B?9CyU3vX>VP!bm>&&>w|jwt5_(?8?o8oHDWP zhc^ZOK4uWiIQb3hJKE@u(RaKlT5Iy)GZ`_vy!qsSHzO)1RJ`eywFNf=%UQ~t&9XGD)!EZphGrx+x15x0E2 z(XIUZHx>GKo3Won(Y2%3qk^RD$jJl{LDD!>niU)13~F?=p;fS3A&Ms@OU5ep)uj>v zE_}Cx?H7hQFyqjGOv`)w-6j9nwrnx~yC?KIjAxgfBt~vQmy4br*?bR}79^*1&tGkO z{k!TV>RNb@e^vaHiLY=z(8u(Ad|G?^K@D!qqCN{r^z<$%)s+^9>{&7~hkJqbE{us8 z2k&dtTwNy=V@_hHFI5a4Qre}+t6N)-^k!Pk%aAL}MYvCLI6=^8%S)HCG_%d$r|(~G z@p8d;2;BG--WoX-6@}Qt5(mnxgsprQdQRi74aoAsMOa&mswgMwTY88tESspG@T+)!oOX+Sz+dYs|3B9lDs!9&kjL#3I0l5rR|n9B0GC^X66BV$n7|J1~I>t zaqPsz+-EYyWw9EI-+KkIBTZrJWOmA7G(#iGyhPT^DPop1`;gnQt1%`@MY%sNpvpri z!jqY*UWP#4DQ`=}t}5dPewwr#j13No?eDL}u};Khk0w{^;?SW!rA}*8@{v&_gNNk9 z^J{B91a&4%Qet9lTU_XBSk|d2<&~|pkb0*i${%?#rgnBMni}%QwcZ=^C%u`6%Bl@h zbqEwUUny*GY}Ik7Dy=Fn(6V`Nd3IJGDn&-w{QE1dNV%olf|guRso&3t$)?4A!!2P! zT(ge9CTF2KQ``P#c=60Y-~Bj^v9Zle@okF+chW2sDDJ*I+m_zf49B(x*Rfy7K6^df zE84X;Oxy4piS18k*eitzHNNz(ifu{g<|i0^NEDn07Vbhjm?;8*}5Isx4cdn<^; z!dMY(GewWqHaUIqN*-4w+>f-1_#}2Upr;+F%UO)mg>>6LQF=kbqp~PnQ7i|#Bft@{ z{Q4pZvcumB%K^pa28+n1mu4C#SkdG?VHjJTxmC6c7vMKNKH5BGprQFiAk64SVax9f zcck57#i8|sKZxPy2 z5i;CR4pW}Lpq=CI7gzHnpq4oETkM@OmL^^Z17c5Z#k;7Wn3;92(HOoMd-S@4ELU!Y z$Yl2!Ai*KCsOr$u$LKhFzSOmVP~DPN;i)ZHbgEB#UO;}dZT3}TL)Rbj&f83Ivo zP>U-VxSZKf!r+WPAYvE=GbEwDS{WRVQXku=Y=|IA(!A~GL0IQkR&-2JDvowhJLciI zZYRGxvHF~h0{a{oj*W8{v;Go`R}pZ1Zlcc z?wn)oJLRj}Y<^oIJKe(U{D|w(`lBSrFx>He`>ebu zwfMk>x8r8$;lkyL@+;TY*NZj$xusjC%gc|9;doHV40(_*g^5X=bo=xPRQE@f{{CFs zd6o79gGEUbb>w+>`__8h0T}inks4fJWw9n)I%_&3C4Gu?I>|#@;?-x7XWyO8-PiNe&Xmv%#cVkaasR zKvy@1obd$c6V>3IqnpwwF$^s#aH0XTvDt@kL=d`9E%x=txmh=Pa+;M6OA2_~XT#}x zs9;qIqGwegW(spkF@7_vt*6I`lrrR<*uaTdowMePX79gN<~zS_#lwbhed5PgMi1#` zEvYSI|3FGXCx^waXdWQt#$r>3Hu>-*L|?xf>9BH?8XGJ%gh)Kw zv5!CACT>S^np+dFe=g*mNH=#Rk z@`FCDMOL~fD3pN8cmBe$YJ7-(pv{tFkN(M4i52F@BM%3>)jDDK)5yaNcs~`X2A`Ex zm3?mr83nO9c$cNfX>);b*^MWqxQ$8m=5#UvYN1C*PC-fflk*Ub|J+4)-}n z?&S`Zij(IsCbg%*XZs-GYz36xp#QRL(cjfsoSCsS+)04i^4bfhq_E?@(N_f=f4WuU z{P~tbX{eVq!%!%mf>~TrsxfEX!IPJPcX?U3?W^zAe;ZYX@m|v24!=D<{_T|sxS^4y zrJT!fxRP?67kFGhzqq)SN{n(xj zC6*dim3;0InJ5X?g2FZjQm*|6MqLA$_UaIm|E2|I>X zU)Sf02CeDsBw%2Ib{`3kjg4iN^voT-@Xs%b9;FQmqO34sw^l$ihYmjttHy-_%?){C z%_`#`^6~N{9Q3%Xw6sad$z1-ZwKGlJ!+-Z~(rTZMjt&_WTVYgrc{zBzI@hrc_S3zX z(e0BzQzCeBLhf*IJom=>FRExbF)}dhfR6sP#hS<23iSAI-2#H1vs;QepkN9U9`5Ta zT4xy0^5_1KoxZ)MSI3U6qIL9S>-Z57XGwsNHw8oh_w)CAnL^(vl`I3gt2+Hqg zSC{%(Z+qo}&SD2>H(I}Z*=IV`87WYOg`aHZSc8W68fiW@VQXuv+NOO&Y^T5-*sFYe ze4s0|2442H3;CLH*^AYO-0sWauhg4?4 znfv|1`8o=78Y_9BU%3L<`teFql?*JZs70bnp2Nnrf?K?VJ`;+uS^Wz}KG0u;cBKx!GB{ z!(YhR+1ZT^@5_xdUt%PFP_(ou%I|*n0XM{Ub^_G$2@1-B2@?N$WNmG2>=Ku`>Fa0z zezfr9njMs_K56e|)-^R90<*fY&6yaCqV^-B zWck6gg6HDma{c~M$E3HncV)PO*{m1~_DwHC$O1)2O`R*sw;ivY;SP!~@X~;5={(iE zKL?XP!D-1?7c)r+3kelNY`TfqM3K8h4W_sMTyRDk_*Tt+~QSj;r=A_IewH#79m ztnwPKb(#*@q&0kWt!d5V7hSz<=kBh=NH3;gOHhgv{z)^UkFuC;ysi zX##*FXB4unAod<^Eh|=4!{JN7_XXDD#Y>kG{w!2>Tg#OMgfM-;vQ2h zG&C~{3&pEnSfspdiTF|~*{!!}X^gVfzzK5!Kk5kRCa~qcepQ0f<8u^51O+w1ZmHVX zv&5A>_>kFv){Acv(G;J?DCwqn(B%aml!WWAP@?rM-R0j zkbj&5&utg}0sh{YqBMX&Sgt8Ol-2byTfvd(>ggSmt}_*fN&2&==Ul&`YIx~J;`Mjx zhCg{bs;}23#XXJwxd>Hq#Z;6gUpx^?6wA8WV@}acuA|UiotU18g(WI*c6P^}gW+$y zOFa?rauGdzMmd4l_4z!1XyjMgi){+%#qKV<@2(~L725!1zO1Xdorgf^DPzt+AlDgy zPNxrCk4PYp^wXcOURwj%rGG7ybvMw|yh26wV{Xn?@Clc*Ro=~!$y;L*BN3BsV>nEN z+*YuxrgK-n_3Fc*b^;!t^pN}`96quaHm>d+D;-aIeXlPK6 zrzmlk_V)IIf`d_6SuPVbS}x8KE30p{8VedO3X{=8?RGnPi_zoVQ&VZjcOKVhzEgIU ztLOZuZ&jK$z(wxfUEgSDGYC3*T_naS+V0fLw9qOiY)owIL+>np;|jt^FV;}p+P~Keq)Q@qiJLLGibEsxaneQ6lKr=u2l{_|F zXtE%spd-dV<=!WiwNwt_Y`8eI){!FN4fpXucf0-C+j#fx-TU|C4l=G!OQm|&Jj{(u zOn6AC%mhL0o(z}Qyt|Y3`KsMEHRjhMKL`0!BKuwRcO z8(mwwI8mQtHhs8 z%NXOTUD-@f(&al&L;3^AzZZiX#0}~sU1Qq1f+Q-5c+d&x3tFc2rAW-Ltf+Zk%+^TD z(mPP;irvgL%WX12h*S13k_`Fwn+#$wa-_)d=>Am2qa&YV#7|>P@T^X;o zgQg1(1wd}xx2o<|#&J5$ggB2^iR9LHW~d>b+pnZJD&FR^UeQYy_k5>)6ZbPL94iQm z)YtvFwA7_9a*&*ws-9omc)-Jdf){v+#4CN^D2=N5TVsC1l2;8Iw*;Dg3A#2r6cqA| zWV>zmMbUfuiByq#^>IbVoT&@PSEI%Ps0~Eq1{_X~kDl&Vj+oVXEL^oAyLZd^_Rymb zj7xcgW{9>wjh6$n>_NCTDs{Zlel6azj4cm!I3O-G16As++AkZg_GggtW6X^wD;?>` z-u5^xN(wvD>vGCh2Y~>9@|MO;Y$zLNCB1ob;aH@M*qfO{RIrKMpD_sjlvQ8)@^E}g z8}a(}Kg7}xKE4SExgMa}!sJ-s5R|F6!(ZKMiNrUDQiicV<;~>~6T=dhq*u`oDt3A+ zGp>3*Do|2WTfx+en@w<@Qz8<`{Q>_YF7~0L0|jfyE*C( zUGe-`OXe(Lqnvvu2O~|RdBk4wix-hY8H$mcNx-?`zP`bsp>%X~26}pNv9V|bR9ZS! z9Rw>2BDDPQM&KTgd-8WY&#r;dV=hu$a-pLD1?8io>&~pN5S)u2mKj}<$4P#i61^tGc)t) zz4*1!?xDzV<%*2aA1;t=)kL@HFK1{SW|$7k`=ps9yqq*Oqp(g9VPQHa6&3O+EiElQ z2+^&m3isbSEBi)7$l)$fP?(lkzim?=6!CB)JPA8spr+m$HgU}zcf>rX7#Ia6zv202 z1kD2BU!H0*ztsQp`buKi_E}2F>qi+vE7ED=o}D-xPIs5(>Ip$fYa6+c5^75kcnK}p zoh&8G}o?`B&K|@ z^|I|v7E_F1&Mhi3E44f?FC-*n)KI$tRxBkcNkUHl?B5ep6avxpsiUK#qV~lR9L^=? zwQQ)a9Inf1b4%G)Bs)yyxduus6^Pkov*u2_%s55!{ zzqb0YJS*|~8J|9l<`owU6b@j%R635hIGshSUT1if|Ji?k6C_Iv26J?DgbkAR-+M-@ z-M5B9p+NLS@lN#ggv&quYHY>E#-`8h=Iw3QpP6|}AJ$`OWo6f!ynnPi6^1zbKKR^5N4HO7^y1I|+eV%X3vH|P!lWRMar{~cG^;x&L$B@IchN~Ot>f)7@tgor5$;->j%(TXq*=%fV@Fhh> zf!fHx*w|P{N5|0c(Ky)sb?3jfc5rZzKp+6S`N81>Eoxl?je9d79T^F8a&kU+V3@q| zv`9l$RT$BOL?Tt<`KVxvZL>ckp;@qV=gy&f>pYk4+jPdBCB0mtsioE5@|GGzIeS-7 zoE#smy?l8wVdy^p$-&93G2;}aKTW2AVsCnPhe>dfTT7M5)CwdeY1}Ng>V@5=) ziErAXH{f5;5++~KOjV=e#786{TvcYYUd{gtqG~|~dr@9)BViAFftM$=FJ4SGhqN9Y zPMzet+>Gz+oX{`yAFJ4q^1h?ULKD{ZTtrT^^y4{c={W)+f{ZrPw6R_RSGFKuH-D-R zW>w+n_WJ$3mQ+lMaTT5ho7XIft}KPa(4r%N2Khq5oms|k!rRd1J-AiP8ucNL3f zQGUDX0`+%yzDGN)*w$MRhT^s};OIY9mV9VuwKnNX+jSCfu<)&=WvV+xLLH~dM-TV3 zIm)3(7G{v#)?MsQgtamn2kcmQ4wrFt^E(R|wZDy%6S;}=c0G5#QoGs- zuC=B^GZgse{JIGo_nXoAyi1DP>A3KNqi9|u-w~tF@UTW%P z>W_($kB(*;jq^BMVOhx1em}6qu`-3hq>L4qN$E@s8^75OFS=`PUXB=dE+|XC9wt7A z$5YYL*7)yxG=8vZKaNj=8(3JVz{4+I)M65qMwu3~%8APpE4mC4?xZkMZMYW`*2-)! zE%C#0Gt!Z)NBd5EMw^;PIjk>^&|&fcp9bUT;R(!e9vhpk0RL`FijYYptXNSn{lg=> zlW)P*Dk|pLcH*^5^8qMyk*PaZh5I}i61h_4&PS-n#Q}DSteL*(?z>&J|Awc zKl~kfA{NNsbg*b$yXRxSHD|Zrb}jN-_0WZWIbB`S+J&6F1JZnC_Q-Hyz`_7BRnzuU zSZ>MsQ`%2_@}z}1-;vU5SfSm1r5sN3aO2!yZR2{urTb$QuvWwIrCj5ppH>XCIAe7JNlZco4Q9kys+# zA9BX-#x?QqERFOjtFQLPbMu=w7_Zf3jE#9u;Bc7@8&|?tBcVkW`4ut-<8i!A{z5_) zG8G=zCZ)o!@S|lmuh1}lu5>&JEvBVwy2i%#HJ;nEpE_;Sux>I_&R~`j%4gLN{7_TF z$Ex<)!Spti zyLjcd2tP;B(ELHxcfYfp_0ZJECkngVq5el`sKi?S9uuV2a;$3Gsw-TY;Y~1W3x_I! za~Qoy%JxfevO;5ltKN^1-FTX^s-VJg{-lfEto;KuZd=o1tm5nE&xzUUM=7qBg{f@8 z%4$6h@Ol>MdeJ6DdrVsb{2LQma7dW(Q-JjDgng|`=2lzA3`8tqZ(x}Tu2+p$F0~+F zrA?g(+|)rq75g(`1}OM%k?RavLXv@;iB>e=U>fulyb@hR|CS7nr3CqmDTX&TL_%F_ zzokNWEkYiZmh#rBm}-Ws-p9{xz#XOA(Pfu*tzA^<*@XJ^lk2@_eF3(6Rk9h7(dubYnpuwAp zk+yYSJ<&Wv_@!dHF!M_yhQ*U&IN5XO_R4KKx7M0o{>+Vn-Oja7;GQJ~e%H=rR zJ?k9w_c3aDjkN135+;Vxsx6F(eC(w!ep&*Iw%Nl159JKZ%p8AuHM?D*vu%Grl9aUi zszw7*trvQ-PfnJ5k|G;=dHXo!%+$r;fq|G7oiEA?ZIDa-a!-C>h8qP2F61gk^!oVw zx2)pabMI{jRj~*YF4HnTSijua4Lz=TEvFJM*#gz8&=*)uhTfGXqNRSHl=M{1mp;XN zmHAXNhreb&7!V%wn;Ng#jhqJk!);jcV%3l`c|%3toHTK3UgORCwfTB@1PYvy-W%8jH~|EImCun+JTIRw87Q zz2iCuhoHdPbI%h^q5v@A0OqCWi(fvzQOsvyYm#6-bC5A?JZ-jkb|@NPF|u0yilwF1 zb>Kix>xaE3@9IplDK(t^U50FZL63iJZobLImGimj(&6dH0WcJUPyazG?zQ|eC54}q z90Eksc5!iW?Ck8gTF)hHxt*F?IJ1}MX(t6m+_O?R6bA*n<8VQAbJ1lmSmv|Wim{;~ zy$Z?m=g$L4C}K=%#7|2&oBmJo!u=HVcVFQH>sD(WcUN(4HxoiYTa*4!QE^HuG^0}2!G57U?sijlPBywZqd=vhdV17!GK(NE{~Ria`$Av@8xV(5gC~7{p#`I z8YLxVwrcw0v{f#)ppcN`jmVd=h}t_~*1Hwuc6|zpish>57cjV0Tpa*>>itY=roTTw z25NL)4$VakZ(R+o#>KHHa>y5S1d9YmkuoObn&*?#C5qB})jDbm5&+e6b}j_1+qB#J zMDjbPwby8AIfjLk$pN3(nmRc)C^`>$Cf24(;_K`Cvn`z3kx`vwYre0qySt#MC?2f8 zsMQ|ya~C(awocn40Gdi0e^|>D0vN=~$~wskfjoX>XgCVk6-qVTPzB6P(m!dTK{5>Z z?JFcZ!(E_^h5aKE@>9D2?E`_~LPD&+{Qv9!saYQAYiVgYITaufhz@Qo!KnOXn6H&vL?YEqh3{wD0Z4$fZxV?Gg@tjB$cvz5A}n`Q zM*IP`Ai_rQNor}Di=9SxGvw8ih5IR=Z{d1V)kDufng^W4-IZ!nq*5-Qg@mBSJ?3IO zB>co#NFd}Y)eGIX7rb^n#K|G_@o@3+dfzR;HpeO*?d~IP-nhY``mw}yN;)@us|LQk z2!JZk=Jo5>#ufHdEG$x?{YuKFtE+3sN2`4H zreegPbEl3Y5gjRgK!{?80s70s%X^A=0Zm~W|#Au zRH23Qjtwf^=X>KEJTL^OrKKeh(2YLt)GCP5VFy2!T2UVoJm?{J`JRh2f%X~1g`jDQ zMI(&@BwjCHe|rHFnq@00T212k2mlXYbI?=*=ibD3wf2ZQje;%{4PbhDdip6)+{fv% zxe5R-o#~7p6Cb`0_1(0#warRPGf%iO;r{57fLNRg?LQR0<) zS*fMBA{ERuG?f8|J9&9Ljv{`$tIoLEZNPwdd3kr&rlvsW|LvRHWDR&Rxc4oXZ0hAn zfU)ry=sWGMOZ93Wky!)mC(?oLCHlTb1rOGNQ?cq$jgE|_e za8IjnX`w~6zl{DClNcJ>4hH?Xc4ZP^BdXUFgPEC`1pv^4s*kR{y}jJV!5N?BRiw{PEM14&AwYVQ>3S-q+4w{)Bk~`BE~7VNmmh zg^(i^&j<(<1Iny?Huh?7suTiTdePI50+((KICL2;`8sSZL%4(B&@nfk0+&DJtdbu& zT=a{9O#wZjV`T-qR^-ymEa~$MxIy*Qi#n`RR^4$>P!RB?%^djFz`y|DKbZXVo!I-} zil{Qurm*jQr5VoSUjz>qOrpxb%JQEF1D7R~kU5UUEZl`y7}l!U-BGG8&;G5t2cq|J z%)g9MAg&D_8<<+C0TLY<8TojL9%Pzn!+ZDcflTJcFANaSEh(u0!06n*+&j&Xr67y| z5{8?YP_+pA{{4GF0pIq?h3~T99ptoHfSf+a$ese5&6DXC>Z`8oUhlyVh?2be!y-A0 G*Z&3(x~E70 diff --git a/diagrams/UndoRedoState2.puml b/diagrams/UndoRedoState2.puml index ad32fce1b0b..cfda350d855 100644 --- a/diagrams/UndoRedoState2.puml +++ b/diagrams/UndoRedoState2.puml @@ -7,9 +7,9 @@ skinparam ClassBackgroundColor #FFFFAA title After command "add n/David" package States <> { - class State1 as "ab0:AddressBook" - class State2 as "ab1:AddressBook" - class State3 as "ab2:AddressBook" + class State1 as "ab0:CampusConnect" + class State2 as "ab1:CampusConnect" + class State3 as "ab2:CampusConnect" } State1 -[hidden]right-> State2 diff --git a/diagrams/UndoRedoState3.png b/diagrams/UndoRedoState3.png index 50255647c03fbbc807b122fbd1fe0878859424e2..527b30c09520ae1b6331a2b96511a1f96057c4e8 100644 GIT binary patch literal 7435 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 R2Te|h?oERm1=k;h{trA6-WUJ? literal 7087 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

    _ZEt%O@yj{*b?E_A|UEWT57T3i?J z>JFzQ{DIOtR+|TT9Q^fbW~MXdR$uVmuj3je7KYPi2f>!&RMaVpP=d<@qekGDe~!ET z>%qDKU-1=B{68EF6)bG6t?1}zIX>~iDzVphSQ|%Y6Zl!27DR;WZ_6KVISdoOl8fNf9b^Y`v#JVc z4 zwAaGFAT6ozF%|9Xr14$)J-@P|A(B6^!182`nypSEkUm3-Yl-P7z><$c#h=*?@zssLH-S*OTt7n15+C?nOX_j~b?)KjH=jy7l65Ro^+78n1lt}e{YD3=A@x@Cg=aPSc{Zm;8QnSJhTx5t(w zNcj~0YZ*d835|ZUgzk4>`>9AtL!+%@Sva`VqESwDn1bNr$2cIAr%a-gDdV zLHu8yJz;A*8*;yL9<+Y!?Ci+6xa*)iRs-*cg5o4In}dTRXmwOnx}&d;FjVje=ufA| zgy2YXl2z(BlBPZm|JAa0?`XUJI`DT&BP#0Z;t0W~{$&ColZs-H+c!l-VxyvLQx*D( z_PNz!wg}Uxj9tvRQEs5eg?Xhws>`FyFRI@xD_P(p+9 zeZlO54jE8KbRIk?C@Nwgh4@f(LJUHuE_!-;a)ACQF79$e{l2Y2{X!p#^YY~ZpboC8 zySx7Zjq^*b&r(TL5PS~#6qUjxD1E8GigW+_|NqMmO_~&xluvAI#95-l9%k5HlN@{X z=g*(5Eia@tpS*5}4+vtT%ODPsNTF(_2cSRFhr#%?Qm&Cf#zEg@{HCJf**`}@kuD6T ztfS+6-r*5w<#?#6jh*Me4U#_iMnNj@)n}OTIl}6xv9%S?Xz%zr9U8$)0#t>6O_-Sd zTzZjh9sVNGO2&y&R<2aM@OJ6teV=My!j#8M+y23UW7RkghfBQ!=aBKyT6`k2K2;Ce z=G2sw#f1gXQZq6$pS8umf7_Iy>^e{!3Wv>LJ-X_O5et7INy(keSo!?ILj00f0vWIN zr#(mwmeH-=>T77(lXgZ%MkA2Oj~)RDN}8LSTUz>qs+lYjt`BdEf1YY#ONfb$-6ax z-|&r|tm6{!C?*aL?S;2R(NV}Cpf6NbR`w!gc9#a>pl7bCs-i$fN2mVsKWBW-=&JF> zMkH`jQevXV*TY#1$Fx#A5I)JN*>dypM2CSKhO2TKDKe`88)b(EVcn)1KqsreaMtcG zEH5tu;hBqv$8NaLME^DW)p!(&Kp;S!M@y3}gZwtpZvI9Q&Y>5mEby|&Uk=tmZQcDT=qoWVz;Ybgl~ zAZf=M@1#gL8EI;E#X?V>gYya_r`aJ)PvdRhp-@1=@SW|TJ18_aGD=ELmU6`3WQ_Ao zGCkN?dvHs0kN0vcf|~8F`$)05_|N?Od{T016;;(DPLr}}un907S_X|-835oUfbsGT%44^#$@M)sAx0lf@ z9caird3kwv?0aZQA!~rN3bRT}Z}alr&+NY&a;y2> { - class State1 as "ab0:AddressBook" - class State2 as "ab1:AddressBook" - class State3 as "ab2:AddressBook" + class State1 as "ab0:CampusConnect" + class State2 as "ab1:CampusConnect" + class State3 as "ab2:CampusConnect" } State1 -[hidden]right-> State2 diff --git a/diagrams/UndoRedoState4.png b/diagrams/UndoRedoState4.png index d6725f8cc39b891dc7e55d6ca2b6f72056bad881..a50a7b23576eca1edd64e6a16c401ba75bf15d7e 100644 GIT binary patch literal 7463 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 literal 7112 zcmeHMcT`i|mJgz!6j4E`f(S?_Nbg8*(mP0z-UHI4!$hDsbO>{R(h>xIkeH0?{X`DaskVwA`M%VL)ZvLhR|5?r>Z57L}=+sj?8kADHVu zL~I;h(VC|w%;F^#K-n*%CM2P~l+z_@+bbrM^j%8$RzjDevdS}stK@X`PTE8& zcM4wRzmF5jcj~Bau5FvmCvAb5Z{aTnrJ)~A=03Do90qoLAfjYv0f9=PDJBFU&_<*k zAdxB&2o!#Kqs&SO0`Whj1s-qr1JAE7-&iXO0Jkj3KzEuXG7zXU&JM(zl#xMANB3dK zDJO^jInUDQlM3NP2xPq$R2fl5^k`*e#lyp+0f)|O;8l!_jO4@(h%VGv@aXZDcvctQ zTIijHUkMN_Q)axvPfU63>3rykyP0rXd;2;njoX++_qk@*oskzLhw3E1+^MFsS!4_Q z1qnI26$zGdCH+5r`Xu3lsj=<5iBEx-DgRk_t%sp(sw6KoD>YSdy->eI>&A^6lKwkX zgKtw(D4CdkuB`Mh^_<{0t4p-=<_lCPDvczqJHr!Y@Tw%+^X-z49}kU;jC6O~etFB> zz#To=FX}!$+7T8evAY<{RIC9uhx0sm5I#Mk%dQP=XkhFA^5uOmT|x|A&~Y%wb)xDQ z`&5hXX3g{N7QgN3O7o^)OMQ9b-pUf5OT7s&7|iF>@{ zBqS_blgQ;07e7YB6!hp{c|NeZ@t%zG+UuZ$Ef`y5`ip5sVHYZQYAUK-@+e^?#OJMr zj)k6{=<&Xh5^ZB6qroiUcsjJ+m!^{avv@F~w7PnYB9%cpF!dh({rd+kKEA&DfGE!G zw#;UDXWe2&?418X$i>-VgIuegj5T|nnAeXLWCrI#&74}wBSQlNx2d{lcv*W9Z~u>; zcuvvL@o@(S2R#m6-UL}SA0MHRdtYy9WbhTuEq2G&bF`+URv{oy=quWN%%D_1X5P&d zYoHGfwr9wR6r7!%jf}=SBM4UpqUZvycQQPs;@8R)h)#d)J_8>Tk=`3V7%kI3Ci;~1 z(8`8`TxY=8Dx}8`Y}uyTdi(Zmw~R(GCug&NIGKk0=}dSOZ&_Z*0qqPg4^N>*;9JMm zt>wUWDBKyg><^i1Q36Wq70DJoz=I~79Tyk#>N_rt1TNI(9x$WO&8Odp^HR5 zy1+WkXF(WkSOCRyEIW5l9lY8^#e7B+b)sC?ff0iq^cQi`3yrtw9O!w)%uk zYdV~Vo4deg5^%EvQUfjW1?pb|8yg#we7pmv5pylR-pRg(f5NXWKo^Ra`~23Gdp>{W zdG>Ml^mq^J05a-k&}#)2rG8AY#-@j)jJ*7DlWSXRDl&}xRZ>%it>ecRD}U0wWg|S` z*V>+{da-b15&gDC(g&k6ZP^~UpFl6lVZO_}$N^JUC8{Ww53&yq3O(7Hs;_rM-6SEg zNz{$rzNT6Q?lJe(Slz77 z>}T2=G z`k(Rft}ZUPz%wA2e*E}h($KG@`GmNowKX;>YHOzHCw_mk;i@*^M$wZLZ>O~F*9kI3 zmSvx$4;K6-4KW4d*641K3a&~p5a%Sr%D^^Sb29ab>4E4g2ny2I*SEI3tOKnoFGr$K z{y&s8Wf(w4HP%^wEM*Eg->GED7KPl~D2v$uLj0Rw^j%(VZsfv(Rq5&J9*SKn2eY)K zV9LzH!y_!bj~Oc9VQmmvLxMYUBz!;Q<>eWbCnO}KUAUB~L`FqLS+x48F)uEYw30AC z&$wsQLgLFJCiZe5OPGW`X#za}%i!H`^zp$3{cLB4RKEsfqrQ80AV)kUnQfnog9Ec( zl85kIyh180&HzgPv;{!!B_cohX8`_RVD-P+)rpTbH8u4$oiNvf2k(hNAhC2npCXNn z@$qpiGIXRrTtLp!5^6#U0#P7_hlh{%)@1ib^@Ht4`X6v`lp+w871uzZSZjV7r`$Ey zEG;4&BeM|!D4g*2c)+C+!tw&3SUqFoCZF};xVY<;Mw>f3TKfLqJ0tW)%Lpc(y;4db zVDwQX`mSRcxXxzQHBn{Z%1;w|v=}=(I~x^smD6Pi@1biOPJBO^Kr9u&II}KpF0Rj= zb3GOh#~khK&{fI>umG9gsLUyJjvLWVNlpef6-nO>MQ4Y#!CXDeY_oS+Sy@Cx1Wqr1 zWIZ`0h2p*hs}jMqI4hwihm4F&gP$x8tq^~Y_bU=<%iXGIGL_jAPn{+1#MA3b_hN9S^nlCs`&@zdTKYA=?s!4WWX4Mr`j>yK*<68>A0 zNnuA+f}qBGi^9ad1>i; zrKyRDjBP&*TFzu)%3tzth`VTyt8x{MgeRvBv@eb-?yjRaMpCIdWhQY4-*2 z{NBLVuh_%GHRE8jP0BlW8qC~1J$JK&U60v_K`XPDfXF z=v$_sg1kJ&O-@cuTlNeWO-fxz_?H8LK({9T?&u(pSFQ>WwK^=9uK$1iBAYcbKfn9& z<0K$2IYWJ3lp&$`nG1z_@Y8&jt0N~1If;N7^KQn>Kk9!VA@PuX?OMTO>JKhv~WMG}?L^qZH0W)^5 zwZXV2lVPNl=EYM_Oz4z9GXjGvF9-A74`d}Yq|zvf9{V>m;ZHKjQnT0h%Nc{VZbKl6 zZ|=|ay-7Hm=r~uIj{zGRPUT7l`E76buBfL=eWi}xHXe2ki%C=lHeZmQgQJvni)7aEh zn4Fvpu1QA3sOfpPxBt%am+W8H6u{MP42@4DHHoPCP9cem7U!pHQ^wT@m1vPGS6b3D zsxz8Wzb>2~Y&AIl(v}g&&H1l=DG1j6SS4RdP8ycBIdKt+!(fwGPA(3bY?pb>EmMO$ z)*EWFUWn2is#K(^cZ5bj5aRpG{bc_nl{#|^eRQ-2dCbMhkNC73H#$t}?6TTut@v@+ zuf4jY4I_5DSR^GiU-0W{*xZC=HYHIbecKDM6O<;iiQmHhDe}PxnXLTdXU@xf)F3;6(k^}R!WbJKrUZYnI zREgFGD>XGveEZ()vCPiyK~iMr$64GiL9W6kqq&P`4CiWF>Y0-40I3#V#M z8S@PEVS_=sfV;hXsV$O%KiF2HNDEG#7hONCsu~=1*jtT0tzDI`fCzQBwKdRb5*uY^ zWN6*@_V&JUV;vECCbiC5R1}se=4E}jlZz4T?NbTH_9MUUW0?!h6(Oy|JJXHc@(P;m z`LYw0*~lg#>K~|pjns9I3e&x(fI$9xc7>bLX;|z&6l#VbQhmv;^9kPFbzzzJcP45PF!-h#soxj*Efs)(dm3R<_K5@3~IY9j6!=+WT)T4;^{W z#}}7qA1yIC)^5w5t#f7t>p4wSO*lzljg#IOULR6cRMZZ{l$IS!mcyDR_$=C-HgvQ( z1c&UtqQau1IW&fpxVh^~QL#69kN2w!(l(C=M~*erjab>FPe=8;O$TC`5HvIxg^c0? zjP~?=?NX70!mxN5)ZrT<1frhtk-jl@oT9yAX28G(bN>aVtPMAORpM=R7kb7Avzphw&BF}Pf@;Ez9 z$$Z}ZFuGiIPXGE45qTk1zC6oe7x4w#_C4wgW4}(AnoBtb`p0 zm2Mrbub28v5(CX0netzzeAuf3^Ns&_E6e{~gTMRs&Pm zX|_*XbKp9c!N!Kj$maG(FTz5{s49#0Qg%H;Al-FP@EKgV2o)HhUqqD7dUrbi)?O<2P zHG$ODqPUI|`3hgL1<&1!zLhJ;z7{>0EA78?dMum{CO2*%J})p8#npMlrv-PR>F;}B z0Qc5N{5EjTB_1F4ImLZhw_zlWna_$VU<8b?T z@N>793GZ8>O=rW}on`3Gn`Y%Ts&8Gu6+{Jt~BxKe$4q%UvhoxzA*7rK5M zem^jqJ@WHsL_^$&D~tWo>@4-^nIs_Ck=mf_`7bWg{)=2W6g1&HH^S!*2^%{*wkbT# zv_3{RP6WGW_4sh_Vf5SJWz3tto@hp?k5P2`+L%cIGV9TCx6e2Qty)smV8X7@B!r=m zF)Hs_;Pc?sOx=prZVIbHs7_d+rJA=fGi&bNWNp*BWu?UoW}@m6_+8J?$QF0_9R+aC zo*Wb29_bJjdngrjV1c-(L)lDsqDj}>QeaI10vy~Y+#wF?iDs3q1_r8resp1*MOFeM z>!$*Oc}ueWW%}j4uLBBgRs6XUr4QmPJJb)vHR&HeZa>@#$fc;QgDhlI+01NCpb8fK zeSL3|ZZe-HXEwhLHq(LKP}J{2YG{Bx3RG0K=T3;qOK4M4ah@ewj0nU$E}u(!;$6A_ z4|LJGZrprSp_TP}>`rU(0;{*z?XZ-m%%A-~HsHWi7PSwHyha(1JWQl<6$IMXYstyl zeYBiUA{YbDS5=RyeRBA5a0Xxj2vZMqcmTz_(M?T%ZPz}SBr*fte`s>gCd>IATJK?I zlF;#R)`})@tj+@iH0n&N)%uv3kSi?Alf+my_6);R1ay@C=cXn#0Z(7ws_HPS%d9}p z#by2whokzPSbX>^v7iAGi%1M+Hz$XB`AnfUY-rQCsPNPQk6ZuoU@E4Y>@10edpV85 zs0&>VHxb2&s1YeC<@J2VjX4Qvd3Hp{#uk=<1!%}FJKK`A$H&L#>bMoUp*w3M7 zSZP60Xz0ryuYgk6-p($L0Mr+42STeF8X7)%^2Ef%#K6G7!XlT3$WsR(wGwztYTm0v z0^9&(s!oZFP>h3>Fg$2ywi(C+KPAh#xov$(V(GaDx=GRx`VKWLHyUzd5^FUrjNwetG%t>P^=t~eEtkQl&s|p@0Jq)@izw_ zzp%4oMP60*7-W)qS!2}^O4U9=_1AabRamqd0pohTp&OiB+gHR`fiyE^cvvsg_}!j7 zRp+k+h@Z^qGLrTz!}{55|SXP(bgiQaRGddyzGabxkaK#L?I$D_i|S;nu3@v#!> zq~+w~IFA(n64qpov`3}`^~>1!_@4wIV!)1EazC#&H#bvA)5se1Uw*^S# zR$Uf~Z-F0>v6EzW0yQM4RFk5OHoOHe&$|b-;a~s%|KDYY@La09cLB!8Nrgek$_-j{ObJABOvS!!PdgnIYJx6HXO-3l$^i@TD~O4kT~lqatF2H>2;06lM@L74xsoTx$I{2kDQ+SD zE>B%hq!bh-wms8Ct2br+cb=JK@Zk-E_%J|LpPmMnd3A)Im3jeW zE_`JZ6socK6rNBZ?CH5P+5NsRZZ%Ae7rr zu}FZfFoB_7pWgay?@wSyfVpV$nEUa^;TL0RW?BXbpEyzx-IUZ+To*BuYHLqVkC&I1 zTQ(h&Z0Iu*i?)|TeSInXcwHT05if>g(%Aj{veb*tVpVJwwDSjt{?8kJ5U_AF=(F zqPn#7<@xcNuSBjnzuu)!plZO9$ina{wZc3fJuI}v+0$Pe(k7xy!h(XD;zDrgH=6iPR`EW{Q0xmlQ&vM5DO*zZLZ@N${O?U z9@}CJI|l}Mg@jUvK}Au(SX7p9IpC+jc?u)2pS`&+$)iaW1+8;_ypP3hOgC-zwKu}p5P9L{{aN~A1f8Yo`;>|{N0^eH93t$JB*Wb4m6WD((A`N|8?B?*wVsv zQO?I-Qe50SGNS)C_!=4-5*HV@;T2M;o+v3Se3~a?K?eGbh57mU@7~cQC@)=2zfM7+ ut*xDLkq9u)_b!jJfE^M9`umwy_^B-OJRZYy=L^sZ0;wr!DOSl_|M4F$>x5MR diff --git a/diagrams/UndoRedoState4.puml b/diagrams/UndoRedoState4.puml index 2bc631ffcd0..4e70042b776 100644 --- a/diagrams/UndoRedoState4.puml +++ b/diagrams/UndoRedoState4.puml @@ -7,9 +7,9 @@ skinparam ClassBackgroundColor #FFFFAA title After command "list" package States <> { - class State1 as "ab0:AddressBook" - class State2 as "ab1:AddressBook" - class State3 as "ab2:AddressBook" + class State1 as "ab0:CampusConnect" + class State2 as "ab1:CampusConnect" + class State3 as "ab2:CampusConnect" } State1 -[hidden]right-> State2 diff --git a/diagrams/UndoRedoState5.png b/diagrams/UndoRedoState5.png index 76a74e3aa90507945f6bb64ef61a8aaf0ce0ddcb..37a91693c16952484b9e80a5be764eb60a5d8f01 100644 GIT binary patch literal 9133 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 AssI20 diff --git a/diagrams/UndoRedoState5.puml b/diagrams/UndoRedoState5.puml index e77b04104aa..503b638fb2a 100644 --- a/diagrams/UndoRedoState5.puml +++ b/diagrams/UndoRedoState5.puml @@ -7,9 +7,9 @@ skinparam ClassBackgroundColor #FFFFAA title After command "clear" package States <> { - class State1 as "ab0:AddressBook" - class State2 as "ab1:AddressBook" - class State3 as "ab3:AddressBook" + class State1 as "ab0:CampusConnect" + class State2 as "ab1:CampusConnect" + class State3 as "ab3:CampusConnect" } State1 -[hidden]right-> State2 diff --git a/diagrams/UndoSequenceDiagram-Logic.png b/diagrams/UndoSequenceDiagram-Logic.png index d7406215cd734344645838a4f88ee14d835d92b0..9258df74ef9b64070b76c5fa4e06aa5c72c2808c 100644 GIT binary patch literal 17837 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 LogicManager : execute(undo) activate LogicManager -LogicManager -> AddressBookParser : parseCommand(undo) -activate AddressBookParser +LogicManager -> CampusConnectParser : parseCommand(undo) +activate CampusConnectParser create UndoCommand -AddressBookParser -> UndoCommand +CampusConnectParser -> UndoCommand activate UndoCommand -UndoCommand --> AddressBookParser +UndoCommand --> CampusConnectParser deactivate UndoCommand -AddressBookParser --> LogicManager : u -deactivate AddressBookParser +CampusConnectParser --> LogicManager : u +deactivate CampusConnectParser LogicManager -> UndoCommand : execute() activate UndoCommand -UndoCommand -> Model : undoAddressBook() +UndoCommand -> Model : undoCampusConnect() activate Model Model --> UndoCommand diff --git a/diagrams/UndoSequenceDiagram-Model.png b/diagrams/UndoSequenceDiagram-Model.png index cbfb87471f752ef797f92f59eb8ddad30ebf869c..16b4814f5d77e12ba5acd10e1766fe12c03f8a3e 100644 GIT binary patch literal 10760 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 far@-P;pzKxs8Wh7BOK7-c}hW6MW#^7K(~^! literal 10176 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 z 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 t3u37$PD2`J|I-z=|K Model : undoAddressBook() +[-> Model : undoCampusConnect() activate Model -Model -> VersionedAddressBook : undo() -activate VersionedAddressBook +Model -> VersionedCampusConnect : undo() +activate VersionedCampusConnect -VersionedAddressBook -> VersionedAddressBook :resetData(ReadOnlyAddressBook) -VersionedAddressBook --> Model : -deactivate VersionedAddressBook +VersionedCampusConnect -> VersionedCampusConnect :resetData(ReadOnlyCampusConnect) +VersionedCampusConnect --> Model : +deactivate VersionedCampusConnect [<-- Model deactivate Model diff --git a/diagrams/tracing/LogicSequenceDiagram.puml b/diagrams/tracing/LogicSequenceDiagram.puml index 42bf46d3ce8..d5ab23bf551 100644 --- a/diagrams/tracing/LogicSequenceDiagram.puml +++ b/diagrams/tracing/LogicSequenceDiagram.puml @@ -3,7 +3,7 @@ skinparam ArrowFontStyle plain Participant ":LogicManager" as logic LOGIC_COLOR -Participant ":AddressBookParser" as abp LOGIC_COLOR +Participant ":CampusConnectParser" as abp LOGIC_COLOR Participant ":EditCommandParser" as ecp LOGIC_COLOR Participant "command:EditCommand" as ec LOGIC_COLOR diff --git a/index.html b/index.html index a8137fee06f..e18cd3b8d1d 100644 --- a/index.html +++ b/index.html @@ -4,7 +4,7 @@ - CampusConnect - AddressBook Level-3 + CampusConnect - CampusConnect Level-3 @@ -16,7 +16,7 @@ Search

    AddressBook Level-3

    CI Status codecov

    Ui

    AddressBook is a desktop application for managing your contact details. While it has a GUI, most of the user interactions happen using a CLI (Command Line Interface).

    Acknowledgements

    [Powered by MarkBind 5.5.3, generated on Tue, 15 Oct 2024, 19:35:50 GMT+8]
    +
  • CampusConnect

    CI Status codecov

    Ui

    CampusConnect is a desktop application for managing your contact details. While it has a GUI, most of the user interactions happen using a CLI (Command Line Interface).

    Acknowledgements

    [Powered by MarkBind 5.5.3, generated on Tue, 15 Oct 2024, 23:08:02 GMT+8]
    diff --git a/index.page-vue-render.js b/index.page-vue-render.js index 70154ee5a13..9b2307b5278 100644 --- a/index.page-vue-render.js +++ b/index.page-vue-render.js @@ -5,9 +5,9 @@ with(this){return _c('div',{attrs:{"id":"app"}},[_c('header',{attrs:{"sticky":"" }; var pageVueStaticRenderFns = [function anonymous( ) { -with(this){return _c('div',{attrs:{"id":"content-wrapper"}},[_c('h1',{attrs:{"id":"addressbook-level-3"}},[_v("AddressBook Level-3"),_c('a',{staticClass:"fa fa-anchor",attrs:{"href":"#addressbook-level-3","onclick":"event.stopPropagation()"}})]),_v(" "),_c('p',[_c('a',{attrs:{"href":"https://github.com/se-edu/addressbook-level3/actions"}},[_c('img',{staticClass:"img-fluid",attrs:{"src":"https://github.com/se-edu/addressbook-level3/workflows/Java%20CI/badge.svg","alt":"CI Status"}})]),_v(" "),_c('a',{attrs:{"href":"https://codecov.io/gh/se-edu/addressbook-level3"}},[_c('img',{staticClass:"img-fluid",attrs:{"src":"https://codecov.io/gh/se-edu/addressbook-level3/branch/master/graph/badge.svg","alt":"codecov"}})])]),_v(" "),_c('p',[_c('a',{attrs:{"href":"/tp/images/Ui.png","target":"_self"}},[_c('img',{staticClass:"img-fluid",attrs:{"src":"/tp/images/Ui.png","alt":"Ui"}})])]),_v(" "),_c('p',[_c('strong',[_v("AddressBook is a desktop application for managing your contact details.")]),_v(" While it has a GUI, most of the user interactions happen using a CLI (Command Line Interface).")]),_v(" "),_c('ul',[_c('li',[_v("If you are interested in using AddressBook, head over to the "),_c('a',{attrs:{"href":"/tp/UserGuide.html#quick-start"}},[_c('em',[_v("Quick Start")]),_v(" section of the "),_c('strong',[_v("User Guide")])]),_v(".")]),_v(" "),_c('li',[_v("If you are interested about developing AddressBook, the "),_c('a',{attrs:{"href":"/tp/DeveloperGuide.html"}},[_c('strong',[_v("Developer Guide")])]),_v(" is a good place to start.")])]),_v(" "),_c('p',[_c('strong',[_v("Acknowledgements")])]),_v(" "),_c('ul',[_c('li',[_v("Libraries used: "),_c('a',{attrs:{"href":"https://openjfx.io/"}},[_v("JavaFX")]),_v(", "),_c('a',{attrs:{"href":"https://github.com/FasterXML/jackson"}},[_v("Jackson")]),_v(", "),_c('a',{attrs:{"href":"https://github.com/junit-team/junit5"}},[_v("JUnit5")])])])])} +with(this){return _c('div',{attrs:{"id":"content-wrapper"}},[_c('h1',{attrs:{"id":"campusconnect"}},[_v("CampusConnect"),_c('a',{staticClass:"fa fa-anchor",attrs:{"href":"#campusconnect","onclick":"event.stopPropagation()"}})]),_v(" "),_c('p',[_c('a',{attrs:{"href":"https://github.com/se-edu/CampusConnect/actions"}},[_c('img',{staticClass:"img-fluid",attrs:{"src":"https://github.com/se-edu/CampusConnect/workflows/Java%20CI/badge.svg","alt":"CI Status"}})]),_v(" "),_c('a',{attrs:{"href":"https://codecov.io/gh/se-edu/CampusConnect"}},[_c('img',{staticClass:"img-fluid",attrs:{"src":"https://codecov.io/gh/se-edu/CampusConnect/branch/master/graph/badge.svg","alt":"codecov"}})])]),_v(" "),_c('p',[_c('a',{attrs:{"href":"/tp/images/Ui.png","target":"_self"}},[_c('img',{staticClass:"img-fluid",attrs:{"src":"/tp/images/Ui.png","alt":"Ui"}})])]),_v(" "),_c('p',[_c('strong',[_v("CampusConnect is a desktop application for managing your contact details.")]),_v(" While it has a GUI, most of the user interactions happen using a CLI (Command Line Interface).")]),_v(" "),_c('ul',[_c('li',[_v("If you are interested in using CampusConnect, head over to the "),_c('a',{attrs:{"href":"/tp/UserGuide.html#quick-start"}},[_c('em',[_v("Quick Start")]),_v(" section of the "),_c('strong',[_v("User Guide")])]),_v(".")]),_v(" "),_c('li',[_v("If you are interested about developing CampusConnect, the "),_c('a',{attrs:{"href":"/tp/DeveloperGuide.html"}},[_c('strong',[_v("Developer Guide")])]),_v(" is a good place to start.")])]),_v(" "),_c('p',[_c('strong',[_v("Acknowledgements")])]),_v(" "),_c('ul',[_c('li',[_v("Libraries used: "),_c('a',{attrs:{"href":"https://openjfx.io/"}},[_v("JavaFX")]),_v(", "),_c('a',{attrs:{"href":"https://github.com/FasterXML/jackson"}},[_v("Jackson")]),_v(", "),_c('a',{attrs:{"href":"https://github.com/junit-team/junit5"}},[_v("JUnit5")])])])])} },function anonymous( ) { -with(this){return _c('footer',[_c('div',{staticClass:"text-center"},[_c('small',[_v("["),_c('span',[_c('strong',[_v("Powered by")])]),_v(" "),_c('img',{attrs:{"src":"https://markbind.org/favicon.ico","width":"30"}}),_v(" "),_c('a',{attrs:{"href":"https://markbind.org/"}},[_v("MarkBind 5.5.3")]),_v(", generated on Tue, 15 Oct 2024, 19:35:50 GMT+8]")])])])} +with(this){return _c('footer',[_c('div',{staticClass:"text-center"},[_c('small',[_v("["),_c('span',[_c('strong',[_v("Powered by")])]),_v(" "),_c('img',{attrs:{"src":"https://markbind.org/favicon.ico","width":"30"}}),_v(" "),_c('a',{attrs:{"href":"https://markbind.org/"}},[_v("MarkBind 5.5.3")]),_v(", generated on Tue, 15 Oct 2024, 23:08:02 GMT+8]")])])])} }]; \ No newline at end of file diff --git a/siteData.json b/siteData.json index bc03b820173..68359590853 100644 --- a/siteData.json +++ b/siteData.json @@ -107,7 +107,7 @@ "src": "UserGuide.md", "title": "User Guide", "headings": { - "ab-3-user-guide": "AB-3 User Guide", + "campusconnect-user-guide": "CampusConnect User Guide", "quick-start": "Quick start", "features": "Features", "viewing-help-help": "Viewing help : help", @@ -131,7 +131,7 @@ "src": "index.md", "title": "", "headings": { - "addressbook-level-3": "AddressBook Level-3" + "campusconnect": "CampusConnect" }, "headingKeywords": {} }, @@ -139,7 +139,7 @@ "src": "team/blackpanther9229.md", "title": "Nguyen's Project Portfolio Page", "headings": { - "project-addressbook-level-3": "Project: AddressBook Level 3" + "project-campusconnect": "Project: CampusConnect" }, "headingKeywords": {} }, @@ -148,19 +148,11 @@ "headings": {}, "headingKeywords": {} }, - { - "src": "team/johndoe.md", - "title": "John Doe's Project Portfolio Page", - "headings": { - "project-addressbook-level-3": "Project: AddressBook Level 3" - }, - "headingKeywords": {} - }, { "src": "team/justin.md", "title": "Justin's Project Portfolio Page", "headings": { - "project-addressbook-level-3": "Project: AddressBook Level 3" + "project-campusconnect": "Project: CampusConnect" }, "headingKeywords": {} }, @@ -168,7 +160,7 @@ "src": "team/krashkart.md", "title": "John Doe's Project Portfolio Page", "headings": { - "project-addressbook-level-3": "Project: AddressBook Level 3" + "project-campusconnect": "Project: CampusConnect" }, "headingKeywords": {} } diff --git a/team/blackpanther9229.html b/team/blackpanther9229.html index cbaab8ebf90..3674c7c85ed 100644 --- a/team/blackpanther9229.html +++ b/team/blackpanther9229.html @@ -4,7 +4,7 @@ - CampusConnect - Nguyen's Project Portfolio Page - AddressBook Level-3 + CampusConnect - Nguyen's Project Portfolio Page - CampusConnect Level-3 @@ -16,7 +16,7 @@ Search
    [Powered by MarkBind 5.5.3, generated on Tue, 15 Oct 2024, 19:35:50 GMT+8]
    +
  • Project: CampusConnect

    [Powered by MarkBind 5.5.3, generated on Tue, 15 Oct 2024, 23:08:02 GMT+8]
    diff --git a/team/blackpanther9229.page-vue-render.js b/team/blackpanther9229.page-vue-render.js index 7f316d58aa6..e58690a2756 100644 --- a/team/blackpanther9229.page-vue-render.js +++ b/team/blackpanther9229.page-vue-render.js @@ -5,9 +5,9 @@ with(this){return _c('div',{attrs:{"id":"app"}},[_c('header',{attrs:{"sticky":"" }; var pageVueStaticRenderFns = [function anonymous( ) { -with(this){return _c('div',{attrs:{"id":"content-wrapper"}},[_c('h3',{attrs:{"id":"project-addressbook-level-3"}},[_v("Project: AddressBook Level 3"),_c('a',{staticClass:"fa fa-anchor",attrs:{"href":"#project-addressbook-level-3","onclick":"event.stopPropagation()"}})])])} +with(this){return _c('div',{attrs:{"id":"content-wrapper"}},[_c('h3',{attrs:{"id":"project-campusconnect"}},[_v("Project: CampusConnect"),_c('a',{staticClass:"fa fa-anchor",attrs:{"href":"#project-campusconnect","onclick":"event.stopPropagation()"}})])])} },function anonymous( ) { -with(this){return _c('footer',[_c('div',{staticClass:"text-center"},[_c('small',[_v("["),_c('span',[_c('strong',[_v("Powered by")])]),_v(" "),_c('img',{attrs:{"src":"https://markbind.org/favicon.ico","width":"30"}}),_v(" "),_c('a',{attrs:{"href":"https://markbind.org/"}},[_v("MarkBind 5.5.3")]),_v(", generated on Tue, 15 Oct 2024, 19:35:50 GMT+8]")])])])} +with(this){return _c('footer',[_c('div',{staticClass:"text-center"},[_c('small',[_v("["),_c('span',[_c('strong',[_v("Powered by")])]),_v(" "),_c('img',{attrs:{"src":"https://markbind.org/favicon.ico","width":"30"}}),_v(" "),_c('a',{attrs:{"href":"https://markbind.org/"}},[_v("MarkBind 5.5.3")]),_v(", generated on Tue, 15 Oct 2024, 23:08:02 GMT+8]")])])])} }]; \ No newline at end of file diff --git a/team/cyx22222003.html b/team/cyx22222003.html index 7edcf65ae13..6c1c559d546 100644 --- a/team/cyx22222003.html +++ b/team/cyx22222003.html @@ -4,7 +4,7 @@ - CampusConnect - AddressBook Level-3 + CampusConnect - CampusConnect Level-3 @@ -16,7 +16,7 @@ Search
    [Powered by MarkBind 5.5.3, generated on Tue, 15 Oct 2024, 19:35:50 GMT+8]
    +
  • [Powered by MarkBind 5.5.3, generated on Tue, 15 Oct 2024, 23:08:02 GMT+8]
    diff --git a/team/cyx22222003.page-vue-render.js b/team/cyx22222003.page-vue-render.js index d34f2cf7590..b660567d145 100644 --- a/team/cyx22222003.page-vue-render.js +++ b/team/cyx22222003.page-vue-render.js @@ -5,6 +5,6 @@ with(this){return _c('div',{attrs:{"id":"app"}},[_c('header',{attrs:{"sticky":"" }; var pageVueStaticRenderFns = [function anonymous( ) { -with(this){return _c('footer',[_c('div',{staticClass:"text-center"},[_c('small',[_v("["),_c('span',[_c('strong',[_v("Powered by")])]),_v(" "),_c('img',{attrs:{"src":"https://markbind.org/favicon.ico","width":"30"}}),_v(" "),_c('a',{attrs:{"href":"https://markbind.org/"}},[_v("MarkBind 5.5.3")]),_v(", generated on Tue, 15 Oct 2024, 19:35:50 GMT+8]")])])])} +with(this){return _c('footer',[_c('div',{staticClass:"text-center"},[_c('small',[_v("["),_c('span',[_c('strong',[_v("Powered by")])]),_v(" "),_c('img',{attrs:{"src":"https://markbind.org/favicon.ico","width":"30"}}),_v(" "),_c('a',{attrs:{"href":"https://markbind.org/"}},[_v("MarkBind 5.5.3")]),_v(", generated on Tue, 15 Oct 2024, 23:08:02 GMT+8]")])])])} }]; \ No newline at end of file diff --git a/team/johndoe.html b/team/johndoe.html deleted file mode 100644 index 91951b1086f..00000000000 --- a/team/johndoe.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - CampusConnect - John Doe's Project Portfolio Page - AddressBook Level-3 - - - - - -

    Project: AddressBook Level 3

    AddressBook - Level 3 is a desktop address book application used for teaching Software Engineering principles. The user interacts with it using a CLI, and it has a GUI created with JavaFX. It is written in Java, and has about 10 kLoC.

    Given below are my contributions to the project.

    • New Feature: Added the ability to undo/redo previous commands.

      • What it does: allows the user to undo all previous commands one at a time. Preceding undo commands can be reversed by using the redo command.
      • Justification: This feature improves the product significantly because a user can make mistakes in commands and the app should provide a convenient way to rectify them.
      • Highlights: This enhancement affects existing commands and commands to be added in future. It required an in-depth analysis of design alternatives. The implementation too was challenging as it required changes to existing commands.
      • Credits: {mention here if you reused any code/ideas from elsewhere or if a third-party library is heavily used in the feature so that a reader can make a more accurate judgement of how much effort went into the feature}
    • New Feature: Added a history command that allows the user to navigate to previous commands using up/down keys.

    • Code contributed: RepoSense link

    • Project management:

      • Managed releases v1.3 - v1.5rc (3 releases) on GitHub
    • Enhancements to existing features:

      • Updated the GUI color scheme (Pull requests #33, #34)
      • Wrote additional tests for existing features to increase coverage from 88% to 92% (Pull requests #36, #38)
    • Documentation:

      • User Guide: -
        • Added documentation for the features delete and find #72
        • Did cosmetic tweaks to existing documentation of features clear, exit: #74
      • Developer Guide: -
        • Added implementation details of the delete feature.
    • Community:

      • PRs reviewed (with non-trivial review comments): #12, #32, #19, #42
      • Contributed to forum discussions (examples: 1, 2, 3, 4)
      • Reported bugs and suggestions for other teams in the class (examples: 1, 2, 3)
      • Some parts of the history feature I added was adopted by several other class mates (1, 2)
    • Tools:

      • Integrated a third party library (Natty) to the project (#42)
      • Integrated a new Github plugin (CircleCI) to the team repo
    • {you can add/remove categories in the list above}

    [Powered by MarkBind 5.5.3, generated on Tue, 15 Oct 2024, 19:35:50 GMT+8]
    - - - - - - - diff --git a/team/johndoe.page-vue-render.js b/team/johndoe.page-vue-render.js deleted file mode 100644 index 2326598127c..00000000000 --- a/team/johndoe.page-vue-render.js +++ /dev/null @@ -1,13 +0,0 @@ - - var pageVueRenderFn = function anonymous( -) { -with(this){return _c('div',{attrs:{"id":"app"}},[_c('header',{attrs:{"sticky":""}},[_c('navbar',{attrs:{"type":"dark"},scopedSlots:_u([{key:"brand",fn:function(){return [_c('a',{staticClass:"navbar-brand",attrs:{"href":"/tp/index.html","title":"Home"}},[_v("CampusConnect")])]},proxy:true},{key:"right",fn:function(){return [_c('li',[_c('form',{staticClass:"navbar-form"},[_c('searchbar',{attrs:{"data":searchData,"placeholder":"Search","on-hit":searchCallback,"menu-align-right":""}})],1)])]},proxy:true}])},[_v(" "),_c('li',[_c('a',{staticClass:"nav-link",attrs:{"href":"/tp/index.html"}},[_v("Home")])]),_v(" "),_c('li',[_c('a',{staticClass:"nav-link",attrs:{"href":"/tp/UserGuide.html"}},[_v("User Guide")])]),_v(" "),_c('li',[_c('a',{staticClass:"nav-link",attrs:{"href":"/tp/DeveloperGuide.html"}},[_v("Developer Guide")])]),_v(" "),_c('li',[_c('a',{staticClass:"nav-link",attrs:{"href":"/tp/AboutUs.html"}},[_v("About Us")])]),_v(" "),_c('li',[_c('a',{staticClass:"nav-link",attrs:{"href":"https://github.com/AY2425S1-CS2103T-F14a-4/tp","target":"_blank"}},[_c('span',[_c('span',{staticClass:"fab fa-github",attrs:{"aria-hidden":"true"}})])])])])],1),_v(" "),_c('div',{attrs:{"id":"flex-body"}},[_c('overlay-source',{attrs:{"id":"site-nav","tag-name":"nav","to":"site-nav"}},[_c('div',{staticClass:"site-nav-top"},[_c('div',{staticClass:"fw-bold mb-2",staticStyle:{"font-size":"1.25rem"}},[_v("Site Map")])]),_v(" "),_c('div',{staticClass:"nav-component slim-scroll"},[_c('site-nav',[_c('overlay-source',{staticClass:"site-nav-list site-nav-list-root",attrs:{"tag-name":"ul","to":"mb-site-nav"}},[_c('li',[_c('div',{staticClass:"site-nav-default-list-item site-nav-list-item-0",attrs:{"onclick":"handleSiteNavClick(this)"}},[_c('a',{attrs:{"href":"/tp/index.html"}},[_v("Home")])])]),_v(" "),_c('li',[_c('div',{staticClass:"site-nav-default-list-item site-nav-list-item-0",attrs:{"onclick":"handleSiteNavClick(this)"}},[_c('a',{attrs:{"href":"/tp/UserGuide.html"}},[_v("User Guide")]),_v(" "),_c('div',{staticClass:"site-nav-dropdown-btn-container"},[_c('i',{staticClass:"site-nav-dropdown-btn-icon site-nav-rotate-icon",attrs:{"onclick":"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();"}},[_c('span',{staticClass:"glyphicon glyphicon-menu-down",attrs:{"aria-hidden":"true"}})])])]),_c('ul',{staticClass:"site-nav-dropdown-container site-nav-dropdown-container-open site-nav-list"},[_c('li',[_c('div',{staticClass:"site-nav-default-list-item site-nav-list-item-1",attrs:{"onclick":"handleSiteNavClick(this)"}},[_c('a',{attrs:{"href":"/tp/UserGuide.html#quick-start"}},[_v("Quick Start")])])]),_v(" "),_c('li',[_c('div',{staticClass:"site-nav-default-list-item site-nav-list-item-1",attrs:{"onclick":"handleSiteNavClick(this)"}},[_c('a',{attrs:{"href":"/tp/UserGuide.html#features"}},[_v("Features")])])]),_v(" "),_c('li',[_c('div',{staticClass:"site-nav-default-list-item site-nav-list-item-1",attrs:{"onclick":"handleSiteNavClick(this)"}},[_c('a',{attrs:{"href":"/tp/UserGuide.html#faq"}},[_v("FAQ")])])]),_v(" "),_c('li',[_c('div',{staticClass:"site-nav-default-list-item site-nav-list-item-1",attrs:{"onclick":"handleSiteNavClick(this)"}},[_c('a',{attrs:{"href":"/tp/UserGuide.html#faq"}},[_v("Command Summary")])])])])]),_v(" "),_c('li',[_c('div',{staticClass:"site-nav-default-list-item site-nav-list-item-0",attrs:{"onclick":"handleSiteNavClick(this)"}},[_c('a',{attrs:{"href":"/tp/DeveloperGuide.html"}},[_v("Developer Guide")]),_v(" "),_c('div',{staticClass:"site-nav-dropdown-btn-container"},[_c('i',{staticClass:"site-nav-dropdown-btn-icon site-nav-rotate-icon",attrs:{"onclick":"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();"}},[_c('span',{staticClass:"glyphicon glyphicon-menu-down",attrs:{"aria-hidden":"true"}})])])]),_c('ul',{staticClass:"site-nav-dropdown-container site-nav-dropdown-container-open site-nav-list"},[_c('li',[_c('div',{staticClass:"site-nav-default-list-item site-nav-list-item-1",attrs:{"onclick":"handleSiteNavClick(this)"}},[_c('a',{attrs:{"href":"/tp/DeveloperGuide.html#acknowledgements"}},[_v("Acknowledgements")])])]),_v(" "),_c('li',[_c('div',{staticClass:"site-nav-default-list-item site-nav-list-item-1",attrs:{"onclick":"handleSiteNavClick(this)"}},[_c('a',{attrs:{"href":"/tp/DeveloperGuide.html#setting-up-getting-started"}},[_v("Setting Up")])])]),_v(" "),_c('li',[_c('div',{staticClass:"site-nav-default-list-item site-nav-list-item-1",attrs:{"onclick":"handleSiteNavClick(this)"}},[_c('a',{attrs:{"href":"/tp/DeveloperGuide.html#design"}},[_v("Design")])])]),_v(" "),_c('li',[_c('div',{staticClass:"site-nav-default-list-item site-nav-list-item-1",attrs:{"onclick":"handleSiteNavClick(this)"}},[_c('a',{attrs:{"href":"/tp/DeveloperGuide.html#implementation"}},[_v("Implementation")])])]),_v(" "),_c('li',[_c('div',{staticClass:"site-nav-default-list-item site-nav-list-item-1",attrs:{"onclick":"handleSiteNavClick(this)"}},[_c('a',{attrs:{"href":"/tp/DeveloperGuide.html#documentation-logging-testing-configuration-dev-ops"}},[_v("Documentation, logging, testing, configuration, dev-ops")])])]),_v(" "),_c('li',[_c('div',{staticClass:"site-nav-default-list-item site-nav-list-item-1",attrs:{"onclick":"handleSiteNavClick(this)"}},[_c('a',{attrs:{"href":"/tp/DeveloperGuide.html#appendix-requirements"}},[_v("Appendix: Requirements")])])]),_v(" "),_c('li',[_c('div',{staticClass:"site-nav-default-list-item site-nav-list-item-1",attrs:{"onclick":"handleSiteNavClick(this)"}},[_c('a',{attrs:{"href":"/tp/DeveloperGuide.html#appendix-instructions-for-manual-testing"}},[_v("Appendix: Instructions for manual testing")])])])])]),_v(" "),_c('li',[_c('div',{staticClass:"site-nav-default-list-item site-nav-list-item-0",attrs:{"onclick":"handleSiteNavClick(this)"}},[_v("Tutorials\n\n"),_c('div',{staticClass:"site-nav-dropdown-btn-container"},[_c('i',{staticClass:"site-nav-dropdown-btn-icon",attrs:{"onclick":"handleSiteNavClick(this.parentNode.parentNode, false); event.stopPropagation();"}},[_c('span',{staticClass:"glyphicon glyphicon-menu-down",attrs:{"aria-hidden":"true"}})])])]),_c('ul',{staticClass:"site-nav-dropdown-container site-nav-list"},[_c('li',[_c('div',{staticClass:"site-nav-default-list-item site-nav-list-item-1",attrs:{"onclick":"handleSiteNavClick(this)"}},[_c('a',{attrs:{"href":"/tp/tutorials/TracingCode.html"}},[_v("Tracing code")])])]),_v(" "),_c('li',[_c('div',{staticClass:"site-nav-default-list-item site-nav-list-item-1",attrs:{"onclick":"handleSiteNavClick(this)"}},[_c('a',{attrs:{"href":"/tp/tutorials/AddRemark.html"}},[_v("Adding a command")])])]),_v(" "),_c('li',[_c('div',{staticClass:"site-nav-default-list-item site-nav-list-item-1",attrs:{"onclick":"handleSiteNavClick(this)"}},[_c('a',{attrs:{"href":"/tp/tutorials/RemovingFields.html"}},[_v("Removing Fields")])])])])]),_v(" "),_c('li',[_c('div',{staticClass:"site-nav-default-list-item site-nav-list-item-0",attrs:{"onclick":"handleSiteNavClick(this)"}},[_c('a',{attrs:{"href":"/tp/AboutUs.html"}},[_v("About Us")])])])])],1)],1)]),_v(" "),_m(0),_v(" "),_c('overlay-source',{attrs:{"id":"page-nav","tag-name":"nav","to":"page-nav"}},[_c('div',{staticClass:"nav-component slim-scroll"})]),_v(" "),_c('scroll-top-button')],1),_v(" "),_m(1)])} -}; - var pageVueStaticRenderFns = [function anonymous( -) { -with(this){return _c('div',{attrs:{"id":"content-wrapper"}},[_c('h3',{attrs:{"id":"project-addressbook-level-3"}},[_v("Project: AddressBook Level 3"),_c('a',{staticClass:"fa fa-anchor",attrs:{"href":"#project-addressbook-level-3","onclick":"event.stopPropagation()"}})]),_v(" "),_c('p',[_v("AddressBook - Level 3 is a desktop address book application used for teaching Software Engineering principles. The user interacts with it using a CLI, and it has a GUI created with JavaFX. It is written in Java, and has about 10 kLoC.")]),_v(" "),_c('p',[_v("Given below are my contributions to the project.")]),_v(" "),_c('ul',[_c('li',[_c('p',[_c('strong',[_v("New Feature")]),_v(": Added the ability to undo/redo previous commands.")]),_v(" "),_c('ul',[_c('li',[_v("What it does: allows the user to undo all previous commands one at a time. Preceding undo commands can be reversed by using the redo command.")]),_v(" "),_c('li',[_v("Justification: This feature improves the product significantly because a user can make mistakes in commands and the app should provide a convenient way to rectify them.")]),_v(" "),_c('li',[_v("Highlights: This enhancement affects existing commands and commands to be added in future. It required an in-depth analysis of design alternatives. The implementation too was challenging as it required changes to existing commands.")]),_v(" "),_c('li',[_v("Credits: "),_c('em',[_v("{mention here if you reused any code/ideas from elsewhere or if a third-party library is heavily used in the feature so that a reader can make a more accurate judgement of how much effort went into the feature}")])])])]),_v(" "),_c('li',[_c('p',[_c('strong',[_v("New Feature")]),_v(": Added a history command that allows the user to navigate to previous commands using up/down keys.")])]),_v(" "),_c('li',[_c('p',[_c('strong',[_v("Code contributed")]),_v(": "),_c('a',{attrs:{"href":""}},[_v("RepoSense link")])])]),_v(" "),_c('li',[_c('p',[_c('strong',[_v("Project management")]),_v(":")]),_v(" "),_c('ul',[_c('li',[_v("Managed releases "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("v1.3")]),_v(" - "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("v1.5rc")]),_v(" (3 releases) on GitHub")])])]),_v(" "),_c('li',[_c('p',[_c('strong',[_v("Enhancements to existing features")]),_v(":")]),_v(" "),_c('ul',[_c('li',[_v("Updated the GUI color scheme (Pull requests "),_c('a',{attrs:{"href":""}},[_v("#33")]),_v(", "),_c('a',{attrs:{"href":""}},[_v("#34")]),_v(")")]),_v(" "),_c('li',[_v("Wrote additional tests for existing features to increase coverage from 88% to 92% (Pull requests "),_c('a',{attrs:{"href":""}},[_v("#36")]),_v(", "),_c('a',{attrs:{"href":""}},[_v("#38")]),_v(")")])])]),_v(" "),_c('li',[_c('p',[_c('strong',[_v("Documentation")]),_v(":")]),_v(" "),_c('ul',[_c('li',[_v("User Guide:\n"),_c('ul',[_c('li',[_v("Added documentation for the features "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("delete")]),_v(" and "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("find")]),_v(" "),_c('a',{attrs:{"href":""}},[_v("#72")])]),_v(" "),_c('li',[_v("Did cosmetic tweaks to existing documentation of features "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("clear")]),_v(", "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("exit")]),_v(": "),_c('a',{attrs:{"href":""}},[_v("#74")])])])]),_v(" "),_c('li',[_v("Developer Guide:\n"),_c('ul',[_c('li',[_v("Added implementation details of the "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("delete")]),_v(" feature.")])])])])]),_v(" "),_c('li',[_c('p',[_c('strong',[_v("Community")]),_v(":")]),_v(" "),_c('ul',[_c('li',[_v("PRs reviewed (with non-trivial review comments): "),_c('a',{attrs:{"href":""}},[_v("#12")]),_v(", "),_c('a',{attrs:{"href":""}},[_v("#32")]),_v(", "),_c('a',{attrs:{"href":""}},[_v("#19")]),_v(", "),_c('a',{attrs:{"href":""}},[_v("#42")])]),_v(" "),_c('li',[_v("Contributed to forum discussions (examples: "),_c('a',{attrs:{"href":""}},[_v("1")]),_v(", "),_c('a',{attrs:{"href":""}},[_v("2")]),_v(", "),_c('a',{attrs:{"href":""}},[_v("3")]),_v(", "),_c('a',{attrs:{"href":""}},[_v("4")]),_v(")")]),_v(" "),_c('li',[_v("Reported bugs and suggestions for other teams in the class (examples: "),_c('a',{attrs:{"href":""}},[_v("1")]),_v(", "),_c('a',{attrs:{"href":""}},[_v("2")]),_v(", "),_c('a',{attrs:{"href":""}},[_v("3")]),_v(")")]),_v(" "),_c('li',[_v("Some parts of the history feature I added was adopted by several other class mates ("),_c('a',{attrs:{"href":""}},[_v("1")]),_v(", "),_c('a',{attrs:{"href":""}},[_v("2")]),_v(")")])])]),_v(" "),_c('li',[_c('p',[_c('strong',[_v("Tools")]),_v(":")]),_v(" "),_c('ul',[_c('li',[_v("Integrated a third party library (Natty) to the project ("),_c('a',{attrs:{"href":""}},[_v("#42")]),_v(")")]),_v(" "),_c('li',[_v("Integrated a new Github plugin (CircleCI) to the team repo")])])]),_v(" "),_c('li',[_c('p',[_c('em',[_v("{you can add/remove categories in the list above}")])])])])])} -},function anonymous( -) { -with(this){return _c('footer',[_c('div',{staticClass:"text-center"},[_c('small',[_v("["),_c('span',[_c('strong',[_v("Powered by")])]),_v(" "),_c('img',{attrs:{"src":"https://markbind.org/favicon.ico","width":"30"}}),_v(" "),_c('a',{attrs:{"href":"https://markbind.org/"}},[_v("MarkBind 5.5.3")]),_v(", generated on Tue, 15 Oct 2024, 19:35:50 GMT+8]")])])])} -}]; - \ No newline at end of file diff --git a/team/justin.html b/team/justin.html index 1b5c346edee..7e68caf4209 100644 --- a/team/justin.html +++ b/team/justin.html @@ -4,7 +4,7 @@ - CampusConnect - Justin's Project Portfolio Page - AddressBook Level-3 + CampusConnect - Justin's Project Portfolio Page - CampusConnect Level-3 @@ -16,7 +16,7 @@ Search
    [Powered by MarkBind 5.5.3, generated on Tue, 15 Oct 2024, 19:35:50 GMT+8]
    +
  • Project: CampusConnect

    [Powered by MarkBind 5.5.3, generated on Tue, 15 Oct 2024, 23:08:02 GMT+8]
    diff --git a/team/justin.page-vue-render.js b/team/justin.page-vue-render.js index 7f316d58aa6..e58690a2756 100644 --- a/team/justin.page-vue-render.js +++ b/team/justin.page-vue-render.js @@ -5,9 +5,9 @@ with(this){return _c('div',{attrs:{"id":"app"}},[_c('header',{attrs:{"sticky":"" }; var pageVueStaticRenderFns = [function anonymous( ) { -with(this){return _c('div',{attrs:{"id":"content-wrapper"}},[_c('h3',{attrs:{"id":"project-addressbook-level-3"}},[_v("Project: AddressBook Level 3"),_c('a',{staticClass:"fa fa-anchor",attrs:{"href":"#project-addressbook-level-3","onclick":"event.stopPropagation()"}})])])} +with(this){return _c('div',{attrs:{"id":"content-wrapper"}},[_c('h3',{attrs:{"id":"project-campusconnect"}},[_v("Project: CampusConnect"),_c('a',{staticClass:"fa fa-anchor",attrs:{"href":"#project-campusconnect","onclick":"event.stopPropagation()"}})])])} },function anonymous( ) { -with(this){return _c('footer',[_c('div',{staticClass:"text-center"},[_c('small',[_v("["),_c('span',[_c('strong',[_v("Powered by")])]),_v(" "),_c('img',{attrs:{"src":"https://markbind.org/favicon.ico","width":"30"}}),_v(" "),_c('a',{attrs:{"href":"https://markbind.org/"}},[_v("MarkBind 5.5.3")]),_v(", generated on Tue, 15 Oct 2024, 19:35:50 GMT+8]")])])])} +with(this){return _c('footer',[_c('div',{staticClass:"text-center"},[_c('small',[_v("["),_c('span',[_c('strong',[_v("Powered by")])]),_v(" "),_c('img',{attrs:{"src":"https://markbind.org/favicon.ico","width":"30"}}),_v(" "),_c('a',{attrs:{"href":"https://markbind.org/"}},[_v("MarkBind 5.5.3")]),_v(", generated on Tue, 15 Oct 2024, 23:08:02 GMT+8]")])])])} }]; \ No newline at end of file diff --git a/team/krashkart.html b/team/krashkart.html index 2f6b12817ef..579cf791d05 100644 --- a/team/krashkart.html +++ b/team/krashkart.html @@ -4,7 +4,7 @@ - CampusConnect - John Doe's Project Portfolio Page - AddressBook Level-3 + CampusConnect - John Doe's Project Portfolio Page - CampusConnect Level-3 @@ -16,9 +16,9 @@ Search

    Project: AddressBook Level 3

    AddressBook - Level 3 is a desktop address book application used for teaching Software Engineering principles. The user interacts with it using a CLI, and it has a GUI created with JavaFX. It is written in Java, and has about 10 kLoC.

    Given below are my contributions to the project.

    • New Feature: Added the ability to undo/redo previous commands.

      • What it does: allows the user to undo all previous commands one at a time. Preceding undo commands can be reversed by using the redo command.
      • Justification: This feature improves the product significantly because a user can make mistakes in commands and the app should provide a convenient way to rectify them.
      • Highlights: This enhancement affects existing commands and commands to be added in future. It required an in-depth analysis of design alternatives. The implementation too was challenging as it required changes to existing commands.
      • Credits: {mention here if you reused any code/ideas from elsewhere or if a third-party library is heavily used in the feature so that a reader can make a more accurate judgement of how much effort went into the feature}
    • New Feature: Added a history command that allows the user to navigate to previous commands using up/down keys.

    • Code contributed: RepoSense link

    • Project management:

      • Managed releases v1.3 - v1.5rc (3 releases) on GitHub
    • Enhancements to existing features:

      • Updated the GUI color scheme (Pull requests #33, #34)
      • Wrote additional tests for existing features to increase coverage from 88% to 92% (Pull requests #36, #38)
    • Documentation:

      • User Guide: +
  • Project: CampusConnect

    CampusConnect is a desktop address book application used for teaching Software Engineering principles. The user interacts with it using a CLI, and it has a GUI created with JavaFX. It is written in Java, and has about 10 kLoC.

    Given below are my contributions to the project.

    • New Feature: Added the ability to undo/redo previous commands.

      • What it does: allows the user to undo all previous commands one at a time. Preceding undo commands can be reversed by using the redo command.
      • Justification: This feature improves the product significantly because a user can make mistakes in commands and the app should provide a convenient way to rectify them.
      • Highlights: This enhancement affects existing commands and commands to be added in future. It required an in-depth analysis of design alternatives. The implementation too was challenging as it required changes to existing commands.
      • Credits: {mention here if you reused any code/ideas from elsewhere or if a third-party library is heavily used in the feature so that a reader can make a more accurate judgement of how much effort went into the feature}
    • New Feature: Added a history command that allows the user to navigate to previous commands using up/down keys.

    • Code contributed: RepoSense link

    • Project management:

      • Managed releases v1.3 - v1.5rc (3 releases) on GitHub
    • Enhancements to existing features:

      • Updated the GUI color scheme (Pull requests #33, #34)
      • Wrote additional tests for existing features to increase coverage from 88% to 92% (Pull requests #36, #38)
    • Documentation:

      • User Guide:
        • Added documentation for the features delete and find #72
        • Did cosmetic tweaks to existing documentation of features clear, exit: #74
      • Developer Guide: -
        • Added implementation details of the delete feature.
    • Community:

      • PRs reviewed (with non-trivial review comments): #12, #32, #19, #42
      • Contributed to forum discussions (examples: 1, 2, 3, 4)
      • Reported bugs and suggestions for other teams in the class (examples: 1, 2, 3)
      • Some parts of the history feature I added was adopted by several other class mates (1, 2)
    • Tools:

      • Integrated a third party library (Natty) to the project (#42)
      • Integrated a new Github plugin (CircleCI) to the team repo
    • {you can add/remove categories in the list above}

    [Powered by MarkBind 5.5.3, generated on Tue, 15 Oct 2024, 19:35:50 GMT+8]
    +
    • Added implementation details of the delete feature.
  • Community:

    • PRs reviewed (with non-trivial review comments): #12, #32, #19, #42
    • Contributed to forum discussions (examples: 1, 2, 3, 4)
    • Reported bugs and suggestions for other teams in the class (examples: 1, 2, 3)
    • Some parts of the history feature I added was adopted by several other class mates (1, 2)
  • Tools:

    • Integrated a third party library (Natty) to the project (#42)
    • Integrated a new Github plugin (CircleCI) to the team repo
  • {you can add/remove categories in the list above}

  • [Powered by MarkBind 5.5.3, generated on Tue, 15 Oct 2024, 23:08:02 GMT+8]
    diff --git a/team/krashkart.page-vue-render.js b/team/krashkart.page-vue-render.js index 2326598127c..bb2518370f4 100644 --- a/team/krashkart.page-vue-render.js +++ b/team/krashkart.page-vue-render.js @@ -5,9 +5,9 @@ with(this){return _c('div',{attrs:{"id":"app"}},[_c('header',{attrs:{"sticky":"" }; var pageVueStaticRenderFns = [function anonymous( ) { -with(this){return _c('div',{attrs:{"id":"content-wrapper"}},[_c('h3',{attrs:{"id":"project-addressbook-level-3"}},[_v("Project: AddressBook Level 3"),_c('a',{staticClass:"fa fa-anchor",attrs:{"href":"#project-addressbook-level-3","onclick":"event.stopPropagation()"}})]),_v(" "),_c('p',[_v("AddressBook - Level 3 is a desktop address book application used for teaching Software Engineering principles. The user interacts with it using a CLI, and it has a GUI created with JavaFX. It is written in Java, and has about 10 kLoC.")]),_v(" "),_c('p',[_v("Given below are my contributions to the project.")]),_v(" "),_c('ul',[_c('li',[_c('p',[_c('strong',[_v("New Feature")]),_v(": Added the ability to undo/redo previous commands.")]),_v(" "),_c('ul',[_c('li',[_v("What it does: allows the user to undo all previous commands one at a time. Preceding undo commands can be reversed by using the redo command.")]),_v(" "),_c('li',[_v("Justification: This feature improves the product significantly because a user can make mistakes in commands and the app should provide a convenient way to rectify them.")]),_v(" "),_c('li',[_v("Highlights: This enhancement affects existing commands and commands to be added in future. It required an in-depth analysis of design alternatives. The implementation too was challenging as it required changes to existing commands.")]),_v(" "),_c('li',[_v("Credits: "),_c('em',[_v("{mention here if you reused any code/ideas from elsewhere or if a third-party library is heavily used in the feature so that a reader can make a more accurate judgement of how much effort went into the feature}")])])])]),_v(" "),_c('li',[_c('p',[_c('strong',[_v("New Feature")]),_v(": Added a history command that allows the user to navigate to previous commands using up/down keys.")])]),_v(" "),_c('li',[_c('p',[_c('strong',[_v("Code contributed")]),_v(": "),_c('a',{attrs:{"href":""}},[_v("RepoSense link")])])]),_v(" "),_c('li',[_c('p',[_c('strong',[_v("Project management")]),_v(":")]),_v(" "),_c('ul',[_c('li',[_v("Managed releases "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("v1.3")]),_v(" - "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("v1.5rc")]),_v(" (3 releases) on GitHub")])])]),_v(" "),_c('li',[_c('p',[_c('strong',[_v("Enhancements to existing features")]),_v(":")]),_v(" "),_c('ul',[_c('li',[_v("Updated the GUI color scheme (Pull requests "),_c('a',{attrs:{"href":""}},[_v("#33")]),_v(", "),_c('a',{attrs:{"href":""}},[_v("#34")]),_v(")")]),_v(" "),_c('li',[_v("Wrote additional tests for existing features to increase coverage from 88% to 92% (Pull requests "),_c('a',{attrs:{"href":""}},[_v("#36")]),_v(", "),_c('a',{attrs:{"href":""}},[_v("#38")]),_v(")")])])]),_v(" "),_c('li',[_c('p',[_c('strong',[_v("Documentation")]),_v(":")]),_v(" "),_c('ul',[_c('li',[_v("User Guide:\n"),_c('ul',[_c('li',[_v("Added documentation for the features "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("delete")]),_v(" and "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("find")]),_v(" "),_c('a',{attrs:{"href":""}},[_v("#72")])]),_v(" "),_c('li',[_v("Did cosmetic tweaks to existing documentation of features "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("clear")]),_v(", "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("exit")]),_v(": "),_c('a',{attrs:{"href":""}},[_v("#74")])])])]),_v(" "),_c('li',[_v("Developer Guide:\n"),_c('ul',[_c('li',[_v("Added implementation details of the "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("delete")]),_v(" feature.")])])])])]),_v(" "),_c('li',[_c('p',[_c('strong',[_v("Community")]),_v(":")]),_v(" "),_c('ul',[_c('li',[_v("PRs reviewed (with non-trivial review comments): "),_c('a',{attrs:{"href":""}},[_v("#12")]),_v(", "),_c('a',{attrs:{"href":""}},[_v("#32")]),_v(", "),_c('a',{attrs:{"href":""}},[_v("#19")]),_v(", "),_c('a',{attrs:{"href":""}},[_v("#42")])]),_v(" "),_c('li',[_v("Contributed to forum discussions (examples: "),_c('a',{attrs:{"href":""}},[_v("1")]),_v(", "),_c('a',{attrs:{"href":""}},[_v("2")]),_v(", "),_c('a',{attrs:{"href":""}},[_v("3")]),_v(", "),_c('a',{attrs:{"href":""}},[_v("4")]),_v(")")]),_v(" "),_c('li',[_v("Reported bugs and suggestions for other teams in the class (examples: "),_c('a',{attrs:{"href":""}},[_v("1")]),_v(", "),_c('a',{attrs:{"href":""}},[_v("2")]),_v(", "),_c('a',{attrs:{"href":""}},[_v("3")]),_v(")")]),_v(" "),_c('li',[_v("Some parts of the history feature I added was adopted by several other class mates ("),_c('a',{attrs:{"href":""}},[_v("1")]),_v(", "),_c('a',{attrs:{"href":""}},[_v("2")]),_v(")")])])]),_v(" "),_c('li',[_c('p',[_c('strong',[_v("Tools")]),_v(":")]),_v(" "),_c('ul',[_c('li',[_v("Integrated a third party library (Natty) to the project ("),_c('a',{attrs:{"href":""}},[_v("#42")]),_v(")")]),_v(" "),_c('li',[_v("Integrated a new Github plugin (CircleCI) to the team repo")])])]),_v(" "),_c('li',[_c('p',[_c('em',[_v("{you can add/remove categories in the list above}")])])])])])} +with(this){return _c('div',{attrs:{"id":"content-wrapper"}},[_c('h3',{attrs:{"id":"project-campusconnect"}},[_v("Project: CampusConnect"),_c('a',{staticClass:"fa fa-anchor",attrs:{"href":"#project-campusconnect","onclick":"event.stopPropagation()"}})]),_v(" "),_c('p',[_v("CampusConnect is a desktop address book application used for teaching Software Engineering principles. The user interacts with it using a CLI, and it has a GUI created with JavaFX. It is written in Java, and has about 10 kLoC.")]),_v(" "),_c('p',[_v("Given below are my contributions to the project.")]),_v(" "),_c('ul',[_c('li',[_c('p',[_c('strong',[_v("New Feature")]),_v(": Added the ability to undo/redo previous commands.")]),_v(" "),_c('ul',[_c('li',[_v("What it does: allows the user to undo all previous commands one at a time. Preceding undo commands can be reversed by using the redo command.")]),_v(" "),_c('li',[_v("Justification: This feature improves the product significantly because a user can make mistakes in commands and the app should provide a convenient way to rectify them.")]),_v(" "),_c('li',[_v("Highlights: This enhancement affects existing commands and commands to be added in future. It required an in-depth analysis of design alternatives. The implementation too was challenging as it required changes to existing commands.")]),_v(" "),_c('li',[_v("Credits: "),_c('em',[_v("{mention here if you reused any code/ideas from elsewhere or if a third-party library is heavily used in the feature so that a reader can make a more accurate judgement of how much effort went into the feature}")])])])]),_v(" "),_c('li',[_c('p',[_c('strong',[_v("New Feature")]),_v(": Added a history command that allows the user to navigate to previous commands using up/down keys.")])]),_v(" "),_c('li',[_c('p',[_c('strong',[_v("Code contributed")]),_v(": "),_c('a',{attrs:{"href":""}},[_v("RepoSense link")])])]),_v(" "),_c('li',[_c('p',[_c('strong',[_v("Project management")]),_v(":")]),_v(" "),_c('ul',[_c('li',[_v("Managed releases "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("v1.3")]),_v(" - "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("v1.5rc")]),_v(" (3 releases) on GitHub")])])]),_v(" "),_c('li',[_c('p',[_c('strong',[_v("Enhancements to existing features")]),_v(":")]),_v(" "),_c('ul',[_c('li',[_v("Updated the GUI color scheme (Pull requests "),_c('a',{attrs:{"href":""}},[_v("#33")]),_v(", "),_c('a',{attrs:{"href":""}},[_v("#34")]),_v(")")]),_v(" "),_c('li',[_v("Wrote additional tests for existing features to increase coverage from 88% to 92% (Pull requests "),_c('a',{attrs:{"href":""}},[_v("#36")]),_v(", "),_c('a',{attrs:{"href":""}},[_v("#38")]),_v(")")])])]),_v(" "),_c('li',[_c('p',[_c('strong',[_v("Documentation")]),_v(":")]),_v(" "),_c('ul',[_c('li',[_v("User Guide:\n"),_c('ul',[_c('li',[_v("Added documentation for the features "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("delete")]),_v(" and "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("find")]),_v(" "),_c('a',{attrs:{"href":""}},[_v("#72")])]),_v(" "),_c('li',[_v("Did cosmetic tweaks to existing documentation of features "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("clear")]),_v(", "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("exit")]),_v(": "),_c('a',{attrs:{"href":""}},[_v("#74")])])])]),_v(" "),_c('li',[_v("Developer Guide:\n"),_c('ul',[_c('li',[_v("Added implementation details of the "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("delete")]),_v(" feature.")])])])])]),_v(" "),_c('li',[_c('p',[_c('strong',[_v("Community")]),_v(":")]),_v(" "),_c('ul',[_c('li',[_v("PRs reviewed (with non-trivial review comments): "),_c('a',{attrs:{"href":""}},[_v("#12")]),_v(", "),_c('a',{attrs:{"href":""}},[_v("#32")]),_v(", "),_c('a',{attrs:{"href":""}},[_v("#19")]),_v(", "),_c('a',{attrs:{"href":""}},[_v("#42")])]),_v(" "),_c('li',[_v("Contributed to forum discussions (examples: "),_c('a',{attrs:{"href":""}},[_v("1")]),_v(", "),_c('a',{attrs:{"href":""}},[_v("2")]),_v(", "),_c('a',{attrs:{"href":""}},[_v("3")]),_v(", "),_c('a',{attrs:{"href":""}},[_v("4")]),_v(")")]),_v(" "),_c('li',[_v("Reported bugs and suggestions for other teams in the class (examples: "),_c('a',{attrs:{"href":""}},[_v("1")]),_v(", "),_c('a',{attrs:{"href":""}},[_v("2")]),_v(", "),_c('a',{attrs:{"href":""}},[_v("3")]),_v(")")]),_v(" "),_c('li',[_v("Some parts of the history feature I added was adopted by several other class mates ("),_c('a',{attrs:{"href":""}},[_v("1")]),_v(", "),_c('a',{attrs:{"href":""}},[_v("2")]),_v(")")])])]),_v(" "),_c('li',[_c('p',[_c('strong',[_v("Tools")]),_v(":")]),_v(" "),_c('ul',[_c('li',[_v("Integrated a third party library (Natty) to the project ("),_c('a',{attrs:{"href":""}},[_v("#42")]),_v(")")]),_v(" "),_c('li',[_v("Integrated a new Github plugin (CircleCI) to the team repo")])])]),_v(" "),_c('li',[_c('p',[_c('em',[_v("{you can add/remove categories in the list above}")])])])])])} },function anonymous( ) { -with(this){return _c('footer',[_c('div',{staticClass:"text-center"},[_c('small',[_v("["),_c('span',[_c('strong',[_v("Powered by")])]),_v(" "),_c('img',{attrs:{"src":"https://markbind.org/favicon.ico","width":"30"}}),_v(" "),_c('a',{attrs:{"href":"https://markbind.org/"}},[_v("MarkBind 5.5.3")]),_v(", generated on Tue, 15 Oct 2024, 19:35:50 GMT+8]")])])])} +with(this){return _c('footer',[_c('div',{staticClass:"text-center"},[_c('small',[_v("["),_c('span',[_c('strong',[_v("Powered by")])]),_v(" "),_c('img',{attrs:{"src":"https://markbind.org/favicon.ico","width":"30"}}),_v(" "),_c('a',{attrs:{"href":"https://markbind.org/"}},[_v("MarkBind 5.5.3")]),_v(", generated on Tue, 15 Oct 2024, 23:08:02 GMT+8]")])])])} }]; \ No newline at end of file