diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/Qt5CPPGenerator.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/Qt5CPPGenerator.java index ea5a9f26361..1295786c631 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/Qt5CPPGenerator.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/Qt5CPPGenerator.java @@ -117,6 +117,7 @@ public class Qt5CPPGenerator extends AbstractCppCodegen implements CodegenConfig supportingFiles.add(new SupportingFile("HttpRequest.cpp.mustache", sourceFolder, PREFIX + "HttpRequest.cpp")); supportingFiles.add(new SupportingFile("modelFactory.mustache", sourceFolder, PREFIX + "ModelFactory.h")); supportingFiles.add(new SupportingFile("object.mustache", sourceFolder, PREFIX + "Object.h")); + supportingFiles.add(new SupportingFile("QObjectWrapper.h.mustache", sourceFolder, PREFIX + "QObjectWrapper.h")); if (optionalProjectFileFlag) { supportingFiles.add(new SupportingFile("Project.mustache", sourceFolder, "client.pri")); } @@ -176,6 +177,7 @@ public class Qt5CPPGenerator extends AbstractCppCodegen implements CodegenConfig supportingFiles.add(new SupportingFile("HttpRequest.cpp.mustache", sourceFolder, modelNamePrefix + "HttpRequest.cpp")); supportingFiles.add(new SupportingFile("modelFactory.mustache", sourceFolder, modelNamePrefix + "ModelFactory.h")); supportingFiles.add(new SupportingFile("object.mustache", sourceFolder, modelNamePrefix + "Object.h")); + supportingFiles.add(new SupportingFile("QObjectWrapper.h.mustache", sourceFolder, modelNamePrefix + "QObjectWrapper.h")); typeMapping.put("object", modelNamePrefix + "Object"); typeMapping.put("file", modelNamePrefix + "HttpRequestInputFileElement"); diff --git a/modules/swagger-codegen/src/main/resources/qt5cpp/Project.mustache b/modules/swagger-codegen/src/main/resources/qt5cpp/Project.mustache index ed75433238c..dac7276b98c 100644 --- a/modules/swagger-codegen/src/main/resources/qt5cpp/Project.mustache +++ b/modules/swagger-codegen/src/main/resources/qt5cpp/Project.mustache @@ -19,7 +19,8 @@ HEADERS += \ $${PWD}/{{prefix}}Helpers.h \ $${PWD}/{{prefix}}HttpRequest.h \ $${PWD}/{{prefix}}ModelFactory.h \ - $${PWD}/{{prefix}}Object.h + $${PWD}/{{prefix}}Object.h \ + $${PWD}/{{prefix}}QObjectWrapper.h SOURCES += \ # Models diff --git a/modules/swagger-codegen/src/main/resources/qt5cpp/QObjectWrapper.h.mustache b/modules/swagger-codegen/src/main/resources/qt5cpp/QObjectWrapper.h.mustache new file mode 100644 index 00000000000..efd71407777 --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/qt5cpp/QObjectWrapper.h.mustache @@ -0,0 +1,28 @@ +{{>licenseInfo}} +#ifndef {{prefix}}_QOBJECT_WRAPPER_H +#define {{prefix}}_QOBJECT_WRAPPER_H + +#include + +{{#cppNamespaceDeclarations}} +namespace {{this}} { +{{/cppNamespaceDeclarations}} + + template + class {{prefix}}QObjectWrapper : public QObject { + public: + {{prefix}}QObjectWrapper(ObjectPtrT ptr){ + data = ptr; + } + ~{{prefix}}QObjectWrapper(){ + delete data; + } + private : + ObjectPtrT data; + }; + +{{#cppNamespaceDeclarations}} +} +{{/cppNamespaceDeclarations}} + +#endif // {{prefix}}_QOBJECT_WRAPPER_H \ No newline at end of file diff --git a/modules/swagger-codegen/src/main/resources/qt5cpp/api-body.mustache b/modules/swagger-codegen/src/main/resources/qt5cpp/api-body.mustache index 80edd8b1024..0beb74c724c 100644 --- a/modules/swagger-codegen/src/main/resources/qt5cpp/api-body.mustache +++ b/modules/swagger-codegen/src/main/resources/qt5cpp/api-body.mustache @@ -2,6 +2,7 @@ #include "{{classname}}.h" #include "{{prefix}}Helpers.h" #include "{{prefix}}ModelFactory.h" +#include "{{prefix}}QObjectWrapper.h" #include #include @@ -150,20 +151,30 @@ void QByteArray array (json.toStdString().c_str()); QJsonDocument doc = QJsonDocument::fromJson(array); QJsonArray jsonArray = doc.array(); - + auto wrapper = new {{prefix}}QObjectWrapper<{{{returnType}}}> (output); + wrapper->deleteLater(); foreach(QJsonValue obj, jsonArray) { {{{returnBaseType}}}* o = new {{returnBaseType}}(); QJsonObject jv = obj.toObject(); QJsonObject * ptr = (QJsonObject*)&jv; o->fromJsonObject(*ptr); + auto objwrapper = new {{prefix}}QObjectWrapper<{{{returnBaseType}}}*> (o); + objwrapper->deleteLater(); output->append(o); } {{/isListContainer}} - {{^isListContainer}} {{^isMapContainer}} {{#returnTypeIsPrimitive}} {{{returnType}}} output; // TODO add primitive output support + {{#isByteArray}}auto wrapper = new {{prefix}}QObjectWrapper<{{{returnType}}}> (output); + wrapper->deleteLater();{{/isByteArray}} + {{#isDateTime}}auto wrapper = new {{prefix}}QObjectWrapper<{{{returnType}}}> (output); + wrapper->deleteLater();{{/isDateTime}} + {{#isDate}}auto wrapper = new {{prefix}}QObjectWrapper<{{{returnType}}}> (output); + wrapper->deleteLater();{{/isDate}} + {{#isString}}auto wrapper = new {{prefix}}QObjectWrapper<{{{returnType}}}> (output); + wrapper->deleteLater();{{/isString}} {{/returnTypeIsPrimitive}} {{/isMapContainer}} {{#isMapContainer}} @@ -183,6 +194,8 @@ void {{^returnTypeIsPrimitive}} QString json(worker->response); {{{returnType}}} output = static_cast<{{{returnType}}}>(create(json, QString("{{{returnBaseType}}}"))); + auto wrapper = new {{prefix}}QObjectWrapper<{{{returnType}}}> (output); + wrapper->deleteLater(); {{/returnTypeIsPrimitive}} {{/isMapContainer}} {{/isListContainer}} diff --git a/samples/client/petstore/qt5cpp/PetStore/PetApiTests.cpp b/samples/client/petstore/qt5cpp/PetStore/PetApiTests.cpp index cf07c4ca5ec..252f15bcf54 100644 --- a/samples/client/petstore/qt5cpp/PetStore/PetApiTests.cpp +++ b/samples/client/petstore/qt5cpp/PetStore/PetApiTests.cpp @@ -185,7 +185,7 @@ void PetApiTests::updatePetWithFormTest() { static SWGPetApi* api = getApi(); SWGPet* pet = createRandomPet(); - static SWGPet* petToCheck; + SWGPet* petToCheck; qint64 id = pet->getId(); static QEventLoop loop; QTimer timer; @@ -209,7 +209,7 @@ void PetApiTests::updatePetWithFormTest() { timer.setInterval(1000); timer.setSingleShot(true); - auto fetchPet = [](SWGPet* pet) { + auto fetchPet = [&](SWGPet* pet) { petToCheck = pet; loop.quit(); }; diff --git a/samples/client/petstore/qt5cpp/client/SWGPetApi.cpp b/samples/client/petstore/qt5cpp/client/SWGPetApi.cpp index 3dffe9c0695..565e74ca565 100644 --- a/samples/client/petstore/qt5cpp/client/SWGPetApi.cpp +++ b/samples/client/petstore/qt5cpp/client/SWGPetApi.cpp @@ -13,6 +13,7 @@ #include "SWGPetApi.h" #include "SWGHelpers.h" #include "SWGModelFactory.h" +#include "SWGQObjectWrapper.h" #include #include @@ -220,15 +221,17 @@ SWGPetApi::findPetsByStatusCallback(SWGHttpRequestWorker * worker) { QByteArray array (json.toStdString().c_str()); QJsonDocument doc = QJsonDocument::fromJson(array); QJsonArray jsonArray = doc.array(); - + auto wrapper = new SWGQObjectWrapper*> (output); + wrapper->deleteLater(); foreach(QJsonValue obj, jsonArray) { SWGPet* o = new SWGPet(); QJsonObject jv = obj.toObject(); QJsonObject * ptr = (QJsonObject*)&jv; o->fromJsonObject(*ptr); + auto objwrapper = new SWGQObjectWrapper (o); + objwrapper->deleteLater(); output->append(o); } - worker->deleteLater(); if (worker->error_type == QNetworkReply::NoError) { @@ -325,15 +328,17 @@ SWGPetApi::findPetsByTagsCallback(SWGHttpRequestWorker * worker) { QByteArray array (json.toStdString().c_str()); QJsonDocument doc = QJsonDocument::fromJson(array); QJsonArray jsonArray = doc.array(); - + auto wrapper = new SWGQObjectWrapper*> (output); + wrapper->deleteLater(); foreach(QJsonValue obj, jsonArray) { SWGPet* o = new SWGPet(); QJsonObject jv = obj.toObject(); QJsonObject * ptr = (QJsonObject*)&jv; o->fromJsonObject(*ptr); + auto objwrapper = new SWGQObjectWrapper (o); + objwrapper->deleteLater(); output->append(o); } - worker->deleteLater(); if (worker->error_type == QNetworkReply::NoError) { @@ -385,9 +390,10 @@ SWGPetApi::getPetByIdCallback(SWGHttpRequestWorker * worker) { msg = "Error: " + worker->error_str; } - QString json(worker->response); SWGPet* output = static_cast(create(json, QString("SWGPet"))); + auto wrapper = new SWGQObjectWrapper (output); + wrapper->deleteLater(); worker->deleteLater(); if (worker->error_type == QNetworkReply::NoError) { @@ -554,9 +560,10 @@ SWGPetApi::uploadFileCallback(SWGHttpRequestWorker * worker) { msg = "Error: " + worker->error_str; } - QString json(worker->response); SWGApiResponse* output = static_cast(create(json, QString("SWGApiResponse"))); + auto wrapper = new SWGQObjectWrapper (output); + wrapper->deleteLater(); worker->deleteLater(); if (worker->error_type == QNetworkReply::NoError) { diff --git a/samples/client/petstore/qt5cpp/client/SWGQObjectWrapper.h b/samples/client/petstore/qt5cpp/client/SWGQObjectWrapper.h new file mode 100644 index 00000000000..9252b5db2e2 --- /dev/null +++ b/samples/client/petstore/qt5cpp/client/SWGQObjectWrapper.h @@ -0,0 +1,35 @@ +/** + * Swagger Petstore + * This is a sample server Petstore server. You can find out more about Swagger at [http://swagger.io](http://swagger.io) or on [irc.freenode.net, #swagger](http://swagger.io/irc/). For this sample, you can use the api key `special-key` to test the authorization filters. + * + * OpenAPI spec version: 1.0.0 + * Contact: apiteam@swagger.io + * + * NOTE: This class is auto generated by the swagger code generator program. + * https://github.com/swagger-api/swagger-codegen.git + * Do not edit the class manually. + */ + +#ifndef SWG_QOBJECT_WRAPPER_H +#define SWG_QOBJECT_WRAPPER_H + +#include + +namespace Swagger { + + template + class SWGQObjectWrapper : public QObject { + public: + SWGQObjectWrapper(ObjectPtrT ptr){ + data = ptr; + } + ~SWGQObjectWrapper(){ + delete data; + } + private : + ObjectPtrT data; + }; + +} + +#endif // SWG_QOBJECT_WRAPPER_H \ No newline at end of file diff --git a/samples/client/petstore/qt5cpp/client/SWGStoreApi.cpp b/samples/client/petstore/qt5cpp/client/SWGStoreApi.cpp index 3b38f5710a2..e6ea1990133 100644 --- a/samples/client/petstore/qt5cpp/client/SWGStoreApi.cpp +++ b/samples/client/petstore/qt5cpp/client/SWGStoreApi.cpp @@ -13,6 +13,7 @@ #include "SWGStoreApi.h" #include "SWGHelpers.h" #include "SWGModelFactory.h" +#include "SWGQObjectWrapper.h" #include #include @@ -118,7 +119,6 @@ SWGStoreApi::getInventoryCallback(SWGHttpRequestWorker * worker) { msg = "Error: " + worker->error_str; } - QMap* output = new QMap(); QString json(worker->response); QByteArray array (json.toStdString().c_str()); @@ -181,9 +181,10 @@ SWGStoreApi::getOrderByIdCallback(SWGHttpRequestWorker * worker) { msg = "Error: " + worker->error_str; } - QString json(worker->response); SWGOrder* output = static_cast(create(json, QString("SWGOrder"))); + auto wrapper = new SWGQObjectWrapper (output); + wrapper->deleteLater(); worker->deleteLater(); if (worker->error_type == QNetworkReply::NoError) { @@ -236,9 +237,10 @@ SWGStoreApi::placeOrderCallback(SWGHttpRequestWorker * worker) { msg = "Error: " + worker->error_str; } - QString json(worker->response); SWGOrder* output = static_cast(create(json, QString("SWGOrder"))); + auto wrapper = new SWGQObjectWrapper (output); + wrapper->deleteLater(); worker->deleteLater(); if (worker->error_type == QNetworkReply::NoError) { diff --git a/samples/client/petstore/qt5cpp/client/SWGUserApi.cpp b/samples/client/petstore/qt5cpp/client/SWGUserApi.cpp index 328e1e82d3a..8368d53698a 100644 --- a/samples/client/petstore/qt5cpp/client/SWGUserApi.cpp +++ b/samples/client/petstore/qt5cpp/client/SWGUserApi.cpp @@ -13,6 +13,7 @@ #include "SWGUserApi.h" #include "SWGHelpers.h" #include "SWGModelFactory.h" +#include "SWGQObjectWrapper.h" #include #include @@ -284,9 +285,10 @@ SWGUserApi::getUserByNameCallback(SWGHttpRequestWorker * worker) { msg = "Error: " + worker->error_str; } - QString json(worker->response); SWGUser* output = static_cast(create(json, QString("SWGUser"))); + auto wrapper = new SWGQObjectWrapper (output); + wrapper->deleteLater(); worker->deleteLater(); if (worker->error_type == QNetworkReply::NoError) { @@ -352,9 +354,10 @@ SWGUserApi::loginUserCallback(SWGHttpRequestWorker * worker) { msg = "Error: " + worker->error_str; } - QString json(worker->response); QString* output = static_cast(create(json, QString("QString"))); + auto wrapper = new SWGQObjectWrapper (output); + wrapper->deleteLater(); worker->deleteLater(); if (worker->error_type == QNetworkReply::NoError) { diff --git a/samples/client/petstore/qt5cpp/client/client.pri b/samples/client/petstore/qt5cpp/client/client.pri index 9b554ddc800..c4202c44aee 100644 --- a/samples/client/petstore/qt5cpp/client/client.pri +++ b/samples/client/petstore/qt5cpp/client/client.pri @@ -16,7 +16,8 @@ HEADERS += \ $${PWD}/SWGHelpers.h \ $${PWD}/SWGHttpRequest.h \ $${PWD}/SWGModelFactory.h \ - $${PWD}/SWGObject.h + $${PWD}/SWGObject.h \ + $${PWD}/SWGQObjectWrapper.h SOURCES += \ # Models