PROJECT: UniLA


Overview

UniLA is a desktop utilities application designed for NUS students who are typing oriented. UniLA provides an efficient and convenient solution for managing contact list and event list, contact interactions, planning meetings, setting up reminders, etc. The application is primarily concerned with CLI (Command Line Interface) Interaction, with a simple and intuitive GUI provided.

Summary of contributions

  • Major enhancement: add the ability to import/export data

    • What it does: allows the user to import contacts, events and reminders from a .json file, as well as exporting them to a .json file by tags

    • Justification: Importing removes the need to manually add contacts or events if the data has already been stored somewhere. Exporting helps the user to safely store data in a separate file to avoid losing data accidentally.

  • Major enhancement: support storage for events and reminders

    • What it does: autosaves any newly added events/reminders and displays the all the data from last sessions upon app launch.

    • Justification: Users want the added data to remain in the app even after it is closed.

    • Highlights: This enhancement requires in-depth understanding of how to read and save data using .json files. It also involves understanding of various components like logic, storage, model and how they work together.

  • Code contributed: [RepoSense Project Code Dashboard]

  • Other contributions:

    • Prepared the README, About Us, Contact Us documents

    • Worked with other team members to fix bugs arisen from conflicts between different components

    • Contributed to User Guide and Developer Guide

    • Helped other team members with issues regarding GitHub, project setup, etc.

Contributions to the User Guide

Given below are sections I contributed to the User Guide. They showcase my ability to write documentation targeting end-users.

Importing data from .json file : import

Imports the data from an external .json file to the UniLA. The file may contains data about Contacts, Events and Reminders.
Format: import FILEPATH

  • Imports data from the location specified by FILEPATH.

  • FILEPATH must end with an extension of .json.

  • The file name in FILEPATH should be valid.

  • The path specified by FILEPATH is relative to the directory of .jar file. For example: if .jar file is in C:\UniLA, and FILEPATH is specified as data/test.json, then test.json is in C:\UniLA\data.

  • Repeated data that already exists in UniLA will not be imported.

  • Data in the .json file must be in the identifiable format.

Examples:

import data/contacts.json

Exporting data to .json file by tag : export

Exports the data to an external .json file from the UniLA. The file will contain all events, all reminders, and all contacts bearing the tag specified.
Format: export n/FILENAME p/FILEPATH [t/TAG]

  • Exports data to a file whose name is specified by FILENAME and location is specified by FILEPATH.

  • The path specified by FILEPATH is relative to the directory of .jar file. For example: if .jar file is in C:\UniLA, and FILEPATH is specified as p/data, then the actual location is in C:\UniLA\data.

  • Contacts whose tags include 'TAG' will be exported.

  • If TAG is omitted. all contacts will be exported.

  • All events and reminders are exported

  • FILEPATH should be valid.

Examples:

export n/mycontacts p/data t/friends

Contributions to the Developer Guide

Given below are sections I contributed to the Developer Guide. They showcase my ability to write technical documentation and the technical depth of my contributions to the project.

Import Contacts

Current Implementation

The ImportCommand uses JsonAddressBookStorage to create a temporary AddressBook instance from a given path. It takes in a Path path as argument. The command will add the contacts, events and reminders found in this temporary AddressBook but not present in the AddressBook storage into storage. The constructor for ImportCommand is as follows:

 public ImportCommand(Path importPath) {
        requireNonNull(importPath);
        this.filePath = importPath;
        addressBookStorage = new JsonAddressBookStorage(filePath);
 }

The execution flow of ImportCommand is shown in the diagram below.

ImportSequenceDiagram
Figure: Import command flow chart

Design Considerations

Aspects : Implementation Import Command
  • Alternative 1 (current choice): Users import contacts, events and reminders from one .json file.

    • Pros: This approach minimizes the effort needed from users to import data.

    • Cons: Users might want to separate contacts, events and reminders so that importing one component will not affect the other

  • Alternative 2: Users import contacts, events and reminders from separate files.

    • Pros: Data can be imported independently.

    • Cons: It takes unnecessary extra effort to import data separately.

Export

Current Implementation

The ExportCommand uses JsonAddressBookStorage class to generate a .json file storing contacts, events and reminders by specified tags to store at a specified path. It takes in a String name, Path path and an optional Tag tag. Omitting the tag will simply save all data into the json file. Below is the main idea ExportCommand constructor:

public ExportCommand(String fileName, Path exportPath, Tag tagExport) {
        requireNonNull(exportPath);
        this.filePath = exportPath;
        this.fileName = fileName;
        this.tag = tagExport;
        this.addressBookExported = new AddressBook();
        addressBookStorage = new JsonAddressBookStorage(filePath);
    }

The execution flow of the Export command is shown below.

ExportSequenceDiagram
Figure: Export command flow chart

Either zero or one tag can be specified. Therefore below are the possible scenarios:

  • Without a tag

    • The app exports all contacts, events and reminders in the UniLA by default.

  • With a Tag

    • The app exports all contacts bearing the specified tag in their tagset, along with all events and reminders.

The final step is to create the xml/excel file from the teachConnectBook. This is done with the help of the method tryStorage().

Design Considerations

Aspects : Implementation Export Command
  • Alternative 1: Users can export contacts, events, reminders into separate files.

    • Pros: This implementation removes the dependency between contacts, events and reminders. Users can change one component without affecting the other.

    • Cons: It might take more effort from users to import and export data in general because they need to handle each component separately.

  • Alternative 2 (current choice): Users export all data into the same file.

    • Pros: This implementation helps remove the need for importing contacts, events and reminders separately. Instead everything can be imported at once.

    • Cons: Contacts, events and reminders are exported together, and thus there is codependency between these components.

PROJECT: PowerPointLabs


{Optionally, you may include other projects in your portfolio.}