Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[T7][W11-C2] #117

Open
wants to merge 142 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
142 commits
Select commit Hold shift + click to select a range
f130dff
Update README.md to point to updated Build Status
burnflare Oct 1, 2016
cfb9b81
Delete address, email and phone class from model
rachx Oct 3, 2016
1150601
Remove Phone, Email and Address object from Person class
rachx Oct 3, 2016
9ce954f
Remove Phone, Email and Address dependencies from ReadOnlyPerson inte…
rachx Oct 3, 2016
69fd489
Remove phone, email and address from XmlAdaptedPerson class in storage
rachx Oct 3, 2016
6f30a25
Remove phone, email and address from Add Command in logic
rachx Oct 3, 2016
45ae644
Update Parser to remove pattern matching and grouping for phone, emai…
rachx Oct 3, 2016
2f451bf
Remove phone, address and email from Personcard class in UI
rachx Oct 3, 2016
068c64a
Remove phone, email and address objects from Logic Manager Test class…
rachx Oct 3, 2016
f4aa565
Remove phone, email and address from TestUtil and Person Card Handle
rachx Oct 3, 2016
b3a9a78
Remove phone, address and email from person list card fxml
rachx Oct 3, 2016
88a286d
Update ContactUs.md
burnflare Oct 5, 2016
8a0aaad
Update user guide
burnflare Oct 5, 2016
43c179a
Update AboutUs.md
burnflare Oct 5, 2016
3d02db8
Rename all AddressBook related classes to Agendum Todo list
burnflare Oct 5, 2016
f0af50b
Update AboutUs.md (#16)
burnflare Oct 6, 2016
3d78803
Add a line in about us and rotated image (#19)
rachx Oct 6, 2016
5b82dcf
Restore section in user guide (#14)
INCENDE Oct 6, 2016
1e29e9b
Update Developer Guide (#20)
INCENDE Oct 7, 2016
680d8b1
Merge remote-tracking branch 'upstream/master'
burnflare Oct 8, 2016
8bfae07
Update coveralls badge in README.md
burnflare Oct 8, 2016
3299e58
Add time and isCompleted attributes and corresponding getter and sett…
rachx Oct 8, 2016
16540c7
Fix typo in message name constraints
rachx Oct 8, 2016
33f1047
Update the model to support mark command, update TestTask.java and ad…
rachx Oct 8, 2016
ea360f3
Add Mark command and update XmlAdaptedTask to show if a task is compl…
rachx Oct 8, 2016
82b7029
Add rename task and unmark task command. Add supporting unmark, renam…
rachx Oct 8, 2016
977b53f
Update class header comments for delete/mark/unmark (replace it's wit…
rachx Oct 8, 2016
55598b0
Select incorrect command text when there is an error (UI modification)
rachx Oct 8, 2016
84c1d5b
Update rename_args regex, remove unnecessay updateFilteredListToShowA…
rachx Oct 8, 2016
23cb5e4
Add completion status to TestTask and TaskBuilder
rachx Oct 8, 2016
e727475
Update ReadOnlyTask isSameStateAs comparison
rachx Oct 9, 2016
3943394
remove trailing whitespaces
rachx Oct 9, 2016
c19bad5
Rename expectedAB to expectedTDL in LogicManagerTest
rachx Oct 9, 2016
c9ebffe
Update isCompleted, startDateTime and endDateTime in TestTask constru…
rachx Oct 9, 2016
33af622
Update ReadOnlyTask isSameStateAs to account for null in startDateTim…
rachx Oct 9, 2016
f57f43f
Add GUI RenameCommandTest stub
rachx Oct 9, 2016
de310a2
Add MarkCommandTest stub
rachx Oct 9, 2016
78ec3f6
Rename constant in unmark command
rachx Oct 9, 2016
f084ba7
Update unique task list (unmark task function) to replace the unmarke…
rachx Oct 9, 2016
9658269
Add logic test for mark and unmark command
rachx Oct 9, 2016
fe5e060
Add test for rename command in logic component
rachx Oct 9, 2016
27ffff4
Remove trailing whitespaces
rachx Oct 9, 2016
eb0398c
Update rename command result
rachx Oct 9, 2016
0061f96
update ui to reflect marked/unmarked task
rachx Oct 9, 2016
9d9b5ea
remove (done) in task card ui
rachx Oct 10, 2016
c9c31f4
Remove isNotCompleted() method
rachx Oct 10, 2016
d37c4bd
revert ui changes
rachx Oct 10, 2016
1d32110
Use optionals for start and end date time
rachx Oct 10, 2016
21e70ec
update schedule task to use optionals
rachx Oct 10, 2016
ca48531
Update docs (#44)
INCENDE Oct 11, 2016
80d8f4d
Remove `/` delimiter for add commands (#56)
burnflare Oct 13, 2016
9f2b405
Update documentation (#59)
INCENDE Oct 14, 2016
b78d20f
Update readme
Oct 14, 2016
6690f6a
Update developer guide
Oct 14, 2016
2e94296
Update diagrams
Oct 14, 2016
13eb743
Update readme
Oct 14, 2016
816ee94
Update readme
Oct 14, 2016
c61df14
Update readme
Oct 14, 2016
6c430a4
Replace rename task and schedule task in model with update task.
rachx Oct 15, 2016
1940c51
Update Developer Guide (#72)
INCENDE Oct 17, 2016
6cc2721
update xml adapted task to store time
rachx Oct 15, 2016
bc51304
Remove tags support in Agendum (#74)
burnflare Oct 18, 2016
a5ec10d
Support multiple tasks marking unmarking and deleting (#64)
rachx Oct 18, 2016
ba8f4c1
Update guides (#82)
rachx Oct 19, 2016
1218386
Extend add command with time support (#49)
burnflare Oct 19, 2016
93c7da7
Store Command - Custom Storage Location (#46)
INCENDE Oct 19, 2016
58671b0
Support undo command (#73)
rachx Oct 19, 2016
7cf8f6f
Major UI Updates (#43)
burnflare Oct 19, 2016
596b55c
Update user guide and developer guide individual sections (#97)
rachx Oct 22, 2016
cb14475
Clean up model class and update Logic Manager Test to deal with sorte…
rachx Oct 22, 2016
8eb1e38
Diagrams for storage component (#99)
INCENDE Oct 23, 2016
bbd243a
Update logic manager test add logging for model (#101)
rachx Oct 23, 2016
a2267db
Modify store command (#96)
INCENDE Oct 23, 2016
6ea4e73
Add Codacy to Readme
burnflare Oct 23, 2016
8cafa51
Fix the logic between result pop up and mainwindow (#108)
fanwgwg Oct 25, 2016
a20eaa3
Tag author rachael (#109)
rachx Oct 25, 2016
7b54e20
Command line history (#102)
fanwgwg Oct 25, 2016
2ac246c
Tag author weiguang (#110)
fanwgwg Oct 25, 2016
a439421
Tag methods with author @burnflare
burnflare Oct 25, 2016
614aa8c
Merge branch 'master' of github.com:CS2103AUG2016-W11-C2/main
burnflare Oct 25, 2016
09ce26c
Load command (#92)
INCENDE Oct 26, 2016
2312264
Modify prepareAdd in Parser (#95)
rachx Oct 26, 2016
2a87483
Add collate (#116)
rachx Oct 26, 2016
3b3470f
Update store command (#121)
INCENDE Oct 26, 2016
20430b7
Update .travis.yml
burnflare Oct 27, 2016
e0cd08f
Smart command suggestion (#113)
burnflare Oct 27, 2016
e3526da
Use reflection instead of hardcoding a list of commands (#127)
burnflare Oct 27, 2016
6d0d840
Midnight time bug (#125)
burnflare Oct 27, 2016
33bb4af
save last updated time
rachx Oct 24, 2016
43a7b70
add absolute sign
rachx Oct 26, 2016
2a65992
Sort test tasks, make task builder create tasks with the same time, c…
rachx Oct 27, 2016
97eb806
add missing bracket
rachx Oct 27, 2016
65041a8
Sort help window results (#133)
burnflare Oct 27, 2016
04f91b1
Remove clear command (#135)
burnflare Oct 28, 2016
816d879
Remove unnecessary files from repo (#141)
burnflare Oct 28, 2016
f325aa6
Change addressbooklevel-4 to Agendum (#143)
INCENDE Oct 28, 2016
08750b5
Reorganise files created by agendum (#144)
INCENDE Oct 28, 2016
72e8c38
Add tab key for auto complete (#146)
fanwgwg Oct 28, 2016
0b5b116
Update helpwindow (#147)
fanwgwg Oct 28, 2016
332d47c
fix codacy suggestions (#112)
rachx Oct 29, 2016
d1c97c0
Update UserGuide.md (#154)
burnflare Oct 29, 2016
8e85531
Reset previous to do list stack after loading a new file (#157)
rachx Oct 29, 2016
1b4b450
More codacy improvements (#165)
burnflare Oct 30, 2016
4b8c469
Remove select command (#168)
INCENDE Oct 30, 2016
7fead99
Improve codacy score (#170)
burnflare Oct 30, 2016
403ae6f
Remove url util related files (#172)
INCENDE Oct 30, 2016
2e3b451
add sample data (#171)
INCENDE Oct 30, 2016
3da801b
Our 0.3/0.4 ui (#128)
rachx Oct 30, 2016
7b30b2b
Somw ui enhancement (#173)
fanwgwg Oct 30, 2016
68b66bd
Update messages of all commands (#151)
rachx Oct 30, 2016
2ff3016
sort by task time only if uncompleted (#186)
rachx Oct 31, 2016
261074c
Tag @burnflrae code to address #175
burnflare Nov 1, 2016
7ca3a2f
Fix code based on feedback (#187)
INCENDE Nov 1, 2016
7359380
Update model (#188)
rachx Nov 1, 2016
b65d1bc
Add alias command (#139)
rachx Nov 1, 2016
168f26e
Addressing a0148031r comments (#191)
fanwgwg Nov 1, 2016
4481f72
Helpwindow integration (#190)
fanwgwg Nov 1, 2016
4101954
Task highlighting (#179)
fanwgwg Nov 1, 2016
fbf9984
Addressing tutor comments (#189)
burnflare Nov 2, 2016
e78468e
Update collate
burnflare Nov 2, 2016
46c5cd3
Merge branch 'master' of github.com:CS2103AUG2016-W11-C2/main
burnflare Nov 2, 2016
a999708
Fix codacy error level problems (#196)
INCENDE Nov 3, 2016
31cc8a9
Change config filepath for tests (#195)
INCENDE Nov 4, 2016
6752567
Ui enhancements (#194)
fanwgwg Nov 5, 2016
284de28
Improve test coverage - Add unit tests (#174)
INCENDE Nov 5, 2016
ceff169
Code refactoring for A0133367E (#198)
rachx Nov 6, 2016
cef6251
Google Calendar Integration (#192)
burnflare Nov 6, 2016
9faec8f
Project file cleanup (#207)
burnflare Nov 6, 2016
1de625d
Run collate scripts again
burnflare Nov 6, 2016
d212718
Some tests updates (#210)
fanwgwg Nov 6, 2016
09305c5
Emegency patch: Disable GCal tests (#213)
burnflare Nov 6, 2016
51a8032
@burnflare's collate changes (#216)
burnflare Nov 6, 2016
519a0b8
Improve coverage for Command classes (#209)
burnflare Nov 6, 2016
1c6265b
more minor refactoring (#211)
rachx Nov 6, 2016
529a4b8
Fix AddParser (#204)
burnflare Nov 6, 2016
0834fc1
Manual testing folder (#205)
INCENDE Nov 7, 2016
541f948
update add command format message (#218)
rachx Nov 7, 2016
6b22f47
Some refactoring for the ui code (#215)
fanwgwg Nov 7, 2016
185b135
Address GCal Flaky tests (#214)
burnflare Nov 7, 2016
fb0f9c1
Update docs (#149)
INCENDE Nov 7, 2016
a82a738
Final project collation (#219)
burnflare Nov 7, 2016
274e017
Fix test scripts (#221)
rachx Nov 7, 2016
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
4 changes: 2 additions & 2 deletions .project
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>addressbook-level4</name>
<comment>Project addressbook-level4 created by Buildship.</comment>
<name>Agendum</name>
<comment>Agendum created by Buildship.</comment>
<projects>
</projects>
<buildSpec>
Expand Down
5 changes: 5 additions & 0 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,3 +11,8 @@ addons:
apt:
packages:
- oracle-java8-installer

notifications:
email:
on_success: change
on_failure: always
55 changes: 34 additions & 21 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,34 +1,47 @@
[![Build Status](https://travis-ci.org/se-edu/addressbook-level4.svg?branch=master)](https://travis-ci.org/se-edu/addressbook-level4)
[![Coverage Status](https://coveralls.io/repos/github/se-edu/addressbook-level4/badge.svg?branch=master)](https://coveralls.io/github/se-edu/addressbook-level4?branch=master)
[![Build Status](https://travis-ci.org/CS2103AUG2016-W11-C2/main.svg?branch=master)](https://travis-ci.org/CS2103AUG2016-W11-C2/main)
[![Coverage Status](https://coveralls.io/repos/github/CS2103AUG2016-W11-C2/main/badge.svg?branch=master)](https://coveralls.io/github/CS2103AUG2016-W11-C2/main?branch=master)
[![Codacy Badge](https://api.codacy.com/project/badge/Grade/b2c2cb7e938f4d9eb626926dc3670f3c)](https://www.codacy.com/app/vishnu/main?utm_source=github.com&amp;utm_medium=referral&amp;utm_content=CS2103AUG2016-W11-C2/main&amp;utm_campaign=Badge_Grade)

# Address Book (Level 4)
# Agendum

<img src="docs/images/Ui.png" width="600"><br>
<img src="docs/images/Ui.png" width="800"><br>

* This is a desktop Address Book application. It has a GUI but most of the user interactions happen using
a CLI (Command Line Interface).
* It is a Java sample application intended for students learning Software Engineering while using Java as
the main programming language.
* It is **written in OOP fashion**. It provides a **reasonably well-written** code example that is
**significantly bigger** (around 6 KLoC)than what students usually write in beginner-level SE modules.
* What's different from [level 3](https://github.com/se-edu/addressbook-level3):
* A more sophisticated GUI that includes a list panel and an in-built Browser.
* More test cases, including automated GUI testing.
* Support for *Build Automation* using Gradle and for *Continuous Integration* using Travis CI.
### Table of Contents

* [Introduction](#introduction)
* [Site Map](#site-map)
* [Acknowledgements](#acknowledgements)
* [License](#license)


### Introduction
Hello! Do you have too many tasks and are unable to finish all of them? Are you looking for a hassle-free task manager which works swiftly?
Enter Agendum.

This task manager will assist you in completing all your tasks on time. It will automatically sort your tasks by date, so you can always see the most urgent tasks at the top of list!

With just one line of command, Agendum will carry out your wishes. You don’t ever have to worry about having to click multiple links. It is even capable of allowing you to create your own custom commands! This means that you can get things done even faster, your way.

#### Site Map
### Site Map
* [User Guide](docs/UserGuide.md)
* [Developer Guide](docs/DeveloperGuide.md)
* [Learning Outcomes](docs/LearningOutcomes.md)
* [About Us](docs/AboutUs.md)
* [Contact Us](docs/ContactUs.md)


#### Acknowledgements

* Some parts of this sample application were inspired by the excellent
[Java FX tutorial](http://code.makery.ch/library/javafx-8-tutorial/) by *Marco Jakob*.
### Acknowledgements
Our team would like to thank the following people:

* Professor [Damith C. Rajapakse](http://www.comp.nus.edu.sg/~damithch)
for giving us invaluable advice on Software Engineering
* TA [Muthu Kumar Chandrasekaran](https://www.quora.com/profile/Muthu-Kumar-Chandrasekaran)
who has given us constructive feedback to aid in our development of Agendum
* The development team of Address Book (Level 4) which can be found at this
[GitHub repo](https://github.com/nus-cs2103-AY1617S1/addressbook-level4)
* [Joe Stelmach](http://natty.joestelmach.com/) who created the Natty Date Parser which powers our date-time parsing.
* Marco Jakob for providing [Java FX tutorial](http://code.makery.ch/library/javafx-8-tutorial/)
* [Google Calendar API](https://developers.google.com/google-apps/calendar/)
* [Mockito](http://site.mockito.org/)

#### Licence : [MIT](LICENSE)
### License
* [MIT](LICENSE)
34 changes: 26 additions & 8 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,13 @@ allprojects {
junitVersion = '4.12'
testFxVersion = '4.0.+'
monocleVersion = '1.8.0_20'
nattyVersion = '0.12'
reflectionsVersion = '0.9.10'
googleCalendarVersion = 'v3-rev220-1.22.0'
googleHttpVersion = '1.21.0'
googleOauthVersion = '1.21.0'
mockitoVersion = '1.+'


libDir = 'lib'
}
Expand All @@ -52,6 +59,12 @@ allprojects {
compile "com.fasterxml.jackson.core:jackson-databind:$jacksonVersion"
compile "com.fasterxml.jackson.datatype:jackson-datatype-jsr310:$jacksonDataTypeVersion"
compile "com.google.guava:guava:$guavaVersion"
compile "com.joestelmach:natty:$nattyVersion"
compile "org.reflections:reflections:$reflectionsVersion"
compile "com.google.apis:google-api-services-calendar:$googleCalendarVersion"
compile "com.google.http-client:google-http-client-jackson2:$googleHttpVersion"
compile "com.google.oauth-client:google-oauth-client-jetty:$googleOauthVersion"
compile "org.mockito:mockito-core:$mockitoVersion"

testCompile "junit:junit:$junitVersion"
testCompile "org.testfx:testfx-core:$testFxVersion"
Expand All @@ -74,10 +87,10 @@ allprojects {
}

shadowJar {
archiveName = "addressbook.jar"
archiveName = "agendum.jar"

manifest {
attributes "Main-Class": "seedu.address.MainApp"
attributes "Main-Class": "seedu.agendum.MainApp"
}

destinationDir = file("${buildDir}/jar/")
Expand Down Expand Up @@ -113,8 +126,8 @@ tasks.coveralls {
onlyIf { System.env.'CI' }
}

class AddressBookTest extends Test {
public AddressBookTest() {
class AgendumTest extends Test {
public AgendumTest() {
forkEvery = 1
systemProperty 'testfx.setup.timeout', '60000'
}
Expand All @@ -128,7 +141,7 @@ class AddressBookTest extends Test {
}
}

task guiTests(type: AddressBookTest) {
task guiTests(type: AgendumTest) {
include 'guitests/**'

jacoco {
Expand All @@ -137,19 +150,24 @@ task guiTests(type: AddressBookTest) {
}


task nonGuiTests(type: AddressBookTest) {
include 'seedu/address/**'
task nonGuiTests(type: AgendumTest) {
include 'seedu/agendum/**'

jacoco {
destinationFile = new File("${buildDir}/jacoco/test.exec")
}
}

// Test mode depends on whether headless task has been run
task allTests(type: AddressBookTest) {
task allTests(type: AgendumTest) {
jacoco {
destinationFile = new File("${buildDir}/jacoco/test.exec")
}

exec {
executable 'rm'
args '-vf', 'data/StoredCredential'
}
}

task headless << {
Expand Down
Binary file added cal/StoredCredential_1
Binary file not shown.
Binary file added cal/StoredCredential_2
Binary file not shown.
Binary file added cal/StoredCredential_3
Binary file not shown.
177 changes: 177 additions & 0 deletions collated/docs/A0003878Y.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,177 @@
# A0003878Y
###### /DeveloperGuide.md
``` md
### 3. Logic component

`Logic` provides several APIs for `UI` to execute the commands entered by the user. It also obtains information about the to-do list to render to the user.
The **API** of the logic component can be found at [`Logic.java`](../src/main/java/seedu/agendum/logic/Logic.java)

The class diagram of the Logic Component is given below. `LogicManager` implements the `Logic Interface` and has exactly one `Parser`. `Parser` is responsible for processing the user command and creating instances of concrete `Command` objects (such as `AddCommand`) which will then be executed by the `LogicManager`. New command types must implement the `Command` class. Each `Command` class produces exactly one `CommandResult`.

<img src="images/LogicClassDiagram.png" width="800"><br>

The `CommandLibrary` class is responsible for managing the various Agendum's reserved command keywords and their aliases. The `Parser` checks and queries the `CommandLibrary` to ascertain if a command word given has been aliased to a reserved command word. `AliasCommand` and `UnaliasCommand` will also check and update the `CommandLibrary` to add and remove aliases. The singleton pattern is applied to restrict the instantiation of the class to one object. This is to ensure that all other objects, such as `Parser`, `AliasCommand` and `UnaliasCommand` objects will refer to the same instance that records and manages all the alias relationships.

You can view the Sequence Diagram below for interactions within the `Logic` component for the `execute("delete 1")` API call.<br>

<img src="images/DeleteTaskSdForLogic.png" width="800"><br>

#### Command Pattern
The Parser creates concrete Command objects such as `AddCommand` objects. `LogicManager` will then execute the various commands, such as `AddCommand` and `UndoCommand`. Each command does a different task and gives a different result. However, as all command types inherit from the abstract class `Command` and implement the _`execute`_ method, LogicManager (the invoker) can treat all of them as Command Object without knowing each specific Command type. By calling the _`execute`_ method, different actions result.


```
###### /DeveloperGuide.md
``` md
## Appendix C : Non Functional Requirements

1. Should work on any [mainstream OS](#mainstream-os) as long as it has Java `1.8.0_60` or higher installed.
2. Should be able to hold up to 800 tasks in total (including completed tasks).
3. Should come with automated unit tests.
4. Should use a Continuous Integration server for real time status of master’s health.
5. Should be kept open source code.
6. Should favour DOS style commands over Unix-style commands.
7. Should adopt an object oriented design.
8. Should not violate any copyrights.
9. Should have a response time of less than 2 second for every action performed.
10. Should work offline without an internet connection.
11. Should work as a standalone application.
12. Should not use relational databases to store data.
13. Should store data in an editable text file.
14. Should not require an installer.
15. Should not use paid libraries and frameworks.
16. Should be a free software.
17. Should be easily transferrable between devices; only 1 folder needs to be transferred.
18. Should have documentation that matches the source code
19. Should not have unhandled exceptions from user input
20. Should be installable without assistance other than the user guide.
21. Should have understandable code such that new members can start working on the project within 1 week.


&nbsp;


```
###### /UserGuide.md
``` md
## Getting Started

### Download

1. Ensure that you have Java version `1.8.0_60` or above installed on your computer.
2. Download the latest `Agendum.jar` from [here](../../../releases).<br>
<img src="images/userguide/releases.png" width="300"><br>
3. Copy the jar file to the folder that you intend to use as the root directory of Agendum.

### Launch

To launch Agendum, double-click on `Agendum.jar` to launch Agendum. Welcome!

Here is the main window you will be greeted with. Initially the task panels are empty but fill them up with tasks soon.

<img src="images/userguide/launch.png" width="800"><br>

```
###### /UserGuide.md
``` md
## Features

### Commands

**Here are some general things to note:**
> * All command words are case-insensitive. e.g. `Add` will match `add`
> * Words enclosed in angle brackets, e.g.`<name>` are the parameters. You can freely decide what you want to use in its place.
> * Parameters with `...` after them can have multiple instances (separated by whitespace). For example, `<id>...` means that you can specify multiple indices such as `3 5 7`.


### Adding a task: `add`

If you have a task to work on, add it to the Agendum to start keeping track! <br>

Here are the *acceptable format(s)*:

* `add <name>` - adds a task which can be done anytime.
* `add <name> by <deadline>` - adds a task which have to be done by the specified deadline. Note the keyword `by`.
* `add <name> from <start time> to <end time>` - adds a event which will take place between start time and end time. Note the keyword `from` and `to`.

Here are some *examples*:

```
Description: I want to watch Star Wars but I don't have a preferred time.
> add watch Star Wars
Result: Agendum will add a task to the "Do It Anytime" panel.

Description: I need to return my library books by the end of this week.
> add return library books by Friday 8pm
Result: Agendum will add a task "return library books" to the "Do It Soon" panel.
It will have a deadline set to the nearest upcoming Friday and with time 8pm.

Description: I have a wedding dinner which will take place on 30 Oct night.
> add attend wedding dinner from 30 Oct 7pm to 30 Oct 9.30pm
Result: Agendum will add a task "attend wedding dinner" to the "Do It Soon" panel.
It will have a start time 30 Oct 7pm and end time 30 Oct 9.30pm.
```

> A task cannot have both a deadline and a event time.

Did Agendum intepret part of your task name as a deadline/event time when you did not intend for it to do so? Simply `undo` the last command and remember to enclose your task name with **single** quotation mark this time around.
```
> add 'drop by 7 eleven' by tmr
```

#### Date Time Format
How do you specify the `<deadline>`, `<start time>` and `<end time>` of a task?

Agendum supports a wide variety of date time formats. Combine any of the date format and time format below. The date/time formats are case insensitive too.

*Date Format*

| Date Format | Example(s) |
|-----------------|----------------------|
| Month/day | 1/23 |
| Day Month | 1 Oct |
| Month Day | Oct 1 |
| Day of the week | Wed, Wednesday |
| Relative date | today, tmr, next wed |

> If no year is specified, it is always assumed to be the current year.
> It is possible to specify the year before or after the month-day pair in the first 3 formats (e.g. 1/23/2016 or 2016 1 Oct)
> The day of the week refers to the following week. For example, today is Sunday (30 Oct). Agendum will interpret Wednesday and Sunday as 2 Nov and 6 Nov respectively (a week from now).

*Time Format*

| Time Format | Example(s) |
|-----------------|-----------------------------------------|
| Hour | 10, 22 |
| Hour:Minute | 10:30 |
| Hour.Minute | 10.30 |
| Relative time | this morning, this afternoon, tonight |

> By default, we use the 24 hour time format but we do support the meridian format as well e.g. 10am, 10pm

Here are some examples of the results if these formats are used in conjunction with the `add` command.
```
> add submit homework by 9pm
Result: The day is not specified. Agendum will create a task "submit homework"
with the deadline day as today (the date of creation) and time as 9pm

> add use coupons by next Wed
Result: The time is not specified. Agendum will create a task "use coupons"
with deadline day as the upcoming Wednesday and time as the current time.

> add attend wedding dinner from 10 Nov 8pm to 10 Nov 9pm
Result: All the date and time are specified and there is no ambiguity at all.
```

Note
> If no year, date or time is specified, the current year, date or time will be used.
> It is advisable to specify both the date and time.


Helpful tip: With Agendum, you can skip typing the second date only if the deadline/event is **happening some time in the future**
```
> add attend wedding dinner from 30 Nov 8pm to 9pm
```


```
Loading