Merge pull request #15 from nrenner/csv

CSV download
This commit is contained in:
abrensch 2014-05-29 16:37:31 +02:00
commit c16c242a65
4 changed files with 62 additions and 11 deletions

View file

@ -289,7 +289,11 @@ public final class OsmTrack
public void dumpMessages( String filename, RoutingContext rc ) throws Exception
{
BufferedWriter bw = filename == null ? null : new BufferedWriter( new FileWriter( filename ) );
writeMessages( bw, rc );
}
public void writeMessages( BufferedWriter bw, RoutingContext rc ) throws Exception
{
// csv-header-line
String header = "Longitude\tLatitude\tElevation\tDistance\tCostPerKm\tElevCost\tTurnCost";

View file

@ -96,16 +96,16 @@ public class RouteServer extends Thread
cr.quite = true;
cr.doRun( maxRunningTime );
writeHttpHeader(bw);
if ( cr.getErrorMessage() != null )
{
writeHttpHeader(bw);
bw.write( cr.getErrorMessage() );
bw.write( "\n" );
}
else
{
OsmTrack track = cr.getFoundTrack();
writeHttpHeader(bw, handler.getMimeType());
if ( track != null )
{
bw.write( handler.formatTrack(track) );
@ -205,11 +205,17 @@ public class RouteServer extends Thread
return maxRunningTime;
}
private static void writeHttpHeader(BufferedWriter bw) throws IOException {
private static void writeHttpHeader( BufferedWriter bw ) throws IOException
{
writeHttpHeader( bw, "text/plain" );
}
private static void writeHttpHeader( BufferedWriter bw, String mimeType ) throws IOException
{
// http-header
bw.write( "HTTP/1.1 200 OK\n" );
bw.write( "Connection: close\n" );
bw.write( "Content-Type: text/xml; charset=utf-8\n" );
bw.write( "Content-Type: " + mimeType + "; charset=utf-8\n" );
bw.write( "Access-Control-Allow-Origin: *\n" );
bw.write( "\n" );
}

View file

@ -25,4 +25,5 @@ public abstract class RequestHandler
public abstract String formatTrack(OsmTrack track);
public abstract String getMimeType();
}

View file

@ -1,14 +1,15 @@
package btools.server.request;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import btools.router.OsmNodeNamed;
import btools.router.OsmTrack;
import btools.router.RoutingContext;
import btools.server.ServiceContext;
import java.io.BufferedWriter;
import java.io.File;
import java.io.StringWriter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
/**
* URL query parameter handler for web and standalone server. Supports all
@ -29,6 +30,8 @@ import java.io.File;
*/
public class ServerHandler extends RequestHandler {
private RoutingContext rc;
public ServerHandler( ServiceContext serviceContext, HashMap<String, String> params )
{
super( serviceContext, params );
@ -37,7 +40,7 @@ public class ServerHandler extends RequestHandler {
@Override
public RoutingContext readRoutingContext()
{
RoutingContext rc = new RoutingContext();
rc = new RoutingContext();
String profile = params.get( "profile" );
// when custom profile replace prefix with directory path
@ -98,6 +101,20 @@ public class ServerHandler extends RequestHandler {
{
result = track.formatAsKml();
}
else if ("csv".equals(format))
{
try
{
StringWriter sw = new StringWriter();
BufferedWriter bw = new BufferedWriter(sw);
track.writeMessages( bw, rc );
return sw.toString();
}
catch (Exception ex)
{
return "Error: " + ex.getMessage();
}
}
else {
System.out.println("unknown track format '" + format + "', using default");
result = track.formatAsGpx();
@ -106,6 +123,29 @@ public class ServerHandler extends RequestHandler {
return result;
}
@Override
public String getMimeType()
{
// default
String result = "text/plain";
// optional, may be null
String format = params.get( "format" );
if ( format != null )
{
if ( "gpx".equals( format ) || "kml".equals( format ) )
{
result = "text/xml";
}
else if ( "csv".equals( format ) )
{
result = "text/tab-separated-values";
}
}
return result;
}
private static OsmNodeNamed readPosition( String vlon, String vlat, String name )
{
if ( vlon == null ) throw new IllegalArgumentException( "lon " + name + " not found in input" );