private AccessorNotFound selectAccessotNotFound(List<AccessorNotFound> accessorNotFounds) { for(AccessorNotFound accessorNotFound : accessorNotFounds) { if (!accessorNotFound.propertyMeta.isSelf()) return accessorNotFound; } return null; }
private AccessorNotFound selectAccessotNotFound(List<AccessorNotFound> accessorNotFounds) { for(AccessorNotFound accessorNotFound : accessorNotFounds) { if (!accessorNotFound.propertyMeta.isSelf()) return accessorNotFound; } return null; }
private int compare(PropertyMeta<?, ?> p1, PropertyMeta<?, ?> p2) { if (p1.isConstructorProperty()) { if (!p2.isConstructorProperty()) { return -1; } } else if (p2.isConstructorProperty()) { return 1; } else if (!p1.isSelf()) { if (p2.isSelf()) { return -1; } } else if (!p2.isSelf()) { return 1; } else if (!p1.isSubProperty()) { if (p2.isSubProperty()) { return -1; } } else if (!p2.isSubProperty()) { return 1; } return getterSetterCompare(p1, p2); }
private int compare(PropertyMeta<?, ?> p1, PropertyMeta<?, ?> p2) { if (p1.isConstructorProperty()) { if (!p2.isConstructorProperty()) { return -1; } } else if (p2.isConstructorProperty()) { return 1; } else if (!p1.isSelf()) { if (p2.isSelf()) { return -1; } } else if (!p2.isSelf()) { return 1; } else if (!p1.isSubProperty()) { if (p2.isSubProperty()) { return -1; } } else if (!p2.isSubProperty()) { return 1; } return getterSetterCompare(p1, p2); }
@Override public void found(final PropertyMeta propertyMeta, final Runnable selectionCallback, final PropertyMatchingScore score, TypeAffinityScorer typeAffinityScorer) { PropertyMeta subProperty; if (propertyMeta.isSelf()) { subProperty = indexedElement.getPropertyMeta(); } else { subProperty = new SubPropertyMeta(classMeta.getReflectionService(), indexedElement.getPropertyMeta(), propertyMeta); } matchingProperties.found(subProperty, new Runnable() { @Override public void run() { selectionCallback.run(); indexedElement.addProperty(propertyMeta); } }, score, typeAffinityScorer); } }, score.matches(indexedColumn.getIndexProperty()), true, propertyFinderTransformer, typeAffinityScorer, propertyFilter);
@Override public void found(final PropertyMeta propertyMeta, final Runnable selectionCallback, final PropertyMatchingScore score, TypeAffinityScorer typeAffinityScorer) { PropertyMeta subProperty; if (propertyMeta.isSelf()) { subProperty = indexedElement.getPropertyMeta(); } else { subProperty = new SubPropertyMeta(classMeta.getReflectionService(), indexedElement.getPropertyMeta(), propertyMeta); } matchingProperties.found(subProperty, new Runnable() { @Override public void run() { selectionCallback.run(); indexedElement.addProperty(propertyMeta); } }, score, typeAffinityScorer); } }, score.matches(indexedColumn.getIndexProperty()), true, propertyFinderTransformer, typeAffinityScorer, propertyFilter);
boolean needTransformer(PropertyMeta<T, ?> propertyMeta) { if (propertyMeta.isSubProperty()) { SubPropertyMeta sb = (SubPropertyMeta) propertyMeta; return needTransformer(sb.getOwnerProperty()) || needTransformer(sb.getSubProperty()); } else { return !propertyMeta.isSelf() && propertyMeta.getPropertyClassMeta().needTransformer(); } }
boolean needTransformer(PropertyMeta<T, ?> propertyMeta) { if (propertyMeta.isSubProperty()) { SubPropertyMeta sb = (SubPropertyMeta) propertyMeta; return needTransformer(sb.getOwnerProperty()) || needTransformer(sb.getSubProperty()); } else { return !propertyMeta.isSelf() && propertyMeta.getPropertyClassMeta().needTransformer(); } }
@Override public void found(final PropertyMeta propertyMeta, final Runnable selectionCallback, final PropertyMatchingScore score, TypeAffinityScorer typeAffinityScorer) { if (!element.hasProperty(propertyMeta)) { PropertyMeta subProperty; if (propertyMeta.isSelf()) { subProperty = element.getPropertyMeta(); } else { subProperty = new SubPropertyMeta(classMeta.getReflectionService(), element.getPropertyMeta(), propertyMeta); } foundProperty.found(subProperty, new Runnable() { @Override public void run() { element.addProperty(propertyMeta); selectionCallback.run(); } }, score, typeAffinityScorer); } } }, score.tupleIndex(i), true, propertyFinderTransformer, typeAffinityScorer, propertyFilter);
@Override public void found(final PropertyMeta propertyMeta, final Runnable selectionCallback, final PropertyMatchingScore score, TypeAffinityScorer typeAffinityScorer) { if (!element.hasProperty(propertyMeta)) { PropertyMeta subProperty; if (propertyMeta.isSelf()) { subProperty = element.getPropertyMeta(); } else { subProperty = new SubPropertyMeta(classMeta.getReflectionService(), element.getPropertyMeta(), propertyMeta); } foundProperty.found(subProperty, new Runnable() { @Override public void run() { element.addProperty(propertyMeta); selectionCallback.run(); } }, score, typeAffinityScorer); } } }, score.tupleIndex(i), true, propertyFinderTransformer, typeAffinityScorer, propertyFilter);
@Override public boolean test(PropertyMeta<?, ?> propertyMeta) { if (propertyMeta.isSelf()) { return true; } if (!NullSetter.isNull(propertyMeta.getSetter())) { return true; } if (propertyMeta.isConstructorProperty()) { return true; } if (propertyMeta.isSubProperty()) { SubPropertyMeta subPropertyMeta = (SubPropertyMeta) propertyMeta; if (subPropertyMeta.getOwnerProperty().isConstructorProperty() || !NullSetter.isNull(subPropertyMeta.getOwnerProperty().getSetter())) { return test(subPropertyMeta.getSubProperty()); } } return false; } }
@Override public boolean test(PropertyMeta<?, ?> propertyMeta) { if (propertyMeta.isSelf()) { return true; } if (!NullSetter.isNull(propertyMeta.getSetter())) { return true; } if (propertyMeta.isConstructorProperty()) { return true; } if (propertyMeta.isSubProperty()) { SubPropertyMeta subPropertyMeta = (SubPropertyMeta) propertyMeta; if (subPropertyMeta.getOwnerProperty().isConstructorProperty() || !NullSetter.isNull(subPropertyMeta.getOwnerProperty().getSetter())) { return test(subPropertyMeta.getSubProperty()); } } return false; } }
@Test public void testSelfRefInvalidation() { ClassMeta<DbObject> classMeta = ReflectionService.newInstance().getClassMeta(DbObject.class); PropertyFinder<DbObject> propertyFinder = classMeta.newPropertyFinder(); PropertyMeta<DbObject, ?> property = propertyFinder.findProperty(DefaultPropertyNameMatcher.of("dddd"), new Object[0], (TypeAffinity)null, propertyFilter); assertNotNull(property); assertTrue(property.isSelf()); assertTrue(property.isValid()); assertNull(propertyFinder.findProperty(DefaultPropertyNameMatcher.of("cccc"), new Object[0], (TypeAffinity)null, propertyFilter)); assertNotNull(propertyFinder.findProperty(DefaultPropertyNameMatcher.of("dddd"), new Object[0], (TypeAffinity)null, propertyFilter)); PropertyMeta<DbObject, ?> idProperty = propertyFinder.findProperty(DefaultPropertyNameMatcher.of("id"), new Object[0], (TypeAffinity)null, propertyFilter); assertNotNull(idProperty); assertFalse(idProperty.isSelf()); assertTrue(idProperty.isValid()); assertFalse(property.isValid()); }
@SuppressWarnings("unchecked") private <S, P> ContextualSetter<Appendable, ? super P> setterFromFactory(PropertyMapping<S, P, CsvColumnKey> pm) { ContextualSetter<Appendable, ? super P> setter = null; final SetterFactoryProperty setterFactoryProperty = pm.getColumnDefinition().lookFor(SetterFactoryProperty.class); if (setterFactoryProperty != null) { final SetterFactory<Appendable, PropertyMapping<S, P, CsvColumnKey>> setterFactory = (SetterFactory<Appendable, PropertyMapping<S, P, CsvColumnKey>>) setterFactoryProperty.getSetterFactory(); setter = ContextualSetterAdapter.of(setterFactory.getSetter(pm)); } if (setter == null) { if (!pm.getPropertyMeta().isSelf()) { final ClassMeta<P> classMeta = pm.getPropertyMeta().getPropertyClassMeta(); if (classMeta instanceof ObjectClassMeta) { ObjectClassMeta<P> ocm = (ObjectClassMeta<P>) classMeta; if (ocm.getNumberOfProperties() == 1) { PropertyMeta<P, ?> subProp = ocm.getFirstProperty(); ContextualSetter<Appendable, Object> subSetter = (ContextualSetter<Appendable, Object>) setterFromFactory(pm.propertyMeta(subProp)); if (subSetter != null) { setter = new ContextualSetterOnGetter<Appendable, Object, P>(subSetter, (Getter<P, Object>) subProp.getGetter()); } else { return new ObjectToStringSetter<P>(subProp.getGetter()); } } } } } return setter; }
@SuppressWarnings("unchecked") private <S, P> ContextualSetter<T, P> getSetterForTarget(PropertyMapping<S, ?, K> pm, ContextFactoryBuilder contextFactoryBuilder) { ContextualSetter<T, P> setter = ContextualSetterAdapter.of((Setter<T, P>) pm.getColumnDefinition().getCustomSetterTo(targetType)); final SetterFactory<T, PropertyMapping<?, ?, K>> customSetterFactory = (SetterFactory<T, PropertyMapping<?, ?, K>>) pm.getColumnDefinition().getCustomSetterFactoryTo(targetType); if (customSetterFactory != null) { setter = ContextualSetterAdapter.<T, P>of(customSetterFactory.<P>getSetter(pm)); } if (setter == null){ setter = setterFactory.getSetter(pm, contextFactoryBuilder); } if (setter == null) { if (!pm.getPropertyMeta().isSelf()) { final ClassMeta<?> propertyClassMeta = pm.getPropertyMeta().getPropertyClassMeta(); if (propertyClassMeta instanceof ObjectClassMeta) { ObjectClassMeta<P> ocm = (ObjectClassMeta<P>) propertyClassMeta; if (ocm.getNumberOfProperties() == 1) { PropertyMeta<P, ?> subProp = ocm.getFirstProperty(); ContextualSetter<T, Object> subSetter = getSetterForTarget(pm.propertyMeta(subProp), contextFactoryBuilder); if (subSetter != null) { return new ContextualSetterOnGetter<T, Object, P>(subSetter, (Getter<P, Object>) subProp.getGetter()); } } } } } return setter; }
@SuppressWarnings("unchecked") private <S, P> ContextualSetter<Appendable, ? super P> setterFromFactory(PropertyMapping<S, P, CsvColumnKey> pm) { ContextualSetter<Appendable, ? super P> setter = null; final SetterFactoryProperty setterFactoryProperty = pm.getColumnDefinition().lookFor(SetterFactoryProperty.class); if (setterFactoryProperty != null) { final SetterFactory<Appendable, PropertyMapping<S, P, CsvColumnKey>> setterFactory = (SetterFactory<Appendable, PropertyMapping<S, P, CsvColumnKey>>) setterFactoryProperty.getSetterFactory(); setter = ContextualSetterAdapter.of(setterFactory.getSetter(pm)); } if (setter == null) { if (!pm.getPropertyMeta().isSelf()) { final ClassMeta<P> classMeta = pm.getPropertyMeta().getPropertyClassMeta(); if (classMeta instanceof ObjectClassMeta) { ObjectClassMeta<P> ocm = (ObjectClassMeta<P>) classMeta; if (ocm.getNumberOfProperties() == 1) { PropertyMeta<P, ?> subProp = ocm.getFirstProperty(); ContextualSetter<Appendable, Object> subSetter = (ContextualSetter<Appendable, Object>) setterFromFactory(pm.propertyMeta(subProp)); if (subSetter != null) { setter = new ContextualSetterOnGetter<Appendable, Object, P>(subSetter, (Getter<P, Object>) subProp.getGetter()); } else { return new ObjectToStringSetter<P>(subProp.getGetter()); } } } } } return setter; }
@SuppressWarnings("unchecked") private <S, P> ContextualSetter<T, P> getSetterForTarget(PropertyMapping<S, ?, K> pm, ContextFactoryBuilder contextFactoryBuilder) { ContextualSetter<T, P> setter = ContextualSetterAdapter.of((Setter<T, P>) pm.getColumnDefinition().getCustomSetterTo(targetType)); final SetterFactory<T, PropertyMapping<?, ?, K>> customSetterFactory = (SetterFactory<T, PropertyMapping<?, ?, K>>) pm.getColumnDefinition().getCustomSetterFactoryTo(targetType); if (customSetterFactory != null) { setter = ContextualSetterAdapter.<T, P>of(customSetterFactory.<P>getSetter(pm)); } if (setter == null){ setter = setterFactory.getSetter(pm, contextFactoryBuilder); } if (setter == null) { if (!pm.getPropertyMeta().isSelf()) { final ClassMeta<?> propertyClassMeta = pm.getPropertyMeta().getPropertyClassMeta(); if (propertyClassMeta instanceof ObjectClassMeta) { ObjectClassMeta<P> ocm = (ObjectClassMeta<P>) propertyClassMeta; if (ocm.getNumberOfProperties() == 1) { PropertyMeta<P, ?> subProp = ocm.getFirstProperty(); ContextualSetter<T, Object> subSetter = getSetterForTarget(pm.propertyMeta(subProp), contextFactoryBuilder); if (subSetter != null) { return new ContextualSetterOnGetter<T, Object, P>(subSetter, (Getter<P, Object>) subProp.getGetter()); } } } } } return setter; }