Verwenden Sie den Java™-Beispielcode zum Erstellen eines benutzerdefinierten Editors, über den der Parameterwert bei Änderungen an anderen Musterparametern aktualisiert wird.
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).
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);
}
}
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);
}
}