GeoPubby  Version 0.1.0.0
ContentTypeNegotiator Class Reference
Collaboration diagram for ContentTypeNegotiator:

Classes

class  AcceptHeaderOverride
 
class  Negotiation
 
class  VariantSpec
 

Public Member Functions

VariantSpec addVariant (String mediaType)
 
void setDefaultAccept (String accept)
 Sets an Accept header to be used as the default if a client does not send an Accept header, or if the Accept header cannot be parsed. More...
 
void addUserAgentOverride (Pattern userAgentString, String originalAcceptHeader, String newAcceptHeader)
 Overrides the Accept header for certain user agents. More...
 
MediaRangeSpec getBestMatch (String accept)
 
MediaRangeSpec getBestMatch (String accept, String userAgent)
 

Private Member Functions

List< MediaRangeSpectoAcceptRanges (String accept)
 

Private Attributes

List< VariantSpecvariantSpecs = new ArrayList<VariantSpec>()
 
List< MediaRangeSpecdefaultAcceptRanges
 
List< AcceptHeaderOverrideuserAgentOverrides
 

Member Function Documentation

◆ addUserAgentOverride()

void addUserAgentOverride ( Pattern  userAgentString,
String  originalAcceptHeader,
String  newAcceptHeader 
)

Overrides the Accept header for certain user agents.

This can be used to implement special-case handling for user agents that send faulty Accept headers.

Parameters
userAgentStringA pattern to be matched against the User-Agent header; null means regardless of User-Agent
originalAcceptHeaderOnly override the Accept header if the user agent sends this header; null means always override
newAcceptHeaderThe Accept header to be used instead
42  {
43  this.userAgentOverrides.add(new AcceptHeaderOverride(
44  userAgentString, originalAcceptHeader, newAcceptHeader));
45  }
List< AcceptHeaderOverride > userAgentOverrides
Definition: ContentTypeNegotiator.java:13

Referenced by PubbyNegotiator.[static initializer](), and ContentTypeNegotiatorTest.testUserAgentOverrideSimple().

◆ addVariant()

◆ getBestMatch() [1/2]

MediaRangeSpec getBestMatch ( String  accept)
47  {
48  return getBestMatch(accept, null);
49  }
MediaRangeSpec getBestMatch(String accept)
Definition: ContentTypeNegotiator.java:47

Referenced by WebURIServlet.doGet(), ModelResponse.doResponseModel(), ContentTypeNegotiatorTest.testAcceptAlias(), PubbyNegotiatorTest.testAcceptEverythingGetsHTML(), PubbyNegotiatorTest.testAcceptHTML(), PubbyNegotiatorTest.testAcceptJSON(), PubbyNegotiatorTest.testAcceptRDFXML(), PubbyNegotiatorTest.testAcceptXHTMLGetsHTML(), PubbyNegotiatorTest.testAcceptXMLGetsRDFXML(), PubbyNegotiatorTest.testBrowsersGetHTML(), PubbyNegotiatorTest.testDataURIDefaultsToN3ForFirefox(), PubbyNegotiatorTest.testDataURIDefaultsToN3ForSafari(), ContentTypeNegotiatorTest.testDefaultToHigherQuality(), ContentTypeNegotiatorTest.testEmptyHeader(), ContentTypeNegotiatorTest.testEmptyHeaderPickBestQuality(), PubbyNegotiatorTest.testFirefox3GetsHTML(), PubbyNegotiatorTest.testGetN3(), PubbyNegotiatorTest.testGetNTriples(), PubbyNegotiatorTest.testGetTurtle(), ContentTypeNegotiatorTest.testMatchSimple(), PubbyNegotiatorTest.testNoAcceptGetsHTML(), ContentTypeNegotiatorTest.testNoMatch(), ContentTypeNegotiatorTest.testNoMatchIfBestEqualsZero(), ContentTypeNegotiatorTest.testNoVariantOnServer(), ContentTypeNegotiatorTest.testPickCorrectMatchSimple(), ContentTypeNegotiatorTest.testPickCorrectMatchWithClientQuality(), ContentTypeNegotiatorTest.testPickCorrectMatchWithServerQuality1(), ContentTypeNegotiatorTest.testPickCorrectMatchWithServerQuality2(), ContentTypeNegotiatorTest.testPickFirstIfTwoEqualOptions(), ContentTypeNegotiatorTest.testQualityMultiplication(), PubbyNegotiatorTest.testSafariGetsHTML(), ContentTypeNegotiatorTest.testSpecifyDefaultAccept(), PubbyNegotiatorTest.testTabulatorGetsRDF(), ContentTypeNegotiatorTest.testUseAliasQuality(), ContentTypeNegotiatorTest.testUseDefaultIfNoMatch(), ContentTypeNegotiatorTest.testUseDefaultIfTwoEqualOptions(), and ContentTypeNegotiatorTest.testUserAgentOverrideSimple().

◆ getBestMatch() [2/2]

MediaRangeSpec getBestMatch ( String  accept,
String  userAgent 
)
51  {
52  if (userAgent == null) {
53  userAgent = "";
54  }
55  Iterator<AcceptHeaderOverride> it = userAgentOverrides.iterator();
56  String overriddenAccept = accept;
57  while (it.hasNext()) {
58  AcceptHeaderOverride override = (AcceptHeaderOverride) it.next();
59  if (override.matches(accept, userAgent)) {
60  overriddenAccept = override.getReplacement();
61  }
62  }
63  return new Negotiation(toAcceptRanges(overriddenAccept)).negotiate();
64  }
List< MediaRangeSpec > toAcceptRanges(String accept)
Definition: ContentTypeNegotiator.java:66

References ContentTypeNegotiator.AcceptHeaderOverride.getReplacement(), ContentTypeNegotiator.Negotiation.negotiate(), ContentTypeNegotiator.toAcceptRanges(), and ContentTypeNegotiator.userAgentOverrides.

◆ setDefaultAccept()

void setDefaultAccept ( String  accept)

Sets an Accept header to be used as the default if a client does not send an Accept header, or if the Accept header cannot be parsed.

Defaults to "* / *".

27  {
28  this.defaultAcceptRanges = MediaRangeSpec.parseAccept(accept);
29  }
List< MediaRangeSpec > defaultAcceptRanges
Definition: ContentTypeNegotiator.java:11

References MediaRangeSpec.parseAccept().

Referenced by PubbyNegotiator.[static initializer](), and ContentTypeNegotiatorTest.testSpecifyDefaultAccept().

◆ toAcceptRanges()

List<MediaRangeSpec> toAcceptRanges ( String  accept)
private
66  {
67  if (accept == null) {
68  return defaultAcceptRanges;
69  }
70  List<MediaRangeSpec> result = MediaRangeSpec.parseAccept(accept);
71  if (result.isEmpty()) {
72  return defaultAcceptRanges;
73  }
74  return result;
75  }

References ContentTypeNegotiator.defaultAcceptRanges, and MediaRangeSpec.parseAccept().

Referenced by ContentTypeNegotiator.getBestMatch().

Member Data Documentation

◆ defaultAcceptRanges

List<MediaRangeSpec> defaultAcceptRanges
private
Initial value:
=
Collections.singletonList(MediaRangeSpec.parseRange("*/*"))

Referenced by ContentTypeNegotiator.toAcceptRanges().

◆ userAgentOverrides

List<AcceptHeaderOverride> userAgentOverrides
private
Initial value:
=
new ArrayList<AcceptHeaderOverride>()

Referenced by ContentTypeNegotiator.getBestMatch().

◆ variantSpecs

List<VariantSpec> variantSpecs = new ArrayList<VariantSpec>()
private