package com.revolsys.ui.web.rest.converter; import java.io.IOException; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Set; import java.util.TreeSet; import org.springframework.http.HttpInputMessage; import org.springframework.http.HttpOutputMessage; import org.springframework.http.MediaType; import org.springframework.http.converter.HttpMessageConverter; import org.springframework.http.converter.HttpMessageNotReadableException; import org.springframework.http.converter.HttpMessageNotWritableException; public abstract class AbstractHttpMessageConverter<T> implements HttpMessageConverter<T> { public static List<MediaType> getMediaTypes(final Collection<?> contentTypes) { final List<MediaType> mediaTypes = new ArrayList<>(); if (contentTypes != null) { for (final Object mediaTypeObject : contentTypes) { if (mediaTypeObject instanceof MediaType) { final MediaType mediaType = (MediaType)mediaTypeObject; mediaTypes.add(mediaType); } else if (mediaTypeObject != null) { mediaTypes.add(MediaType.parseMediaType(mediaTypeObject.toString())); } } } return mediaTypes; } private MediaType defaultMediaType; private final List<MediaType> readMediaTypes; private final List<Class<T>> supportedClasses; private List<MediaType> supportedMediaTypes = new ArrayList<>(); private final List<MediaType> writeMediaTypes; public AbstractHttpMessageConverter(final Class<T> supportedClass, final Collection<?> readMediaTypes, final Collection<?> writeMediaTypes) { this.supportedClasses = Collections.singletonList(supportedClass); this.readMediaTypes = getMediaTypes(readMediaTypes); this.writeMediaTypes = getMediaTypes(writeMediaTypes); final Set<MediaType> mediaTypes = new TreeSet<>(); mediaTypes.addAll(this.readMediaTypes); mediaTypes.addAll(this.writeMediaTypes); this.supportedMediaTypes = new ArrayList<>(mediaTypes); } @Override public boolean canRead(final Class<?> clazz, final MediaType mediaType) { if (supports(clazz)) { if (mediaType == null) { return isReadSupported(this.defaultMediaType); } else { return isReadSupported(mediaType); } } else { return false; } } @Override public boolean canWrite(final Class<?> clazz, final MediaType mediaType) { if (supports(clazz)) { if (mediaType == null) { return isWriteSupported(this.defaultMediaType); } else { return isWriteSupported(mediaType); } } else { return false; } } public MediaType getDefaultMediaType() { return this.defaultMediaType; } @Override public List<MediaType> getSupportedMediaTypes() { return this.supportedMediaTypes; } protected boolean isReadSupported(final MediaType mediaType) { if (mediaType == null) { return true; } else { for (final MediaType supportedMediaType : this.readMediaTypes) { if (supportedMediaType.includes(mediaType)) { return true; } } return false; } } protected boolean isWriteSupported(final MediaType mediaType) { if (mediaType == null) { return true; } else { for (final MediaType supportedMediaType : this.writeMediaTypes) { if (supportedMediaType.includes(mediaType)) { return true; } } return false; } } @Override public T read(final Class<? extends T> clazz, final HttpInputMessage inputMessage) throws IOException, HttpMessageNotReadableException { return null; } public void setDefaultMediaType(final MediaType defaultMediaType) { this.defaultMediaType = defaultMediaType; } protected boolean supports(final Class<?> clazz) { for (final Class<?> supportedClass : this.supportedClasses) { if (supportedClass.isAssignableFrom(clazz)) { return true; } } return false; } @Override public void write(final T object, final MediaType contentType, final HttpOutputMessage outputMessage) throws IOException, HttpMessageNotWritableException { } }