SlideShare ist ein Scribd-Unternehmen logo
1 von 80
Downloaden Sie, um offline zu lesen
Criando extensões para
                     o BrOffice.org
                   usando Java e NetBeans

                                     16 de setembro de 2009
                             William D. Colen M. Silva


      Engenharia da Computação – Poli USP 2002 - 2006
Mestrando Ciência da Computação – IME USP 2009 -
  Desenvolvedor corretor gramatical CoGrOO 2004 -
Agenda
●   Introdução
●   Requisitos e preparação do ambiente
●   Tutoriais
    ●   Components
         –   Revisor de textos (BrOffice.org Writer)
    ●   Add-ons
         –   BrOffice.org Calc
              ● Nova função que responderá a pergunta fundamental da Vida,
                do Universo e Tudo Mais
         –   BrOffice.org Write
              ● Tradutor
    ●   Client application
         –   Não será abordado nesse material

                                 William Colen - http://broffice.org         2
Onde procurar e para onde enviar extensões?




              William Colen - http://broffice.org   3
Estendendo o BrOffice.org
                                      BrOffice.org
 App                                                                                 Extensão
Externo                                                                               .OXT


                   Client App                                   Components
                                                                                   Implementam
                                                                                   interfaces para
                                                                                   estender
          - Template de novo documento                                             funcionalidades
          - Extrair dados de uma planilha
                                                       Add-ons          Add-ins
                                                                             - CoGrOO
                     Implementam                                             - Nova fórmula no Calc
                         novas
                    funcionalidades




                                William Colen - http://broffice.org                             4
UNO - Universal Network Objects
●   É a tecnologia de componentes básica do OpenOffice.org,
    com ela é possível escrever programas que abstraem
    diferentes linguagens, tecnologias, plataformas e
    arquiteturas de rede.
●   UNO está disponível em Linux, Solaris, Windows, Power
    PC, FreeBSD e Mac OS X
●   Linguagens suportadas são Java, C++, OpenOffice.org
    Basic, Python e ainda MS Com, .NET CLI e linguagens
    script como Javascript, Beanshell e Jython
●   Com ele é possível criar aplicativos que se conectam a
    uma instância local ou remota e manipular os diversos
    documentos suportados pelo OpenOffice.org.

                       William Colen - http://broffice.org    5
Service Managers
●   São “fábricas” de serviços – objetos que conhecem sobre
    algumas tarefas específicas. Exemplos:
    ●   com.sun.star.frame.Desktop – pode abrir documentos e gerencia os
        documentos já abertos
    ●   com.sun.star.sdb.DatabaseContext – gerencia os bancos de dados
        carregados pela aplicação
    ●   com.sun.star.text.GlobalSettings – gerencia visualização e impressão




                             William Colen - http://broffice.org               6
Extensões para BrOffice.org
●   Pacote .OXT
●   description.xml
●   Identificador
●   Versão
●   Atualizações




                          William Colen - http://broffice.org   7
Preparando o ambiente
●   Requisitos
    ●   BrOffice.org - http://broffice.org
    ●   JDK da Sun - http://java.sun.com - ou OpenJDK - http://openjdk.java.net
    ●   OpenOffice.org Software Development Kit (SDK) -
        http://download.openoffice.org/sdk
    ●   Java IDE – sugestão: NetBeans 3.5.x com plug-in
        OpenOffice.org API for NetBeans




                               William Colen - http://broffice.org                8
Configurando Java no BrOffice.org
●   No BrOffice.org, acessar Ferramentas >> Opções...
●   No painel esquerdo acessar BrOffice.org >> Java
●   Siga as instruções para adicionar uma JRE




                      William Colen - http://broffice.org   9
Instalando o OOo API Plug-in no NetBeans
●   Até setembro de 2009 a versão disponível, a 2.0.4, só funcionava no
    NetBeans 3.5.1.
●   Para instalar, no NetBeans siga por Tools >> Plugins e selecione o
    OpenOffice.org API Plugin na aba Available Plugins. Pressione Install




                           William Colen - http://broffice.org            10
Configurando o OOo API Plug-in no NetBeans
●   As únicas configurações necessárias são os caminhos
    para o OpenOffice.org e OpenOffice.org SDK. Siga por
    Tools >> Options >> Miscellaneous >> OOo API plugin




                      William Colen - http://broffice.org   11
Exemplo de componente: revisor de textos
●   Estende as capacidades de revisão do BrOffice.org
●   Pode ser um revisor ortográfico (verifica a grafia) ou
    gramatical (verifica a sintaxe)
●   Deve implementar a API Linguistic. Para verificadores que
    dependem da sintaxe usar a interface
    com.sun.star.linguistic2.XProofreader
●   Requer um arquivo de configuração Linguistic.xcu
●   Exemplo: criar um revisor que marca a frase “BrOffice.org
    é bom” como errada e sugere usar “BrOffice.org é o
    melhor”.

     Nota: revisores ortográficos em geral são implementados usando dicionários.
     Veja como aqui: http://wiki.services.openoffice.org/wiki/Extension_Dictionaries
                               William Colen - http://broffice.org                     12
Exemplo de componente: revisor de textos
Crie um novo projeto OpenOffice.org >> OpenOffice.org component
                 usando o Wizard do NetBeans




                     William Colen - http://broffice.org          13
Exemplo de componente: revisor de textos
Crie um novo projeto OpenOffice.org >> OpenOffice.org component
                 usando o Wizard do NetBeans




                     William Colen - http://broffice.org          14
Exemplo de componente: revisor de textos
Defina o serviço com.sun.star.linguistic2.Proofreader clicando em Add
                 Service/Interface. Clique em Finish.




                        William Colen - http://broffice.org             15
Exemplo de componente: revisor de textos
O novo projeto será criado. Vamos agora alterar o template de acordo
                    com nossas necessidades.




                       William Colen - http://broffice.org             16
Exemplo de componente: revisor de textos
Primeiro configuramos as propriedades da extensão. Vamos criar os
arquivos necessários para a descrição. Os nomes dos arquivos não
são importantes:
●   Description_enUS.txt – 'Sample proofreader that search for
    “BrOffice.org é bom” and suggest to use “BrOffice.org é o
    melhor”.'
●   Description_ptBR.txt – 'Exemplo de revisor que busca
    “BrOffice.org é bom” e sugere usar “BrOffice.org é o melhor”.'
●   License.txt - “BSD”
●   broffice.png (42x42)
Sugestão: crie estes arquivos em qualquer pasta fora do projeto e
deixe o Wizard colocar eles nos locais apropriados



                          William Colen - http://broffice.org        17
Exemplo de componente: revisor de textos
     Clique com o direito no projeto e depois em Properties >>
OpenOffice.org >> Display e escolha Current Locale “en”. Preencha os
                      campos do Description.




                        William Colen - http://broffice.org            18
Exemplo de componente: revisor de textos
        Em seguida configure para pt-BR




             William Colen - http://broffice.org   19
Exemplo de componente: revisor de textos
Arquivos necessários para a descrição da extensão são copiados para
                             o projeto.




                       William Colen - http://broffice.org        20
Exemplo de componente: revisor de textos
     Em Version configure também o identificador (que deve ser único por
   toda a vida da extensão) e ainda configure eventuais dependências e o
                               site de update.




Nota: saiba mais sobre updates aqui:
http://wiki.services.openoffice.org/wiki/Documentation/DevGuide/Extensions/Online_Update_of_Extensions
                                     William Colen - http://broffice.org                         21
Exemplo de componente: revisor de textos
  Com isto temos o description.xml já configurado




               William Colen - http://broffice.org   22
Exemplo de componente: revisor de textos
Alterações no template: adicionar o Linguistic.xcu para que o OOo
                conheça a nova implementação




                      William Colen - http://broffice.org           23
Exemplo de componente: revisor de textos
Configure o arquivo UNO manifest para que ele conheça a nova
                    extensão Linguistic.xcu




                    William Colen - http://broffice.org        24
Exemplo de componente: revisor de textos
●   Alguns componentes podem ser instanciados apenas uma vez, é o
    caso do nosso revisor
●   Para facilitar vamos introduzir a classe SingletonFactory que
    instância o revisor apenas uma vez e mantém a referência para este
    objeto
●   Ocasionalmente temos que trocar o contexto de execução do revisor,
    por isso vamos alterar a classe MeuExemploDeRevisor, tirando o
    final da variável m_xContext e introduzindo o método
    changeContext(XComponentContext xCompContext) para trocar o
    seu valor.




                          William Colen - http://broffice.org            25
Exemplo de componente: revisor de textos
       Adicione a classe SingletonFactory




             William Colen - http://broffice.org   26
Exemplo de componente: revisor de textos
Modifique a classe MeuExemploDeRevisor para usar SingletonFactory




                      William Colen - http://broffice.org       27
Exemplo de componente: revisor de textos
●   Agora podemos implementar nosso revisor propriamente dito.
    Primeiro implementamos os métodos da interface
    XSupportedLocales:
    ●   public com.sun.star.lang.Locale[] getLocales()
         –   Retorna os Locales suportados. Vamos retornar apenas pt-BR
    ●   public boolean hasLocale(com.sun.star.lang.Locale aLocale)
         –   Deveria validar o locale, mas vamos retornar sempre true.




                            William Colen - http://broffice.org          28
Exemplo de componente: revisor de textos
Implemente os métodos da interface XSupportedLocales




                William Colen - http://broffice.org    29
Exemplo de componente: revisor de textos
E finalmente os métodos da interface XProofreader:
●   public boolean isSpellChecker()
     –   Vamos fazer do nosso um gramatical, vamos retornar false
●   public void ignoreRule(String aRuleIdentifier,
       com.sun.star.lang.Locale aLocale)
            throws com.sun.star.lang.IllegalArgumentException
     –   Efetiva ignorar regra. Nós não vamos implementar porque não
         usaremos sistema de regras
●   public void resetIgnoreRules()
     –   Limpar lista de regras ignoradas.




                          William Colen - http://broffice.org          30
Exemplo de componente: revisor de textos
Continuação da interface XProofreader:
●   public com.sun.star.linguistic2.ProofreadingResult doProofreading(
      String aDocumentIdentifier, // usado se guardar dados do doc
      String aText, // texto para ser verificado
      com.sun.star.lang.Locale aLocale, // locale do texto
      int nStartOfSentencePosition, // onde começar a verif. no text
      int nSuggestedBehindEndOfSentencePosition, // *
      com.sun.star.beans.PropertyValue[] aProperties //detalhes locale
      )
           throws com.sun.star.lang.IllegalArgumentException
    –   Método deve verificar o texto. aDocumentIdentifier pode ser
        usado para guardar numa estrutura de dados o contexto de um
        dado documento
        (*) O BrOffice.org sugere onde uma sentença termina, mas
        muitas vezes o verificador é melhor nessa delimitação do que o
        BrOffice.org, por isso que ele manda sempre texto extra.

                        William Colen - http://broffice.org          31
Exemplo de componente: revisor de textos
    Implementação do método doProofReading
●   Primeiro criamos um objeto ProofreadingResult e inicializamos ele com
    os dados passados como argumentos de doProofReading
●   Caso o texto seja nulo ou vazio, já retornamos
●   Caso exista texto, nós aceitamos como fim da sentença o tamanho do
    texto dado pela API
●   Em seguida criamos um verificador bem ingênuo, que busca usando
    uma expressão regular o texto “BrOffice.org é bom”. Para cada região
    com esta ocorrência ele cria um objeto SingleProofreadingError e
    finalmente coloca estes na lista de erros no ProofreadingResult




                            William Colen - http://broffice.org            32
Exemplo de componente: revisor de textos
    Implementação do método doProofReading




             William Colen - http://broffice.org   33
Exemplo de componente: revisor de textos
 Debugando o componente: inserindo um Breakpoint




               William Colen - http://broffice.org   34
Exemplo de componente: revisor de textos
     Debugando o componente: inicializando




             William Colen - http://broffice.org   35
Exemplo de componente: revisor de textos
Debugando o componente: wizard instala no BrOffice.org




                 William Colen - http://broffice.org     36
Exemplo de componente: revisor de textos
Debugando o componente: Digite o texto no BrOffice.org Writer




                    William Colen - http://broffice.org         37
Exemplo de componente: revisor de textos
Debugando o componente: o BrOffice.org chama o método doProofReading




                        William Colen - http://broffice.org      38
Exemplo de componente: revisor de textos
Debugando o componente: o BrOffice.org sublinha o texto




                 William Colen - http://broffice.org      39
Exemplo de componente: revisor de textos
Debugando o componente: e ainda fornece um menu de contexto




                    William Colen - http://broffice.org       40
Exemplo de componente: revisor de textos
Debugando o componente: e finalmente corrige o texto




                William Colen - http://broffice.org    41
Exemplo de componente: revisor de textos
            Gerando o instalador




            William Colen - http://broffice.org   42
Exemplo de componente: revisor de textos
            Gerando o instalador




            William Colen - http://broffice.org   43
Exemplo de Calc Add-in: Responde a questão da Vida,
             Do Universo e Tudo Mais
●   Ainda mais fácil que um revisor de texto é criar um Add-in
    para o Calc
●   Não são necessários menus, configurações etc. A nova
    função estará disponível para uso da mesma forma que as
    funções nativas.
●   Este exemplo envolve um cálculo complexo que responde
    a questão da Vida, Do Universo e Tudo Mais, conforme
    descrito na série O Guia do Mochileiro das Galáxias, de
    Douglas Adams.




                       William Colen - http://broffice.org       44
Exemplo de Calc Add-in: Responde a questão da Vida,
             Do Universo e Tudo Mais
Crie um novo projeto usando OpenOffice.org >> OpenOffice.org Calc
                             Add-in




                      William Colen - http://broffice.org           45
Exemplo de Calc Add-in: Responde a questão da Vida,
             Do Universo e Tudo Mais
           Configure os parâmetros do novo projeto




                    William Colen - http://broffice.org   46
Exemplo de Calc Add-in: Responde a questão da Vida,
             Do Universo e Tudo Mais
    Configure o nome e tipo da função, descrição e argumentos




                      William Colen - http://broffice.org       47
Exemplo de Calc Add-in: Responde a questão da Vida,
             Do Universo e Tudo Mais
Configure o componente clicando com o direito no projeto e depois em
  Properties >> OpenOffice.org >> Display, como feito no exemplo
                             anterior.




                        William Colen - http://broffice.org        48
Exemplo de Calc Add-in: Responde a questão da Vida,
             Do Universo e Tudo Mais
●   Criar um Add-in para o Calc é muito simples. Só é
    necessário alterar o método que implementa o cálculo da
    função
●   No nosso caso basta então implementar na classe
    ResolvedorDaVidaUniversoETudoMaisImpl o método
      public int answerToLifeTheUniverseAndEverything(int magicalNumber)




                          William Colen - http://broffice.org              49
Exemplo de Calc Add-in: Responde a questão da Vida,
             Do Universo e Tudo Mais
 Implementação do método answerToLifeTheUniverseAndEverything




                     William Colen - http://broffice.org        50
Exemplo de Calc Add-in: Responde a questão da Vida,
             Do Universo e Tudo Mais
              Estamos prontos para executar




                  William Colen - http://broffice.org   51
Exemplo de Calc Add-in: Responde a questão da Vida,
             Do Universo e Tudo Mais
   Como especificado, a função está na categoria Suplementos




                     William Colen - http://broffice.org       52
Exemplo de Calc Add-in: Responde a questão da Vida,
             Do Universo e Tudo Mais




                  William Colen - http://broffice.org   53
Exemplo de Calc Add-in: Responde a questão da Vida,
             Do Universo e Tudo Mais
         A função está pronta para uso em planilhas.




                    William Colen - http://broffice.org   54
Exemplo de Add-on: Tradutor
●   Adiciona uma nova característica ao BrOffice.org
●   Vamos trabalhar apenas com documentos de texto
    (Writer) simples
●   Usuário seleciona um texto e executa o comando de
    traduzir. Uma janela é aberta e o usuário seleciona o
    idioma de origem e o de destino. O texto selecionado é
    substituído pela versão traduzida.
●   Para traduzir vamos usar o Google Translate, através da
    API fornecida pelo projeto Google-API-Translate-Java –
    distribuído sob licença LGPL e disponível no site
    http://code.google.com/p/google-api-translate-java


                       William Colen - http://broffice.org    55
Exemplo de Add-on: Tradutor
Crie um novo projeto usando OpenOffice.org >> OpenOffice.org Add-on




                       William Colen - http://broffice.org        56
Exemplo de Add-on: Tradutor
Configure os parâmetros do novo projeto




         William Colen - http://broffice.org   57
Exemplo de Add-on: Tradutor
Configure as funções suportadas pelo Add-On. Coloque a função
      principal e eventuais chamadas para configurações.




                    William Colen - http://broffice.org         58
Exemplo de Add-on: Tradutor
Configure o menu, dando um nome padrão e localizações desejadas.
      Configure o menu para aparecer apenas no BrOo Writer.




                      William Colen - http://broffice.org          59
Exemplo de Add-on: Tradutor
Configure também a barra de botões. Configure a barra para aparecer
              apenas no BrOo Writer. Aperte Finish.




                       William Colen - http://broffice.org            60
Exemplo de Add-on: Tradutor
 Configure o componente clicando com o direito no projeto e depois em
Properties >> OpenOffice.org >> Display como feito no exemplo anterior.




                         William Colen - http://broffice.org          61
Exemplo de Add-on: Tradutor
  O Wizard já criou o Addons.xcu




       William Colen - http://broffice.org   62
Exemplo de Add-on: Tradutor
     e o ProtocolHandler.xcu




      William Colen - http://broffice.org   63
Exemplo de Add-on: Tradutor
●   Addons.xcu
    ●   Configura os menus e as barras de botões do Add-on.
●   ProtocolHandler.xcu
    ●   Direciona todos os comandos com namespace
        “org.broffice.addons.meutradutorusandogoogletranslate.meutradu
        torusandogoogletranslate:*” para o Add-on




                            William Colen - http://broffice.org      64
Exemplo de Add-on: Tradutor
Vamos adicionar a biblioteca do google-api-translate-java-0.8 ao projeto




                         William Colen - http://broffice.org           65
Exemplo de Add-on: Tradutor
●   Agora criamos as seguintes classes para acessar a API do
    Google Translate
    ●   GoogleTranslate – Singleton para gerenciar o acesso
         –   String Traduzir(String texto, String origem, String destino)
         –   public String[] getIdiomas()
         –   public short getOrigemPadrao()
         –   public short getDestinoPadrao()
    ●   TradutorDeTexto – Classe que conhece o documento e o GoogleTranslate
         –   private XTextRange getRegiaoSelecionada()
         –   private String getTextoSelecionado(XTextRange regiaoSelecionada)
         –   private void setTextoSelecionado(XTextRange regiaoSelecionada, String
             texto)
         –   public void traduzTextoSelecionado(String origem, String destino)



                                 William Colen - http://broffice.org                 66
Exemplo de Add-on: Tradutor
GoogleTranslate – Singleton para gerenciar o acesso




               William Colen - http://broffice.org    67
Exemplo de Add-on: Tradutor
TradutorDeTexto – Classe que conhece o documento e o
                  GoogleTranslate




                William Colen - http://broffice.org    68
Exemplo de Add-on: Tradutor
●   Vamos agora criar uma caixa de dialogo para pedir ao usuário
    que ele escolha o idioma de origem e o de destino
●   Interfaces gráficas são feitas usando UNO e uma
    implementação do AWT próprio do BrOo. O código é um pouco
    diferente já que não podemos criar objetos UNO como criamos
    objetos no Java. Devemos usar o método
    XmultiServiceFactory.createInstance para criar os
    componentes.
    ●   DialogoIdioma
         –   public DialogoIdioma(XComponentContext xCompContext) – construtor que
             recebe o contexto de execução, exibe a janela
         –   public String getOrigem() - retorna o idioma de origem selecionado
         –   public String getDestino() - retorna o idioma de origem selecionado
    ●   I18nLabelsLoader – classe auxiliar para facilitar a internacionalização da caixa
        de diálogo.

                                William Colen - http://broffice.org                        69
Exemplo de Add-on: Tradutor
DialogoIdioma - pede para o usuário o idioma de origem e de destino




                       William Colen - http://broffice.org            70
Exemplo de Add-on: Tradutor
I18nLabelsLoader – classe auxiliar para facilitar a internacionalização
                       da caixa de diálogo.




                        William Colen - http://broffice.org               71
Exemplo de Add-on: Tradutor
●   Vamos finalmente integrar tudo na classe
    MeuTradutorUsandoGoogleTranslate.
●   Esta classe aparenta ser bem complexa, mas grande parte
    dela serve apenas para o sistemas de Add-ons funcionar.
    Alguns métodos podem ser alterados para personalizar algum
    comportamento do Add-on, mas não é o nosso caso neste
    exemplo.
●   O único método que precisamos alterar é o dispatch
●   Todos os eventos são direcionados para o dispatch. O que
    temos que fazer é tratar quando for o evento Translate.




                        William Colen - http://broffice.org      72
Exemplo de Add-on: Tradutor
Método dispatch cria uma nova thread para tratar o evento




                  William Colen - http://broffice.org       73
Exemplo de Add-on: Tradutor
A thread chama DialogoIdioma para pegar as opções e em seguida
         chama TradutorDeTexto para efetivar a tradução




                     William Colen - http://broffice.org         74
Exemplo de Add-on: Tradutor
Estamos prontos para executar! Digite o texto, selecione e chame
                         Translate




                     William Colen - http://broffice.org           75
Exemplo de Add-on: Tradutor
O texto foi traduzido. Você pode ainda chamar novamente trocando o
                               idioma:




                       William Colen - http://broffice.org           76
Exemplo de Add-on: Tradutor
 E o texto foi traduzido novamente.




       William Colen - http://broffice.org   77
Referências
OpenOffice.org Developer's Guide -
http://wiki.services.openoffice.org/wiki/Documentation/DevGuide/OpenOffice.org_Developers_Guide

Extensions -
http://wiki.services.openoffice.org/wiki/Documentation/DevGuide/Extensions/Extensions

OpenOffice.org API -
http://api.openoffice.org

Integração NetBeans -
http://wiki.services.openoffice.org/wiki/OpenOffice_NetBeans_Integration




                                    William Colen - http://broffice.org                       78
Encontro Nacional BrOffice.org




       William Colen - http://broffice.org   79
Obrigado pela oportunidade e pela atenção!



        http://cogroo.sourceforge.net




              William Colen - http://broffice.org   80

Weitere ähnliche Inhalte

Was ist angesagt?

Dev401 novos recursos do microsoft visual basic 2010
Dev401 novos recursos do microsoft visual basic 2010Dev401 novos recursos do microsoft visual basic 2010
Dev401 novos recursos do microsoft visual basic 2010Alexandre Tarifa
 
Symfony Live - São Paulo 2019 - Como construir uma API em um passo com API Pl...
Symfony Live - São Paulo 2019 - Como construir uma API em um passo com API Pl...Symfony Live - São Paulo 2019 - Como construir uma API em um passo com API Pl...
Symfony Live - São Paulo 2019 - Como construir uma API em um passo com API Pl...BrunoSouza617
 
Desenvolvendo para web ASP.Net (Overview para iniciantes)
Desenvolvendo para web ASP.Net (Overview para iniciantes)Desenvolvendo para web ASP.Net (Overview para iniciantes)
Desenvolvendo para web ASP.Net (Overview para iniciantes)Fernando Gonçalves
 
Treinamento ASP.NET 2014
Treinamento ASP.NET 2014Treinamento ASP.NET 2014
Treinamento ASP.NET 2014Eric Gallardo
 
Fundamentos do asp.net
Fundamentos do asp.netFundamentos do asp.net
Fundamentos do asp.netleojr_0
 
CakePHP + Adobe Flex®, v2
CakePHP + Adobe Flex®, v2CakePHP + Adobe Flex®, v2
CakePHP + Adobe Flex®, v2Cauan Cabral
 

Was ist angesagt? (11)

Dev401 novos recursos do microsoft visual basic 2010
Dev401 novos recursos do microsoft visual basic 2010Dev401 novos recursos do microsoft visual basic 2010
Dev401 novos recursos do microsoft visual basic 2010
 
Linguagem Delphi-Introdução
Linguagem Delphi-IntroduçãoLinguagem Delphi-Introdução
Linguagem Delphi-Introdução
 
Symfony Live - São Paulo 2019 - Como construir uma API em um passo com API Pl...
Symfony Live - São Paulo 2019 - Como construir uma API em um passo com API Pl...Symfony Live - São Paulo 2019 - Como construir uma API em um passo com API Pl...
Symfony Live - São Paulo 2019 - Como construir uma API em um passo com API Pl...
 
Delphi6bd
Delphi6bdDelphi6bd
Delphi6bd
 
Desenvolvendo para web ASP.Net (Overview para iniciantes)
Desenvolvendo para web ASP.Net (Overview para iniciantes)Desenvolvendo para web ASP.Net (Overview para iniciantes)
Desenvolvendo para web ASP.Net (Overview para iniciantes)
 
Treinamento ASP.NET 2014
Treinamento ASP.NET 2014Treinamento ASP.NET 2014
Treinamento ASP.NET 2014
 
Fundamentos do asp.net
Fundamentos do asp.netFundamentos do asp.net
Fundamentos do asp.net
 
Adobe Flex
Adobe FlexAdobe Flex
Adobe Flex
 
Oo delphi
Oo delphiOo delphi
Oo delphi
 
CakePHP + Adobe Flex®, v2
CakePHP + Adobe Flex®, v2CakePHP + Adobe Flex®, v2
CakePHP + Adobe Flex®, v2
 
Git hub and Laravel
Git hub and Laravel Git hub and Laravel
Git hub and Laravel
 

Ähnlich wie Tutorial: Criando extensões para o OpenOffice

Introdução à Programação Web com Angular
Introdução à Programação Web com AngularIntrodução à Programação Web com Angular
Introdução à Programação Web com AngularElmano Cavalcanti
 
Carrefour E-commerce - Multicloud Brasil Day 2017
Carrefour E-commerce - Multicloud Brasil Day 2017Carrefour E-commerce - Multicloud Brasil Day 2017
Carrefour E-commerce - Multicloud Brasil Day 2017Denis Santos
 
Composer dependency manager
Composer   dependency managerComposer   dependency manager
Composer dependency managerVitor Mattos
 
Desenvolvimento de Aplicações com Visual Studio
Desenvolvimento de Aplicações com Visual StudioDesenvolvimento de Aplicações com Visual Studio
Desenvolvimento de Aplicações com Visual StudioGeovani Ferreira Gonçalves
 
Instalando e usando a XPages Extension Library para IBM Designer - extlib (Po...
Instalando e usando a XPages Extension Library para IBM Designer - extlib (Po...Instalando e usando a XPages Extension Library para IBM Designer - extlib (Po...
Instalando e usando a XPages Extension Library para IBM Designer - extlib (Po...Bruno Grange
 
Academia do Arquiteto - Implantando A.L.M. em uma semana!
Academia do Arquiteto - Implantando A.L.M. em uma semana!Academia do Arquiteto - Implantando A.L.M. em uma semana!
Academia do Arquiteto - Implantando A.L.M. em uma semana!Globalcode
 
Aula 1 -_ambiente_visual_studio_2012
Aula 1 -_ambiente_visual_studio_2012Aula 1 -_ambiente_visual_studio_2012
Aula 1 -_ambiente_visual_studio_2012Laís Vidal
 
TDC2016SP - Revitalizando aplicações desktop usando CefGlue, MessageBus e Rea...
TDC2016SP - Revitalizando aplicações desktop usando CefGlue, MessageBus e Rea...TDC2016SP - Revitalizando aplicações desktop usando CefGlue, MessageBus e Rea...
TDC2016SP - Revitalizando aplicações desktop usando CefGlue, MessageBus e Rea...tdc-globalcode
 
Web Training Aula 04: Introduction to Git
Web Training Aula 04: Introduction to GitWeb Training Aula 04: Introduction to Git
Web Training Aula 04: Introduction to GitMozDevz
 
ASP.NET 5 - Novidades do Desenvolvimento Web em .NET
ASP.NET 5 - Novidades do Desenvolvimento Web em .NETASP.NET 5 - Novidades do Desenvolvimento Web em .NET
ASP.NET 5 - Novidades do Desenvolvimento Web em .NETRenato Groff
 
ConheçA O Apache 2.0 Parte 2
ConheçA O Apache 2.0   Parte 2ConheçA O Apache 2.0   Parte 2
ConheçA O Apache 2.0 Parte 2Felipe Santos
 
TDC2016POA | Trilha Arquetetura - Revitalizando aplicações desktop usando Ce...
TDC2016POA | Trilha Arquetetura -  Revitalizando aplicações desktop usando Ce...TDC2016POA | Trilha Arquetetura -  Revitalizando aplicações desktop usando Ce...
TDC2016POA | Trilha Arquetetura - Revitalizando aplicações desktop usando Ce...tdc-globalcode
 
TDC2016SP Trilha Arquitetura.NET - Revitalizando aplicações desktop usando C...
TDC2016SP  Trilha Arquitetura.NET - Revitalizando aplicações desktop usando C...TDC2016SP  Trilha Arquitetura.NET - Revitalizando aplicações desktop usando C...
TDC2016SP Trilha Arquitetura.NET - Revitalizando aplicações desktop usando C...Marcelo Palladino
 
O novo IBM COBOL ENTERPRISE V5/V6 para zOS e o IBM ABO
O novo IBM COBOL ENTERPRISE V5/V6 para zOS e o IBM ABOO novo IBM COBOL ENTERPRISE V5/V6 para zOS e o IBM ABO
O novo IBM COBOL ENTERPRISE V5/V6 para zOS e o IBM ABOPaulo Batuta
 
Apresentação CEJS - Do nada para a nuvem
Apresentação CEJS - Do nada para a nuvemApresentação CEJS - Do nada para a nuvem
Apresentação CEJS - Do nada para a nuvemRodrigo Valerio
 

Ähnlich wie Tutorial: Criando extensões para o OpenOffice (20)

Introdução à Programação Web com Angular
Introdução à Programação Web com AngularIntrodução à Programação Web com Angular
Introdução à Programação Web com Angular
 
Carrefour E-commerce - Multicloud Brasil Day 2017
Carrefour E-commerce - Multicloud Brasil Day 2017Carrefour E-commerce - Multicloud Brasil Day 2017
Carrefour E-commerce - Multicloud Brasil Day 2017
 
Escalando apps com React e Type Script e SOLID
Escalando apps com React e Type Script e SOLIDEscalando apps com React e Type Script e SOLID
Escalando apps com React e Type Script e SOLID
 
Composer dependency manager
Composer   dependency managerComposer   dependency manager
Composer dependency manager
 
Desenvolvimento de Aplicações com Visual Studio
Desenvolvimento de Aplicações com Visual StudioDesenvolvimento de Aplicações com Visual Studio
Desenvolvimento de Aplicações com Visual Studio
 
Instalando e usando a XPages Extension Library para IBM Designer - extlib (Po...
Instalando e usando a XPages Extension Library para IBM Designer - extlib (Po...Instalando e usando a XPages Extension Library para IBM Designer - extlib (Po...
Instalando e usando a XPages Extension Library para IBM Designer - extlib (Po...
 
Academia do Arquiteto - Implantando A.L.M. em uma semana!
Academia do Arquiteto - Implantando A.L.M. em uma semana!Academia do Arquiteto - Implantando A.L.M. em uma semana!
Academia do Arquiteto - Implantando A.L.M. em uma semana!
 
Aula 1 -_ambiente_visual_studio_2012
Aula 1 -_ambiente_visual_studio_2012Aula 1 -_ambiente_visual_studio_2012
Aula 1 -_ambiente_visual_studio_2012
 
TDC2016SP - Revitalizando aplicações desktop usando CefGlue, MessageBus e Rea...
TDC2016SP - Revitalizando aplicações desktop usando CefGlue, MessageBus e Rea...TDC2016SP - Revitalizando aplicações desktop usando CefGlue, MessageBus e Rea...
TDC2016SP - Revitalizando aplicações desktop usando CefGlue, MessageBus e Rea...
 
Web Training Aula 04: Introduction to Git
Web Training Aula 04: Introduction to GitWeb Training Aula 04: Introduction to Git
Web Training Aula 04: Introduction to Git
 
Adobe Flex
Adobe FlexAdobe Flex
Adobe Flex
 
Integração Continua - Jenkins
Integração Continua - JenkinsIntegração Continua - Jenkins
Integração Continua - Jenkins
 
ASP.NET 5 - Novidades do Desenvolvimento Web em .NET
ASP.NET 5 - Novidades do Desenvolvimento Web em .NETASP.NET 5 - Novidades do Desenvolvimento Web em .NET
ASP.NET 5 - Novidades do Desenvolvimento Web em .NET
 
ConheçA O Apache 2.0 Parte 2
ConheçA O Apache 2.0   Parte 2ConheçA O Apache 2.0   Parte 2
ConheçA O Apache 2.0 Parte 2
 
TDC2016POA | Trilha Arquetetura - Revitalizando aplicações desktop usando Ce...
TDC2016POA | Trilha Arquetetura -  Revitalizando aplicações desktop usando Ce...TDC2016POA | Trilha Arquetetura -  Revitalizando aplicações desktop usando Ce...
TDC2016POA | Trilha Arquetetura - Revitalizando aplicações desktop usando Ce...
 
TDC2016SP Trilha Arquitetura.NET - Revitalizando aplicações desktop usando C...
TDC2016SP  Trilha Arquitetura.NET - Revitalizando aplicações desktop usando C...TDC2016SP  Trilha Arquitetura.NET - Revitalizando aplicações desktop usando C...
TDC2016SP Trilha Arquitetura.NET - Revitalizando aplicações desktop usando C...
 
O novo IBM COBOL ENTERPRISE V5/V6 para zOS e o IBM ABO
O novo IBM COBOL ENTERPRISE V5/V6 para zOS e o IBM ABOO novo IBM COBOL ENTERPRISE V5/V6 para zOS e o IBM ABO
O novo IBM COBOL ENTERPRISE V5/V6 para zOS e o IBM ABO
 
Framework web 01 - Aula UTFPR 2018
Framework web 01 - Aula UTFPR 2018Framework web 01 - Aula UTFPR 2018
Framework web 01 - Aula UTFPR 2018
 
Alm open source
Alm open sourceAlm open source
Alm open source
 
Apresentação CEJS - Do nada para a nuvem
Apresentação CEJS - Do nada para a nuvemApresentação CEJS - Do nada para a nuvem
Apresentação CEJS - Do nada para a nuvem
 

Mehr von William Colen

Sistemas de Processamento de Linguagem Natural na Prática
Sistemas de Processamento de Linguagem Natural na PráticaSistemas de Processamento de Linguagem Natural na Prática
Sistemas de Processamento de Linguagem Natural na PráticaWilliam Colen
 
Falando com a máquina: Desenvolvimento de assistentes pessoais virtuais
Falando com a máquina: Desenvolvimento de assistentes pessoais virtuaisFalando com a máquina: Desenvolvimento de assistentes pessoais virtuais
Falando com a máquina: Desenvolvimento de assistentes pessoais virtuaisWilliam Colen
 
Processamento Automático da Língua Portuguesa - Campus Party Br 6
Processamento Automático da Língua Portuguesa - Campus Party Br 6Processamento Automático da Língua Portuguesa - Campus Party Br 6
Processamento Automático da Língua Portuguesa - Campus Party Br 6William Colen
 
CoGrOO 4.0 no FISL 13
CoGrOO 4.0 no FISL 13CoGrOO 4.0 no FISL 13
CoGrOO 4.0 no FISL 13William Colen
 
Cogroo Comunidade no FISL XI
Cogroo Comunidade no FISL XICogroo Comunidade no FISL XI
Cogroo Comunidade no FISL XIWilliam Colen
 
O corretor gramatical CoGrOO - IX Evidosol
O corretor gramatical CoGrOO - IX EvidosolO corretor gramatical CoGrOO - IX Evidosol
O corretor gramatical CoGrOO - IX EvidosolWilliam Colen
 
Mini-curso Processamento de linguagens naturais: pondo em prática
Mini-curso Processamento de linguagens naturais: pondo em prática Mini-curso Processamento de linguagens naturais: pondo em prática
Mini-curso Processamento de linguagens naturais: pondo em prática William Colen
 
Processamento Automático da Língua Portuguesa: DevInSampa 2011
Processamento Automático da Língua Portuguesa: DevInSampa 2011Processamento Automático da Língua Portuguesa: DevInSampa 2011
Processamento Automático da Língua Portuguesa: DevInSampa 2011William Colen
 
Cogroo Google Oss Jam Sao Paulo V01
Cogroo Google Oss Jam Sao Paulo V01Cogroo Google Oss Jam Sao Paulo V01
Cogroo Google Oss Jam Sao Paulo V01William Colen
 

Mehr von William Colen (9)

Sistemas de Processamento de Linguagem Natural na Prática
Sistemas de Processamento de Linguagem Natural na PráticaSistemas de Processamento de Linguagem Natural na Prática
Sistemas de Processamento de Linguagem Natural na Prática
 
Falando com a máquina: Desenvolvimento de assistentes pessoais virtuais
Falando com a máquina: Desenvolvimento de assistentes pessoais virtuaisFalando com a máquina: Desenvolvimento de assistentes pessoais virtuais
Falando com a máquina: Desenvolvimento de assistentes pessoais virtuais
 
Processamento Automático da Língua Portuguesa - Campus Party Br 6
Processamento Automático da Língua Portuguesa - Campus Party Br 6Processamento Automático da Língua Portuguesa - Campus Party Br 6
Processamento Automático da Língua Portuguesa - Campus Party Br 6
 
CoGrOO 4.0 no FISL 13
CoGrOO 4.0 no FISL 13CoGrOO 4.0 no FISL 13
CoGrOO 4.0 no FISL 13
 
Cogroo Comunidade no FISL XI
Cogroo Comunidade no FISL XICogroo Comunidade no FISL XI
Cogroo Comunidade no FISL XI
 
O corretor gramatical CoGrOO - IX Evidosol
O corretor gramatical CoGrOO - IX EvidosolO corretor gramatical CoGrOO - IX Evidosol
O corretor gramatical CoGrOO - IX Evidosol
 
Mini-curso Processamento de linguagens naturais: pondo em prática
Mini-curso Processamento de linguagens naturais: pondo em prática Mini-curso Processamento de linguagens naturais: pondo em prática
Mini-curso Processamento de linguagens naturais: pondo em prática
 
Processamento Automático da Língua Portuguesa: DevInSampa 2011
Processamento Automático da Língua Portuguesa: DevInSampa 2011Processamento Automático da Língua Portuguesa: DevInSampa 2011
Processamento Automático da Língua Portuguesa: DevInSampa 2011
 
Cogroo Google Oss Jam Sao Paulo V01
Cogroo Google Oss Jam Sao Paulo V01Cogroo Google Oss Jam Sao Paulo V01
Cogroo Google Oss Jam Sao Paulo V01
 

Tutorial: Criando extensões para o OpenOffice

  • 1. Criando extensões para o BrOffice.org usando Java e NetBeans 16 de setembro de 2009 William D. Colen M. Silva Engenharia da Computação – Poli USP 2002 - 2006 Mestrando Ciência da Computação – IME USP 2009 - Desenvolvedor corretor gramatical CoGrOO 2004 -
  • 2. Agenda ● Introdução ● Requisitos e preparação do ambiente ● Tutoriais ● Components – Revisor de textos (BrOffice.org Writer) ● Add-ons – BrOffice.org Calc ● Nova função que responderá a pergunta fundamental da Vida, do Universo e Tudo Mais – BrOffice.org Write ● Tradutor ● Client application – Não será abordado nesse material William Colen - http://broffice.org 2
  • 3. Onde procurar e para onde enviar extensões? William Colen - http://broffice.org 3
  • 4. Estendendo o BrOffice.org BrOffice.org App Extensão Externo .OXT Client App Components Implementam interfaces para estender - Template de novo documento funcionalidades - Extrair dados de uma planilha Add-ons Add-ins - CoGrOO Implementam - Nova fórmula no Calc novas funcionalidades William Colen - http://broffice.org 4
  • 5. UNO - Universal Network Objects ● É a tecnologia de componentes básica do OpenOffice.org, com ela é possível escrever programas que abstraem diferentes linguagens, tecnologias, plataformas e arquiteturas de rede. ● UNO está disponível em Linux, Solaris, Windows, Power PC, FreeBSD e Mac OS X ● Linguagens suportadas são Java, C++, OpenOffice.org Basic, Python e ainda MS Com, .NET CLI e linguagens script como Javascript, Beanshell e Jython ● Com ele é possível criar aplicativos que se conectam a uma instância local ou remota e manipular os diversos documentos suportados pelo OpenOffice.org. William Colen - http://broffice.org 5
  • 6. Service Managers ● São “fábricas” de serviços – objetos que conhecem sobre algumas tarefas específicas. Exemplos: ● com.sun.star.frame.Desktop – pode abrir documentos e gerencia os documentos já abertos ● com.sun.star.sdb.DatabaseContext – gerencia os bancos de dados carregados pela aplicação ● com.sun.star.text.GlobalSettings – gerencia visualização e impressão William Colen - http://broffice.org 6
  • 7. Extensões para BrOffice.org ● Pacote .OXT ● description.xml ● Identificador ● Versão ● Atualizações William Colen - http://broffice.org 7
  • 8. Preparando o ambiente ● Requisitos ● BrOffice.org - http://broffice.org ● JDK da Sun - http://java.sun.com - ou OpenJDK - http://openjdk.java.net ● OpenOffice.org Software Development Kit (SDK) - http://download.openoffice.org/sdk ● Java IDE – sugestão: NetBeans 3.5.x com plug-in OpenOffice.org API for NetBeans William Colen - http://broffice.org 8
  • 9. Configurando Java no BrOffice.org ● No BrOffice.org, acessar Ferramentas >> Opções... ● No painel esquerdo acessar BrOffice.org >> Java ● Siga as instruções para adicionar uma JRE William Colen - http://broffice.org 9
  • 10. Instalando o OOo API Plug-in no NetBeans ● Até setembro de 2009 a versão disponível, a 2.0.4, só funcionava no NetBeans 3.5.1. ● Para instalar, no NetBeans siga por Tools >> Plugins e selecione o OpenOffice.org API Plugin na aba Available Plugins. Pressione Install William Colen - http://broffice.org 10
  • 11. Configurando o OOo API Plug-in no NetBeans ● As únicas configurações necessárias são os caminhos para o OpenOffice.org e OpenOffice.org SDK. Siga por Tools >> Options >> Miscellaneous >> OOo API plugin William Colen - http://broffice.org 11
  • 12. Exemplo de componente: revisor de textos ● Estende as capacidades de revisão do BrOffice.org ● Pode ser um revisor ortográfico (verifica a grafia) ou gramatical (verifica a sintaxe) ● Deve implementar a API Linguistic. Para verificadores que dependem da sintaxe usar a interface com.sun.star.linguistic2.XProofreader ● Requer um arquivo de configuração Linguistic.xcu ● Exemplo: criar um revisor que marca a frase “BrOffice.org é bom” como errada e sugere usar “BrOffice.org é o melhor”. Nota: revisores ortográficos em geral são implementados usando dicionários. Veja como aqui: http://wiki.services.openoffice.org/wiki/Extension_Dictionaries William Colen - http://broffice.org 12
  • 13. Exemplo de componente: revisor de textos Crie um novo projeto OpenOffice.org >> OpenOffice.org component usando o Wizard do NetBeans William Colen - http://broffice.org 13
  • 14. Exemplo de componente: revisor de textos Crie um novo projeto OpenOffice.org >> OpenOffice.org component usando o Wizard do NetBeans William Colen - http://broffice.org 14
  • 15. Exemplo de componente: revisor de textos Defina o serviço com.sun.star.linguistic2.Proofreader clicando em Add Service/Interface. Clique em Finish. William Colen - http://broffice.org 15
  • 16. Exemplo de componente: revisor de textos O novo projeto será criado. Vamos agora alterar o template de acordo com nossas necessidades. William Colen - http://broffice.org 16
  • 17. Exemplo de componente: revisor de textos Primeiro configuramos as propriedades da extensão. Vamos criar os arquivos necessários para a descrição. Os nomes dos arquivos não são importantes: ● Description_enUS.txt – 'Sample proofreader that search for “BrOffice.org é bom” and suggest to use “BrOffice.org é o melhor”.' ● Description_ptBR.txt – 'Exemplo de revisor que busca “BrOffice.org é bom” e sugere usar “BrOffice.org é o melhor”.' ● License.txt - “BSD” ● broffice.png (42x42) Sugestão: crie estes arquivos em qualquer pasta fora do projeto e deixe o Wizard colocar eles nos locais apropriados William Colen - http://broffice.org 17
  • 18. Exemplo de componente: revisor de textos Clique com o direito no projeto e depois em Properties >> OpenOffice.org >> Display e escolha Current Locale “en”. Preencha os campos do Description. William Colen - http://broffice.org 18
  • 19. Exemplo de componente: revisor de textos Em seguida configure para pt-BR William Colen - http://broffice.org 19
  • 20. Exemplo de componente: revisor de textos Arquivos necessários para a descrição da extensão são copiados para o projeto. William Colen - http://broffice.org 20
  • 21. Exemplo de componente: revisor de textos Em Version configure também o identificador (que deve ser único por toda a vida da extensão) e ainda configure eventuais dependências e o site de update. Nota: saiba mais sobre updates aqui: http://wiki.services.openoffice.org/wiki/Documentation/DevGuide/Extensions/Online_Update_of_Extensions William Colen - http://broffice.org 21
  • 22. Exemplo de componente: revisor de textos Com isto temos o description.xml já configurado William Colen - http://broffice.org 22
  • 23. Exemplo de componente: revisor de textos Alterações no template: adicionar o Linguistic.xcu para que o OOo conheça a nova implementação William Colen - http://broffice.org 23
  • 24. Exemplo de componente: revisor de textos Configure o arquivo UNO manifest para que ele conheça a nova extensão Linguistic.xcu William Colen - http://broffice.org 24
  • 25. Exemplo de componente: revisor de textos ● Alguns componentes podem ser instanciados apenas uma vez, é o caso do nosso revisor ● Para facilitar vamos introduzir a classe SingletonFactory que instância o revisor apenas uma vez e mantém a referência para este objeto ● Ocasionalmente temos que trocar o contexto de execução do revisor, por isso vamos alterar a classe MeuExemploDeRevisor, tirando o final da variável m_xContext e introduzindo o método changeContext(XComponentContext xCompContext) para trocar o seu valor. William Colen - http://broffice.org 25
  • 26. Exemplo de componente: revisor de textos Adicione a classe SingletonFactory William Colen - http://broffice.org 26
  • 27. Exemplo de componente: revisor de textos Modifique a classe MeuExemploDeRevisor para usar SingletonFactory William Colen - http://broffice.org 27
  • 28. Exemplo de componente: revisor de textos ● Agora podemos implementar nosso revisor propriamente dito. Primeiro implementamos os métodos da interface XSupportedLocales: ● public com.sun.star.lang.Locale[] getLocales() – Retorna os Locales suportados. Vamos retornar apenas pt-BR ● public boolean hasLocale(com.sun.star.lang.Locale aLocale) – Deveria validar o locale, mas vamos retornar sempre true. William Colen - http://broffice.org 28
  • 29. Exemplo de componente: revisor de textos Implemente os métodos da interface XSupportedLocales William Colen - http://broffice.org 29
  • 30. Exemplo de componente: revisor de textos E finalmente os métodos da interface XProofreader: ● public boolean isSpellChecker() – Vamos fazer do nosso um gramatical, vamos retornar false ● public void ignoreRule(String aRuleIdentifier, com.sun.star.lang.Locale aLocale) throws com.sun.star.lang.IllegalArgumentException – Efetiva ignorar regra. Nós não vamos implementar porque não usaremos sistema de regras ● public void resetIgnoreRules() – Limpar lista de regras ignoradas. William Colen - http://broffice.org 30
  • 31. Exemplo de componente: revisor de textos Continuação da interface XProofreader: ● public com.sun.star.linguistic2.ProofreadingResult doProofreading( String aDocumentIdentifier, // usado se guardar dados do doc String aText, // texto para ser verificado com.sun.star.lang.Locale aLocale, // locale do texto int nStartOfSentencePosition, // onde começar a verif. no text int nSuggestedBehindEndOfSentencePosition, // * com.sun.star.beans.PropertyValue[] aProperties //detalhes locale ) throws com.sun.star.lang.IllegalArgumentException – Método deve verificar o texto. aDocumentIdentifier pode ser usado para guardar numa estrutura de dados o contexto de um dado documento (*) O BrOffice.org sugere onde uma sentença termina, mas muitas vezes o verificador é melhor nessa delimitação do que o BrOffice.org, por isso que ele manda sempre texto extra. William Colen - http://broffice.org 31
  • 32. Exemplo de componente: revisor de textos Implementação do método doProofReading ● Primeiro criamos um objeto ProofreadingResult e inicializamos ele com os dados passados como argumentos de doProofReading ● Caso o texto seja nulo ou vazio, já retornamos ● Caso exista texto, nós aceitamos como fim da sentença o tamanho do texto dado pela API ● Em seguida criamos um verificador bem ingênuo, que busca usando uma expressão regular o texto “BrOffice.org é bom”. Para cada região com esta ocorrência ele cria um objeto SingleProofreadingError e finalmente coloca estes na lista de erros no ProofreadingResult William Colen - http://broffice.org 32
  • 33. Exemplo de componente: revisor de textos Implementação do método doProofReading William Colen - http://broffice.org 33
  • 34. Exemplo de componente: revisor de textos Debugando o componente: inserindo um Breakpoint William Colen - http://broffice.org 34
  • 35. Exemplo de componente: revisor de textos Debugando o componente: inicializando William Colen - http://broffice.org 35
  • 36. Exemplo de componente: revisor de textos Debugando o componente: wizard instala no BrOffice.org William Colen - http://broffice.org 36
  • 37. Exemplo de componente: revisor de textos Debugando o componente: Digite o texto no BrOffice.org Writer William Colen - http://broffice.org 37
  • 38. Exemplo de componente: revisor de textos Debugando o componente: o BrOffice.org chama o método doProofReading William Colen - http://broffice.org 38
  • 39. Exemplo de componente: revisor de textos Debugando o componente: o BrOffice.org sublinha o texto William Colen - http://broffice.org 39
  • 40. Exemplo de componente: revisor de textos Debugando o componente: e ainda fornece um menu de contexto William Colen - http://broffice.org 40
  • 41. Exemplo de componente: revisor de textos Debugando o componente: e finalmente corrige o texto William Colen - http://broffice.org 41
  • 42. Exemplo de componente: revisor de textos Gerando o instalador William Colen - http://broffice.org 42
  • 43. Exemplo de componente: revisor de textos Gerando o instalador William Colen - http://broffice.org 43
  • 44. Exemplo de Calc Add-in: Responde a questão da Vida, Do Universo e Tudo Mais ● Ainda mais fácil que um revisor de texto é criar um Add-in para o Calc ● Não são necessários menus, configurações etc. A nova função estará disponível para uso da mesma forma que as funções nativas. ● Este exemplo envolve um cálculo complexo que responde a questão da Vida, Do Universo e Tudo Mais, conforme descrito na série O Guia do Mochileiro das Galáxias, de Douglas Adams. William Colen - http://broffice.org 44
  • 45. Exemplo de Calc Add-in: Responde a questão da Vida, Do Universo e Tudo Mais Crie um novo projeto usando OpenOffice.org >> OpenOffice.org Calc Add-in William Colen - http://broffice.org 45
  • 46. Exemplo de Calc Add-in: Responde a questão da Vida, Do Universo e Tudo Mais Configure os parâmetros do novo projeto William Colen - http://broffice.org 46
  • 47. Exemplo de Calc Add-in: Responde a questão da Vida, Do Universo e Tudo Mais Configure o nome e tipo da função, descrição e argumentos William Colen - http://broffice.org 47
  • 48. Exemplo de Calc Add-in: Responde a questão da Vida, Do Universo e Tudo Mais Configure o componente clicando com o direito no projeto e depois em Properties >> OpenOffice.org >> Display, como feito no exemplo anterior. William Colen - http://broffice.org 48
  • 49. Exemplo de Calc Add-in: Responde a questão da Vida, Do Universo e Tudo Mais ● Criar um Add-in para o Calc é muito simples. Só é necessário alterar o método que implementa o cálculo da função ● No nosso caso basta então implementar na classe ResolvedorDaVidaUniversoETudoMaisImpl o método public int answerToLifeTheUniverseAndEverything(int magicalNumber) William Colen - http://broffice.org 49
  • 50. Exemplo de Calc Add-in: Responde a questão da Vida, Do Universo e Tudo Mais Implementação do método answerToLifeTheUniverseAndEverything William Colen - http://broffice.org 50
  • 51. Exemplo de Calc Add-in: Responde a questão da Vida, Do Universo e Tudo Mais Estamos prontos para executar William Colen - http://broffice.org 51
  • 52. Exemplo de Calc Add-in: Responde a questão da Vida, Do Universo e Tudo Mais Como especificado, a função está na categoria Suplementos William Colen - http://broffice.org 52
  • 53. Exemplo de Calc Add-in: Responde a questão da Vida, Do Universo e Tudo Mais William Colen - http://broffice.org 53
  • 54. Exemplo de Calc Add-in: Responde a questão da Vida, Do Universo e Tudo Mais A função está pronta para uso em planilhas. William Colen - http://broffice.org 54
  • 55. Exemplo de Add-on: Tradutor ● Adiciona uma nova característica ao BrOffice.org ● Vamos trabalhar apenas com documentos de texto (Writer) simples ● Usuário seleciona um texto e executa o comando de traduzir. Uma janela é aberta e o usuário seleciona o idioma de origem e o de destino. O texto selecionado é substituído pela versão traduzida. ● Para traduzir vamos usar o Google Translate, através da API fornecida pelo projeto Google-API-Translate-Java – distribuído sob licença LGPL e disponível no site http://code.google.com/p/google-api-translate-java William Colen - http://broffice.org 55
  • 56. Exemplo de Add-on: Tradutor Crie um novo projeto usando OpenOffice.org >> OpenOffice.org Add-on William Colen - http://broffice.org 56
  • 57. Exemplo de Add-on: Tradutor Configure os parâmetros do novo projeto William Colen - http://broffice.org 57
  • 58. Exemplo de Add-on: Tradutor Configure as funções suportadas pelo Add-On. Coloque a função principal e eventuais chamadas para configurações. William Colen - http://broffice.org 58
  • 59. Exemplo de Add-on: Tradutor Configure o menu, dando um nome padrão e localizações desejadas. Configure o menu para aparecer apenas no BrOo Writer. William Colen - http://broffice.org 59
  • 60. Exemplo de Add-on: Tradutor Configure também a barra de botões. Configure a barra para aparecer apenas no BrOo Writer. Aperte Finish. William Colen - http://broffice.org 60
  • 61. Exemplo de Add-on: Tradutor Configure o componente clicando com o direito no projeto e depois em Properties >> OpenOffice.org >> Display como feito no exemplo anterior. William Colen - http://broffice.org 61
  • 62. Exemplo de Add-on: Tradutor O Wizard já criou o Addons.xcu William Colen - http://broffice.org 62
  • 63. Exemplo de Add-on: Tradutor e o ProtocolHandler.xcu William Colen - http://broffice.org 63
  • 64. Exemplo de Add-on: Tradutor ● Addons.xcu ● Configura os menus e as barras de botões do Add-on. ● ProtocolHandler.xcu ● Direciona todos os comandos com namespace “org.broffice.addons.meutradutorusandogoogletranslate.meutradu torusandogoogletranslate:*” para o Add-on William Colen - http://broffice.org 64
  • 65. Exemplo de Add-on: Tradutor Vamos adicionar a biblioteca do google-api-translate-java-0.8 ao projeto William Colen - http://broffice.org 65
  • 66. Exemplo de Add-on: Tradutor ● Agora criamos as seguintes classes para acessar a API do Google Translate ● GoogleTranslate – Singleton para gerenciar o acesso – String Traduzir(String texto, String origem, String destino) – public String[] getIdiomas() – public short getOrigemPadrao() – public short getDestinoPadrao() ● TradutorDeTexto – Classe que conhece o documento e o GoogleTranslate – private XTextRange getRegiaoSelecionada() – private String getTextoSelecionado(XTextRange regiaoSelecionada) – private void setTextoSelecionado(XTextRange regiaoSelecionada, String texto) – public void traduzTextoSelecionado(String origem, String destino) William Colen - http://broffice.org 66
  • 67. Exemplo de Add-on: Tradutor GoogleTranslate – Singleton para gerenciar o acesso William Colen - http://broffice.org 67
  • 68. Exemplo de Add-on: Tradutor TradutorDeTexto – Classe que conhece o documento e o GoogleTranslate William Colen - http://broffice.org 68
  • 69. Exemplo de Add-on: Tradutor ● Vamos agora criar uma caixa de dialogo para pedir ao usuário que ele escolha o idioma de origem e o de destino ● Interfaces gráficas são feitas usando UNO e uma implementação do AWT próprio do BrOo. O código é um pouco diferente já que não podemos criar objetos UNO como criamos objetos no Java. Devemos usar o método XmultiServiceFactory.createInstance para criar os componentes. ● DialogoIdioma – public DialogoIdioma(XComponentContext xCompContext) – construtor que recebe o contexto de execução, exibe a janela – public String getOrigem() - retorna o idioma de origem selecionado – public String getDestino() - retorna o idioma de origem selecionado ● I18nLabelsLoader – classe auxiliar para facilitar a internacionalização da caixa de diálogo. William Colen - http://broffice.org 69
  • 70. Exemplo de Add-on: Tradutor DialogoIdioma - pede para o usuário o idioma de origem e de destino William Colen - http://broffice.org 70
  • 71. Exemplo de Add-on: Tradutor I18nLabelsLoader – classe auxiliar para facilitar a internacionalização da caixa de diálogo. William Colen - http://broffice.org 71
  • 72. Exemplo de Add-on: Tradutor ● Vamos finalmente integrar tudo na classe MeuTradutorUsandoGoogleTranslate. ● Esta classe aparenta ser bem complexa, mas grande parte dela serve apenas para o sistemas de Add-ons funcionar. Alguns métodos podem ser alterados para personalizar algum comportamento do Add-on, mas não é o nosso caso neste exemplo. ● O único método que precisamos alterar é o dispatch ● Todos os eventos são direcionados para o dispatch. O que temos que fazer é tratar quando for o evento Translate. William Colen - http://broffice.org 72
  • 73. Exemplo de Add-on: Tradutor Método dispatch cria uma nova thread para tratar o evento William Colen - http://broffice.org 73
  • 74. Exemplo de Add-on: Tradutor A thread chama DialogoIdioma para pegar as opções e em seguida chama TradutorDeTexto para efetivar a tradução William Colen - http://broffice.org 74
  • 75. Exemplo de Add-on: Tradutor Estamos prontos para executar! Digite o texto, selecione e chame Translate William Colen - http://broffice.org 75
  • 76. Exemplo de Add-on: Tradutor O texto foi traduzido. Você pode ainda chamar novamente trocando o idioma: William Colen - http://broffice.org 76
  • 77. Exemplo de Add-on: Tradutor E o texto foi traduzido novamente. William Colen - http://broffice.org 77
  • 78. Referências OpenOffice.org Developer's Guide - http://wiki.services.openoffice.org/wiki/Documentation/DevGuide/OpenOffice.org_Developers_Guide Extensions - http://wiki.services.openoffice.org/wiki/Documentation/DevGuide/Extensions/Extensions OpenOffice.org API - http://api.openoffice.org Integração NetBeans - http://wiki.services.openoffice.org/wiki/OpenOffice_NetBeans_Integration William Colen - http://broffice.org 78
  • 79. Encontro Nacional BrOffice.org William Colen - http://broffice.org 79
  • 80. Obrigado pela oportunidade e pela atenção! http://cogroo.sourceforge.net William Colen - http://broffice.org 80