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

org.sfm.reflect.meta.TuplePropertyFinder Maven / Gradle / Ivy

package org.sfm.reflect.meta;

import org.sfm.reflect.ConstructorDefinition;
import org.sfm.reflect.ConstructorParameter;
import org.sfm.reflect.TypeHelper;

import java.util.List;

@SuppressWarnings({ "unchecked", "rawtypes" })
public class TuplePropertyFinder extends AbstractIndexPropertyFinder {

    private final List> constructorDefinitions;

    public TuplePropertyFinder(TupleClassMeta tupleClassMeta) {
        super(tupleClassMeta);
        this.constructorDefinitions = tupleClassMeta.getConstructorDefinitions();

        for(int i = 0; i < tupleClassMeta.getTupleSize(); i++) {
			elements.add(newIndexedElement(tupleClassMeta, i));
		}
	}

	private  IndexedElement newIndexedElement(TupleClassMeta tupleClassMeta, int i) {
		ConstructorPropertyMeta prop =
                newConstructorPropertyMeta(tupleClassMeta, i);
		ClassMeta classMeta = tupleClassMeta.getReflectionService().getClassMeta(prop.getType(), false);
		return new IndexedElement(prop, classMeta);
	}

    private  ConstructorPropertyMeta newConstructorPropertyMeta(TupleClassMeta tupleClassMeta, int i) {
        Class tClass = TypeHelper.toClass(tupleClassMeta.getType());

        final ConstructorParameter constructorParameter = constructorDefinitions.get(0).getParameters()[i];

        return new ConstructorPropertyMeta(constructorParameter.getName(), tupleClassMeta.getReflectionService(),
                constructorParameter, tClass);
    }

    @Override
    protected boolean isValidIndex(IndexedColumn indexedColumn) {
        return indexedColumn.getIndexValue() < elements.size();
    }
    @Override
    protected IndexedElement getIndexedElement(IndexedColumn indexedColumn) {
        return elements.get(indexedColumn.getIndexValue());
    }

    protected IndexedColumn extrapolateIndex(PropertyNameMatcher propertyNameMatcher) {
        for(int i = 0; i < elements.size(); i++) {
            IndexedElement element = elements.get(i);

            if (element.getElementClassMeta() != null) {
                PropertyFinder pf = element.getPropertyFinder();
                PropertyMeta property = pf.findProperty(propertyNameMatcher);
                if (property != null) {
                    if (!element.hasProperty(property)) {
                        return new IndexedColumn(i , propertyNameMatcher);
                    }
                }

            }
        }
        return null;
    }

    @Override
	public List> getEligibleConstructorDefinitions() {
		return constructorDefinitions;
	}

    @Override
    public  ConstructorPropertyMeta findConstructor(ConstructorDefinition constructorDefinition) {
        return null;
    }

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy