use of org.jboss.errai.databinding.client.BindableProxy in project kie-wb-common by kiegroup.
the class FormDisplayer method doRender.
private void doRender(Element<? extends Definition<?>> element, Object definition, Path diagramPath, FieldChangeHandler changeHandler) {
if (renderer.isInitialized()) {
LOGGER.fine("Clearing previous form");
renderer.unBind();
}
LOGGER.fine("Rendering a new form for element");
Collection<FormElementFilter> filters = FormFiltersProviderFactory.getFilterForDefinition(element.getUUID(), element, definition);
final BindableProxy<?> proxy = (BindableProxy<?>) BindableProxyFactory.getBindableProxy(definition);
final StaticModelFormRenderingContext generatedCtx = modelGenerator.getContextForModel(proxy.deepUnwrap(), filters.stream().toArray(FormElementFilter[]::new));
final FormRenderingContext<?> pathAwareCtx = new PathAwareFormContext<>(generatedCtx, diagramPath);
renderer.render(pathAwareCtx);
renderer.addFieldChangeHandler(changeHandler);
}
use of org.jboss.errai.databinding.client.BindableProxy in project kie-wb-common by kiegroup.
the class DefaultModelValidator method validate.
@Override
public boolean validate(Collection<FormField> fields, MODEL model) {
boolean isValid = true;
if (model instanceof BindableProxy) {
model = ((BindableProxy<MODEL>) model).deepUnwrap();
}
try {
Set<ConstraintViolation<Object>> result = validator.validate(model);
for (ConstraintViolation<Object> constraintViolation : result) {
Optional<FormField> found = fields.stream().filter(formField -> {
Path propertyPath = constraintViolation.getPropertyPath();
String propertyName = propertyPath.iterator().next().getName();
if (checkBinding(formField, propertyName)) {
return true;
}
propertyName = propertyPath.toString().replace(".", NESTED_PROPERTY_SEPARATOR);
if (checkBinding(formField, propertyName)) {
return true;
}
return false;
}).findFirst();
if (!found.isPresent()) {
continue;
}
FormField formField = found.get();
if (formField == null) {
continue;
}
isValid = false;
formField.showError(constraintViolation.getMessage());
}
} catch (IllegalArgumentException ex) {
GWT.log("Error trying to validate model: model does not any validation constraint. ");
}
return isValid;
}
use of org.jboss.errai.databinding.client.BindableProxy in project kie-wb-common by kiegroup.
the class MultipleSubFormWidget method initCrud.
protected void initCrud() {
final List<ColumnMeta> metas = new ArrayList<>();
HasProperties hasProperties = null;
try {
hasProperties = bindingHelper.getProxyDefinition();
} catch (Exception e) {
GWT.log("Unable to find proxy: " + e.getMessage());
}
for (TableColumnMeta meta : field.getColumnMetas()) {
String type = String.class.getName();
if (hasProperties != null) {
type = hasProperties.getBeanProperties().get(meta.getProperty()).getType().getName();
}
ColumnGenerator generator = columnGeneratorManager.getGeneratorByType(type);
if (generator != null) {
ColumnMeta<HasProperties> columnMeta = new ColumnMeta<HasProperties>(generator.getColumn(meta.getProperty()), meta.getLabel());
metas.add(columnMeta);
}
}
dataProvider = new AsyncDataProvider<HasProperties>() {
@Override
protected void onRangeChanged(HasData<HasProperties> hasData) {
if (tableValues != null) {
updateRowCount(tableValues.size(), true);
updateRowData(0, tableValues);
} else {
updateRowCount(0, true);
updateRowData(0, new ArrayList<HasProperties>());
}
}
};
crudComponent.init(new CrudActionsHelper() {
@Override
public int getPageSize() {
return PAGE_SIZE;
}
@Override
public boolean showEmbeddedForms() {
return true;
}
@Override
public boolean isAllowCreate() {
return !isReadOnly;
}
@Override
public boolean isAllowEdit() {
return !isReadOnly;
}
@Override
public boolean isAllowDelete() {
return !isReadOnly;
}
@Override
public List<ColumnMeta> getGridColumns() {
return metas;
}
@Override
public AsyncDataProvider getDataProvider() {
return dataProvider;
}
public IsFormView<Object> getCreateInstanceForm() {
if (field.getCreationForm() != null) {
BindableProxy<?> proxy = bindingHelper.getNewProxy();
formRenderer.render(renderingContext.getCopyFor(field.getCreationForm(), proxy));
return formRenderer;
}
return null;
}
public IsFormView<Object> getEditInstanceForm(int position) {
if (field.getEditionForm() != null) {
BindableProxy instanceProxy = bindingHelper.getProxyForModel(values.get(position));
BindableProxy editionProxy = bindingHelper.getProxyForModel(instanceProxy.deepUnwrap());
formRenderer.render(renderingContext.getCopyFor(field.getEditionForm(), editionProxy));
return formRenderer;
}
return null;
}
@Override
public void createInstance() {
IsFormView form = getCreateInstanceForm();
crudComponent.displayForm(translationService.getTranslation(CrudComponentConstants.CrudComponentViewImplNewInstanceTitle), form, new FormDisplayer.FormDisplayerCallback() {
@Override
public void onCancel() {
formRenderer.unBind();
}
@Override
public void onAccept() {
if (values == null) {
values = new ArrayList<>();
}
values.add(formRenderer.getModel());
tableValues.add((HasProperties) formRenderer.getModel());
refreshCrud();
fireFieldChange();
formRenderer.unBind();
}
});
}
@Override
public void editInstance(int index) {
IsFormView form = getEditInstanceForm(index);
crudComponent.displayForm(translationService.getTranslation(CrudComponentConstants.CrudComponentViewImplEditInstanceTitle), form, new FormDisplayer.FormDisplayerCallback() {
@Override
public void onCancel() {
formRenderer.unBind();
}
@Override
public void onAccept() {
BindableProxy editionProxy = (BindableProxy) formRenderer.getModel();
BindableProxy realProxy = bindingHelper.getProxyForModel(values.get(index));
FormDefinition editionform = (FormDefinition) renderingContext.getAvailableForms().get(field.getEditionForm());
editionform.getFields().forEach(fieldDefinition -> {
if (fieldDefinition.getBinding() != null) {
realProxy.set(fieldDefinition.getBinding(), editionProxy.get(fieldDefinition.getBinding()));
}
});
bindingHelper.afterEdit(realProxy);
values.set(index, realProxy);
tableValues.set(index, realProxy);
refreshCrud();
fireFieldChange();
formRenderer.unBind();
}
});
}
@Override
public void deleteInstance(int index) {
values.remove(index);
tableValues.remove(index);
refreshCrud();
fireFieldChange();
}
});
initValues();
}
use of org.jboss.errai.databinding.client.BindableProxy in project kie-wb-common by kiegroup.
the class FormHandlerImpl method registerInput.
@Override
public void registerInput(FormField formField, Converter valueConverter) {
Assert.notNull("FormHandler isn't correctly initialized, please run any of the setUp methods before use", binder);
Assert.notNull("FormField cannot be null!", formField);
String fieldName = formField.getFieldName();
IsWidget widget = formField.getWidget();
form.addField(formField);
if (formField.isBindable()) {
BindableProxy proxy = (BindableProxy) binder.getModel();
Object modelValue = readPropertyValue(proxy, formField.getFieldBinding());
StateSync stateSync = Optional.ofNullable(modelValue).isPresent() ? StateSync.FROM_MODEL : StateSync.FROM_UI;
binder.bind(widget, formField.getFieldBinding(), valueConverter, stateSync);
}
fieldChangeManager.registerField(formField);
formField.getChangeListeners().forEach(listener -> fieldChangeManager.addFieldChangeHandler(listener.getFieldToListen(), listener.getChangeHandler()));
/**
* if field isn't bindable we cannot listen to field value changes.
*/
if (!formField.isBindable()) {
return;
}
if (widget instanceof IsNestedModel) {
IsNestedModel nestedModelWidget = (IsNestedModel) widget;
nestedModelWidget.addFieldChangeHandler((childFieldName, newValue) -> fieldChangeManager.notifyFieldChange(fieldName + "." + childFieldName, newValue));
} else {
PropertyChangeUnsubscribeHandle unsubscribeHandle = binder.addPropertyChangeHandler(formField.getFieldBinding(), event -> fieldChangeManager.processFieldChange(fieldName, event.getNewValue(), binder.getModel()));
unsubscribeHandlers.add(unsubscribeHandle);
}
}
Aggregations