All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.javersion.object.mapping.JaversionMappingResolver Maven / Gradle / Ivy

There is a newer version: 0.15.3
Show newest version
package org.javersion.object.mapping;

import static com.google.common.base.Strings.isNullOrEmpty;
import static java.util.Arrays.asList;
import static java.util.stream.Collectors.toMap;

import java.util.Map;

import javax.annotation.Nonnull;
import javax.annotation.Nullable;

import org.javersion.object.VersionCreator;
import org.javersion.object.VersionValue;
import org.javersion.object.Versionable;
import org.javersion.object.Versionable.Subclass;
import org.javersion.reflect.*;

public class JaversionMappingResolver implements MappingResolver {

    @Nullable
    @Override
    public Result delegateValue(MethodDescriptor method) {
        if (method.hasAnnotation(VersionValue.class)) {
            return Result.of(method);
        }
        return Result.notFound();
    }

    @Nullable
    @Override
    public  Result creator(T methodOrConstructor) {
        if (methodOrConstructor.hasAnnotation(VersionCreator.class)) {
            return Result.of(methodOrConstructor);
        }
        return Result.notFound();
    }

    @Nullable
    @Override
    public Result alias(TypeDescriptor type) {
        Versionable versionable = type.getAnnotation(Versionable.class);
        if (versionable != null && !isNullOrEmpty(versionable.alias())) {
            return Result.of(versionable.alias());
        }
        return Result.notFound();
    }

    @Nullable
    @Override
    public Result> subclasses(TypeDescriptor type) {
        Versionable versionable = type.getAnnotation(Versionable.class);
        if (versionable != null && versionable.subclasses().length > 0) {
            TypeDescriptors typeDescriptors = type.getTypeDescriptors();
            Map aliasesByTypes = asList(versionable.subclasses()).stream()
                    .collect(toMap(subclass -> typeDescriptors.get(subclass.value()), Subclass::alias));
            return Result.of(aliasesByTypes);
        }
        return Result.notFound();
    }

    @Nonnull
    @Override
    public Result name(ParameterDescriptor parameter) {
        Param param = parameter.getAnnotation(Param.class);
        if (param != null) {
            return Result.of(param.value());
        }
        return Result.notFound();
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy