# Proiect OOP
Anul 2, Semestrul 1
Facultatea "Automatica si calculatoare" CTI
Univeristatea "Politehnica" Bucuresti

Văideanu Renata - Georgia
322 CD

- input package -> is mainly used for implementing the parameters received in the input, making
sure that everything is placed in the right structure.
    user package -> creates the fields necessary for all the parameters that can be received
        when getting the user from input.
    filter package -> creates the fields necessary for all the parameters that can be received
        when getting the filters from input. It will be used for the case filter.
    Const class -> is used for implementing the constants used in the code, so there won't
        be any magic numbers
    Input class -> contains 3 array lists: users, movies and actions.
    MovieInput class -> creates the fields necessary for all the parameters that can be received
        when getting a movie from input.
    ActionInput class -> creates the fields necessary for all the parameters that can be received
        when getting the actions from input.

Added class: Notifications was added to the input -> user package and it is used to define
             the fields for the notifications that will occur at the end of the action iteration,
             with the help of a queue.

pages package -> is used for implementing the pages and the actions that can be done on every one
of them.
    Page class -> is the main page template that is going to be used for all the pages to extend.
    Login class -> used for the login on page and change page actions. Both of them will be
        extended from the page class.
    Register class -> used for the register on page and change page actions. Both of them will be
        extended from the page class.
    Movies class -> used for the movies on page and change page actions. The class will extend
        the page class. The methods in this class will be the ones for changing and on page
        (search, filter, purchase, like, rate, watch).
    SeeDetails class -> used for the change page -> see details action.
    Upgrades class -> used for the upgrades actions chose by the user.

Added classes: NotAuthenticated -> specific for the non authenticated user.
               PageFactory -> used for the factory coding style.
               PageStack -> used for the implementation of the stack of pages, used for the
               push and pop methods.

workflow package -> is used for the workflow itself. It is divided in three packages:
    Actions class -> used to go through all the actions that
    Errors class -> used for testing if there are any errors that may prevent the user from
        changing the page or from applying a feature.
    OutPrint -> used for displaying the output for the necessary cases.

Added class: Database -> used for the add (addMovie)/ delete (deleteMovie) methods when a movie
             is added/ deleted. The methods will be implemented with the help of the notify
             methods (notifyDelete / notifyAdd) that will notify the users when a movies is
             being deleted or added, based on the specific cases.
             In the Actions class, the case "back" was added, for when a user wants to go back
             to the previous page, with the help of the stack implementation.

The rating of a movie will be calculated like this: adding all the ratings and dividing it by
the number of times it was rated, only when a movie is rated, the sum of rating and the average
rating will be both saved in the current movie.