From 729b62d93affef0d53cac35f382c82952ee3343e Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 11 Nov 2024 07:08:21 +0000 Subject: [PATCH] deploy: eea376d0185bf2049bcb809c541f217031056b4d --- AboutUs.html | 4 ++-- AboutUs.page-vue-render.js | 4 ++-- Configuration.html | 2 +- Configuration.page-vue-render.js | 4 ++-- DevOps.html | 4 ++-- DevOps.page-vue-render.js | 4 ++-- DeveloperGuide.html | 7 ++++--- DeveloperGuide.page-vue-render.js | 12 +++++++++--- Documentation.html | 2 +- Documentation.page-vue-render.js | 4 ++-- Logging.html | 2 +- Logging.page-vue-render.js | 4 ++-- SettingUp.html | 4 ++-- SettingUp.page-vue-render.js | 4 ++-- Testing.html | 4 ++-- Testing.page-vue-render.js | 4 ++-- UserGuide.html | 4 ++-- UserGuide.page-vue-render.js | 4 ++-- index.html | 2 +- index.page-vue-render.js | 4 ++-- siteData.json | 1 + team/currynia.html | 4 ++-- team/currynia.page-vue-render.js | 4 ++-- team/dessnowy.html | 4 ++-- team/dessnowy.page-vue-render.js | 4 ++-- team/incogdino.html | 2 +- team/incogdino.page-vue-render.js | 4 ++-- team/swaminathanviswa.html | 4 ++-- team/swaminathanviswa.page-vue-render.js | 4 ++-- team/tohjh.html | 4 ++-- team/tohjh.page-vue-render.js | 4 ++-- 31 files changed, 65 insertions(+), 57 deletions(-) diff --git a/AboutUs.html b/AboutUs.html index 0ef65edce2e..b04d55611fa 100644 --- a/AboutUs.html +++ b/AboutUs.html @@ -14,12 +14,12 @@
We are a team based in the School of Computing, National University of Singapore.
You can reach us at the email e1249111[at]u.nus.edu
[github] +
We are a team based in the School of Computing, National University of Singapore.
You can reach us at the email e1249111[at]u.nus.edu
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.
clean
: Deletes the files created during the previous build tasks (e.g. files in the build
folder).
+
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.
clean
: Deletes the files created during the previous build tasks (e.g. files in the build
folder).
e.g. ./gradlew clean
shadowJar
: Uses the ShadowJar plugin to creat a fat JAR file in the build/lib
folder, if the current file is outdated.
-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.
./gradlew test
 — Runs all tests./gradlew clean test
 — Cleans the project and runs testsThis 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.
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.
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:
Checks are implemented as executable check-*
scripts within the .github
directory. The run-checks.sh
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.
Check scripts should print out errors in the format SEVERITY:FILENAME:LINE: MESSAGE
Check scripts must exit with a non-zero exit code if any errors occur.
Here are the steps to create a new release.
MainApp.java
.gradlew shadowJar
).v0.1
./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.
./gradlew test
 — Runs all tests./gradlew clean test
 — Cleans the project and runs testsThis 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.
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.
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:
Checks are implemented as executable check-*
scripts within the .github
directory. The run-checks.sh
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.
Check scripts should print out errors in the format SEVERITY:FILENAME:LINE: MESSAGE
Check scripts must exit with a non-zero exit code if any errors occur.
Here are the steps to create a new release.
MainApp.java
.gradlew shadowJar
).v0.1
Refer to the guide Setting up and getting started.
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:
UI
: The UI of the App.Logic
: The command executor.Model
: Holds the data of the App in memory.Storage
: Reads data from, and writes data to, the hard disk.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 n/John
.
Each of the four main components (also shown in the diagram above),
interface
with the same name as the Component.{Component Name}Manager
class (which follows the corresponding API interface
mentioned in the previous point.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.
The API of this component is specified in Ui.java
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.Model
data so that the UI can be updated with the modified data.Logic
component, because the UI
relies on the Logic
to execute commands.Model
component, as it displays Person
object residing in the Model
.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 n/John")
API call as an example.
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:
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.Command
object (more precisely, an object of one of its subclasses e.g., DeleteCommand
) which is executed by the LogicManager
.Model
when it is executed (e.g. to delete a person)..getStyleClass()
& .add()
methods in PersonCard.java to display the information clearly.Refer to the guide Setting up and getting started.
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:
UI
: The UI of the App.Logic
: The command executor.Model
: Holds the data of the App in memory.Storage
: Reads data from, and writes data to, the hard disk.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 n/John
.
Each of the four main components (also shown in the diagram above),
interface
with the same name as the Component.{Component Name}Manager
class (which follows the corresponding API interface
mentioned in the previous point.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.
The API of this component is specified in Ui.java
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.Model
data so that the UI can be updated with the modified data.Logic
component, because the UI
relies on the Logic
to execute commands.Model
component, as it displays Person
object residing in the Model
.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 n/John")
API call as an example.
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:
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.Command
object (more precisely, an object of one of its subclasses e.g., DeleteCommand
) which is executed by the LogicManager
.Model
when it is executed (e.g. to delete a person).Model
) to achieve.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:
AddressBookParser
class creates an XYZCommandParser
(XYZ
is a placeholder for the specific command name e.g., AddCommandParser
) which uses the other classes shown above to parse the user command and create a XYZCommand
object (e.g., AddCommand
) which the AddressBookParser
returns back as a Command
object.XYZCommandParser
classes (e.g., AddCommandParser
, DeleteCommandParser
, ...) inherit from the Parser
interface so that they can be treated similarly where possible e.g, during testing.API : Model.java
The Model
component,
Person
objects (which are contained in a UniquePersonList
object).Person
objects (e.g., results of a search query) as a separate filtered list which is exposed to outsiders as an unmodifiable ObservableList<Person>
that can be 'observed' e.g. the UI can be bound to this list so that the UI automatically updates when the data in the list change.UserPref
object that represents the user’s preferences. This is exposed to the outside as a ReadOnlyUserPref
objects.Model
represents data entities of the domain, they should make sense on their own without depending on other components)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.
API : Storage.java
The Storage
component,
AddressBookStorage
and UserPrefStorage
, which means it can be treated as either one (if only the functionality of only one is needed).Model
component (because the Storage
component's job is to save/retrieve objects that belong to the Model
)Classes used by multiple components are in the seedu.address.commons
package.
This section describes some noteworthy details on how certain features are implemented.
Target user profile:
Value proposition: manage contacts faster than a typical mouse/GUI driven app
Priorities: High (must have) - * * *
, Medium (nice to have) - * *
, Low (unlikely to have) - *
Priority | As a/an …​ | I want to …​ | So that …​ |
---|---|---|---|
* * * | CS2030S TA | store student's github username | I can easily reference them when grading assignments. |
* * * | user | add the student's contact number | I can easily reference them when I need to contact my students. |
* * * | CS2030S TA | add the contact details of other TAs | I can quickly reach out for help or collaboration. |
* * * | CS2030S TA | add contact details of professors | I can easily reach them for guidance or to pass on important information. |
* * * | CS2030S TA | delete contacts easily | I dont clutter the list with unwanted contacts. |
* * * | CS2030S TA | store the grades and progress of my students | I can keep track of which of my students need more guidance and follow up. |
* * * | CS2030S TA | store student's telegram username | I can easily reference them and contact them when needed to. |
* * * | CS2030S TA | see the student's MC or reasoning when they do not turn up for lessons | I can create make up lessons / check up on them. |
* * | CS2030S TA | have a function to hide the details of students that I do not need | I can only the the information that I want to see. |
* * | CS2030S TA | view the last modification date of student contact details | I can confirm the accuracy and recency of the information stored. |
* * | CS2030S TA | create contacts with optional fields | I can resepct the privacy of my students. |
* | CS2030S TA | search for a student’s GitHub username | I can quickly access their repository for grading and feedback. |
* | potential user | see the application populated with sample data | I can see how the app looks like when it is in use. |
* | CS2030S TA | put the contacts into different tabs | I can easily navigate between different types of contacts. |
* | CS2030S TA | use the command line interface to search for contacts | I can integrate the tool smoothly into my existing workflow. |
* | CS2030S TA | search for the contact details of professors/ other TAs | I can quickly contact them for help if needed. |
* | CS2030S TA | find my students house in time | I can offer them help in times of crisis. |
* | CS2030S TA | organise the contact of my students | I can view the details of each student with greater ease. |
* | CS2030S TA | import student contact information from a file | I can easily transfer data between devices. |
* | CS2030S TA | export student contact information to a file | I can backup or share contact details with other TAs or professors if needed. |
* | CS2030S TA | flag specific students for follow-up | I can easily identify students who may need additional support or guidance. |
* | CS2030S TA | choose to sort my students | I can group students based on their proficiency. |
* | CS2030S TA | filter the contact details that is shown | I can easily find the information of a particular group. |
* | CS2030S TA | filter contacts based on a certain criteria | I can access a specific subset of students that I want. |
* | CS2030S TA | tag students with custom labels | I can categorize students based on their progress or needs. |
* | CS2030S TA | use the command line to access my students work | have their work and contact and tags all tied together in one smooth workflow. |
* | experienced user | create shortcuts for commands that I use frequently | I can access the frequently used information quickly. |
* | new user | use a help function to check what this app offers | I can easily have the details of the commands to use in my fingertips. |
* | CS2030S TA | create automatic flags to indicate if a student's work is marked | I can monitor grading deadlines so that I can stay on top of my responsibilities without missing any critical dates. |
(For all use cases below, the System is the KonTActs
and the Actor is the user
, unless specified otherwise)
Use case: UC01 - Add contacts
MSS
User chooses to add a contact.
KonTActs requests for the contact details.
User enters the contact details.
KonTActs adds the new contact.
Use case ends.
Extensions
3a. KonTActs detects an error in the input format.
3a1.KonTActs requests for the corrected input.
3b2. User enters a new input.
Steps 3a1 - 3a2 are repeated until input format is correct.
Use cases resume from step 4.
Use case: UC02 - Delete contacts
Precondition
MSS
User indicates to delete a contact.
KonTActs deletes the contact and indicates success.
Use case ends.
Extensions
1a. KonTActs detects an error in the input.
1a1.KonTActs requests for the user to try again.
1a2. User enters the command again
Steps 1a1 - 1a2 are repeated until the input entered is correct.
Use case resumes from step 2.
Use case: UC03 - Add grades of students
Precondition
MSS
User chooses to add grades for a student.
KonTActs requests for details of the student alongside the assignment and grade.
User enters the requested details.
KonTActs updates the grade of the student.
Use case ends.
Extensions
4a. KonTActs detects an error in the entered data.
4a1. KonTActs requests for the correct data.
4a2. User enters new data.
Steps 4a1-4a2 are repeated until the data entered are correct.
Use case resumes from step 4.
Use case: UC04 - List contacts
MSS
Extensions
1a. User has previously filtered the contact list.
1a1. KonTActs displays the full contact list, removing the previous filters.
Use case ends.
1b. KonTActs detects an error (e.g., unable to retrieve contacts).
1b1. KonTActs displays an error message.
Use case ends.
Use case: UC05 - Edit contacts
MSS
TA chooses to edit a contact’s details.
KonTActs requests the contact’s identifier.
TA enters the identifier of the contact to update.
KonTActs displays the current details and requests the changes.
TA updates the relevant details.
KonTActs saves and displays the changes.
Use case ends.
Extensions
3a. KonTActs identifies that there is no such contact.
3a1. KonTActs requests for the correct data.
3a2. TA enters the new data.
Steps 3a1-3a2 are repeated until the data entered are correct.
Use case resumes from step 4.
4a. KonTActs identifies that the data to be updated is invalid.
4a1. KonTActs requests for the correct data.
4a2. TA enters new data
Steps 4a1-4a2 are repeated until the data entered are correct.
Use case resumes from step 5.
Use case: UC06 - Filter Contact List
MSS
User chooses to filter the contact list.
KonTActs requests the filter criteria (current overall grades, name, tele handle).
User enters the filter criteria.
KonTActs filters the contact list based on the entered criteria and displays the filtered list.
Use case ends.
Extensions
3a. KonTActs detects an error in the entered filter criteria (e.g., incorrect input - invalid score input).
3a1. KonTActs requests for the correct filter criteria.
3a2. Users enter new criteria.
Steps 3a1-3a2 are repeated until the criteria entered are valid.
Use case resumes from step 4.
*a. At any time, User chooses to cancel the filter action.
*a1. KonTActs stops the filter operation and returns to the unfiltered contact list by using list
Use case: UC07 - Export contacts
Precondition
MSS
User chooses to export the contact list.
User provides the file path.
KonTActs exports the contact list in CSV format and shows the number of people successfully exported.
Use case ends.
Extensions
2a. User enters an invalid path (e.g .pdf).
2a1. KonTActs displays an error message and request for user to provide a valid file path (e.g. must end with .csv)
2a2. User provides new file path
Step 2a1-2a2 are repeated until file path is valid
Use case resumes from step 3.
Use case: UC08 - Request for help
MSS
User inputs help command.
KonTActs shows a help page.
Use case ends.
Use case: UC09 - Tag students with custom labels
Precondition
MSS
User chooses to tag a student.
KonTActs requests for details of the student alongside the tag to label the student.
User enters the requested details.
KonTActs tags the student with the suggested label.
Use case ends.
Extensions
3a. KonTActs detects an error in the entered data.
3a1. KonTActs displays error message.
3a2. User enters new data.
Steps 3a1-3a2 are repeated until the data entered are correct.
Use case resumes from step 4.
Use case: UC10 - Import contacts from CSV file
Precondition
MSS
User chooses to import the contact list.
User gives the desired file (by its path).
KonTActs import the contact list from the specified file path and shows successful import.
Use case ends.
Extensions
2a. KonTActs detects an unsupported, corrupted file or a file without the valid headers.
2a1. KonTActs indicates it is unable to import from that file and gives a more specific error message.
2a2. User provides a new file path
Steps 2a1 - 2a2 are repeated until KonTActs is able to import contacts from the file.
Use case resumes from step 3.
2b. KonTActs detects invalid content in CSV file (e.g. Name/Email that does not comply with requirement, -Duplicate names)
2b1. KonTActs indicates it is unable to import from that file and gives a more specific error message.
2b2. User provides a new file path or update their CSV file
Steps 2b1 - 2b2 are repeated until KonTActs is able to import contacts from the file.
Use case resumes from step 3.
*a. At any time, User chooses to cancel the import.
*a1. KonTActs stops the import.
Use case ends.
Contact: An individual (e.g. student) stored in the system, typically having details regarding them such as their name, github username and etc.
Easy to use for new users: Intuitive commands that are easy to understand and UI that is easy to navigate.
Mainstream OS: Windows, Linux, Unix, MacOS.
Average typing speed: About 40 words per minute.
Uptime: The system should be operational during that period of time.
Between sessions: Every opening and closing of the application.
Proper documentation: A detailed user and developer guide which helps future users and developers to understand and use the code.
Typical usage: Normal or expected usage patterns of the application, such as the frequency of adding, deleting, or viewing contacts during everyday use.
Given below are instructions to test the app manually.
Note: These instructions only provide a starting point for testers to work on; +Duplicate names)
2b1. KonTActs indicates it is unable to import from that file and gives a more specific error message.
2b2. User provides a new file path or update their CSV file
Steps 2b1 - 2b2 are repeated until KonTActs is able to import contacts from the file.
Use case resumes from step 3.
*a. At any time, User chooses to cancel the import.
*a1. KonTActs stops the import.
Use case ends.
Contact: An individual (e.g. student) stored in the system, typically having details regarding them such as their name, github username and etc.
Easy to use for new users: Intuitive commands that are easy to understand and UI that is easy to navigate.
Mainstream OS: Windows, Linux, Unix, MacOS.
Average typing speed: About 40 words per minute.
Uptime: The system should be operational during that period of time.
Between sessions: Every opening and closing of the application.
Proper documentation: A detailed user and developer guide which helps future users and developers to understand and use the code.
Typical usage: Normal or expected usage patterns of the application, such as the frequency of adding, deleting, or viewing contacts during everyday use.
Team member count: 5
kontacts.json
file manually to add or remove assignment details. This could be an issue as the information keyed in may be incorrect. We are planning to create commands which can add/edit assignment details (such as assignment name Ex04
and its respective maxGrade
fields) to the assignment.json
file. This is to make the adding/editing of new assignments easier and prevent wrong information being entered.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.
Initial launch
Download the jar file and copy into an empty folder
Double-click the jar file Expected: Shows the GUI with a set of sample contacts. The window size may not be optimum.
Saving window preferences
Resize the window to an optimum size. Move the window to a different location. Close the window.
Re-launch the app by double-clicking the jar file.
Expected: The most recent window size and location is retained.
{ more test cases …​ }
Deleting a person while all persons are being shown
Prerequisites: List all persons using the list
command. Multiple persons in the list.
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.
Test case: delete 0
Expected: No person is deleted. Error details shown in the status message. Status bar remains the same.
Other incorrect delete commands to try: delete
, delete x
, ...
(where x is larger than the list size)
-Expected: Similar to previous.
{ more test cases …​ }
Dealing with missing/corrupted data files
{ more test cases …​ }
{ more test cases …​ }
Dealing with missing/corrupted data files
{ more test cases …​ }
docs/
folder contains the source files for the documentation website.Style guidance:
Converting to PDF
docs/
folder contains the source files for the documentation website.Style guidance:
Converting to PDF
java.util.logging
package for logging.LogsCenter
class is used to manage the logging levels and logging destinations.Logger
for a class can be obtained using LogsCenter.getLogger(Class)
which will log messages according to the specified logging level..log
file.logLevel
setting in the configuration file (See the Configuration guide section).java.util.logging
package for logging.LogsCenter
class is used to manage the logging levels and logging destinations.Logger
for a class can be obtained using LogsCenter.getLogger(Class)
which will log messages according to the specified logging level..log
file.logLevel
setting in the configuration file (See the Configuration guide section).Caution: +
Caution: Follow the steps in the following guide precisely. Things will not work out if you deviate in some steps.
First, fork this repo, and clone the fork into your computer.
If you plan to use Intellij IDEA (highly recommended):
seedu.address.Main
and try a few commands.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.
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 KonTActs’s architecture.
Do the tutorials -These tutorials will help you get acquainted with the codebase.
There are two ways to run tests.
src/test/java
folder and choose Run 'All Tests'
Run 'ABC'
gradlew clean test
(Mac/Linux: ./gradlew clean test
)Link: Read this Gradle Tutorial from the se-edu/guides to learn more about using Gradle.
This project has three types of tests:
seedu.address.commons.StringUtilTest
seedu.address.storage.StorageManagerTest
seedu.address.logic.LogicManagerTest
seedu.address.logic.LogicManagerTest
KonTActs is a desktop app designed for CS2030S Teaching Assistants (TAs) who works at the National University of Singapore, School of Computing.
KonTActs streamlines contact management, helping you keep track of your students contact, attendance and assignment information more effectively compared to traditional GUI apps.
KonTActs main features includes:
KonTActs optimization features:
To get started,
Ensure you have Java 17
or above installed in your Computer. Refer here for the specific version.
Download the latest .jar
file from here.
Copy the file to the folder you want to use as the home folder for KonTActs.
Open a command terminal, cd
into home folder you put the jar file in, and enter java -jar KonTActs.jar
to run the application and type view name/Alex Yeoh
.
+
KonTActs is a desktop app designed for CS2030S Teaching Assistants (TAs) who works at the National University of Singapore, School of Computing.
KonTActs streamlines contact management, helping you keep track of your students contact, attendance and assignment information more effectively compared to traditional GUI apps.
KonTActs main features includes:
KonTActs optimization features:
To get started,
Ensure you have Java 17
or above installed in your Computer. Refer here for the specific version.
Download the latest .jar
file from here.
Copy the file to the folder you want to use as the home folder for KonTActs.
Open a command terminal, cd
into home folder you put the jar file in, and enter java -jar KonTActs.jar
to run the application and type view name/Alex Yeoh
.
A interface similar to the one below should appear in a few seconds. Note how the app contains some sample data.
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.
mark name/Alex Yeoh week/0
: Marks Alex Yeoh
attendance in KonTActs.
delete name/Bernice Yu
: Deletes Bernice Yu
from KonTActs.
addGrade name/Alex Yeoh assignment/Ex01 score/9
: Assigns and adds Ex01
with a score of 9 to Alex Yeoh
.
clear
: Deletes all contacts. THIS IS AN IRREVERSIBLE ACTION.
Refer to the Features below for details of each command.
Action | Format, Examples |
---|---|
Add | add name/NAME email/EMAIL telegram/TELEGRAM [tag/TAG]…​ github/GITHUB e.g., add name/James Ho email/jamesho@example.com telegram/@James tag/friend tag/colleague github/james-cool |
Clear | clear This is an IRREVERSIBLE action! |
Delete | delete name/NAME e.g., delete name/James |
Edit | edit INDEX [name/NAME] [email/EMAIL] [telegram/TELEGRAM] [tag/TAG]…​ [github/GITHUB] e.g., edit 2 name/James Lee email/jameslee@example.com |
Find | find KEYWORD [MORE_KEYWORDS] e.g., find James Jake |
Filter | filter tag/[TAG] tag/[MORE_TAG]…​ e.g., filter tag/friends tag/family |
List | list |
Help | help |
View | view [name/NAME] e.g., view name/John Doe |
Github | github name/NAME e.g., github name/Harry |
Mark | mark name/NAME week/WEEK_NUMBER e.g. mark name/John Doe week/1 |
Unmark | unmark name/NAME week/WEEK_NUMBER e.g. unmark name/John Doe week/1 |
Sort | sort FIELD order/ORDER e.g. sort name order/asc |
Import | import path/CSV_FILE_PATH e.g import path/user/data/xxx.csv |
Export | export path/DESIRED_FILE_DESTINATION e.g export path/user/data/xxx.csv |
Command History | ↑ and ↓ |
Add grade | addGrade name/NAME assignment/ASSIGNMENT_NAME score/SCORE e.g. addGrade n/JohnDoe assignment/Ex01 score/5 |
Remove grade | removeGrade name/NAME assignment/ASSIGNMENT_NAME e.g. removeGrade name/John Doe assignment/Ex01 |
All parameters in KonTActs come equipped with their equivalent shortcuts.
Parameter | Shortcut |
---|---|
name/ | n/ |
email/ | e/ |
tag/ | t/ |
assignment/ | a/ |
score/ | s/ |
telegram/ | tele/ |
github/ | g/ |
week/ | w/ |
order/ | o/ |
path/ | p/ |
All commands supports shortcut parameters as long as they require the parameter.
This is illustrated in the examples of the individual commands.
Most commands in KonTActs come equipped with their equivalent shortcuts.
Command | Shortcut |
---|---|
mark | m |
unmark | um |
import | im |
export | ex |
find | fd |
filter | f |
view | v |
addGrade | ag |
removeGrade | rg |
delete | rm |
edit | e |
gitHub | git |
Notes about the command format:
Words in UPPER_CASE
are the parameters supplied by you.
@@ -73,7 +73,7 @@
as the input score is greater than the max, as specified in the assignment.json
file.
addGrade n/JohnDoe a/Ex05 s/5
will not add the assignment to contact JohnDoe
as the assignment is not specified assignment.json
Calling addGrade
without any fields will show the list of assignments in assignment.json
.
removeGrade
Removes an assignment and its grades from a contact.
Format: removeGrade name/NAME assignment/ASSIGNMENT_NAME
Shortcut: rg n/NAME a/ASSIGNMENT_NAME
Examples:
Assuming John Doe has Ex01
assignment with a score of 5
.
Calling removeGrade name/John Doe assignment/Ex01
will remove the Ex01
assignment from contact John Doe. Alternatively, rg n/John Doe a/Ex01
will do the same with the shortcut command and paramter.
Calling removeGrade n/John Doe a/Ex01
again will throw an error since the assignment has already been removed.
To add a new assignment, refer to addGrade
command above.
exit
Exits the program.
Format: exit
KonTActs data are automatically saved in the hard disk after every command that changes data. You do not need to save the data manually.
However, it is always good practice to have a local backup 😄. You can do this with the export command.
KonTActs data are saved automatically as a JSON file [JAR file location]/data/kontacts.json
.
Recommended for more advanced and seasoned users
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 KonTActs home folder. Alternatively, you can use the export command to export the data into a CSV file and import the CSV file into your other device.
Q: Why are duplicate names not allowed?
A: KonTActs identifies the students by their unique name to add grades or take attendance internally. This makes it not possible for KonTActs to accept duplicate names.
Furthermore, we believe that duplicate names are better managed based on how the tutor identifies them. Different people have different method of remembering people with the same name. For instance, given two John
s, a tutor might identify them physically as John 1
and John 2
or by their surname, John Doe
and John Tan
. This identification should also be reflected in KonTActs to make it easy to distinguish the two students.
Q: Why are duplicate fields like Email, Telegram and Github usernames allowed?
A: KonTActs recognizes that students may use the same usernames and emails across different points of contact. To provide greater flexibility in the application, KonTActs permits duplicate entries for email addresses, Telegram handles, and GitHub usernames.
preferences.json
file created by the application before running the application again.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.'
to escape from the command function. For example: typing '@james
.
-view
. This is intended so that the list view does not become cluttered with too much information./
characters will cause konTActs to show an error message although a person can legally have /
in their legal name such as Kumar S/O Mahesh
. This is a limitation within konTActs as it uses the /
charcter internally. The solution for this is to totally omit the /
altogether. In this case, the name may be added as Kumar SO Mahesh
or Kumar son of Mahesh
depending on your preference.view
. This is intended so that the list view does not become cluttered with too much information./
characters will cause konTActs to show an error message although a person can legally have /
in their legal name such as Kumar S/O Mahesh
. This is a limitation within konTActs as it uses the /
charcter internally. The solution for this is to totally omit the /
altogether. In this case, the name may be added as Kumar SO Mahesh
or Kumar son of Mahesh
depending on your preference.KonTActs is a desktop application for CS2030 teaching assistants to manage your students', fellow TAs', and professors' contact details. While it has a GUI, most of the user interactions happen using a CLI (Command Line Interface).
Acknowledgements
This project is based on the AddressBook-Level3 project created by the SE-EDU initiative.
KonTActs is a desktop application for CS2030 teaching assistants to manage your students', fellow TAs', and professors' contact details. While it has a GUI, most of the user interactions happen using a CLI (Command Line Interface).
Acknowledgements
This project is based on the AddressBook-Level3 project created by the SE-EDU initiative.
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.
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:
v1.3
- v1.5rc
(3 releases) on GitHubEnhancements to existing features:
Documentation:
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.
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:
v1.3
- v1.5rc
(3 releases) on GitHubEnhancements to existing features:
Documentation:
Community:
Tools:
{you can add/remove categories in the list above}
delete
feature.Community:
Tools:
{you can add/remove categories in the list above}
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.
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:
v1.3
- v1.5rc
(3 releases) on GitHubEnhancements to existing features:
Documentation:
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.
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:
v1.3
- v1.5rc
(3 releases) on GitHubEnhancements to existing features:
Documentation:
Community:
Tools:
{you can add/remove categories in the list above}
delete
feature.Community:
Tools:
{you can add/remove categories in the list above}
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.
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.
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.
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:
v1.3
- v1.5rc
(3 releases) on GitHubEnhancements to existing features:
Documentation:
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.
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:
v1.3
- v1.5rc
(3 releases) on GitHubEnhancements to existing features:
Documentation:
Community:
Tools:
{you can add/remove categories in the list above}
delete
feature.Community:
Tools:
{you can add/remove categories in the list above}
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.
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:
v1.3
- v1.5rc
(3 releases) on GitHubEnhancements to existing features:
Documentation:
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.
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:
v1.3
- v1.5rc
(3 releases) on GitHubEnhancements to existing features:
Documentation:
Community:
Tools:
{you can add/remove categories in the list above}
delete
feature.Community:
Tools:
{you can add/remove categories in the list above}