Gravando Funções XPath Customizadas

Antes de incluir determinados tipos de informações de modelo em um relatório (arquivo RPTDESIGN), é necessário gravar uma função XPath customizada para extrair as informações dos modelos de destino.
Antes de Iniciar
Pré-requisito: Para concluir esta tarefa, é necessário estar familiarizado com o desenvolvimento de plug-in no Ambiente de Desenvolvimento de Plug-in do Eclipse e com a API de UML2.
Por Que e Quando Desempenhar Esta Tarefa
Para gravar uma função XPath customizada:
  1. Crie um novo projeto de plug-in:
    1. Na perspectiva de Desenvolvimento de Plug-in, clique em Arquivo > Novo > Outro, expanda Desenvolvimento de Plug-in, selecione Projeto de Plug-in e clique em Avançar.
    2. Digite um ID de plug-in como com.ibm.field.birt.xpath_extensions e, em seguida, clique em Avançar e Concluir. O plug-in é incluído na visualização Package Explorer, e as informações sobre o plug-in são exibidas na visualização Editor do Manifesto de Plug-in na página Visão Geral.
  2. Estenda o ponto de extensão org.eclipse.jet.xpathFunctions.
    1. Na página Visão Geral, clique na guia Extensões, em seguida, clique em Incluir.
    2. Desmarque a caixa de opção Mostrar somente os pontos de extensão dos plug-ins necessários.
    3. No campo Filtro do Ponto de Extensão, digite *.jet e na lista de extensões dê um clique duplo em org.eclipse.jet.xpathFunctions.
    4. Para confirmar que você deseja incluir o plug-in na lista de dependências de plug-in, clique em Sim.
    5. Clique na guia MANIFEST.MF e inclua org.eclipse.uml2.uml na lista Require_Bundle para que o plug-in tenha visibilidade para a API de UML. O código para a lista deverá ser semelhante ao seguinte:
      Require_Bundle: org.eclipse.ui,
        org.eclipse.core.runtime,
        org.eclipse.uml2.uml,
        org.eclipse.jet
    6. Clique na guia plugin.xml e modifique a definição <function> para definir a função customizada. Por exemplo, se você estiver definindo uma função chamada SlotValue, que possua dois argumentos, e seja implementada na classecom.ibm.field.birt.xpath_extensions.SlotValue, o código deverá ser semelhante a este:
      <function
           implementation="com.ibm.field.birt.xpath_extensions.SlotValues"
           maxArgs="2"
           minArgs="2"
           name="slotValue">
      </function>
    7. Clique em Arquivo > Salvar.
  3. Crie um shell de código e vincule-o ao plug-in:
    1. Na visualização Package Explorer, dê um clique com o botão direito do mouse no novo projeto de plug-in; Novo > Classe.
    2. No campo Pacote, especifique o nome do projeto de plug-in.
    3. No campo Nome, digite um tipo de nome para a classe. Utilize o mesmo nome que foi atribuído à nova função. Por exemplo, para a função definida na etapa 2, o nome seria SlotValue.
    4. Para incluir uma interface, clique em Incluir.
    5. Na caixa de diálogo Nova Classe Java, no campo Escolher Interfaces, digite XPathFunction; em seguida, na lista de itens correspondentes, selecione XPathFunction - org.eclipse.jet.xpath, clique em OK e clique em Concluir.
  4. Inclua o código no arquivo Java para a função XPath a fim de que realize a tarefa desejada e salve o arquivo.

    Por exemplo, se você quiser que a função SlotValue itere por meio dos nós que resultam do primeiro argumento (uma expressão XPath) e quando ela localizar uma especificação de instância, para retornar o valor do slot que o argumento slotname especifica ao chamar a função getStringValue, deverá ser gravado o seguinte código:

    package com.ibm.field.birt.xpath_extensions;
    
    import java.util.Iterator;
    import java.util.List;
    
    import org.eclipse.jet.xpath.NodeSet;
    import org.eclipse.jet.xpath.XPathFunction;
    import org.eclipse.uml2.uml.InstanceSpecification;
    import org.eclipse.uml2.uml.Slot;
    import org.eclipse.uml2.uml.ValueSpecification;
    
    public class SlotValue implements XPathFunction {
    	
    	public String getStringValue(InstanceSpecification ia, String slotname) {
    		List slots = ia.getSlots();
    		for (Iterator iterator = slots.iterator(); iterator.hasNext();) {
    			Slot slot = (Slot) iterator.next();
    			String definingFeatureName = slot.getDefiningFeature().getName();			
    			if (definingFeatureName.equals(slotname)) {
    				List values = slot.getValues();
    				for (Iterator iterator2 = values.iterator(); iterator2
    						.hasNext();) {
    					ValueSpecification value = (ValueSpecification) iterator2.next();
    					return value.stringValue();
    				}
    			}
    		}
    return null;
    	}
    	
    	public Object evaluate(List args) {
    		Object obj = args.get(0);
    		String slotname = (String) args.get(1);
    		if (obj instanceof NodeSet) {
    			NodeSet ns = (NodeSet) obj;
    			for (Iterator iterator = ns.iterator(); iterator.hasNext();) {
    				Object item = (Object) iterator.next();
    				if (item instanceof InstanceSpecification){
    					InstanceSpecification ispec = (InstanceSpecification) item;
    					if ((slotname != null)&&(slotname.length()>0))
    						return getStringValue(ispec,slotname);
    				}
    			}
    		}
    return null;
    	}
    }
  5. Crie um novo projeto de plug-in de recurso:
    1. Clique em File > Novo > Outro, expanda Desenvolvimento de Plug-in, selecione Projeto de Recurso e clique em Avançar.
    2. No campo Nome do Projeto, digite um nome de projeto e clique em Avançar. É sempre útil atribuir um novo nome de recurso que seja semelhante ao nome do plug-in; para o plug-in com.ibm.field.birt.xpath_extensions, você pode escolher o com.ibm.field.birt.xpath_extensions.feature.
    3. Para empacotar o plug-in com o recurso, selecione a caixa de opção para o plug-in que você criou na etapa 1 e clique em Concluir. O recurso é incluído na visualização Package Explorer, e as informações sobre o recurso são exibidas na visualização Editor do Manifesto de Recurso na página Visão Geral.
    4. Na página Visão Geral, no campo Nome, digite um nome de recurso como Recurso de Extensões XPath.
    5. Na página Visão Geral, clique no link para Assistente de Exportação.
    6. Selecione Arquivo de Arquivamento, especifique um local e um nome para o arquivo, como xpath_extensions.zip e clique em Concluir.
    Nota: É possível utilizar este plug-in de recurso para vários projetos da função XPath customizada.
  6. Importe o novo plug-in para a instância do Eclipse em que você está criando design de relatórios:
    1. Extraia o arquivo de arquivamento para um diretório como C:/temp/xpath_extensions.
    2. No Eclipse, clique em Ajuda > Atualizações de Software > Localizar e Instalar.
    3. No assistente Instalar/Atualizar, clique em Procurar Novos Recursos para Instalação e clique em Avançar.
    4. Clique em Novo Site Local, selecione a pasta que contém o recurso e o plug-in, clique em OK e clique em Concluir.
    5. Na caixa de diálogo Resultados da Procura, selecione seu recurso e clique em Avançar.
    6. Se você concordar com os termos do contrato de licença, selecione Eu aceito os termos no contrato de licença, clique em Avançar e clique em Concluir.
    7. Ao receber um prompt para reiniciar seu computador, clique em Sim.
Resultados
Agora, é possível utilizar a nova extensão XPath nos designs de relatório.
Nota: Os usuários de designs de relatório também devem importar o novo recurso antes de poderem gerar relatórios a partir de designs de relatório que dependam das funções XPath customizadas. O tópico "Importando Funções XPath Customizadas" fornece informações gerais, mas talvez você queira fornecer a documentação customizada aos usuários, que acompanha o arquivo RPTDESIGN que explica onde os usuários podem obter o recurso e como podem utilizá-los.
Tarefas relacionadas
Importando Funções XPath Customizadas
Referências relacionadas
Dicas para fazer o design de relatórios de modelo

Feedback