All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.robobinding.property.PropertiesWithDependency Maven / Gradle / Ivy

package org.robobinding.property;

import org.robobinding.annotation.DependsOnStateOf;

/**
 *
 * @since 1.0
 * @version $Revision: 1.0 $
 * @author Cheng Wei
 */
public class PropertiesWithDependency {
    private final PropertyAccessorFactory propertyAccessorFactory;
    private final DependencyFactory dependencyFactory;
    private final PropertyFactory propertyFactory;
    
    public PropertiesWithDependency(PropertyAccessorFactory propertyAccessorFactory, DependencyFactory dependencyFactory, PropertyFactory propertyFactory) {
        this.propertyAccessorFactory = propertyAccessorFactory;
        this.dependencyFactory = dependencyFactory;
        this.propertyFactory = propertyFactory;
    }

    public PropertyValueModel createProperty(String propertyName) {
	PropertyAccessor propertyAccessor = propertyAccessorFactory.create(propertyName);
	AbstractProperty property = propertyFactory.createProperty(propertyAccessor);

	return convertAsDependencyPropertyIfNeccessary(property, propertyAccessor);
    }

    private PropertyValueModel convertAsDependencyPropertyIfNeccessary(
	    AbstractProperty property, PropertyAccessor propertyAccessor) {
	if (propertyAccessor.hasAnnotation(DependsOnStateOf.class)) {
	    Dependency dependency = dependencyFactory.create(propertyAccessor);
	    return new DependencyProperty(property, dependency);
	}
	
	return property;
    }

    public DataSetPropertyValueModel createDataSetProperty(String propertyName) {
	PropertyAccessor propertyAccessor = propertyAccessorFactory.create(propertyName);
	AbstractDataSetProperty dataSetProperty = propertyFactory.createDataSetProperty(propertyAccessor);
	return convertAsDataSetDependencyPropertyIfNeccessary(dataSetProperty, propertyAccessor);
    }
 
    private DataSetPropertyValueModel convertAsDataSetDependencyPropertyIfNeccessary(
	    AbstractDataSetProperty dataSetProperty, PropertyAccessor propertyAccessor) {
	if (propertyAccessor.hasAnnotation(DependsOnStateOf.class)) {
	    Dependency dependency = dependencyFactory.create(propertyAccessor);
	    DataSetDependencyProperty dataSetDependencyProperty = new DataSetDependencyProperty(dataSetProperty, dependency);
	    dependency.addListenerToDependentProperties(dataSetProperty);
	    return dataSetDependencyProperty;
	}
	return dataSetProperty;
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy