package io.katharsis.resource.registry.repository; import io.katharsis.repository.ParametersFactory; import io.katharsis.repository.RepositoryInstanceBuilder; import io.katharsis.repository.RepositoryMethodParameterProvider; import io.katharsis.repository.annotated.AnnotatedRelationshipRepositoryAdapter; import io.katharsis.repository.annotations.JsonApiRelationshipRepository; import io.katharsis.utils.ClassUtils; import io.katharsis.utils.java.Optional; public class AnnotatedRelationshipEntryBuilder<T, D> implements ResponseRelationshipEntry<T, D> { private RepositoryInstanceBuilder repositoryInstanceBuilder; public AnnotatedRelationshipEntryBuilder(RepositoryInstanceBuilder repositoryInstanceBuilder) { this.repositoryInstanceBuilder = repositoryInstanceBuilder; } @Override public Class<?> getTargetAffiliation() { @SuppressWarnings("unchecked") final Optional<JsonApiRelationshipRepository> annotation = ClassUtils.getAnnotation( repositoryInstanceBuilder.getRepositoryClass(), JsonApiRelationshipRepository.class ); if (annotation.isPresent()) { return annotation.get().target(); } else { throw new IllegalArgumentException( String.format( "Class %s must be annotated with @JsonApiRelationshipRepository", repositoryInstanceBuilder.getClass().getName() ) ); } } public AnnotatedRelationshipRepositoryAdapter build(RepositoryMethodParameterProvider parameterProvider) { return new AnnotatedRelationshipRepositoryAdapter<>(repositoryInstanceBuilder.buildRepository(), new ParametersFactory(parameterProvider)); } @Override public String toString() { return "AnnotatedRelationshipEntryBuilder{" + "repositoryInstanceBuilder=" + repositoryInstanceBuilder + '}'; } }