WebSphere Message Broker Version 8.0.0.5 Betriebssysteme: AIX, HP-Itanium, Linux, Solaris, Windows, z/OS

Sehen Sie sich die Informationen zur aktuellen Produktversion im IBM Integration Bus Version 9.0 an.

Codebeispiel für benutzerdefinierten Editor zur Handhabung von Benachrichtigungen über Änderungen

Verwenden Sie den Java™-Beispielcode zum Erstellen eines benutzerdefinierten Editors, über den der Parameterwert bei Änderungen an anderen Musterparametern aktualisiert wird.

Das folgende Beispiel veranschaulicht das Schreiben von Code für einen benutzerdefinierten Editor, der für Benachrichtigungen über Änderungen anderer Musterparameter zuständig sein soll. Der dem Musterparameter months (Monate) zugeordnete benutzerdefinierte Editor zeigt eine Liste der Monate des Jahres an, aus welcher der Benutzer des Musters über die Kontrollkästchen einen oder mehrere Monate auswählen kann. Ein zweiter Musterparameter, uncheck month (Monatsauswahl aufheben), zeigt in Form einer Dropdown-Liste die Monate des Jahres an. Wenn der Benutzer des Musters unter dem Parameter uncheck month einen Monat auswählt, empfängt der Code des benutzerdefinierten Editors von uncheck month eine Änderungsbenachrichtigung. Der betreffende Monat wird dann aus der Liste der Monate im benutzerdefinierten Editor entfernt.

Die Klasse MyEditor steuert die Funktion des Editors. Die Klasse MyComposite steuert die Darstellung des Editors mithilfe von Methoden und Objekten aus dem Standard Widget Toolkit (SWT).

In dem Beispiel wird vorausgesetzt, dass folgende Schritte bereits durchgeführt wurden:
  1. Die Musterparameter months und uncheck month sind dem benutzerdefinierten Muster hinzugefügt. Beachten Sie zum Hinzufügen von Musterparametern die Informationen im Abschnitt Benutzerschnittstelle definieren.
  2. Es wurde bereits ein aufgezählter Typ mit den Monaten des Jahres erstellt. Dieser aufgezählte Typ ist dem Musterparameter uncheck month zugeordnet. Informationen zur Verwendung aufgezählter Typen finden Sie im Abschnitt Aufzählungswerte für Musterparameter verwenden.
  3. Der Musterparameter months ist für die Verwendung eines benutzerdefinierten Editors konfiguriert (siehe Abschnitt Benutzerschnittstelle definieren).
  4. Der benutzerdefinierte Editor für den Musterparameter months ist gemäß den folgenden Schritten konfiguriert. Weitere Informationen zur Konfiguration eines benutzerdefinierten Editors finden Sie im Abschnitt Benutzerdefinierten Editor konfigurieren.
    1. Im Fenster Benutzerdefinierten Editor konfigurieren ist im Feld Klassenname die Klasse MyEditor eingegeben.
    2. Im Fenster Benutzerdefinierten Editor konfigurieren ist im Feld Wählen Sie die sichtbaren Parameter aus, die Benachrichtigungen über Änderungen an diesen benutzerdefinierten Editor senden sollen der Musterparameter uncheck month ausgewählt.
Klasse MyEditor
Die Klasse MyEditor erweitert die Klasse BasePatternPropertyEditor. Wenn der Benutzer des Musters den Musterinstanzeditor öffnet, wird automatisch eine Instanz der Klasse MyEditor erstellt.
  1. Die Methode configureEditor() wird automatisch aufgerufen, nachdem die Klasse MyEditor erstellt wurde.
  2. Die Methode createControls() wird aufgerufen, um die Benutzerschnittstelle für den Editor zu erstellen. Die Steuerelemente werden in der Klasse MyComposite definiert.
  3. Nach dem Aufruf der Methode valueChanged() wird automatisch die Methode isValid() aufgerufen. In diesem Beispiel prüft isValid() den aktuellen Wert des Musterparameters und gibt eine Fehlernachricht zurück, wenn kein Wert ausgewählt ist. Die Fehlernachricht wird dem Benutzer des Musters im Musterinstanzeditor angezeigt. Bei einem gültigen Parameterwert gibt die Methode den Wert null zurück.
  4. Die Methoden setValue(), getValue() und setEnabled() sind in der Klasse MyComposite definiert:
    1. Die Methode setValue() legt den Anfangswert im benutzerdefinierten Editor fest.
    2. Die Methode getValue() gibt den aktuellen Wert des Musterparameters an den Musterinstanzeditor zurück.
    3. Die Methode setEnabled() wird aufgerufen, wenn der Musterparameter über einen XPath-Ausdruck aktiviert oder inaktiviert wird.
  5. Die Methode notifyChanged() ruft die Methode uncheckMonth() in der Klasse MyComposite auf und übergibt den Wert des Parameters uncheck month. Die Methode notifyChanged() verarbeitet außerdem auch die ID des aktualisierten Musterparameters, diese wird jedoch in diesem Beispiel nicht verwendet.
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);
   }
}
Klasse MyComposite
Die Klasse MyComposite erstellt die Bedienelemente der Benutzerschnittstelle für den benutzerdefinierten Editor. Die Klasse MyComposite erweitert die Klasse Composite des Standard Widget Toolkits (SWT).
  1. Das Layout der Bedienelemente wird festgelegt und ein neues Tabellenelement erstellt.
  2. Die Methode valueChanged() wird in einem Empfangsprogramm im Tabellenelement verwendet. Auf diese Weise wird sichergestellt, dass bei einer Änderung der ausgewählten Werte in der Tabelle an alle XPath-Ausdrücke bzw. Editoren, die den Wert dieses Parameters verwenden, Änderungsbenachrichtigungen gesendet werden.
  3. Für jeden Monat des Jahres wird ein Tabelleneintrag erstellt.
  4. Die Methoden setValue(), getValue() und setEnabled() sind zwar in der Klasse MyComposite definiert, sie werden jedoch von der Klasse MyEditor aufgerufen.
    1. Die Methode setValue() verarbeitet den Wert des Musterparameters und aktualisiert das Tabellenelement so, dass die ausgewählten Werte angezeigt werden. Der Wert des Parameters wird als XML-Dokument im Zeichenfolgeformat mit der Liste der Monate sowie Angaben darüber, ob die einzelnen Monate ausgewählt sind, gespeichert. Die Methode setValue() liest jeden einzelnen Monat, prüft, ob er ausgewählt ist, und aktualisiert die Kontrollkästchen in der Tabelle.
    2. Die Methode getValue() ruft die derzeit ausgewählten Werte aus der Tabelle im benutzerdefinierten Editor ab. Die Liste der Monate und der Kontrollkästchenstatus jedes einzelnen Monats werden in einem XML-Dokument gespeichert, das als Zeichenfolgewert gespeichert wird. Diese Zeichenfolge wird an die Klasse MyEditor und dann an den Musterinstanzeditor zurückgegeben. Die Zeichenfolge wird als aktueller Parameterwert gespeichert.
    3. Die Methode uncheckMonth() verarbeitet den Wert des Parameters uncheck month, der von der Klasse MyEditor übergeben wird. Der Monat wird mit der Liste der Monate in der Tabelle abgeglichen und bei einer Übereinstimmung wird im benutzerdefinierten Editor das Kontrollkästchen für den betreffenden Monat abgewählt.
    4. Die Methode setEnabled() verwendet den an sie übergebenen booleschen Wert zur Aktivierung bzw. Inaktivierung des Tabellenelements.
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);
   }
}
Bemerkungen | Marken | Downloads | Bibliothek | Support | Feedback

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

        
        Letzte Aktualisierung:
        
        Letzte Aktualisierung: 2015-02-28 16:22:37


TaskthemaTaskthema | Version 8.0.0.5 | bc31440_