change library interface to expose json container as structure to exchange data

This commit is contained in:
Dennis Luxen
2014-11-25 09:14:01 +01:00
parent b50a907ca3
commit 4a6325696e
14 changed files with 69 additions and 80 deletions
+6 -8
View File
@@ -64,12 +64,11 @@ template <class DataFacadeT> class DistanceTablePlugin final : public BasePlugin
const std::string GetDescriptor() const final { return descriptor_string; }
void HandleRequest(const RouteParameters &route_parameters, http::Reply &reply) final
int HandleRequest(const RouteParameters &route_parameters, JSON::Object &json_result) final
{
if (!check_all_coordinates(route_parameters.coordinates))
{
reply = http::Reply::StockReply(http::Reply::badRequest);
return;
return 400;
}
const bool checksum_OK = (route_parameters.check_sum == facade->GetCheckSum());
@@ -103,11 +102,9 @@ template <class DataFacadeT> class DistanceTablePlugin final : public BasePlugin
if (!result_table)
{
reply = http::Reply::StockReply(http::Reply::badRequest);
return;
return 400;
}
JSON::Object json_object;
JSON::Array json_array;
const auto number_of_locations = phantom_node_vector.size();
for (const auto row : osrm::irange<std::size_t>(0, number_of_locations))
@@ -118,8 +115,9 @@ template <class DataFacadeT> class DistanceTablePlugin final : public BasePlugin
json_row.values.insert(json_row.values.end(), row_begin_iterator, row_end_iterator);
json_array.values.push_back(json_row);
}
json_object.values["distance_table"] = json_array;
JSON::render(reply.content, json_object);
json_result.values["distance_table"] = json_array;
// JSON::render(reply.content, json_object);
return 200;
}
private:
+2 -6
View File
@@ -48,11 +48,8 @@ class HelloWorldPlugin final : public BasePlugin
virtual ~HelloWorldPlugin() {}
const std::string GetDescriptor() const final { return descriptor_string; }
void HandleRequest(const RouteParameters &routeParameters, http::Reply &reply) final
int HandleRequest(const RouteParameters &routeParameters, JSON::Object &json_result) final
{
reply.status = http::Reply::ok;
JSON::Object json_result;
std::string temp_string;
json_result.values["title"] = "Hello World";
@@ -98,8 +95,7 @@ class HelloWorldPlugin final : public BasePlugin
++counter;
}
json_result.values["hints"] = json_hints;
JSON::render(reply.content, json_result);
return 200;
}
private:
+3 -7
View File
@@ -44,16 +44,14 @@ template <class DataFacadeT> class LocatePlugin final : public BasePlugin
explicit LocatePlugin(DataFacadeT *facade) : descriptor_string("locate"), facade(facade) {}
const std::string GetDescriptor() const final { return descriptor_string; }
void HandleRequest(const RouteParameters &route_parameters, http::Reply &reply) final
int HandleRequest(const RouteParameters &route_parameters, JSON::Object &json_result) final
{
// check number of parameters
if (route_parameters.coordinates.empty() || !route_parameters.coordinates.front().is_valid())
{
reply = http::Reply::StockReply(http::Reply::badRequest);
return;
return 400;
}
JSON::Object json_result;
FixedPointCoordinate result;
if (!facade->LocateClosestEndPointForCoordinate(route_parameters.coordinates.front(),
result))
@@ -62,15 +60,13 @@ template <class DataFacadeT> class LocatePlugin final : public BasePlugin
}
else
{
reply.status = http::Reply::ok;
json_result.values["status"] = 0;
JSON::Array json_coordinate;
json_coordinate.values.push_back(result.lat / COORDINATE_PRECISION);
json_coordinate.values.push_back(result.lon / COORDINATE_PRECISION);
json_result.values["mapped_coordinate"] = json_coordinate;
}
JSON::render(reply.content, json_result);
return 200;
}
private:
+4 -6
View File
@@ -49,13 +49,12 @@ template <class DataFacadeT> class NearestPlugin final : public BasePlugin
const std::string GetDescriptor() const final { return descriptor_string; }
void HandleRequest(const RouteParameters &route_parameters, http::Reply &reply) final
int HandleRequest(const RouteParameters &route_parameters, JSON::Object &json_result) final
{
// check number of parameters
if (route_parameters.coordinates.empty() || !route_parameters.coordinates.front().is_valid())
{
reply = http::Reply::StockReply(http::Reply::badRequest);
return;
return 400;
}
auto number_of_results = static_cast<std::size_t>(route_parameters.num_results);
std::vector<PhantomNode> phantom_node_vector;
@@ -63,14 +62,13 @@ template <class DataFacadeT> class NearestPlugin final : public BasePlugin
phantom_node_vector,
static_cast<int>(number_of_results));
JSON::Object json_result;
if (phantom_node_vector.empty() || !phantom_node_vector.front().is_valid())
{
json_result.values["status"] = 207;
}
else
{
reply.status = http::Reply::ok;
// reply.status = http::Reply::ok;
json_result.values["status"] = 0;
if (number_of_results > 1)
@@ -107,7 +105,7 @@ template <class DataFacadeT> class NearestPlugin final : public BasePlugin
json_result.values["name"] = temp_string;
}
}
JSON::render(reply.content, json_result);
return 200;
}
private:
+3 -5
View File
@@ -28,10 +28,8 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#ifndef BASEPLUGIN_H_
#define BASEPLUGIN_H_
// remove
#include "../Server/Http/Reply.h"
#include <osrm/coordinate.hpp>
#include <osrm/json_container.hpp>
#include <osrm/route_parameters.hpp>
#include <string>
@@ -44,8 +42,8 @@ class BasePlugin
// Maybe someone can explain the pure virtual destructor thing to me (dennis)
virtual ~BasePlugin() {}
virtual const std::string GetDescriptor() const = 0;
virtual void HandleRequest(const RouteParameters &routeParameters, http::Reply &reply) = 0;
virtual bool check_all_coordinates(const std::vector<FixedPointCoordinate> coordinates) const final
virtual int HandleRequest(const RouteParameters &, JSON::Object &) = 0;
virtual bool check_all_coordinates(const std::vector<FixedPointCoordinate> &coordinates) const final
{
if (2 > coordinates.size() ||
std::any_of(std::begin(coordinates),
+2 -4
View File
@@ -44,14 +44,12 @@ template <class DataFacadeT> class TimestampPlugin final : public BasePlugin
{
}
const std::string GetDescriptor() const final { return descriptor_string; }
void HandleRequest(const RouteParameters &route_parameters, http::Reply &reply) final
int HandleRequest(const RouteParameters &route_parameters, JSON::Object &json_result) final
{
reply.status = http::Reply::ok;
JSON::Object json_result;
json_result.values["status"] = 0;
const std::string timestamp = facade->GetTimestamp();
json_result.values["timestamp"] = timestamp;
JSON::render(reply.content, json_result);
return 200;
}
private:
+4 -5
View File
@@ -71,14 +71,12 @@ template <class DataFacadeT> class ViaRoutePlugin final : public BasePlugin
const std::string GetDescriptor() const final { return descriptor_string; }
void HandleRequest(const RouteParameters &route_parameters, http::Reply &reply) final
int HandleRequest(const RouteParameters &route_parameters, JSON::Object &json_result) final
{
if (!check_all_coordinates(route_parameters.coordinates))
{
reply = http::Reply::StockReply(http::Reply::badRequest);
return;
return 400;
}
reply.status = http::Reply::ok;
std::vector<phantom_node_pair> phantom_node_pair_list(route_parameters.coordinates.size());
const bool checksum_OK = (route_parameters.check_sum == facade->GetCheckSum());
@@ -185,7 +183,8 @@ template <class DataFacadeT> class ViaRoutePlugin final : public BasePlugin
}
descriptor->SetConfig(route_parameters);
descriptor->Run(raw_route, reply);
descriptor->Run(raw_route, json_result);
return 200;
}
};