@ -1,5 +1,5 @@
@@ -1,5 +1,5 @@
/ *
* Copyright 2002 - 2012 the original author or authors .
* Copyright 2002 - 2015 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 .
@ -31,24 +31,28 @@ import org.springframework.util.LinkedMultiValueMap;
@@ -31,24 +31,28 @@ import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap ;
/ * *
* An implementation of { @link MediaTypeFileExtensionResolver } that maintains a lookup
* from extension to MediaType .
* An implementation of { @code MediaTypeFileExtensionResolver } that maintains
* lookups between file extensions and MediaTypes in both directions .
*
* < p > Initially created with a map of file extensions and media types .
* Subsequently sub - classes can use { @link # addMapping } to add more mappings .
*
* @author Rossen Stoyanchev
* @since 3 . 2
* /
public class MappingMediaTypeFileExtensionResolver implements MediaTypeFileExtensionResolver {
private final ConcurrentMap < String , MediaType > mediaTypes = new ConcurrentHashMap < String , MediaType > ( 64 ) ;
private final ConcurrentMap < String , MediaType > mediaTypes =
new ConcurrentHashMap < String , MediaType > ( 64 ) ;
private final MultiValueMap < MediaType , String > fileExtensions = new LinkedMultiValueMap < MediaType , String > ( ) ;
private final MultiValueMap < MediaType , String > fileExtensions =
new LinkedMultiValueMap < MediaType , String > ( ) ;
private final List < String > allFileExtensions = new LinkedList < String > ( ) ;
/ * *
* Create an instance with the given mappings between extensions and media types .
* @throws IllegalArgumentException if a media type string cannot be parsed
* Create an instance with the given map of file extensions and media types .
* /
public MappingMediaTypeFileExtensionResolver ( Map < String , MediaType > mediaTypes ) {
if ( mediaTypes ! = null ) {
@ -61,10 +65,22 @@ public class MappingMediaTypeFileExtensionResolver implements MediaTypeFileExten
@@ -61,10 +65,22 @@ public class MappingMediaTypeFileExtensionResolver implements MediaTypeFileExten
}
protected List < MediaType > getAllMediaTypes ( ) {
return new ArrayList < MediaType > ( this . mediaTypes . values ( ) ) ;
}
/ * *
* Find the file extensions mapped to the given MediaType .
* @return 0 or more extensions , never { @code null }
* Map an extension to a MediaType . Ignore if extension already mapped .
* /
protected void addMapping ( String extension , MediaType mediaType ) {
MediaType previous = this . mediaTypes . putIfAbsent ( extension , mediaType ) ;
if ( previous = = null ) {
this . fileExtensions . add ( mediaType , extension ) ;
this . allFileExtensions . add ( extension ) ;
}
}
@Override
public List < String > resolveFileExtensions ( MediaType mediaType ) {
List < String > fileExtensions = this . fileExtensions . get ( mediaType ) ;
@ -76,27 +92,12 @@ public class MappingMediaTypeFileExtensionResolver implements MediaTypeFileExten
@@ -76,27 +92,12 @@ public class MappingMediaTypeFileExtensionResolver implements MediaTypeFileExten
return Collections . unmodifiableList ( this . allFileExtensions ) ;
}
protected List < MediaType > getAllMediaTypes ( ) {
return new ArrayList < MediaType > ( this . mediaTypes . values ( ) ) ;
}
/ * *
* Return the MediaType mapped to the given extension .
* @return a MediaType for the key or { @code null }
* Use this method for a reverse lookup from extension to MediaType .
* @return a MediaType for the key , or { @code null } if none found
* /
protected MediaType lookupMediaType ( String extension ) {
return this . mediaTypes . get ( extension ) ;
}
/ * *
* Map a MediaType to an extension or ignore if the extensions is already mapped .
* /
protected void addMapping ( String extension , MediaType mediaType ) {
MediaType previous = this . mediaTypes . putIfAbsent ( extension , mediaType ) ;
if ( previous = = null ) {
this . fileExtensions . add ( mediaType , extension ) ;
this . allFileExtensions . add ( extension ) ;
}
return this . mediaTypes . get ( extension . toLowerCase ( Locale . ENGLISH ) ) ;
}
}