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