Reviewed-on: #1 Reviewed-by: Hosein Asfiaee
Third Assignment: Movie Explorer 🎬 + Rational Calculator 🧮
Welcome to Your Third Assignment in the Advanced Programming Course!
This assignment consists of two separate parts. You must complete both parts.
Part 1: Rational Class (Rational Numbers)
In this part, you will implement a Rational class that supports basic mathematical operations.
A RationalTest class is provided.
+You can run it to verify that your implementation works correctly.
+Use it to test your logic before submitting.
Tasks: Define fields for numerator and denominator
Implement addition, subtraction, multiplication, and division as instance methods
Implement addition, subtraction, multiplication, and division as static methods
Note: Detailed TODO comments are provided inside Rational.java. Do NOT modify the constructor, simplify logic, or completed methods. Only complete the TODO methods.
Part 2: Movie Explorer 🎬 (Using API)
In this part, you will develop a Java application that fetches movie data from an API and allows users to browse and search movies.
Files Provided
Movie.javaGenre.javaMovieService.javaMain.java
The Genre class is already implemented as a sample.
You must design and implement the Movie class yourself (fields, constructors, getters, setters, toString if needed).
We have already implemented two methods that call the API and return the raw JSON response as a String:
getGenresList()→ calls the API and returns the list of genres in JSON format.getMoviesByGenreList(Long genreId, Long page)→ calls the API and returns the list of movies for a specific genre and page in JSON format.
Do NOT modify:
API URLs
getGenresList()
getMoviesByGenreList()
Only complete the TODO methods.
Your Tasks
-
Complete the
Movieclass (fields, constructor, getters, and setters). -
Write a method that receives the JSON string returned by
getMoviesByGenreList()and converts it into aList<Movie>. -
Write another method that displays the list of movies (for the selected genre) in a clean and readable format.
-
Implement a console menu in
Mainthat allows the user to:- View the list of genres
- Select a genre
- View movies for the selected genre (with pagination)
After completing
MovieService, you must also complete theMainclass so the menu works correctly.
Note
To understand what fields should exist in the Genre and Movie classes, it is recommended that you first call the two API methods once and inspect the raw JSON response. This will help you determine the exact structure of the data and define the appropriate class fields.
We implemented JSON parsing using Gson in the project.
However, the Jackson dependency is also included.
If you prefer, you are allowed to use Jackson instead of Gson.
Objectives ✏️
By completing this assignment, you will:
Reinforce OOP concepts: class design, constructors, encapsulation, collections
Practice instance methods vs. static methods
Work with JSON parsing and REST APIs
Design a simple console-based menu
Improve Git workflow and project management
Prerequisites ✅
Git
Java (version 23 or 25)
Maven as a package manager
Tasks Summary 📝
Fork the repository and clone it locally
Create and switch to a development branch
Complete Part 1 (Rational.java) following the TODO comments
Complete Part 2 (Movie.java, Genre.java, MovieService.java, Main.java) following the TODO comments
Ensure the code compiles and runs correctly
Commit and push regularly
Submit a pull request from development to main
Evaluation Criteria ⚖️
Functionality: Code compiles and runs without errors; all features work correctly
Code Quality: Clean, readable, well-structured code with proper naming
Understanding: You must be able to explain your implementation
Bonus Tasks ✒️
- Fetch and display movie information using movie ID
In this section, you must implement the ability to search for a movie by its ID. The user enters an ID, and the program displays complete movie details.
Movie Class Fields (already defined):
-
id (Long) - Movie identifier
-
title (String) - Movie title
-
year (String) - Release year
-
genres (List) - List of genres
-
images (String) - Poster image URL
-
country (String) - Production country
-
imdbRating (String) - IMDB rating
Implementation Steps:
-
Build and Send Request (getMovieById method):
- Create HTTP request to: https://api.meshcomp.ir/api/v1/movies/{movieId} - Replace {movieId} with the ID from user - Send request and get response -
Handle Response (getMovieById method):
- If status code is 200, return JSON body - Otherwise, print error and return null -
Parse JSON and Create Movie Object (displayMovieDetails method):
- Parse JSON response to JsonObject - Extract all fields: id, title, year, poster, country, imdb_rating - Parse "genres" array and convert each to Genre object - Create a Movie object with all extracted data -
Display Results (displayMovieDetails method):
- Print all movie details in a clean format
-
Advanced search (title, genre, year, rating, etc.)
-
Sorting options for movies
-
Save/load favorite movies to/from a file
-
Improved console menu design
-
GUI version using JavaFX
References 📚
API (Replace placeholders with numbers):
- genres: https://api.meshcomp.ir/api/v1/genres
- movies: https://api.meshcomp.ir/api/v1/movies
- movies (specifying the page): https://api.meshcomp.ir/api/v1/movies?page={pageId}
- movies by genres: https://api.meshcomp.ir/api/v1/genres/{genreId}/movies?page={pageId}
- details of a specific movie: https://api.meshcomp.ir/api/v1/movies/{movieId}
Video Tutorials (watch before starting the assignment): link
Gson Tutorial:
Gson Reading and Parsing Data from a JSONObject
Jackson Tutorial:
Jackson Parsing Json in Java Tutorial - Part 1 Jackson and Simple Objects
Submission ⌛
Deadline: May 1st (11 Ordibehesht)