/** * Grupo T - MC726 * Componentes: * Flavia Garcia Poly RA:981191 * Jocelen Correa da Silva RA:981390 * Priscilla Sanches Marques RA:981944 * Ruth Fabiana Leite Vieira RA:982116 * Sergio Ricardo Martelo RA:982141 * Roberto Akira RA:963150 */ package pckPlano; import pckMapa.Trecho; import pckDemanda.Encomenda; import java.util.Date; import java.util.Vector; public class PassoImpl extends Passo { /** * Classe que define a estrutura de um Passo. * * - Um Passo e' o indice de um trecho em uma rota. */ protected Trecho trechoPasso; protected IntervaloData intervaloPasso; protected Encomenda[] encCarregar; protected Encomenda[] encDescarregar; /** * Construtor da Classe * Existem dois construtores, que diferem basicamente no seguinte ponto : Uma delas recebe a quantidade * de encomendas ; enquanto que a outra recebe os vetores ja prontos para copiar no objeto. */ public PassoImpl(Trecho trecho, IntervaloData intervalo, int qcarga, int qdescarga) { this.intervaloPasso = intervalo; this.trechoPasso = trecho; Encomenda[] encCarregar = new Encomenda[qcarga]; Encomenda[] encDescarregar = new Encomenda[qdescarga]; } public PassoImpl(Trecho trecho, IntervaloData intervalo, Encomenda[] carga, Encomenda[] descarga) { int i = 0; this.intervaloPasso = intervalo; this.trechoPasso = trecho; Encomenda[] encCarregar = new Encomenda[carga.length]; for (i=0; i < carga.length; i++) encCarregar[i] = carga[i]; Encomenda[] encDescarregar = new Encomenda[descarga.length]; for (i=0; i < descarga.length; i++) encDescarregar[i] = descarga[i]; } /** * Devolve um objeto com o intervalo de tempo em que esse passo deve * ser executado. * Entrada: nenhuma * Saida: Objeto IntervaloData */ public IntervaloData intervalo() { return intervaloPasso; } public Encomenda[] carrega() { /** * Devolve um vetor com todas as encomendas a serem carregadas nesse. * passo. * Entrada: nenhuma. * Saida: vetor de objetos Encomenda a serem carregados. */ int i = 0; Encomenda[] v = new Encomenda[encCarregar.length]; for (i=0; i < this.encCarregar.length; i++) v[i] = this.encCarregar[i]; return v; } public Encomenda[] descarrega() { /** * Devolve um vetor com todas as encomendas a serem descarregadas. * nesse passo. * Entrada: nenhuma. * Saida: vetor de objetos Encomenda a serem descarregados. */ int i = 0; Encomenda[] v = new Encomenda[encDescarregar.length]; for (i=0; i < this.encDescarregar.length; i++) v[i] = this.encDescarregar[i]; return v; } public Trecho trecho() { /** * Devolve o trecho associado a este passo. * Entrada: nenhuma. * Saida: objeto trecho associado a este passo. */ return this.trechoPasso; } public void incluirEncomendaCarga(Encomenda e) { /** * Insere uma encomenda na relacao de encomendas a serem carregadas * nesse passo da rota. * Entrada: objeto encomenda a ser incluida. * Saida: nenhuma. */ this.encCarregar[this.encCarregar.length] = e; } public void incluirEncomendaDescarga(Encomenda e) { /** * Insere uma encomenda na relacao de encomendas a serem descarregadas * nesse passo da rota. * Entrada: objeto encomenda a ser incluida. * Saida: nenhuma. */ this.encDescarregar[this.encDescarregar.length] = e; } public void excluirEncomendaCarga(Encomenda e) { /** * Excluir uma encomenda da relacao de encomendas a serem carregadas. * nesse passo da rota. * Entrada : objeto encomenda a ser excluido. */ int inovo = 0; int ivelho = 0; Encomenda[] nv = new Encomenda[encCarregar.length -1]; while (ivelho < this.encCarregar.length) { if ((this.encCarregar[ivelho]).getEncomendaId() != e.getEncomendaId()) { nv[inovo] = this.encCarregar[ivelho]; inovo++; } ivelho++; } encCarregar = nv; return; } public void excluirEncomendaDescarga(Encomenda e) { /** * Excluir uma encomenda da relacao de encomendas a serem descarregadas. * nesse passo da rota. * Entrada : objeto encomenda a ser excluido. */ int ivelho = 0; int inovo = 0; Encomenda[] nv = new Encomenda[encDescarregar.length - 1]; while (ivelho < this.encDescarregar.length) { if ((this.encDescarregar[ivelho]).getEncomendaId() != e.getEncomendaId()) { nv[inovo] = this.encDescarregar[ivelho]; inovo++; } ivelho++; } encDescarregar = nv; return; } public void associarTrecho(Trecho t) { /** * Associa um trecho a este passo. * Entrada: trecho a ser associado. * Saida: nenhuma. */ this.trechoPasso = t; } public void associarIntervaloData(IntervaloData t) { /** * Associa um intervalo de tempo a este passo. * Entrada: intervalo a ser associado. * Saida: nenhuma. */ this.intervaloPasso = t; } public int pertenceEncomendaCarga(Encomenda e) { /** * Verifica se uma dada encomenda esta associada ao passo, para * ser carregada. * Entrada : Um objeto do tipo encomenda * Saida : 1, se a encomenda pertencer ao passo; 0, cc. */ int i = 0; do { if (e == this.encCarregar[i]) return(1); i++; } while(i <= this.encCarregar.length); return(0); } public int pertenceEncomendaDescarga(Encomenda e) { /** * Verifica se uma dada encomenda esta associada ao passo, para * ser descarregada. * Entrada : Um objeto do tipo encomenda * Saida : 1, se a encomenda pertencer ao passo; 0, cc. */ int i = 0; do { if (e == this.encDescarregar[i]) return(1); i++; } while(i <= this.encDescarregar.length); return(0); } }