package jeffaschenk.commons.parameters;
import java.util.ArrayList;
import java.util.List;
/**
* Provides Helper Class for Optional Parameters.
*
* @author jeffaschenk@gmail.com
*/
public class OptionalParameters {
/**
* Default Constructor
*/
private OptionalParameters() {
}
/**
* Checks if there are any OptionalParameters at all to be processed?
*
* @param optionalParameters
* @return boolean indicator
*/
public static boolean areOptionalParametersUsed(Object... optionalParameters) {
return ((optionalParameters == null) || (optionalParameters.length <= 0) ? false : true);
}
/**
* Check Optional Parameters if they Exist or not for a specific Method.
*
* @param optionalParameters Optional Parameters Specified on a Variable Argument Method.
* @return boolean indicator if Optional Parameters exist or not.
*/
public static boolean isOptionalParametersEmpty(Object... optionalParameters) {
return ((optionalParameters == null) || (optionalParameters.length <= 0));
}
/**
* Is there an Entity Path Object Specified within our optionalParameter?
*
* @param optionalParameters
* @return boolean indicator
*/
public static boolean isEntityPathSpecifiedAsOptionalParameter(Object... optionalParameters) {
return isClassSpecifiedAsOptionalParameter(EntityPath.class, optionalParameters);
}
/**
* Get any Entity Path Objects Specified within our optionalParameters
*
* @param optionalParameters
* @return Object[]
*/
public static Object[] getAllEntityPathsSpecifiedAsOptionalParameter(Object... optionalParameters) {
return getAllOptionalParamatersByClass(EntityPath.class, optionalParameters);
}
/**
* Is there an Entity Path Group Object Specified within our optionalParameter?
*
* @param optionalParameters
* @return boolean indicating if Path Group Object within our optionalParameter or not.
*/
public static boolean isEntityPathGroupSpecifiedAsOptionalParameter(Object... optionalParameters) {
return isClassSpecifiedAsOptionalParameter(EntityPathGroup.class, optionalParameters);
}
/**
* Get any Entity Path Group Objects Specified within our optionalParameters
*
* @param optionalParameters
* @return Object[]
*/
public static Object[] getAllEntityPathGroupsSpecifiedAsOptionalParameter(Object... optionalParameters) {
return getAllOptionalParamatersByClass(EntityPathGroup.class, optionalParameters);
}
/**
* Is there an Class Object Specified within our optionalParameter?
*
* @param optionalParameters
* @return boolean indicating Class Object Specified within optionalParmeter or not.
*/
private static boolean isClassSpecifiedAsOptionalParameter(Class<?> clazz, Object... optionalParameters) {
if ((optionalParameters == null) || (optionalParameters.length <= 0)) {
return false;
}
int count = 0;
for (Object optionalParameter : optionalParameters) {
if (optionalParameter.getClass().getName().endsWith(clazz.getName())) {
count++;
}
}
return (count > 0);
}
/**
* Get all optionalParameters By Class.
*
* @param optionalParameters
* @return Object[] Object Array of Only those Object filtered by Class.
*/
private static Object[] getAllOptionalParamatersByClass(Class<?> clazz, Object... optionalParameters) {
if ((optionalParameters == null) || (optionalParameters.length <= 0)) {
return new Object[0];
}
List<Object> objects = new ArrayList<Object>();
for (Object optionalParameter : optionalParameters) {
if (optionalParameter.getClass().getName().endsWith(clazz.getName())) {
objects.add(optionalParameter);
}
}
return objects.toArray();
}
}