/** * Returns {@code true} if this {@link MediaType} belongs to the given {@link MediaType}. * Similar to what {@link MediaType#is(MediaType)} does except that this one compares the parameters * case-insensitively and excludes 'q' parameter. */ public boolean belongsTo(MediaType mediaTypeRange) { return (mediaTypeRange.type.equals(WILDCARD) || mediaTypeRange.type.equals(type)) && (mediaTypeRange.subtype.equals(WILDCARD) || mediaTypeRange.subtype.equals(subtype)) && containsAllParameters(mediaTypeRange.parameters(), parameters()); }
/** * Returns the quality factor of this {@link MediaType}. If it is not specified, * {@code defaultValueIfNotSpecified} will be returned. */ public float qualityFactor(float defaultValueIfNotSpecified) { // Find 'q' or 'Q'. final List<String> qValues = parameters().get(Q); if (qValues == null || qValues.isEmpty()) { // qvalue does not exist. return defaultValueIfNotSpecified; } try { // Parse the qvalue. Make sure it's within the range of [0, 1]. return Math.max(Math.min(Float.parseFloat(qValues.get(0)), 1.0f), 0.0f); } catch (NumberFormatException e) { // The range with a malformed qvalue gets the lowest possible preference. return 0.0f; } }
/** * Creates a new instance. */ public MediaTypeSet(Iterable<MediaType> mediaTypes) { final Set<MediaType> mediaTypesCopy = new LinkedHashSet<>(); // Using a Set to deduplicate for (MediaType mediaType : requireNonNull(mediaTypes, "mediaTypes")) { requireNonNull(mediaType, "mediaTypes contains null."); checkArgument(!mediaType.hasWildcard(), "mediaTypes contains a wildcard media type: %s", mediaType); // Ensure qvalue does not exists. final List<String> otherQValues = mediaType.parameters().get(Q); checkArgument(otherQValues == null || otherQValues.isEmpty(), "mediaTypes contains a media type with a q-value parameter: %s", mediaType); mediaTypesCopy.add(mediaType); } this.mediaTypes = mediaTypesCopy.toArray(EMPTY_MEDIA_TYPES); }
numParams = range.parameters().size(); } else { numParams = range.parameters().size() - 1;