blob: 87b5b12d1c6b417b584c7d63389491f84e474de2 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef MARMOTTA_SERVICE_H
#define MARMOTTA_SERVICE_H
#include "leveldb_persistence.h"
#include <grpc/grpc.h>
#include <grpc++/server.h>
#include <grpc++/server_builder.h>
#include <grpc++/server_context.h>
#include <grpc++/security/server_credentials.h>
#include <google/protobuf/empty.pb.h>
#include <google/protobuf/wrappers.pb.h>
#include "service/sail.pb.h"
#include "service/sail.grpc.pb.h"
#include "service/sparql.pb.h"
#include "service/sparql.grpc.pb.h"
namespace marmotta {
namespace service {
namespace svc = marmotta::service::proto;
namespace spq = marmotta::sparql::proto;
/**
* An implementation of the gRPC service interface backed by a LevelDB database.
*/
class LevelDBService : public svc::SailService::Service {
public:
/**
* Construct a new SailService wrapper around the LevelDB persistence passed
* as argument. The service will not take ownership of the pointer.
*/
LevelDBService(persistence::LevelDBPersistence* persistance) : persistence(persistance) { };
grpc::Status AddNamespaces(grpc::ServerContext* context,
grpc::ServerReader<rdf::proto::Namespace>* reader,
google::protobuf::Int64Value* result) override;
grpc::Status GetNamespace(grpc::ServerContext* context,
const rdf::proto::Namespace* pattern,
rdf::proto::Namespace* result) override;
grpc::Status GetNamespaces(grpc::ServerContext* context,
const google::protobuf::Empty* ignored,
grpc::ServerWriter<rdf::proto::Namespace>* result) override;
grpc::Status AddStatements(grpc::ServerContext* context,
grpc::ServerReader<rdf::proto::Statement>* reader,
google::protobuf::Int64Value* result) override;
grpc::Status GetStatements(grpc::ServerContext* context,
const rdf::proto::Statement* pattern,
grpc::ServerWriter<rdf::proto::Statement>* result) override;
grpc::Status RemoveStatements(grpc::ServerContext* context,
const rdf::proto::Statement* pattern,
google::protobuf::Int64Value* result) override;
grpc::Status GetContexts(grpc::ServerContext* context,
const google::protobuf::Empty* ignored,
grpc::ServerWriter<rdf::proto::Resource>* result) override;
grpc::Status Update(grpc::ServerContext* context,
grpc::ServerReader<service::proto::UpdateRequest>* reader,
service::proto::UpdateResponse* result) override;
grpc::Status Clear(grpc::ServerContext* context,
const svc::ContextRequest* contexts,
google::protobuf::Int64Value* result) override;
grpc::Status Size(grpc::ServerContext* context,
const svc::ContextRequest* contexts,
google::protobuf::Int64Value* result) override;
private:
persistence::LevelDBPersistence* persistence;
};
/**
* An implementation of the gRPC service interface backed by a LevelDB database.
*/
class LevelDBSparqlService : public spq::SparqlService::Service {
public:
/**
* Construct a new SparqlService wrapper around the LevelDB persistence passed
* as argument. The service will not take ownership of the pointer.
*/
LevelDBSparqlService(persistence::LevelDBPersistence* persistence) : persistence(persistence) { };
grpc::Status TupleQuery(grpc::ServerContext* context,
const spq::SparqlRequest* pattern,
grpc::ServerWriter<spq::SparqlResponse>* result) override;
grpc::Status GraphQuery(grpc::ServerContext* context,
const spq::SparqlRequest* pattern,
grpc::ServerWriter<rdf::proto::Statement>* result) override;
grpc::Status AskQuery(grpc::ServerContext* context,
const spq::SparqlRequest* pattern,
google::protobuf::BoolValue* result) override;
private:
persistence::LevelDBPersistence* persistence;
};
}
}
#endif //MARMOTTA_SERVICE_H