protected void save(String text) {
    String title = "Save " + textType + " File";
    TextFileFilter fileFilter = getTextFileFilter(textType);
    chooser.setFileFilter(fileFilter);

    if (chooser.showSaveDialog(editor.getFrame()) == JFileChooser.APPROVE_OPTION) {
      String name = chooser.getSelectedFile().toString();
      if (!name.endsWith(fileFilter.getExtension())) {
        name = name + "." + fileFilter.getExtension();
      }
      try {
        editor.getFrame().setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
        FileOutputStream fos = new FileOutputStream(new File(name));
        fos.write(text.getBytes());
        fos.close();
        JOptionPane.showMessageDialog(
            editor.getFrame(),
            textType + " saved successfully to " + name,
            title,
            JOptionPane.INFORMATION_MESSAGE);
      } catch (Exception ex) {
        Logger.getLogger(FileMenuAction.class.getName()).log(Level.SEVERE, null, ex);
        ExceptionHandler.handleException(ex);
        return;
      } finally {
        editor.getFrame().setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
      }
    }
  }
  public boolean doFilters(String line) {
    if (filters == null) return true;

    boolean filterOK = true; // if false: skip this row

    for (int f = 0; f < filters.length && filterOK; f++) {
      TextFileFilter filter = filters[f];
      if (filter.getFilterString() != null && filter.getFilterString().length() > 0) {
        int from = filter.getFilterPosition();
        if (from >= 0) {
          int to = from + filter.getFilterString().length();
          if (line.length() >= from && line.length() >= to) {
            String sub = line.substring(filter.getFilterPosition(), to);
            if (sub.equalsIgnoreCase(filter.getFilterString())) {
              filterOK = false; // skip this one!
            }
          }
        } else
        // anywhere on the line
        {
          int idx = line.indexOf(filter.getFilterString());
          if (idx >= 0) {
            filterOK = false;
          }
        }

        if (!filterOK) {
          boolean isFilterLastLine = filter.isFilterLastLine();
          if (isFilterLastLine) {
            stopProcessing = true;
          }
        }
      }
    }
    return filterOK;
  }