Overview
Media Socializer is a one-stop social media desktop application made to help users to keep track of the many social media platforms they are currently using. 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.
Summary of contributions
-
Major enhancement: added the ability to search for person on social media platforms
-
What it does: allows the user to perform the search function for person’s profile on the social media platforms through the application with a single command.
-
Justification: This feature grants the user the ability to search for other person’s profile on either the stated social media platforms or all the platforms available through the application. Thus, the user no longer need to go on to the different social media platform and perform the search repeatedly. This feature brings the application one step closer to the goal of being an one-stop social media application.
-
Highlights: This feature has to be able to display the search results of different social media platforms in a convenient way, as such, it requires the implementor to come up with a UI allows the user to jump between search results easily. The implementation is
-
Credits: The design of the UI is inspired by the tab interface of the internet browsers (i.e. Firefox, Google Chrome, and etc)
-
-
Minor enhancement: added a findtag command that allows the user to find persons whose tags contain the input keywords.
-
Code contributed: [Functional code] [Test code]
-
Other contributions:
-
Project management:
-
Ensure the closure of milestone
v1.3
-v1.5
(4 milestones including 1.5rc) on GitHub
-
-
Enhancements to existing features:
-
Documentation:
-
Update About Us: #56
-
-
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. |
Locating persons by tag: findtag
[Since v1.2]
Finds persons whose tags contain any of the given keywords.
Format: findtag KEYWORD [MORE_KEYWORDS]
Examples:
-
findtag friends
Returns any person having tagsfriends
-
find friends classmate neighbour
Returns any person having tagsfriends
,classmate
, orneighbour
Search for profile : search
[Since v1.5]
Search for the specified profiles on available social media platform within the application.
Format: search [PLATFORM,] KEYWORD
Examples:
-
search john
Search with keyword "john" on all the social media linked with the application and display the search result in the browser window under the respective tabs. -
search fb, tom
Search with keyword "tom" on Facebook and display the search result in the browser window under the Facebook tab. -
search twitter, tom
Search with keyword "tom" on Twitter and display the search result in the browser window under the Twitter tab.
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. |
Findtag feature
Current Implementation
The 'findtag' feature is implemented with the same mechanism as the 'find' feature. It is used for finding stored persons with their tags instead of names. The key components of the feature are 'FindWithTagCommand', 'FindWithTagCommandParser', and 'TagContainsKeywordsPredicate'.
The main component of 'findtag' is the 'FindWithTagCommand' which resides inside the logic component. It inherit from 'Command', as such, similar to 'find', 'findtag' is not an undoable command. From the class diagram of Logic class, we can see inheritance of 'FindWithTagCommand' in comparison with other types of commands:
The user execute the FindWithTagCommand with the keyword ‘findtag’ following by the tag keywords, separated by whitespace. When the command is executed, the current list of persons shown in the GUI will only contain the persons with the tags same as the tag keywords. The following image shows the result of a 'findtag' execution:
Note that the tag keywords are not case sensitive; however, the command keyword is. For example, both 'findtag friends' and 'findtag FrIeNdS' can be executed and return a list of persons with the tag 'friends'. However 'FiNdTaG friends' cannot be executed and will result in a 'Unknown Command' feedback, as shown in the following:
Since the application does not recognize the command, the list of person displayed will not be changed.
The 'findtag' command can handle multiple input tag keywords and, similar to 'find', 'findtag' is an ‘or’ search. For example, 'findtag friends owesMoney' will find any person with the tag ‘friends’ or ‘owesMoney’ or both.
The following sequence diagram shows how the findtag operation works:
Design Considerations
Aspect: Implementation of FindWithTagCommand
-
Alternative 1 (current choice): Follow the mechanism of
FindCommand
-
Pros: 'findtag' works in the same mechanism as 'find', thus will not deviate from the overall architecture of the address book (i.e. Event Driven design).
-
Cons: May generate classes/ methods that are implemented with very similar style, or in the worse case, we may have duplicate codes. Thus, additional attention needds to be given to ensure that the implementation of 'findtag' will not result in duplicate codes.
-
-
Alternative 2: Implement new mechanism specifically for
FindWithTagCommand
-
Pros: Does not generate similar classes/ methods.
-
Cons: Hard to implement, risk deviating away from the overall architecture of the address book.
-
Search feature
Current Implementation
The implementation of the search feature follows very closely to the Event-Driven architecture. It is used for searching profiles on the social media platforms available in the application. The key components of the feature is the 'SearchPersonEvent' and its handler method.
The 'SearchCommand' class is located within the logic component. It is not an undoable command, hence it inherit from 'Command'.
The search feature is able to perform search on either the input platform or all the available platforms. To execute the search feature, simply input the command keyword "search" followed by an optional declaration of platform to perform the search on, and lastly followed by the profile name to be searched for.
Similar to most of the other feature in the application, the command keyword is case sensitive while the search name is not. As for platform declaration, only predefined inputs are allowed. These predefined inputs are the names of the platform as well as the aliases. (e.g. facebook, fb, twitter…) An invalid command format prompt will be shown if the input platform is not one of the predefined inputs, or has a different case size.
Upon execution of the search feature with the keyword "search", the validation of input arguments are first checked by the parser, then a SearchPersonEvent will be posted to the event bus. This event is handled by the handleSearchPersonEvent method, which determine the platform to perform the search on and choose the tabs to display.
Design Considerations
Aspect: Implementation of SearchCommand
SearchPersonEvent
and the handler method
-
Alternative 1: Implement multiple Command class, Event class, and handler method to facilitate searching on different social media platforms.
-
Pros: Easier to implement since each class only need to handle search on one platform.
-
Cons: High chance of generating similar/duplicated codes.
-
-
Alternative 2 (current choice): Have a common 'SearchCommand' class for search.
-
Pros: Reduce repeated/similar code.
-
Cons: Harder to implement since the feature now has to determine the platform to search on base on the input form the user.
-
Aspect: Link to the search functions of different social media platforms
-
Alternative 1 (current choice): Use the search URL of different platform to perfom the search.
-
Pros: Much easier to implement since we are simply loading the search URL into our browser.
-
Cons: Direct use of search URL uses a lot of resources.
-
-
Alternative 2: Use a third party code to perform the search.
-
Pros: May consume less resources.
-
Cons: May have to program the UI to display the search result.
-