Package com.graphql_java_generator.util
Class GraphqlUtils
java.lang.Object
com.graphql_java_generator.util.GraphqlUtils
@Component
public class GraphqlUtils
extends java.lang.Object
- Author:
- etienne-sf
-
Field Summary
Fields Modifier and Type Field Description static GraphqlUtils
graphqlUtils
This singleton is usable in default method, within interfacesstatic java.lang.Character
JAVA_KEYWORD_PREFIX
-
Constructor Summary
Constructors Constructor Description GraphqlUtils()
-
Method Summary
Modifier and Type Method Description void
addImport(java.util.Set<java.lang.String> imports, java.lang.String targetPackageName, java.lang.String classname)
Adds, if necessary the import calculated from the given parameters, into the given set of imports.<T> java.util.stream.Stream<T>
concatStreams(java.lang.Class<T> clazz, boolean parallelStreams, T t1, T t2, T t3, java.util.List<? extends T>... lists)
Concatenate a non limited number of lists into a stream.java.lang.Object
getArgument(java.lang.Object jsonParsedValue, java.lang.String graphQLTypeName, java.lang.String javaTypeForIDType, java.lang.Class<?> clazz)
This method returns a GraphQL argument into the relevant Java object, within a data fetcher, from what has been parsed by the graphql-java engine from the incoming JSON requestjava.lang.String
getCamelCase(java.lang.String name)
Convert the given name, to a camel case name.java.lang.Class<?>
getClass(java.lang.String packageName, java.lang.String graphQLTypeName)
Retrieves a class for a given classname.java.lang.String
getClassSimpleName(java.lang.String classFullName)
Extract the simple name for a class (without the package name), from its full class name (with the package name)java.lang.reflect.Field
getDeclaredField(java.lang.Class<?> owningClass, java.lang.String fieldName, boolean mustFindField)
Returns aField
from the given class.java.lang.Class<?>
getFieldType(java.lang.Class<?> owningClass, java.lang.String fieldName, boolean returnIsMandatory)
Retrieves the class of the fieldName field of the owningClass class.java.lang.reflect.Method
getGetter(java.lang.Class<?> clazz, java.lang.reflect.Field field)
Retrieves the getter for the given field on the given fieldjava.lang.String
getJavaName(java.lang.String name)
Returns a valid java identifier for the given name.java.lang.Long
getLastModified(java.io.File fileOrFolder, boolean maxValue)
Returns the maximum or minimum value for the lastModified of the given file, or of all the files (not folders) contained into this folder.java.lang.reflect.Method
getMethod(java.lang.String methodName, java.lang.Class<?> clazz, java.lang.Class<?>... parameterTypes)
Retrieves the asked method, from its name, class and parameters.java.lang.String
getPackageName(java.lang.String classFullName)
Extract the package name for a class, from its full class name (with the package name)java.lang.String
getPascalCase(java.lang.String name)
Convert the given name, which is supposed to be in camel case (for instance: thisIsCamelCase) to a pascal case string (for instance: ThisIsCamelCase).java.lang.String
getQuotedScanBasePackages(java.lang.String scanBasePackages)
java.lang.String
getRuntimeVersion()
Returns the version of the runtime, that is used to check that the runtime's version is the same as the Maven or Gradle plugin's version.<T> java.lang.reflect.Method
getSetter(java.lang.Class<T> clazz, java.lang.reflect.Field field)
Retrieves the setter for the given field on the given fieldjava.lang.String
getValueAsText(graphql.language.Value<?> value)
Returns the given value, as text, as it can be written into a generated GraphQL schema.
A str string default value will be returned as "str",a JEDI enum value will be returned as JEDI, ...java.lang.Object
invokeGetter(java.lang.Object object, java.lang.String fieldName)
Invoke the getter for the given field name, on the given object.java.lang.Object
invokeMethod(java.lang.reflect.Method method, java.lang.Object o, java.lang.Object... args)
Invoke the given setter on the given object, with the given value.java.lang.Object
invokeMethod(java.lang.String methodName, java.lang.Object object, java.lang.Object... args)
Calls the 'methodName' method on the given object.void
invokeSetter(java.lang.Object object, java.lang.reflect.Field field, java.lang.Object value)
Invoke the setter for the given field, on the given object.void
invokeSetter(java.lang.Object object, java.lang.String fieldName, java.lang.Object value)
Invoke the setter for theField
of the given name, on the given object.boolean
isJavaReservedWords(java.lang.String name)
Returns true if name is a reserved java keyword<I> java.util.List<I>
iterableConcreteClassToListInterface(java.lang.Iterable<? extends I> iterable)
Transform anIterable
(which can be aList
) of a concrete class, into aList
of the I interface or superclass.<I> java.util.List<I>
iterableToList(java.lang.Iterable<I> iterable)
Transform anIterable
(which can be aList
), into aList
of items of the same type.<T> T
optionalToObject(java.util.Optional<T> optional)
Transform anOptional
, as returned by Spring Data repositories, into a standard Java, which is null if there is no value.java.lang.Object
parseValueForInputParameter(java.lang.Object parameterValue, java.lang.String parameterType, java.lang.Class<?> parameterClass)
Parse a value, depending on the parameter type.
-
Field Details
-
graphqlUtils
This singleton is usable in default method, within interfaces -
JAVA_KEYWORD_PREFIX
public static java.lang.Character JAVA_KEYWORD_PREFIX
-
-
Constructor Details
-
GraphqlUtils
public GraphqlUtils()
-
-
Method Details
-
getRuntimeVersion
public java.lang.String getRuntimeVersion()Returns the version of the runtime, that is used to check that the runtime's version is the same as the Maven or Gradle plugin's version. -
getCamelCase
public java.lang.String getCamelCase(java.lang.String name)Convert the given name, to a camel case name. Currenly very simple : it puts the first character in lower case.- Returns:
-
getPascalCase
public java.lang.String getPascalCase(java.lang.String name)Convert the given name, which is supposed to be in camel case (for instance: thisIsCamelCase) to a pascal case string (for instance: ThisIsCamelCase).- Returns:
-
iterableToList
public <I> java.util.List<I> iterableToList(java.lang.Iterable<I> iterable)Transform anIterable
(which can be aList
), into aList
of items of the same type. It's usefull to transform the native type from Spring Data repositories (which needs concrete class to map into) into the list of relevant GraphQL interface- Type Parameters:
I
-- Parameters:
iterable
-- Returns:
-
iterableConcreteClassToListInterface
public <I> java.util.List<I> iterableConcreteClassToListInterface(java.lang.Iterable<? extends I> iterable)Transform anIterable
(which can be aList
) of a concrete class, into aList
of the I interface or superclass. It's usefull to transform the native type from Spring Data repositories (which needs concrete class to map into) into the list of relevant GraphQL interface- Type Parameters:
I
-- Parameters:
iterable
-- Returns:
-
optionalToObject
public <T> T optionalToObject(java.util.Optional<T> optional)Transform anOptional
, as returned by Spring Data repositories, into a standard Java, which is null if there is no value.- Parameters:
optional
-- Returns:
-
getFieldType
public java.lang.Class<?> getFieldType(java.lang.Class<?> owningClass, java.lang.String fieldName, boolean returnIsMandatory) throws GraphQLRequestPreparationExceptionRetrieves the class of the fieldName field of the owningClass class.- Parameters:
owningClass
-fieldName
-returnIsMandatory
- If true, aGraphQLRequestPreparationException
is thrown if the field is not found.- Returns:
- The class of the field. Or null of the field doesn't exist, and returnIdMandatory is false
- Throws:
GraphQLRequestPreparationException
-
getArgument
public java.lang.Object getArgument(java.lang.Object jsonParsedValue, java.lang.String graphQLTypeName, java.lang.String javaTypeForIDType, java.lang.Class<?> clazz)This method returns a GraphQL argument into the relevant Java object, within a data fetcher, from what has been parsed by the graphql-java engine from the incoming JSON request- Type Parameters:
T
- The class expected to be returned- Parameters:
jsonParsedValue
- The value, read from the JSON in the GraphQL request. Only the part of the JSON map, related to the expected class is sent. It can be:- A
Map
. This map will be transformed into an input object, as defined in the GraphQL schema, from the Map that has been read from the JSON object sent to the server. - A
List
. In this case, returns a list of instances of the given clazz type. - Otherwise, the value is a scalar. At this stage, Custom Scalars have already been transformed into the relevant Java Type. So it must be a standard scalar. It is then mapped to the asked java type
- A
graphQLTypeName
- The name of the GraphQL type, as defined in the GraphQL schema. This can be guessed from the given class for input types and objects, but not for scalars. So it must be provided.javaTypeForIDType
- Value of the plugin parameter of the same name. This is necessary to properly manage fields of the ID GraphQL type, which must be transformed to this java type. This is useful only when mapping into input types.clazz
- The class of the expected type. A new instance of this type will be returned, with its fields having been set by this method from the value in the map- Returns:
- An instance of the expected class. If the map is null, null is returned. Of the map is empty, anew instance is returned, with all its fields are left empty
-
parseValueForInputParameter
public java.lang.Object parseValueForInputParameter(java.lang.Object parameterValue, java.lang.String parameterType, java.lang.Class<?> parameterClass)Parse a value, depending on the parameter type.- Parameters:
parameterValue
-parameterType
-packageName
-- Returns:
- Throws:
java.lang.RuntimeException
- When the value could be parsed
-
getDeclaredField
public java.lang.reflect.Field getDeclaredField(java.lang.Class<?> owningClass, java.lang.String fieldName, boolean mustFindField) throws GraphQLRequestPreparationExceptionReturns aField
from the given class.- Parameters:
owningClass
- The class that should contain this field. If the class's name finishes by Response, as an empty XxxResponse class is created for each Query/Mutation/Subscription (to be compatible with previsous version), then this method also looks in the owningClass's superclass.fieldName
- The name of the searched fieldmustFindField
- If true and the field is not found, aGraphQLRequestPreparationException
is thrown.
If false an the field is not found, the method returns null- Returns:
- Throws:
GraphQLRequestPreparationException
-
getSetter
public <T> java.lang.reflect.Method getSetter(java.lang.Class<T> clazz, java.lang.reflect.Field field)Retrieves the setter for the given field on the given field- Type Parameters:
T
-- Parameters:
t
-field
-- Returns:
-
getGetter
public java.lang.reflect.Method getGetter(java.lang.Class<?> clazz, java.lang.reflect.Field field)Retrieves the getter for the given field on the given field- Type Parameters:
T
-- Parameters:
t
-field
-- Returns:
-
invokeGetter
public java.lang.Object invokeGetter(java.lang.Object object, java.lang.String fieldName)Invoke the getter for the given field name, on the given object. All check exceptions are hidden in aRuntimeException
- Parameters:
object
-fieldName
-- Returns:
- the field's value for the given object
- Throws:
java.lang.RuntimeException
- If any exception occurs
-
invokeSetter
public void invokeSetter(java.lang.Object object, java.lang.reflect.Field field, java.lang.Object value)Invoke the setter for the given field, on the given object. All check exceptions are hidden in aRuntimeException
- Parameters:
object
-field
-value
-- Throws:
java.lang.RuntimeException
- If any exception occurs
-
invokeSetter
public void invokeSetter(java.lang.Object object, java.lang.String fieldName, java.lang.Object value)Invoke the setter for theField
of the given name, on the given object. All check exceptions are hidden in aRuntimeException
- Parameters:
object
-fieldName
-value
-- Throws:
java.lang.RuntimeException
- If any exception occurs
-
addImport
public void addImport(java.util.Set<java.lang.String> imports, java.lang.String targetPackageName, java.lang.String classname)Adds, if necessary the import calculated from the given parameters, into the given set of imports.- Parameters:
imports
- The set of import, in which the import for the given parameters is to be addedtargetPackageName
- The package in which is the class that will contain this importclassname
- the full classname of the class to import
-
getMethod
public java.lang.reflect.Method getMethod(java.lang.String methodName, java.lang.Class<?> clazz, java.lang.Class<?>... parameterTypes)Retrieves the asked method, from its name, class and parameters. This method hides the exception that could be thrown, into aRuntimeException
- Type Parameters:
T
-- Parameters:
t
-field
-- Returns:
- Throws:
java.lang.RuntimeException
- When an exception occurs while getting the method
-
invokeMethod
public java.lang.Object invokeMethod(java.lang.String methodName, java.lang.Object object, java.lang.Object... args)Calls the 'methodName' method on the given object.- Parameters:
methodName
- The name of the method. This method should have no parameterobject
- The given node, on which the 'methodName' method is to be called- Returns:
-
invokeMethod
public java.lang.Object invokeMethod(java.lang.reflect.Method method, java.lang.Object o, java.lang.Object... args)Invoke the given setter on the given object, with the given value. This method hides the exception that could be thrown, into aRuntimeException
- Parameters:
method
-o
-value
-- Throws:
java.lang.RuntimeException
- When an exception occurs while accessing the setter
-
getJavaName
public java.lang.String getJavaName(java.lang.String name)Returns a valid java identifier for the given name.- Parameters:
name
-- Returns:
- If name is a default java keyword (so it is not a valid java identifier), then the return prefixed by a
JAVA_KEYWORD_PREFIX
. Otherwise (which is generally the case), the name is valid, and returned as is the given name
-
isJavaReservedWords
public boolean isJavaReservedWords(java.lang.String name)Returns true if name is a reserved java keyword- Parameters:
name
-- Returns:
-
getClassSimpleName
public java.lang.String getClassSimpleName(java.lang.String classFullName)Extract the simple name for a class (without the package name), from its full class name (with the package name)- Parameters:
classFullName
- The full class name, for instance java.util.Date- Returns:
- The simple class name (in the above sample: Date)
-
getPackageName
public java.lang.String getPackageName(java.lang.String classFullName)Extract the package name for a class, from its full class name (with the package name)- Parameters:
classFullName
- The full class name, for instance java.util.Date- Returns:
- The simple class name (in the above sample: java.util)
-
getClass
public java.lang.Class<?> getClass(java.lang.String packageName, java.lang.String graphQLTypeName)Retrieves a class for a given classname. For standard GraphQL types (Int, Boolean...) the good package is used (java.lang, java.lang, java.util...). For others, the class is searched in the given package name.- Parameters:
packageName
- The name of the package, where the code has been generated.graphQLTypeName
- The name of the class- Returns:
-
concatStreams
@SafeVarargs public final <T> java.util.stream.Stream<T> concatStreams(java.lang.Class<T> clazz, boolean parallelStreams, T t1, T t2, T t3, java.util.List<? extends T>... lists)Concatenate a non limited number of lists into a stream.- Type Parameters:
T
-- Parameters:
clazz
- The T classparallelStreams
- true if the returned stream should be a parallel onet1
- An optional item, that'll be added to the returned stream (if not null)t2
- An optional item, that'll be added to the returned stream (if not null)t3
- An optional item, that'll be added to the returned stream (if not null)lists
-- Returns:
-
getValueAsText
public java.lang.String getValueAsText(graphql.language.Value<?> value)Returns the given value, as text, as it can be written into a generated GraphQL schema.
A str string default value will be returned as "str",a JEDI enum value will be returned as JEDI, ...- Returns:
-
getLastModified
public java.lang.Long getLastModified(java.io.File fileOrFolder, boolean maxValue)Returns the maximum or minimum value for the lastModified of the given file, or of all the files (not folders) contained into this folder.- Parameters:
fileOrFolder
- A file or a foldermaxValue
- If true and fileOrFolder is a folder, then this method returns the maximumFile.lastModified()
found for all its files. If false, then the minimum value is returned.- Returns:
- if fileOrFolder doesn't exist, then returns null. If fileOrFolder is a file, then returns its
File.lastModified()
value. Otherwise its a folder. Then it loops into this folder, its subfolders (and so on), and returns the maximum or the minimum (depending on the value of maxValue) lastModified date found for the files found. The date of the directories are ignored.
-
getQuotedScanBasePackages
public java.lang.String getQuotedScanBasePackages(java.lang.String scanBasePackages)
-