@Inject
  protected StringPatternListPanel(
      DCGlassPane glassPane,
      AnalyzerBeansConfiguration configuration,
      WindowContext windowContext,
      UserPreferences userPreferences) {
    super(WidgetUtils.BG_COLOR_BRIGHT, WidgetUtils.BG_COLOR_BRIGHTEST);
    _glassPane = glassPane;
    _configuration = configuration;
    _windowContext = windowContext;
    _userPreferences = userPreferences;
    _catalog = (MutableReferenceDataCatalog) _configuration.getReferenceDataCatalog();
    _catalog.addStringPatternListener(this);

    _listPanel = new DCPanel();
    _listPanel.setLayout(new VerticalLayout(4));

    updateComponents();

    final DCLabel newStringPatternsLabel = DCLabel.dark("Create new string pattern:");
    newStringPatternsLabel.setFont(WidgetUtils.FONT_HEADER1);

    final DCLabel existingStringPatternsLabel = DCLabel.dark("Existing string patterns:");
    existingStringPatternsLabel.setFont(WidgetUtils.FONT_HEADER1);

    setLayout(new VerticalLayout(10));
    add(newStringPatternsLabel);
    add(createNewStringPatternsPanel());
    add(Box.createVerticalStrut(10));
    add(existingStringPatternsLabel);
    setBorder(new EmptyBorder(10, 10, 10, 0));
    add(_listPanel);
  }