public Atdl4jWidgetFactory getAtdl4jWidgetFactory() {
    if ((atdl4jWidgetFactory == null)
        && (Atdl4jConfig.getConfig().getClassNameAtdl4jWidgetFactory() != null)) {
      String tempClassName = Atdl4jConfig.getConfig().getClassNameAtdl4jWidgetFactory();
      logger.debug("getAtdl4jWidgetFactory() loading class named: " + tempClassName);
      try {
        atdl4jWidgetFactory =
            ((Class<Atdl4jWidgetFactory>) Class.forName(tempClassName)).newInstance();
      } catch (Exception e) {
        logger.warn(
            "Exception attempting to load Class.forName( "
                + tempClassName
                + " ).  Catching/Re-throwing as IllegalStateException",
            e);
        throw new IllegalStateException(
            "Exception attempting to load Class.forName( " + tempClassName + " )", e);
      }

      if (atdl4jWidgetFactory != null) {
        atdl4jWidgetFactory.init(getAtdl4jOptions());
      }
    }

    return atdl4jWidgetFactory;
  }
  public JPanel buildStrategySelectionPanel(Window aParentContainer, Atdl4jOptions atdl4jOptions) {
    setAtdl4jOptions(atdl4jOptions);

    JPanel panel = new JPanel(new BorderLayout());
    // label
    JLabel strategiesDropDownLabel = new JLabel("Strategy");
    panel.add(strategiesDropDownLabel, BorderLayout.WEST);

    // dropDownList
    strategiesDropDown = new JComboBox();
    strategiesDropDown.setEditable(false);

    panel.add(strategiesDropDown, BorderLayout.CENTER);

    if (Atdl4jConfig.getConfig().getStrategyDropDownItemDepth() != null) {
      strategiesDropDown.setMaximumRowCount(
          Atdl4jConfig.getConfig().getStrategyDropDownItemDepth().intValue());
    }
    // tooltip
    strategiesDropDown.setToolTipText("Select a Strategy");
    // action listener
    strategiesDropDown.addItemListener(
        new ItemListener() {

          @Override
          public void itemStateChanged(ItemEvent e) {
            if (e.getStateChange() == ItemEvent.SELECTED) {
              int index = strategiesDropDown.getSelectedIndex();
              selectDropDownStrategy(index);
            }
          }
        });

    return panel;
  }
  /** @return */
  public StrategyPanelHelper getStrategyPanelHelper() {
    if ((strategyPanelHelper == null)
        && (Atdl4jConfig.getConfig().getClassNameStrategyPanelHelper() != null)) {
      String tempClassName = Atdl4jConfig.getConfig().getClassNameStrategyPanelHelper();
      logger.debug("getStrategyPanelHelper() loading class named: " + tempClassName);
      try {
        strategyPanelHelper =
            ((Class<StrategyPanelHelper>) Class.forName(tempClassName)).newInstance();
      } catch (Exception e) {
        logger.warn(
            "Exception attempting to load Class.forName( "
                + tempClassName
                + " ).  Catching/Re-throwing as IllegalStateException",
            e);
        throw new IllegalStateException(
            "Exception attempting to load Class.forName( " + tempClassName + " )", e);
      }
    }

    return strategyPanelHelper;
  }