Search in sources :

Example 1 with NeoValueConverter

use of org.neo4j.kernel.impl.proc.TypeMappers.NeoValueConverter in project neo4j by neo4j.

the class MethodSignatureCompiler method inputTypesFor.

public List<Neo4jTypes.AnyType> inputTypesFor(Method method) throws ProcedureException {
    Type[] types = method.getGenericParameterTypes();
    List<Neo4jTypes.AnyType> neoTypes = new ArrayList<>(types.length);
    for (Type type : types) {
        NeoValueConverter valueConverter = typeMappers.converterFor(type);
        neoTypes.add(valueConverter.type());
    }
    return neoTypes;
}
Also used : Type(java.lang.reflect.Type) NeoValueConverter(org.neo4j.kernel.impl.proc.TypeMappers.NeoValueConverter) ArrayList(java.util.ArrayList)

Example 2 with NeoValueConverter

use of org.neo4j.kernel.impl.proc.TypeMappers.NeoValueConverter in project neo4j by neo4j.

the class MethodSignatureCompiler method signatureFor.

public List<FieldSignature> signatureFor(Method method) throws ProcedureException {
    Parameter[] params = method.getParameters();
    Type[] types = method.getGenericParameterTypes();
    List<FieldSignature> signature = new ArrayList<>(params.length);
    boolean seenDefault = false;
    for (int i = 0; i < params.length; i++) {
        Parameter param = params[i];
        Type type = types[i];
        if (!param.isAnnotationPresent(Name.class)) {
            throw new ProcedureException(Status.Procedure.ProcedureRegistrationFailed, "Argument at position %d in method `%s` is missing an `@%s` annotation.%n" + "Please add the annotation, recompile the class and try again.", i, method.getName(), Name.class.getSimpleName());
        }
        Name parameter = param.getAnnotation(Name.class);
        String name = parameter.value();
        if (name.trim().length() == 0) {
            throw new ProcedureException(Status.Procedure.ProcedureRegistrationFailed, "Argument at position %d in method `%s` is annotated with a name,%n" + "but the name is empty, please provide a non-empty name for the argument.", i, method.getName());
        }
        try {
            NeoValueConverter valueConverter = typeMappers.converterFor(type);
            Optional<Neo4jValue> defaultValue = valueConverter.defaultValue(parameter);
            //it is not allowed to have holes in default values
            if (seenDefault && !defaultValue.isPresent()) {
                throw new ProcedureException(Status.Procedure.ProcedureRegistrationFailed, "Non-default argument at position %d with name %s in method %s follows default argument. " + "Add a default value or rearrange arguments so that the non-default values comes first.", i, parameter.value(), method.getName());
            }
            seenDefault = defaultValue.isPresent();
            signature.add(new FieldSignature(name, valueConverter.type(), defaultValue));
        } catch (ProcedureException e) {
            throw new ProcedureException(e.status(), "Argument `%s` at position %d in `%s` with%n" + "type `%s` cannot be converted to a Neo4j type: %s", name, i, method.getName(), param.getType().getSimpleName(), e.getMessage());
        }
    }
    return signature;
}
Also used : NeoValueConverter(org.neo4j.kernel.impl.proc.TypeMappers.NeoValueConverter) ArrayList(java.util.ArrayList) FieldSignature(org.neo4j.kernel.api.proc.FieldSignature) Name(org.neo4j.procedure.Name) Type(java.lang.reflect.Type) Parameter(java.lang.reflect.Parameter) ProcedureException(org.neo4j.kernel.api.exceptions.ProcedureException)

Example 3 with NeoValueConverter

use of org.neo4j.kernel.impl.proc.TypeMappers.NeoValueConverter in project neo4j by neo4j.

the class TypeMappersTest method shouldDetectCorrectType.

@Test
public void shouldDetectCorrectType() throws Throwable {
    // When
    NeoValueConverter mapper = new TypeMappers().converterFor(javaClass);
    // Then
    assertEquals(neoType, mapper.type());
}
Also used : NeoValueConverter(org.neo4j.kernel.impl.proc.TypeMappers.NeoValueConverter) Test(org.junit.Test)

Example 4 with NeoValueConverter

use of org.neo4j.kernel.impl.proc.TypeMappers.NeoValueConverter in project neo4j by neo4j.

the class TypeMappersTest method shouldMapCorrectly.

@Test
public void shouldMapCorrectly() throws Throwable {
    // Given
    NeoValueConverter mapper = new TypeMappers().converterFor(javaClass);
    // When
    Object converted = mapper.toNeoValue(javaValue);
    // Then
    Assert.assertEquals(expectedNeoValue, converted);
}
Also used : NeoValueConverter(org.neo4j.kernel.impl.proc.TypeMappers.NeoValueConverter) Test(org.junit.Test)

Aggregations

NeoValueConverter (org.neo4j.kernel.impl.proc.TypeMappers.NeoValueConverter)4 Type (java.lang.reflect.Type)2 ArrayList (java.util.ArrayList)2 Test (org.junit.Test)2 Parameter (java.lang.reflect.Parameter)1 ProcedureException (org.neo4j.kernel.api.exceptions.ProcedureException)1 FieldSignature (org.neo4j.kernel.api.proc.FieldSignature)1 Name (org.neo4j.procedure.Name)1