diff --git a/src/controllers/Classifiers.tpp b/src/controllers/Classifiers.tpp index 86b546788f4274763bf2c17c49eb27f4d8b3ac71..5b6844869540bcd1e16ee9c495785c41f108065a 100644 --- a/src/controllers/Classifiers.tpp +++ b/src/controllers/Classifiers.tpp @@ -20,11 +20,9 @@ #include <qry/Instance_filter.h> #include <util/String.h> #include <qry/Return_code.h> -#include <mttr/Class_instance_association_create.h> +#include <mttr/Classifier_instance_factory.h> #include <mttr/Classifier_instance_create.h> #include <memory> -#include <mttr/Classifier_instance_delete.h> -#include <mttr/Classifier_instance_update.h> #include <svru/Request.h> #include <svru/Response.h> #include <svru/Request.h> @@ -149,55 +147,40 @@ void Classifiers<T>::create_instance( auto json_ptr = req->jsonObject(); - + if (elem) { if (!elem->is_abstract()) { - std::shared_ptr<omm::Table> elem_lo = elem->table(); - if (elem_lo) { - // additional table for association (binary association N-M) - const std::unordered_map<std::string, std::shared_ptr<const Json::Value>> - import_cache; - mttr::Classifier_instance_create ic(elem,*json_ptr, - import_cache); - ic.execute(); - - if (ic.return_code() == qry::Return_code::OK) { - resp = HttpResponse::newHttpJsonResponse(ic.return_json()); + + auto ic = mttr::Classifier_instance_factory::instance().make_create( + elem, *json_ptr); + + if (ic) { + ic->execute(); + + if (ic->return_code() == qry::Return_code::OK) { + resp = HttpResponse::newHttpJsonResponse(ic->return_json()); } else { resp->setStatusCode(drogon::k400BadRequest); resp->setContentTypeCode(CT_TEXT_HTML); resp->setBody("Classifier instance creation failed "); } - } else { // no table (binary association 1-N or 1-1), one class instance - // must be updated - const std::unordered_map<std::string, std::shared_ptr<const Json::Value>> - import_cache; - const auto assoc = std::dynamic_pointer_cast<const omm::Association>(elem); - mttr::Class_instance_association_create iac(assoc, *json_ptr, - import_cache); - iac.execute(); - - if (iac.return_code() == qry::Return_code::OK) { - - resp = HttpResponse::newHttpJsonResponse(iac.return_json()); - } else { - resp->setStatusCode(k400BadRequest); - resp->setContentTypeCode(CT_TEXT_HTML); - resp->setBody("Association instance creation failed "); - } + } else { + resp->setStatusCode(k500InternalServerError); + resp->setContentTypeCode(CT_TEXT_HTML); + resp->setBody("Classifier without relational object "); } } else { resp->setStatusCode(k400BadRequest); resp->setContentTypeCode(CT_TEXT_HTML); resp->setBody("Classifier is abstract, creation not applicable"); } + } else { resp->setStatusCode(k400BadRequest); resp->setContentTypeCode(CT_TEXT_HTML); resp->setBody("Classifier not found "); } - // } svru::Response::add_allow_headers(resp, req); callback(resp); diff --git a/src/controllers/Instances.cpp b/src/controllers/Instances.cpp index 597a3979a6bd0c26b274aeac9f5244027f7ce525..7c6037744adeaca30b451feb481236d49b59f71a 100644 --- a/src/controllers/Instances.cpp +++ b/src/controllers/Instances.cpp @@ -5,8 +5,7 @@ * */ #include <ctlr/Instances.h> -#include <mttr/Class_instance_association_delete.h> -#include <mttr/Class_instance_association_update.h> +#include <mttr/Classifier_instance_factory.h> #include <mttr/Classifier_instance_delete.h> #include <mttr/Classifier_instance_update.h> #include <mttr/Data_import.h> @@ -45,94 +44,45 @@ void Instances::update(const HttpRequestPtr &req, const auto [csf_id, row_id] = qry::Util::split_instance_id(p_inst_id); - // lookup class at first + // lookup classifier - auto cls = - om_ptr->find_domain_element_by_id<omm::Class>(std::to_string(csf_id)); - + auto csf = + om_ptr->find_domain_element_by_id<omm::Classifier>(std::to_string(csf_id)); + auto resp = HttpResponse::newHttpResponse(); auto json_ptr = req->jsonObject() ; - if ( cls ) { - std::shared_ptr<omm::Table> elem_lo = cls->table() ; - - if (elem_lo) { - - const int upd_count = json_ptr->get("upd_count", 0).asInt(); - const std::unordered_map<std::string, - std::shared_ptr<const Json::Value>> - import_cache; - - mttr::Classifier_instance_update iu(cls, *json_ptr, p_inst_id, - import_cache, upd_count); - iu.execute(); - - if (iu.return_code() == qry::Return_code::OK) { - resp->setStatusCode(drogon::k200OK); - resp->setContentTypeCode(CT_TEXT_HTML); - resp->setBody("Instance updated "); - } else { - resp->setStatusCode(drogon::k400BadRequest); - resp->setContentTypeCode(CT_TEXT_HTML); - resp->setBody("Instance updating failed "); - } - } else { - resp->setStatusCode(k500InternalServerError); - resp->setContentTypeCode(CT_TEXT_HTML); - resp->setBody("Class without relational object "); - } - - } else { - const auto assoc = om_ptr->find_domain_element_by_id<omm::Association>( - std::to_string(csf_id)); - if (assoc) { - std::shared_ptr<omm::Table> elem_lo = assoc->table() ; - const int upd_count = json_ptr->get("upd_count",0).asInt(); - - if ( elem_lo ) { - // additional table for association (binary association N-M) - const std::unordered_map<std::string, std::shared_ptr<const Json::Value>> import_cache; - - mttr::Classifier_instance_update iu (assoc, *json_ptr, p_inst_id, import_cache, upd_count); - iu.execute (); - - if (iu.return_code () == qry::Return_code::OK) { - resp->setStatusCode ( k200OK ); - resp->setContentTypeCode ( CT_TEXT_HTML ); - resp->setBody ( "Instance updated " ); - } else { - resp->setStatusCode ( k400BadRequest ); - resp->setContentTypeCode ( CT_TEXT_HTML ); - resp->setBody ( "Instance updating failed " ); - } - - } else { // no table (binary association 1-N or 1-1), one class instance must be updated - const std::unordered_map<std::string, std::shared_ptr<const Json::Value>> import_cache; + if (csf) { + const int upd_count = json_ptr->get("upd_count", 0).asInt(); - mttr::Class_instance_association_update iau (assoc, *json_ptr, p_inst_id, import_cache, upd_count); - iau.execute (); - - if (iau.return_code () == qry::Return_code::OK) { - resp->setStatusCode ( k200OK ); - resp->setContentTypeCode ( CT_TEXT_HTML ); - resp->setBody ( "Instance updated " ); - } else { - resp->setStatusCode ( k400BadRequest ); - resp->setContentTypeCode ( CT_TEXT_HTML ); - resp->setBody ( "Instance updating failed " ); - } - - } + auto iu = mttr::Classifier_instance_factory::instance().make_update( + csf, *json_ptr, p_inst_id, upd_count); + if (iu) { + iu->execute(); + if (iu->return_code() == qry::Return_code::OK) { + resp->setStatusCode(drogon::k200OK); + resp->setContentTypeCode(CT_TEXT_HTML); + resp->setBody("Instance updated "); } else { - resp->setStatusCode ( k400BadRequest ); - resp->setContentTypeCode ( CT_TEXT_HTML ); - resp->setBody ( "Classifier not found " ); + resp->setStatusCode(drogon::k400BadRequest); + resp->setContentTypeCode(CT_TEXT_HTML); + resp->setBody("Instance updating failed "); } + } else { + resp->setStatusCode(k500InternalServerError); + resp->setContentTypeCode(CT_TEXT_HTML); + resp->setBody("Classifier without relational object "); + } + } else { + resp->setStatusCode(k400BadRequest); + resp->setContentTypeCode(CT_TEXT_HTML); + resp->setBody("Classifier not found "); } + svru::Response::add_allow_headers (resp, req) ; callback ( resp ); @@ -173,30 +123,26 @@ void Instances::deletion(const HttpRequestPtr &req, const auto [csf_id, row_id] = qry::Util::split_instance_id(p_inst_id); - // lookup class at first + // lookup classifier - auto cls = - om_ptr->find_domain_element_by_id<omm::Class>(std::to_string(csf_id)); - + auto csf = + om_ptr->find_domain_element_by_id<omm::Classifier>(std::to_string(csf_id)); + auto resp = HttpResponse::newHttpResponse(); auto json_ptr = req->jsonObject() ; - if (cls) { - std::shared_ptr<omm::Table> elem_lo = cls->table(); - - if (elem_lo) { - - const int upd_count = (json_ptr == nullptr) - ? 0 - : json_ptr->get("upd_count", 0).asInt(); + if (csf) { + const int upd_count = json_ptr->get("upd_count", 0).asInt(); - mttr::Classifier_instance_delete id(cls, p_inst_id, upd_count); - id.execute(); + auto id = mttr::Classifier_instance_factory::instance().make_delete( + csf, p_inst_id, upd_count); + if (id) { + id->execute(); - if (id.return_code() == qry::Return_code::OK) { + if (id->return_code() == qry::Return_code::OK) { resp->setStatusCode(drogon::k200OK); resp->setContentTypeCode(CT_TEXT_HTML); resp->setBody("Instance deleted "); @@ -208,59 +154,14 @@ void Instances::deletion(const HttpRequestPtr &req, } else { resp->setStatusCode(k500InternalServerError); resp->setContentTypeCode(CT_TEXT_HTML); - resp->setBody("Class without relational object "); + resp->setBody("Classifier without relational object "); } - } else { - const auto assoc = - om_ptr->find_domain_element_by_id<omm::Association>( - std::to_string(csf_id)); - if (assoc) { - std::shared_ptr<omm::Table> elem_lo = assoc->table(); - const int upd_count = (json_ptr == nullptr) - ? 0 - : json_ptr->get("upd_count", 0).asInt(); - - if (elem_lo) { - // additional table for association (binary association N-M) - - mttr::Classifier_instance_delete id(assoc, p_inst_id, upd_count); - id.execute(); - - if (id.return_code() == qry::Return_code::OK) { - resp->setStatusCode(k200OK); - resp->setContentTypeCode(CT_TEXT_HTML); - resp->setBody("Instance deleted "); - } else { - resp->setStatusCode(k400BadRequest); - resp->setContentTypeCode(CT_TEXT_HTML); - resp->setBody("Instance deletion failed "); - } - - } else { // no table (binary association 1-N or 1-1), one class - // instance must be updated - - mttr::Class_instance_association_delete iad(assoc, p_inst_id, - upd_count); - iad.execute(); - - if (iad.return_code() == qry::Return_code::OK) { - resp->setStatusCode(k200OK); - resp->setContentTypeCode(CT_TEXT_HTML); - resp->setBody("Instance deleted "); - } else { - resp->setStatusCode(k400BadRequest); - resp->setContentTypeCode(CT_TEXT_HTML); - resp->setBody("Instance deletion failed "); - } - } - - } else { - resp->setStatusCode(k400BadRequest); - resp->setContentTypeCode(CT_TEXT_HTML); - resp->setBody("Classifier not found "); - } + resp->setStatusCode(k400BadRequest); + resp->setContentTypeCode(CT_TEXT_HTML); + resp->setBody("Classifier not found "); } + svru::Response::add_allow_headers (resp, req) ; callback ( resp ); diff --git a/src/controllers/Trash.cpp b/src/controllers/Trash.cpp index ba93884f255a762d26fa26e743a79fbefba05d9a..176563aca2069e9f12ad60c678d0b15cd143512f 100644 --- a/src/controllers/Trash.cpp +++ b/src/controllers/Trash.cpp @@ -8,8 +8,7 @@ #include <drogon/HttpTypes.h> #include <svru/Request.h> #include <svru/Response.h> -#include <mttr/Class_instance_association_eliminate.h> -#include <mttr/Class_instance_association_recover.h> +#include <mttr/Classifier_instance_factory.h> #include <mttr/Classifier_instance_eliminate.h> #include <mttr/Classifier_instance_recover.h> #include <mttr/Trash_empty.h> @@ -114,95 +113,43 @@ void Trash::recover_instance( qry::Util::split_instance_id(p_trash_id); - // lookup class at first - - auto cls = - om_ptr->find_domain_element_by_id<omm::Class>(std::to_string(csf_id)); - + // lookup classifier + auto csf = om_ptr->find_domain_element_by_id<omm::Classifier>( + std::to_string(csf_id)); auto resp = HttpResponse::newHttpResponse(); - - auto json_ptr = req->jsonObject(); - if (cls) { - std::shared_ptr<omm::Table> elem_lo = cls->table(); + if (csf) { + const int upd_count = json_ptr->get("upd_count", 0).asInt(); - if (elem_lo) { + auto ir = mttr::Classifier_instance_factory::instance().make_recover( + csf, p_trash_id, upd_count); + if (ir) { + ir->execute(); - const int upd_count = - (json_ptr == nullptr) ? 0 : json_ptr->get("upd_count", 0).asInt(); - - mttr::Classifier_instance_recover ir( cls, p_trash_id, - upd_count); - ir.execute(); - - if (ir.return_code() == qry::Return_code::OK) { + if (ir->return_code() == qry::Return_code::OK) { resp->setStatusCode(drogon::k200OK); resp->setContentTypeCode(CT_TEXT_HTML); resp->setBody("Instance recovered "); } else { resp->setStatusCode(drogon::k400BadRequest); resp->setContentTypeCode(CT_TEXT_HTML); - resp->setBody("Instance restoring failed "); + resp->setBody("Instance recovery failed "); } } else { resp->setStatusCode(k500InternalServerError); resp->setContentTypeCode(CT_TEXT_HTML); - resp->setBody("Class without relational object "); + resp->setBody("Classifier without relational object "); } - } else { - const auto assoc = om_ptr->find_domain_element_by_id<omm::Association>( - std::to_string(csf_id)); - if (assoc) { - std::shared_ptr<omm::Table> elem_lo = assoc->table(); - const int upd_count = - (json_ptr == nullptr) ? 0 : json_ptr->get("upd_count", 0).asInt(); - - if (elem_lo) { - // additional table for association (binary association N-M) - - mttr::Classifier_instance_recover ir(assoc, p_trash_id, - upd_count); - ir.execute(); - - if (ir.return_code() == qry::Return_code::OK) { - resp->setStatusCode(k200OK); - resp->setContentTypeCode(CT_TEXT_HTML); - resp->setBody("Instance recovered "); - } else { - resp->setStatusCode(k400BadRequest); - resp->setContentTypeCode(CT_TEXT_HTML); - resp->setBody("Instance restoring failed "); - } - - } else { // no table (binary association 1-N or 1-1), one class instance - // must be updated - - mttr::Class_instance_association_recover iar( assoc, - p_trash_id, upd_count); - iar.execute(); - - if (iar.return_code() == qry::Return_code::OK) { - resp->setStatusCode(k200OK); - resp->setContentTypeCode(CT_TEXT_HTML); - resp->setBody("Instance recovered "); - } else { - resp->setStatusCode(k400BadRequest); - resp->setContentTypeCode(CT_TEXT_HTML); - resp->setBody("Instance restoring failed "); - } - } - - } else { - resp->setStatusCode(k400BadRequest); - resp->setContentTypeCode(CT_TEXT_HTML); - resp->setBody("Classifier not found "); - } + resp->setStatusCode(k400BadRequest); + resp->setContentTypeCode(CT_TEXT_HTML); + resp->setBody("Classifier not found "); } + svru::Response::add_allow_headers(resp, req); callback(resp); @@ -239,39 +186,29 @@ void Trash::eliminate_instance( try { + auto om_ptr = + common::Singleton<common::Object_model_info>::instance().object(); - auto om_ptr = common::Singleton<common::Object_model_info>::instance().object(); - - - const auto [csf_id, row_id] = - qry::Util::split_instance_id(p_trash_id); - - - - // lookup class at first + const auto [csf_id, row_id] = qry::Util::split_instance_id(p_trash_id); - auto cls = - om_ptr->find_domain_element_by_id<omm::Class>(std::to_string(csf_id)); + // lookup classifier + auto csf = om_ptr->find_domain_element_by_id<omm::Classifier>( + std::to_string(csf_id)); auto resp = HttpResponse::newHttpResponse(); - auto json_ptr = req->jsonObject(); - if (cls) { - std::shared_ptr<omm::Table> elem_lo = cls->table(); - - if (elem_lo) { - - const int upd_count = - (json_ptr == nullptr) ? 0 : json_ptr->get("upd_count", 0).asInt(); + if (csf) { + const int upd_count = json_ptr->get("upd_count", 0).asInt(); - mttr::Classifier_instance_eliminate ip( cls, p_trash_id, - upd_count); - ip.execute(); + auto ie = mttr::Classifier_instance_factory::instance().make_eliminate( + csf, p_trash_id, upd_count); + if (ie) { + ie->execute(); - if (ip.return_code() == qry::Return_code::OK) { + if (ie->return_code() == qry::Return_code::OK) { resp->setStatusCode(drogon::k200OK); resp->setContentTypeCode(CT_TEXT_HTML); resp->setBody("Instance deleted definitively"); @@ -283,58 +220,14 @@ void Trash::eliminate_instance( } else { resp->setStatusCode(k500InternalServerError); resp->setContentTypeCode(CT_TEXT_HTML); - resp->setBody("Class without relational object "); + resp->setBody("Classifier without relational object "); } - } else { - const auto assoc = om_ptr->find_domain_element_by_id<omm::Association>( - std::to_string(csf_id)); - if (assoc) { - std::shared_ptr<omm::Table> elem_lo = assoc->table(); - const int upd_count = - (json_ptr == nullptr) ? 0 : json_ptr->get("upd_count", 0).asInt(); - - if (elem_lo) { - // additional table for association (binary association N-M) - - mttr::Classifier_instance_eliminate ip(assoc, p_trash_id, - upd_count); - ip.execute(); - - if (ip.return_code() == qry::Return_code::OK) { - resp->setStatusCode(k200OK); - resp->setContentTypeCode(CT_TEXT_HTML); - resp->setBody("Instance deleted definitively"); - } else { - resp->setStatusCode(k400BadRequest); - resp->setContentTypeCode(CT_TEXT_HTML); - resp->setBody("Instance definitive deletion failed "); - } - - } else { // no table (binary association 1-N or 1-1), one class instance - // must be updated - - mttr::Class_instance_association_eliminate iap(assoc, - p_trash_id, upd_count); - iap.execute(); - - if (iap.return_code() == qry::Return_code::OK) { - resp->setStatusCode(k200OK); - resp->setContentTypeCode(CT_TEXT_HTML); - resp->setBody("Instance deleted definitively"); - } else { - resp->setStatusCode(k400BadRequest); - resp->setContentTypeCode(CT_TEXT_HTML); - resp->setBody("Instance definitive deletion failed "); - } - } - - } else { - resp->setStatusCode(k400BadRequest); - resp->setContentTypeCode(CT_TEXT_HTML); - resp->setBody("Classifier not found "); - } + resp->setStatusCode(k400BadRequest); + resp->setContentTypeCode(CT_TEXT_HTML); + resp->setBody("Classifier not found "); } + svru::Response::add_allow_headers(resp, req); callback(resp);