public void refreshComponents(final Row row) {
   final RowModel model = getModelFromComponent(row);
   final int oldArity = model.getRenderedArity();
   final int newArity = model.getModel().getOperator().getArity();
   if (model.isRerender()) {
     for (int i = 1; i <= newArity; ++i) {
       model.setPosition(i, createComponent(model.getModel(), i));
     }
     for (int i = newArity + 1; i <= DLFilterOperator.MAX_ARITY; ++i) {
       model.setPosition(i, new Space());
     }
     model.rendered(newArity);
     Events.postEvent("onRenderComponents", row, null);
     LOGGER.debug("Components have been regenerated due to factory changed.");
   } else if (oldArity != newArity) {
     for (int i = oldArity + 1; i <= newArity; ++i) {
       model.setPosition(i, createComponent(model.getModel(), i));
     }
     for (int i = newArity + 1; i <= oldArity; ++i) {
       model.setPosition(i, new Space());
       model.getModel().setValue(i, null); // uncomment of this row
       // causes that the value will be reset after the component is hidden
       // now the value persists till the factory is not changed
     }
     model.rendered(newArity);
     Events.postEvent("onRenderComponents", row, null);
     LOGGER.debug("Components have been modified due to arity changed.");
   }
 }