Table of Contents
Como implementar uma nova Spec
Implementar uma nova Spec é um processo trabalhoso e por vezes demorado. Como trabalhamos há mais de dois anos com essa atividade, temos uma certa experiência no assunto, que está traduzida nesta dica.
Os passos são os seguintes:
1. Ler a Spec
- Não tem como fugir, você precisa ler o texto da especificação, nem que seja a parte conceitual → para que serve isso?
- Nessa leitura, identifique os key-methods (para um serviço) ou as principais classes, para começar os testes.
- Nesta fase e importante ver quem fez o quê. Muitas Specs já possuem implementações livre ou exemplos → use-os para separar o essencial das firulas
2. Mapear para conceitos TerraLib
- Uma vez identificados os métodos para um serviço, ou objetos para um formato, passe a mapear esses conceitos para o que existe na TerraLib.
- Em princípio, a TerraLib dá suporte a muita coisa mesmo, nativamente. Outras só adaptando, mas mesmo assim possível
- Nesta fase convém implementar esses conceitos em arquivos de testes simples, para identificar se a TerraLib pode ser usada
- Só passe adiante se confirmar que é possível implementar os conceitos da Spec na TerraLib
3. Modelar as classes C++
- Como praticamente TODAS as Specs usam XML Schema para modelar seus conceitos, e poder validar seus XMLs, realize a tradução desses Schemas para classes C++ usando UML
- O Jude é uma boa ferramenta para tal
- Não confie em ferramentas que automatizem esse processo! Só a prática leva ao entendimento completo do problema e a modelagem correta dos conceitos. Existem várias sutilezas nos XML Schemas! Os próprios XSDs da Spec XSD são muito difíceis de entender
- O diagrama de classes em UML vai ajudá-lo bastante na hora de implementar as classes em C++
colocar exemplos
4. Implementar a Spec
- A fase de implementação consiste em traduzir os diagramas UML para classes em C++
- Copie a documentação da Spec (no texto ou no Schema) para a documentação da classe → esses dados passam a fazer parte da implementação
- Implemente as classes se preocupando sempre com os métodos
writeToXML
ereadFromXML
, que são o núcleo da Spec → usar as classes e funções disponíveis no pacotexml
do TerraOGC - Se for implementar um formato, faça os métodos de conversão de/para conceitos TerraLib (Exemplos: TeKMLPolygon ↔ TePolygon, TeGMLPolygon ↔ TePolygon)
- Se for implementar um serviço, siga os passos seguintes:
4.1 Classes comuns
- É a implementação constante do item 4, ou seja, implementar as classes comuns do serviço
writeToXML
ereadFromXML
serão usados nas partes cliente e servidor
4.2 Classes servidor
- É a implementação da interface do serviço como um servidor
- Esta parte é necessária pois podemos construir várias comunicações do servidor, como CGI, ou até SOAP
- É nesta fase que serão aplicados os conhecimentos da fase 2, que envolve fazer um mapeamento dos conceitos TerraLib para o serviço em questão
- É nessa parte que realmente entra a TerraLib
4.3 Servidor CGI
- Uma implementação bastante simples do servidor
- É o único aplicativo em todo o processo, todos os demais são bibliotecas (SOs ou DLLs)
- Usar as funções CGI disponíveis no pacote
common
do TerraOGC
4.4. Classes cliente
- Também é interessante montar uma classe, similar ao que ocorre no servidor, para o cliente
- Aqui são usadas algumas funções de conexão HTTP providas pela libcURL
- Seria interessante criar um pacote com essas classes comuns aos clientes → será definido (TBD). Por enquanto usar os exemplos disponíveis nos pacotes
wmsclient
ewfsclient