-
Notifications
You must be signed in to change notification settings - Fork 629
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
ISPN-8427 Support for non-String keys in the rest server
- Loading branch information
1 parent
dbced19
commit ee0a83f
Showing
59 changed files
with
1,758 additions
and
602 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
138 changes: 138 additions & 0 deletions
138
commons/src/main/java/org/infinispan/commons/dataconversion/DefaultTranscoder.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,138 @@ | ||
package org.infinispan.commons.dataconversion; | ||
|
||
import static org.infinispan.commons.dataconversion.MediaType.APPLICATION_OBJECT; | ||
import static org.infinispan.commons.dataconversion.MediaType.APPLICATION_OCTET_STREAM; | ||
import static org.infinispan.commons.dataconversion.MediaType.APPLICATION_WWW_FORM_URLENCODED; | ||
import static org.infinispan.commons.dataconversion.MediaType.TEXT_PLAIN; | ||
|
||
import java.io.IOException; | ||
import java.util.HashSet; | ||
import java.util.Set; | ||
|
||
import org.infinispan.commons.logging.Log; | ||
import org.infinispan.commons.logging.LogFactory; | ||
|
||
/** | ||
* Handle conversions between text/plain, url-encoded, java objects, and octet-stream contents. | ||
* | ||
* @since 9.2 | ||
*/ | ||
public final class DefaultTranscoder implements Transcoder { | ||
|
||
private static final Log log = LogFactory.getLog(DefaultTranscoder.class); | ||
|
||
private static final Set<MediaType> supportedTypes = new HashSet<>(); | ||
|
||
public static final DefaultTranscoder INSTANCE = new DefaultTranscoder(); | ||
|
||
private DefaultTranscoder() { | ||
} | ||
|
||
static { | ||
supportedTypes.add(APPLICATION_OBJECT); | ||
supportedTypes.add(APPLICATION_OCTET_STREAM); | ||
supportedTypes.add(APPLICATION_WWW_FORM_URLENCODED); | ||
supportedTypes.add(TEXT_PLAIN); | ||
} | ||
|
||
@Override | ||
public Object transcode(Object content, MediaType contentType, MediaType destinationType) { | ||
try { | ||
if (destinationType.match(APPLICATION_OCTET_STREAM)) { | ||
return convertToOctetStream(content, contentType, destinationType); | ||
} | ||
if (destinationType.match(APPLICATION_OBJECT)) { | ||
return convertToObject(content, contentType, destinationType); | ||
} | ||
if (destinationType.match(TEXT_PLAIN)) { | ||
return convertToTextPlain(content, contentType, destinationType); | ||
} | ||
if (destinationType.match(APPLICATION_WWW_FORM_URLENCODED)) { | ||
return convertToUrlEncoded(content, contentType); | ||
} | ||
throw log.unsupportedContent(content); | ||
} catch (EncodingException | InterruptedException | IOException e) { | ||
throw log.unsupportedContent(content); | ||
} | ||
} | ||
|
||
private Object convertToUrlEncoded(Object content, MediaType contentType) { | ||
if (contentType.match(APPLICATION_OCTET_STREAM)) { | ||
return StandardConversions.convertOctetStreamToUrlEncoded(content, contentType); | ||
} | ||
if (contentType.match(APPLICATION_OBJECT)) { | ||
return StandardConversions.convertUrlEncodedToObject(content); | ||
} | ||
if (contentType.match(TEXT_PLAIN)) { | ||
return StandardConversions.convertTextToUrlEncoded(content, contentType); | ||
} | ||
if (contentType.match(APPLICATION_WWW_FORM_URLENCODED)) { | ||
return content; | ||
} | ||
throw log.unsupportedContent(content); | ||
} | ||
|
||
private Object convertToTextPlain(Object content, MediaType contentType, MediaType destinationType) { | ||
if (contentType.match(APPLICATION_OCTET_STREAM)) { | ||
byte[] decoded = StandardConversions.decodeOctetStream(content, destinationType); | ||
return StandardConversions.convertOctetStreamToText(decoded, destinationType); | ||
} | ||
if (contentType.match(APPLICATION_OBJECT)) { | ||
return StandardConversions.convertJavaToText(content, contentType, destinationType); | ||
} | ||
if (contentType.match(TEXT_PLAIN)) { | ||
return StandardConversions.convertTextToText(content, contentType, destinationType); | ||
} | ||
if (contentType.match(APPLICATION_WWW_FORM_URLENCODED)) { | ||
return StandardConversions.convertUrlEncodedToText(content, destinationType); | ||
} | ||
throw log.unsupportedContent(content); | ||
} | ||
|
||
private Object convertToObject(Object content, MediaType contentType, MediaType destinationType) { | ||
if (contentType.match(APPLICATION_OCTET_STREAM)) { | ||
byte[] decoded = StandardConversions.decodeOctetStream(content, destinationType); | ||
return StandardConversions.convertOctetStreamToJava(decoded, destinationType); | ||
} | ||
if (contentType.match(APPLICATION_OBJECT)) { | ||
return content; | ||
} | ||
if (contentType.match(TEXT_PLAIN)) { | ||
return StandardConversions.convertTextToObject(content, contentType); | ||
} | ||
if (contentType.match(APPLICATION_WWW_FORM_URLENCODED)) { | ||
return StandardConversions.convertUrlEncodedToObject(content); | ||
} | ||
throw log.unsupportedContent(content); | ||
} | ||
|
||
public Object convertToOctetStream(Object content, MediaType contentType, MediaType destinationType) throws IOException, InterruptedException { | ||
if (contentType.match(APPLICATION_OCTET_STREAM)) { | ||
return StandardConversions.decodeOctetStream(content, contentType); | ||
} | ||
if (contentType.match(APPLICATION_OBJECT)) { | ||
return StandardConversions.convertJavaToOctetStream(content, contentType); | ||
} | ||
if (contentType.match(TEXT_PLAIN)) { | ||
return StandardConversions.convertTextToOctetStream(content, destinationType); | ||
} | ||
if (contentType.match(APPLICATION_WWW_FORM_URLENCODED)) { | ||
return StandardConversions.convertUrlEncodedToOctetStream(content); | ||
} | ||
throw log.unsupportedContent(content); | ||
} | ||
|
||
@Override | ||
public Set<MediaType> getSupportedMediaTypes() { | ||
return supportedTypes; | ||
} | ||
|
||
private boolean in(MediaType mediaType, Set<MediaType> set) { | ||
return set.stream().anyMatch(s -> s.match(mediaType)); | ||
} | ||
|
||
@Override | ||
public boolean supportsConversion(MediaType mediaType, MediaType other) { | ||
return in(mediaType, supportedTypes) && in(other, supportedTypes); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
37 changes: 37 additions & 0 deletions
37
commons/src/main/java/org/infinispan/commons/dataconversion/OneToManyTranscoder.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,37 @@ | ||
package org.infinispan.commons.dataconversion; | ||
|
||
import java.util.Arrays; | ||
import java.util.HashSet; | ||
import java.util.Set; | ||
|
||
/** | ||
* Base class for {@link Transcoder} that converts between a single format and multiple other formats and back. | ||
*/ | ||
public abstract class OneToManyTranscoder implements Transcoder { | ||
|
||
private MediaType mainType; | ||
|
||
protected final Set<MediaType> supportedTypes = new HashSet<>(); | ||
|
||
public OneToManyTranscoder(MediaType mainType, MediaType... supportedConversions) { | ||
this.mainType = mainType; | ||
this.supportedTypes.add(mainType); | ||
this.supportedTypes.addAll(Arrays.asList(supportedConversions)); | ||
} | ||
|
||
private boolean in(MediaType mediaType, Set<MediaType> set) { | ||
return set.stream().anyMatch(s -> s.match(mediaType)); | ||
} | ||
|
||
@Override | ||
public Set<MediaType> getSupportedMediaTypes() { | ||
return supportedTypes; | ||
} | ||
|
||
@Override | ||
public boolean supportsConversion(MediaType mediaType, MediaType other) { | ||
return mediaType.match(mainType) && in(other, supportedTypes) || | ||
other.match(mainType) && in(mediaType, supportedTypes); | ||
} | ||
|
||
} |
Oops, something went wrong.