package modelo;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.*;

// <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
// #[regen=yes,id=DCE.FE7F0ED1-1F0F-741D-6532-FDCA3290DB82]
// </editor-fold> 
@Entity
@Table (name = "Paso")
public class Paso implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int idTabla;

    @Column (name = "identificacion")
    private String identificacion;

    @Column (name = "nombre")
    private String nombre;
    
    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,id=DCE.C64211F2-4287-6C84-A7E5-EC6A991E5453]
    // </editor-fold> 
    @Column (name = "esCondicional")
    private Boolean esCondicional;

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,id=DCE.CC9EA756-2F1B-39F8-A710-449CF55DA593]
    // </editor-fold> 
    @Column (name = "condicion")
    private String condicion;

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,id=DCE.A1D92566-5868-FFD1-D23C-B3D621AB3491]
    // </editor-fold> 
    @Column (name = "accionSistema")
    private Boolean accionSistema;

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,id=DCE.C50676D1-30B4-5FC4-028D-468A67CB8336]
    // </editor-fold> 
    @Column (name = "accionActor")
    private Boolean accionActor;

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,id=DCE.D57842A5-472C-B4D9-E91F-ED966B59F72F]
    // </editor-fold> 
    @Column (name = "inclusionExtension")
    private Boolean inclusionExtension;

    @Column (name = "actor")
    private String actor;

    @Column (name = "casoUso")
    private String casoUso;

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,id=DCE.939085C2-0094-8D53-40C3-70CB6E881087]
    // </editor-fold> 
    @Column (name = "descripcionAccion")
    private String descripcionAccion;

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,id=DCE.D985D4CB-73AE-1053-AF45-06C0363E2BC3]
    // </editor-fold> 
    @Column (name = "valorRendimiento")
    private int valorRendimiento;

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,id=DCE.12BD8025-EFF0-A3CA-2AB4-0F01D98ACA11]
    // </editor-fold> 
    @Column (name = "unidadRendimiento")
    private String unidadRendimiento;

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,id=DCE.CDC02E30-9BE1-D382-1141-AF25BD42CD56]
    // </editor-fold> 
    @Column (name = "comentario")
    private String comentario;

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,id=DCE.14A83DB3-E3C5-5278-0723-3099C6AF7213]
    // </editor-fold> 
    @OneToMany(mappedBy = "mPaso")
    private List<Excepcion> mExcepcion;

    @ManyToOne
    private CasoUso mCasoUso;


    
    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,id=DCE.0639A77F-9FF2-20B2-EFA0-D0AE564D081F]
    // </editor-fold> 
    public Paso () {
        mExcepcion = new ArrayList<Excepcion>();
    }

    public Paso (CasoUso cu) {
        mExcepcion = new ArrayList<Excepcion>();
        mCasoUso = cu;
    }

    /**
     * @return the idTabla
     */
    public int getIdTabla() {
        return idTabla;
    }

    /**
     * @param idTabla the idTabla to set
     */
    public void setIdTabla(int idTabla) {
        this.idTabla = idTabla;
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker ">
    // #[regen=yes,regenBody=yes,id=DCE.6C21F48C-39BC-CFEE-971E-84F44310255A]
    // </editor-fold>
    public String getNombre () {
        return nombre;
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker ">
    // #[regen=yes,regenBody=yes,id=DCE.144D8F04-90B6-9419-D95F-99471489946A]
    // </editor-fold>
    public void setNombre (String val) {
        this.nombre = val;
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,regenBody=yes,id=DCE.6C21F48C-39BC-CFEE-971E-84F44310255A]
    // </editor-fold> 
    public Boolean getAccionActor () {
        return accionActor;
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,regenBody=yes,id=DCE.144D8F04-90B6-9419-D95F-99471489946A]
    // </editor-fold> 
    public void setAccionActor (Boolean val) {
        this.accionActor = val;
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,regenBody=yes,id=DCE.C9CB3DE9-BB56-6B4B-81CE-5BC7B8DC078C]
    // </editor-fold> 
    public Boolean getAccionSistema () {
        return accionSistema;
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,regenBody=yes,id=DCE.A4E3E5A8-DFC2-FBF1-4762-9BD24C103A06]
    // </editor-fold> 
    public void setAccionSistema (Boolean val) {
        this.accionSistema = val;
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,regenBody=yes,id=DCE.669B46C1-4410-4F6F-71FD-AB029B7E0DD6]
    // </editor-fold> 
    public String getComentario () {
        return comentario;
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,regenBody=yes,id=DCE.53E1F87F-4130-2999-A1F8-7A70FC0176D3]
    // </editor-fold> 
    public void setComentario (String val) {
        this.comentario = val;
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,regenBody=yes,id=DCE.7AB44860-7EF2-B15D-B40C-9FC0603BE3F2]
    // </editor-fold> 
    public String getCondicion () {
        return condicion;
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,regenBody=yes,id=DCE.DA52A801-AC91-BD4E-7B8A-64FE89816749]
    // </editor-fold> 
    public void setCondicion (String val) {
        this.condicion = val;
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,regenBody=yes,id=DCE.E9543CD5-AB6F-CCE9-D359-CFAC9CB425FF]
    // </editor-fold> 
    public String getDescripcionAccion () {
        return descripcionAccion;
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,regenBody=yes,id=DCE.78553258-1611-BB08-5C75-B7D4E9800DA1]
    // </editor-fold> 
    public void setDescripcionAccion (String val) {
        this.descripcionAccion = val;
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,regenBody=yes,id=DCE.02CC621A-7032-27EC-7964-D6C771EFC2E6]
    // </editor-fold> 
    public Boolean getEsCondicional () {
        return esCondicional;
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,regenBody=yes,id=DCE.7201028D-D17F-9E1C-476E-311B70CEBC53]
    // </editor-fold> 
    public void setEsCondicional (Boolean val) {
        this.esCondicional = val;
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,regenBody=yes,id=DCE.C6C7BF27-C46D-777D-A24C-51558AFB110D]
    // </editor-fold> 
    public Boolean getInclusionExtension () {
        return inclusionExtension;
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,regenBody=yes,id=DCE.B1B9F876-B5CF-97BF-0A0F-2F7A858F06EE]
    // </editor-fold> 
    public void setInclusionExtension (Boolean val) {
        this.inclusionExtension = val;
    }

    /**
     * @return the actor
     */
    public String getActor() {
        return actor;
    }

    /**
     * @param actor the actor to set
     */
    public void setActor(String actor) {
        this.actor = actor;
    }

    /**
     * @return the casoUso
     */
    public String getCasoUso() {
        return casoUso;
    }

    /**
     * @param casoUso the casoUso to set
     */
    public void setCasoUso(String casoUso) {
        this.casoUso = casoUso;
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,regenBody=yes,id=DCE.4988559E-CEA4-2142-763C-6B209D46AF9D]
    // </editor-fold> 
    public ArrayList<Excepcion> getExcepcion () {
        return (ArrayList)mExcepcion;
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,regenBody=yes,id=DCE.85597782-A990-A027-B8FC-D09F3D05B964]
    // </editor-fold> 
    public void setExcepcion (ArrayList<Excepcion> val) {
        this.mExcepcion = val;
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,regenBody=yes,id=DCE.BD1ED4CF-3A29-4AB1-9B75-968B6C49362B]
    // </editor-fold> 
    public String getUnidadRendimiento () {
        return unidadRendimiento;
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,regenBody=yes,id=DCE.7AAE6AF9-0E70-1885-192B-81A2F07521AA]
    // </editor-fold> 
    public void setUnidadRendimiento (String val) {
        this.unidadRendimiento = val;
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,regenBody=yes,id=DCE.B32705BE-49B0-EE01-49B8-2F4D2F68B5D6]
    // </editor-fold> 
    public int getValorRendimiento () {
        return valorRendimiento;
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,regenBody=yes,id=DCE.1106863C-9D2B-D674-8605-F37F95777E26]
    // </editor-fold> 
    public void setValorRendimiento (int val) {
        this.valorRendimiento = val;
    }

    /**
     * @return the identificacion
     */
    public String getIdentificacion() {
        return identificacion;
    }

    /**
     * @param identificacion the identificacion to set
     */
    public void setIdentificacion(String identificador) {
        this.identificacion = identificador;
    }

    public CasoUso getMCasoUso() {
        return mCasoUso;
    }

    public void setMCasoUso(CasoUso mCasoUso) {
        this.mCasoUso = mCasoUso;
    }

    public Excepcion nuevaExcepcion (Excepcion excepcion) {
        this.getExcepcion().add(excepcion);
        guardarEnBaseDatos(excepcion);
        
        return excepcion;
    }

    @Override
    public String toString() {
        return "Paso{" + "idTabla=" + idTabla + ", identificacion=" + identificacion + ", nombre=" + nombre + ", esCondicional=" +
                esCondicional + ", condicion=" + condicion + ", accionSistema=" + accionSistema + ", accionActor=" + accionActor +
                ", inclusionExtension=" + inclusionExtension + ", actor=" + actor + ", casoUso=" + casoUso + ", descripcionAccion=" +
                descripcionAccion + ", valorRendimiento=" + valorRendimiento + ", unidadRendimiento=" + unidadRendimiento +
                ", comentario=" + comentario + ", mExcepcion=" + mExcepcion + ", mCasoUso=" + mCasoUso + '}';
    }

    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final Paso other = (Paso) obj;
        if ((this.identificacion == null) ? (other.identificacion != null) : !this.identificacion.equals(other.identificacion)) {
            return false;
        }
        return true;
    }

    @Override
    public int hashCode() {
        int hash = 5;
        hash = 47 * hash + (this.identificacion != null ? this.identificacion.hashCode() : 0);
        return hash;
    }

    public static Paso getData(String id, String idCasoUso) {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("AZETA_REMPU");
        EntityManager em = emf.createEntityManager();
        Query q = em.createQuery("SELECT p FROM Paso p WHERE p.identificacion = '"+ id +"' AND p.mCasoUso.identificacion = '"+ idCasoUso +"'");

        Paso paso = (Paso) q.getSingleResult();

        return paso;
    }

    public void guardarEnBaseDatos (Object object) {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("AZETA_REMPU");
        EntityManager em = emf.createEntityManager();
        em.getTransaction().begin();

        try {
            em.persist(object);
            em.getTransaction().commit();

        } catch (Exception e) {
            e.printStackTrace();
            em.getTransaction().rollback();

        } finally {
            em.close();
        }
    }

}

