public FilterModel(FilterRepository rep) {
   filters = new ArrayList<TaskFilter>(rep.size() * 2);
   int selectedi = 0;
   for (TaskFilter f : rep.getFilters()) {
     if (f == rep.getActive()) selection.setSelectionInterval(selectedi, selectedi);
     filters.add((TaskFilter) f.clone());
     selectedi++;
   }
 }
  private void init() {
    initComponents();

    // init filters-listbox model
    lstFilters.setModel(filterModel);
    lstFilters.setSelectionModel(filterModel.selection);
    lstFilters.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);

    // try to select just applied filter

    TaskFilter selected = filterRepository.getActive();
    if (null != selected) {
      int selIndex = filterModel.getIndexOf(selected);
      lstFilters.setSelectedIndex(selIndex);
    }

    if (filterModel.getSelectedIndex() == -1) {
      if (filterModel.getSize() > 0) {
        lstFilters.setSelectedIndex(0);
      }
    }

    txtFilterName
        .getDocument()
        .addDocumentListener(
            new DocumentListener() {
              public void changedUpdate(DocumentEvent e) {
                update(e);
              }

              public void insertUpdate(DocumentEvent e) {
                update(e);
              }

              public void removeUpdate(DocumentEvent e) {
                update(e);
              }

              private void update(DocumentEvent e) {
                try {
                  filterModel.setCurrentFilterName(
                      e.getDocument().getText(0, e.getDocument().getLength()));
                  propertyChange(null);
                } catch (BadLocationException ex) {
                  // ignore
                }
              }
            });

    // hook list selection
    lstFilters.addListSelectionListener(
        new ListSelectionListener() {
          public void valueChanged(ListSelectionEvent e) {
            if (!e.getValueIsAdjusting()) {
              showFilter(filterModel.getSelectedFilter());
              btnRemoveFilter.setEnabled(filterModel.getSelectedIndex() != -1);
              txtFilterName.setEnabled(filterModel.getSelectedIndex() != -1);
            }
          }
        });

    showFilter(filterModel.getSelectedFilter());
    btnRemoveFilter.setEnabled(filterModel.getSelectedIndex() != -1);

    btnOk = new JButton(NbBundle.getMessage(FilterEditor.class, "btnOk")); // NOI18N
    btnCancel = new JButton(NbBundle.getMessage(FilterEditor.class, "btnCancel")); // NOI18N
  }