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.
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.
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);
}
}