GeoPubby  Version 0.1.0.0
ModelResponse Class Reference

Calls into Joseki to send a Jena model over HTTP. More...

Collaboration diagram for ModelResponse:

Public Member Functions

 ModelResponse (Model model, HttpServletRequest request, HttpServletResponse response)
 
void serve ()
 

Private Member Functions

void doResponseModel () throws IOException
 
ModelWriter getWriter (String mediaType, String crs)
 

Private Attributes

final Model model
 
final HttpServletRequest request
 
final HttpServletResponse response
 

Detailed Description

Calls into Joseki to send a Jena model over HTTP.

This gives us content negotiation and all the other tricks supported by Joseki for free. This has to be in the Joseki package because some required methods are not visible.

Constructor & Destructor Documentation

◆ ModelResponse()

ModelResponse ( Model  model,
HttpServletRequest  request,
HttpServletResponse  response 
)
70  {
71 
72  // Handle ?output=format request parameter
73  RequestParamHandler handler = new RequestParamHandler(request);
74  if (handler.isMatchingRequest()) {
75  request = handler.getModifiedRequest();
76  }
77 
78  this.model = model;
79  this.request = request;
80  this.response = response;
81  }
final Model model
Definition: ModelResponse.java:65
final HttpServletResponse response
Definition: ModelResponse.java:67
final HttpServletRequest request
Definition: ModelResponse.java:66

References RequestParamHandler.getModifiedRequest(), RequestParamHandler.isMatchingRequest(), ModelResponse.model, ModelResponse.request, and ModelResponse.response.

Member Function Documentation

◆ doResponseModel()

void doResponseModel ( ) throws IOException
private
101  {
102  response.addHeader("Vary", "Accept");
103  ContentTypeNegotiator negotiator = PubbyNegotiator.getDataNegotiator();
104  MediaRangeSpec bestMatch = negotiator.getBestMatch(
105  request.getHeader("Accept"), request.getHeader("User-Agent"));
106  if (bestMatch == null) {
107  response.setStatus(406);
108  response.setContentType("text/plain");
109  ServletOutputStream out = response.getOutputStream();
110  out.println("406 Not Acceptable: The requested data format is not supported.");
111  out.println("Supported formats are RDF/XML, JSON-LD, GeoJSON, GeoURI, TriX, WKT, GML, KML, SVG, GPX, TriG, Turtle, N3, and N-Triples.");
112  return;
113  }
114  String crs=null;
115  if(request.getParameter("crs")!=null) {
116  crs=request.getParameter("crs").toString();
117  }
118  response.setContentType(bestMatch.getMediaType());
119  getWriter(bestMatch.getMediaType(),crs).write(model, response);
120  response.getOutputStream().flush();
121  }
ExtendedIterator< Resource > write(Model model, HttpServletResponse response)
Definition: ModelWriter.java:24
ModelWriter getWriter(String mediaType, String crs)
Definition: ModelResponse.java:123

References ContentTypeNegotiator.getBestMatch(), PubbyNegotiator.getDataNegotiator(), MediaRangeSpec.getMediaType(), ModelResponse.getWriter(), ModelResponse.model, ModelResponse.request, ModelResponse.response, and ModelWriter.write().

Referenced by ModelResponse.serve().

◆ getWriter()

ModelWriter getWriter ( String  mediaType,
String  crs 
)
private
123  {
124  if ("application/rdf+xml".equals(mediaType)) {
125  return new LDWriter(crs,"RDF/XML");
126  }
127  if ("application/rdf+json".equals(mediaType)) {
128  return new LDWriter(crs,"RDF/JSON");
129  }
130  if ("application/json".equals(mediaType)) {
131  return new LDWriter(crs,"JSON-LD");
132  }
133  if ("application/geojson".equals(mediaType)) {
134  return new GeoJSONWriterr(crs);
135  }
136  if ("text/esrijson".equals(mediaType)) {
137  return new ESRIJSONWriter(crs);
138  }
139  if ("application/geojson-ld".equals(mediaType)) {
140  return new GeoJSONLDWriter(crs);
141  }
142  if ("application/topojson".equals(mediaType)) {
143  return new TopoJSONWriter(crs);
144  }
145  if ("image/svg+xml".equals(mediaType)) {
146  return new SVGWriter(crs);
147  }
148  if ("text/latlon".equals(mediaType)) {
149  return new LatLonTextWriter(crs);
150  }
151  if ("text/grass".equals(mediaType)) {
152  return new GRASSVectorASCIIWriter(crs);
153  }
154  if ("application/json+exi".equals(mediaType)) {
155  return new EXIJSONWriter(crs);
156  }
157  if("text/csv".equals(mediaType)){
158  return new CSVWriter(crs);
159  }
160  if("text/gpx".equals(mediaType)){
161  return new GPXWriter(crs);
162  }
163  if ("application/osm+xml".equals(mediaType)) {
164  return new OSMWriter(crs);
165  }
166  if ("text/osmlink".equals(mediaType)) {
167  return new OSMLinkWriter(crs);
168  }
169  if ("text/googlemapslink".equals(mediaType)) {
170  return new GoogleMapsLinkWriter(crs);
171  }
172  if ("application/geouri".equals(mediaType)) {
173  return new GeoURIWriter(crs);
174  }
175  if ("application/gml".equals(mediaType)) {
176  return new GMLWriter(crs);
177  }
178  if ("application/gml2".equals(mediaType)) {
179  return new de.fuberlin.wiwiss.pubby.exporter.rdf.GMLWriter(crs);
180  }
181  if ("text/gexf".equals(mediaType)) {
182  return new GEXFWriter(crs);
183  }
184  if ("application/prs.coverage+json".equals(mediaType)) {
185  return new CoverageJSONWriter(crs);
186  }
187  if ("application/kml".equals(mediaType)) {
188  return new KMLWriter(crs);
189  }
190  if ("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet".equals(mediaType)) {
191  return new XLSXWriter(crs);
192  }
193  if ("application/msexcel".equals(mediaType)) {
194  return new XLSWriter(crs);
195  }
196  if ("application/trig".equals(mediaType)) {
197  return new LDWriter(crs,"TriG");
198  }
199  if ("application/rdf+xml+exi".equals(mediaType)) {
200  return new RDFEXIWriter();
201  }
202  if ("text/vnd.yaml".equals(mediaType)) {
203  return new YAMLWriter(crs);
204  }
205  if ("application/javascript".equals(mediaType)) {
206  return new JSONPWriter(crs);
207  }
208  if("model/x3d+xml".equals(mediaType)) {
209  return new X3DWriter(crs);
210  }
211  if ("text/ewkt".equals(mediaType)) {
212  return new EWKTWriter(crs);
213  }
214  if ("text/wkt".equals(mediaType)) {
215  return new WKTWriter(crs);
216  }
217  if ("text/twkb".equals(mediaType)) {
218  return new TWKBWriterr(crs);
219  }
220  if ("text/wkb".equals(mediaType)) {
221  return new WKBWriterr(crs);
222  }
223  if ("text/mapml".equals(mediaType)) {
224  return new MapMLWriter(crs);
225  }
226  if ("text/xyz".equals(mediaType)) {
227  return new XYZASCIIWriter(crs);
228  }
229  if ("text/cipher".equals(mediaType)) {
230  return new CypherWriter(crs);
231  }
232  if ("text/olc".equals(mediaType)) {
233  return new OpenLocationCodeWriter(crs);
234  }
235  if ("text/geohash".equals(mediaType)) {
236  return new GeoHashWriter(crs);
237  }
238  if ("text/graphml".equals(mediaType)) {
239  return new GraphMLWriter(crs);
240  }
241  if ("text/tgf".equals(mediaType)) {
242  return new TGFWriter(crs);
243  }
244  if ("text/tlp".equals(mediaType)) {
245  return new TLPWriter(crs);
246  }
247  if ("text/gdf".equals(mediaType)) {
248  return new GDFWriter(crs);
249  }
250  if ("text/gexf".equals(mediaType)) {
251  return new GEXFWriter(crs);
252  }
253  if ("text/gxl".equals(mediaType)) {
254  return new GXLWriter(crs);
255  }
256  if ("application/trix".equals(mediaType)) {
257  return new LDWriter(crs,"TriX");
258  }
259  if ("application/x-turtle".equals(mediaType)) {
260  return new LDWriter(crs,"TURTLE");
261  }
262  if ("text/rdf+n3;charset=utf-8".equals(mediaType)) {
263  return new LDWriter(crs,"N3");
264  }
265  if("application/rt".equals(mediaType)) {
266  return new LDWriter(crs,"RDFTHRIFT");
267  }
268  if("text/nq".equals(mediaType)) {
269  return new LDWriter(crs,"NQUADS");
270  }
271  if("application/hex+x-ndjson".equals(mediaType)) {
272  return new HexTuplesWriter(crs);
273  }
274  return new LDWriter(crs,"N-TRIPLES");
275  }

Referenced by ModelResponse.doResponseModel().

◆ serve()

void serve ( )
83  {
84  // Error hendling is still quite a mess here.
85  try {
87  } catch (IOException ioEx) {
88  throw new RuntimeException(ioEx);
89  } catch (JenaException jEx) {
90  try {
91  response.sendError(
92  HttpServletResponse.SC_INTERNAL_SERVER_ERROR,
93  "JenaException: " + jEx.getMessage());
94  jEx.printStackTrace();
95  } catch (IOException e) {
96  throw new RuntimeException(e);
97  }
98  }
99  }
void doResponseModel()
Definition: ModelResponse.java:101

References ModelResponse.doResponseModel(), and ModelResponse.response.

Referenced by ValuesDataURLServlet.doGet(), and DataURLServlet.doGet().

Member Data Documentation

◆ model

final Model model
private

◆ request

final HttpServletRequest request
private

◆ response

final HttpServletResponse response
private