org.linkeddatafragments.fragments.FragmentRequestParserBase Maven / Gradle / Ivy
The newest version!
package org.linkeddatafragments.fragments;
import org.linkeddatafragments.config.ConfigReader;
import javax.servlet.http.HttpServletRequest;
/**
* Base class for implementations of {@link IFragmentRequestParser}.
*
* @author Olaf Hartig
*/
abstract public class FragmentRequestParserBase implements IFragmentRequestParser
{
@Override
final public ILinkedDataFragmentRequest parseIntoFragmentRequest(
final HttpServletRequest httpRequest,
final ConfigReader config )
throws IllegalArgumentException
{
return getWorker( httpRequest, config ).createFragmentRequest();
}
/**
*
* @param httpRequest
* @param config
* @return
* @throws IllegalArgumentException
*/
abstract protected Worker getWorker( final HttpServletRequest httpRequest,
final ConfigReader config )
throws IllegalArgumentException;
/**
*
*/
abstract static protected class Worker
{
/**
*
*/
public final HttpServletRequest request;
/**
*
*/
public final ConfigReader config;
/**
*
*/
public final boolean pageNumberWasRequested;
/**
*
*/
public final long pageNumber;
/**
*
* @param request
* @param config
*/
public Worker( final HttpServletRequest request,
final ConfigReader config )
{
this.request = request;
this.config = config;
final String givenPageNumber = request.getParameter(
ILinkedDataFragmentRequest.PARAMETERNAME_PAGE );
if ( givenPageNumber != null ) {
long pageNumber;
try {
pageNumber = Long.parseLong( givenPageNumber );
} catch (NumberFormatException ex) {
pageNumber = 1L;
}
this.pageNumber = ( pageNumber > 0 ) ? pageNumber : 1L;
this.pageNumberWasRequested = true;
}
else {
this.pageNumber = 1L;
this.pageNumberWasRequested = false;
}
}
/**
*
* @return
* @throws IllegalArgumentException
*/
abstract public ILinkedDataFragmentRequest createFragmentRequest()
throws IllegalArgumentException;
/**
*
* @return
*/
public String getFragmentURL() {
final String datasetURL = getDatasetURL();
final String query = request.getQueryString();
return query == null ? datasetURL : (datasetURL + "?" + query);
}
/**
*
* @return
*/
public String getDatasetURL() {
return extractBaseURL( request, config ) + request.getRequestURI();
}
} // end of class Worker
// ----- HELPERS ---------
/**
*
* @param request
* @param config
* @return
*/
public static String extractBaseURL( final HttpServletRequest request,
final ConfigReader config ) {
if (config.getBaseURL() != null) {
return config.getBaseURL();
} else if ((request.getServerPort() == 80)
|| (request.getServerPort() == 443)) {
return request.getScheme() + "://"
+ request.getServerName();
} else {
return request.getScheme() + "://"
+ request.getServerName() + ":" + request.getServerPort();
}
}
}