PROJECT: MakerManager

Overview

This document is meant for recording the contributions I have committed and the role played in the developing of this project.

MakerManger is a free, open-sourced desktop application developed to improve the efficiency of existing facilities at makerspace at SoC. Currently, the facilities are mostly 3D printers. Without the traditional tedious and complicated method of managing the usage of the facilities, MakerManger provides a real-time list and appended job queue for each. Algorithms are also able to provide the tasking method which consumes least time.

In abstract, MakerManager has these features:
* A 2-level access system, for the normal users and lab managers.
* Normal users can add jobs to specified machines or let the system help them allocate to the most free one.
* Admin users can register/deregister machines, manage job queues of machines.
* All users can monitor the status of machines and printing progress of all jobs.

Summary of contributions

  • Major enhancement: added Job class and relevant classes in storage and UI component

    • What it does: allows the developers to work on these components to add more features.

    • Justification: These classes are crucial to MakerManager, as all the features related to jobs are based on them.

    • Credits: The development of version 1.0 is done fully by me. Later on, Teo Jun Jie (one of our team member) fixed some bugs of the integration with the storage component and UI component. After that, I picked up and added some small changes.

    • View on: PR#4 and PR#27

  • Major enhancement: added addJob command

    • What it does: allows the user to add a job with specified name and priority to the job list.

    • Justification: This feature is one of the key features of MakerManger. Without this, users will not be able to add any jobs to any machine.

    • 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: The development of version 1.0 is done fully by me. Later on, Teo Jun Jie (one of our team member) fixed some bugs of the integration with the storage component and UI component. After that, I picked up and added some small changes.

    • View on: PR#34 and PR#50

  • Minor enhancement: added the findJob, listJobs command for users to locate a job by name. PR#50

  • Minor enhancement: implemented the TimeStamp object for version 1.0. TimeStamp was refactored by Sean. PR#77

  • Minor enhancement: refactored all the codes and removed all the irrelevant person class. PR#154

  • Code contributed: You can see my code contributions in this Code Dashboard by Reposense

  • Other contributions:

    • Project management:

      • Managed releases v1.3 - v1.4 (2 releases) on GitHub

      • Post issues in the Issue Tracker.

    • Enhancements to existing features:

    • Documentation:

      • Format check of the developer Guide.

      • Updated the User Guide and Developer Guide for my features.

      • Add on the manual testing cases in the Developer Guide.

    • Community:

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.

Command Summary

This is a nifty little list you can print and paste somewhere for quick reference.

  1. help

  2. undo

  3. redo

  4. history

  5. login ADMIN_ID PASSWORD

  6. logout

  7. addAdmin USERNAME PASSWORD VERIFY_PASSWORD

  8. removeAdmin USERNAME

  9. updatePassword USERNAME OLD_PW NEW_PW NEW_PW_VERIFY

  10. addMachine n/MACHINE_NAME ms/STATUS

  11. editMachine MACHINE_NAME [n/MACHINE_NAME] [ms/STATUS]

  12. manageMachine MACHINE_NAME remove

  13. manageMachine MACHINE_NAME flush

  14. manageMachine MACHINE_NAME flush AUTO

  15. manageMachine MACHINE_NAME clean

  16. findMachine [MACHINE_NAME_1] [MACHINE_NAME_2]

  17. listMachines

  18. addJob n/PRINT_NAME m/MACHINE_NAME on/OWNER NAME pr/PRIORITY d/DURATION(in hours) jn/NOTE [t/TAG]

  19. manageJob JOB_NAME start

  20. manageJob JOB_NAME cancel

  21. manageJob JOB_NAME restart

  22. manageJob JOB_NAME swap TARGET_JOB_NAME

  23. manageJob JOB_NAME move TARGET_MACHINE_NAME

  24. manageJob JOB_NAME shift up

  25. manageJob JOB_NAME shift down

  26. manageJob JOB_NAME delete

  27. requestDeletion n/JOB_NAME

  28. findJob [JOB_NAME_1] [JOB_NAME_2]

  29. listJobs

  30. exit

AddJob Version 1.0

  • Add a Print Job
    Adds a print job to a machine’s queue in MakerManager.
    Outcome: You will see the job in if you scroll down the queue of the machine you specified.
    Specifying AUTO as MACHINE_NAME will let the software optimize which queue to add the print to.
    Available priorities: URGENT, HIGH, NORMAL.
    Please note that PRIORITY is currently just a display feature aimed at helping the lab manager gain more information.

    Prints cannot be added to disabled Machines!
    Multiple tags can be added to one print job.
    Format: addJob n/PRINT_NAME m/MACHINE_NAME on/OWNER_NAME pr/PRIORITY d/DURATION(in hours) jn/NOTE [t/TAG]...
    Example: addJob n/iDCP m/UpBox on/TIAN YUAN pr/HIGH d/1.5 jn/This is for the iDCP project t/iDCP

Find Job and List Jobs

  • Finding Prints: Finds Jobs based on given keywords. You have to give at least 1 argument.
    Outcome: You will see only matching Jobs shown in the UI.

    After the filtered job list is displayed, use the listJobs command to return to the main menu.
    Format: findJob [JOB_NAME_1] [JOB_NAME_2]...
    Example: findJob gears chassis cup
  • Listing Prints
    Lists all prints.
    Outcome: All Prints will be visible in the UI.

    Format: listJobs
    Example: listJobs

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.

Model component

ModelComponentClassDiagramv1.4.3
Figure 1. Structure of the Model Component

API : Model.java

The Model,

  • stores the Address Book data.

  • exposes an unmodifiable ObservableList<Admin> that can be 'observed'

  • exposes an unmodifiable ObservableList<Job> that can be 'observed' in machines

  • exposes an unmodifiable ObservableList<Machine> that can be 'observed'

  • eg. the UI can be bound to these 3 lists so that the UI automatically updates when the data in any of the list changes.

  • does not depend on any of the other three components.

Storage component

StorageComponentClassDiagramCompleted
Figure 2. Structure of the Storage Component

API : Storage.java

The Storage component,

  • stores an initialized UserPref object that represents the user’s preferences derived from JsonUserPrefsStorage

  • can save UserPref objects in json format and read it back.

  • can save the Address Book data in 2 separate xml format

    • XmlSerializableMakerManagerAdmins

    • XmlSerializableMakerManagerMachines

Manual Testing Cases

Due to the limit of page, full testing cases can be referred in the Developer Guide.

Appendix A: Instructions for Manual Testing

Given below are instructions to test the app manually.

Testers are encouraged to follow the testing codes sequentially.

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. Download the data files by downloading the DemoDataV1.4.zip from the root.

    3. Unzip and save the data files in a folder called 'data' in the same directoryin which you saved the jar file on your computer.

      The 'data' file should contain the 3 files below.
      data/addressBook.xml
      data/makerManagerAdmins.xml
      data/makerManagerMachines.xml
    4. Double-click the jar file

      Expected view:
      Shows the GUI with a list of printers displayed horizontally where each column represents a printer with print jobs assigned to it.
      These printers are already pre-added to the maker manager local database.
      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. Leaving the app:

    1. Enter the command:

      exit
    2. The window shall close automatically.

Ease of use

  1. Test case: help window activation

    help
    Expected:
    A pop-up window containing the user guide will be displayed.