GeoPubby  Version 0.1.0.0
MediaRangeSpec Class Reference
Collaboration diagram for MediaRangeSpec:

Public Member Functions

String getType ()
 
String getSubtype ()
 
String getMediaType ()
 
List< String > getParameterNames ()
 
String getParameter (String parameterName)
 
boolean isWildcardType ()
 
boolean isWildcardSubtype ()
 
double getQuality ()
 
int getPrecedence (MediaRangeSpec range)
 
MediaRangeSpec getBestMatch (List< MediaRangeSpec > mediaRanges)
 
String toString ()
 

Static Public Member Functions

static MediaRangeSpec parseType (String mediaType)
 Parses a media type from a string such as text/html;charset=utf-8;q=0.9. More...
 
static MediaRangeSpec parseRange (String mediaRange)
 Parses a media range from a string such as text/*;charset=utf-8;q=0.9. More...
 
static List< MediaRangeSpecparseAccept (String s)
 Parses an HTTP Accept header into a List of MediaRangeSpecs. More...
 

Static Package Functions

 [static initializer]
 

Private Member Functions

 MediaRangeSpec (String type, String subtype, List< String > parameterNames, List< String > parameterValues, double quality)
 
String buildMediaType ()
 

Static Private Member Functions

static String unescape (String s)
 
static String escape (String s)
 

Private Attributes

final String type
 
final String subtype
 
final List< String > parameterNames
 
final List< String > parameterValues
 
final String mediaType
 
final double quality
 

Static Private Attributes

static final Pattern tokenPattern
 
static final Pattern parameterPattern
 
static final Pattern mediaRangePattern
 
static final Pattern qValuePattern
 

Constructor & Destructor Documentation

◆ MediaRangeSpec()

MediaRangeSpec ( String  type,
String  subtype,
List< String >  parameterNames,
List< String >  parameterValues,
double  quality 
)
private
113  {
114  this.type = type;
115  this.subtype = subtype;
116  this.parameterNames = Collections.unmodifiableList(parameterNames);
118  this.mediaType = buildMediaType();
119  this.quality = quality;
120  }
final List< String > parameterNames
Definition: MediaRangeSpec.java:106
final String type
Definition: MediaRangeSpec.java:104
final String subtype
Definition: MediaRangeSpec.java:105
final double quality
Definition: MediaRangeSpec.java:109
final String mediaType
Definition: MediaRangeSpec.java:108
String buildMediaType()
Definition: MediaRangeSpec.java:122
final List< String > parameterValues
Definition: MediaRangeSpec.java:107

References MediaRangeSpec.buildMediaType(), MediaRangeSpec.parameterNames, MediaRangeSpec.parameterValues, MediaRangeSpec.quality, MediaRangeSpec.subtype, and MediaRangeSpec.type.

Referenced by MediaRangeSpec.getBestMatch(), and MediaRangeSpec.parseRange().

Member Function Documentation

◆ [static initializer]()

◆ buildMediaType()

String buildMediaType ( )
private
122  {
123  StringBuffer result = new StringBuffer();
124  result.append(type);
125  result.append("/");
126  result.append(subtype);
127  for (int i = 0; i < parameterNames.size(); i++) {
128  result.append(";");
129  result.append(parameterNames.get(i));
130  result.append("=");
131  String value = (String) parameterValues.get(i);
132  if (tokenPattern.matcher(value).matches()) {
133  result.append(value);
134  } else {
135  result.append("\"");
136  result.append(escape(value));
137  result.append("\"");
138  }
139  }
140  return result.toString();
141  }
static final Pattern tokenPattern
Definition: MediaRangeSpec.java:11
static String escape(String s)
Definition: MediaRangeSpec.java:100

References MediaRangeSpec.escape(), MediaRangeSpec.parameterNames, MediaRangeSpec.parameterValues, MediaRangeSpec.subtype, MediaRangeSpec.tokenPattern, and MediaRangeSpec.type.

Referenced by MediaRangeSpec.MediaRangeSpec().

◆ escape()

static String escape ( String  s)
staticprivate
100  {
101  return s.replaceAll("[\\\\\"]", "\\\\$0");
102  }

Referenced by MediaRangeSpec.buildMediaType().

◆ getBestMatch()

MediaRangeSpec getBestMatch ( List< MediaRangeSpec mediaRanges)
196  {
197  MediaRangeSpec result = null;
198  int bestPrecedence = 0;
199  Iterator<MediaRangeSpec> it = mediaRanges.iterator();
200  while (it.hasNext()) {
201  MediaRangeSpec range = (MediaRangeSpec) it.next();
202  if (getPrecedence(range) > bestPrecedence) {
203  bestPrecedence = getPrecedence(range);
204  result = range;
205  }
206  }
207  return result;
208  }
int getPrecedence(MediaRangeSpec range)
Definition: MediaRangeSpec.java:180
MediaRangeSpec(String type, String subtype, List< String > parameterNames, List< String > parameterValues, double quality)
Definition: MediaRangeSpec.java:111

References MediaRangeSpec.getPrecedence(), and MediaRangeSpec.MediaRangeSpec().

Referenced by ContentTypeNegotiator.Negotiation.evaluateVariantAlias(), and MediaRangeSpecTest.testGetBestMatchSameQuality().

◆ getMediaType()

String getMediaType ( )
151  {
152  return mediaType;
153  }

References MediaRangeSpec.mediaType.

Referenced by MediaRangeSpecTest.assertMediaRangeInList(), WebURIServlet.doGet(), ModelResponse.doResponseModel(), ContentTypeNegotiatorTest.testAcceptAlias(), PubbyNegotiatorTest.testAcceptEverythingGetsHTML(), PubbyNegotiatorTest.testAcceptHTML(), PubbyNegotiatorTest.testAcceptJSON(), PubbyNegotiatorTest.testAcceptRDFXML(), PubbyNegotiatorTest.testAcceptXHTMLGetsHTML(), PubbyNegotiatorTest.testAcceptXMLGetsRDFXML(), PubbyNegotiatorTest.testBrowsersGetHTML(), MediaRangeSpecTest.testCaseInsensitive(), PubbyNegotiatorTest.testDataURIDefaultsToN3ForFirefox(), PubbyNegotiatorTest.testDataURIDefaultsToN3ForSafari(), ContentTypeNegotiatorTest.testDefaultToHigherQuality(), ContentTypeNegotiatorTest.testEmptyHeader(), ContentTypeNegotiatorTest.testEmptyHeaderPickBestQuality(), PubbyNegotiatorTest.testFirefox3GetsHTML(), MediaRangeSpecTest.testGetBestMatchSameQuality(), MediaRangeSpecTest.testGetMediaType(), PubbyNegotiatorTest.testGetN3(), PubbyNegotiatorTest.testGetNTriples(), PubbyNegotiatorTest.testGetTurtle(), ContentTypeNegotiatorTest.testMatchSimple(), PubbyNegotiatorTest.testNoAcceptGetsHTML(), MediaRangeSpecTest.testParameterValueEscapingRoundTrip(), ContentTypeNegotiatorTest.testPickCorrectMatchSimple(), ContentTypeNegotiatorTest.testPickCorrectMatchWithClientQuality(), ContentTypeNegotiatorTest.testPickCorrectMatchWithServerQuality1(), ContentTypeNegotiatorTest.testPickCorrectMatchWithServerQuality2(), ContentTypeNegotiatorTest.testPickFirstIfTwoEqualOptions(), ContentTypeNegotiatorTest.testQualityMultiplication(), MediaRangeSpecTest.testQuotedParameter(), PubbyNegotiatorTest.testSafariGetsHTML(), MediaRangeSpecTest.testSimpleParameters(), MediaRangeSpecTest.testSimpleSyntax(), ContentTypeNegotiatorTest.testSpecifyDefaultAccept(), PubbyNegotiatorTest.testTabulatorGetsRDF(), ContentTypeNegotiatorTest.testUseAliasQuality(), ContentTypeNegotiatorTest.testUseDefaultIfNoMatch(), ContentTypeNegotiatorTest.testUseDefaultIfTwoEqualOptions(), ContentTypeNegotiatorTest.testUserAgentOverrideSimple(), and MediaRangeSpecTest.testWithParameters().

◆ getParameter()

String getParameter ( String  parameterName)

◆ getParameterNames()

List<String> getParameterNames ( )

◆ getPrecedence()

int getPrecedence ( MediaRangeSpec  range)
180  {
181  if (range.isWildcardType()) return 1;
182  if (!range.type.equals(type)) return 0;
183  if (range.isWildcardSubtype()) return 2;
184  if (!range.subtype.equals(subtype)) return 0;
185  if (range.getParameterNames().isEmpty()) return 3;
186  int result = 3;
187  for (int i = 0; i < range.getParameterNames().size(); i++) {
188  String name = (String) range.getParameterNames().get(i);
189  String value = range.getParameter(name);
190  if (!value.equals(getParameter(name))) return 0;
191  result++;
192  }
193  return result;
194  }
String getParameter(String parameterName)
Definition: MediaRangeSpec.java:159

References MediaRangeSpec.getParameter(), MediaRangeSpec.getParameterNames(), MediaRangeSpec.isWildcardSubtype(), MediaRangeSpec.isWildcardType(), MediaRangeSpec.subtype, and MediaRangeSpec.type.

Referenced by MediaRangeSpec.getBestMatch(), MediaRangeSpecTest.testCaseInsensitiveMatch(), and MediaRangeSpecTest.testGetPrecedence().

◆ getQuality()

◆ getSubtype()

◆ getType()

◆ isWildcardSubtype()

boolean isWildcardSubtype ( )

◆ isWildcardType()

◆ parseAccept()

static List<MediaRangeSpec> parseAccept ( String  s)
static

Parses an HTTP Accept header into a List of MediaRangeSpecs.

Returns
A List of MediaRangeSpecs
87  {
88  List<MediaRangeSpec> result = new ArrayList<MediaRangeSpec>();
89  Matcher m = mediaRangePattern.matcher(s);
90  while (m.find()) {
91  result.add(parseRange(m.group()));
92  }
93  return result;
94  }
static final Pattern mediaRangePattern
Definition: MediaRangeSpec.java:13
static MediaRangeSpec parseRange(String mediaRange)
Parses a media range from a string such as text/*;charset=utf-8;q=0.9.
Definition: MediaRangeSpec.java:51

References MediaRangeSpec.mediaRangePattern, and MediaRangeSpec.parseRange().

Referenced by ContentTypeNegotiator.setDefaultAccept(), MediaRangeSpecTest.testAcceptIgnoreWSAndJunk(), MediaRangeSpecTest.testAcceptOneRange(), MediaRangeSpecTest.testAcceptTwoRanges(), MediaRangeSpecTest.testAcceptWithQuality(), MediaRangeSpecTest.testGetBestMatchSameQuality(), and ContentTypeNegotiator.toAcceptRanges().

◆ parseRange()

static MediaRangeSpec parseRange ( String  mediaRange)
static

Parses a media range from a string such as text/*;charset=utf-8;q=0.9.

Unlike simple media types, media ranges may include wildcards.

51  {
52  Matcher m = mediaRangePattern.matcher(mediaRange);
53  if (!m.matches()) {
54  return null;
55  }
56  String type = m.group(1).toLowerCase();
57  String subtype = m.group(2).toLowerCase();
58  String unparsedParameters = m.group(3);
59  String qValue = m.group(7);
60  m = parameterPattern.matcher(unparsedParameters);
61  if ("*".equals(type) && !"*".equals(subtype)) {
62  return null;
63  }
64  List<String> parameterNames = new ArrayList<String>();
65  List<String> parameterValues = new ArrayList<String>();
66  while (m.find()) {
67  String name = m.group(1).toLowerCase();
68  String value = (m.group(3) == null) ? m.group(2) : unescape(m.group(3));
69  parameterNames.add(name);
70  parameterValues.add(value);
71  }
72  double quality = 1.0;
73  if (qValue != null && qValuePattern.matcher(qValue).matches()) {
74  try {
75  quality = Double.parseDouble(qValue);
76  } catch (NumberFormatException ex) {
77  // quality stays at default value
78  }
79  }
81  }
static final Pattern qValuePattern
Definition: MediaRangeSpec.java:14
static String unescape(String s)
Definition: MediaRangeSpec.java:96
static final Pattern parameterPattern
Definition: MediaRangeSpec.java:12

References MediaRangeSpec.mediaRangePattern, MediaRangeSpec.MediaRangeSpec(), MediaRangeSpec.parameterNames, MediaRangeSpec.parameterPattern, MediaRangeSpec.parameterValues, MediaRangeSpec.quality, MediaRangeSpec.qValuePattern, MediaRangeSpec.subtype, MediaRangeSpec.type, and MediaRangeSpec.unescape().

Referenced by MediaRangeSpecTest.assertIllegalMediaTypeSyntax(), MediaRangeSpec.parseAccept(), MediaRangeSpec.parseType(), MediaRangeSpecTest.testCaseInsensitive(), MediaRangeSpecTest.testGetMediaType(), MediaRangeSpecTest.testGetPrecedence(), MediaRangeSpecTest.testGetSubtype(), MediaRangeSpecTest.testGetType(), MediaRangeSpecTest.testIllegalQualityValue(), MediaRangeSpecTest.testIllegalWildcard(), MediaRangeSpecTest.testNoWildcard(), MediaRangeSpecTest.testParametersAfterQualityAreIgnored(), MediaRangeSpecTest.testParameterValueEscaping(), MediaRangeSpecTest.testParameterValueEscapingRoundTrip(), MediaRangeSpecTest.testQualityAfterParameter(), MediaRangeSpecTest.testQualityValue(), MediaRangeSpecTest.testQuotedParameter(), MediaRangeSpecTest.testSimpleParameters(), MediaRangeSpecTest.testSimpleQuality(), MediaRangeSpecTest.testSimpleSyntax(), MediaRangeSpecTest.testWildcard(), and MediaRangeSpecTest.testWithParameters().

◆ parseType()

static MediaRangeSpec parseType ( String  mediaType)
static

◆ toString()

String toString ( )
210  {
211  return mediaType + ";q=" + quality;
212  }

References MediaRangeSpec.mediaType, and MediaRangeSpec.quality.

◆ unescape()

static String unescape ( String  s)
staticprivate
96  {
97  return s.replaceAll("\\\\(.)", "$1");
98  }

Referenced by MediaRangeSpec.parseRange().

Member Data Documentation

◆ mediaRangePattern

final Pattern mediaRangePattern
staticprivate

◆ mediaType

final String mediaType
private

◆ parameterNames

◆ parameterPattern

final Pattern parameterPattern
staticprivate

◆ parameterValues

◆ quality

◆ qValuePattern

final Pattern qValuePattern
staticprivate

◆ subtype

◆ tokenPattern

final Pattern tokenPattern
staticprivate

◆ type