Search in sources :

Example 6 with Nested

use of com.haulmont.cuba.gui.model.Nested in project cuba by cuba-platform.

the class RemoveOperation method commitIfNeeded.

protected void commitIfNeeded(Collection<? extends Entity> entitiesToRemove, CollectionContainer container, ScreenData screenData) {
    List<? extends Entity> entitiesToCommit = entitiesToRemove.stream().filter(entity -> !entityStates.isNew(entity)).collect(Collectors.toList());
    boolean needCommit = !entitiesToCommit.isEmpty();
    if (container instanceof Nested) {
        InstanceContainer masterContainer = ((Nested) container).getMaster();
        String property = ((Nested) container).getProperty();
        MetaClass masterMetaClass = masterContainer.getEntityMetaClass();
        MetaProperty metaProperty = masterMetaClass.getPropertyNN(property);
        needCommit = needCommit && (metaProperty.getType() != MetaProperty.Type.COMPOSITION);
    }
    if (needCommit) {
        CommitContext commitContext = new CommitContext();
        for (Entity entity : entitiesToCommit) {
            commitContext.addInstanceToRemove(entity);
        }
        dataManager.commit(commitContext);
        for (Entity entity : entitiesToRemove) {
            screenData.getDataContext().evict(entity);
        }
    } else {
        for (Entity entity : entitiesToRemove) {
            screenData.getDataContext().remove(entity);
        }
    }
}
Also used : ListComponent(com.haulmont.cuba.gui.components.ListComponent) UiControllerUtils.getScreenContext(com.haulmont.cuba.gui.screen.UiControllerUtils.getScreenContext) java.util(java.util) DataUnit(com.haulmont.cuba.gui.components.data.DataUnit) MetaProperty(com.haulmont.chile.core.model.MetaProperty) Table(com.haulmont.cuba.gui.components.Table) ScreenData(com.haulmont.cuba.gui.model.ScreenData) Focusable(com.haulmont.cuba.gui.components.Component.Focusable) ContainerDataUnit(com.haulmont.cuba.gui.components.data.meta.ContainerDataUnit) InstanceContainer(com.haulmont.cuba.gui.model.InstanceContainer) Collectors(java.util.stream.Collectors) MetaClass(com.haulmont.chile.core.model.MetaClass) com.haulmont.cuba.core.global(com.haulmont.cuba.core.global) Inject(javax.inject.Inject) Consumer(java.util.function.Consumer) Component(org.springframework.stereotype.Component) Nested(com.haulmont.cuba.gui.model.Nested) WindowConfig(com.haulmont.cuba.gui.config.WindowConfig) com.haulmont.cuba.gui.screen(com.haulmont.cuba.gui.screen) DataGrid(com.haulmont.cuba.gui.components.DataGrid) DialogAction(com.haulmont.cuba.gui.components.DialogAction) Preconditions.checkNotNullArgument(com.haulmont.bali.util.Preconditions.checkNotNullArgument) Entity(com.haulmont.cuba.core.entity.Entity) CollectionContainer(com.haulmont.cuba.gui.model.CollectionContainer) Entity(com.haulmont.cuba.core.entity.Entity) MetaClass(com.haulmont.chile.core.model.MetaClass) Nested(com.haulmont.cuba.gui.model.Nested) InstanceContainer(com.haulmont.cuba.gui.model.InstanceContainer) MetaProperty(com.haulmont.chile.core.model.MetaProperty)

Example 7 with Nested

use of com.haulmont.cuba.gui.model.Nested in project cuba by cuba-platform.

the class RemoveOperation method excludeItems.

@SuppressWarnings("unchecked")
protected <E extends Entity> void excludeItems(RemoveBuilder<E> builder, List<E> selectedItems) {
    CollectionContainer<E> container = getCollectionContainer(builder);
    if (!(container instanceof Nested)) {
        throw new IllegalArgumentException("Exclude action supports only Nested containers");
    }
    InstanceContainer masterDc = ((Nested) container).getMaster();
    String property = ((Nested) container).getProperty();
    Entity masterItem = masterDc.getItem();
    MetaProperty metaProperty = masterItem.getMetaClass().getPropertyNN(property);
    MetaProperty inverseMetaProperty = metaProperty.getInverse();
    if (inverseMetaProperty != null && !inverseMetaProperty.getRange().getCardinality().isMany()) {
        Class inversePropClass = extendedEntities.getEffectiveClass(inverseMetaProperty.getDomain());
        Class dcClass = extendedEntities.getEffectiveClass(container.getEntityMetaClass());
        if (inversePropClass.isAssignableFrom(dcClass)) {
            // update reference for One-To-Many
            for (Entity item : selectedItems) {
                item.setValue(inverseMetaProperty.getName(), null);
            }
        }
    }
    container.getMutableItems().removeAll(selectedItems);
    focusListComponent(builder);
}
Also used : Entity(com.haulmont.cuba.core.entity.Entity) Nested(com.haulmont.cuba.gui.model.Nested) InstanceContainer(com.haulmont.cuba.gui.model.InstanceContainer) MetaClass(com.haulmont.chile.core.model.MetaClass) MetaProperty(com.haulmont.chile.core.model.MetaProperty)

Example 8 with Nested

use of com.haulmont.cuba.gui.model.Nested in project cuba by cuba-platform.

the class ValueBinder method bind.

public <V> ValueBinding<V> bind(HasValue<V> component, ValueSource<V> valueSource) {
    if (valueSource instanceof BeanLocatorAware) {
        ((BeanLocatorAware) valueSource).setBeanLocator(beanLocator);
    }
    ValueBindingImpl<V> binding = new ValueBindingImpl<>(component, valueSource);
    if (component instanceof Component.Editable) {
        ((Component.Editable) component).setEditable(!valueSource.isReadOnly());
    }
    if (valueSource instanceof EntityValueSource) {
        EntityValueSource entityValueSource = (EntityValueSource) valueSource;
        MetaPropertyPath metaPropertyPath = entityValueSource.getMetaPropertyPath();
        if (component instanceof Field) {
            initRequired((Field) component, metaPropertyPath);
            initBeanValidator((Field<?>) component, metaPropertyPath);
        }
        if (entityValueSource.isDataModelSecurityEnabled()) {
            if (component instanceof Component.Editable) {
                MetaClass metaClass = entityValueSource.getEntityMetaClass();
                boolean permittedIfEmbedded = true;
                if (entityValueSource instanceof ContainerValueSource) {
                    InstanceContainer container = ((ContainerValueSource) entityValueSource).getContainer();
                    if (container instanceof Nested && metadataTools.isEmbeddable(metaClass)) {
                        String embeddedProperty = ((Nested) container).getProperty();
                        MetaClass masterMetaClass = ((Nested) container).getMaster().getEntityMetaClass();
                        permittedIfEmbedded = security.isEntityAttrUpdatePermitted(masterMetaClass, embeddedProperty);
                    }
                    if (permittedIfEmbedded && metaPropertyPath.length() > 1) {
                        for (MetaProperty property : metaPropertyPath.getMetaProperties()) {
                            if (metadataTools.isEmbedded(property) && !security.isEntityAttrUpdatePermitted(property.getDomain(), property.getName())) {
                                permittedIfEmbedded = false;
                                break;
                            }
                        }
                    }
                }
                if (!security.isEntityAttrUpdatePermitted(metaPropertyPath) || !permittedIfEmbedded) {
                    ((Component.Editable) component).setEditable(false);
                }
            }
            if (!security.isEntityAttrReadPermitted(metaPropertyPath)) {
                component.setVisible(false);
            }
        }
    }
    binding.bind();
    return binding;
}
Also used : EntityValueSource(com.haulmont.cuba.gui.components.data.meta.EntityValueSource) MetaPropertyPath(com.haulmont.chile.core.model.MetaPropertyPath) Nested(com.haulmont.cuba.gui.model.Nested) InstanceContainer(com.haulmont.cuba.gui.model.InstanceContainer) Field(com.haulmont.cuba.gui.components.Field) MetaClass(com.haulmont.chile.core.model.MetaClass) BeanLocatorAware(com.haulmont.cuba.core.sys.BeanLocatorAware) MetaProperty(com.haulmont.chile.core.model.MetaProperty)

Aggregations

Nested (com.haulmont.cuba.gui.model.Nested)8 MetaProperty (com.haulmont.chile.core.model.MetaProperty)7 MetaClass (com.haulmont.chile.core.model.MetaClass)6 InstanceContainer (com.haulmont.cuba.gui.model.InstanceContainer)5 ContainerDataUnit (com.haulmont.cuba.gui.components.data.meta.ContainerDataUnit)4 Entity (com.haulmont.cuba.core.entity.Entity)3 Preconditions.checkNotNullArgument (com.haulmont.bali.util.Preconditions.checkNotNullArgument)1 MetaPropertyPath (com.haulmont.chile.core.model.MetaPropertyPath)1 com.haulmont.cuba.core.global (com.haulmont.cuba.core.global)1 BeanLocatorAware (com.haulmont.cuba.core.sys.BeanLocatorAware)1 Focusable (com.haulmont.cuba.gui.components.Component.Focusable)1 DataGrid (com.haulmont.cuba.gui.components.DataGrid)1 DialogAction (com.haulmont.cuba.gui.components.DialogAction)1 Field (com.haulmont.cuba.gui.components.Field)1 ListComponent (com.haulmont.cuba.gui.components.ListComponent)1 Table (com.haulmont.cuba.gui.components.Table)1 DataUnit (com.haulmont.cuba.gui.components.data.DataUnit)1 EntityValueSource (com.haulmont.cuba.gui.components.data.meta.EntityValueSource)1 WindowConfig (com.haulmont.cuba.gui.config.WindowConfig)1 CollectionContainer (com.haulmont.cuba.gui.model.CollectionContainer)1