public void init() {
    if (initialized) {
      return;
    }
    initialized = true;
    final DefaultComboBoxModel<ExpressionMetaData> model =
        new DefaultComboBoxModel<ExpressionMetaData>();
    model.addElement(null);

    final ExpressionMetaData[] datas = ExpressionRegistry.getInstance().getAllExpressionMetaDatas();
    for (int i = 0; i < datas.length; i++) {
      final ExpressionMetaData expressionMetaData = datas[i];
      if (expressionMetaData.isHidden()) {
        continue;
      }
      if (WorkspaceSettings.getInstance().isShowExpertItems() == false
          && expressionMetaData.isExpert()) {
        continue;
      }
      if (WorkspaceSettings.getInstance().isShowDeprecatedItems() == false
          && expressionMetaData.isDeprecated()) {
        continue;
      }

      if (StructureFunction.class.isAssignableFrom(expressionMetaData.getExpressionType())) {
        model.addElement(expressionMetaData);
      }
    }
    expressionEditor.setModel(model);
  }
  private static String printBundleLocation(final ExpressionMetaData metaData) {
    if (metaData instanceof AbstractMetaData) {
      final AbstractMetaData metaDataImpl = (AbstractMetaData) metaData;
      return metaDataImpl.getBundleLocation().replace('.', '/') + ".properties";
    }

    return metaData.getExpressionType().getCanonicalName().replace('.', '/') + "Bundle.properties";
  }
 /**
  * Returns the value contained in the editor.
  *
  * @return the value contained in the editor
  */
 public Object getCellEditorValue() {
   final Object o = this.expressionEditor.getSelectedItem();
   if (o instanceof ExpressionMetaData) {
     try {
       final ExpressionMetaData emd = (ExpressionMetaData) o;
       if (StructureFunction.class.isAssignableFrom(emd.getExpressionType())) {
         return emd.getExpressionType().newInstance();
       } else {
         return null;
       }
     } catch (Throwable t) {
       UncaughtExceptionsModel.getInstance().addException(t);
       return null;
     }
   } else if (o instanceof StructureFunction) {
     return o;
   } else {
     return null;
   }
 }
 public void contentsChanged(final ListDataEvent e) {
   final ExpressionMetaData o =
       (ExpressionMetaData) editModel.getChartExpressionsModel().getSelectedItem();
   if (o != null && expressionType.equals(o.getExpressionType())) {
     putValue("selected", Boolean.TRUE); // NON-NLS
     putValue(Action.SMALL_ICON, selectedIcon);
   } else {
     putValue("selected", Boolean.FALSE); // NON-NLS
     putValue(Action.SMALL_ICON, standardIcon);
   }
 }
    /** Invoked when an action occurs. */
    public void actionPerformed(final ActionEvent e) {
      final Window window = LibSwingUtil.getWindowAncestor(carrierPanel);
      final Object selectedItem = expressionEditor.getSelectedItem();
      if (selectedItem instanceof StructureFunction) {
        final ExpressionPropertiesDialog optionPane;
        if (window instanceof JFrame) {
          optionPane = new ExpressionPropertiesDialog((JFrame) window);
        } else if (window instanceof JDialog) {
          optionPane = new ExpressionPropertiesDialog((JDialog) window);
        } else {
          optionPane = new ExpressionPropertiesDialog();
        }
        final StructureFunction structureFunction = (StructureFunction) selectedItem;
        final StructureFunction expression =
            (StructureFunction) optionPane.editExpression(structureFunction, designerContext);
        if (expression != selectedItem) {
          expressionEditor.setSelectedItem(expression);
        }
        fireEditingStopped();
      } else if (selectedItem instanceof ExpressionMetaData) {
        try {
          final ExpressionMetaData emd = (ExpressionMetaData) selectedItem;
          final Expression expression = (Expression) emd.getExpressionType().newInstance();

          final ExpressionPropertiesDialog optionPane;
          if (window instanceof JFrame) {
            optionPane = new ExpressionPropertiesDialog((JFrame) window);
          } else if (window instanceof JDialog) {
            optionPane = new ExpressionPropertiesDialog((JDialog) window);
          } else {
            optionPane = new ExpressionPropertiesDialog();
          }

          final Expression resultexpression =
              optionPane.editExpression(expression, designerContext);
          if (resultexpression != expression) {
            expressionEditor.setSelectedItem(resultexpression);
          }
          fireEditingStopped();
        } catch (Throwable e1) {
          UncaughtExceptionsModel.getInstance().addException(e1);
        }
      }
    }