package org.jboss.resteasy.plugins.providers.jaxb;

import java.lang.annotation.Annotation;

import javax.ws.rs.core.MediaType;

import org.jboss.logging.Logger;
import org.jboss.resteasy.annotations.providers.jaxb.IgnoreMediaTypes;
import org.jboss.resteasy.spi.util.FindAnnotation;

Author:Bill Burke
Version:$Revision: 1 $
/** * @author <a href="mailto:bill@burkecentral.com">Bill Burke</a> * @version $Revision: 1 $ */
public class IgnoredMediaTypes { private static String getVendorString(String subtype) { int idx = subtype.indexOf('+'); if (idx < 0) return subtype; return subtype.substring(0, idx); } private static String getSubtype(String subtype) { int idx = subtype.indexOf('+'); if (idx < 0) return subtype; return subtype.substring(idx + 1); } public static boolean ignored(Class<?> type, Annotation[] annotations, MediaType mediaType) { IgnoreMediaTypes ignore = FindAnnotation.findAnnotation(type, annotations, IgnoreMediaTypes.class); if (ignore == null) return false; for (String mime : ignore.value()) { if (compare(mediaType, mime)) return true; } return false; } private static boolean compare(MediaType mediaType, String mime) { MediaType mt = MediaType.valueOf(mime); if (mt.isWildcardType() || mediaType.isWildcardType()) return true; if (!mediaType.getType().equals(mt.getType())) return false; if (mt.isWildcardSubtype() || mediaType.isWildcardSubtype()) return true; if (mt.getSubtype().startsWith("*+")) { String compare = getSubtype(mt.getSubtype()); String compare2 = getSubtype(mediaType.getSubtype()); return compare.equals(compare2); } else if (mt.getSubtype().endsWith("+*")) { String compare = getVendorString(mt.getSubtype()); String compare2 = getVendorString(mediaType.getSubtype()); return compare.equals(compare2); } else { return mt.getSubtype().equals(mediaType.getSubtype()); } } public static void main(String[] args) { Logger LOG = Logger.getLogger(IgnoredMediaTypes.class); LOG.info(getVendorString("foo+json")); LOG.info(getSubtype("foo+json")); } }