{"id":21314805,"url":"https://github.com/bocchio01/climate_monitoring_app","last_synced_at":"2025-03-15T21:23:25.750Z","repository":{"id":193550977,"uuid":"686961642","full_name":"Bocchio01/Climate_Monitoring_App","owner":"Bocchio01","description":"Simple app for visualizing and managing weather data.","archived":false,"fork":false,"pushed_at":"2023-12-11T15:49:47.000Z","size":32163,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-01-22T10:24:06.946Z","etag":null,"topics":["data-driven","java","swing"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":false,"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/Bocchio01.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}},"created_at":"2023-09-04T10:11:13.000Z","updated_at":"2023-09-08T15:27:30.000Z","dependencies_parsed_at":"2023-12-11T16:54:30.039Z","dependency_job_id":null,"html_url":"https://github.com/Bocchio01/Climate_Monitoring_App","commit_stats":null,"previous_names":["bocchio01/climate_monitoring_app"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Bocchio01%2FClimate_Monitoring_App","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Bocchio01%2FClimate_Monitoring_App/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Bocchio01%2FClimate_Monitoring_App/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Bocchio01%2FClimate_Monitoring_App/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Bocchio01","download_url":"https://codeload.github.com/Bocchio01/Climate_Monitoring_App/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243791136,"owners_count":20348423,"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":["data-driven","java","swing"],"created_at":"2024-11-21T18:15:31.055Z","updated_at":"2025-03-15T21:23:25.730Z","avatar_url":"https://github.com/Bocchio01.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Climate Monitoring App\n\nSimple university project for visualizing and monitoring climate data.\n\n## Project requirements\n\nAll the project requirements are listed in the [Climate monitoring Request](./Climate%20monitoring%20Request.pdf) file.\n\nBasically, the project consists of two main areas:\n\n- An open access area where the user can see the current climate data and the historical data about a specific location.\n- A private area where only the registered operators can access and manage the climate data.\n\nThis means that the app had to implement a login system and a database to store the climate data.\n\nAs for the given requirements, database has been avoided and only a local csv file has been used to store both the climate data and the users data.\n\n## Project structure\n\nThe project is structured based on the a MVC pattern revisited following the Java Swing logic.\n\nWe can still find a model package, but the view and the controller are merged in to a user-interface package.\n\nThe application is strongly data-driven, meaning that the user-interface knows everything about the model, but to model knows nothing about the user-interface.\n\nWhen it comes to folder structure, we can find the following:\n\n```\nsrc\n├───assets: contains all the images used in the application\n├───CMD: contains the command line interface\n├───GUI: contains the graphical user interface\n│   ├───layouts\n│   ├───mainElements\n│   └───panels\n├───models: contains the model of the application\n│   ├───data\n│   ├───file\n│   ├───logic\n│   └───record\n└───utils: contains all the utility classes\n```\n\nIt's easy to see how the application is splitted between the model and the user-interface.\n\n## Data structure\n\nAs we have already said, at this stage we prefered to avoid the use of a database and we used a csv file to store the data. Those files can be found the in the [data](./data) folder.\n\nEach file can be seen as a possible future database table implementation.\n\nData are stored and saved along with a unique ID that makes easy to retrive and query them inside the application.\n\n### Data handling\n\nInside the application, data are loaded and saved into appropriate `HashMaps`, whose structure are well described inside the [Record folder](./src/models/record).\n\nEach operation made over the data, is processed in two separate stages:\n\n1. Data are updated inside the `HashMaps`\n2. Data are saved into the csv files\n\nBy doing so, we can avoid to load the data from the csv files every time we need to perform an operation over them, making the internal queries generally faster.\n\n## User interface\n\nSo far, just two user interfaces have been implemented.\n\n### GUI\n\nThe graphical user interface is the main interface of the application.\n\nIt's based on the use of the `Java Swing` and is composed by multiple `JPanel` that are handled and loaded by a superclass called `GUI`. To simplify the development, as layout manager we used the `CardLayout`.\n\nTwo common and repetitive layouts have been implemented to simplify the disposition of the elements inside the panels, i.e. the `TwoColumns` and the `TwoRows` layouts.\n\n### CMD\n\nThe command line interface is a simple interface that allows the user to interact with the application through the command line.\n\nAt this stage it's not implemented, but I plan to do it soon.\n\n## Future development\n\nThe application is still in a very early stage. Among the future development, we can find:\n\n- [ ] Automation of the tests (JUnit)\n- [ ] Implement the command line interface\n- [ ] Switching from csv files to a relational database\n- [ ] Improve the concurrency management of data (synchronization)\n\nAs always, suggestions and improvements are always welcome.\n\nHave a nice coding day,\n\nTommaso :panda_face:","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbocchio01%2Fclimate_monitoring_app","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbocchio01%2Fclimate_monitoring_app","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbocchio01%2Fclimate_monitoring_app/lists"}