Migração para Web de um sistema integrado de provisão e cadastro de recursos
Full text
Migração para Web de um sistema integrado de provisão e cadastro de recursos João Pedro Codeço Proença Mestrado Integrado em Engenharia de Redes e Sistemas Informáticos Departamento de Ciência de Computadores 2013 Orientador André Figueiredo Medas, DSCB/OMP/PW, Portugal Telecom SI Coorientador Manuel Eduardo Correia, Professor Auxiliar, Faculdade de Ciências da Universidade do Porto
Portugal Telecom SI Migração para Web de um Sistema Integrado de Provisão e Cadastro de Recursos ii Todas as correções determinadas pelo júri, e só essas, foram efetuadas. O Presidente do Júri, Porto, ______/______/_________
Portugal Telecom SI Migração para Web de um Sistema Integrado de Provisão e Cadastro de Recursos iii palavras-chave Migração de uma aplicação para Java usando Seam; Software de gestão de rede de telecomunicações; Vantagens de usabilidade na Web. resumo Este relatório é referente ao projeto de estágio realizado na PT SI (Portugal Telecom Sistemas de Informação). O objetivo do projeto consistiu em migrar uma aplicação responsável pela gestão da rede de cobre, uma aplicação já com alguns anos, que para além de ter uma interface muito confusa, exige que esta seja instalada em todas as máquinas dos colaboradores que a pretendam usar. Foi substituída a arquitetura cliente-servidor Windows, por uma arquitetura Web em Java e usou-se a framework Seam 2.2.2, garantindo que a usabilidade fosse melhorada.
Portugal Telecom SI Migração para Web de um Sistema Integrado de Provisão e Cadastro de Recursos iv keywords Migrating an application to Java using Seam; Management software telecommunications network; Advantages of usability on the Web. abstract This report is about the project accomplished in PT SI (Portugal Telecom – Information Systems). The goal of the project was to migrate an application, responsible for managing the copper network, an application that has already a few years, which has a confusing interface, that requires to be installed in all employees machines that want to use it. Windows client-server architecture was replaced by a Web architecture in Java using Seam 2.2.2 framework, ensuring that usability had been improved.
Portugal Telecom SI Migração para Web de um Sistema Integrado de Provisão e Cadastro de Recursos v Índice LISTA DE FIGURAS…………………………..….…….……..………………..………......vii LISTA DE ABREVIATURAS……….………..….…….……..…………….....………….....ix 1. INTRODUÇÃO ...................................................................................................... 1 2. APLICAÇÃO EXISTENTE .................................................................................... 3 2.1 APLICAÇÃO...................................................................................................... 3 2.2 ÁREAS DE INFLUÊNCIA ..................................................................................... 4 2.3 REDE DE ACESSO ............................................................................................ 6 2.4 EQUIPAMENTO DE COMUTAÇÃO ........................................................................ 6 2.5 ATRIBUIÇÃO DE RECURSOS .............................................................................. 7 2.6 MORADAS ....................................................................................................... 8 2.7 INTERFACES .................................................................................................... 9 2.8 ARQUITETURA DE REDE INTERNA .................................................................... 11 2.9 ARQUITETURA DE REDE PARA APLICAÇÕES EXTERNAS...................................... 14 3. PROGRAMAS E TECNOLOGIAS USADAS ...................................................... 16 3.1 ECLIPSE ........................................................................................................ 16 3.2 JBOSS SEAM 2.2.2 ......................................................................................... 17 3.2.1 WebLogic 10.3.4......................................................................... 18 3.2.2 JSF – JavaServer Faces ............................................................ 18 3.2.3 EJB – Enterprise JavaBeans ...................................................... 19 3.2.4 Richfaces.................................................................................... 20 3.2.5 Arquitetura Richfaces ................................................................. 21 3.3 PIE (PROGRESSIVE INTERNET EXPLORER) ...................................................... 23 3.4 ALLFUSION GEN E GUARDIEN ......................................................................... 23 3.5 RUMBA, MAINFRAME EDITION ....................................................................... 24 3.6 GOOGLE MAPS JAVASCRIPT API V3 ............................................................... 24 3.6.1 Geocoding API ........................................................................... 26 3.6.2 Directions API ............................................................................. 26 4. IMPLEMENTAÇÃO E RESULTADOS ................................................................ 27 4.1 PROJETO NO ECLIPSE .................................................................................... 28 4.1.1 Entity .......................................................................................... 28 4.1.2 Session ...................................................................................... 29 4.1.3 Utils ............................................................................................ 30
Portugal Telecom SI Migração para Web de um Sistema Integrado de Provisão e Cadastro de Recursos vi 4.1.4 WebContent ............................................................................... 30 4.2 MÓDULO INTERFACES .................................................................................... 32 4.3 MÓDULO MORADAS ....................................................................................... 41 4.3.1 Roteiro ........................................................................................ 42 4.3.2 Certificação de moradas ............................................................. 58 4.4 MÓDULO EQUIPAMENTO DE COMUTAÇÃO ........................................................ 65 4.5 PROBLEMAS E ATRASOS QUE SURGIRAM ......................................................... 68 5. CONCLUSÕES ................................................................................................... 70 5.1 O QUE FAZIA DIFERENTE................................................................................. 70 5.2 TRABALHO FUTURO ........................................................................................ 70 6. REFERÊNCIAS BIBLIOGRÁFICAS ................................................................... 72 7. ANEXOS ............................................................................................................. 74 7.1 ANEXO AUTENTICAÇÃO .................................................................................. 74 7.2 ANEXO LISTARGRUPODEREDES ..................................................................... 75 7.3 ANEXO MAPAGOOGLE ................................................................................... 76 7.4 ANEXO XMLGEOCODING ............................................................................... 78 7.5 ANEXO COORDENADASGEOGRAFICAS ............................................................ 79 7.6 ANEXO CERTIFICARAUTOMATICAMENTE .......................................................... 80
Portugal Telecom SI Migração para Web de um Sistema Integrado de Provisão e Cadastro de Recursos vii Lista de Figuras Figura 1 - Ecrã principal da aplicação................................................................ 4 Figura 2 - Exemplo de áreas de influência......................................................... 5 Figura 3 - Interfaces, criação de mensagem .................................................... 10 Figura 4 - Diagrama de rede interna, pré-existente e implementada ............... 11 Figura 5 - Diagrama de rede para aplicações externas ................................... 14 Figura 6 – Fluxo de processamento de um evento [18] ................................... 21 Figura 7 – Sequência de processamento do pedido [18] ................................. 22 Figura 8 - Sequência de processamento da resposta [18] ............................... 22 Figura 9 - Google Maps vs Bing Maps ............................................................. 25 Figura 10 – Lacunas no layout ........................................................................ 31 Figura 11 – Aplicação, menu pincipal .............................................................. 32 Figura 12 – Aplicação, critérios de pesquisa de mensagens ........................... 32 Figura 13 – Web, critérios de pesquisa de mensagens ................................... 33 Figura 14 – Aplicação, lista de mensagens ..................................................... 34 Figura 15 – Web, lista de mensagens ............................................................. 34 Figura 16 – Aplicação, detalhes de uma mensagem ....................................... 35 Figura 17 – Web, detalhes de uma mensagem ............................................... 36 Figura 18 – Web, detalhes de uma mensagem (buffer) ................................... 36 Figura 19 – Web, criação de mensagem pelo buffer ....................................... 36 Figura 20 – Aplicação, criação de mensagem ................................................. 37 Figura 21 – Web, criação de mensagem ......................................................... 38 Figura 22 – Aplicação, janela dos tipos de registo ........................................... 39 Figura 23 – Web, página dos tipos de registo .................................................. 39 Figura 24 – Web, página dos tipos de interface (Regras Atributos) ................. 40 Figura 25 – Aplicação, página inicial do módulo moradas ............................... 41 Figura 26 – Web, página inicial do módulo moradas ....................................... 42 Figura 27 – Web, página inicial do roteiro ....................................................... 43 Figura 28 – Aplicação, pesquisa de códigos postais ....................................... 44 Figura 29 – Web, Google Maps na página do roteiro ...................................... 45 Figura 30 – Web, calculo de percursos pelo Google Maps .............................. 46 Figura 31 – Aplicação, criação do código postal .............................................. 47 Figura 32 – Web, criação do código postal ...................................................... 47 Figura 33 – Aplicação, detalhes do código postal ............................................ 48 Figura 34 – Web, detalhes do código postal .................................................... 49
Portugal Telecom SI Migração para Web de um Sistema Integrado de Provisão e Cadastro de Recursos viii Figura 35 – Web, tab mapa no código postal .................................................. 50 Figura 36 – Web, associar localidade e arruamento a código postal ............... 51 Figura 37 – Web, detalhes da localidade ......................................................... 52 Figura 38 – Aplicação, detalhes do arruamento .............................................. 53 Figura 39 – Web, detalhes do arruamento....................................................... 54 Figura 40 – Aplicação, seleção de arruamento para listar prédios ................... 55 Figura 41 – Aplicação, listagem de prédio de um determinado arruamento ..... 56 Figura 42 – Web, marcar cooredenadas de um prédio .................................... 57 Figura 43 – Web, Unidades de Alojamento de um prédio ................................ 58 Figura 44 – Aplicação, pesquisa de pedidos de certificação ............................ 59 Figura 45 – Web, pesquisa de pedidos de certificação .................................... 60 Figura 46 – Web, certificação de arruamento .................................................. 61 Figura 47 – Web, certificação de arruamento (identificação) ........................... 62 Figura 48 – Web, certificação de prédio, UAL e código postal ......................... 63 Figura 49 – Web, certificação concluida .......................................................... 64 Figura 50 – Passos da certificação de um UAL c/CP7..................................... 64 Figura 51 – Aplicação e Web, menu inicial dos módulos ................................. 65 Figura 52 – Aplicação, janela principal do módulo de comutação .................... 65 Figura 53 – Web, página principal do módulo de comutação........................... 66 Figura 54 – Web, lista de Unidades de Atendimento ....................................... 67
Portugal Telecom SI Migração para Web de um Sistema Integrado de Provisão e Cadastro de Recursos ix Lista de Abreviaturas AB - Action Block AJAX - Asynchronous Javascript and XML API - Application Programming Interface BO - Business Optimization BPM - Business Process Management CICS - Customer Information Control System COBOL - COmmon Business Oriented Language GUI - Graphical User Interface HTTP - Hypertext Transfer Protocol IDE - Integrated Development Environment IP - Internet Protocol JSON - JavaScript Object Notation OLTP - Online Transaction Processing PHP - PHP Hypertext Preprocessor PROC - Procedure Step PT - Portugal Telecom SI - Sistemas de Informação SOA - Service Oriented Architecture SQL - Structured Query Language TCP - Transmission Control Protocol TUXEDO - Transactions for Unix, Extended for Distributed Operations WEB - World Wide Web XHTML - eXtensible Hypertext Markup Language XML - eXtensible Markup Language
Portugal Telecom SI Migração para Web de um Sistema Integrado de Provisão e Cadastro de Recursos 6 Universidade do Porto - FCUP Em suma, os processos implementados neste módulo são a criação, alteração e remoção de Áreas de Influência que fazem uso de outros três módulos. Moradas – Cadastro das localizações reais; Rede de Acesso – Gere o cadastro dos elementos que constituem a rede; Equipamento de comutação – Cadastro dos elementos de rede e áreas de centrais associadas. 2.3 Rede de Acesso Quando falamos em Rede de Acesso estamo-nos a referir a todos os componentes que constituem a Rede Local, ou seja, todos os elementos entre a central e o cliente que são da responsabilidade de gestão da Portugal Telecom, quer se encontrem no exterior ou interior de edifícios de cliente. Este módulo tem como objetivo gerir o cadastro dos vários elementos que constituem a rede. Aqui, também é controlada a disponibilidade e capacidade existente para pedidos de ligação à rede telefónica, sendo estes geridos pelo módulo de Atribuição de Recursos. Também é possível vermos a topologia da rede assim como as suas características técnicas, facilitando a deteção da necessidade de novos projetos. De uma forma mais objetiva, este módulo é capaz de fazer o seguinte: Registo de todos os Elementos de Rede (morada, capacidades e dados específicos); Gestão das ligações entre Elementos de Rede; Criação, alteração e eliminação de ligações par a par. 2.4 Equipamento de Comutação Equipamentos de Comutação foi o terceiro e último módulo a ser migrado durante o estágio, e inclui todos os equipamentos que possibilitam os serviços de comutação indispensáveis à comunicação entre clientes. Aqui é assegurada a informação de cadastro dos equipamentos de comutação, fazendo a associação de um número, que permite ao cliente o acesso ao serviço pedido e à porta ou canal da placa capaz de fornecer esse serviço, dependendo das suas características, capacidades e disponibilidades.
Portugal Telecom SI Migração para Web de um Sistema Integrado de Provisão e Cadastro de Recursos 7 João Proença Este módulo é responsável por gerir a informação dos seguintes componentes: Área de Central – Zona onde estão associados os equipamentos de comutação assim como os elementos de rede, por onde são fornecidos os serviços; Comutador – Presta serviço de comutação às Unidades de Atendimento às quais está ligado, fornecendo os caminhos para a comunicação entre clientes; Unidades de Atendimento - É o conjunto de equipamentos de atendimento de cliente que são servidos pelo mesmo Comutador. Podem ser locais, quando estão junto do seu comutador, ou remotas. Esta distingue o equipamento que é servido por comutadores diferentes na mesma Área Central, ou que são servidos pelo mesmo comutador mas estão remotizados; Placas e Portas de Unidades de Atendimento – Hardware de uma determinada tecnologia capaz de fornecer Serviços de Suporte. Uma placa tem dois atributos: Prateleira e Posição. A Posição é definida por um endereço chamado de Porta, cada Porta pode ter vários canais; Informação de Numeração – Informação sobre números cuja marcação dá acesso a determinados serviços. 2.5 Atribuição de Recursos Quando é recebida uma requisição de cliente nas aplicações de atendimento da Portugal Telecom a solicitar a instalação, alteração ou remoção de um ou mais serviços, estas são registadas como requisições. Estas requisições contêm todas as caraterísticas dos serviços assim como a morada de instalação. A aplicação recebe estas requisições e o seu módulo de Atribuição de Recursos é responsável por calcular o caminho da Rede de Acesso que está disponível, desde a morada de instalação até ao Comutador, atribuindo um ou vários números ao cliente para o acesso aos Serviços pedidos. Quando a Atribuição de Recursos está concluída, essa informação é enviada de volta para a aplicação de atendimento e esta vai ser responsável por instalar os recursos identificados. Depois da instalação deve ser enviada a informação de satisfação do cliente para a aplicação, para que haja uma atualização de cadastro. O módulo Regras é quem decide como
Portugal Telecom SI Migração para Web de um Sistema Integrado de Provisão e Cadastro de Recursos 8 Universidade do Porto - FCUP devem ser processadas as requisições quando chegam, se devem ser cativadas 1 manualmente ou automaticamente. Podemos então concluir que este módulo é responsável pelas seguintes fases: Reconhecer qual o Elemento de Rede Terminal em melhores condições, para satisfazer o serviço pedido pelo cliente; A partir do Elemento de Rede Terminal, identificar o encaminhamento da Rede de Acesso até ao comutador. Na central é identificado o equipamento de comutação e um ou mais números adequados ao fornecimento de determinado serviço; Nos casos em que não é possível proceder à cativação, devido a insuficiências de infraestrutura, são emitidas mensagens com os motivos, para que se proceda a uma intervenção manual; Se a intervenção manual não for possível, as requisições passam a ser tratadas no sub-módulo “Gerir Lista de Espera” podendo ou não existir intervenções diretas no terreno. Neste sub-módulo são simuladas mais uma vez as ordens de cativação; Por fim, quando é concluída a instalação, recebe a atualização de cadastro, como referido em cima. 2.6 Moradas O módulo Moradas foi o segundo módulo a ser migrado, e é aqui que é feita a gestão de Arruamentos, Códigos Postais, Localidades, Apartados, Agrupamento de Arruamentos, Prédios, Unidades de Alojamento (ex. apartamentos), Edifícios e Moradas Internacionais. Os pedidos de clientes para a instalação de novos serviços e alteração ou remoção de serviços já existentes, são recolhidos através de canais de atendimento. As moradas de requisição são enviadas para o módulo Moradas, e aí serão validadas/certificadas. A resposta é enviada de volta para a aplicação de 1 Identificação do encaminhamento de rede que melhor se adequa ao serviço solicitado. Neste processo são escolhidos os elementos de rede e os equipamentos necessários.
Portugal Telecom SI Migração para Web de um Sistema Integrado de Provisão e Cadastro de Recursos 9 João Proença atendimento e a requisição é assim satisfeita. Grande parte da base de dados é fornecida pelos CTT. O módulo Áreas de Influência usa a informação armazenada neste módulo para a localização automática de recursos de rede, através da morada da requisição. 2.7 Interfaces O módulo Interfaces foi o primeiro módulo a ser migrado, tem como principal funcionalidade criar e simular mensagens das interfaces existentes na aplicação (cerca de 70). Também é possível criar, alterar ou remover interfaces, mensagens de erro, permissões de utilizadores e gerir os valores permitidos. Este módulo é usado apenas para testes, por isso é que não aparece no menu principal da aplicação (fig. 1). Suponhamos que queríamos testar a certificação no módulo Moradas, sem este módulo teríamos que pedir a uma aplicação de atendimento que enviasse uma requisição para a aplicação, o que é perfeitamente desnecessário. Basta para isso, criar uma mensagem neste módulo com os registos e atributos necessários à certificação de uma morada, incluindo a sua origem, e executa-la. Depois de executada, ela vai aparecer no módulo Moradas como se tivesse sido enviada por uma aplicação externa.
Portugal Telecom SI Migração para Web de um Sistema Integrado de Provisão e Cadastro de Recursos 10 Universidade do Porto - FCUP Figura 3 - Interfaces, criação de mensagem Na figura 3, podemos ver uma mensagem a ser criada. Temos a interface que vamos usar, neste caso a GII027 (Interfaces Pedido de Certificação de Morada), o tipo de interface, os registos disponíveis para serem adicionados à mensagem, os registos que já foram adicionados e os atributos com os valores que lhe dei de cada registo. Neste caso só preciso de dois registos, o primeiro (GIIE027PC) para descrever a morada e o segundo (GIIE027XX) apenas serve para identificar o fim da mensagem. Para além das principais funcionalidades, o módulo também nos permite consultar o registo da mensagem, o histórico, a resposta e alterar o estado.
Portugal Telecom SI Migração para Web de um Sistema Integrado de Provisão e Cadastro de Recursos 11 João Proença 2.8 Arquitetura de rede interna Na figura 4 está representado o diagrama da arquitetura de rede para a aplicação. MainFrame Proc AB AB AB DB2 Proc Proc AB Proc JAVA / SEAM Proxy Proxy Proxy Allfusion Gen GuardIEn Browser TCP/IP CICS Listener Listener Windows AB AB GUI (Proc) C++ GUI (Proc) C++ AB Client Manager (COBOL / SQL) (COBOL / SQL) (COBOL / SQL) (COBOL / SQL) Figura 4 - Diagrama de rede interna, pré-existente e implementada
Portugal Telecom SI Migração para Web de um Sistema Integrado de Provisão e Cadastro de Recursos 12 Universidade do Porto - FCUP Toda a aplicação original foi programada no Allfusion Gen; esta ferramenta tem uma linguagem própria e é responsável pela geração dos proxys Java, dos PROCs (Procedure Step) e dos ABs (Action Block). Depois da geração é usada uma aplicação chamada build to para compilarmos o código, tanto das janelas da aplicação Windows como os proxys da aplicação Web. Os PROCs são programas usados para analisar um conjunto de dados e produzir outputs diferentes. Recebem os dados enviados pelo utilizador, chamam os ABs para alterar e interpretar esses dados e devolvem o resultado ao utilizador. Os ABs são chamados pelos PROCs e por outros ABs. Tratam os dados recebidos e caso seja necessário, podem interagir com a base de dados tanto para consulta de informação como para alterações e remoções de dados. Os dados são alterados consoante a função do AB e no fim são devolvidos ao PROC. Quando um cliente numa máquina Windows solicita alguma requisição pela aplicação, esta é enviada para o Client Manager instalado na máquina e depois reencaminhada por uma ligação TCP/IP (Transmission Control Protocol/Internet Protocol) para o MainFrame usando sockets. O MainFrame é um computador de grandes dimensões e tem como principal linguagem o COBOL (COmmon Business Oriented Language). Na sua maioria, são usados em grandes empresas como é o caso da Portugal Telecom. Um computador destes pode substituir centenas de servidores mais pequenos. Para serem acedidos logicamente usam-se terminais que emulam o sistema operativo do MainFrame. No meu caso usei o RUMBA, um software para Windows. O MainFrame da empresa usa z/OS, um sistema operativo de 64 bits criado pela IBM e que suporta funcionalidades como o CICS (Customer Information Control System) e DB2. Este SO trata um elevado número de informações contínuas, com grande estabilidade e segurança. [1] No MainFrame existe uma componente chamada CICS, um monitor de transações que é usado para processamentos Batch e para atividades online. Quando existem transações que são efetuadas em vários passos, o CICS tem que saber que se um desses passos falhar então os outros todos também têm que falhar para garantir consistência nos dados. Suporta milhares de transações por segundo e fornece escalabilidade a muito baixo custo por transação. Quando surgiu, apenas era usado em MainFrames da IBM com sistemas operativos z/OS e z/VSE, hoje em dia já é usado noutros sistemas. [2]
Portugal Telecom SI Migração para Web de um Sistema Integrado de Provisão e Cadastro de Recursos 13 João Proença O CICS contem um listener que recebe a requisição e vai procurar nos seus registos qual é a transação que vai usar para chamar determinado programa, com base nos dados recebidos. Ou seja, se o cliente estiver a consultar os detalhes de um Arruamento na aplicação, o listener vai chamar a transação que diz respeito ao PROC que permite a consulta dessa informação. O PROC vai chamar os ABs para estes tratarem dos dados recebidos e solicitar informação à base de dados, caso seja preciso. Tanto os PROCs como os ABs foram gerados em COBOL e SQL (Structured Query Language) no caso dos que precisam de consultar a base de dados DB2. DB2 é um sistema de gestão de base de dados relacionais que trabalha no MainFrame, feito pela IBM. A linguagem utilizada é SQL e é usado em empresas que necessitam de transformar grandes quantidades de dados em informação de negócio. Inicialmente este sistema de base de dados apenas trabalhava em MainFrames da IBM, mais tarde foi alargado para sistemas UNIX e Windows. Como já foi dito o MainFrame trabalha com z/OS, e o DB2 para este sistema além de ser usado para suportar operações críticas em áreas de negócios, permite também uma grande performance OLTP (Online Transaction Processing) 2 . DB2 para z/OS tem algumas caraterísticas exclusivas como a segurança multi-nível, compressão a nível de hardware e tabelas com tamanhos muito grandes. [3] [4] Para a nossa aplicação Web funcionar, a arquitetura do lado de fora do MainFrame foi um pouco alterada. A aplicação Web é mantida num servidor WebLogic, o browser do cliente comunica com este servidor. Em vez de termos um client manager responsável por receber as requisições e reencaminha-las, temos os proxys que basicamente têm a mesma função e comunicam com o cliente através do protocolo HTTP (Hypertext Transfer Protocol). Um proxy é um intermediário entre o cliente e o servidor. Neste caso, a função do proxy é receber uma requisição da aplicação Web e reencaminha-la para o CICS no MainFrame via protocolo TCP/IP através de sockets. A resposta é recebida de igual forma, o MainFrame envia para o 2 É um sistema que regista todas as transações de uma determinada operação.
Portugal Telecom SI Migração para Web de um Sistema Integrado de Provisão e Cadastro de Recursos 14 Universidade do Porto - FCUP proxy e este para o cliente. Quando o proxy envia a requisição para o MainFrame todo o processo é executado da mesma forma que na arquitetura anterior. 2.9 Arquitetura de rede para aplicações externas Quando as aplicações externas comunicam com a aplicação, a arquitetura é diferente. APPs Externas T I B C O (xml) T U X E D O AB Proc AB AB DB2 CICS TCP/IP TCP/IP Listener Proc Figura 5 - Diagrama de rede para aplicações externas Temos três novos componentes na figura 5. As aplicações externas são aplicações que necessitam, por exemplo, de vir certificar moradas à nossa aplicação. O cliente vai a uma loja e pede que um determinado serviço seja instalado em sua casa. O funcionário da loja tem uma aplicação que vai verificar se a morada do cliente se encontra certificada na nossa aplicação. Caso não se encontre, vai tentar certificala. As aplicações externar comunicam com o TIBCO via TCP/IP. O TIBCO é um software que gere informações, processos e decisões em tempo real. Permite a comunicação entre softwares que são incompatíveis e pode ser usado localmente ou em nuvem. TIBCO fornece um middleware 3 que faz com que o acesso aos dados possa ser feito por vários sistemas ao mesmo tempo. [5] 3 Um mediador entre o software e as várias aplicações. Usa-se para transferir dados entre programas que usam protocolos diferentes.
Portugal Telecom SI Migração para Web de um Sistema Integrado de Provisão e Cadastro de Recursos 15 João Proença Atua em três áreas críticas [6]: SOA (Service Oriented Architecture) - Uma arquitetura orientada a serviços. Estes serviços são acessíveis através de interfaces que são disponibilizadas através de webservices. Os serviços não são mais do que funcionalidades das várias aplicações. BPM (Business Process Management) – Faz a gestão completa e consistente dos fluxos de processos das empresas. BO (Business Optimization) – Converte fluxos de dados em informações criticas, disponibilizando-as a clientes e parceiros. As aplicações externas invocam um webservice do TIBCO, que recebe a mensagem em formato XML (eXtensible Markup Language) e converte-a para um buffer. [5] O buffer é enviado para um middleware no MainFrame também por TCP/IP. Este middleware é o TUXEDO (Transactions for Unix, Extended for Distributed Operations), que gere transações distribuídas em computadores e tem uma plataforma muito escalável para desenvolver, implementar e gerir aplicações críticas para a missão [7]. O TUXEDO recebe o buffer e reencaminha-o para o listener que existe no CICS. A partir daqui todo o processo é igual ao anterior, ou seja, o listener escolhe a transação que invoca o programa que a mensagem deseja chamar, este chama os ABs, os ABs podem chamar outros ABs ou ir buscar informação à base de dados. A resposta é enviada no sentido inverso, em buffer para o TIBCO e este converte-a em XML para ser lida pela aplicação externa. Ao longo do processo existem mensagens de confirmação para verificar o sucesso ou insucesso relativamente à entrega das mensagens entre os componentes.
Portugal Telecom SI Migração para Web de um Sistema Integrado de Provisão e Cadastro de Recursos 22 Universidade do Porto - FCUP Figura 7 – Sequência de processamento do pedido [18] No primeiro caso (o superior) todo o JSF é codificado e o filtro não analisa a resposta antes de enviar para o cliente. Já no segundo caso (o inferior), nem toda a região é codificada, tudo depende da área da região AJAX e o filtro analisa a resposta antes de esta chegar ao cliente. Figura 8 - Sequência de processamento da resposta [18]
Portugal Telecom SI Migração para Web de um Sistema Integrado de Provisão e Cadastro de Recursos 23 João Proença Como mostra a figura 8, quando é pedido um recurso, o filtro do RichFaces vai verificar se esse recurso não se encontra em cache. No caso de existir, é enviado de volta para o cliente, caso contrário o Resource Builder regista o pedido e só depois será enviado. Ajax actions components – São os componentes de ação, e são usados para enviar requisições Ajax do lado do cliente. Ex. <a4j:commandButton> e <a4j:commandLink>. AjaxContainer – É uma interface que se refere a uma área na página JSF que vai ser descodificada, durante uma requisição. JavaScript engine – Um motor de JavaScript que é executado do lado do cliente. Com base nas respostas AJAX ele vai saber como atualizar cada área de uma página JSF. 3.3 PIE (Progressive Internet Explorer) PIE é uma biblioteca JavaScript. Os diferentes browsers que existem são uma dor de cabeça para qualquer programador. O uso de CSS3 no front-end de websites as vezes torna-se complicado devido à incompatibilidade de renderização entre os browsers. Cantos arredondados, sombras, gradientes, transparência entre outros, são algumas das propriedades que ficam bem no design de um website mas que precisam de ser ajustadas aos vários browsers como é o caso do Internet Explorer, o mais usado dentro da Portugal Telecom. Para ajudar na renderização foi usado JavaScript, neste caso o PIE. Não é preciso perceber muito de JavaScript para usar o PIE, pois a aplicação deste é simples e baseada na hospedagem de alguns ficheiros no servidor e na chamada destes por parte da classe ou ID correspondente no CSS. [19] 3.4 Allfusion Gen e GuardIEn Toda a aplicação existente foi gerada com o Alfusion Gen, um ambiente de desenvolvimento para conceção, implementação e manutenção de aplicações escaláveis. O Allfusion Gen faz geração de código livre de erros para todo o tipo de soluções, seja a lógica da aplicação, infraestruturas de comunicação, servidores Web
Portugal Telecom SI Migração para Web de um Sistema Integrado de Provisão e Cadastro de Recursos 24 Universidade do Porto - FCUP e browser interfaces. Sempre que há alterações, estas apenas exigem um pequeno esforço, visto que todas as mudanças são feitas a nível do modelo e não do código. Isto permite que as empresas mudem rapidamente para outros ambientes, como J2EE, sem serem especialistas nesses ambientes e sem precisarem de reescrever o código. Existe uma maior flexibilidade na escolha de um melhor ambiente, e dá a possibilidade às empresas de fazer investimentos em tecnologias que já estão implementadas. [20] O GuardIEn é um software que suporta e gere os modelos do Alfusion Gen. É essencial para as empresas controlarem as aplicações desenvolvidas pelo Alfusion Gen e que, ao mesmo tempo, necessitam de reduzir o overhead desse controlo. Antes de uma determinada encomenda entrar em produção, passa por vários estados, sendo que essas fases são controladas no GuardIEn. No meu projeto foi essencial para consultar o código dos servidores e dos clientes. Também me foi útil para gerar os servidores, pois para fazermos o trace das entradas e das saídas de um determinado servidor, caso ele não esteja gerado com trace ativo, é necessário que ele seja gerado novamente. 3.5 RUMBA, MainFrame Edition O RUMBA é um emulador de terminal usado para se ligar e utilizar informação do MainFrame que, neste caso é da IBM e tem o sistema operativo z/OS. Garante uma ligação segura e uma grande fiabilidade. Por vezes o código gerado pelo Allfusion Gen não é suficientemente explícito para percebermos quais são os parâmetros de entrada e de saída de um determinado servidor e, por isso, durante o meu projeto, usei várias vezes esta ferramenta para fazer trace aos servidores. [21] 3.6 Google Maps JavaScript API v3 Esta API [22] permite incorporar o Google Maps num website. A versão 3 veio trazer maior rapidez na consulta de mapas. Existe uma grande quantidade de ferramentas que permite manipular e adicionar conteúdo aos mapas. Antes de usar a API do Google, consultei a documentação de outras duas APIs para escolher aquela que melhor se iria adequar ao que era preciso para o meu projeto. A indecisão estava entre o Google Maps, Bing Maps e Sapo Maps. Decidi pôr
Portugal Telecom SI Migração para Web de um Sistema Integrado de Provisão e Cadastro de Recursos 25 João Proença de parte o Sapo Maps pois a sua documentação está muito resumida, não tem nada que se assemelhe ao Street View da Google e as ferramentas de manipulação são muito mais reduzidas. Visto que, no meu projeto era interessante a vista de rua, fiz alguns testes no Streetside do Bing e no Street View da Google e cheguei à conclusão que este tipo de visualização no mapa estava indisponível para grande parte dos locais no Bing Maps, pelo menos em Portugal. Figura 9 - Google Maps vs Bing Maps A figura 6 é referente à Avenida Visconde de Barreiros, umas das avenidas mais conhecidas na Maia, sendo que a vista de rua está disponível no Google Maps, mas não no Bing Maps. A escolha acabou por cair no Google Maps pois, para além do que já foi dito e apesar da documentação do Bing Maps também estar bastante boa, a do Google está mais completa, com muitos exemplos de código. Um outro motivo que também pesou na minha escolha foi o facto de nos fóruns de discussão, cerca de 70% dos tópicos
Portugal Telecom SI Migração para Web de um Sistema Integrado de Provisão e Cadastro de Recursos 26 Universidade do Porto - FCUP sobre este assunto são acerca do Google Maps e, por isso, seria mais fácil resolver eventuais problemas que pudessem surgir comuns a outros utilizadores. Em complemento desta API, usei dois serviços fundamenteis, a Geocoding API e Directions API. 3.6.1 Geocoding API Este serviço permite fazer a conversão de endereços (Avenida Visconde de Barreiros) em coordenadas geográficas (37,445342 -122,023213), que podem ser usadas para adicionar marcadores a um mapa, num determinado local. Existe a geocodificação reversa, que também foi usada no meu projeto, que é o processo inverso quando queremos converter coordenadas em endereços. As respostas HTTP de geocodificação podem vir em formato JSON (JavaScript Object Notation) ou XML, um exemplo de um pedido de coordenadas da Avenida Visconde de Barreiros é o seguinte: http://maps.googleapis.com/maps/api/geocode/json?address=Avenida +Visconde+Barreiros,Maia,&sensor=false O endereço, para além de devolver as coordenadas desta rua, neste caso em formato JSON, dá-nos também outras caraterísticas como o código postal. [23] 3.6.2 Directions API Esta API permite calcular percursos entre localizações através de solicitações HTTP. É possível escolher vários tipos de transporte assim como especificar a origem, destino e pontos de passagem. [24]
Portugal Telecom SI Migração para Web de um Sistema Integrado de Provisão e Cadastro de Recursos 27 João Proença 4. Implementação e Resultados Ao longo do estágio foram migrados três módulos: Interfaces, Moradas e Equipamento de Comutação. A escolha destes módulos não foi por acaso, analisei o grau de dependência de todos os módulos e cheguei à conclusão que estes eram aqueles que menos dependiam de outros, por isso seria lógico iniciar a migração aqui. Durante o início da implementação, além de ter tido uma pequena formação acerca da aplicação, também me foi aconselhado um documento [25] acerca de redes de acesso que me ajudou a perceber muito melhor a aplicação, revi alguns conceitos que falei em cadeiras de redes de telecomunicações, durante o curso, e aprendi outros. Como foi referido num dos capítulos anteriores, existe uma ferramenta responsável por gerar todo o código dos clientes e servidores, o Allfusion Gen. Cada um destes módulos tem dezenas, por vezes centenas de janelas clientes; foi necessário ler o código de todas essas janelas para perceber exatamente a função de cada uma. Estes clientes recebem os parâmetros dados pelo utilizador e, de acordo com a ação pretendida, chamam o ou os servidores responsáveis por manipular esses parâmetros. Os servidores recolhem essa informação e devolvem aos clientes o resultado. Esse resultado pode ser calculado apenas com base no código do servidor ou, caso seja preciso, chamam a base de dados para submeter ou recolher informação. Apesar de a migração ter sido feita do lado do cliente, os códigos dos servidores também tiveram que ser lidos para saber quais os parâmetros que estes recebem no input para devolver o output desejado. A GUI (Graphical User Interface) da aplicação existente é muito confusa e pouco intuitiva. Um dos principais motivos para a criação deste projeto, para além de evitar que a aplicação fosse instalada em todas as máquinas dos utilizadores, foi fazer com que se conseguisse com o menor número de cliques e no menor tempo possível despoletar uma ação sem tornar a aplicação ainda mais confusa. Nas próximas secções, começo por explicar como é que o projeto está estruturado no eclipse em relação às classes existentes, e de que maneira a arquitetura Model-View-Controller [26] foi seguida. Mostro também algum código Java e JavaScript mais relevante usado em cada um dos módulos. Através de printscreens feitos nas duas aplicações (Windows e Web), vou fazer comparações para se perceber onde é que foi possível ganhar usabilidade. À medida que fui implementando as funcionalidades da aplicação
Portugal Telecom SI Migração para Web de um Sistema Integrado de Provisão e Cadastro de Recursos 28 Universidade do Porto - FCUP foram surgindo alguns problemas, na última secção falo sobre esses problemas e como é que se resolveram. 4.1 Projeto no eclipse Foi criado no eclipse um projeto Seam com o nome org.ptsi.sigraweb em que vários pacotes, pastas e ficheiros de configuração foram criados automaticamente. Existem três pacotes fundamentais onde estão as classes do projeto e o WebContent que contem as páginas Web. 4.1.1 Entity Aqui, como o nome indica, estão as entidades. Existem cerca de 50 entidades diferentes em cada módulo. Por exemplo, um equipamento no módulo da comutação tem vários atributos: id, endereço, tráfego_lido, tráfego_máximo_permitido, data_estado etc… Esses atributos estão todos definidos nestas classes com os respetivos getters e setters. Para definir uma classe como sendo uma entity no Seam, basta adicionarmos a tag @Entity no início do código, depois dos imports. Para além deste tipo de classes temos as classes das interfaces. Estas classes têm centenas de funções que são chamadas pelos beans, e são responsáveis por fazer todo o tipo de ligações com os servidores através dos proxies. No anexo listarGrupoDeRedes, está uma função de uma das classes interfaces que lista o grupo de redes do módulo de comutação. Esta função envia os dados para o input do servidor responsável por esta listagem, através dos parâmetros que estão na string “connectionString”. Esses dados podem ser nulos se o utilizador quiser a listagem de todos eles, ou podem conter dados se quiser filtrar os resultados. Depois o servidor devolve um array de resultados e, através de um ciclo for, é guardado o output noutro array que é devolvido ao bean, que chamou esta função. Uma vez que o código é gerado, os detalhes da comunicação são transparentes para quem desenvolve. A autenticação na aplicação é feita por uma classe que também está neste pacote. Essa classe tem a função do anexo Autenticação que é responsável por enviar o id e password do utilizador para o proxy. Essa função vai retornar true se as credenciais estiverem corretas ou false caso o contrário.
Portugal Telecom SI Migração para Web de um Sistema Integrado de Provisão e Cadastro de Recursos 29 João Proença 4.1.2 Session Para fornecer os dados aos diferentes componentes das páginas Web é necessário criar os managed beans e, é neste pacote que eles são criados. Um managed bean para além de fornecer os dados para as páginas, recebe os dados submetidos pelo utilizador e trata os diferentes eventos. Listagem 1 O utilizador fez a pesquisa de um grupo de redes na página Web, então essa pesquisa despoletou uma ação no bean. A função ‘pesquisar’ da listagem 1, chama a função do anexo listarGrupoDeRedes que está na classe “InterfacesListagem” no pacote entity e guarda o resultado num array previamente criado “listaGrupoDeRedes”. Anteriormente, com JavaServer Faces, sempre que quiséssemos criar um bean teríamos que o registar num ficheiro de configuração chamado faces-config.xml. Com o Seam não precisamos de fazer isso, basta adicionar anotações nas classes managed beans, como é possível ver na listagem 1 “@Name(“grupoRedesBean”)”. Quando usamos esta anotação, o bean passa a ser gerido pelo Seam por isso, além de ser um managed bean passa também a ser um Seam Component. @Name("grupoRedesBean") public class GrupoDeRedesBean { public String pesquisar() { grupoRedesSelecionado = new GruposRedes(); fechaTudo(); if(!filtro.getId_string().equals("")) { filtro.setId(Integer.valueOf(filtro.getId_string())); } else { filtro.setId(0); } listaGrupoDeRedes = InterfacesListagem.listarGrupoDeRedes(filtro); return "/Comutacao_grupoRedes.xhtml"; }}
Portugal Telecom SI Migração para Web de um Sistema Integrado de Provisão e Cadastro de Recursos 30 Universidade do Porto - FCUP 4.1.3 Utils Este pacote tem apenas uma classe, a do leitor de configurações. Esta classe é responsável por ler o conteúdo do ficheiro de configurações onde está o endereço do MainFrame. Essa informação vai ser passada a todas as funções das classes das interfaces, para que estas consigam comunicar com os servidores através dos proxies, como acontece na função do anexo listarGrupoDeRedes. 4.1.4 WebContent É neste diretório que estão todas as páginas Web em formato XHTML, as folhas de estilo CSS, os ficheiros JavaScript e as imagens do projeto. Usou-se um sistema de template Web chamado Facelets, uma tecnologia do JavaServer Faces que foi idealizada com o objetivo de gerar uma árvore de componentes. Todas as páginas Web têm uma estrutura semelhante à da listagem 2. Listagem 2 <!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <ui:composition xmlns="http://www.w3.org/1999/xhtml" xmlns:s="http://jboss.com/products/seam/taglib" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:f="http://java.sun.com/jsf/core" xmlns:h="http://java.sun.com/jsf/html" xmlns:rich="http://richfaces.org/rich" xmlns:a4j="http://richfaces.org/a4j" template="layout/template.xhtml"> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <ui:define name="body"> CONTEUDO AQUI </ui:define> </ui:composition>
Portugal Telecom SI Migração para Web de um Sistema Integrado de Provisão e Cadastro de Recursos 31 João Proença Para escrever uma página com Facelets, é necessário declarar quais a taglibs que vamos usar. Para cada taglib diferente usa-se namespaces 6 distintos. Na listagem 3 definiram-se alguns namespace, cada um associado a uma taglib, como por exemplo: Facelets, HTML (do JSF), Core (do JSF) entre outros. Uma das grandes vantagens do Facelets é a possibilidade de criarmos uma página layout para a aplicação. Nessa página são definidas partes comuns à maioria das páginas como é o caso das cores, fontes, estilos e CSS. Outra vantagem é a criação de lacunas no layout principal. Isto, permite que tenhamos cabeçalhos e rodapés iguais em todas as páginas e que, o seu conteúdo principal seja definido pelo utilizador nas páginas que usam o layout. Figura 10 – Lacunas no layout Como mostra na figura 10, na página de layout definimos o nome para a lacuna usando a tag “insert”: <ui:insert name=”body”/>. Na página que contém o conteúdo das lacunas, usamos a tag “define” para preencher a lacuna definida, como é possível ver na listagem 2. Por fim, o Facelets faz a montagem do resultado final para ser apresentado ao utilizador. 6 Namespaces no xml são como pacotes no Java, permitem que duas tags com o mesmo nome sejam interpretadas de maneiras diferentes, consoante o namespace a que ela pertence.
Portugal Telecom SI Migração para Web de um Sistema Integrado de Provisão e Cadastro de Recursos 38 Universidade do Porto - FCUP interface que vai usar, não é necessário mostrar a parte dos tipos de interface e dos registos. Isto é feito através de Ajax, á medida que o utilizador clica nas opções, pedidos Ajax são enviados para atualizar partes da página. Existe um registo em todas as mensagens que indica o seu fim, é o registo terminado em “XX”. Esse registo passou a ser adicionado automaticamente ao fim da mensagem. Alguns registos têm um predecessor que é configurado na janela de tipos de registo, por isso quando um registo desses é adicionado, o seu predecessor também terá que ser, o que não acontecia na aplicação anterior. Para além disso, existe um algoritmo que vai fazer com que os registos se posicionem na lista de registos disponíveis numa ordem correta, ou seja, quando existe um registo que tem um predecessor então esse registo deve aparecer depois do seu predecessor. Figura 21 – Web, criação de mensagem Na figura 20 é possível ver que cada registo tem dezenas de atributos, por isso abrir uma janela para alterar cada um desses atributos é um pouco demorado. Como mostro na figura 21, esse problema foi solucionado. Temos a lista de atributos e basta clicar na coluna do valor do atributo que queremos alterar. Para passarmos ao próximo atributo ou clicamos na coluna ou carregamos na tecla TAB. Outros menus como “Tipos de Registo” (fig. 22) e “Tipos de Interface” também tinham o problema de alteração de valores em novas janelas, que entretanto foi solucionado na Web (fig. 23).
Portugal Telecom SI Migração para Web de um Sistema Integrado de Provisão e Cadastro de Recursos 39 João Proença Figura 22 – Aplicação, janela dos tipos de registo Figura 23 – Web, página dos tipos de registo Esta solução de mostrar tudo na mesma janela através de Ajax, em vez de abrir novas janelas para cada ação, facilita a interação da aplicação com o utilizador, mas nem sempre é possível fazer isso. Quando temos tabelas com muitas colunas, é
Portugal Telecom SI Migração para Web de um Sistema Integrado de Provisão e Cadastro de Recursos 40 Universidade do Porto - FCUP necessário organizar a página de maneira a que a informação não fique misturada. O exemplo da figura 24 é um desses casos. Figura 24 – Web, página dos tipos de interface (Regras Atributos) Esta tabela (fig. 24), das regras dos atributos, deriva de uma outra tabela dos “Tipos de Interface”. Era impossível mostrar toda a informação numa única página por isso, através de AJAX, quando o utilizador chama esta tabela, a aplicação esconde as outras deixando a janela mais limpa.
Portugal Telecom SI Migração para Web de um Sistema Integrado de Provisão e Cadastro de Recursos 41 João Proença 4.3 Módulo Moradas O módulo das moradas foi o segundo módulo a ser migrado. Este módulo faz parte da aplicação. No entanto, foi-me pedido que o pusesse num projeto diferente. Alguns utilizadores, quando usam a aplicação, apenas trabalham com este módulo e, por isso, não lhes interessa ter acesso aos outros, nem convém. A ideia é ter uma aplicação Web que faça apenas a gestão de moradas, e outra que faça tudo o resto. Foi então criado um novo projeto apenas para este módulo. Figura 25 – Aplicação, página inicial do módulo moradas A figura 25 mostra a janela inicial, uma janela com muitos botões e alguns deles desnecessários. Esses botões têm duas funções principais: Roteiro – Gerir Arruamentos, Códigos Postais, Agrupamentos de Arruamentos, Apartados, Edifícios, Localidades, Moradas Internacionais e Unidades de Alojamento.
Portugal Telecom SI Migração para Web de um Sistema Integrado de Provisão e Cadastro de Recursos 42 Universidade do Porto - FCUP Certificação de moradas – Receber as moradas enviadas pelas aplicações externas e certificá-las. Na aplicação Web, depois de fazer o login, o utilizador é direcionado para um menu em que tem apenas dois botões, o Roteiro e a Certificação de Moradas (fig. 26). Figura 26 – Web, página inicial do módulo moradas Assim, se quisermos ir a este módulo apenas para certificar moradas, não precisámos de ver aquela interface tão confusa que existia, nem procurar pelo botão que diz respeito a esta função, que na figura 25 é o décimo botão do menu. 4.3.1 Roteiro Quando clicámos em Roteiro, no novo menu, somos direcionados para a página principal da gestão de moradas.
Portugal Telecom SI Migração para Web de um Sistema Integrado de Provisão e Cadastro de Recursos 43 João Proença Figura 27 – Web, página inicial do roteiro Como podemos ver na figura 27, esta página apresenta um estilo muito mais simples e intuitivo do que a da aplicação (fig. 25). Em vez de termos um menu com botões em que necessitamos de passar o rato por cima para saber qual é a sua função, temos um menu em tabs em que o nome de cada tab é a função que desempenha.
Portugal Telecom SI Migração para Web de um Sistema Integrado de Provisão e Cadastro de Recursos 44 Universidade do Porto - FCUP Figura 28 – Aplicação, pesquisa de códigos postais Na aplicação, sempre que clicamos num dos botões são abertas duas janelas, a janela da lista e a de pesquisa. Por exemplo, o botão dos códigos postais abre a janela da lista com o respetivo menu e abre outra janela por cima para fazer a pesquisa (fig. 28). Parte-se do princípio que a primeira coisa que o utilizador quer fazer quando abre a janela é uma pesquisa mas, isso pode não ser verdade. E se o utilizador quiser criar um código postal? Então tem que fechar a janela de pesquisa e procurar o botão de criar código postal no menu. Com este novo menu na Web (fig. 27), ao clicarmos em cada tab a página não muda pois é tudo código no cliente, para a mudança de tab ser mais rápida, e os critérios de pesquisa são imediatamente apresentados. Só depois de clicarmos em pesquisar é que uma nova página é apresentada, com a lista de resultados assim como o menu dessa lista. Neste menu da Web temos ainda um botão “Criar” ao lado dos critérios de pesquisa, e isto resolve o problema de andar a fechar janelas quando queremos criar alguma coisa. Aqueles dois botões estáticos na parte inferior direita da página, permitem que o utilizador vá para o menu de certificação de moradas sempre que quiser (em qualquer página da aplicação Web) e que tenha acesso ao Google Maps através da própria página, uma das novas funções da aplicação Web.
Portugal Telecom SI Migração para Web de um Sistema Integrado de Provisão e Cadastro de Recursos 45 João Proença Figura 29 – Web, Google Maps na página do roteiro Ao clicar no botão do Google Maps é mostrado um mapa na página toda, debaixo do menu principal (fig. 29). Aqui o utilizador é capaz de procurar por uma localidade ou uma determinada zona, pode fazer zoom no mapa, usar o Google Street View e alterar o tipo de mapa. Este mapa pode ser muito vantajoso em diversas situações, uma delas é quando o utilizador quer procurar por uma rua que não sabe o nome, mas sabe o de uma rua próxima e, ao utilizar o mapa, consegue facilmente fazer essa pesquisa. Existe um botão no mapa “Calcular Caminho” que permite calcular as direções entre dois sítios.
Portugal Telecom SI Migração para Web de um Sistema Integrado de Provisão e Cadastro de Recursos 46 Universidade do Porto - FCUP Figura 30 – Web, calculo de percursos pelo Google Maps Na figura 30 foi calculado o percurso entre as instalações da Portugal Telecom, na Rua Tenente Valadim, e a Faculdade de Ciências da Universidade do Porto. O percurso é apresentado no mapa, e as direções são calculadas do lado direito. Esta função não me foi pedida, apenas implementei na aplicação porque além de querer aprender um pouco mais sobre esta API, aproveitei o facto de já estar a mexer nela para explorar outras funcionalidades. Como não me foi pedida, eu e a minha equipa não chegamos a falar em que poderia ser útil para o utilizador. No entanto, para um técnico que faça instalações em casa dos clientes, talvez seja útil calcular o percurso até casa destes. Ao criar um código postal é necessário o código, a designação e uma localidade associada. Para associar uma localidade, é aberta uma nova janela da lista de localidades e, consequentemente, a janela dos critérios de pesquisa das localidades.
Portugal Telecom SI Migração para Web de um Sistema Integrado de Provisão e Cadastro de Recursos 47 João Proença Figura 31 – Aplicação, criação do código postal A figura 31 mostra o processo de criação de um código postal na aplicação. Como podemos ver, temos a janela do código postal (1), a janela da lista de localidades (2) e a janela dos critérios de pesquisa de localidades (3). Mais uma vez temos várias janelas a abrir umas em cima das outras, e chegamos a um ponto que o utilizador se esquece do que está a fazer. Na Web isso não acontece pois é tudo feito na mesma página através de AJAX. Figura 32 – Web, criação do código postal
Portugal Telecom SI Migração para Web de um Sistema Integrado de Provisão e Cadastro de Recursos 54 Universidade do Porto - FCUP Figura 39 – Web, detalhes do arruamento A figura 39 mostra os detalhes de um arruamento organizado por abas. A aba dos “Edifícios” está desativada pois não existem edifícios associados a este arruamento e por isso, o utilizador não precisa de ver essa tabela. Mais uma vez existe a aba “Mapa”, e para o centrarmos na posição correta é usada a abreviatura, o título e a designação do arruamento. Existem arruamentos iguais em diferentes zonas do país, a designação da localidade do arruamento é também enviada no link de consulta à API. Esta página dos arruamentos tem outras janelas importantes para que a aplicação funcione corretamente. No entanto, as soluções implementadas nessas páginas são idênticas as que foram implementadas em páginas anteriores, por isso não irei falar sobre elas. Quando na aplicação, clicamos no botão de “Prédios e Unidades e Alojamento” são abertas três janelas.
Portugal Telecom SI Migração para Web de um Sistema Integrado de Provisão e Cadastro de Recursos 55 João Proença Figura 40 – Aplicação, seleção de arruamento para listar prédios Na figura 40 temos a janela da lista de prédios (1), a da lista de arruamentos (2) e a dos critérios de pesquisa de um arruamento (3). É necessário escolher o arruamento para o qual queremos a lista de prédios, por isso é que estas janelas são todas abertas.
Portugal Telecom SI Migração para Web de um Sistema Integrado de Provisão e Cadastro de Recursos 56 Universidade do Porto - FCUP Figura 41 – Aplicação, listagem de prédio de um determinado arruamento Depois da escolha do arruamento, essa informação vai ficar fixa na lista de prédios (fig. 41). Na Web é exatamente igual, a tab de “Prédios e Unidades de Alojamento” é na verdade os critérios de pesquisa de um arruamento, a diferença é que mais uma vez tudo é feito de uma maneira mais simples para o utilizador pois é tudo feito na mesma página. No processo de criação de um prédio já era possível guardar as coordenadas geográficas desse prédio na base de dados, no entanto, essa informação era introduzida manualmente, o que obrigava o utilizador a saber à partida, quais eram as coordenadas geográficas do prédio. Usei mais uma vez o Google Maps para o utilizador, quando está a criar o prédio, utilizar o marcador para marcar o prédio no mapa. A API mostra quais são as coordenadas e esse valor, através de um algoritmo, é convertido para coordenadas do tipo WGS84 [27] que vão ser posteriormente guardadas na base de dados. Esse mapa também está acessível quando estamos a editar o prédio.
Portugal Telecom SI Migração para Web de um Sistema Integrado de Provisão e Cadastro de Recursos 57 João Proença Figura 42 – Web, marcar cooredenadas de um prédio O Google Street View é muito útil nesta parte da aplicação, pois permite-nos marcar o prédio com mais detalhe. A figura 42 mostra um marcador no edifício da Portugal Telecom, na Rua Tenente Valadim, e as respetivas coordenadas. O botão “Guardar Coordenadas” converte as coordenadas e preenche os campos referentes a estas. Desta maneira, é possível ter a base de dados dos prédios muito mais completa e pormenorizada. Dentro dos prédios podemos ter Unidades de Alojamento (UALs). Na aplicação, a lista das UALs é mostrada numa nova janela, assim como as funções dessa janela (detalhes, criação, edição etc…). Na figura 43 é possível ver que todas essas janelas estão a ser mostradas numa única página.
Portugal Telecom SI Migração para Web de um Sistema Integrado de Provisão e Cadastro de Recursos 58 Universidade do Porto - FCUP Figura 43 – Web, Unidades de Alojamento de um prédio Se eu estiver a ver uma janela com detalhes de um prédio, tenho que ter informação nessa mesma janela do arruamento a que ele pertence, e se estiver a ver uma janela com detalhes de uma UAL, tenho que saber o prédio e o arruamento. Ao ter todas as janelas numa página Web posso eliminar toda essa informação repetida e assim, conseguir espaço para apresentar tudo o que é necessário. 4.3.2 Certificação de moradas Esta zona do módulo é a mais importante, pois usa a informação do roteiro para certificar as moradas. Passei um mês para fazer a migração desta parte da aplicação, pois o processo de certificação tem uma lógica muito complexa e por isso, necessita de algoritmos bem definidos. Nada foi feito de novo aqui porque o nível de dificuldade, para conseguir implementar na Web estas janelas com todas estas funções, já era elevado. No entanto, consegui organizar a página de maneira a que todas estas funções fossem mais intuitivas para o utilizador e fossem mostradas de uma forma mais limpa, sem janelas sobrepostas.
Portugal Telecom SI Migração para Web de um Sistema Integrado de Provisão e Cadastro de Recursos 59 João Proença Figura 44 – Aplicação, pesquisa de pedidos de certificação A figura 44 mostra a janela de critérios de pesquisa das moradas certificadas ou por certificar, permite fazer a pesquisa por origem do pedido (aplicação externa), tipo de morada (Apartado, Arruamento, Prédio etc…), identificador único, nome do arruamento e outros. Na Web, em vez de mostrar todos os critérios verticalmente, criei um painel que mostra os critérios na horizontal e que pode ser ocultado sempre que for desnecessário.
Portugal Telecom SI Migração para Web de um Sistema Integrado de Provisão e Cadastro de Recursos 60 Universidade do Porto - FCUP Figura 45 – Web, pesquisa de pedidos de certificação Na figura 45 temos o painel da pesquisa, e por baixo a lista de pedidos. Quando a pesquisa é feita, o painel é fechado, ficando a página mais livre para mostrar todo o resto da informação. O ícone que está na parte inferior direita da figura 45 permite ir para o roteiro, tal como também acontecia no roteiro onde era possível ir para a certificação. Antes de prosseguir, vale a pena explicar como funciona um processo de certificação. Qualquer aplicação externa que necessita de certificar uma morada, envia um pedido com a morada que deseja certificar. Se essa morada já existir, exatamente com o mesmo nome, na base de dados, então o utilizador não precisa de fazer nada e a aplicação certifica automaticamente. Caso a morada não exista na base de dados, então é necessária a ação do utilizador. Existem ruas que são conhecidas por mais do que um nome, é o caso da Praça de Mouzinho de Albuquerque que é conhecida por rotunda da Boavista, e existem outras que têm nomes quase iguais, em que apenas diferem num “de” no meio da palavra. Casos como estes necessitam da intervenção do utilizador, mas não são apenas estes, pode-se crer certificar uma morada que não exista mesmo na base de dados. Os apartados, as moradas internacionais e os arruamentos são casos mais simples na certificação, porque o utilizador recebe uma determinada morada e só precisa de escolher a morada certa no roteiro ou criar uma nova morada, para a poder certificar, ou seja, é uma certificação direta. Quando se trata de prédios, Unidades de Alojamento e códigos postais a lógica de negócio é
Portugal Telecom SI Migração para Web de um Sistema Integrado de Provisão e Cadastro de Recursos 61 João Proença diferente. Antes de certificar um prédio é necessário certificar o arruamento desse prédio, antes de certificar uma Unidade de Alojamento é preciso certificar o prédio dessa Unidade de Alojamento, e antes de certificar um código postal é preciso certificar a Unidade de Alojamento. Quando a aplicação recebe um pedido de certificação de uma morada que já tenha sido certificada, então o processo de certificação é feito automaticamente. A morada que vou usar de seguida para exemplificar uma certificação é do tipo “UAL c/CP7” ou seja, Unidade de Alojamento com Código Postal. Para a certificação deste tipo de morada estar completa, primeiro é necessário certificar o arruamento, depois o prédio, a UAL e por fim o código postal. Figura 46 – Web, certificação de arruamento Na figura 46 existe um botão no menu, o primeiro, que inicia a certificação. Um algoritmo vai ter de ler o pedido de certificação e ser capaz de, consoante o tipo de morada, o estado e o subestado da certificação, abrir na página a janela correta. Neste caso, como está no início e não tem nenhum arruamento com o nome “FACULDADE DE CIÊNCIAS” na base de dados, abriu a certificação do arruamento onde tem informação do arruamento enviado e onde se pode escolher o arruamento na base de dados que vai ser identificado.
Portugal Telecom SI Migração para Web de um Sistema Integrado de Provisão e Cadastro de Recursos 62 Universidade do Porto - FCUP Figura 47 – Web, certificação de arruamento (identificação) Ao escolher o arruamento identificado, podemos usar um que já esteja na base de dados, através de uma pesquisa, ou criar um novo (fig. 47). Se clicarmos no botão “Criar”, somos redirecionados automaticamente para a página do roteiro com a janela de criação de arruamento, já aberta e com os campos preenchidos, de acordo com o arruamento recebido. Depois de identificado, podemos prosseguir com a certificação e temos duas opções: ou selecionámos a caixa de “Certificar Automaticamente” e o algoritmo vai tentar certificar o que falta (Prédio, UAL e CP7) sem intervenção do utilizador, ou não selecionamos e mesmo que o resto da informação já conste na base de dados, ele vai pedir que o utilizador verifique todos os dados novamente. A Avenida da Boavista foi o arruamento identificado para este pedido. O código do anexo certificarAutomaticamente mostra o algoritmo da certificação usado quando é iniciada a certificação. Primeiro de tudo tenta certificar o pedido sem intervenção do utilizador através da chamada da função “InterfacesListagens.certificacaoAutomatica(pedidoSelecionado)”, depois verifica se o arruamento do pedido já foi certificado e por fim, se ainda faltar certificar algum elemento, entra num “if” que consoante o tipo de pedido vai decidir qual a janela que vai abrir para o utilizador preencher, se a janela do arruamento, do prédio, do apartado etc... Dentro do “if”, seja qual for o tipo de pedido, se o arruamento não tiver sido certificado, o algoritmo sabe que é a janela da certificação de arruamento que vai ser chamada com exceção dos casos em que é um Apartado ou uma Morada Internacional. Quando se certifica um arruamento manualmente e se seleciona a caixa de “Certificar Automaticamente” o algoritmo do anexo
Portugal Telecom SI Migração para Web de um Sistema Integrado de Provisão e Cadastro de Recursos 63 João Proença certificarAutomaticamente volta a ser chamado para tentar a certificação sem intervenção do utilizado, caso consiga acaba, caso contrário entra no “if” para decidir o próximo passo. Se ao certificar o arruamento não for escolhida a opção de certificar automaticamente, então é chamado outro algoritmo parecido com o do anexo certificarAutomaticamente mas sem a chamada para a função “InterfacesListagens.certificacaoAutomatica(pedidoSelecionado)”. Figura 48 – Web, certificação de prédio, UAL e código postal Tentei certificar automaticamente, mas como não existe nenhum prédio chamado Torre 70 na Avenida da Boavista, que era o que estava no pedido, a certificação vai continuar a ser feita manualmente (fig. 48). Na lista de pedidos, é possível ver que o pedido já se encontra em certificação e que o arruamento foi certificado, nas colunas estado e subestado (fig. 48).
Portugal Telecom SI Migração para Web de um Sistema Integrado de Provisão e Cadastro de Recursos 70 Universidade do Porto - FCUP 5. Conclusões No plano de estágio que o meu orientador fez, estava prevista a migração de três módulos e mais um, caso houvesse tempo. Nestes seis meses, não houve tempo para migrar o quarto módulo devido aos atrasos que descrevi na secção anterior. Para a nova aplicação Web entrar em produção no futuro, além de ser necessário concluir a migração dos outros módulos, teriam de ser feitos alguns ajustes ao código já escrito. Como foi explicado ao longo do relatório, este projeto consistiu numa roupagem nova de serviços já anteriormente implementados, com excepção do Google Maps. O principal desafio que encontrei, foi perceber como funcionava o código de algumas janelas para depois as puder implementar na Web. A grande quantidade de janelas envolvidas nesta aplicação, tornou a migração mais complicada e demorada. 5.1 O que fazia diferente Novas ideias acerca do design da aplicação foram surgindo durante o projeto. Algumas dessas ideias, que apareceram na parte final do projeto, apenas foram implementadas nos últimos módulos e por isso, como é possivel ver nos printscreens do capitulo da implementação, ficou por atualizar o módulo Interfaces de acordo com os outros. Muitas das janelas deste módulo abrem em páginas Web diferentes. Se começasse hoje o projeto este módulo seria implementado nos mesmos moldes dos outros ou seja, tentar sempre que toda a informação apareca numa única página em vez de andar a “saltar” de página em página. 5.2 Trabalho futuro Existem janelas dos módulos migrados que interagem com outros módulos ainda não migrados, essas janelas não foram implementadas e terão de o ser. Como foi explicado, o módulo das Moradas foi posto num projeto diferente. No futuro é necessário fazer uma replicação deste módulo para o projeto principal, mas operações de editar, criar e eliminar devem ser retiradas, ficando este módulo no projeto principal responsável apenas pela pesquisa e visualização de moradas. Quando estava a fazer a migração deste módulo surgiu uma ideia que não foi implementada devido a
Portugal Telecom SI Migração para Web de um Sistema Integrado de Provisão e Cadastro de Recursos 71 João Proença alterações complexas que era preciso fazer do lado do servidor. O objetivo era que, na parte da certificação de moradas, os utilizadores apenas pudessem certificar moradas da sua zona de operação, ou seja, um utilizador do Porto é responsável pela certificação de moradas do norte do país, logo são apenas essas que devem aparecer na lista de pedidos de certificação. No futuro esta funcionalidade deveria ser implementada pois simplifica muito a certificação visto que, neste momento qualquer utilizador pode certificar qualquer morada do país independentemente da sua zona. Ainda neste módulo, as coordenadas dos prédios eram guardadas em diferentes tipos pela aplicação, um deles é o Datum 73 [28]. Neste momento a aplicação Web está a converter todas as coordenadas do Google Maps para WGS84 e não para Datum 73, pois para que tal seja possível é necessário usar a biblioteca PROJ.4. Esta biblioteca não foi usada por falta de tempo e por não ser uma grande prioridade para o projeto. No entanto, no futuro era necessário fazer esta implementação. Os testes de usabilidade e de aceitação foram feitos por mim e pela minha equipa à medida que ia avançando no projeto, estes testes não foram muito rigorosos, apenas por intuição, devido ao projeto estar numa fase inicial, por isso não foram registados. No futuro é importante realizar estes testes e registá-los para comprovar que o novo sistema tem uma maior usabilidade e aceitação que o antigo.
Portugal Telecom SI Migração para Web de um Sistema Integrado de Provisão e Cadastro de Recursos 72 Universidade do Porto - FCUP 6. Referências Bibliográficas [1] Ebbers, M. / O’Brien, W. / Ogden, B. “Introduction to the New Mainframe: z/OS Basics”. Vervante (Março 29, 2011) [2] IBM. "CICS TS for OS/390: CICS DB2 Guide." Release 3. (1998/1999) [3] Milligan, K. / Hendrickson, D. "DDS and SQL - The Winning Combination for DB2 for i." IBM Systems and Technology Group ISV Enablement. (2012) [4] IBM. "Timely data analysis with a high-performance, integrated data warehouse." Visto em 21 de Junho, 2013, de http://www03.ibm.com/software/products/us/en/infowarefami. [5] Brown, P. C. “Architecting Composite Applications and Services with TIBCO, Addison-Wesley Professional”; 1 edition (Agosto 3, 2012). [6] PBTI soluções. "TIBCO." Visto em 1 de Julho, 2013, de http://www.pbti.com.br/parceiros/tibco/. [7] BEA. "Tuxedo® Mainframe Adapter for SNA User Guide". (2006) [8] Erickson, M. / McIntyre, A. "What is Eclipse, and how do I use it?" developerWorks. (2001) [9] Rapcinski, H. "Utilizando subversion como controle de versão." Grupo de Usuários Java. [10] Leonard, A. “JBoss Tools 3 Developers Guide, Packt Publishing” (Abril 17, 2009). [11] Caelum. “FJ-34 Desenvolvimento para Web com JBoss Seam”. (2008) [12] Shafii, R. / Lee, Stephen. / Konduri, G. “Oracle Fusion Middleware 11g Architecture and Management, McGraw-Hill Osborne Media”; 1 edition (Junho 6, 2011). [13] Bauer, C. (2011). "Running Seam examples with BEA WebLogic." Visto em 12 de Julho, 2013, de http://www.seamframework.org/Documentation/RunningSeamExamplesWithBE AWebLogic. [14] Allen, D. “Seam in Action, Manning Publications” (Junho 15, 2008). [15] Allen, D. "Seamless JSF, Part 1: An application framework tailor-made for JSF." IBM - DeveloperWorks. (2007) [16] Wikipedia. "Enterprise JavaBeans - Types of Enterprise Beans." Visto em 14 de Julho, 2013, de http://en.wikipedia.org/wiki/Enterprise_JavaBeans#Session_beans.
Portugal Telecom SI Migração para Web de um Sistema Integrado de Provisão e Cadastro de Recursos 73 João Proença [17] Filocamo, D. “JBoss RichFaces 3.3, Packt Publishing” (Outubro 29, 2009). [18] Red Hat. "RichFaces Developer Guide" (2008/2009) [19] Poplade, T. "CSS3 com PIE – bordas, sombras e gradiente." TABLELESS. (2011) [20] ca technologies. "CA-Gen." Visto em 12 de Julho, 2013, de http://www.ca.com/us/products/detail/CA-Gen.aspx. [21] Surhone, M. L. / Tennoe, T. M. / Henssonow, F. S. “Rumba (Terminal Emulator), Betascript Publishing” (Novembro 01, 2010). [22] Google. "Google Maps JavaScript API v3." Visto em 3 de Agosto, 2013, de https://developers.google.com/maps/documentation/javascript/. [23] Google Developer (2013). "Google Maps API Web Services - The Google Geocoding API." Visto em 14 de Julho, 2013, de https://developers.google.com/maps/documentation/geocoding/. [24] Google Developer (2013). "Google Maps API Web Services - The Google Geocoding API." Visto em 14 de Julho, 2013, de https://developers.google.com/maps/documentation/directions/. [25] Pires, J. "Redes de Telecomunicações - Redes de Acesso." Capítulo 7. (2010/2011) [26] Steve Burbeck, Ph D. “Applications Programming in Smalltalk-80(TM): How to use Model-View-Controller (MVC)”. (1992) [27] Department of Defense, 1987. "Department of Defense World Geodetic System 1984 - Its Definition and Relationships with Local geodetic Coordinate Systems", DMA Technical Report 8350.2 [28] IGEO. "Datum 73 (Obsoleto - Substituído pelo sistema PT-TM06-ETRS89)." Visto em 1 de Setembro, 2013, de http://www.igeo.pt/produtos/Geodesia/inf_tecnica/sistemas_referencia/Datum_ 73.htm.
Portugal Telecom SI Migração para Web de um Sistema Integrado de Provisão e Cadastro de Recursos 74 Universidade do Porto - FCUP 7. Anexos 7.1 Anexo Autenticação A função deste anexo envia as credenciais do utilizador para o proxy responsável pela autenticação, devolvendo um booleano para confirmar se foi bem ou mal sucedida. public boolean authenticate() { log.info("authenticating {0}", credentials.getUsername()); GzalvldsValidarUtilizadorImport imp = new GzalvldsValidarUtilizadorImport(); InUtilizador ut = imp.getInUtilizador(); ut.setIdUtilizador(credentials.getUsername()); InWrkGi06900cValidarUtilizador1 utView = imp.getInWrkGi06900cValidarUtilizador1(); utView.setAntiga(credentials.getPassword()); imp.setCommand("OK"); GzalvldsValidarUtilizador vu = new GzalvldsValidarUtilizador(); try { GzalvldsValidarUtilizadorExport exp = vu.execute(imp, connectionString); OutWrkErro erro = exp.getOutWrkErro(); int codErro = erro.getCodErro(); if (codErro == 0) { return true; } else return false; } catch (IllegalArgumentException e) { e.printStackTrace(); return false; } catch (CSUException e) { e.printStackTrace(); return false; } catch (Exception e) { e.printStackTrace(); return false; } }
Portugal Telecom SI Migração para Web de um Sistema Integrado de Provisão e Cadastro de Recursos 75 João Proença public static ArrayList<GruposRedes> listarGrupoDeRedes(GruposRedes filtro) { ArrayList<GruposRedes> grupos_de_redes = new ArrayList<GruposRedes>(); GxiclstsListarGrupoRedesImport imp = new GxiclstsListarGrupoRedesImport(); imp.setClientId(username); GxiclstsListarGrupoRedesImport.InPesqGrupoRedes pesq = imp .getInPesqGrupoRedes(); if(filtro==null) { pesq.setDescricao("%"); pesq.setIdGrupoRedes((short) 0); } else { pesq.setDescricao(filtro.getDescricao()); pesq.setIdGrupoRedes((short) filtro.getId()); } GxiclstsListarGrupoRedesImport.InWrkOrdemIefSupplied ordem = imp.getInWrkOrdemIefSupplied(); ordem.setSelectChar("A"); GxiclstsListarGrupoRedes listar = new GxiclstsListarGrupoRedes(); try { GxiclstsListarGrupoRedesExport exp = listar.execute(imp, connectionString); for (GxiclstsListarGrupoRedesExport.OutGrpRow row : exp.getOutGrp() .getRows()) { GruposRedes grp = new GruposRedes(); OutGrGrupoRedes out = row.getOutGrGrupoRedes(); if(out.getDescricao().trim().isEmpty()) { break; } grp.setDescricao(out.getDescricao().trim()); grp.setId(out.getIdGrupoRedes()); grp.setId_string(String.valueOf(grp.getId())); grupos_de_redes.add(grp); } return grupos_de_redes; } catch (Exception e) { System.out.println("ERRO na listagem de grupo de redes!"); System.out.println(e.getMessage()); e.printStackTrace(); return null; } } 7.2 Anexo listarGrupoDeRedes Este anexo é referente à função que chama o proxy responsável por devolver ao utilizador a lista de Grupo de Redes, de acordo com os critérios de pesquisa que este definiu.
Portugal Telecom SI Migração para Web de um Sistema Integrado de Provisão e Cadastro de Recursos 76 Universidade do Porto - FCUP <script src="https://maps.googleapis.com/maps/api/js?v=3.exp&sensor=false"></script> <script> var geocoder = new google.maps.Geocoder(); function geocodePosition(pos) { geocoder.geocode({ latLng: pos }, function(responses) { if (responses && responses.length > 0) { updateMarkerAddress(responses[0].formatted_address); } else { updateMarkerAddress('Não é possivel localizar o endereço para esta posição.'); } }); } function updateMarkerStatus(str) { document.getElementById('markerStatus').innerHTML = str; } function updateMarkerPosition(latLng) { document.getElementById('info').innerHTML = [ latLng.lat(), latLng.lng() ].join(', '); } function updateMarkerAddress(str) { document.getElementById('address').innerHTML = str; } 7.3 Anexo MapaGoogle Este script mostra um mapa ao utilizador com base nas coordenadas que lhe foram passadas. Para além da função principal GetMapa, existem quatro outras funções que trabalham com o mapa: geocodePosition, converte as coordenadas num endereço; updateMarkerStatus, muda o estado do marcador, a mover ou marcado; updateMarkerPosition, posiciona o marcador no sítio para onde foi movido; updateMarkerAddress, mostra informação do endereço onde está o marcador.
Portugal Telecom SI Migração para Web de um Sistema Integrado de Provisão e Cadastro de Recursos 77 João Proença function GetMapa(lat, lng) { var latLng = new google.maps.LatLng(lat, lng); var map = new google.maps.Map(document.getElementById('map-canvas'), { zoom: 18, center: latLng, mapTypeId: google.maps.MapTypeId.HYBRID }); var marker = new google.maps.Marker({ position: latLng, title: 'Point A', map: map, draggable: true }); // Update current position info. updateMarkerPosition(latLng); geocodePosition(latLng); // Add dragging event listeners. google.maps.event.addListener(marker, 'dragstart', function() { updateMarkerAddress('A mover...'); }); google.maps.event.addListener(marker, 'drag', function() { updateMarkerStatus('A mover...'); updateMarkerPosition(marker.getPosition()); }); google.maps.event.addListener(marker, 'dragend', function() { updateMarkerStatus('Marcado'); geocodePosition(marker.getPosition()); document.getElementById('form1:lat').value = marker.getPosition().lat(); document.getElementById('form1:lng').value = marker.getPosition().lng(); }); } </script >
Portugal Telecom SI Migração para Web de um Sistema Integrado de Provisão e Cadastro de Recursos 78 Universidade do Porto - FCUP 7.4 Anexo XMLGeocoding Quando usamos o serviço de Geocoding do Google Maps, para converter um endereço em coordenadas, a resposta é dada no formato xml, como exemplifico neste anexo.
Portugal Telecom SI Migração para Web de um Sistema Integrado de Provisão e Cadastro de Recursos 79 João Proença public static CoordenadasGeograficas getJSONByGoogle(String fullAddress) throws MalformedURLException { CoordenadasGeograficas coordenadas = new CoordenadasGeograficas(); java.net.URL url = new java.net.URL(fullAddress); URLConnection conn; try { Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress( "194.65.37.123", 80)); conn = url.openConnection(proxy); ByteArrayOutputStream output = new ByteArrayOutputStream(1024); IOUtils.copy(conn.getInputStream(), output); output.close(); String result = output.toString(); DocumentBuilderFactory dbFactory = DocumentBuilderFactory .newInstance(); DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); Document doc = dBuilder.parse(new StringBufferInputStream(result)); doc.getDocumentElement().normalize(); NodeList nodes = doc.getElementsByTagName("location"); for (int i = 0; i < 1; i++) { Node node = nodes.item(i); if (node.getNodeType() == Node.ELEMENT_NODE) { Element element = (Element) node; String lat = getValue("lat", element); String lng = getValue("lng", element); coordenadas.setLatitude_convertida(Double.parseDouble(lat)); coordenadas .setLongitude_convertida(Double.parseDouble(lng)); } } return coordenadas; } catch (IOException e) { e.printStackTrace(); return null; } catch (ParserConfigurationException e) { e.printStackTrace(); return null; } catch (SAXException e) { e.printStackTrace(); return null; } } 7.5 Anexo CoordenadasGeograficas A função deste anexo lê o xml devolvido pelo serviço de Geocoding do Google Maps, guarda as coordenadas e devolve-as ao utilizador.