{"id":15069255,"url":"https://github.com/ravi-aratchige/multithreadfileprocessor","last_synced_at":"2026-01-03T05:07:03.173Z","repository":{"id":224997903,"uuid":"764771241","full_name":"ravi-aratchige/MultiThreadFileProcessor","owner":"ravi-aratchige","description":"Multi-thread text file processor implemented in Java","archived":false,"fork":false,"pushed_at":"2024-02-28T17:48:44.000Z","size":172,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-01-22T19:46:04.146Z","etag":null,"topics":["java","jdk","swing","swing-gui","text-files","threads"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ravi-aratchige.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2024-02-28T17:19:09.000Z","updated_at":"2024-02-28T17:51:30.000Z","dependencies_parsed_at":"2024-02-28T20:07:17.458Z","dependency_job_id":null,"html_url":"https://github.com/ravi-aratchige/MultiThreadFileProcessor","commit_stats":null,"previous_names":["ravi-aratchige/multithreadfileprocessor"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ravi-aratchige%2FMultiThreadFileProcessor","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ravi-aratchige%2FMultiThreadFileProcessor/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ravi-aratchige%2FMultiThreadFileProcessor/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ravi-aratchige%2FMultiThreadFileProcessor/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ravi-aratchige","download_url":"https://codeload.github.com/ravi-aratchige/MultiThreadFileProcessor/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243837069,"owners_count":20355818,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["java","jdk","swing","swing-gui","text-files","threads"],"created_at":"2024-09-25T01:41:25.074Z","updated_at":"2026-01-03T05:07:03.143Z","avatar_url":"https://github.com/ravi-aratchige.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Multi-Thread File Processor\n\nThis is a Java implementation of a multi-threaded application that can process text (`.txt` or `.TXT`) files in a directory.\n\nThis is my submission for the Assignment titled \u003cb\u003eImplement a Multi-threaded File Processor\u003c/b\u003e of the \u003cb\u003eSoftware Modeling\u003c/b\u003e (SE3022) module.\n\n## Setup\n\nYou must have the JDK (Java Development Kit) installed on your system. It is recommended to have \u003cb\u003eJDK 21\u003c/b\u003e, the latest version as of the writing of this README.\n\n\u003cb\u003eNOTE\u003c/b\u003e: if you are a Linux user, make sure that you install \u003ca href=\"https://www.oracle.com/java/technologies/downloads/\"\u003eOracle's JDK\u003c/a\u003e (not the \u003ca href=\"https://openjdk.org/\"\u003eOpenJDK\u003c/a\u003e).\n\nYou must also have \u003ca href=\"https://maven.apache.org/index.html\"\u003eMaven\u003c/a\u003e installed on your system.\n\nYou can check your installation using the following commands.\n\n```shell\n# check Java version\njava -version\n\n# check Maven version\nmvn -version\n```\n\nThis project uses \u003ca href=\"https://www.jetbrains.com/idea/\"\u003eJetBrain IntelliJ IDEA 2023.2\u003c/a\u003e (or a newer version) as the IDE.\n\nTo setup this project locally on your machine, follow these steps:\n\n### 1. Clone Project\n\nClone this project to a desired location on your system:\n\n```shell\ngit clone https://github.com/ravi-aratchige/MultiThreadFileProcessor.git\n```\n\n### 2. Open Project in IDE\n\nOpen JetBrain IntelliJ IDEA and select `Open` from the menu:\n\n\u003cimg src=\"./img/open-project.png\"\u003e\n\nNext, navigate to the project folder and open it.\n\n### 3. Run Project\n\nTo run the application, select `Run` from the toolbar:\n\n\u003cimg src=\"./img/run-project.png\"\u003e\n\nThe text-based console menu will open up in the integrated terminal of your IDE:\n\n\u003cimg src=\"./img/terminal.png\"\u003e\n\n### 4. Launch GUI\n\nThe GUI can be launched from the text-based console menu, or by separately running `FileProcessorGui.java`:\n\n\u003cimg src=\"./img/gui.png\"\u003e\n\n---\n\n## Design Choices\n\nThe design of this project focused on simplicity, modularity, and user interaction. The use of a command-line interface (CLI) for the main menu allows users to interact with the application easily, providing clear options to choose from. The GUI was designed to be straightforward, with a clear purpose and a single button for user interaction.\n\nModularity was achieved by separating the GUI and file processing logic into separate classes, allowing for easier maintenance and future enhancements. Error handling was also considered, with the application providing informative messages to the user in case of invalid input or issues with file processing.\n\n## Challenges Faced\n\n1. Constructing a complete GUI in a limited timeframe, with minimal time to sketch the interface designs etc.\n2. Ensuring that the threads are created, executed and finished appropriately and properly.\n3. Streamlining communication between GUI logic and file processor logic using callback mechanisms and shared data.\n\n## Improvements and Additional Features\n\nAs mentioned in the assignment specification, I would like to implement the ability to select which criteria must be processed (as checkboxes on the GUI), which I was unable to implement in the limited timeframe.\n\nAdditionally, the ability to display results in the GUI (instead of the CLI as done currently) is also a feature I would like to implement in the future.\n\n---\n\nMade with :heart: by Ravindu Aratchige","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fravi-aratchige%2Fmultithreadfileprocessor","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fravi-aratchige%2Fmultithreadfileprocessor","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fravi-aratchige%2Fmultithreadfileprocessor/lists"}