Search in sources :

Example 1 with Enumeration

use of com.haulmont.chile.core.datatypes.Enumeration in project cuba by cuba-platform.

the class DesktopAbstractOptionsField method setDatasource.

@Override
public void setDatasource(Datasource datasource, String property) {
    this.datasource = datasource;
    if (datasource == null) {
        setValue(null);
        return;
    }
    MetaClass metaClass = datasource.getMetaClass();
    resolveMetaPropertyPath(metaClass, property);
    itemChangeListener = e -> {
        if (updatingInstance)
            return;
        Object value = InstanceUtils.getValueEx(e.getItem(), metaPropertyPath.getPath());
        updateComponent(value);
        fireChangeListeners(value);
    };
    // noinspection unchecked
    datasource.addItemChangeListener(new WeakItemChangeListener(datasource, itemChangeListener));
    itemPropertyChangeListener = e -> {
        if (updatingInstance)
            return;
        if (e.getProperty().equals(metaPropertyPath.toString())) {
            updateComponent(e.getValue());
            fireChangeListeners(e.getValue());
        }
    };
    // noinspection unchecked
    datasource.addItemPropertyChangeListener(new WeakItemPropertyChangeListener(datasource, itemPropertyChangeListener));
    initRequired(metaPropertyPath);
    if (metaProperty.getRange().isEnum()) {
        Enumeration enumeration = metaProperty.getRange().asEnumeration();
        @SuppressWarnings("unchecked") Class<Enum> javaClass = enumeration.getJavaClass();
        setOptionsList(Arrays.asList(javaClass.getEnumConstants()));
        setCaptionMode(CaptionMode.ITEM);
    }
    if (DynamicAttributesUtils.isDynamicAttribute(metaProperty)) {
        CategoryAttribute categoryAttribute = DynamicAttributesUtils.getCategoryAttribute(metaProperty);
        if (categoryAttribute != null && categoryAttribute.getDataType() == PropertyType.ENUMERATION) {
            setOptionsMap(categoryAttribute.getLocalizedEnumerationMap());
        }
    }
    if ((datasource.getState() == Datasource.State.VALID) && (datasource.getItem() != null)) {
        Object newValue = InstanceUtils.getValueEx(datasource.getItem(), metaPropertyPath.getPath());
        updateComponent(newValue);
        fireChangeListeners(newValue);
    }
    if (metaProperty.isReadOnly()) {
        setEditable(false);
    }
    handleFilteredAttributes(this, this.datasource, metaPropertyPath);
    securityItemChangeListener = e -> handleFilteredAttributes(this, this.datasource, metaPropertyPath);
    // noinspection unchecked
    this.datasource.addItemChangeListener(new WeakItemChangeListener(this.datasource, securityItemChangeListener));
    initBeanValidator();
}
Also used : WeakItemChangeListener(com.haulmont.cuba.gui.data.impl.WeakItemChangeListener) Enumeration(com.haulmont.chile.core.datatypes.Enumeration) CategoryAttribute(com.haulmont.cuba.core.entity.CategoryAttribute) MetaClass(com.haulmont.chile.core.model.MetaClass) WeakItemPropertyChangeListener(com.haulmont.cuba.gui.data.impl.WeakItemPropertyChangeListener)

Example 2 with Enumeration

use of com.haulmont.chile.core.datatypes.Enumeration in project cuba by cuba-platform.

the class ValueDatasourceDelegate method convertEnumValues.

protected void convertEnumValues(KeyValueEntity entity, List<MetaProperty> enumProperties) {
    try {
        for (MetaProperty enumProperty : enumProperties) {
            Object enumValue = entity.getValue(enumProperty.getName());
            if (enumValue != null) {
                Enumeration enumeration = enumProperty.getRange().asEnumeration();
                entity.setValue(enumProperty.getName(), enumeration.parse(String.valueOf(enumValue)));
            }
        }
    } catch (ParseException e) {
        throw new RuntimeException("Unable to convert enum id to enum instance for EnumClass");
    }
}
Also used : Enumeration(com.haulmont.chile.core.datatypes.Enumeration) ParseException(java.text.ParseException) MetaProperty(com.haulmont.chile.core.model.MetaProperty) KeyValueMetaProperty(com.haulmont.cuba.core.app.keyvalue.KeyValueMetaProperty)

Example 3 with Enumeration

use of com.haulmont.chile.core.datatypes.Enumeration in project cuba by cuba-platform.

the class WebAbstractOptionsField method setDatasource.

@Override
public void setDatasource(Datasource datasource, String property) {
    if ((datasource == null && property != null) || (datasource != null && property == null))
        throw new IllegalArgumentException("Datasource and property should be either null or not null at the same time");
    if (datasource == this.datasource && ((metaPropertyPath != null && metaPropertyPath.toString().equals(property)) || (metaPropertyPath == null && property == null)))
        return;
    if (this.datasource != null) {
        metaProperty = null;
        metaPropertyPath = null;
        component.setPropertyDataSource(null);
        // noinspection unchecked
        this.datasource.removeItemChangeListener(securityWeakItemChangeListener);
        securityWeakItemChangeListener = null;
        this.datasource = null;
        if (itemWrapper != null) {
            itemWrapper.unsubscribe();
        }
        disableBeanValidator();
    }
    if (datasource != null) {
        // noinspection unchecked
        this.datasource = datasource;
        MetaClass metaClass = datasource.getMetaClass();
        resolveMetaPropertyPath(metaClass, property);
        if (metaProperty.getRange().getCardinality() != null) {
            setMultiSelect(metaProperty.getRange().getCardinality().isMany());
        }
        itemWrapper = createDatasourceWrapper(datasource, Collections.singleton(metaPropertyPath));
        Property itemProperty = itemWrapper.getItemProperty(metaPropertyPath);
        initRequired(metaPropertyPath);
        if (metaProperty.getRange().isEnum()) {
            Enumeration enumeration = metaProperty.getRange().asEnumeration();
            List options = Arrays.asList(enumeration.getJavaClass().getEnumConstants());
            setComponentContainerDs(createEnumContainer(options));
            setCaptionMode(CaptionMode.ITEM);
        }
        if (DynamicAttributesUtils.isDynamicAttribute(metaProperty)) {
            CategoryAttribute categoryAttribute = DynamicAttributesUtils.getCategoryAttribute(metaProperty);
            if (categoryAttribute != null && categoryAttribute.getDataType() == PropertyType.ENUMERATION) {
                setOptionsMap(categoryAttribute.getLocalizedEnumerationMap());
            }
        }
        component.setPropertyDataSource(itemProperty);
        if (metaProperty.isReadOnly()) {
            setEditable(false);
        }
        handleFilteredAttributes(this, this.datasource, metaPropertyPath);
        securityItemChangeListener = e -> handleFilteredAttributes(this, this.datasource, metaPropertyPath);
        securityWeakItemChangeListener = new WeakItemChangeListener(datasource, securityItemChangeListener);
        // noinspection unchecked
        this.datasource.addItemChangeListener(securityWeakItemChangeListener);
        initBeanValidator();
    }
}
Also used : WeakItemChangeListener(com.haulmont.cuba.gui.data.impl.WeakItemChangeListener) Enumeration(com.haulmont.chile.core.datatypes.Enumeration) CategoryAttribute(com.haulmont.cuba.core.entity.CategoryAttribute) MetaClass(com.haulmont.chile.core.model.MetaClass) Property(com.vaadin.data.Property)

Aggregations

Enumeration (com.haulmont.chile.core.datatypes.Enumeration)3 MetaClass (com.haulmont.chile.core.model.MetaClass)2 CategoryAttribute (com.haulmont.cuba.core.entity.CategoryAttribute)2 WeakItemChangeListener (com.haulmont.cuba.gui.data.impl.WeakItemChangeListener)2 MetaProperty (com.haulmont.chile.core.model.MetaProperty)1 KeyValueMetaProperty (com.haulmont.cuba.core.app.keyvalue.KeyValueMetaProperty)1 WeakItemPropertyChangeListener (com.haulmont.cuba.gui.data.impl.WeakItemPropertyChangeListener)1 Property (com.vaadin.data.Property)1 ParseException (java.text.ParseException)1