WebSphere Message Broker, Versão 8.0.0.5 Sistemas operacionais: AIX, HP-Itanium, Linux, Solaris, Windows, z/OS

Consulte as informações sobre a versão mais recente do produto em IBM Integration Bus, Versão 9.0

Exemplo de Código Definido pelo Usuário para Manipular Notificações de Alterações

Use o código Java™ de exemplo para criar um editor definido pelo usuário que atualiza o valor do parâmetro quando houver mudanças em outros parâmetros padrão.

O código de exemplo a seguir mostra como criar um código do editor definido pelo usuário para manipular notificações de mudanças de outros parâmetros padrão. O editor definido pelo usuário, designado ao parâmetro padrão months, exibe uma lista de meses do ano, um ou mais dos quais o usuário padrão pode selecionar usando caixas de seleção. Um segundo parâmetro padrão, uncheck month, exibe uma lista dos meses do ano em uma lista suspensa. Quando o usuário padrão seleciona um mês no parâmetro uncheck month, o código do editor definido pelo usuário recebe uma notificação de mudança de uncheck month, informando que o mês será limpo na lista de meses do editor definido pelo usuário.

A classe MyEditor controla a função do editor. A classe MyComposite controla a aparência do editor usando métodos e objetos do kit de ferramentas do SWT.

O exemplo supõe que as seguintes etapas estejam concluídas:
  1. Os parâmetros padrão, months e uncheck month, são incluídos no padrão definido pelo usuário. Para incluir parâmetros padrão, consulte Definindo a Interface Com o Usuário.
  2. Um tipo enumerado será criado, contendo os meses do ano. O tipo enumerado é designado ao parâmetro padrão, uncheck month. Para usar tipos enumerados, consulte Utilizando Valores Enumerados para Parâmetros Padrão.
  3. O parâmetro padrão, months, é configurado para usar um editor definido pelo usuário; consulte Definindo a Interface Com o Usuário.
  4. O editor definido pelo usuário para o parâmetro padrão, months, é configurado concluindo as seguintes etapas. Para obter mais informações sobre como configurar um editor definido pelo usuário, consulte Configurando um Editor Definido pelo Usuário.
    1. A classe MyEditor é inserida na janela Configurar Editor Definido pelo Usuário, no campo Nome de Classe.
    2. O parâmetro padrão, uncheck month, é selecionado na janela Configurar Editor Definido pelo Usuário, no campo Selecionar os Parâmetros Visíveis Que Enviarão Notificações de Mudanças para o Editor Definido pelo Usuário.
Classe MyEditor
A classe MyEditor estende a classe BasePatternPropertyEditor. Uma instância da classe MyEditor é criada automaticamente quando o usuário padrão abre o editor de instância padrão.
  1. O método configureEditor() é chamado automaticamente depois que a classe MyEditor é criada.
  2. O método createControls() é chamado para criar a interface com o usuário para o editor. Os controles são definidos na classe MyComposite.
  3. O método isValid() é chamado automaticamente depois que o método valueChanged() é chamado. Neste exemplo, isValid() verifica o valor atual do parâmetro padrão e retorna uma mensagem de erro quando nenhum valor é selecionado. A mensagem de erro é exibida para o usuário padrão no editor de instância padrão. Se o valor do parâmetro for válido, o método retornará null.
  4. Os métodos setValue(), getValue() e setEnabled() são definidos na classe MyComposite:
    1. O método setValue() configura o valor inicial no editor definido pelo usuário.
    2. O método getValue() retorna o valor atual do parâmetro padrão para o editor de instância padrão.
    3. O método setEnabled() é chamado quando o parâmetro padrão é ativado ou desativado por uma expressão XPath.
  5. O método notifyChanged() chama o método uncheckMonth() da classe MyComposite, passando o valor do parâmetro, uncheck month. O método notifyChanged() também obtém o ID do parâmetro padrão atualizado, mas não é usado neste exemplo.
package com.your.company.domain.MyPattern.code;

import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;

import com.ibm.broker.config.appdev.patterns.ui.BasePatternPropertyEditor;
import com.ibm.broker.config.appdev.patterns.ui.PatternPropertyEditorSite;

public class MyEditor extends BasePatternPropertyEditor {
   private MyComposite composite;
	
   @Override
   public void configureEditor(PatternPropertyEditorSite site, boolean required, String configurationValues) {
      super.configureEditor(site, required, configurationValues);
   }

   @Override
   public void createControls(Object parent) {
      Composite parentComposite = (Composite) parent;
      PatternPropertyEditorSite site = getSite();
      composite = new MyComposite(parentComposite, SWT.NONE, site);
   }

   @Override
   public String isValid() {
      String selection = getValue();
      if (selection != null) {
         return null;
      }
      return "Nothing currently selected..!";
   }
	
   @Override
   public void setValue(String value) {
      if (value != null) {
         composite.setValue(value);
      }
   }
	
   @Override
   public String getValue() {
      return composite.getValue();
   }
	
   @Override
   public void setEnabled(boolean enabled) {
      composite.setEnabled(enabled);
   }
	
   @Override
   public void notifyChanged(String parameterId, String value) {
      composite.uncheckMonth(value);
   }
}
Classe MyComposite
A classe MyComposite cria os controles da interface com o usuário para o editor definido pelo usuário. A classe MyComposite estende a classe Composite do kit de ferramentas do SWT.
  1. O layout dos controles é configurado e um novo controle de tabela é criado.
  2. O método valueChanged() é usado em um listener no controle de tabela. Isso garante que quando os valores selecionados na tabela forem alterados, as notificações de mudanças serão enviadas para qualquer editor ou expressão XPath que use o valor desse parâmetro.
  3. Um item de tabela é criado para cada mês do ano.
  4. Os métodos setValue(), getValue() e setEnabled() são definidos na classe MyComposite, mas são chamados a partir da classe MyEditor:
    1. O método setValue() obtém o valor do parâmetro padrão e atualiza o controle de tabela para mostrar os valores selecionados. O valor do parâmetro é armazenado como um documento XML no formato de sequência que contém a lista de meses e as informações sobre se cada mês está selecionado. O método setValue() lê cada mês, se ele estiver selecionado, e atualiza as caixas de seleção na tabela.
    2. O método getValue() recupera os valores atualmente selecionados da tabela no editor definido pelo usuário. A lista de meses e o status da caixa de seleção de cada mês é armazenado em um documento XML, que é salvo como um valor de sequência. Essa sequência é retornada para a classe MyEditor e depois para o editor da instância padrão. A sequência é armazenada como o valor atual do parâmetro.
    3. O método uncheckMonth() obtém o valor do parâmetro, uncheck month, passado da classe MyEditor. O mês é verificado com relação à lista de meses da tabela e quando uma correspondência é encontrada, a caixa de seleção desse mês é desmarcada no editor definido pelo usuário.
    4. O método setEnabled() usa o valor booleano transmitido para ele para ativar ou desativar o controle de tabela.
package com.your.company.domain.MyPattern.code;

import java.io.StringReader;
import java.io.StringWriter;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableItem;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;

import com.ibm.broker.config.appdev.patterns.ui.PatternPropertyEditorSite;

public class MyComposite extends Composite {
   private PatternPropertyEditorSite site;
   private Table table;
	
   public static String[] MONTHS = { 
      "January", "February", "March", "April", "May", "June", "July", 
         "August", "September", "October", "November", "December" };
	
   public MyComposite(Composite parent, int style, final PatternPropertyEditorSite site) {
      super(parent, SWT.NONE);
      this.site = site;
		 		
      GridLayout gridLayout = new GridLayout(1, false);
      setLayout(gridLayout); 		
 		
      setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
 		
      table = new Table(this, SWT.BORDER | SWT.CHECK);
      table.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
      table.setLinesVisible(true);

      table.addSelectionListener(new SelectionAdapter() {
         @Override
         public void widgetSelected(SelectionEvent event) {
            site.valueChanged();
         }
      });

      for (String currentMonth : MONTHS) {
         TableItem currentItem = new TableItem(table, SWT.NONE);
         currentItem.setText(currentMonth);
      }
   }
	
   public void setValue(String value) {
		
      try {

         DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
         DocumentBuilder builder = factory.newDocumentBuilder();
         InputSource inputSource = new InputSource(new StringReader(value));
         Document document = builder.parse(inputSource);
         NodeList listOfMonths = document.getDocumentElement().getChildNodes();
			
         for (int index = 0; index < listOfMonths.getLength(); index++) {
            Node monthNode = listOfMonths.item(index);			
            String monthName = monthNode.getNodeName();
            boolean checked = Boolean.parseBoolean(monthNode.getTextContent());
                
            for (TableItem tableItem : table.getItems()) {
               String itemName = tableItem.getText();
               if (itemName.equals(monthName) == true) {
                  tableItem.setChecked(checked); break;
               }
            }
         }
      } catch (Exception exception) { }
   }

   public String getValue() {
		
      try {
			
         DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
         DocumentBuilder builder = factory.newDocumentBuilder();
         Document document = builder.newDocument();
         Element rootElement = document.createElement("months");
	        
         document.appendChild(rootElement);
            
         for (TableItem currentItem : table.getItems()) {
            String monthName = currentItem.getText();
            boolean isChecked = currentItem.getChecked();
            Element monthElement = document.createElement(monthName);
            monthElement.setTextContent(Boolean.toString(isChecked));
            rootElement.appendChild(monthElement);
         }
            
         TransformerFactory transformerFactory = TransformerFactory.newInstance();
         Transformer transformer = transformerFactory.newTransformer();
         transformer.setOutputProperty(OutputKeys.INDENT, "yes");

         StringWriter stringWriter = new StringWriter();
         StreamResult result = new StreamResult(stringWriter);
         DOMSource source = new DOMSource(document);
         transformer.transform(source, result);
         return stringWriter.toString();
            
      } catch (Exception exception) { }

      return null;
   }
	
   public void uncheckMonth(String monthName) {
      for (TableItem tableItem : table.getItems()) {
         String itemName = tableItem.getText();
         if (itemName.equals(monthName) == true) {
            tableItem.setChecked(false); break;
         }
      }
   }
	
   public void setEnabled(boolean enabled) {
      table.setEnabled(enabled);
   }
}
Avisos | Marcas Registradas | Downloads | Biblioteca | Suporte | Feedback

Copyright IBM Corporation 1999, 2014Copyright IBM Corporation 1999, 2014.

        
        Última atualização:
        
        Última atualização: 2015-02-28 18:30:59


Tópico de TarefaTópico de Tarefa | Versão 8.0.0.5 | bc31440_