From b06d8457a188b7bcecb1347fbd63e1cf23e945df Mon Sep 17 00:00:00 2001 From: JotaJota96 <jjap96@gmail.com> Date: Sat, 14 Sep 2019 18:25:00 -0300 Subject: [PATCH] Se agrego etiquetas de persistencia en las clases --- .../nbproject/project.properties | 9 ++-- .../src/Logica/Clases/Administrador.java | 24 ++++++--- .../src/Logica/Clases/Canal.java | 34 +++++++++++- .../src/Logica/Clases/Categoria.java | 13 +++++ .../src/Logica/Clases/Comentario.java | 34 +++++++++++- .../Logica/Clases/ListaDeReproduccion.java | 33 ++++++++++++ .../src/Logica/Clases/Persona.java | 26 ++++++++- .../src/Logica/Clases/Usuario.java | 53 ++++++++++++++++--- .../src/Logica/Clases/Valoracion.java | 27 +++++++++- .../src/Logica/Clases/Video.java | 53 +++++++++++++++++-- .../src/META-INF/persistence.xml | 22 ++++++++ .../src/Presentacion/DatosDePrueba.java | 20 +++++++ 12 files changed, 322 insertions(+), 26 deletions(-) create mode 100644 UyTube_aplicacion/src/META-INF/persistence.xml diff --git a/UyTube_aplicacion/nbproject/project.properties b/UyTube_aplicacion/nbproject/project.properties index 2a6b4a3..065f169 100644 --- a/UyTube_aplicacion/nbproject/project.properties +++ b/UyTube_aplicacion/nbproject/project.properties @@ -1,6 +1,6 @@ annotation.processing.enabled=true annotation.processing.enabled.in.editor=false -annotation.processing.processor.options= +annotation.processing.processor.options=-Aeclipselink.canonicalmodel.use_static_factory=false annotation.processing.processors.list= annotation.processing.run.all.processors=true annotation.processing.source.output=${build.generated.sources.dir}/ap-source-output @@ -47,7 +47,9 @@ javac.classpath=\ <<<<<<< HEAD:\ ${file.reference.jcalendar-1.4.jar-3}:\ ${file.reference.jcalendar-1.4.jar-4}:\ - ${file.reference.jcalendar-1.4.jar-5} + ${file.reference.jcalendar-1.4.jar-5}:\ + ${libs.PostgreSQLDriver.classpath}:\ + ${libs.eclipselink.classpath} <<<<<<< HEAD:\ ${file.reference.jcalendar-1.4.jar-1} ${file.reference.jcalendar-1.4.jar}:\ @@ -65,7 +67,8 @@ javac.compilerargs= javac.deprecation=false javac.external.vm=true javac.processorpath=\ - ${javac.classpath} + ${javac.classpath}:\ + ${libs.eclipselinkmodelgen.classpath} javac.source=1.8 javac.target=1.8 javac.test.classpath=\ diff --git a/UyTube_aplicacion/src/Logica/Clases/Administrador.java b/UyTube_aplicacion/src/Logica/Clases/Administrador.java index 6093d8f..3dae8c6 100644 --- a/UyTube_aplicacion/src/Logica/Clases/Administrador.java +++ b/UyTube_aplicacion/src/Logica/Clases/Administrador.java @@ -1,12 +1,26 @@ package Logica.Clases; +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.Table; + +@Entity +@Table(name="administrador") public class Administrador extends Persona{ - private int idAdmin; private static int contadorAdministrador = 1; - + + @Id + private int id; + + //------------------------------------------------------------------------- + + public Administrador() { + super(); + } + public Administrador(int id, String contrasenia, String nombre, String apellido){ super(nombre,apellido,contrasenia); - idAdmin = id; + this.id = id; } public static int getNuevoID(){ @@ -14,9 +28,7 @@ public class Administrador extends Persona{ } public int getIdAdmin() { - return idAdmin; + return id; } - - } diff --git a/UyTube_aplicacion/src/Logica/Clases/Canal.java b/UyTube_aplicacion/src/Logica/Clases/Canal.java index a93a725..1080b83 100644 --- a/UyTube_aplicacion/src/Logica/Clases/Canal.java +++ b/UyTube_aplicacion/src/Logica/Clases/Canal.java @@ -10,17 +10,47 @@ import Logica.Enumerados.TipoListaDeReproduccion; import java.util.ArrayList; import java.util.Map; import java.util.TreeMap; - +import javax.persistence.CascadeType; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.EnumType; +import javax.persistence.Enumerated; +import javax.persistence.Id; +import javax.persistence.JoinColumn; +import javax.persistence.OneToMany; +import javax.persistence.Table; + +@Entity +@Table(name = "canal") public class Canal { - private static int contadorCanal = 1; + + @Id + @Column(name = "id") private int id; + + @Column(name = "nombre") private String nombre; + + @Column(name = "descripcion") private String descripcion; + + @Enumerated(EnumType.STRING) + @Column(name = "privacidad") private Privacidad privacidad; + + @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true) + @JoinColumn(name = "id_canal") private Map<Integer, ListaDeReproduccion> misListas; + + @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true) + @JoinColumn(name = "id_canal") private Map<Integer, Video> misVideos; + //------------------------------------------------------------------------------------- + public Canal() { + } + public Canal(int id, String nombre, String descripcion, Privacidad privacidad) { if (nombre.equals("")){ throw new RuntimeException("El nombre del canal no puede ser vacio"); diff --git a/UyTube_aplicacion/src/Logica/Clases/Categoria.java b/UyTube_aplicacion/src/Logica/Clases/Categoria.java index 2577bf8..126d75b 100644 --- a/UyTube_aplicacion/src/Logica/Clases/Categoria.java +++ b/UyTube_aplicacion/src/Logica/Clases/Categoria.java @@ -1,8 +1,21 @@ package Logica.Clases; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.Table; + +@Entity +@Table(name = "categoria") public class Categoria { + @Id + @Column(name = "nombre") private String nombre; + //--------------------------------------------------------------------------- + public Categoria() { + } + public Categoria(String nombre) { if (nombre.equals("")){ throw new RuntimeException("El nombre de la categoria no puede ser vacio"); diff --git a/UyTube_aplicacion/src/Logica/Clases/Comentario.java b/UyTube_aplicacion/src/Logica/Clases/Comentario.java index 93d9a78..8349cf5 100644 --- a/UyTube_aplicacion/src/Logica/Clases/Comentario.java +++ b/UyTube_aplicacion/src/Logica/Clases/Comentario.java @@ -3,17 +3,47 @@ package Logica.Clases; import Logica.DataType.DtComentario; import java.sql.Date; import java.util.ArrayList; +import java.util.List; +import javax.persistence.Basic; +import javax.persistence.CascadeType; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.JoinColumn; +import javax.persistence.OneToMany; +import javax.persistence.OneToOne; +import javax.persistence.Table; +@Entity +@Table(name = "comentario") public class Comentario { - private static int contadorComentarios = 1; + @Id + @Column(name = "id") private int id; + + @Basic + @Column(name = "fecha") private Date fecha; + + @Column(name = "texto") private String texto; + + @Column(name = "nivel") private int nivelSubComentario; + + @OneToOne(cascade = CascadeType.PERSIST) + @JoinColumn(name = "nick_usuario") private Usuario usr; - private ArrayList<Comentario> misComentario; + + @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true) + @JoinColumn(name = "id_com_padre") + private List<Comentario> misComentario; + + //--------------------------------------------------------------------------- + public Comentario() { + } public Comentario(int id, Date fecha, String texto, int nivelSubComentario, Usuario usr) { if(usr==null){ diff --git a/UyTube_aplicacion/src/Logica/Clases/ListaDeReproduccion.java b/UyTube_aplicacion/src/Logica/Clases/ListaDeReproduccion.java index 38649e2..d485eb6 100644 --- a/UyTube_aplicacion/src/Logica/Clases/ListaDeReproduccion.java +++ b/UyTube_aplicacion/src/Logica/Clases/ListaDeReproduccion.java @@ -8,17 +8,50 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Map; import java.util.TreeMap; +import javax.persistence.CascadeType; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.EnumType; +import javax.persistence.Enumerated; +import javax.persistence.Id; +import javax.persistence.JoinColumn; +import javax.persistence.JoinTable; +import javax.persistence.ManyToMany; +import javax.persistence.Table; +@Entity +@Table(name = "lista_de_reproduccion") public class ListaDeReproduccion { private static int contadorListasDeReproduccion = 1; private static ArrayList<String> nombresListasPorDefecto = new ArrayList(Arrays.asList("Ver mas tarde")); + @Id + @Column(name = "id") private int id; + + @Column(name = "nombre") private String nombre; + + @Enumerated(EnumType.STRING) + @Column(name = "privacidad") private Privacidad privacidad; + + @Enumerated(EnumType.STRING) + @Column(name = "tipo") private TipoListaDeReproduccion tipo; + + @Column(name = "categoria") private String categoria; + + @ManyToMany(cascade = {CascadeType.PERSIST, CascadeType.MERGE}) + @JoinTable(name = "videos_en_listas", + joinColumns = @JoinColumn(name = "id_lista"), + inverseJoinColumns = @JoinColumn(name = "id_video")) private Map<Integer, Video> misVideos; + + //----------------------------------------------------------------------------- + public ListaDeReproduccion() { + } public ListaDeReproduccion(int id, String nombre, Privacidad privacidad, TipoListaDeReproduccion tipo, String categoria) { if (nombre.equals("")){ diff --git a/UyTube_aplicacion/src/Logica/Clases/Persona.java b/UyTube_aplicacion/src/Logica/Clases/Persona.java index 7fe49a9..7095aea 100644 --- a/UyTube_aplicacion/src/Logica/Clases/Persona.java +++ b/UyTube_aplicacion/src/Logica/Clases/Persona.java @@ -1,12 +1,34 @@ package Logica.Clases; -public class Persona { +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.Inheritance; +import javax.persistence.InheritanceType; + +@Entity +@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS) +public abstract class Persona { + @Id + private int id; + + @Column(name = "nombre") private String nombre; + + @Column(name = "apellido") private String apellido; + + @Column(name = "contrasenia") private String contrasenia; + //----------------------------------------------------------------------------- + + public Persona() { + } + + public Persona(String nombre, String apellido, String contrasenia) { - if(contrasenia == ""){ + if(contrasenia.equals("")){ throw new RuntimeException("La contraseña no puede ser Vacio"); } this.nombre = nombre; diff --git a/UyTube_aplicacion/src/Logica/Clases/Usuario.java b/UyTube_aplicacion/src/Logica/Clases/Usuario.java index 6f0de14..2480c3a 100644 --- a/UyTube_aplicacion/src/Logica/Clases/Usuario.java +++ b/UyTube_aplicacion/src/Logica/Clases/Usuario.java @@ -4,20 +4,59 @@ import Logica.DataType.*; import java.util.ArrayList; import java.util.Map; import java.util.TreeMap; +import javax.persistence.Basic; +import javax.persistence.CascadeType; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.JoinColumn; +import javax.persistence.JoinTable; +import javax.persistence.OneToMany; +import javax.persistence.OneToOne; +import javax.persistence.Table; +@Entity +@Table(name="usuario") public class Usuario extends Persona{ + @Id + @Column(name = "nickname") + private String id; - private String nickname; + @Column(name = "correo") private String correo; + + @Basic + @Column(name = "fecha_nacimiento") private Date fechaNacimiento; + + @Column(name = "imagen") private String imagen; + + @Column(name = "seguidores") private int seguidores; + + @OneToOne(cascade = CascadeType.PERSIST) + @JoinColumn(name = "id_canal") private Canal MiCanal; + + @OneToMany(cascade = {CascadeType.PERSIST, CascadeType.MERGE}) + @JoinTable(name = "usuarios_seguidores", + joinColumns = @JoinColumn(name = "nick_seguido"), + inverseJoinColumns = @JoinColumn(name = "nick_seguidor")) private Map<String, Usuario> misSeguidores; + + @OneToMany(cascade = {CascadeType.PERSIST, CascadeType.MERGE}) + @JoinTable(name = "usuarios_seguidos", + joinColumns = @JoinColumn(name = "nick_seguidor"), + inverseJoinColumns = @JoinColumn(name = "nick_seguido")) private Map<String, Usuario> seguidos; + //---------------------------------------------------------------------------------- + public Usuario() { + super(); + } - public Usuario(String nickname, String correo, Date fechaNacimiento, String imagen, String contrasenia, String nombre, String apellido ,DtCanal DTC) { + public Usuario(String nickname, String correo, Date fechaNacimiento, String imagen, String contrasenia, String nombre, String apellido, DtCanal DTC) { super(nombre,apellido,contrasenia); if(fechaNacimiento == null){ @@ -34,7 +73,7 @@ public class Usuario extends Persona{ throw new RuntimeException("El correo no puede ser Vacio"); } - this.nickname = nickname; + this.id = nickname; this.correo = correo; this.fechaNacimiento = fechaNacimiento; this.imagen = imagen; @@ -45,7 +84,7 @@ public class Usuario extends Persona{ } public String getNickname() { - return nickname; + return id; } public String getCorreo() { @@ -65,7 +104,7 @@ public class Usuario extends Persona{ } public DtUsuario getDT(){ - return new DtUsuario(this.nickname, super.getContrasenia(), super.getNombre(), super.getApellido(), this.correo, this.fechaNacimiento, this.imagen, this.seguidores); + return new DtUsuario(this.id, super.getContrasenia(), super.getNombre(), super.getApellido(), this.correo, this.fechaNacimiento, this.imagen, this.seguidores); } public void actualizarListasPorDefecto(){ @@ -136,7 +175,7 @@ public class Usuario extends Persona{ throw new RuntimeException("El usuario no puede ser null"); } - if (this.misSeguidores.containsKey(Usu.nickname)){ + if (this.misSeguidores.containsKey(Usu.id)){ this.misSeguidores.remove(Usu.getNickname()); this.seguidores--; }else{ @@ -219,7 +258,7 @@ public class Usuario extends Persona{ if(DtCanal == null){ throw new RuntimeException("El canal no puede ser null"); } - if (this.nickname != DtUsu.getNickname()){ + if (this.id != DtUsu.getNickname()){ throw new RuntimeException("El nickname no puede ser modificado"); } if (this.correo != DtUsu.getCorreo()){ diff --git a/UyTube_aplicacion/src/Logica/Clases/Valoracion.java b/UyTube_aplicacion/src/Logica/Clases/Valoracion.java index 626f96c..9393633 100644 --- a/UyTube_aplicacion/src/Logica/Clases/Valoracion.java +++ b/UyTube_aplicacion/src/Logica/Clases/Valoracion.java @@ -2,11 +2,36 @@ package Logica.Clases; import Logica.DataType.DtValoracion; import Logica.Enumerados.TipoValoracion; +import javax.persistence.CascadeType; +import javax.persistence.Entity; +import javax.persistence.EnumType; +import javax.persistence.Enumerated; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.JoinColumn; +import javax.persistence.OneToOne; +import javax.persistence.Table; +@Entity +@Table(name = "valoracion") public class Valoracion { + + @Id + @GeneratedValue(strategy=GenerationType.IDENTITY) + private int id; + + @Enumerated(EnumType.STRING) private TipoValoracion val; + + @OneToOne(cascade = CascadeType.PERSIST) + @JoinColumn(name = "nick_usuario") private Usuario usr; - + + //----------------------------------------------------------------------- + public Valoracion() { + } + public Valoracion(TipoValoracion val, Usuario usr) { if(usr==null){ throw new RuntimeException("Usuario No puede ser null"); diff --git a/UyTube_aplicacion/src/Logica/Clases/Video.java b/UyTube_aplicacion/src/Logica/Clases/Video.java index 492f121..5c45fa6 100644 --- a/UyTube_aplicacion/src/Logica/Clases/Video.java +++ b/UyTube_aplicacion/src/Logica/Clases/Video.java @@ -7,24 +7,71 @@ import java.sql.Date; import Logica.Enumerados.Privacidad; import Logica.Enumerados.TipoValoracion; import java.util.ArrayList; +import java.util.List; import java.util.Map; import java.util.TreeMap; +import javax.persistence.Basic; +import javax.persistence.CascadeType; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.EnumType; +import javax.persistence.Enumerated; +import javax.persistence.Id; +import javax.persistence.JoinColumn; +import javax.persistence.OneToMany; +import javax.persistence.Table; -public class Video { +@Entity +@Table(name = "video") +public class Video { + private static int idActual = 1; + + @Id + @Column(name = "id") private int id; + + @Column(name = "nombre") private String nombre; + + @Column(name = "descripcion") private String descripcion; + + @Basic + @Column(name = "duracion") private Time duracion; + + @Basic + @Column(name = "fecha_publicacion") private Date fechaPublicacion; + + + @Column(name = "url") private String urlVideoOriginal; + + @Enumerated(EnumType.STRING) private Privacidad privacidad = Privacidad.PRIVADO; + + + @Column(name = "categoria") private String categoria; + + + @Column(name = "cant_likes") private int cantLikes = 0; + + + @Column(name = "cant_dislikes") private int cantDisLikes = 0; - private ArrayList<Valoracion> valoraciones; + + @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true) + @JoinColumn(name = "id_video") + private List<Valoracion> valoraciones; + + @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true) + @JoinColumn(name = "id_video") private Map<Integer, Comentario> comentarios; - private static int idActual = 1; + //------------------------------------------------------------------------ public Video(){ } diff --git a/UyTube_aplicacion/src/META-INF/persistence.xml b/UyTube_aplicacion/src/META-INF/persistence.xml new file mode 100644 index 0000000..8ea3655 --- /dev/null +++ b/UyTube_aplicacion/src/META-INF/persistence.xml @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="UTF-8"?> +<persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd"> + <persistence-unit name="UyTubePU" transaction-type="RESOURCE_LOCAL"> + <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider> + <class>Logica.Clases.Administrador</class> + <class>Logica.Clases.Persona</class> + <class>Logica.Clases.Valoracion</class> + <class>Logica.Clases.Canal</class> + <class>Logica.Clases.Categoria</class> + <class>Logica.Clases.Comentario</class> + <class>Logica.Clases.ListaDeReproduccion</class> + <class>Logica.Clases.Usuario</class> + <class>Logica.Clases.Video</class> + <properties> + <property name="javax.persistence.jdbc.url" value="jdbc:postgresql://localhost:5432/UyTube"/> + <property name="javax.persistence.jdbc.user" value="postgres"/> + <property name="javax.persistence.jdbc.driver" value="org.postgresql.Driver"/> + <property name="javax.persistence.jdbc.password" value="1234"/> + <property name="javax.persistence.schema-generation.database.action" value="create"/> + </properties> + </persistence-unit> +</persistence> diff --git a/UyTube_aplicacion/src/Presentacion/DatosDePrueba.java b/UyTube_aplicacion/src/Presentacion/DatosDePrueba.java index 645809e..a1e299f 100644 --- a/UyTube_aplicacion/src/Presentacion/DatosDePrueba.java +++ b/UyTube_aplicacion/src/Presentacion/DatosDePrueba.java @@ -8,6 +8,9 @@ import Logica.Enumerados.*; import java.sql.Date; import java.sql.Time; import java.util.ArrayList; +import javax.persistence.EntityManager; +import javax.persistence.EntityManagerFactory; +import javax.persistence.Persistence; /** * Esta clase fue hecha para cargar datos de prueba en el sistema * @author Juan @@ -23,6 +26,22 @@ public class DatosDePrueba { sys = f.getIAdmin(); // ahora se puede interactuar con el sistema invocando sus funciones mediante sys + + EntityManagerFactory factory = null; + EntityManager manager = null; + + try { + factory = Persistence.createEntityManagerFactory("UyTubePU"); + manager = factory.createEntityManager(); + } catch (Exception e) { + System.out.println("//////////////////////////"); + System.out.println(e.getMessage()); + System.out.println("//////////////////////////"); + } + + System.exit(0); + + /* cargarCategorias(); cargarUsuariosYCanales(); cargarSeguidores(); @@ -35,6 +54,7 @@ public class DatosDePrueba { sys.liberarMemoriaVideo(); sys.liberarMemoriaUsuarioActual(); sys.liberarMemoriaUsuario(); + */ } private static void cargarCategorias(){ -- GitLab