Example usage for org.springframework.util ReflectionUtils doWithFields

List of usage examples for org.springframework.util ReflectionUtils doWithFields

Introduction

In this page you can find the example usage for org.springframework.util ReflectionUtils doWithFields.

Prototype

public static void doWithFields(Class<?> clazz, FieldCallback fc) 

Source Link

Document

Invoke the given callback on all fields in the target class, going up the class hierarchy to get all declared fields.

Usage

From source file:com.kcs.core.utilities.Utility.java

public static void nullToEmptyString(final Object obj) {
    ReflectionUtils.doWithFields(obj.getClass(), new ReflectionUtils.FieldCallback() {
        @Override//  w  ww .j  a v a2 s .  c  o  m
        public void doWith(final Field field) throws IllegalArgumentException, IllegalAccessException {
            field.setAccessible(true);
            if (Utility.isNull(field.get(obj))) {
                Class<?> clazz = field.getType();
                if (clazz == String.class) {
                    field.set(obj, StringUtil.BLANK);
                }
            }
        }
    });
}

From source file:org.apache.camel.spring.postprocessor.MagicAnnotationPostProcessor.java

@Override
public boolean postProcessAfterInstantiation(final Object bean, final String beanName) throws BeansException {
    ReflectionUtils.doWithFields(bean.getClass(), new ReflectionUtils.FieldCallback() {
        public void doWith(Field field) throws IllegalArgumentException, IllegalAccessException {
            MagicAnnotation annotation = field.getAnnotation(MagicAnnotation.class);
            if (annotation != null && field.getType() == String.class) {
                log.info("Found MagicAnnotation on field " + field + " of class " + bean.getClass());

                ReflectionUtils.makeAccessible(field);
                field.set(bean, annotation.value());
            }/*  w  ww  . jav a  2s .  c  o  m*/
        }
    });

    return true;
}

From source file:org.apache.dubbo.config.spring.beans.factory.annotation.CompatibleReferenceAnnotationBeanPostProcessor.java

/**
 * Finds {@link InjectionMetadata.InjectedElement} Metadata from annotated {@link Reference @Reference} fields
 *
 * @param beanClass The {@link Class} of Bean
 * @return non-null {@link List}//from   ww w  .j a  v a  2s. c  o m
 */
private List<ReferenceFieldElement> findFieldReferenceMetadata(final Class<?> beanClass) {

    final List<ReferenceFieldElement> elements = new LinkedList<ReferenceFieldElement>();

    ReflectionUtils.doWithFields(beanClass, new ReflectionUtils.FieldCallback() {
        @Override
        public void doWith(Field field) throws IllegalArgumentException, IllegalAccessException {

            Reference reference = getAnnotation(field, Reference.class);

            if (reference != null) {

                if (Modifier.isStatic(field.getModifiers())) {
                    if (logger.isWarnEnabled()) {
                        logger.warn("@Reference annotation is not supported on static fields: " + field);
                    }
                    return;
                }

                elements.add(new ReferenceFieldElement(field, reference));
            }

        }
    });

    return elements;

}

From source file:org.compass.spring.support.CompassContextBeanPostProcessor.java

private synchronized List<AnnotatedMember> findClassMetadata(Class<? extends Object> clazz) {
    List<AnnotatedMember> metadata = this.classMetadata.get(clazz);
    if (metadata == null) {
        final List<AnnotatedMember> newMetadata = new LinkedList<AnnotatedMember>();

        ReflectionUtils.doWithFields(clazz, new ReflectionUtils.FieldCallback() {
            public void doWith(Field f) {
                addIfPresent(newMetadata, f);
            }// www .  j a v  a2s  . co m
        });

        // TODO is it correct to walk up the hierarchy for methods? Otherwise inheritance
        // is implied? CL to resolve
        ReflectionUtils.doWithMethods(clazz, new ReflectionUtils.MethodCallback() {
            public void doWith(Method m) {
                addIfPresent(newMetadata, m);
            }
        });

        metadata = newMetadata;
        this.classMetadata.put(clazz, metadata);
    }
    return metadata;
}

From source file:org.lexevs.dao.database.utility.DaoUtility.java

public static void updateBean(final Object changes, Object beanToUpdate) {
    final String asReferenceSuffix = "AsReference";

    final List<String> nullProperties = new ArrayList<String>();

    ReflectionUtils.doWithFields(changes.getClass(), new FieldCallback() {

        @Override/*from   www .  jav a2s .  c o m*/
        public void doWith(Field field) throws IllegalArgumentException, IllegalAccessException {
            field.setAccessible(true);
            Object value = field.get(changes);
            if (value == null) {
                nullProperties.add(removeLeadingUnderscore(field.getName()));
            }
            if (value instanceof Collection && ((Collection<?>) value).size() == 0) {
                nullProperties.add(removeTrailingList(removeLeadingUnderscore(field.getName())));
                nullProperties
                        .add(removeTrailingList(removeLeadingUnderscore(field.getName())) + asReferenceSuffix);
            }
        }
    });

    BeanUtils.copyProperties(changes, beanToUpdate, nullProperties.toArray(new String[nullProperties.size()]));
}

From source file:org.openlegacy.support.DefaultRegistryLoader.java

protected void fillEntityReferences(final EntitiesRegistry<?, ?, ?> entitiesRegistry,
        final EntityDefinition<?> entityDefinition) {
    if (entityDefinition == null) {
        return;//www .  j  a v a2s . c o m
    }
    Collection<?> parts = entityDefinition.getPartsDefinitions().values();
    for (Object object : parts) {
        final PartEntityDefinition<?> part = (PartEntityDefinition<?>) object;

        ReflectionUtils.doWithFields(part.getPartClass(), new FieldCallback() {

            @Override
            public void doWith(Field field) {
                FieldDefinition fieldDefinition = part.getFieldsDefinitions()
                        .get(MessageFormat.format("{0}.{1}", part.getPartName(), field.getName()));
                assignFieldWithValues(entitiesRegistry, fieldDefinition, field);

                if (TypesUtil.isPrimitive(field.getType())) {
                    return;
                }
                if (List.class.isAssignableFrom(field.getType())) {
                    return;
                }
            }

        });
    }
    ReflectionUtils.doWithFields(entityDefinition.getEntityClass(), new FieldCallback() {

        @Override
        public void doWith(Field field) {
            FieldDefinition fieldDefinition = entityDefinition.getFieldsDefinitions().get(field.getName());
            assignFieldWithValues(entitiesRegistry, fieldDefinition, field);

            if (TypesUtil.isPrimitive(field.getType())) {
                return;
            }
            if (List.class.isAssignableFrom(field.getType())) {
                return;
            }
            EntityDefinition<?> childEntity = entitiesRegistry.get(field.getType());
            if (childEntity != null) {
                entityDefinition.getChildEntitiesDefinitions().add(childEntity);
            }

        }
    });

}

From source file:org.openlegacy.support.DefaultRegistryLoader.java

private static void handleEntityAnnotationFields(
        final Collection<FieldAnnotationsLoader> fieldAnnotationLoadersCollection,
        final EntitiesRegistry<?, ?, ?> entitiesRegistry, final Class<?> beanClass) {
    final List<FieldAnnotationsLoader> fieldAnnotationLoaders = sortFieldAnnoationLoaders(
            fieldAnnotationLoadersCollection);

    final CounterContainer counterContainer = new CounterContainer();

    ReflectionUtils.doWithFields(beanClass, new FieldCallback() {

        @Override/* ww  w . j av  a  2  s  . c  o m*/
        public void doWith(Field field) {
            loadDefinitionFromAnnotations(entitiesRegistry, beanClass, fieldAnnotationLoaders, field);
            counterContainer.counter++;
        }

        private void loadDefinitionFromAnnotations(final EntitiesRegistry<?, ?, ?> entitiesRegistry,
                final Class<?> beanClass, final Collection<FieldAnnotationsLoader> fieldAnnotationLoaders,
                Field field) {
            Annotation[] annotations = field.getAnnotations();
            for (FieldAnnotationsLoader fieldAnnotationsLoader : fieldAnnotationLoaders) {
                for (Annotation annotation : annotations) {
                    if (fieldAnnotationsLoader.match(annotation)) {
                        if (logger.isDebugEnabled()) {
                            logger.debug(MessageFormat.format(
                                    "Loading annotation {0} for field {1} in entity {2} into registry",
                                    annotation.annotationType().getSimpleName(), field.getName(), beanClass));
                        }
                        fieldAnnotationsLoader.load(entitiesRegistry, field, annotation, beanClass,
                                counterContainer.counter);
                    }
                }
            }
        }

    });

}

From source file:org.openlegacy.support.DefaultRegistryLoader.java

private static void handleEntityFields(final Collection<FieldLoader> fieldLoaders,
        final EntitiesRegistry<?, ?, ?> entitiesRegistry, final Class<?> beanClass) {

    final CounterContainer counterContainer = new CounterContainer();

    ReflectionUtils.doWithFields(beanClass, new FieldCallback() {

        @Override//ww w. j  a  v a 2s. co  m
        public void doWith(Field field) {
            loadDefinition(entitiesRegistry, beanClass, fieldLoaders, field);
            // If the direction is NONE, do not increment the field order counter
            if (field.isAnnotationPresent(RpcField.class)) {
                RpcField rpcFieldAnnotation = field.getAnnotation(RpcField.class);
                if (rpcFieldAnnotation.direction() == Direction.NONE) {
                    return;
                }
            }
            counterContainer.counter++;
        }

        private void loadDefinition(final EntitiesRegistry<?, ?, ?> entitiesRegistry, final Class<?> beanClass,
                final Collection<FieldLoader> fieldLoaders, Field field) {
            for (FieldLoader fieldLoader : fieldLoaders) {
                if (fieldLoader.match(entitiesRegistry, field)) {
                    if (logger.isDebugEnabled()) {
                        logger.debug(
                                MessageFormat.format("Loading field {0} setting for entity {1} into registry",
                                        field.getName(), beanClass));
                    }
                    fieldLoader.load(entitiesRegistry, field, beanClass, counterContainer.counter);
                }
            }
        }

    });
}

From source file:org.openspaces.core.context.GigaSpaceContextBeanPostProcessor.java

private synchronized List<AnnotatedMember> findClassMetadata(Class<?> clazz) {
    List<AnnotatedMember> metadata = this.classMetadata.get(clazz);
    if (metadata == null) {
        final List<AnnotatedMember> newMetadata = new LinkedList<AnnotatedMember>();

        ReflectionUtils.doWithFields(clazz, new ReflectionUtils.FieldCallback() {
            public void doWith(Field f) {
                addIfPresent(newMetadata, f);
            }/*from  w  ww  .  j  a  va 2  s. co  m*/
        });

        ReflectionUtils.doWithMethods(clazz, new ReflectionUtils.MethodCallback() {
            public void doWith(Method m) {
                addIfPresent(newMetadata, m);
            }
        });

        metadata = newMetadata;
        this.classMetadata.put(clazz, metadata);
    }
    return metadata;
}

From source file:org.openspaces.remoting.RemotingAnnotationBeanPostProcessor.java

@Override
public boolean postProcessAfterInstantiation(final Object bean, String beanName) throws BeansException {
    Class beanClass = AopUtils.getTargetClass(bean);
    if (beanClass == null) {
        return true;
    }//from  w w w . j  a  va2  s  . co m
    ReflectionUtils.doWithFields(beanClass, new ReflectionUtils.FieldCallback() {
        public void doWith(Field field) throws IllegalArgumentException, IllegalAccessException {
            ExecutorScriptingExecutor executorScriptingExecutor = field
                    .getAnnotation(ExecutorScriptingExecutor.class);
            if (executorScriptingExecutor != null) {
                ExecutorSpaceRemotingProxyFactoryBean factoryBean = new ExecutorSpaceRemotingProxyFactoryBean();
                factoryBean.setGigaSpace(findGigaSpaceByName(executorScriptingExecutor.gigaSpace()));
                factoryBean.setTimeout(executorScriptingExecutor.timeout());
                factoryBean.setMetaArgumentsHandler(new ScriptingMetaArgumentsHandler());
                factoryBean.setRemoteInvocationAspect(new LazyLoadingRemoteInvocationAspect());
                factoryBean.setRemoteRoutingHandler(new ScriptingRemoteRoutingHandler());
                factoryBean.setServiceInterface(ScriptingExecutor.class);
                factoryBean.afterPropertiesSet();
                field.setAccessible(true);
                field.set(bean, factoryBean.getObject());
            }
            EventDrivenScriptingExecutor eventDrivenScriptingExecutor = field
                    .getAnnotation(EventDrivenScriptingExecutor.class);
            if (eventDrivenScriptingExecutor != null) {
                EventDrivenSpaceRemotingProxyFactoryBean factoryBean = new EventDrivenSpaceRemotingProxyFactoryBean();
                factoryBean.setTimeout(eventDrivenScriptingExecutor.timeout());
                factoryBean.setFifo(eventDrivenScriptingExecutor.fifo());
                factoryBean.setGigaSpace(findGigaSpaceByName(eventDrivenScriptingExecutor.gigaSpace()));
                factoryBean.setMetaArgumentsHandler(new ScriptingMetaArgumentsHandler());
                factoryBean.setRemoteInvocationAspect(new LazyLoadingRemoteInvocationAspect());
                factoryBean.setRemoteRoutingHandler(new ScriptingRemoteRoutingHandler());
                factoryBean.setServiceInterface(ScriptingExecutor.class);
                factoryBean.afterPropertiesSet();
                field.setAccessible(true);
                field.set(bean, factoryBean.getObject());
            }
            EventDrivenProxy eventDrivenProxy = field.getAnnotation(EventDrivenProxy.class);
            if (eventDrivenProxy != null) {
                EventDrivenSpaceRemotingProxyFactoryBean factoryBean = new EventDrivenSpaceRemotingProxyFactoryBean();
                factoryBean.setTimeout(eventDrivenProxy.timeout());
                factoryBean.setFifo(eventDrivenProxy.fifo());
                factoryBean.setGigaSpace(findGigaSpaceByName(eventDrivenProxy.gigaSpace()));
                factoryBean.setAsyncMethodPrefix(eventDrivenProxy.asyncMethodPrefix());
                factoryBean.setMetaArgumentsHandler((MetaArgumentsHandler) createByClassOrFindByName(
                        applicationContext, eventDrivenProxy.metaArgumentsHandler(),
                        eventDrivenProxy.metaArgumentsHandlerType()));
                factoryBean.setRemoteInvocationAspect((RemoteInvocationAspect) createByClassOrFindByName(
                        applicationContext, eventDrivenProxy.remoteInvocationAspect(),
                        eventDrivenProxy.remoteInvocationAspectType()));
                factoryBean.setRemoteRoutingHandler((RemoteRoutingHandler) createByClassOrFindByName(
                        applicationContext, eventDrivenProxy.remoteRoutingHandler(),
                        eventDrivenProxy.remoteRoutingHandlerType()));
                factoryBean.setServiceInterface(field.getType());
                factoryBean.afterPropertiesSet();
                field.setAccessible(true);
                field.set(bean, factoryBean.getObject());
            }
            ExecutorProxy executorProxy = field.getAnnotation(ExecutorProxy.class);
            if (executorProxy != null) {
                ExecutorSpaceRemotingProxyFactoryBean factoryBean = new ExecutorSpaceRemotingProxyFactoryBean();
                factoryBean.setGigaSpace(findGigaSpaceByName(executorProxy.gigaSpace()));
                factoryBean.setTimeout(executorProxy.timeout());
                factoryBean.setBroadcast(executorProxy.broadcast());
                factoryBean.setMetaArgumentsHandler((MetaArgumentsHandler) createByClassOrFindByName(
                        applicationContext, executorProxy.metaArgumentsHandler(),
                        executorProxy.metaArgumentsHandlerType()));
                factoryBean.setRemoteInvocationAspect((RemoteInvocationAspect) createByClassOrFindByName(
                        applicationContext, executorProxy.remoteInvocationAspect(),
                        executorProxy.remoteInvocationAspectType()));
                factoryBean.setRemoteRoutingHandler((RemoteRoutingHandler) createByClassOrFindByName(
                        applicationContext, executorProxy.remoteRoutingHandler(),
                        executorProxy.remoteRoutingHandlerType()));
                factoryBean.setRemoteResultReducer(
                        (RemoteResultReducer) createByClassOrFindByName(applicationContext,
                                executorProxy.remoteResultReducer(), executorProxy.remoteResultReducerType()));
                factoryBean.setReturnFirstResult(executorProxy.returnFirstResult());
                factoryBean.setServiceInterface(field.getType());
                factoryBean.afterPropertiesSet();
                field.setAccessible(true);
                field.set(bean, factoryBean.getObject());
            }
        }
    });

    return true;
}