public void onOk() {
   final NormalFilterModel modelFilter = new NormalFilterModel();
   for (RowModel row : rows) {
     modelFilter.add(row.getModel());
   }
   org.zkoss.zk.ui.event.Events.postEvent(
       new Event("onSave", self, clearFilterModel(modelFilter)));
   self.detach();
 }
  @Override
  @SuppressWarnings("unchecked")
  public void doAfterCompose(final org.zkoss.zk.ui.Component comp) throws Exception {
    super.doAfterCompose(comp);
    comp.setAttribute("ctl", this, Component.SPACE_SCOPE);

    // save masterController
    masterController = (DLListboxExtController) arg.get("master");

    // save model, which is setted in the main model
    final NormalFilterModel modelFilter =
        (NormalFilterModel) arg.get(DLNormalFilterKeys.FILTERS.toString());

    // load informations about columns and data types
    modelTemplates = (NormalFilterModel) arg.get(DLNormalFilterKeys.TEMPLATES.toString());

    // sort by column labels
    java.util.Collections.sort(
        modelTemplates,
        new java.util.Comparator<NormalFilterUnitModel>() {

          public int compare(final NormalFilterUnitModel unit1, final NormalFilterUnitModel unit2) {
            return unit1.getLabel().compareTo(unit2.getLabel());
          }
        });

    for (NormalFilterUnitModel unit : modelFilter) {

      // if column was added manally, template might not be set - enforce template
      if (unit.getTemplate() == null)
        unit.setTemplate(modelTemplates.findUnitModelByColumnName(unit.getColumn()));

      rows.add(new RowModel(unit));
    }
  }
 @SuppressWarnings("unchecked")
 public void onAdd() {
   final NormalFilterUnitModel unit = new NormalFilterUnitModel();
   unit.update(modelTemplates.get(0));
   rows.add(new RowModel(unit));
   ZKBinderHelper.loadComponent(self);
 }
  /**
   * Removes invalid units from the model
   *
   * @param model filter model
   * @return model valid filter model
   */
  protected NormalFilterModel clearFilterModel(final NormalFilterModel model) {
    for (final Iterator<NormalFilterUnitModel> it = model.iterator(); it.hasNext(); ) {
      final NormalFilterUnitModel unit = it.next();
      if (unit.getColumn() == null
          || unit.getColumn().length() == 0
          || unit.getOperator() == null
          || !isValuesValid(unit)) {
        it.remove();
        continue;
      }
    }

    return model;
  }