Skip to content

Commit e1c9cad

Browse files
author
Olaf Hartig
committed
added an interface and classes for parsing HTTP requests into LinkedDataFragmentRequest objects
1 parent a524f1a commit e1c9cad

File tree

3 files changed

+181
-0
lines changed

3 files changed

+181
-0
lines changed
Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
package org.linkeddatafragments.fragments;
2+
3+
import javax.servlet.http.HttpServletRequest;
4+
5+
import org.linkeddatafragments.config.ConfigReader;
6+
7+
/**
8+
* Base class for implementations of {@link IFragmentRequestParser}.
9+
*
10+
* @author <a href="http://olafhartig.de">Olaf Hartig</a>
11+
*/
12+
abstract public class FragmentRequestParserBase implements IFragmentRequestParser
13+
{
14+
@Override
15+
final public LinkedDataFragmentRequest parseIntoFragmentRequest(
16+
final HttpServletRequest httpRequest,
17+
final ConfigReader config )
18+
throws IllegalArgumentException
19+
{
20+
return getWorker( httpRequest, config ).createFragmentRequest();
21+
}
22+
23+
abstract protected Worker getWorker( final HttpServletRequest httpRequest,
24+
final ConfigReader config )
25+
throws IllegalArgumentException;
26+
27+
28+
abstract static protected class Worker
29+
{
30+
public final HttpServletRequest request;
31+
public final ConfigReader config;
32+
33+
public final boolean pageNumberWasRequested;
34+
public final long pageNumber;
35+
36+
public Worker( final HttpServletRequest request,
37+
final ConfigReader config )
38+
{
39+
this.request = request;
40+
this.config = config;
41+
42+
final String givenPageNumber = request.getParameter(
43+
LinkedDataFragmentRequest.PARAMETERNAME_PAGE );
44+
if ( givenPageNumber != null ) {
45+
long pageNumber;
46+
try {
47+
pageNumber = Long.parseLong( givenPageNumber );
48+
} catch (NumberFormatException ex) {
49+
pageNumber = 1L;
50+
}
51+
this.pageNumber = ( pageNumber > 0 ) ? pageNumber : 1L;
52+
this.pageNumberWasRequested = true;
53+
}
54+
else {
55+
this.pageNumber = 1L;
56+
this.pageNumberWasRequested = false;
57+
}
58+
}
59+
60+
abstract public LinkedDataFragmentRequest createFragmentRequest()
61+
throws IllegalArgumentException;
62+
63+
public String getFragmentURL() {
64+
final String datasetURL = getDatasetURL();
65+
final String query = request.getQueryString();
66+
return query == null ? datasetURL : (datasetURL + "?" + query);
67+
}
68+
69+
public String getDatasetURL() {
70+
return extractBaseURL( request, config ) + request.getRequestURI();
71+
}
72+
73+
} // end of class Worker
74+
75+
76+
// ----- HELPERS ---------
77+
78+
public static String extractBaseURL( final HttpServletRequest request,
79+
final ConfigReader config ) {
80+
if (config.getBaseURL() != null) {
81+
return config.getBaseURL();
82+
} else if ((request.getServerPort() == 80)
83+
|| (request.getServerPort() == 443)) {
84+
return request.getScheme() + "://"
85+
+ request.getServerName();
86+
} else {
87+
return request.getScheme() + "://"
88+
+ request.getServerName() + ":" + request.getServerPort();
89+
}
90+
}
91+
92+
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package org.linkeddatafragments.fragments;
2+
3+
import javax.servlet.http.HttpServletRequest;
4+
5+
import org.linkeddatafragments.config.ConfigReader;
6+
7+
/**
8+
* Parses HTTP requests into specific {@link LinkedDataFragmentRequest}s.
9+
*
10+
* @author <a href="http://olafhartig.de">Olaf Hartig</a>
11+
*/
12+
public interface IFragmentRequestParser
13+
{
14+
/**
15+
* Parses the given HTTP request into a specific
16+
* {@link LinkedDataFragmentRequest}.
17+
*
18+
* @throws IllegalArgumentException
19+
* If the given HTTP request cannot be interpreted (perhaps due to
20+
* missing request parameters).
21+
*/
22+
LinkedDataFragmentRequest parseIntoFragmentRequest(
23+
final HttpServletRequest httpRequest,
24+
final ConfigReader config )
25+
throws IllegalArgumentException;
26+
}
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
package org.linkeddatafragments.fragments.tpf;
2+
3+
import javax.servlet.http.HttpServletRequest;
4+
5+
import org.linkeddatafragments.config.ConfigReader;
6+
import org.linkeddatafragments.fragments.FragmentRequestParserBase;
7+
import org.linkeddatafragments.fragments.IFragmentRequestParser;
8+
import org.linkeddatafragments.fragments.LinkedDataFragmentRequest;
9+
10+
/**
11+
* An {@link IFragmentRequestParser} for {@link TriplePatternFragmentRequest}s.
12+
*
13+
* @author <a href="http://olafhartig.de">Olaf Hartig</a>
14+
*/
15+
public class TPFRequestParser extends FragmentRequestParserBase
16+
{
17+
@Override
18+
protected Worker getWorker( final HttpServletRequest httpRequest,
19+
final ConfigReader config )
20+
throws IllegalArgumentException
21+
{
22+
return new Worker( httpRequest, config );
23+
}
24+
25+
26+
static protected class Worker extends FragmentRequestParserBase.Worker
27+
{
28+
public Worker( final HttpServletRequest request,
29+
final ConfigReader config )
30+
{
31+
super( request, config );
32+
}
33+
34+
public LinkedDataFragmentRequest createFragmentRequest()
35+
throws IllegalArgumentException
36+
{
37+
return new TriplePatternFragmentRequestImpl( getFragmentURL(),
38+
getDatasetURL(),
39+
pageNumberWasRequested,
40+
pageNumber,
41+
getSubject(),
42+
getPredicate(),
43+
getObject() );
44+
}
45+
46+
public String getSubject() {
47+
return request.getParameter(
48+
TriplePatternFragmentRequest.PARAMETERNAME_SUBJ );
49+
}
50+
51+
public String getPredicate() {
52+
return request.getParameter(
53+
TriplePatternFragmentRequest.PARAMETERNAME_PRED );
54+
}
55+
56+
public String getObject() {
57+
return request.getParameter(
58+
TriplePatternFragmentRequest.PARAMETERNAME_OBJ );
59+
}
60+
61+
} // end of class Worker
62+
63+
}

0 commit comments

Comments
 (0)