Esempio di codice editor definito dall'utente che utilizza due classi Java

Utilizzare il codice Java™ di esempio per creare un editor definito dall'utente per visualizzare un elenco di valori utilizzando due classi Java.

Informazioni su questa attività

Il seguente codice di esempio mostra come utilizzare due classi Java per visualizzare un elenco di valori per un utente del modello.

La classe MyEditor controlla la funzione dell'editor. La classe MyComposite controlla l'aspetto dell'editor utilizzando il toolkit SWT.

L'esempio presuppone che siano stati completati i seguenti passi:
  • I valori visualizzati nell'elenco nell'editor definito dall'utente vengono immessi come valori di configurazione nella finestra Configura editor definito dall'utente . I valori devono essere immessi come una stringa separata da virgole, ad esempio Apple,Orange,Pear,Lemon. Per ulteriori informazioni sull'immissione dei valori di configurazione, consultare Configurazione di un editor definito dall'utente.
  • La classe MyEditor viene immessa nella finestra Configura editor definito dall'utente , nel campo Nome classe . Per ulteriori informazioni sulla specifica del nome classe per il proprio codice editor definito dall'utente, consultare Configurazione di un editor definito dall'utente.
Classe MyEditor
La classe MyEditor estende la classe BasePatternPropertyEditor . Un'istanza della classe MyEditor viene creata automaticamente quando l'utente del pattern apre l'editor dell'istanza del modello.
  1. Il metodo configureEditor() viene richiamato automaticamente dopo la creazione della classe MyEditor . Questo metodo legge la stringa dei valori di configurazione per l'editor definito dall'utente e memorizza ciascuno dei valori separati da virgole.
  2. Il metodo createControls() viene richiamato per creare l'interfaccia utente per l'editor. I controlli sono definiti nella classe MyComposite .
  3. Il metodo isValid() viene richiamato automaticamente dopo il richiamo del metodo valueChanged() . In questo esempio, isValid() controlla il valore corrente del parametro del modello e restituisce un messaggio di errore se non viene selezionato alcun valore. Il messaggio di errore viene visualizzato all'utente del pattern nell'editor dell'istanza del pattern. Se il valore del parametro è valido, il metodo restituisce null.
  4. I metodi setValue(), getValue()e setEnabled() sono definiti nella classe MyComposite :
    1. Il metodo setValue() imposta il valore iniziale nell'editor definito dall'utente.
    2. Il metodo getValue() restituisce il valore corrente del parametro del pattern all'editor dell'istanza del pattern.
    3. Il metodo setEnabled() viene richiamato quando il parametro del modello è abilitato o disabilitato da un'espressione XPath.
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;
   private String configurationValues;
   private String[] items;
	
   @Override
   public void configureEditor(PatternPropertyEditorSite site, boolean required, String configurationValues) {
      super.configureEditor(site, required, configurationValues);
      this.configurationValues = configurationValues;
      this.items = configurationValues.split("\\,");
      if (this.items == null) {
         this.items = new String[] { };
      }
   }

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

   @Override
   public String isValid() {
      String selection = getValue();
      if (selection != null) {
         return null;
      }
      return "Nothing currently selected..!";
   }
	
   @Override
   public void setValue(String value) {
      composite.setValue(value);
   }

   @Override
   public String getValue() {
      return composite.getValue();
   }
	
   @Override
   public void setEnabled(boolean enabled) {
      composite.setEnabled(enabled);
   }
}
Classe MyComposite
La classe MyComposite crea i controlli dell'interfaccia utente per l'editor definito dall'utente. La classe MyComposite estende la classe SWT toolkit Composite .
  1. Il layout dei controlli viene impostato e viene creato un nuovo controllo elenco.
  2. Il metodo valueChanged() viene utilizzato in un listener sul controllo elenco. Ciò garantisce che quando il valore selezionato nell'elenco viene modificato, le notifiche di modifica vengono inviate a qualsiasi espressione XPath o editor che utilizzano il valore di questo parametro.
  3. I metodi setValue(), getValue()e setEnabled() vengono definiti nella classe MyComposite , ma vengono richiamati dalla classe MyEditor :
    1. Il metodo setValue() acquisisce il valore del parametro del modello e aggiorna il controllo elenco per mostrare il valore selezionato.
    2. Il metodo getValue() richiama il valore attualmente selezionato dal controllo elenco e, se non è vuoto, lo restituisce a MyEditor.
    3. Il metodo setEnabled() utilizza il valore booleano trasmesso per abilitare o disabilitare il controllo elenco.
package com.your.company.domain.MyPattern.code;

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.List;

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

public class MyComposite extends Composite {
   private List list;
   private PatternPropertyEditorSite site;
	
   public MyComposite(Composite parent, int style, String[] items, final PatternPropertyEditorSite site) {
      super(parent, SWT.NONE);
      this.site = site;
		
      GridLayout gridLayout = new GridLayout(1, false);
 		
      gridLayout.marginWidth = 1;
      gridLayout.marginHeight = 1;
      gridLayout.horizontalSpacing = 0;
      gridLayout.verticalSpacing = 0;
      setLayout(gridLayout); 		

      setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
 		
      list = new List(this, SWT.BORDER);
      list.setItems(items);
      GridData listLayoutData = new GridData(GridData.FILL_HORIZONTAL);
      listLayoutData.horizontalIndent = 0;
      list.setLayoutData(listLayoutData);
		
      list.addSelectionListener(new SelectionAdapter() {
         @Override
         public void widgetSelected(SelectionEvent event) {
            site.valueChanged();
         }
      });
   }
	
   public void setValue(String value) {
      if (value != null) {
         list.setSelection(new String[] { value });
      }
   }
	
   public String getValue() {
      String[] selection = list.getSelection();
      if (selection.length > 0) {
         return selection[0];
      }
      return null;
   }
	
   public void setEnabled(boolean enabled) {
      list.setEnabled(enabled);
   }
}