package pckPlano;

/** Ultima atualizacao : 17-05-2001 
 * Autores : Claudio Copello - 980860
 *           Joao Porto - 981389
 *           Joao Guilherme - 981374
 *           Joyce Ynoue - 981414
 *           Eduardo Lins - 952302
 *           Fernando Viegas - 900508
 */

import pckDemanda.Encomenda;
import pckMapa.Trecho;
import pckMapa.Mapa;

public abstract class Validador {
    /** Classe que valida o plano de atendimento baseado em
     * requisicoes de encomendas.
     */
    
    
    /** Atributos da classe */

    public String mensagemErro = "";


    /** Metodos da classe */

    public abstract boolean pA( Plano planoAtendimento, Encomenda[] encomendas, Veiculo[] veiculos, Mapa mapa );
    /** Validacao do plano de atendimento 
     * Entrada: Plano de Atendimento, Encomendas e Veiculos
     * Saida: Verdadeiro se o Plano de Atendimento e valido. Falso, caso contrario
     */

    public abstract boolean rotas( Rota[] planoRotas, Mapa mapa );
    /** Validacao das rotas do Plano de Atendimento 
     * Entrada: Plano de Atendimento, Encomendas e Veiculos
     * Saida: Verdadeiro se o Plano de Rotas e valido. Falso, caso contrario
     */

    public abstract boolean encomendas( Plano planoAtendimento, Encomenda[] encomendas );
    /** Validacao das encomendas do plano de atendimento 
     * Entrada: Plano de Atendimento, Encomendas e Veiculos
     * Saida: Verdadeiro se o Plano de Atendimento satisfaz as encomendas. Falso, caso contrario
     */

    public abstract boolean capacidade( Plano planoAtendimento );
    /** Validacao da capacidade do veiculo
     * Entrada: Plano de Atendimento, Encomendas e Veiculos
     * Saida: Verdadeiro se a capacidade e sempre valida. Falso, caso contrario
     */

    public abstract String getMensagemErro();
    /** Obtem a mensagem de erro gerada pelos metodos anteriores 
     * Entrada: nenhuma
     * Saida: Mensagem de erro gerada pelos outros metodos da classe
     */


    public abstract boolean conectTrecho( Rota[] planoRotas, Mapa mapa );
    /** Validacao da conectividade dos trechos 
     * Entrada: Plano de Rotas
     * Saida: Verdadeiro se os trechos sao conexos. Falso, caso contrario
     */

    public abstract boolean conectHorario( Rota[] planoRotas );
    /** Validacao da conectividade dos horarios 
     * Entrada: Plano de Rotas
     * Saida: Verdadeiro se os horarios sao conexos . Falso, caso contrario
     */

    public abstract boolean tempoPercTrechos( Rota[] planoRotas );
    /** Validacao do tempo de permanencia em um trecho 
     * Entrada: Plano de Atendimento, Encomendas e Veiculos
     * Saida: Verdadeiro se o tempo de permanencia eh valido. Falso, caso contrario
     */

    public abstract boolean trechoCargaDescargaEncomenda( Plano planoAtendimento, Encomenda[] encomendas );
    /** Validacao se todas as encomendas foram carregadas/descarregadas em um trecho
     * Entrada: Plano de Atendimento, Encomendas e Veiculos
     * Saida: Verdadeiro se todas encomendas foram contempladas. Falso, caso contrario
     */

    public abstract boolean horarioCargaDescargaEncomenda( Plano planoAtendimento, Encomenda[] encomendas );
    /** Validacao se todas as encomendas foram carregadas/descarregadas no horario
     * Entrada: Plano de Atendimento, Encomendas e Veiculos
     * Saida: Verdadeiro se todas as encomendas foram carregadas/descarregadas no horario. Falso, caso contrario
     */

}























