WebSphere Message Broker, Versión 8.0.0.5 Sistemas operativos: AIX, HP-Itanium, Linux, Solaris, Windows, z/OS

Consulte la información sobre la última versión del producto en IBM Integration Bus, Versión 9.0

Ejemplo de código del editor definido por el usuario para manejar notificaciones de cambios

Utilice el código Java™ de ejemplo para crear un editor definido por el usuario que actualice el valor del parámetro cuando haya cambios en otros parámetros de patrón.

El código de ejemplo siguiente muestra cómo escribir código de editor definido por el usuario para manejar notificaciones de cambios desde otros parámetros de patrón. El editor definido por el usuario, asignado al parámetro de patrón months muestra una lista de los meses del año, uno o varios de los cuales el usuario de patrón puede seleccionar mediante recuadros de selección. Un segundo parámetro de patrón, uncheck month, muestra una lista de los meses del año en una lista desplegable. Cuando el usuario de patrón selecciona un mes en el parámetro uncheck month, el código de editor definido por el usuario recibe una notificación de cambio de uncheck month y ese mes se borra de la lista de meses en el editor definido por el usuario.

La clase MyEditor controla la función del editor. La clase MyComposite controla el aspecto del editor utilizando métodos y objetos del kit de herramientas SWT.

En el ejemplo se da por supuesto que se han completado los siguientes pasos:
  1. Los parámetros de patrón, months y uncheck month se añaden al patrón definido por el usuario. Para añadir patrones de patrón, consulte Definición de la interfaz de usuario.
  2. Se crea un tipo enumerado que contiene los meses del año. Al tipo enumerado se le asigna el patrón de parámetro, uncheck month. Para utilizar tipos enumerados, consulte Utilización de valores enumerados para parámetros de patrón.
  3. El parámetro de patrón, months, se configura para que utilice un editor definido por el usuario; consulte Definición de la interfaz de usuario.
  4. El editor definido por el usuario para el parámetro de patrón, months, se configura efectuando los siguientes pasos. Para obtener más información sobre la configuración de un editor definido por el usuario, consulte Configurar un editor definido por el usuario.
    1. La clase MyEditor se especifica en la ventana Configurar editor definido por el usuario, en el campo Nombre de clase.
    2. El parámetro de patrón, uncheck month, está seleccionado en la ventana Configurar editor definido por el usuario, en el campo Seleccione los parámetros visibles que enviarán notificaciones de cambios a este editor definido por el usuario.
Clase MyEditor
La clase MyEditor amplía la clase BasePatternPropertyEditor. Se crea automáticamente una instancia de la clase MyEditor cuando el usuario del patrón abre el editor de instancias del patrón.
  1. Se llama automáticamente al método configureEditor() después de crear la clase MyEditor.
  2. Se llama al método createControls() para crear la interfaz de usuario para el editor. Los controles se definen en la clase MyComposite.
  3. Se llama automáticamente al método isValid() después de llamar al método valueChanged(). En este ejemplo, isValid() comprueba el valor actual del parámetro de patrón y devuelve un mensaje de error si no se selecciona ningún valor. El mensaje de error se visualiza para el usuario de patrón en el editor de instancias de patrón. Si el valor de parámetro es válido, el método devuelve null.
  4. Los métodos setValue(), getValue() y setEnabled() se definen en la clase MyComposite:
    1. El método setValue() establece el valor inicial en el editor definido por el usuario.
    2. El método getValue() devuelve el valor actual del parámetro de patrón al editor de instancias de patrón.
    3. Se llama al método setEnabled() cuando el parámetro de patrón se habilita o inhabilita mediante una expresión XPath.
  5. El método notifyChanged() llama al método uncheckMonth() en la clase MyComposite, transfiriendo el valor del parámetro, uncheck month. El método notifyChanged() también adopta un ID del parámetro de patrón actualizado, pero no se utiliza en este ejemplo.
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 "¡En estos momentos no hay nada seleccionado..!";
   }
	
   @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);
      }
}
Clase MyComposite
La clase MyComposite crea los controles de la interfaz de usuario para el editor definido por el usuario. La clase MyComposite amplía la clase Composite del kit de herramientas de SWT.
  1. Se establece el diseño de los controles y se crea un nuevo control de tabla.
  2. El método valueChanged() se utiliza en un escucha en el control de tabla. Así se garantiza que cuando se cambien los valores seleccionados en la tabla, las notificaciones de cambios se envíen a todas las expresiones XPath o editores que utilizan el valor de este parámetro.
  3. Se crea un elemento de tabla para cada mes del año.
  4. Los métodos setValue(), getValue() y setEnabled() se definen en la clase MyComposite, pero se llaman desde la clase MyEditor:
    1. El método setValue() toma el valor del parámetro de patrón y actualiza el control de tabla para mostrar los valores seleccionados. El valor del parámetro se almacena como un documento XML en formato de serie que contiene la lista de meses e información sobre si cada mes está seleccionado. El método setValue() lee cada mes, si está seleccionado y actualiza los recuadros de selección de la tabla.
    2. El método getValue() recupera los valores seleccionados actualmente en la tabla en el editor definido por el usuario. La lista de meses y el estado del recuadro de selección de cada mes se almacena en un documento XML, que se guarda como un valor de serie. Esta serie se devuelve a la clase MyEditor y luego al editor de instancias de patrón. La serie se almacena como valor actual del parámetro.
    3. El método uncheckMonth() toma el valor del parámetro, uncheck month, transferido desde la clase MyEditor. El mes se selecciona con respecto a la lista de meses de la tabla y cuando se encuentra una coincidencia, el recuadro de selección correspondiente a dicho mes se deselecciona en el editor definido por el usuario.
    4. El método setEnabled() utiliza el valor booleano que se le ha pasado para habilitar o inhabilitar el control de tabla.
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 | Descargas | Biblioteca | Soporte | Comentarios

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

        
        Última actualización:
        
        Última actualización: 2015-02-28 17:00:58


Tema de tareaTema de tarea | Versión 8.0.0.5 | bc31440_