Files
spring-hateoas/src/main/java/org/springframework/hateoas/LinkDiscoverers.java
Oliver Drotbohm 9e5db1874e #812 - General overhaul and refactorings.
Cleanups in Affordance API and implementations of hypermedia type (de)serializers. Added a lot more domain methods and types to Link, ResourceSupport etc. to be able to move a lot of representation building logic into those.

AffordanceModelFactory is not a Spring Plugin anymore as that functionality is not needed currently as we statically look up all factories via the SpringFactoriesLoader mechanism.

Redesigned LinkRelation to become a first class abstraction in the codebase. IanaLinkRelations is now a collection of constants. Link now keeps a LinkRelation instance around instead of a plain String.

Tweaked LinkDiscoverer API to return Optional and Links instead of nullable Link and List<Link>.

Tweaked API of CurieProvider to make use of the newly introduced HalLinkRelation based on the general LinkRelation.

Additional fixes for the Kotlin extension functions. Make Kotlin build setup compile with JDK 8. Removed Objects helper class in favor of Spring's already existing Assert and it's usage in ResourceAssemblerSupport.
2019-02-15 10:57:23 +01:00

85 lines
2.6 KiB
Java

/*
* Copyright 2013 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.springframework.hateoas;
import java.util.Optional;
import org.springframework.http.MediaType;
import org.springframework.plugin.core.PluginRegistry;
import org.springframework.util.Assert;
/**
* Value object to wrap a {@link PluginRegistry} for {@link LinkDiscoverer} so that it's easier to inject them into
* clients wanting to lookup a {@link LinkDiscoverer} for a given {@link MediaTypes}.
*
* @author Oliver Gierke
*/
public class LinkDiscoverers {
private final PluginRegistry<LinkDiscoverer, MediaType> discoverers;
/**
* Creates a new {@link LinkDiscoverers} instance with the given {@link PluginRegistry}.
*
* @param discoverers must not be {@literal null}.
*/
public LinkDiscoverers(PluginRegistry<LinkDiscoverer, MediaType> discoverers) {
Assert.notNull(discoverers, "Registry of LinkDiscoverer must not be null!");
this.discoverers = discoverers;
}
/**
* Returns the {@link LinkDiscoverer} suitable for the given {@link MediaType}.
*
* @param mediaType
* @return will never be {@literal null}.
*/
public Optional<LinkDiscoverer> getLinkDiscovererFor(MediaType mediaType) {
return discoverers.getPluginFor(mediaType);
}
/**
* Returns the {@link LinkDiscoverer} suitable for the given media type.
*
* @param mediaType
* @return
*/
public Optional<LinkDiscoverer> getLinkDiscovererFor(String mediaType) {
return getLinkDiscovererFor(MediaType.valueOf(mediaType));
}
/**
* Returns the {@link LinkDiscoverer} suitable for the given {@link MediaType}.
*
* @param mediaType
* @return will never be {@literal null}.
*/
public LinkDiscoverer getRequiredLinkDiscovererFor(MediaType mediaType) {
return discoverers.getRequiredPluginFor(mediaType);
}
/**
* Returns the {@link LinkDiscoverer} suitable for the given media type.
*
* @param mediaType
* @return
*/
public LinkDiscoverer getRequiredLinkDiscovererFor(String mediaType) {
return getRequiredLinkDiscovererFor(MediaType.valueOf(mediaType));
}
}