@Override
 protected void updateItem(boolean accept, Object... params) {
   String function = param(null, 0, params);
   boolean refresh = function == null;
   if (refresh) function = getFunction();
   Element element = select(function);
   if (element != null) {
     String body = textArea.getText();
     if (accept) {
       NodeList nodes = evaluateXPath(element, "./BODY/text()");
       if (nodes != null && nodes.getLength() > 0) {
         Node node = nodes.item(0);
         CDATASection cdata = ProfileManager.transports.createCDATASection(body);
         node.getParentNode().replaceChild(cdata, node);
         updateModel(refresh, true, true);
       }
     } else if (refresh) setFunction(function);
   }
 }
 @Override
 protected boolean addItem(boolean refresh, Object function) {
   if (ProfileManager.transportsLoaded()) {
     String body = textArea.getText();
     if (notNullOrEmpty(body)) {
       Element element = ProfileManager.transports.createElement("FUNCTION");
       element.setAttribute("name", stringValueOf(function));
       if (notNullOrEmpty(profile)) element.setAttribute("profile", profile);
       Element el = ProfileManager.transports.createElement("BODY");
       CDATASection cdata = ProfileManager.transports.createCDATASection(body);
       el.appendChild(cdata);
       element.appendChild(el);
       select().appendChild(element);
       updateModel(true, true, true, function);
       return true;
     }
   }
   return false;
 }
  private void createUI(final Component parent, final Container container) {
    comboBoxes = new JComboBox[] {new JComboBox()};
    textArea = new TextToggle().createBufferedTextArea("beanshell", "/modes/java.xml");

    JToolBar bar = new JToolBar();
    container.add(bar, BorderLayout.NORTH);
    final RolloverButton btn =
        createButton(
            bar,
            ACCEPT_BUTTON_KEY,
            new ActionListener() {
              public void actionPerformed(ActionEvent e) {
                save(getItem(), false);
                Window window = SwingUtilities.getWindowAncestor(container);
                if (window != null) window.dispose();
              }
            });
    comboBoxes[0].addItemListener(
        new ItemListener() {
          public void itemStateChanged(ItemEvent ev) {
            if (ev.getStateChange() == ItemEvent.SELECTED) {
              String function = getFunction();
              if (select(function) != null) setFunction(function);
              else setDirty(true);
            } else if (ev.getStateChange() == ItemEvent.DESELECTED) {
              String item = stringValueOf(ev.getItem());
              save(item, false);
            }
          }
        });
    comboBoxes[0].setEditable(true);
    comboEdit(0).setHorizontalAlignment(JTextField.CENTER);
    bar.add(comboBoxes[0]);
    comboEdit(0)
        .addKeyListener(
            new KeyAdapter() {
              @Override
              public void keyPressed(KeyEvent e) {
                if (e.getKeyCode() == KeyEvent.VK_ENTER) {
                  btn.doClick();
                }
              }
            });
    installAddRemove(bar, "function");
    installUpdate(bar);
    final RolloverButton test = new RolloverButton();
    test.setText("Test");
    test.addActionListener(
        new ActionListener() {
          public void actionPerformed(ActionEvent e) {
            testThis(parent, container, comboEdit(0).getText());
          }
        });
    test.setEnabled(findAllIn(selector, Pattern.compile("/")).length < 2);
    bar.add(test);
    textArea.setOnTextChanged(
        new Job<JComponent>() {
          public void perform(JComponent t, Object[] params) throws Exception {
            setDirty(true);
          }
        });
    container.add(textArea.getUIComponent(), BorderLayout.CENTER);
    mess = new JLabel();
    mess.setHorizontalAlignment(JTextField.CENTER);
    container.add(mess, BorderLayout.SOUTH);
    updateModel(true, false, false);
  }