Programabilidade
do [Link]
22 de julho de 2010
William D. Colen M. Silva
Mini Bio
● Corretor Gramatical CoGrOO – [Link] (2004 –
presente) – SpeechOO (2010 - presente)
● Grad. Eng. Computação Poli/USP (2006)
● Indústria de software (2005 – 07/2009)
● Centro de Competência em Software Livre
(08/2009 – presente)
● Mestrado em Ciência da Computação IME
(08/2009 – ?)
● Diversas contribuições em SL, e ativista na promoção
do desenvolvimento em SL
● Palestras e cursos: Latinoware (2006), FISL (2009),
JustJava (2009), ENBRO (2010), Fórum SL SERPRO
Voo Livre 2010 - Desenvolvimento
Agenda
Motivação
UNO
Extensões para o [Link]
Desenvolvimento de extensões em Java
Requisitos e preparação do ambiente
Exemplos passo a passo
Onde obter mais informações e ajuda
William Colen - [Link] 4
Agenda
Motivação
UNO
Extensões para o [Link]
Desenvolvimento de extensões em Java
Requisitos e preparação do ambiente
Exemplos passo a passo
Onde obter mais informações e ajuda
William Colen - [Link] 5
Motivação
● Popularidade crescente do padrão ODF e
[Link]
● Formato padrão aberto
– ODF = Open Document Format for Office Applications
– OASIS e ISO/IEC 26300
● Cada vez mais adotado pela administração pública
● Multiplataforma
● Solaris™/ OpenSolaris, Linux, MS Windows, Mac OS, ...
William Colen - [Link] 6
Motivação
● Demanda por personalizações e integrações no
[Link]
● Customizações do [Link]
– Alterações da interface de usuário
– Alterar e interceptar comandos
● Novas funcionalidades
– Calc Add-ins, Add-ons, Filtros
● Integrar a ferramenta com sistemas já existentes
– Criar, alterar ou converter documentos ODF
● Suporte da comunidade:
● Baixa curva de aprendizado
● Tarefas bem sucedidas mais cedo
William Colen - [Link] 7
Onde procurar e para onde enviar extensões?
William Colen - [Link] 8
Agenda
Motivação
UNO
Extensões para o [Link]
Desenvolvimento de extensões em Java
Requisitos e preparação do ambiente
Exemplos passo a passo
Onde obter mais informações e ajuda
William Colen - [Link] 9
UNO rompe barreiras
William Colen - [Link] 10
UNO - Universal Network Objects
● Tecnologia de componentes básica do [Link]
● Abstração de diferentes linguagens, tecnologias, plataformas e
arquiteturas de rede.
● Disponível em Linux, Solaris, Windows, Power PC,
FreeBSD e Mac OS X
● Linguagens suportadas: Java, C++, [Link] Basic,
Python e ainda MS Com, .NET CLI e linguagens script
como Javascript, Beanshell e Jython
● Tecnologia para conectar a uma instância local ou remota
● Manipular os diversos documentos suportados pelo
[Link]
● Extensões da ferramenta
William Colen - [Link] 11
Agenda
Motivação
UNO
Extensões para o [Link]
Desenvolvimento de extensões em Java
Requisitos e preparação do ambiente
Exemplos passo a passo
Onde obter mais informações e ajuda
William Colen - [Link] 12
Extensões para o [Link]
● Complementam as funcionalidades do [Link]
● .oxt
● Pacote zip com componentes UNO, macros ou sem nenhum código
● xcu/xcs (configuração), templates, galerias
● Fácil instalação
● Gerenciador de extensões
● Integração com o sistema operacional
– Clique duplo com o mouse, “Abrir com...”
● Versionamento
● Controle de dependência
● Versão mínima do [Link] para instalar a extensão
13
Extensões para o [Link]
● Atualizações online
● Sistema de licença (EULA)
● Repositório de extensões
● [Link]
● Integração inteligente com o [Link]
● Exs.: Integração da página de opções com o [Link]
● Integração da documentação
14
Extensões para o [Link]
15
Arquitetura de uma extensão
16
Programabilidade do [Link]
[Link]
App Extensão
Externo .OXT
Client App Components
Implementam
interfaces para
estender
- Extrair dados de uma planilha funcionalidades
Add-ons Add-ins
- SpeechOO - CoGrOO
Implementam - Nova fórmula no Calc
novas
Funcionalidades
William Colen - [Link] 17
Agenda
Motivação
UNO
Extensões para o [Link]
Desenvolvimento de extensões em Java
Requisitos e preparação do ambiente
Exemplos passo a passo
Onde obter mais informações e ajuda
William Colen - [Link] 18
Plug-in [Link] para o NetBeans
● Novo assistentes de projetos para o NetBeans
● Assistentes para acelerar desenvolvimento
● Suporte para UNOIDL e arquivos de configuração
● Ajuda API sensível ao contexto
● Funcionalidade autocompletar
● Suporte de depuração
● Biblioteca do [Link] já pré-configurada
● Atualizações automatizadas on-line
William Colen - [Link] 19
Programabilidade do [Link]
[Link]
App Extensão
Externo .OXT
Client App Components
Implementam
interfaces para
estender
- Extrair dados de uma planilha funcionalidades
Add-ons Add-ins
- SpeechOO - CoGrOO
Implementam - Nova fórmula no Calc
novas
Funcionalidades
William Colen - [Link] 20
Plug-in [Link] para o NetBeans
1) Projeto aplicativo cliente do UNO
● Essencialmente um projeto normal Java™ 2, Standard
Edition (J2SE™ platform)
● Mas com um empacotamento especial:
– Colinha para inicializar o UNO e carregar o [Link]
● Busca o [Link] padrão, contrói um classloader especial
– Cria automaticamente o manifest
● Auxilia a obtenção do contexto de execução
● [Link] inicializado sob demanda
● Conexão através de pipes nomeados
● Caso de uso tipico – controlar remotamente o [Link]
– Conversão de documentos, extração de dados, criação de documentos ...
William Colen - [Link] 21
Plug-in [Link] para o NetBeans
● Características comuns para todos tipos de projetos
componente UNO
● Nova biblioteca J2SE™
● Esqueleto de código
● Totalmente funcional, construível desde o inicio
● Empacotamento especial
● Office extension packages (.oxt)
● Suporte depuração
● Atalho para instalação no [Link]
● Diversas propriedades de projeto
– ID da extensão, dependências e licença
William Colen - [Link] 22
Programabilidade do [Link]
[Link]
App Extensão
Externo .OXT
Client App Components
Implementam
interfaces para
estender
- Extrair dados de uma planilha funcionalidades
Add-ons Add-ins
- SpeechOO - CoGrOO
Implementam - Nova fórmula no Calc
novas
Funcionalidades
William Colen - [Link] 23
Plug-in [Link] para o NetBeans
2) Projeto Calc Add-in
● Define bem alto nível como criar novas fórmulas Calc
– Abstração da tecnologia
● Suporte a localização
– Nome da função, parâmetros e descrição
● Esqueleto gerado totalmente funcional
– Gera automaticamente código para lidar com as interfaces do Calc
– Métodos já criados com implementação padrão
● Exemplo 1: questão da vida, do Universo, e tudo o mais.
William Colen - [Link] 24
Plug-in [Link] para o NetBeans
3) Projeto componente UNO (Add-in)
● SmartTag, ProofReader, Threasure etc
● Assistente de UNOIDL
– Definição de novos tipos
– Busca por tipos pré definidos
● Reuso
● Implementação de serviços e/ou interfaces existentes
● Esqueleto de código totalmente funcional
– Gera código até para interfaces específicas
– Implementação padrão para métodos
● Nova tipo de arquivo – Java UNO Object
– Similar ao assistente de componentes
William Colen - [Link] 25
Programabilidade do [Link]
[Link]
App Extensão
Externo .OXT
Client App Components
Implementam
interfaces para
estender
- Extrair dados de uma planilha funcionalidades
Add-ons Add-ins
- SpeechOO - CoGrOO
Implementam - Nova fórmula no Calc
novas
Funcionalidades
William Colen - [Link] 26
Plug-in [Link] para o NetBeans
4) Assistente de Add-on
● Integração com interface de usuário
● Definições de alto nível para
– Novos comandos
– Menus de primeiro nível, com entradas e sub-menus
– Barra de ferramentas com botões simples
● Suporta localização
● Implementações padrão, mesmo para interfaces específicas
– SPI: [Link]
● Exemplo 2: Tradutor
William Colen - [Link] 27
Agenda
Motivação
UNO
Extensões para o [Link]
Desenvolvimento de extensões em Java
Requisitos e preparação do ambiente
Exemplos passo a passo
Onde obter mais informações e ajuda
William Colen - [Link] 28
Preparando o ambiente
● Requisitos
● [Link] - [Link]
● JDK da Sun - [Link] - ou OpenJDK - [Link]
● [Link] Software Development Kit (SDK) -
[Link]
● Java IDE – sugestão: NetBeans 3.8 com plug-in
[Link] API for NetBeans
William Colen - [Link] 29
Configurando Java no [Link]
● No [Link], acessar Ferramentas >> Opções...
● No painel esquerdo acessar [Link] >> Java
● Siga as instruções para adicionar uma JRE
William Colen - [Link] 30
Instalando o OOo API Plug-in no NetBeans
Para instalar, no NetBeans siga por Tools >> Plugins e selecione o
[Link] API Plugin na aba Available Plugins. Pressione Install
William Colen - [Link] 31
Agenda
Motivação
UNO
Extensões para o [Link]
Desenvolvimento de extensões em Java
Requisitos e preparação do ambiente
Exemplos passo a passo
Onde obter mais informações e ajuda
William Colen - [Link] 32
Exemplo de Calc Add-in: Responde a questão da Vida,
Do Universo e Tudo Mais
● Criação de uma nova função para o Calc
● Cálculo muito complexo
● Responde a questão da Vida, Do Universo e Tudo Mais
(O Guia do Mochileiro das Galáxias, de Douglas Adams)
William Colen - [Link] 33
Exemplo de Calc Add-in: Responde a questão da Vida,
Do Universo e Tudo Mais
Crie um novo projeto usando [Link] >> [Link] Calc
Add-in
William Colen - [Link] 34
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 - [Link] 35
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 - [Link] 36
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 >> [Link] >> Display, como feito no exemplo
anterior.
William Colen - [Link] 37
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 - [Link] 38
Exemplo de Calc Add-in: Responde a questão da Vida,
Do Universo e Tudo Mais
Implementação do método answerToLifeTheUniverseAndEverything
William Colen - [Link] 39
Exemplo de Calc Add-in: Responde a questão da Vida,
Do Universo e Tudo Mais
Estamos prontos para executar
William Colen - [Link] 40
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 - [Link] 41
Exemplo de Calc Add-in: Responde a questão da Vida,
Do Universo e Tudo Mais
William Colen - [Link] 42
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 - [Link] 43
Exemplo de Add-on: Tradutor
● Adiciona uma nova característica ao [Link]
● 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
[Link]
William Colen - [Link] 44
Exemplo de Add-on: Tradutor
Crie um novo projeto usando [Link] >> [Link] Add-on
William Colen - [Link] 45
Exemplo de Add-on: Tradutor
Configure os parâmetros do novo projeto
William Colen - [Link] 46
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 - [Link] 47
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 - [Link] 48
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 - [Link] 49
Exemplo de Add-on: Tradutor
Configure o componente clicando com o direito no projeto e depois em
Properties >> [Link] >> Display como feito no exemplo anterior.
William Colen - [Link] 50
Exemplo de Add-on: Tradutor
O Wizard já criou o [Link]
William Colen - [Link] 51
Exemplo de Add-on: Tradutor
e o [Link]
William Colen - [Link] 52
Exemplo de Add-on: Tradutor
● [Link]
● Configura os menus e as barras de botões do Add-on.
● [Link]
● Direciona todos os comandos com namespace
“[Link]
torusandogoogletranslate:*” para o Add-on
William Colen - [Link] 53
Exemplo de Add-on: Tradutor
Vamos adicionar a biblioteca do google-api-translate-java-0.8 ao projeto
William Colen - [Link] 54
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 - [Link] 55
Exemplo de Add-on: Tradutor
GoogleTranslate – Singleton para gerenciar o acesso
William Colen - [Link] 56
Exemplo de Add-on: Tradutor
TradutorDeTexto – Classe que conhece o documento e o
GoogleTranslate
William Colen - [Link] 57
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
[Link] 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 - [Link] 58
Exemplo de Add-on: Tradutor
DialogoIdioma - pede para o usuário o idioma de origem e de destino
William Colen - [Link] 59
Exemplo de Add-on: Tradutor
I18nLabelsLoader – classe auxiliar para facilitar a internacionalização
da caixa de diálogo.
William Colen - [Link] 60
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 - [Link] 61
Exemplo de Add-on: Tradutor
Método dispatch cria uma nova thread para tratar o evento
William Colen - [Link] 62
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 - [Link] 63
Exemplo de Add-on: Tradutor
Estamos prontos para executar! Digite o texto, selecione e chame
Translate
William Colen - [Link] 64
Exemplo de Add-on: Tradutor
O texto foi traduzido. Você pode ainda chamar novamente trocando o
idioma:
William Colen - [Link] 65
Exemplo de Add-on: Tradutor
E o texto foi traduzido novamente.
William Colen - [Link] 66
Agenda
Motivação
UNO
Extensões para o [Link]
Desenvolvimento de extensões em Java
Requisitos e preparação do ambiente
Exemplos passo a passo
Onde obter mais informações e ajuda
William Colen - [Link] 67
Mais informações
● Dev Br: dev@[Link]
● API project
● home page: [Link]
● mailing list: dev@[Link]
● IRC (freenode): #ooo-api for all API relevant topics
● Extensions project
● home page: [Link]
● mailing list: dev@[Link]
● IRC (freenode): #ooo-ext for general extension topics
● [Link] Wiki
● [Link] API plugin for NetBeans
– [Link]
● Developer's guide
– [Link]
OpenOffice.org_Developers_Guide
William Colen - [Link] 68
Referências
Alguns exemplos de extensões
[Link]
[Link] Developer's Guide -
[Link]
Extensions -
[Link]
[Link] API -
[Link]
Integração NetBeans -
[Link]
Apresentação Juergen Schmidt no Enbro IV:
[Link]
William Colen - [Link] 69
Obrigado pela oportunidade e pela atenção!
[Link]
[Link]
William Colen - [Link] 70