5.1. DESENVOLVIMENTO DA APLICAÇÃO GRÁFICO
5.1.4. Comportamento da aplicação e interface gráfico
A nível de interface gráfico este foi desenhado de forma a ser user-friendly e bastante intuitivo e, para isso, esta está organizada de maneira a assegurar um aspeto importante que já referi anteriormente e que se trata de evitar que o utilizador possa adicionar ou eliminar uma
tag do sistema durante uma monitorização. Assim, estas duas últimas funcionalidades
encontram-se visíveis apenas se clicarmos para as visualizar e, claro está, se não estiver a decorrer nenhuma monitorização, caso contrário a janela volta a adaptar-se somente à largura do gráfico e da tabela.
Relativamente à opção de adicionar uma tag ao sistema esta só é aceite se, após verificação, não existir já alguma com o mesmo MAC address e, quanto à remoção, esta é feita através da seleção da tag numa comboBox contendo todas as tags existentes. Para monitorizar uma placa o sistema é o mesmo que o da remoção, através de uma comboBox é possível selecionar uma tag existente e, a partir desse momento, como referi, as opções de adicionar ou remover ficam inacessíveis até que a monitorização seja interrompida.
Quanto às listas, sempre que novos objetos são adicionados, em ambas isto é feito no final da mesma. Contudo e como foi explicado anteriormente, tendo em conta que não é vantajoso para a aplicação guardar todos os registos dos scans recebidos foi imposto o limite de cinco scans como máximo para cada tag e o código implementado para isso é apresentado na figura seguinte.
50
Figura 5.9 Código para limitar com 5 o número de scans de cada tag
Como se pode verificar, para conseguir isso percorremos toda a lista L_AP_scans e contamos todas as vezes que encontramos um scan relativo a “x.m_MAC_board” que foi o scan que já foi adicionado ao final da lista antes de este código ser executado. Caso esta contagem seja superior a cinco, voltamos a executar um ciclo no qual vamos procurar a primeiro scan dessa mesma tag para então o remover. Esta abordagem é possível uma vez que a lista está organizada do scan mais antigo para o mais recente e, como tal, sempre que é recebido um novo scan, caso seja necessário remover algum, será o que surgir em primeiro na lista.
Para além das duas listas que já foram referidas foi ainda necessário a criação de uma outra lista para facilitar o armazenamento dos valores que vão estar no gráfico – “L_AP_scans_chart”. Uma vez que o gráfico só apresenta no máximo 15 valores para cada AP detetado, então este será o limite máximo desta lista. Contudo, esta apenas receberá os valores da tag em monitorização, ou seja, todos os scans presentes nesta lista apenas dizem respeito a uma tag.
Quando o utilizador escolhe uma tag e inicia a monitorização, o sistema vai então verificar se existem scans antigos relativos à mesma e isso vai ser feito recorrendo à seguinte função implementada.
51
Figura 5.10 Função implementada para obtenção dos últimos scans de uma determinada tag
Para o efeito é então criada uma lista de scans auxiliar que vai ser preenchida com scans à medida que a “L_AP_scans” vai sendo percorrida e, como o limite de 5 já foi imposto nesta último não precisamos de verificar novamente. Esta função tem então a particularidade de retornar, em vez de um objeto, uma lista de objetos, neste caso uma lista de objetos “AP_scan” e esta lista vai então ser copiada para a “L_AP_scans_chart” depois de esta ter sido completamente apagada.
Assim sendo, quando a monitorização é iniciada, todos os valores de “L_AP_scans_chart” são carregados para o gráfico e, para a tabela, é carregado são carregados os valores do último scan referente à tag em questão presente na “L_AP_scans”.
Falta, por último, falar da implementação de uma outra funcionalidade que não era requisito, mas que também já foi mencionada nesta dissertação. A possibilidade de escolher os APs que são representados no gráfico foi uma opção extra que parece ser de toda a utilidade. Assim, para que isto fosse possível, uma lista de strings foi criada que contém os MAC address dos APs que o utilizador quer que apareçam no gráfico. Assim, por definição, sempre que uma monitorização é iniciada todos os APs encontrados estarão selecionados. A partir daí, sempre que uma “checkBox” é pressionada, o seguinte evento será desencadeado.
Figura 5.11 Evento desencadeado quando o valor da checkBox da tabela é alterado
O corpo deste evento resumirá-se então, em caso de a checkBox passar a false, a remover o MAC address desse AP da lista e, no caso de a checkBox passar true, adicionar o MAC address à lista.
52
A representação dos valores quer no gráfico quer na tabela ainda não foi abordada, mas esta é feita de duas maneiras diferentes. Uma delas e a mais simples, é usada na altura em que o utilizador inicia uma monitorização, na qual simplesmente é necessário carregar a tabela com o último scan (caso exista) e com todas os APs selecionados e o gráfico com os últimos scans e todos os APs representados.
Contudo, quando estamos em monitorização e um novo scan é recebido certos pormenores têm de ser levados em conta. Um deles depara-se com o facto de memorizar quais os APs que estavam selecionados para monitorização uma vez que estes têm de ser mantidos e o outro prende-se com o facto da tabela poder estar vazia (no caso em que o utilizador inicia uma monitorização, mas não existia nenhum scan na “L_AP_scans”)
Assim sendo, caso a lista “L_AP_scans_chart” contenha apenas um valor (que foi adicionado a esta recentemente, mas ainda não foi impresso na tabela ou no gráfico) todos os APs serão adicionados com representação ativa.
Figura 5.12 Condição usada para verificar se é a primeira leitura de uma determinada tag
Caso isto não aconteça, os APs vão sendo adicionados à tabela com a representação ativa ou desativa consoante as opções anteriores através do seguinte código.
Figura 5.13 Condição para adicionar uma leitura à tabela tendo em conta os APs selecionados anteriormente
Por último, a atualização do gráfico é feita dependo dos MAC address contidos na lista dos mesmos, representando o respetivo gráfico em caso positivo e não representado em caso negativo.
53