// Last edited on 2000-09-05 04:07:23 by stolfi // Mantém o estado lógico da aplicacao, e provê os comandos do usuário. import Nodo; import Elemento; import Retangulo; import Gravura; import TipoDeServico; import Localizador; public abstract class Engenho { // Modo de operação: public final static int MODO_INICIAL = 0; // Estado inicial da interface public final static int MODO_MELHOR_CAMINHO = 1; // Busca de melhor caminho ativada public final static int MODO_ENUM_SERVICOS = 2; // Busca de servicos ativada ////////////////////////////////////////////////////////////////////// // Rotinas que interrogam o estado do engenho: // public abstract int modo(); // Obtém o modo corrente: public abstract Planta planta(); // Obtém a planta que está sendo analisada pelo engenho. public abstract Logradouro[] logradouros(); // Obtém os logradouros atualmente selecionados: public abstract Elemento[] selecoes(); // Obtém os trechos e servicos atualmente selecionados: public abstract Nodo[] caminhos(); // Obtém os (términos dos) caminhos recentemente computados. // Os caminhos são definidos pelos campos "prev" nos Nodos. public abstract TipoDeServico tipoDesejado(); // O tipo de serviço que será usado na busca // de serviços por tipo e custo. (Pode ser "null"). public abstract double custoMaximo(); // O custo máximo que será usado na busca // de serviços por tipo e custo. (Pode ser Double.MAX_VALUE). public abstract int numDesejado(); // O número máximo de respostas que será usado na busca // de serviços por tipo e custo. public abstract Localizador loc(); // Devolve um Localizador para a planta. ////////////////////////////////////////////////////////////////////// // Rotinas que modificam o estado do engenho: public abstract void mudaModo(int md); // Muda o modo de funcionamento para "md", se for válido. public abstract void cutucaElemento(Elemento ob); // Submete um objeto da planta "ob" (trecho, servico, etc.) ao // engenho central. Normalmente o objeto é selecionado, e/ou a // operação determinada pelo modo corrente é efetuada. public abstract void mudaTipoDesejado(String tipo); public abstract void mudaCustoMaximo(double cMax); public abstract void mudaNumeroDesejado(int num); // Especifica novos parâmetros para busca de // servicos por tipo e custo. Se o modo // corrente for ENUM_SERVICOS e houver um // elemento selecionado, efetua a enumeração. // Se o modo corrente for outro, muda de modo // para ENUM_SERVICOS, descartando as seleções correntes. public abstract void imprimeMapa(String nome, Retangulo mR); // Imprime o mapa (restrito ao retangulo "mR") e o caminho destacado, // em formato Postscript, no arquivo nome + ".ps". public abstract void desenhaMapa(Gravura g, Retangulo mR); // Imprime o mapa (restrito ao retangulo "mR") e o caminho destacado, // no contexto "g". }