package com.entronomia.aplicaciones.excepciones;
public class ErrorEnConversionADuracionEnMinutosException extends RuntimeException {
private String mensaje;
public ErrorEnConversionADuracionEnMinutosException(String mensaje) {
this.mensaje = mensaje;
}
@Override
public String getMessage() {
return this.mensaje;
}
}
package com.entronomia.aplicaciones.modelos;
import com.entronomia.aplicaciones.excepciones.ErrorEnConversionADuracionEnMinutosException;
import com.google.gson.annotations.SerializedName;
public class Titulo implements Comparable<Titulo>{
@SerializedName("Title")
private String nombre;
@SerializedName("Year")
private int fechaDeLanzamiento;
private int duracionEnMinutos;
private boolean incluidaEnElPlan;
private double sumaDeLasEvaluaciones = 0;
private int numeroDeEvaluaciones = 0;
private double mediaDeLasEvaluaciones = 0;
public Titulo(String nombre, int fechaDeLanzamiento) {
this.nombre = nombre;
this.fechaDeLanzamiento = fechaDeLanzamiento;
}
public Titulo(TituloOmbd tituloOmbd) {
this.nombre = tituloOmbd.title();
this.fechaDeLanzamiento = Integer.valueOf(tituloOmbd.year());
if (tituloOmbd.runtime().contains("N/A")) {
throw new ErrorEnConversionADuracionEnMinutosException("En la variable runtime se tiene el valor N/A");
}
this.duracionEnMinutos = Integer.valueOf(tituloOmbd.runtime().substring(0,3).replace(" ", ""));
}
public String getNombre() {
return nombre;
}
public int getFechaDeLanzamiento() {
return fechaDeLanzamiento;
}
public int getDuracionEnMinutos() {
return duracionEnMinutos;
}
public void setDuracionEnMinutos(int duracionEnMinutos) {
this.duracionEnMinutos = duracionEnMinutos;
}
public double getMediaDeLasEvaluaciones() {
return mediaDeLasEvaluaciones;
}
public void evaluaPelicula(double nota) {
sumaDeLasEvaluaciones = sumaDeLasEvaluaciones + nota;
numeroDeEvaluaciones = numeroDeEvaluaciones +1;
}
public double calculaMediaDeLasEvaluaciones() {
mediaDeLasEvaluaciones = sumaDeLasEvaluaciones / numeroDeEvaluaciones;
return mediaDeLasEvaluaciones;
}
public int getClasificacion() {
return (int) (calculaMediaDeLasEvaluaciones() / 2);
}
@Override
public int compareTo(Titulo titulo) {
return this.getNombre().compareTo(titulo.getNombre());
}
@Override
public String toString() {
return "nombre= " + nombre +
", fechaDeLanzamiento= " + fechaDeLanzamiento +
", duración en minutos= " + duracionEnMinutos;
}
}
package com.entronomia.aplicaciones.principal;
import com.entronomia.aplicaciones.excepciones.ErrorEnConversionADuracionEnMinutosException;
import com.entronomia.aplicaciones.modelos.Titulo;
import com.entronomia.aplicaciones.modelos.TituloOmbd;
import com.google.gson.FieldNamingPolicy;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import java.io.IOException;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.util.Scanner;
public class InventarioDos {
public static void main(String[] args) throws IOException, InterruptedException {
Scanner entrada = new Scanner(System.in);
System.out.println("Nombre del título a buscar:");
String titulo = entrada.nextLine();
String url = "http://www.omdbapi.com/?t=" + titulo + "&apikey=d2b017ac";
try {
HttpClient cliente = HttpClient.newHttpClient();
HttpRequest requerimiento = HttpRequest.newBuilder().uri(URI.create(url)).GET().build();
HttpResponse<String> respuesta = cliente.send(requerimiento, HttpResponse.BodyHandlers.ofString());
String json = respuesta.body();
System.out.println(json);
Gson gson = new GsonBuilder().setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE).create();
TituloOmbd nuevoTituloOmbd = gson.fromJson(json, TituloOmbd.class);
System.out.println(nuevoTituloOmbd);
Titulo nuevoTitulo = new Titulo(nuevoTituloOmbd);
System.out.println(nuevoTitulo);
} catch (NumberFormatException e) {
System.out.println("Error de formato numérico");
} catch (IllegalArgumentException e) {
System.out.println("Error en la dirección uri");
} catch (ErrorEnConversionADuracionEnMinutosException e) {
System.out.println(e.getMessage());
} finally {
System.out.println("Fin del programa");
}
}
}