/*
*
* Copyright (c) 2013 - 2014 INT - National Institute of Technology & COPPE - Alberto Luiz Coimbra Institute
- Graduate School and Research in Engineering.
* See the file license.txt for copyright permission.
*
*/
/**
* package relativo as classes de negocio
* Com as classes bean
*
*/
package modelo;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.Transient;
/**
* Classe relativa ao Bean PerioPM que informa os per�odos do Plano Mestre da Produ��o
*
*
* @author daysemou
*
*/
@NamedQueries(
{
@NamedQuery
( name = "PerioPM.recuperaPerioPM",
query = "select p from PerioPM p where p.id = ?"
),
@NamedQuery
( name = "PerioPM.recuperaPerioPMPorPeriodoPM",
query = "select p from PerioPM p where p.periodoPM = ? "
),
@NamedQuery
( name = "PerioPM.recuperaListaDePerioPMs",
query = "select p from PerioPM p order by p.periodoPM"
),
@NamedQuery
( name = "PerioPM.recuperaListaDePerioPMsComPerioPAP",
query = "select p from PerioPM p "+
"left outer join fetch p.perioPAP pap " +
"order by p.periodoPM"
),
@NamedQuery
( name = "PerioPM.recuperaListaPaginadaDePerioPMs",
query = "select distinct p from PerioPM p order by p.periodoPM"
),
@NamedQuery
( name = "PerioPM.recuperaListaPaginadaDePerioPMsCount",
query = "select count (distinct p) from PerioPM p"
),
@NamedQuery
( name = "PerioPM.recuperaPerioPMComDeModPers",
query = "select p from PerioPM p " +
"left outer join fetch p.deModPers " +
"where p = ? "
),
@NamedQuery
( name = "PerioPM.recuperaIntervaloDePerioPMs",
query = "select p from PerioPM p " +
"where p.periodoPM >= ? " +
"and p.periodoPM <= ? " +
"order by p.periodoPM "
),
@NamedQuery
( name = "PerioPM.recuperaListaDePerioPMsPorPerioPAP",
query = "select p from PerioPM p " +
"where p.perioPAP = ? " +
"order by p.periodoPM"
)
}
)
@Entity
@Table(name="PerioPM")
@SequenceGenerator(name="SEQUENCIA",
sequenceName="SEQ_PERIOPM",
allocationSize=1)
public class PerioPM implements Serializable, Comparable<PerioPM> {
private static final long serialVersionUID = 1L;
/** identificador do periodo do plano mestre */
private Long id;
/** numero do periodo do plano mestre */
private int periodoPM;
/** data inicial relativa ao periodo do plano mestre */
private Calendar dataInicial;
/** data final relativa ao periodo do plano mestre */
private Calendar dataFinal;
/** Numero de dias uteis na matriz no periodo do plano mestre */
private double numDiasUteisMatriz;
/** Numero de dias uteis na unidade 2 no periodo do plano mestre */
private double numDiasUteisU2;
private PerioPAP perioPAP;
private List<DeModPer> deModPers;
private List<CapacRec> capacRecs;
/**
* Lista da entidade vis�o que informa a capacidade di�ria por per�odo dispon�vel do tecido
* na matriz, calculada em fun��o da producaoDiariaMaxUnidade2
*/
private transient List<CapacTecView> capacTecViews = new ArrayList<CapacTecView>();
// ********* Construtores *********
public PerioPM() {
}
public PerioPM(int periodoPM, Calendar dataInicial,
Calendar dataFinal, double numDiasUteisMatriz, double numDiasUteisU2) {
this.periodoPM = periodoPM;
this.dataInicial = dataInicial;
this.dataFinal = dataFinal;
this.numDiasUteisMatriz = numDiasUteisMatriz;
this.numDiasUteisU2 = numDiasUteisU2;
}
// ********* M�todos do Tipo Get e Set *********
@Id
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="SEQUENCIA")
@Column(name="ID")
public Long getId() {
return id;
}
@SuppressWarnings("unused")
public void setId(Long id) {
this.id = id;
}
/**
* @return the periodoPM
*/
@Column(nullable=false, unique=true)
public int getPeriodoPM() {
return periodoPM;
}
/**
* @param periodoPM the periodoPM to set
*/
public void setPeriodoPM(int periodoPM) {
this.periodoPM = periodoPM;
}
/**
* @return the dataInicial
*/
@Temporal(value = TemporalType.DATE)
public Calendar getDataInicial() {
return dataInicial;
}
/**
* @param dataInicial the dataInicial to set
*/
public void setDataInicial(Calendar dataInicial) {
this.dataInicial = dataInicial;
}
/**
* @return the dataFinal
*/
@Temporal(value = TemporalType.DATE)
public Calendar getDataFinal() {
return dataFinal;
}
/**
* @param dataFinal the dataFinal to set
*/
public void setDataFinal(Calendar dataFinal) {
this.dataFinal = dataFinal;
}
/**
* @return the numDiasUteisMatriz
*/
public double getNumDiasUteisMatriz() {
return numDiasUteisMatriz;
}
/**
* @param numDiasUteisMatriz the numDiasUteisMatriz to set
*/
public void setNumDiasUteisMatriz(double numDiasUteisMatriz) {
this.numDiasUteisMatriz = numDiasUteisMatriz;
}
/**
* @return the numDiasUteisU2
*/
public double getNumDiasUteisU2() {
return numDiasUteisU2;
}
/**
* @param numDiasUteisU2 the numDiasUteisU2 to set
*/
public void setNumDiasUteisU2(double numDiasUteisU2) {
this.numDiasUteisU2 = numDiasUteisU2;
}
@ManyToOne(fetch = FetchType.LAZY)
// usar lazy normalmente para evitar acabar levando todo o bd
@JoinColumn(name = "PERIOPAP_ID",nullable = false)
public PerioPAP getPerioPAP() {
return perioPAP;
}
public void setPerioPAP(PerioPAP perioPAP) {
this.perioPAP = perioPAP;
}
public void setDeModPers(List<DeModPer> deModPers) {
this.deModPers = deModPers;
}
@OneToMany(mappedBy="periodo")
public List<DeModPer> getDeModPers() {
return deModPers;
}
public void setCapacRecs(List<CapacRec> capacRecs) {
this.capacRecs = capacRecs;
}
/** mappedBy usa o nome do atributo que faz a liga��o no lado one */
@OneToMany(mappedBy="perioPM")
public List<CapacRec> getCapacRecs() {
return capacRecs;
}
@Transient
public List<CapacTecView> getCapacTecViews() {
return capacTecViews;
}
public void setCapacTecViews(List<CapacTecView> capacTecViews) {
this.capacTecViews = capacTecViews;
}
/**
*
* Este m�todo consiste em definir o crit�rio de ordena��o entre 2 objetos PerioPM, que deve estar
* associado a um de seus atributos. No nosso caso, o atributo em quest�o � o 'periodoPM', que � do tipo
* nativo 'int', que sabe internamente se auto-ordenar, gra�as a implementa��o da API Java que o realiza.
*
* @author walanem.junior
* @param PerioPM
* @return int
*
*/
@Override
public int compareTo(PerioPM o) {
return this.periodoPM < o.periodoPM ? -1 : this.periodoPM > o.periodoPM ? 1 : 0;
}
@Override
public String toString(){
return "Periodo - "+this.periodoPM;
}
/**
* Este m�todo poder ser gerado AUTOMATICAMENTE pelo Java, juntamente com o m�todo "equals(Object obj)".
* Eles S�o necess�rios para determinarmos um crit�rio de igualdade entre 2 objetos.
*
* Obs.: � primoridal dar aten��o para este detalhe, principalmente quando trabalhamos com Estruturas
* de Dados como Set.
*
* @return int
*/
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + periodoPM;
return result;
}
/**
* Este m�todo poder ser gerado AUTOMATICAMENTE pelo Java , juntamente com o m�todo "hashCode()".
* Eles S�o necess�rios para determinarmos um criterio de igualdade entre 2 objetos.
*
* Obs.: � primoridal dar aten��o para este detalhe, principalmente quando trabalhamos com Estruturas
* de Dados como Set.
*
* @param Object
* @return boolean
*
*/
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null) {
return false;
}
if (!(obj instanceof PerioPM)) {
return false;
}
PerioPM other = (PerioPM) obj;
if (periodoPM != other.periodoPM) {
return false;
}
return true;
}
}