/** * 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[quantcarga]; for (i=0; i < carga.length; i++) encCarregar[i] = carga[i]; Encomenda[] encDescarregar = new Encomenda[quantdescarga]; 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[this.quantcarga]; 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[this.quantdescarga]; 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 Encomenda[] excluirEncomendaCarga(Encomenda e) { /** * Excluir uma encomenda da relacao de encomendas a serem carregadas. * nesse passo da rota. * Entrada : objeto encomenda a ser excluido. * Saida : vetor encCarregar modificado, se a saida for -1, isso significa que essa encomenda * nao pertence a esse passo, e portanto nao pode ser excluida ! */ int i = 0; while (i < this.encCarregar.length) { if (this.encCarregar[i] == e) { for(; i < this.encCarregar.length - 1; i++) this.encCarregar[i] = this.encCarregar[i+1]; return(this.encCarregar); } else i++; } return(-1); } public Encomenda[] excluirEncomendaDescarga(Encomenda e) { /** * Excluir uma encomenda da relacao de encomendas a serem descarregadas. * nesse passo da rota. * Entrada : objeto encomenda a ser excluido. * Saida : vetor encDescarregar modificado, se a saida for -1, isso significa que essa encomenda * nao pertence a esse passo, e portanto nao pode ser excluida ! */ int i = 0; while (i < this.encDescarregar.length) { if (this.encDescarregar[i] == e) { for(; i < this.encDescarregar.length - 1; i++) this.encDescarregar[i] = this.encDescarregar[i+1]; return(this.encDescarregar); } else i++; } return(-1); } 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); } }