{"id":20085970,"url":"https://github.com/juandelahd/tp-calendar","last_synced_at":"2026-04-17T18:01:44.514Z","repository":{"id":246449866,"uuid":"821150607","full_name":"juandelaHD/TP-Calendar","owner":"juandelaHD","description":"This repository contains a comprehensive Java-based Calendar application designed for managing events, appointments, and tasks efficiently.","archived":false,"fork":false,"pushed_at":"2024-06-27T23:49:53.000Z","size":473,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-02T14:29:03.434Z","etag":null,"topics":["calendar","java","javafx","oop-principles","oops-in-java"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/juandelaHD.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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,"publiccode":null,"codemeta":null}},"created_at":"2024-06-27T23:25:45.000Z","updated_at":"2024-06-30T21:38:07.000Z","dependencies_parsed_at":null,"dependency_job_id":"4484fd73-8650-4e85-adc1-df52e853a031","html_url":"https://github.com/juandelaHD/TP-Calendar","commit_stats":null,"previous_names":["juandelahd/tp-calendar"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/juandelaHD/TP-Calendar","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/juandelaHD%2FTP-Calendar","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/juandelaHD%2FTP-Calendar/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/juandelaHD%2FTP-Calendar/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/juandelaHD%2FTP-Calendar/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/juandelaHD","download_url":"https://codeload.github.com/juandelaHD/TP-Calendar/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/juandelaHD%2FTP-Calendar/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31939788,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-17T17:29:20.459Z","status":"ssl_error","status_checked_at":"2026-04-17T17:28:47.801Z","response_time":62,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["calendar","java","javafx","oop-principles","oops-in-java"],"created_at":"2024-11-13T15:59:27.536Z","updated_at":"2026-04-17T18:01:44.502Z","avatar_url":"https://github.com/juandelaHD.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Algorithms III Project - Year 2023\n\n## Team Members:\n\n- Theo Lijs (Student ID: 109472)\n- Juan Martin De La Cruz (Student ID: 109588)\n- Santiago Fassio (Student ID: 109463)\n\n---\n\n### Overview\n\nWelcome to our Algorithms III project repository for the year 2023 at the Faculty of Engineering, University of Buenos Aires! This project focuses on learning and applying advanced Object-Oriented Programming (OOP) practices and utilizing various design patterns in implementing complex algorithms.\n\n### Project Description\n\nThis repository serves as a platform to explore advanced algorithms through the lens of OOP principles and extensive use of design patterns. We aim to design robust, efficient, and maintainable solutions for complex computational problems. Each algorithm implementation is crafted with careful consideration of OOP concepts such as encapsulation, inheritance, polymorphism, and abstraction, alongside the application of design patterns including Factory, Singleton, Strategy, and Observer, among others.\n\n### Repository Structure\n\n- **Documentation:** Contains detailed documentation, including project reports, analysis findings, and theoretical background.\n\n- **Implementations:** Source code for algorithms implemented using OOP principles and design patterns in Java.\n\n- **Tests:** Input and output data used for testing algorithms, along with scripts for generating and processing data.\n\n### General Design\n\nIn the framework of this project, we have implemented an interactive calendar using the Java programming language and the JavaFX graphical user interface (GUI) library. The calendar application was designed with an intuitive interface, providing a seamless user experience. Users can view daily, monthly, or weekly calendars, with the ability to navigate between different months and years. Additionally, features include viewing scheduled events, adding and deleting events, and setting reminders.\n\nTo achieve this, we utilized object-oriented programming concepts in Java to create a coherent data structure. We implemented appropriate classes and methods to handle calendar logic, such as date calculations, event management, and data saving and loading operations for persistence. Moreover, we applied various design principles such as TDA, DRY, POLC, POLA, POLK, FIRST, all SOLID principles, and as per the project's requirement SOC.\n\n### Business Model\n\n- **Calendar:** Class containing different types of events stored in their respective lists, including both Events and Tasks. It provides methods for adding, modifying, or deleting each type of event.\n\n- **Event and Task:** Initially, we didn't realize that we could implement a generic interface for Events and Tasks. After noting commonalities between these types of events, we decided to create this interface. Each event has its title, description, a specific date, a list of associated alarms, and an option to denote that it can last all day.\n\n- **Task:** Extends the Event class and adds the \"completed\" attribute to indicate if a task has been completed. The class constructor initializes inherited attributes and sets the initial state of the task as incomplete. It also creates a list to store alarms associated with that task.\n\n- **Event:** Extends the Event class and adds the \"endDate\" attribute to indicate the date and time of the event's end. The class constructor initializes inherited attributes and sets the \"endDate\" attribute with the provided value. It also creates a list to store alarms associated with the event.\n\n- **Recurring Event:** Subclass of the Event class representing an event that repeats over time. This class uses the Observer design pattern and implements the ObserverChildModified and ObserverChildDeleted interfaces. In addition to the inherited attributes of the Event class, Recurring Event has additional attributes such as frequency (defined by a Frequency object), days of the week (SortedSet indicating the days of the week the event repeats, valid only for weekly frequency), interval (indicates the repetition interval between each event), endDateRepetitions (LocalDateTime object indicating the date and time of the end of event repetitions), creationDate (represents the date and time of event creation), infinite (boolean indicating if the event has infinite repetitions or not), and repetitionsCount (indicates the total number of event repetitions).\n\n- **Child Event:** Extends the Recurring Event class. It adds additional attributes to establish communication with the parent Recurring Event and defines methods to notify changes and deletions to the corresponding observer.\n\n- **Saver:** Handles the serialization of all events in the current calendar along with their alarms in XML format. Saver creates three files in the file system used to store three types of objects (Tasks.xml, Events.xml, and Recurring Events.xml). It is worth mentioning that Composite was used as a design pattern to generate these XML files. Saver then creates three roots and orders all elements of the same type to serialize themselves, along with their alarms, into their respective root. Finally, Saver places the complete roots in the new documents created.\n\n- **Reader:** Responsible for taking files created by Saver and deserializing the Events found in each with the aim of restoring the calendar saved in XML files.\n\n### View\n\nOur FXML files coordinate how the interface appears. They are responsible for the presentations and visualizations of data to the end user. Their main function is to display model information in a comprehensible form and facilitate interaction with the user. These FXML files are used to create the main scene and views for event and alarm creators.\n\n### Controller\n\nThe Controller decides how buttons work and how data is displayed. It updates data through user event handlers and configuration setters, and then sets it in the calendar. Additionally, it initializes different views and retrieves data through getters to update the model. In summary, each controller initializes its respective views and modifies the model.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjuandelahd%2Ftp-calendar","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjuandelahd%2Ftp-calendar","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjuandelahd%2Ftp-calendar/lists"}