/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* vim: set et sw=2 ts=2: */ /*************************************************************************** * artefact.cc * * Tue Jan 5 14:45:34 CET 2010 * Copyright 2010 Bent Bisballe Nyeng * deva@aasimon.org ****************************************************************************/ /* * This file is part of Pracro. * * Pracro is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * Pracro is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with Pracro; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ #include "artefact.h" #include "debug.h" #include "configuration.h" #include "queryparser.h" Artefact::Artefact() { #ifndef WITHOUT_PENTOMINOS PRACRO_DEBUG(artefact, "Creating artefact connection %s : %d", Conf::artefact_addr.c_str(), Conf::artefact_port); #endif/*WITHOUT_PENTOMINOS*/ atfh = atf_init(); if(!atfh) PRACRO_ERR(artefact, "Out of memory!\n"); conn = atf_connect(atfh, Conf::artefact_addr.c_str(), Conf::artefact_port, Conf::artefact_use_ssl); } Artefact::~Artefact() { atf_disconnect(conn); atf_close(atfh); } QueryResult Artefact::exec(Query &query, std::string patientid, std::string user) { QueryParser parser; atf_transaction_t *trans = atf_new_transaction(conn, patientid.c_str()); atf_querylist_t *qlist = atf_new_querylist(trans, user.c_str()); atf_id id = atf_add_query(qlist, query.attributes["class"].c_str(), 0/*oldest*/, "xml"/*replyformat*/); atf_reply_t *reply = atf_commit(trans, NULL, qlist); atf_status_t status = atf_get_reply_status(reply, id); switch(status) { case ATF_STATUS_OK: { size_t bufsize = atf_get_reply_size(reply, id); char *buf = new char[bufsize]; ssize_t size = atf_get_reply_data(reply, id, buf, size); parser.parse(buf, size); delete[] buf; } break; case ATF_STATUS_ERROR: PRACRO_ERR(artefact, "Error in artefact query.\n"); break; } atf_free_reply(reply); atf_free_querylist(qlist); atf_free_transaction(trans); return parser.result; } #ifdef TEST_ARTEFACT //Additional dependency files //deps: //Required cflags (autoconf vars may be used) //cflags: //Required link options (autoconf vars may be used) //libs: #include "test.h" TEST_BEGIN; // TODO: Put some testcode here (see test.h for usable macros). TEST_END; #endif/*TEST_ARTEFACT*/