MethodUtil.java
- /*
- * Copyright (c) 2002-2022, City of Paris
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright notice
- * and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright notice
- * and the following disclaimer in the documentation and/or other materials
- * provided with the distribution.
- *
- * 3. Neither the name of 'Mairie de Paris' nor 'Lutece' nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- *
- * License 1.0
- */
- package fr.paris.lutece.util.method;
- import org.apache.commons.lang3.StringUtils;
- import java.lang.reflect.InvocationTargetException;
- import java.lang.reflect.Method;
- /**
- *
- * MethodUtils
- *
- */
- public final class MethodUtil
- {
- private static final String PREFIX_GET = "get";
- private static final String PREFIX_SET = "set";
- /**
- * Instantiates a new method utils.
- */
- private MethodUtil( )
- {
- }
- /**
- * Sets the attribute. <br>
- * <strong>Warning :</strong> This method does not handle setter that :
- * <ul>
- * <li>has no parameter or has more than one parameter</li>
- * <li>has array parameter (ie : String[] or int[] ...)</li>
- * </ul>
- *
- * @param <A>
- * the generic type of the instance
- * @param <B>
- * the generic type of the value to set
- * @param instance
- * the instance to set
- * @param strAttributeName
- * the attribute name
- * @param value
- * the value of the attribute to set
- * @throws SecurityException
- * the security exception
- * @throws NoSuchMethodException
- * the no such method exception
- * @throws IllegalArgumentException
- * the illegal argument exception
- * @throws IllegalAccessException
- * the illegal access exception
- * @throws InvocationTargetException
- * the invocation target exception
- */
- public static <A, B> void set( A instance, String strAttributeName, B value )
- throws NoSuchMethodException, IllegalAccessException, InvocationTargetException
- {
- if ( StringUtils.isNotBlank( strAttributeName ) && ( instance != null ) && ( value != null ) )
- {
- Method methodSetter = getSetter( instance, strAttributeName, value.getClass( ) );
- if ( methodSetter != null )
- {
- methodSetter.invoke( instance, value );
- }
- else
- {
- throw new NoSuchMethodException( );
- }
- }
- else
- {
- throw new IllegalArgumentException( "One on the parameters is null/blank." );
- }
- }
- /**
- * Gets the method.
- *
- * @param <A>
- * the generic type of the instance
- * @param strMethodPrefix
- * the str method prefix
- * @param instance
- * the instance
- * @param strAttributeName
- * the str attribute name
- * @param clazz
- * the clazz
- * @return the method
- * @throws SecurityException
- * the security exception
- * @throws NoSuchMethodException
- * the no such method exception
- */
- public static <A> Method getMethod( String strMethodPrefix, A instance, String strAttributeName, Class<?> clazz ) throws NoSuchMethodException
- {
- String strFirstLetter = strAttributeName.substring( 0, 1 ).toUpperCase( );
- String strMethodName = strMethodPrefix + strFirstLetter + strAttributeName.substring( 1, strAttributeName.length( ) );
- try
- {
- return instance.getClass( ).getMethod( strMethodName, clazz );
- }
- catch( NoSuchMethodException e )
- {
- return getPrimitiveMethod( strMethodName, instance, clazz );
- }
- }
- /**
- * Gets the primitive method.
- *
- * @param <A>
- * the generic type of the instance
- * @param strMethodName
- * the str method name
- * @param instance
- * the instance
- * @param clazz
- * the clazz
- * @return the primitive method
- * @throws SecurityException
- * the security exception
- * @throws NoSuchMethodException
- * the no such method exception
- */
- public static <A> Method getPrimitiveMethod( String strMethodName, A instance, Class<?> clazz ) throws NoSuchMethodException
- {
- if ( clazz.equals( Integer.class ) )
- {
- return instance.getClass( ).getMethod( strMethodName, int.class );
- }
- else
- if ( clazz.equals( Long.class ) )
- {
- return instance.getClass( ).getMethod( strMethodName, long.class );
- }
- else
- if ( clazz.equals( Double.class ) )
- {
- return instance.getClass( ).getMethod( strMethodName, double.class );
- }
- else
- if ( clazz.equals( Short.class ) )
- {
- return instance.getClass( ).getMethod( strMethodName, short.class );
- }
- else
- if ( clazz.equals( Byte.class ) )
- {
- return instance.getClass( ).getMethod( strMethodName, byte.class );
- }
- else
- if ( clazz.equals( Float.class ) )
- {
- return instance.getClass( ).getMethod( strMethodName, float.class );
- }
- else
- if ( clazz.equals( Character.class ) )
- {
- return instance.getClass( ).getMethod( strMethodName, char.class );
- }
- else
- if ( clazz.equals( Boolean.class ) )
- {
- return instance.getClass( ).getMethod( strMethodName, boolean.class );
- }
- throw new NoSuchMethodException( );
- }
- /**
- * Gets the setter.
- *
- * @param <A>
- * the generic type
- * @param instance
- * the instance
- * @param strAttributeName
- * the str attribute name
- * @param clazz
- * the clazz
- * @return the setter
- * @throws SecurityException
- * the security exception
- * @throws NoSuchMethodException
- * the no such method exception
- */
- public static <A> Method getSetter( A instance, String strAttributeName, Class<?> clazz ) throws NoSuchMethodException
- {
- return getMethod( PREFIX_SET, instance, strAttributeName, clazz );
- }
- /**
- * Gets the setter.
- *
- * @param <A>
- * the generic type of the instance
- * @param instance
- * the instance
- * @param strAttributeName
- * the str attribute name
- * @param clazz
- * the clazz
- * @return the setter
- * @throws SecurityException
- * the security exception
- * @throws NoSuchMethodException
- * the no such method exception
- */
- public static <A> Method getGetter( A instance, String strAttributeName, Class<?> clazz ) throws NoSuchMethodException
- {
- return getMethod( PREFIX_GET, instance, strAttributeName, clazz );
- }
- }