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."); } }