• Nenhum resultado encontrado

3.3 Desenho

3.3.2 Front-end package

Este pacote inclui as classes que constroem a parte visual (gráfica) do plugin, também denominado

GUI. Ao contrário do back-end, a execução destas classes é exclusivamente feita no Eclipse, isto é, a GUI foi construída para ser usada apenas no Eclipse.

Sendo o plugin desenvolvido em Java, existem alguns toolkits que poderemos usar para a construção da nossa GUI, como o Abstract Widget Toolkit (AWT), o Standard Widget Toolkit (SWT) e o Swing. Um toolkit inclui um conjunto de widgets, que por sua vez são componentes que compõem umaGUI. Decidimos usar o SWT, pois contém todas as ferramentas de que precisamos e utiliza as bibliotecas gráficas nativas do sistema operacional através do Java Native Interface (JNI).

30 Capítulo 3. Raccode

São agora apresentadas as classes que compõem o front-end do Raccode, cuja descrição consiste na especificação das funcionalidades de cada uma das classes, bem como uma justificação do uso de um tipo de recurso, caso seja preponderante fazê-lo. De notar que a maior parte das classes representadas na Figura 3.13estão relacionadas com outras classes do pacote request, como será mencionado ao longo desta descrição quando necessário:

• Activator: Esta classe é a primeira e a última a ser executada. Quando o Raccode é iniciado, esta classe é a primeira a ser chamada e carrega os dados relativos à autenticação do utilizador e aos servidores armazenados até então. Estes dados são armazenados através da classe Preferences, da biblioteca java.util.prefs.Preferences, que permite guardar um pequeno conjunto de dados de forma permanente, onde esses dados são guardados num ficheiro ou nos registos do sistema (Figura 3.14). Os dados guardados são todos os servidores já conectados pelo Raccode com sucesso, o último servidor a que o Raccode se conectou e os dados de autenticação (username, password, último concurso em que o utilizador se autenticou e se é ou não para carregar estes dados nesta nova sessão). Quando o utilizador encerra o Raccode, esta classe é de novo chamada para guardar todos os valores relativos aos campos anteriormente apresentados.

Figura 3.14: Diagrama de classes da relação Activator com ServerConnection

• JavaLanguageDefinition: Esta classe cria o projeto com natureza Java. A composição do projeto consiste em criar as pastas de input e output (bin e src, respetivamente), as

3.3. Desenho 31 bibliotecas principais, o package e a classe main e a configuração daJVM, que é necessário para executar os programas. Também decidimos guardar os enunciados no próprio projeto, para que possam ser consultados sempre que o utilizador o entender e também por uma questão de organização. Outra caraterística desta classe é que permite organizar os projetos por concurso, em que os problemas associados a um respetivo concurso esteja integrado neste projeto. Assim, o nome do projeto é o nome do concurso e cada problema dá o nome a um package, permitindo ao utilizador ter uma visão hierárquica e limpa dos seus programas no Package Explorer, podendo colapsar ou expandir os projetos.

• LoginPage: Esta classe implementa a primeira página do wizard que contém os campos para a autenticação do utilizador num concurso. Esta página contém três campos: um para a seleção do concurso e dois para os preenchimentos do username e da password. Contém ainda uma CheckBox para o utilizador confirmar se pretende salvar ou não as suas credenciais quando encerrar o plugin e um botão Login para efetuar o login. Se o login for efetuado com sucesso, o botão Next fica ativo e permite ao utilizador avançar para a segunda e última página do wizard.

• PerspectiveFactory: Uma classes que divide as Views que formam a perspetiva do Raccode. A perspetiva é dividida em seis partes: na coluna da esquerda está o Package Explorer ; na coluna central, no topo é apresentado o enunciado do problema, o Editor de Texto é posicionado no centro e o Terminal e Debugger aparecem na vista inferior, divididos em duas tabs; na coluna da direita encontram-se as duas últimas componentes, em cima a vista dos Rankings e em baixo a vista com Perguntas e Respostas (Q&A).

• ProblemHandler: Este handler está associado ao botão New Problem na toolbar e ao item do menu, com o mesmo nome. Quando pressionado, chama a classe NewProblemWizard que cria o wizard para a autenticação e seleção de um problema e uma linguagem de programação. Este wizard é apresentado mais detalhadamente no ponto Wizards desta lista.

• ProblemsPage: Cria a segunda e última página do wizard New Problem. Esta página apenas contém dois campos, sendo eles a seleção do problema e a seleção da linguagem de programação. Ambas as listas são formadas após o login realizado na página anterior ter sido efetuado com sucesso, pois só aí é possível saber qual concurso foi selecionado e que problemas mostrar. Quando ambos os campos tiverem um valor, ou seja, quando for realizada a seleção de um item em ambos os campos por parte do utilizador, o botão Finish é habilitado e o utilizador pode finalizar o wizard.

• ProblemsView: Esta classe expõe o enunciado do problema selecionado. A vista está posicionada na coluna central e no topo. Inicialmente, quando o utilizador ainda não fez qualquer tipo de autenticação e seleção do problema, um pequeno tutorial de como o fazer é apresentado nesta vista, que posteriormente é substituído pelo enunciado quando o utilizador concluir o wizard New Problem. O formato do enunciado é, preferencialmente, em Portable Document Format (PDF), utilizando para a sua leitura o leitor de ficheirosPDF

32 Capítulo 3. Raccode

instalado no sistema. É feito download do ficheiro e guardado no respetivo projeto, para que o utilizador possa trabalhar em modo offline. Caso o problema não contenha o enunciado em formato PDF, é então utilizada a versão HyperText Markup Language (HTML) do enunciado, embora desta forma já seja necessário a conexão à rede.

• QuestionsView: Todas as perguntas submetidas no concurso são processadas e mostradas nesta classe. O processamento serve apenas para filtrar as perguntas que devem ou não ser mostradas num determinado evento. São vários os eventos que estão associados aos vários componentes presentes nesta vista, que está dividida em três partes: Create Question, All Questionse Team Questions. Todas as partes têm botões que desencadeiam os respetivos eventos, mas no All Questions tem a adicionante de conter uma ComboBox com os problemas para que seja mais fácil ao utilizador obter as perguntas sobre um problema em específico. Em Create Question, o utilizador (ou a equipa) pode colocar uma questão clicando no único botão presente nessa secção. Isso irá criar um nova janela com os campos necessários para obter toda informação sobre a pergunta, campos como o assunto da pergunta, a pergunta e a que problema deve estar associada. Para além disso ainda existem dois botões, um para submeter a questão e outro para cancelar a operação. Na secção All Questions existem dois campos, como já foi referido, onde o utilizador seleciona um problema e clica no botão aí presente para serem exibidas todas as perguntas já efetuadas sobre o respetivo problema. Nesta nova janela é apresentada a informação das perguntas, e é também é possível responder a uma pergunta. Para isso basta clicar no botão Answer, que criará um nova janela para colocar a resposta à pergunta. Por fim, na terceira secção também é constituído apenas por um botão que cria uma nova janela com toda a informação das perguntas submetidas pelo utilizador (ou equipa) até ao momento. Aqui é possível saber se uma pergunta já obtém uma resposta, bem como editar uma questão já submetida (clicando em Update).

• RankHandler: Esta classe é um handler que permite ao utilizador ver os rankings através da barra de menus, ao invés de o fazer interagindo com a vista. Apenas tem o método execute() que invoca o método da classe RankView que trata da criação da tabela de classificações. O objetivo de adicionar um menu ao plugin é permitir que o utilizador possa realizar as mesmas operações com as janelas não cruciais minimizadas. • RankView: Associada a esta classe está a vista na perspetiva do Raccode, que tem apenas

um botão. O utilizador ao clicar nesse botão irá criar uma nova janela com classificações com todos os problemas no concurso corrente e com todos os utilizadores registados no concurso. A informação aqui apresentada consiste na nacionalidade do utilizador/equipa, no nome do grupo ao qual o utilizador/equipa está associado, no nome do utilizador/equipa, no número de problemas resolvidos e na pontuação do utilizador.

• ServerPreferences: Classe responsável pela criação da página nas preferências do Eclipse. Nesta página o utilizador pode adicionar um novo servidor ou apagar um existente. O novo servidor só será adicionado à lista se for possível estabelecer uma conexão. Para isso é necessário preencher os dois campos existentes, o primeiro relativo ao host (com o path

3.4. Desenvolvimento 33

Documentos relacionados