use of io.jmix.ui.accesscontext.UiEntityAttributeContext in project jmix by jmix-framework.
the class AbstractTable method setupColumnSettings.
protected void setupColumnSettings(EntityTableItems<E> entityTableSource) {
MetaClass metaClass = entityTableSource.getEntityMetaClass();
List<MetaPropertyPath> editableColumns = Collections.emptyList();
for (Map.Entry<Object, Column<E>> entry : this.columns.entrySet()) {
Object columnId = entry.getKey();
Column<E> column = entry.getValue();
String caption;
if (column != null) {
caption = getColumnCaption(columnId, column);
} else {
caption = StringUtils.capitalize(getColumnCaption(columnId));
}
setColumnHeader(columnId, caption);
if (column != null) {
if (column.isEditable() && (columnId instanceof MetaPropertyPath)) {
MetaPropertyPath propertyPath = ((MetaPropertyPath) columnId);
UiEntityAttributeContext attributeContext = new UiEntityAttributeContext(metaClass, propertyPath.toString());
accessManager.applyRegisteredConstraints(attributeContext);
if (attributeContext.canModify() && attributeContext.canView()) {
if (editableColumns.isEmpty()) {
editableColumns = new ArrayList<>();
}
editableColumns.add(propertyPath);
} else {
log.info("Editable column '{}' is not permitted to read or update", propertyPath.toString());
}
}
if (column.isCollapsed() && component.isColumnCollapsingAllowed()) {
UiEntityAttributeContext attributeContext = new UiEntityAttributeContext(metaClass, columnId.toString());
accessManager.applyRegisteredConstraints(attributeContext);
if (!(columnId instanceof MetaPropertyPath) || attributeContext.canView()) {
component.setColumnCollapsed(column.getId(), true);
}
}
if (column.getAggregation() != null) {
checkAggregation(column.getAggregation());
component.addContainerPropertyAggregation(column.getId(), WrapperUtils.convertAggregationType(column.getAggregation().getType()));
}
}
}
if (isEditable() && !editableColumns.isEmpty()) {
UiEntityContext entityContext = new UiEntityContext(metaClass);
accessManager.applyRegisteredConstraints(entityContext);
if (entityContext.isViewPermitted() && entityContext.isEditPermitted()) {
setEditableColumns(editableColumns);
} else {
log.info("Entity '{}' is not permitted to read or update", metaClass.getName());
}
}
}
use of io.jmix.ui.accesscontext.UiEntityAttributeContext in project jmix by jmix-framework.
the class TableFieldFactoryImpl method applyPermissions.
protected void applyPermissions(io.jmix.ui.component.Component columnComponent) {
if (columnComponent instanceof HasValueSource && columnComponent instanceof io.jmix.ui.component.Component.Editable) {
HasValueSource component = (HasValueSource) columnComponent;
MetaPropertyPath propertyPath = ((EntityValueSource) component.getValueSource()).getMetaPropertyPath();
if (propertyPath != null) {
io.jmix.ui.component.Component.Editable editable = (io.jmix.ui.component.Component.Editable) component;
UiEntityAttributeContext attributeContext = new UiEntityAttributeContext(propertyPath);
accessManager.applyRegisteredConstraints(attributeContext);
editable.setEditable(editable.isEditable() && attributeContext.canModify());
}
}
}
use of io.jmix.ui.accesscontext.UiEntityAttributeContext in project jmix by jmix-framework.
the class DataComponents method createCollectionContainer.
/**
* Creates {@code CollectionPropertyContainer}.
*/
@SuppressWarnings("unchecked")
public <E> CollectionPropertyContainer<E> createCollectionContainer(Class<E> entityClass, InstanceContainer<?> masterContainer, String property) {
CollectionPropertyContainerImpl<E> container = new CollectionPropertyContainerImpl<>(metadata.getClass(entityClass), masterContainer, property);
autowire(container);
container.setSorter(sorterFactory.createCollectionPropertyContainerSorter(container));
UiEntityContext entityContext = new UiEntityContext(masterContainer.getEntityMetaClass());
accessManager.applyRegisteredConstraints(entityContext);
UiEntityAttributeContext attributeContext = new UiEntityAttributeContext(masterContainer.getEntityMetaClass(), property);
accessManager.applyRegisteredConstraints(attributeContext);
if (attributeContext.canView() && entityContext.isViewPermitted()) {
masterContainer.addItemChangeListener(e -> {
Object item = masterContainer.getItemOrNull();
container.setItems(item != null ? EntityValues.getValue(item, property) : null);
});
masterContainer.addItemPropertyChangeListener(e -> {
if (e.getProperty().equals(property)) {
container.setDisconnectedItems((Collection<E>) e.getValue());
}
});
}
return container;
}
use of io.jmix.ui.accesscontext.UiEntityAttributeContext in project jmix by jmix-framework.
the class DataComponents method createInstanceContainer.
/**
* Creates {@code InstancePropertyContainer}.
*/
@SuppressWarnings("unchecked")
public <E> InstancePropertyContainer<E> createInstanceContainer(Class<E> entityClass, InstanceContainer<?> masterContainer, String property) {
InstancePropertyContainerImpl<E> container = new InstancePropertyContainerImpl<>(metadata.getClass(entityClass), masterContainer, property);
autowire(container);
UiEntityContext entityContext = new UiEntityContext(masterContainer.getEntityMetaClass());
accessManager.applyRegisteredConstraints(entityContext);
UiEntityAttributeContext attributeContext = new UiEntityAttributeContext(masterContainer.getEntityMetaClass(), property);
accessManager.applyRegisteredConstraints(attributeContext);
if (entityContext.isViewPermitted() && attributeContext.canView()) {
masterContainer.addItemChangeListener(e -> {
Object item = masterContainer.getItemOrNull();
container.setItem(item != null ? EntityValues.getValue(item, property) : null);
});
masterContainer.addItemPropertyChangeListener(e -> {
if (e.getProperty().equals(property)) {
container.setItem((E) e.getValue());
}
});
}
return container;
}
use of io.jmix.ui.accesscontext.UiEntityAttributeContext in project jmix by jmix-framework.
the class ReadOnlyScreensSupport method isEditableConsideringDataBinding.
protected boolean isEditableConsideringDataBinding(Component component, boolean editable) {
boolean shouldBeEditable = true;
if (component instanceof HasValueSource && ((HasValueSource) component).getValueSource() != null) {
ValueSource valueSource = ((HasValueSource) component).getValueSource();
shouldBeEditable = !valueSource.isReadOnly();
if (valueSource instanceof EntityValueSource && ((EntityValueSource) valueSource).isDataModelSecurityEnabled()) {
MetaPropertyPath metaPropertyPath = ((EntityValueSource) valueSource).getMetaPropertyPath();
UiEntityAttributeContext attributeContext = new UiEntityAttributeContext(metaPropertyPath);
accessManager.applyRegisteredConstraints(attributeContext);
if (!attributeContext.canModify() || !attributeContext.canView()) {
shouldBeEditable = false;
}
}
}
return editable && shouldBeEditable;
}
Aggregations