/** * 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 pckEngenho; import pckPlano.*; import pckDemanda.Encomenda; import pckMapa.*; import pckGerador.*; import pckInterface.*; import pckDesenho.*; import java.awt.*; public class EngenhoImpl extends Engenho{ private Plano plano; private Veiculo[] aVeiculos; private Encomenda[] aEncomendas; private Mapa mapa; private Retangulo rPrincipal; private Retangulo rSecundario; private Gravura gravP; private Gravura gravS; private String veiculosPath; private String encomendasPath; private String trechosPath; private String[] coresValidas = {"preto","azul claro","azul","azul escuro","verde", "verde claro","verde escuro","amarelo","amarelo claro","amarelo escuro","laranja","laranja claro","laranja escuro","vermelho","vermelho claro","vermelho escuro"}; ; private int indiceCor=0; /** * Metodo Construtor da classe Engenho. * Entrada : Tres strings, contendo os paths para os arquivos que contem * as informacoes dos objetos : Veiculo, Encomenda e Trecho, * respectivamente * Saida : - */ public EngenhoImpl(String veicPath, String encPath, String trecPath, Graphics gP, Graphics gS, double xMinP, double xMaxP, double yMinP, double yMaxP, double xMin, double xMax, double yMin, double yMax) { setVeiculosPath(veicPath); setEncomendasPath(encPath); setTrechosPath(trecPath); processa(gP, gS, xMinP, xMaxP, yMinP, yMaxP, xMin, xMax, yMin, yMax); } /** * Seta a variavel que contem o path para o arquivo * que contem a descricao dos veiculos. * Entrada : Uma string contendo o path do arquivo. * Saida : - */ public void setVeiculosPath(String novoVeiculosPath) { this.veiculosPath = novoVeiculosPath; } /** * Seta a variavel que contem o path para o arquivo * que contem a descricao das encomendas. * Entrada : Uma string contendo o path do arquivo. * Saida : - */ public void setEncomendasPath(String novoEncomendasPath) { this.encomendasPath = novoEncomendasPath; } /** * Seta a variavel que contem o path para o arquivo * que contem a descricao dos trechos. * Entrada : Uma string contendo o path do arquivo. * Saida : - */ public void setTrechosPath(String novoTrechosPath) { this.trechosPath = novoTrechosPath; } /** * Construcao dos objetos Veiculo, descritos * no arquivo informado. * Entrada : - * Saida : Vetor contendo objetos do tipo Veiculo. */ private Veiculo[] carregaVeiculos() { Leitura lv = new Leitura (); this.aVeiculos = lv.carregarVeiculo(this.veiculosPath); } /** * Construcao dos objetos Encomenda, descritos * no arquivo informado. * Entrada : - * Saida : Vetor contendo objetos do tipo Encomenda. */ private Encomenda[] carregaEncomendas() { Leitura le = new Leitura(); this.aEncomendas = le.carregarEncomenda(this.encomendasPath); } /** * Construcao dos objetos Trecho, descritos * no arquivo informado. * Entrada : - * Saida : Vetor contendo objetos do tipo Trecho. */ private void carregaTrechos() { this.mapa.carregarMapa(); } /** * A partir das informacoes fornecidas ao Engenho (arquivos de entrada) * inicia um estado para utilizacao da interface com um plano calculado * para estes arquivos de entrada */ private void processa(Graphics gP, Graphics gS, double xMinP, double xMaxP, double yMinP, double yMaxP, double xMin, double xMax, double yMin, double yMax) { Rectangle rPrincR = new Rectangle(); Escala escP = new EscalaImpl(); Escala escS = new EscalaImpl(); Desenhador desenhoMapaPrincipal = new DesenhadorImpl(this.mapa); Desenhador desenhoMapaSecundario = new DesenhadorImpl(this.mapa); Gerador gerador = new GeradorSimples(); Trecho trechoGaragem; this.aVeiculos = this.carregaVeiculos(); this.aEncomendas = this.carregaEncomendas(); this.mapa = new Mapa(this.trechosPath); this.rPrincipal = new Retangulo (xMinP, xMaxP, yMinP, yMaxP); this.rSecundario = new Retangulo (xMin, xMax, yMin, yMax); escP.define(rPrincR,rPrincipal); escS.define(rPrincR, rSecundario); this.gravP = new GravuraImpl(gP, escP, 1); this.gravS = new GravuraImpl(gS, escS, 1); desenhoMapaPrincipal.desenharMapa(this.gravP); desenhoMapaSecundario.desenharMapa(this.gravS); trechoGaragem = (this.mapa.getTrechos())[0]; this.plano = gerador.geraPlano(this.aEncomendas, this.aVeiculos, this.mapa, trechoGaragem); } /** * Retorna um vetor contendo objetos do tipo Veiculo, construidos a * partir das informacoes contidas no arquivo informado. */ public Veiculo[] getVeiculos() { return (this.aVeiculos); } /** * Retorna um vetor contendo objetos do tipo Encomenda, construidos a * partir das informacoes contidas no arquivo informado. */ public Encomenda[] getEncomendas() { return (this.aEncomendas); } /** * Dado um objeto veiculo, desenha no mapa a rota a qual pertence * Entrada : Objetto do tipo Veiculo. * Saida : - */ public void rotaVeiculo(Veiculo veic) { Desenhador desenhoMapaPrincipal = new DesenhadorImpl(this.mapa); desenhoMapaPrincipal.desenharMapa(this.gravP); desenhoMapaPrincipal.pintarRota(this.plano.rotaVeiculo(veic), this.coresValidas[this.indiceCor]); this.indiceCor = ((this.indiceCor + 1)%this.coresValidas.length); } /** * Dado um objeto encomenda, desenha no mapa a rota a qual pertence * Entrada : Objeto do tipo Encomenda * Saida : - */ public void rotaEncomenda(Encomenda enc) { Desenhador desenhoMapaPrincipal = new DesenhadorImpl(this.mapa); desenhoMapaPrincipal.desenharMapa(this.gravP); desenhoMapaPrincipal.pintarRota(this.plano.rotaEncomenda(enc), this.coresValidas[this.indiceCor]); this.indiceCor = ((this.indiceCor + 1)%this.coresValidas.length); } /** * Desenha na tela o mapa limpo, ie, sem as rotas e demais objetos * que possam ter sido desenhados sobre ele anteriormente. * Entrada : Um objeto do tipo Gravura * Saida : - */ public void ReiniciarMapaPrincipal() { Desenhador desenhoMapaPrincipal = new DesenhadorImpl(this.mapa); desenhoMapaPrincipal.desenharMapa(this.gravP); } }