
org.sfm.reflect.meta.TuplePropertyFinder Maven / Gradle / Ivy
package org.sfm.reflect.meta;
import org.sfm.reflect.Parameter;
import org.sfm.reflect.TypeHelper;
@SuppressWarnings({ "unchecked", "rawtypes" })
public class TuplePropertyFinder extends AbstractIndexPropertyFinder {
public TuplePropertyFinder(TupleClassMeta tupleClassMeta) {
super(tupleClassMeta);
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.getPropertyType());
return new IndexedElement(prop, classMeta);
}
private ConstructorPropertyMeta newConstructorPropertyMeta(TupleClassMeta tupleClassMeta, int i) {
Class tClass = TypeHelper.toClass(tupleClassMeta.getType());
final Parameter parameter = getEligibleInstantiatorDefinitions().get(0).getParameters()[i];
return new ConstructorPropertyMeta(parameter.getName(), tupleClassMeta.getReflectionService(),
parameter, 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, Object> property = pf.findProperty(propertyNameMatcher);
if (property != null) {
if (!element.hasProperty(property)) {
return new IndexedColumn(i , propertyNameMatcher);
}
}
}
}
return null;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy