diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CppQt5AbstractCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CppQt5AbstractCodegen.java index cfaac199a1c4..ec03a45490f0 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CppQt5AbstractCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CppQt5AbstractCodegen.java @@ -26,7 +26,7 @@ public class CppQt5AbstractCodegen extends AbstractCppCodegen implements Codegen protected Set systemIncludes = new HashSet(); protected Set nonFrameworkPrimitives = new HashSet(); - + public CppQt5AbstractCodegen() { super(); // set modelNamePrefix as default for QHttpEngine Server @@ -61,10 +61,10 @@ public CppQt5AbstractCodegen() { "double") ); nonFrameworkPrimitives.addAll(languageSpecificPrimitives); - + foundationClasses.addAll( Arrays.asList( - "QString", + "QString", "QDate", "QDateTime", "QByteArray") @@ -78,7 +78,7 @@ public CppQt5AbstractCodegen() { typeMapping.put("integer", "qint32"); typeMapping.put("long", "qint64"); typeMapping.put("boolean", "bool"); - typeMapping.put("number", "double"); + typeMapping.put("number", "double"); typeMapping.put("array", "QList"); typeMapping.put("map", "QMap"); typeMapping.put("object", PREFIX + "Object"); @@ -90,8 +90,8 @@ public CppQt5AbstractCodegen() { // modifications on multiple templates) typeMapping.put("UUID", "QString"); typeMapping.put("URI", "QString"); - typeMapping.put("file", "QIODevice"); - typeMapping.put("binary", "QIODevice"); + typeMapping.put("file", "QByteArray"); + typeMapping.put("binary", "QByteArray"); importMapping = new HashMap(); namespaces = new HashMap(); @@ -101,7 +101,6 @@ public CppQt5AbstractCodegen() { systemIncludes.add("QDate"); systemIncludes.add("QDateTime"); systemIncludes.add("QByteArray"); - systemIncludes.add("QIODevice"); } @Override public void processOpts() { @@ -119,7 +118,7 @@ public void processOpts() { additionalProperties().put("prefix", modelNamePrefix); } } - + @Override public String toModelImport(String name) { if( name.isEmpty() ) { @@ -140,7 +139,7 @@ public String toModelImport(String name) { return "#include \"" + folder + name + ".h\""; } - + /** * Optional - type declaration. This is a String which is used by the templates to instantiate your * types. There is typically special handling for different property types @@ -160,9 +159,9 @@ public String getTypeDeclaration(Schema p) { Schema inner = ModelUtils.getAdditionalProperties(p); return getSchemaType(p) + ""; } else if (ModelUtils.isBinarySchema(p)) { - return getSchemaType(p) + "*"; + return getSchemaType(p); } else if (ModelUtils.isFileSchema(p)) { - return getSchemaType(p) + "*"; + return getSchemaType(p); } if (foundationClasses.contains(openAPIType)) { return openAPIType; @@ -174,7 +173,7 @@ public String getTypeDeclaration(Schema p) { } @Override - @SuppressWarnings("rawtypes") + @SuppressWarnings("rawtypes") public String toDefaultValue(Schema p) { if (ModelUtils.isBooleanSchema(p)) { return "false"; @@ -211,7 +210,7 @@ public String toDefaultValue(Schema p) { public String toModelFilename(String name) { return toModelName(name); } - + /** * Optional - OpenAPI type conversion. This is used to map OpenAPI types in a `Schema` into * either language specific types via `typeMapping` or into complex models if there is not a mapping. @@ -219,7 +218,7 @@ public String toModelFilename(String name) { * @return a string value of the type or complex model for this property */ @Override - @SuppressWarnings("rawtypes") + @SuppressWarnings("rawtypes") public String getSchemaType(Schema p) { String openAPIType = super.getSchemaType(p); @@ -242,7 +241,7 @@ public String getSchemaType(Schema p) { public String toVarName(String name) { // sanitize name String varName = name; - varName = sanitizeName(name); + varName = sanitizeName(name); // if it's all uppper case, convert to lower case if (varName.matches("^[A-Z_]*$")) { @@ -270,7 +269,7 @@ public String toParamName(String name) { public String getTypeDeclaration(String str) { return str; } - + @Override protected boolean needToImport(String type) { return StringUtils.isNotBlank(type) && !defaultIncludes.contains(type) @@ -283,7 +282,7 @@ protected boolean needToImport(String type) { public Map postProcessOperationsWithModels(Map objs, List allModels) { Map objectMap = (Map) objs.get("operations"); List operations = (List) objectMap.get("operation"); - + List> imports = (List>) objs.get("imports"); Map codegenModels = new HashMap (); for(Object moObj : allModels) { @@ -298,7 +297,7 @@ public Map postProcessOperationsWithModels(Map o operation.vendorExtensions.put("returnsEnum", true); } } - // Check all return parameter baseType if there is a necessity to include, include it if not + // Check all return parameter baseType if there is a necessity to include, include it if not // already done if (operation.returnBaseType != null && needToImport(operation.returnBaseType)) { if(!isIncluded(operation.returnBaseType, imports)) { @@ -308,7 +307,7 @@ public Map postProcessOperationsWithModels(Map o List params = new ArrayList(); if (operation.allParams != null)params.addAll(operation.allParams); - // Check all parameter baseType if there is a necessity to include, include it if not + // Check all parameter baseType if there is a necessity to include, include it if not // already done for(CodegenParameter param : params) { if(param.isPrimitiveType && needToImport(param.baseType)) { @@ -321,7 +320,7 @@ public Map postProcessOperationsWithModels(Map o // We use QString to pass path params, add it to include if(!isIncluded("QString", imports)) { imports.add(createMapping("import", "QString")); - } + } } } if(isIncluded("QMap", imports)) { @@ -332,7 +331,7 @@ public Map postProcessOperationsWithModels(Map o } return objs; } - + @Override public Map postProcessModels(Map objs) { return postProcessModelsEnum(objs); @@ -342,18 +341,18 @@ public Map postProcessModels(Map objs) { public String toEnumValue(String value, String datatype) { return escapeText(value); } - + @Override public boolean isDataTypeString(String dataType) { return "QString".equals(dataType); } - + private Map createMapping(String key, String value) { Map customImport = new HashMap(); customImport.put(key, toModelImport(value)); return customImport; } - + private boolean isIncluded(String type, List> imports) { boolean included = false; String inclStr = toModelImport(type); diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CppQt5ClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CppQt5ClientCodegen.java index 62ea88cc6589..73897d8cf74d 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CppQt5ClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CppQt5ClientCodegen.java @@ -76,14 +76,15 @@ public CppQt5ClientCodegen() { supportingFiles.add(new SupportingFile("helpers-body.mustache", sourceFolder, PREFIX + "Helpers.cpp")); supportingFiles.add(new SupportingFile("HttpRequest.h.mustache", sourceFolder, PREFIX + "HttpRequest.h")); supportingFiles.add(new SupportingFile("HttpRequest.cpp.mustache", sourceFolder, PREFIX + "HttpRequest.cpp")); + supportingFiles.add(new SupportingFile("HttpFileElement.h.mustache", sourceFolder, PREFIX + "HttpFileElement.h")); + supportingFiles.add(new SupportingFile("HttpFileElement.cpp.mustache", sourceFolder, PREFIX + "HttpFileElement.cpp")); supportingFiles.add(new SupportingFile("object.mustache", sourceFolder, PREFIX + "Object.h")); - supportingFiles.add(new SupportingFile("enum.mustache", sourceFolder, PREFIX + "Enum.h")); + supportingFiles.add(new SupportingFile("enum.mustache", sourceFolder, PREFIX + "Enum.h")); if (optionalProjectFileFlag) { supportingFiles.add(new SupportingFile("Project.mustache", sourceFolder, "client.pri")); } - typeMapping.put("file", PREFIX + "HttpRequestInputFileElement"); - typeMapping.put("binary", PREFIX +"HttpRequestInputFileElement"); - importMapping.put(PREFIX + "HttpRequestInputFileElement", "#include \"" + PREFIX + "HttpRequest.h\""); + typeMapping.put("file", PREFIX + "HttpFileElement"); + importMapping.put(PREFIX + "HttpFileElement", "#include \"" + PREFIX + "HttpFileElement.h\""); } @Override @@ -95,7 +96,7 @@ public void processOpts() { } else { additionalProperties.put(CodegenConstants.OPTIONAL_PROJECT_FILE, optionalProjectFileFlag); } - + if (additionalProperties.containsKey("modelNamePrefix")) { supportingFiles.clear(); supportingFiles.add(new SupportingFile("helpers-header.mustache", sourceFolder, modelNamePrefix + "Helpers.h")); @@ -103,11 +104,10 @@ public void processOpts() { supportingFiles.add(new SupportingFile("HttpRequest.h.mustache", sourceFolder, modelNamePrefix + "HttpRequest.h")); supportingFiles.add(new SupportingFile("HttpRequest.cpp.mustache", sourceFolder, modelNamePrefix + "HttpRequest.cpp")); supportingFiles.add(new SupportingFile("object.mustache", sourceFolder, modelNamePrefix + "Object.h")); - supportingFiles.add(new SupportingFile("enum.mustache", sourceFolder, modelNamePrefix + "Enum.h")); + supportingFiles.add(new SupportingFile("enum.mustache", sourceFolder, modelNamePrefix + "Enum.h")); - typeMapping.put("file", modelNamePrefix + "HttpRequestInputFileElement"); - typeMapping.put("binary", modelNamePrefix + "HttpRequestInputFileElement"); - importMapping.put(modelNamePrefix + "HttpRequestInputFileElement", "#include \"" + modelNamePrefix + "HttpRequest.h\""); + typeMapping.put("file", modelNamePrefix + "HttpFileElement"); + importMapping.put(modelNamePrefix + "HttpFileElement", "#include \"" + modelNamePrefix + "HttpFileElement.h\""); if (optionalProjectFileFlag) { supportingFiles.add(new SupportingFile("Project.mustache", sourceFolder, modelNamePrefix + "client.pri")); } diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CppQt5QHttpEngineServerCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CppQt5QHttpEngineServerCodegen.java index 393fafc8be6c..a462164107d3 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CppQt5QHttpEngineServerCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CppQt5QHttpEngineServerCodegen.java @@ -76,7 +76,7 @@ public CppQt5QHttpEngineServerCodegen() { apiTemplateFiles.put( "apirequest.h.mustache", // the template to use ".h"); // the extension for each file to write - + apiTemplateFiles.put( "apirequest.cpp.mustache", // the template to use ".cpp"); // the extension for each file to write @@ -86,11 +86,13 @@ public CppQt5QHttpEngineServerCodegen() { * will use the resource stream to attempt to read the templates. */ embeddedTemplateDir = templateDir = "cpp-qt5-qhttpengine-server"; - + supportingFiles.add(new SupportingFile("helpers-header.mustache", sourceFolder + MODEL_DIR, PREFIX + "Helpers.h")); supportingFiles.add(new SupportingFile("helpers-body.mustache", sourceFolder + MODEL_DIR, PREFIX + "Helpers.cpp")); - supportingFiles.add(new SupportingFile("object.mustache", sourceFolder + MODEL_DIR, PREFIX + "Object.h")); + supportingFiles.add(new SupportingFile("object.mustache", sourceFolder + MODEL_DIR, PREFIX + "Object.h")); supportingFiles.add(new SupportingFile("enum.mustache", sourceFolder + MODEL_DIR, PREFIX + "Enum.h")); + supportingFiles.add(new SupportingFile("HttpFileElement.h.mustache", sourceFolder + MODEL_DIR, PREFIX + "HttpFileElement.h")); + supportingFiles.add(new SupportingFile("HttpFileElement.cpp.mustache", sourceFolder + MODEL_DIR, PREFIX + "HttpFileElement.cpp")); supportingFiles.add(new SupportingFile("apirouter.h.mustache", sourceFolder + APIHANDLER_DIR, PREFIX + "ApiRouter.h")); supportingFiles.add(new SupportingFile("apirouter.cpp.mustache", sourceFolder + APIHANDLER_DIR, PREFIX + "ApiRouter.cpp")); @@ -102,6 +104,8 @@ public CppQt5QHttpEngineServerCodegen() { supportingFiles.add(new SupportingFile("CMakeLists.txt.mustache", sourceFolder, "CMakeLists.txt")); supportingFiles.add(new SupportingFile("Dockerfile.mustache", sourceFolder, "Dockerfile")); supportingFiles.add(new SupportingFile("LICENSE.txt.mustache", sourceFolder, "LICENSE.txt")); + typeMapping.put("file", PREFIX + "HttpFileElement"); + importMapping.put(PREFIX + "HttpFileElement", "#include \"" + PREFIX + "HttpFileElement.h\""); } @@ -115,9 +119,12 @@ public void processOpts() { supportingFiles.add(new SupportingFile("helpers-body.mustache", sourceFolder + MODEL_DIR, modelNamePrefix + "Helpers.cpp")); supportingFiles.add(new SupportingFile("object.mustache", sourceFolder + MODEL_DIR, modelNamePrefix + "Object.h")); supportingFiles.add(new SupportingFile("enum.mustache", sourceFolder + MODEL_DIR, modelNamePrefix + "Enum.h")); + supportingFiles.add(new SupportingFile("HttpFileElement.h.mustache", sourceFolder + MODEL_DIR, modelNamePrefix + "HttpFileElement.h")); + supportingFiles.add(new SupportingFile("HttpFileElement.cpp.mustache", sourceFolder + MODEL_DIR, modelNamePrefix + "HttpFileElement.cpp")); supportingFiles.add(new SupportingFile("apirouter.h.mustache", sourceFolder + APIHANDLER_DIR, modelNamePrefix + "ApiRouter.h")); - supportingFiles.add(new SupportingFile("apirouter.cpp.mustache", sourceFolder + APIHANDLER_DIR, modelNamePrefix + "ApiRouter.cpp")); - + supportingFiles.add(new SupportingFile("apirouter.cpp.mustache", sourceFolder + APIHANDLER_DIR, modelNamePrefix + "ApiRouter.cpp")); + + supportingFiles.add(new SupportingFile("main.cpp.mustache", sourceFolder + SRC_DIR, "main.cpp")); supportingFiles.add(new SupportingFile("src-CMakeLists.txt.mustache", sourceFolder + SRC_DIR, "CMakeLists.txt")); supportingFiles.add(new SupportingFile("README.md.mustache", sourceFolder, "README.MD")); @@ -125,6 +132,8 @@ public void processOpts() { supportingFiles.add(new SupportingFile("CMakeLists.txt.mustache", sourceFolder, "CMakeLists.txt")); supportingFiles.add(new SupportingFile("Dockerfile.mustache", sourceFolder, "Dockerfile")); supportingFiles.add(new SupportingFile("LICENSE.txt.mustache", sourceFolder, "LICENSE.txt")); + typeMapping.put("file", modelNamePrefix + "HttpFileElement"); + importMapping.put(modelNamePrefix + "HttpFileElement", "#include \"" + modelNamePrefix + "HttpFileElement.h\""); } } @@ -160,7 +169,7 @@ public String getName() { public String getHelp() { return "Generates a Qt5 C++ Server using the QHTTPEngine HTTP Library."; } - + /** * Location to write model files. You can use the modelPackage() as defined when the class is * instantiated @@ -182,7 +191,7 @@ public String apiFileFolder() { private String requestFileFolder() { return outputFolder + "/" + sourceFolder + APIREQUEST_DIR + "/" + apiPackage().replace("::", File.separator); } - + @Override public String apiFilename(String templateName, String tag) { String result = super.apiFilename(templateName, tag); @@ -193,7 +202,7 @@ public String apiFilename(String templateName, String tag) { } return result; } - + @Override public String toApiFilename(String name) { return modelNamePrefix + sanitizeName(camelize(name)) + "ApiHandler"; diff --git a/modules/openapi-generator/src/main/resources/cpp-qt5-client/HttpFileElement.cpp.mustache b/modules/openapi-generator/src/main/resources/cpp-qt5-client/HttpFileElement.cpp.mustache new file mode 100644 index 000000000000..a4ff7f64c4a0 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/cpp-qt5-client/HttpFileElement.cpp.mustache @@ -0,0 +1,155 @@ +{{>licenseInfo}} + +#include +#include +#include +#include + +#include "{{prefix}}HttpFileElement.h" + +{{#cppNamespaceDeclarations}} +namespace {{this}} { +{{/cppNamespaceDeclarations}} + +void +{{prefix}}HttpFileElement::setMimeType(const QString &mime){ + mime_type = mime; +} + +void +{{prefix}}HttpFileElement::setFileName(const QString &name){ + local_filename = name; +} + +void +{{prefix}}HttpFileElement::setVariableName(const QString &name){ + variable_name = name; +} + +void +{{prefix}}HttpFileElement::setRequestFileName(const QString &name){ + request_filename = name; +} + +bool +{{prefix}}HttpFileElement::isSet() const { + return !local_filename.isEmpty() || !request_filename.isEmpty(); +} + +QString +{{prefix}}HttpFileElement::asJson() const{ + QFile file(local_filename); + QByteArray bArray; + bool result = false; + if(file.exists()) { + result = file.open(QIODevice::ReadOnly); + bArray = file.readAll(); + file.close(); + } + if(!result) { + qDebug() << "Error opening file " << local_filename; + } + return QString(bArray); +} + +QJsonValue +{{prefix}}HttpFileElement::asJsonValue() const{ + QFile file(local_filename); + QByteArray bArray; + bool result = false; + if(file.exists()) { + result = file.open(QIODevice::ReadOnly); + bArray = file.readAll(); + file.close(); + } + if(!result) { + qDebug() << "Error opening file " << local_filename; + } + return QJsonDocument::fromBinaryData(bArray.data()).object(); +} + +bool +{{prefix}}HttpFileElement::fromStringValue(const QString &instr){ + QFile file(local_filename); + bool result = false; + if(file.exists()) { + file.remove(); + } + result = file.open(QIODevice::WriteOnly); + file.write(instr.toUtf8()); + file.close(); + if(!result) { + qDebug() << "Error creating file " << local_filename; + } + return result; +} + +bool +{{prefix}}HttpFileElement::fromJsonValue(const QJsonValue &jval) { + QFile file(local_filename); + bool result = false; + if(file.exists()) { + file.remove(); + } + result = file.open(QIODevice::WriteOnly); + file.write(QJsonDocument(jval.toObject()).toBinaryData()); + file.close(); + if(!result) { + qDebug() << "Error creating file " << local_filename; + } + return result; +} + +QByteArray +{{prefix}}HttpFileElement::asByteArray() const { + QFile file(local_filename); + QByteArray bArray; + bool result = false; + if(file.exists()) { + result = file.open(QIODevice::ReadOnly); + bArray = file.readAll(); + file.close(); + } + if(!result) { + qDebug() << "Error opening file " << local_filename; + } + return bArray; +} + +bool +{{prefix}}HttpFileElement::fromByteArray(const QByteArray& bytes){ + QFile file(local_filename); + bool result = false; + if(file.exists()){ + file.remove(); + } + result = file.open(QIODevice::WriteOnly); + file.write(bytes); + file.close(); + if(!result) { + qDebug() << "Error creating file " << local_filename; + } + return result; +} + +bool +{{prefix}}HttpFileElement::saveToFile(const QString &varName, const QString &localFName, const QString &reqFname, const QString &mime, const QByteArray& bytes){ + setMimeType(mime); + setFileName(localFName); + setVariableName(varName); + setRequestFileName(reqFname); + return fromByteArray(bytes); +} + +QByteArray +{{prefix}}HttpFileElement::loadFromFile(const QString &varName, const QString &localFName, const QString &reqFname, const QString &mime){ + setMimeType(mime); + setFileName(localFName); + setVariableName(varName); + setRequestFileName(reqFname); + return asByteArray(); +} + +{{#cppNamespaceDeclarations}} +} +{{/cppNamespaceDeclarations}} \ No newline at end of file diff --git a/modules/openapi-generator/src/main/resources/cpp-qt5-client/HttpFileElement.h.mustache b/modules/openapi-generator/src/main/resources/cpp-qt5-client/HttpFileElement.h.mustache new file mode 100644 index 000000000000..9ebfe3623566 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/cpp-qt5-client/HttpFileElement.h.mustache @@ -0,0 +1,42 @@ +{{>licenseInfo}} +#ifndef {{prefix}}_HTTP_FILE_ELEMENT_H +#define {{prefix}}_HTTP_FILE_ELEMENT_H + +#include +#include +#include + + +{{#cppNamespaceDeclarations}} +namespace {{this}} { +{{/cppNamespaceDeclarations}} + +class {{prefix}}HttpFileElement { + +public: + QString variable_name; + QString local_filename; + QString request_filename; + QString mime_type; + void setMimeType(const QString &mime); + void setFileName(const QString &name); + void setVariableName(const QString &name); + void setRequestFileName(const QString &name); + bool isSet() const; + bool fromStringValue(const QString &instr); + bool fromJsonValue(const QJsonValue &jval); + bool fromByteArray(const QByteArray& bytes); + bool saveToFile(const QString &variable_name, const QString &local_filename, const QString &request_filename, const QString &mime, const QByteArray& bytes); + QString asJson() const; + QJsonValue asJsonValue() const; + QByteArray asByteArray() const; + QByteArray loadFromFile(const QString &variable_name, const QString &local_filename, const QString &request_filename, const QString &mime); +}; + +{{#cppNamespaceDeclarations}} +} +{{/cppNamespaceDeclarations}} + +Q_DECLARE_METATYPE({{#cppNamespaceDeclarations}}{{this}}::{{/cppNamespaceDeclarations}}{{prefix}}HttpFileElement) + +#endif // {{prefix}}_HTTP_FILE_ELEMENT_H diff --git a/modules/openapi-generator/src/main/resources/cpp-qt5-client/HttpRequest.cpp.mustache b/modules/openapi-generator/src/main/resources/cpp-qt5-client/HttpRequest.cpp.mustache index 05bad7539e35..58f2398dfebc 100644 --- a/modules/openapi-generator/src/main/resources/cpp-qt5-client/HttpRequest.cpp.mustache +++ b/modules/openapi-generator/src/main/resources/cpp-qt5-client/HttpRequest.cpp.mustache @@ -1,11 +1,16 @@ {{>licenseInfo}} -#include "{{prefix}}HttpRequest.h" + + #include +#include +#include #include #include #include #include +#include "{{prefix}}HttpRequest.h" + {{#cppNamespaceDeclarations}} namespace {{this}} { @@ -32,7 +37,7 @@ void {{prefix}}HttpRequestInput::add_var(QString key, QString value) { } void {{prefix}}HttpRequestInput::add_file(QString variable_name, QString local_filename, QString request_filename, QString mime_type) { - {{prefix}}HttpRequestInputFileElement file; + {{prefix}}HttpFileElement file; file.variable_name = variable_name; file.local_filename = local_filename; file.request_filename = request_filename; @@ -48,6 +53,7 @@ void {{prefix}}HttpRequestInput::add_file(QString variable_name, QString local_f timeout = 0; timer = new QTimer(); manager = new QNetworkAccessManager(this); + workingDirectory = QDir::currentPath(); connect(manager, &QNetworkAccessManager::finished, this, &{{prefix}}HttpRequestWorker::on_manager_finished); } @@ -58,16 +64,50 @@ void {{prefix}}HttpRequestInput::add_file(QString variable_name, QString local_f } timer->deleteLater(); } + for (const auto & item: multiPartFields) { + if(item != nullptr) { + delete item; + } + } } -QMap {{prefix}}HttpRequestWorker::getResponseHeaders() const { +QMap {{prefix}}HttpRequestWorker::getResponseHeaders() const { return headers; } +{{prefix}}HttpFileElement {{prefix}}HttpRequestWorker::getHttpFileElement(const QString &fieldname){ + if(!files.isEmpty()){ + if(fieldname.isEmpty()){ + return files.first(); + }else if (files.contains(fieldname)){ + return files[fieldname]; + } + } + return OAIHttpFileElement(); +} + +QByteArray *{{prefix}}HttpRequestWorker::getMultiPartField(const QString &fieldname){ + if(!multiPartFields.isEmpty()){ + if(fieldname.isEmpty()){ + return multiPartFields.first(); + }else if (multiPartFields.contains(fieldname)){ + return multiPartFields[fieldname]; + } + } + return nullptr; +} + void {{prefix}}HttpRequestWorker::setTimeOut(int tout){ timeout = tout; } +void {{prefix}}HttpRequestWorker::setWorkingDirectory(const QString &path){ + if(!path.isEmpty()){ + workingDirectory = path; + } +} + + QString {{prefix}}HttpRequestWorker::http_attribute_encode(QString attribute_name, QString input) { // result structure follows RFC 5987 bool need_utf_encoding = false; @@ -196,7 +236,7 @@ void {{prefix}}HttpRequestWorker::execute({{prefix}}HttpRequestInput *input) { } // add files - for (QList<{{prefix}}HttpRequestInputFileElement>::iterator file_info = input->files.begin(); file_info != input->files.end(); file_info++) { + for (QList<{{prefix}}HttpFileElement>::iterator file_info = input->files.begin(); file_info != input->files.end(); file_info++) { QFileInfo fi(file_info->local_filename); // ensure necessary variables are available @@ -276,8 +316,13 @@ void {{prefix}}HttpRequestWorker::execute({{prefix}}HttpRequestInput *input) { request.setRawHeader(key.toStdString().c_str(), input->headers.value(key).toStdString().c_str()); } - if (request_content.size() > 0 && !isFormData) { - request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json"); + if (request_content.size() > 0 && !isFormData && (input->var_layout != MULTIPART)) { + if(!input->headers.contains("Content-Type")){ + request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json"); + } + else { + request.setHeader(QNetworkRequest::ContentTypeHeader, input->headers.value("Content-Type")); + } } else if (input->var_layout == URL_ENCODED) { request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded"); @@ -331,9 +376,10 @@ void {{prefix}}HttpRequestWorker::on_manager_finished(QNetworkReply *reply) { } } reply->deleteLater(); - + process_form_response(); emit on_execution_finished(this); } + void {{prefix}}HttpRequestWorker::on_manager_timeout(QNetworkReply *reply) { error_type = QNetworkReply::TimeoutError; response = ""; @@ -341,9 +387,37 @@ void {{prefix}}HttpRequestWorker::on_manager_timeout(QNetworkReply *reply) { disconnect(manager, nullptr, nullptr, nullptr); reply->abort(); reply->deleteLater(); - emit on_execution_finished(this); } + +void {{prefix}}HttpRequestWorker::process_form_response() { + if(getResponseHeaders().contains(QString("Content-Disposition")) ) { + auto contentDisposition = getResponseHeaders().value(QString("Content-Disposition").toUtf8()).split(QString(";"), QString::SkipEmptyParts); + auto contentType = getResponseHeaders().contains(QString("Content-Type")) ? getResponseHeaders().value(QString("Content-Type").toUtf8()).split(QString(";"), QString::SkipEmptyParts).first() : QString(); + if((contentDisposition.count() > 0) && (contentDisposition.first() == QString("attachment"))){ + QString filename = QUuid::createUuid().toString(); + for(const auto &file : contentDisposition){ + if(file.contains(QString("filename"))){ + filename = file.split(QString("="), QString::SkipEmptyParts).at(1); + break; + } + } + {{prefix}}HttpFileElement felement; + felement.saveToFile(QString(), workingDirectory + QDir::separator() + filename, filename, contentType, response.data()); + files.insert(filename, felement); + } + + } else if(getResponseHeaders().contains(QString("Content-Type")) ) { + auto contentType = getResponseHeaders().value(QString("Content-Type").toUtf8()).split(QString(";"), QString::SkipEmptyParts); + if((contentType.count() > 0) && (contentType.first() == QString("multipart/form-data"))){ + + } + else { + + } + } +} + QSslConfiguration* {{prefix}}HttpRequestWorker::sslDefaultConfiguration; diff --git a/modules/openapi-generator/src/main/resources/cpp-qt5-client/HttpRequest.h.mustache b/modules/openapi-generator/src/main/resources/cpp-qt5-client/HttpRequest.h.mustache index 0af88c407086..5138113d7dcb 100644 --- a/modules/openapi-generator/src/main/resources/cpp-qt5-client/HttpRequest.h.mustache +++ b/modules/openapi-generator/src/main/resources/cpp-qt5-client/HttpRequest.h.mustache @@ -16,6 +16,7 @@ #include +#include "{{prefix}}HttpFileElement.h" {{#cppNamespaceDeclarations}} namespace {{this}} { @@ -23,16 +24,6 @@ namespace {{this}} { enum {{prefix}}HttpRequestVarLayout {NOT_SET, ADDRESS, URL_ENCODED, MULTIPART}; -class {{prefix}}HttpRequestInputFileElement { - -public: - QString variable_name; - QString local_filename; - QString request_filename; - QString mime_type; - -}; - class {{prefix}}HttpRequestInput { @@ -42,7 +33,7 @@ public: {{prefix}}HttpRequestVarLayout var_layout; QMap vars; QMap headers; - QList<{{prefix}}HttpRequestInputFileElement> files; + QList<{{prefix}}HttpFileElement> files; QByteArray request_body; {{prefix}}HttpRequestInput(); @@ -65,19 +56,26 @@ public: explicit {{prefix}}HttpRequestWorker(QObject *parent = nullptr); virtual ~{{prefix}}HttpRequestWorker(); - QMap getResponseHeaders() const; + QMap getResponseHeaders() const; QString http_attribute_encode(QString attribute_name, QString input); void execute({{prefix}}HttpRequestInput *input); static QSslConfiguration* sslDefaultConfiguration; void setTimeOut(int tout); + void setWorkingDirectory(const QString &path); + {{prefix}}HttpFileElement getHttpFileElement(const QString &fieldname = QString()); + QByteArray* getMultiPartField(const QString &fieldname = QString()); signals: void on_execution_finished({{prefix}}HttpRequestWorker *worker); private: QNetworkAccessManager *manager; - QMap headers; + QMap headers; + QMap files; + QMap multiPartFields; + QString workingDirectory; int timeout; void on_manager_timeout(QNetworkReply *reply); + void process_form_response(); private slots: void on_manager_finished(QNetworkReply *reply); }; diff --git a/modules/openapi-generator/src/main/resources/cpp-qt5-client/Project.mustache b/modules/openapi-generator/src/main/resources/cpp-qt5-client/Project.mustache index 9f530b381aa0..854841518e2f 100644 --- a/modules/openapi-generator/src/main/resources/cpp-qt5-client/Project.mustache +++ b/modules/openapi-generator/src/main/resources/cpp-qt5-client/Project.mustache @@ -18,8 +18,9 @@ HEADERS += \ # Others $${PWD}/{{prefix}}Helpers.h \ $${PWD}/{{prefix}}HttpRequest.h \ - $${PWD}/{{prefix}}Object.h - $${PWD}/{{prefix}}Enum.h + $${PWD}/{{prefix}}Object.h \ + $${PWD}/{{prefix}}Enum.h \ + $${PWD}/{{prefix}}HttpFileElement.h SOURCES += \ # Models @@ -38,5 +39,6 @@ SOURCES += \ {{/apiInfo}} # Others $${PWD}/{{prefix}}Helpers.cpp \ - $${PWD}/{{prefix}}HttpRequest.cpp + $${PWD}/{{prefix}}HttpRequest.cpp \ + $${PWD}/{{prefix}}HttpFileElement.cpp diff --git a/modules/openapi-generator/src/main/resources/cpp-qt5-client/api-body.mustache b/modules/openapi-generator/src/main/resources/cpp-qt5-client/api-body.mustache index 184e1dd20a33..9b5d5973b1a7 100644 --- a/modules/openapi-generator/src/main/resources/cpp-qt5-client/api-body.mustache +++ b/modules/openapi-generator/src/main/resources/cpp-qt5-client/api-body.mustache @@ -37,6 +37,10 @@ void {{classname}}::setApiTimeOutMs(const int tout){ timeout = tout; } +void {{classname}}::setWorkingDirectory(const QString& path){ + workingDirectory = path; +} + void {{classname}}::addHeaders(const QString& key, const QString& value){ defaultHeaders.insert(key, value); } @@ -104,20 +108,21 @@ void {{/collectionFormat}}{{/queryParams}} {{prefix}}HttpRequestWorker *worker = new {{prefix}}HttpRequestWorker(this); worker->setTimeOut(timeout); + worker->setWorkingDirectory(workingDirectory); {{prefix}}HttpRequestInput input(fullPath, "{{httpMethod}}"); - {{#formParams}} - if ({{paramName}} != nullptr) { - {{^isFile}}input.add_var("{{baseName}}", {{paramName}});{{/isFile}}{{#isFile}}input.add_file("{{baseName}}", (*{{paramName}}).local_filename, (*{{paramName}}).request_filename, (*{{paramName}}).mime_type);{{/isFile}} - } - {{/formParams}}{{#bodyParams}} + {{#formParams}}{{^isFile}} + input.add_var("{{baseName}}", ::{{cppNamespace}}::toStringValue({{paramName}}));{{/isFile}}{{#isFile}} + input.add_file("{{baseName}}", {{paramName}}.local_filename, {{paramName}}.request_filename, {{paramName}}.mime_type);{{/isFile}}{{/formParams}} + {{#bodyParams}} {{#isContainer}}{{#isListContainer}} QJsonDocument doc(::{{cppNamespace}}::toJsonValue({{paramName}}).toArray());{{/isListContainer}}{{#isMapContainer}} QJsonDocument doc(::{{cppNamespace}}::toJsonValue({{paramName}}).toObject());{{/isMapContainer}} QByteArray bytes = doc.toJson(); input.request_body.append(bytes); {{/isContainer}}{{^isContainer}}{{#isString}} - QString output({{paramName}});{{/isString}}{{#isByteArray}}QString output({{paramName}});{{/isByteArray}}{{^isString}}{{^isByteArray}} - QString output = {{paramName}}.asJson();{{/isByteArray}}{{/isString}} + QString output({{paramName}});{{/isString}}{{#isByteArray}}QString output({{paramName}});{{/isByteArray}}{{^isString}}{{^isByteArray}}{{^isFile}} + QString output = {{paramName}}.asJson();{{/isFile}}{{/isByteArray}}{{/isString}}{{#isFile}}{{#hasConsumes}}input.headers.insert("Content-Type", {{#consumes}}{{^-first}}, {{/-first}}"{{mediaType}}"{{/consumes}});{{/hasConsumes}} + QByteArray output = {{paramName}}.asByteArray();{{/isFile}} input.request_body.append(output); {{/isContainer}}{{/bodyParams}} {{#headerParams}} @@ -184,7 +189,7 @@ void {{/isMapContainer}} {{^isMapContainer}} {{^returnTypeIsPrimitive}} - {{{returnType}}} output(QString(worker->response)); + {{{returnType}}} output{{^isResponseFile}}(QString(worker->response)){{/isResponseFile}}{{#isResponseFile}} = worker->getHttpFileElement(){{/isResponseFile}}; {{/returnTypeIsPrimitive}} {{/isMapContainer}} {{/isListContainer}} diff --git a/modules/openapi-generator/src/main/resources/cpp-qt5-client/api-header.mustache b/modules/openapi-generator/src/main/resources/cpp-qt5-client/api-header.mustache index 5f0232797544..aca810bfb78b 100644 --- a/modules/openapi-generator/src/main/resources/cpp-qt5-client/api-header.mustache +++ b/modules/openapi-generator/src/main/resources/cpp-qt5-client/api-header.mustache @@ -24,6 +24,7 @@ public: void setBasePath(const QString& basePath); void setHost(const QString& host); void setApiTimeOutMs(const int tout); + void setWorkingDirectory(const QString& path); void addHeaders(const QString& key, const QString& value); {{#operations}}{{#operation}}void {{nickname}}({{#allParams}}const {{{dataType}}}& {{paramName}}{{#hasMore}}, {{/hasMore}}{{/allParams}}); @@ -31,6 +32,7 @@ public: private: QString basePath; QString host; + QString workingDirectory; int timeout; QMap defaultHeaders; {{#operations}}{{#operation}}void {{nickname}}Callback ({{prefix}}HttpRequestWorker * worker); diff --git a/modules/openapi-generator/src/main/resources/cpp-qt5-client/helpers-body.mustache b/modules/openapi-generator/src/main/resources/cpp-qt5-client/helpers-body.mustache index ddf83be29152..9b97b53e52c9 100644 --- a/modules/openapi-generator/src/main/resources/cpp-qt5-client/helpers-body.mustache +++ b/modules/openapi-generator/src/main/resources/cpp-qt5-client/helpers-body.mustache @@ -55,11 +55,23 @@ toStringValue(const double &value){ return QString::number(value); } +QString +toStringValue(const {{prefix}}Object &value){ + return value.asJson(); +} + + QString toStringValue(const {{prefix}}Enum &value){ return value.asJson(); } +QString +toStringValue(const {{prefix}}HttpFileElement &value){ + return value.asJson(); +} + + QJsonValue toJsonValue(const QString &value){ return QJsonValue(value); @@ -115,6 +127,12 @@ toJsonValue(const {{prefix}}Enum &value){ return value.asJsonValue(); } +QJsonValue +toJsonValue(const {{prefix}}HttpFileElement &value){ + return value.asJsonValue(); +} + + bool fromStringValue(const QString &inStr, QString &value){ value.clear(); @@ -209,6 +227,11 @@ fromStringValue(const QString &inStr, {{prefix}}Enum &value){ return true; } +bool +fromStringValue(const QString &inStr, OAIHttpFileElement &value){ + return value.fromStringValue(inStr); +} + bool fromJsonValue(QString &value, const QJsonValue &jval){ bool ok = true; @@ -337,6 +360,11 @@ fromJsonValue({{prefix}}Enum &value, const QJsonValue &jval){ return true; } +bool +fromJsonValue({{prefix}}HttpFileElement &value, const QJsonValue &jval){ + return value.fromJsonValue(jval); +} + {{#cppNamespaceDeclarations}} } {{/cppNamespaceDeclarations}} diff --git a/modules/openapi-generator/src/main/resources/cpp-qt5-client/helpers-header.mustache b/modules/openapi-generator/src/main/resources/cpp-qt5-client/helpers-header.mustache index 6c8436c55434..f5275022a716 100644 --- a/modules/openapi-generator/src/main/resources/cpp-qt5-client/helpers-header.mustache +++ b/modules/openapi-generator/src/main/resources/cpp-qt5-client/helpers-header.mustache @@ -11,8 +11,10 @@ #include #include #include + #include "{{prefix}}Object.h" #include "{{prefix}}Enum.h" +#include "{{prefix}}HttpFileElement.h" {{#cppNamespaceDeclarations}} namespace {{this}} { @@ -27,7 +29,9 @@ namespace {{this}} { QString toStringValue(const bool &value); QString toStringValue(const float &value); QString toStringValue(const double &value); - QString toStringValue(const {{prefix}}Enum &value); + QString toStringValue(const {{prefix}}Object &value); + QString toStringValue(const {{prefix}}Enum &value); + QString toStringValue(const {{prefix}}HttpFileElement &value); template QString toStringValue(const QList &val) { @@ -52,6 +56,7 @@ namespace {{this}} { QJsonValue toJsonValue(const double &value); QJsonValue toJsonValue(const {{prefix}}Object &value); QJsonValue toJsonValue(const {{prefix}}Enum &value); + QJsonValue toJsonValue(const {{prefix}}HttpFileElement &value); template QJsonValue toJsonValue(const QList &val) { @@ -80,7 +85,9 @@ namespace {{this}} { bool fromStringValue(const QString &inStr, bool &value); bool fromStringValue(const QString &inStr, float &value); bool fromStringValue(const QString &inStr, double &value); - bool fromStringValue(const QString &inStr, {{prefix}}Enum &value); + bool fromStringValue(const QString &inStr, {{prefix}}Object &value); + bool fromStringValue(const QString &inStr, {{prefix}}Enum &value); + bool fromStringValue(const QString &inStr, {{prefix}}HttpFileElement &value); template bool fromStringValue(const QList &inStr, QList &val) { @@ -115,6 +122,7 @@ namespace {{this}} { bool fromJsonValue(double &value, const QJsonValue &jval); bool fromJsonValue({{prefix}}Object &value, const QJsonValue &jval); bool fromJsonValue({{prefix}}Enum &value, const QJsonValue &jval); + bool fromJsonValue({{prefix}}HttpFileElement &value, const QJsonValue &jval); template bool fromJsonValue(QList &val, const QJsonValue &jval) { diff --git a/modules/openapi-generator/src/main/resources/cpp-qt5-client/model-body.mustache b/modules/openapi-generator/src/main/resources/cpp-qt5-client/model-body.mustache index 1e25f8982777..0f71c97ca6c8 100644 --- a/modules/openapi-generator/src/main/resources/cpp-qt5-client/model-body.mustache +++ b/modules/openapi-generator/src/main/resources/cpp-qt5-client/model-body.mustache @@ -2,13 +2,13 @@ {{#models}}{{#model}} #include "{{classname}}.h" -#include "{{prefix}}Helpers.h" - #include #include #include #include +#include "{{prefix}}Helpers.h" + {{#cppNamespaceDeclarations}} namespace {{this}} { {{/cppNamespaceDeclarations}} @@ -70,7 +70,7 @@ void if(varmap.count() > 0){ for(auto val : varmap.keys()){ {{^items.isContainer}}{{items.baseType}}{{/items.isContainer}}{{#items.isListContainer}}QList<{{items.items.baseType}}>{{/items.isListContainer}}{{#items.isMapContainer}}QMap{{/items.isMapContainer}} item; - auto jval = QJsonValue::fromVariant(varmap.value(val)); + auto jval = QJsonValue::fromVariant(varmap.value(val)); m_{{name}}_isValid &= ::{{cppNamespace}}::fromJsonValue(item, jval); {{name}}.insert({{name}}.end(), val, item); } @@ -103,7 +103,7 @@ QString QJson{{^isEnum}}Object{{/isEnum}}{{#isEnum}}Value{{/isEnum}} {{classname}}::asJson{{^isEnum}}Object{{/isEnum}}{{#isEnum}}Value{{/isEnum}}() const { {{^isEnum}}QJsonObject obj;{{#vars}} - {{^isContainer}}{{#complexType}}if({{name}}.isSet()){{/complexType}}{{^complexType}}if(m_{{name}}_isSet){{/complexType}}{ + {{^isContainer}}{{#complexType}}if({{name}}.isSet()){{/complexType}}{{^complexType}}if(m_{{name}}_isSet){{/complexType}}{ obj.insert(QString("{{baseName}}"), ::{{cppNamespace}}::toJsonValue({{name}})); }{{/isContainer}}{{#isContainer}} if({{name}}.size() > 0){ diff --git a/modules/openapi-generator/src/main/resources/cpp-qt5-client/model-header.mustache b/modules/openapi-generator/src/main/resources/cpp-qt5-client/model-header.mustache index 556139facfb3..3c83c1f0d534 100644 --- a/modules/openapi-generator/src/main/resources/cpp-qt5-client/model-header.mustache +++ b/modules/openapi-generator/src/main/resources/cpp-qt5-client/model-header.mustache @@ -17,6 +17,7 @@ #include "{{prefix}}Object.h" #include "{{prefix}}Enum.h" + {{#models}} {{#model}} {{#cppNamespaceDeclarations}} diff --git a/modules/openapi-generator/src/main/resources/cpp-qt5-qhttpengine-server/HttpFileElement.cpp.mustache b/modules/openapi-generator/src/main/resources/cpp-qt5-qhttpengine-server/HttpFileElement.cpp.mustache new file mode 100644 index 000000000000..a4ff7f64c4a0 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/cpp-qt5-qhttpengine-server/HttpFileElement.cpp.mustache @@ -0,0 +1,155 @@ +{{>licenseInfo}} + +#include +#include +#include +#include + +#include "{{prefix}}HttpFileElement.h" + +{{#cppNamespaceDeclarations}} +namespace {{this}} { +{{/cppNamespaceDeclarations}} + +void +{{prefix}}HttpFileElement::setMimeType(const QString &mime){ + mime_type = mime; +} + +void +{{prefix}}HttpFileElement::setFileName(const QString &name){ + local_filename = name; +} + +void +{{prefix}}HttpFileElement::setVariableName(const QString &name){ + variable_name = name; +} + +void +{{prefix}}HttpFileElement::setRequestFileName(const QString &name){ + request_filename = name; +} + +bool +{{prefix}}HttpFileElement::isSet() const { + return !local_filename.isEmpty() || !request_filename.isEmpty(); +} + +QString +{{prefix}}HttpFileElement::asJson() const{ + QFile file(local_filename); + QByteArray bArray; + bool result = false; + if(file.exists()) { + result = file.open(QIODevice::ReadOnly); + bArray = file.readAll(); + file.close(); + } + if(!result) { + qDebug() << "Error opening file " << local_filename; + } + return QString(bArray); +} + +QJsonValue +{{prefix}}HttpFileElement::asJsonValue() const{ + QFile file(local_filename); + QByteArray bArray; + bool result = false; + if(file.exists()) { + result = file.open(QIODevice::ReadOnly); + bArray = file.readAll(); + file.close(); + } + if(!result) { + qDebug() << "Error opening file " << local_filename; + } + return QJsonDocument::fromBinaryData(bArray.data()).object(); +} + +bool +{{prefix}}HttpFileElement::fromStringValue(const QString &instr){ + QFile file(local_filename); + bool result = false; + if(file.exists()) { + file.remove(); + } + result = file.open(QIODevice::WriteOnly); + file.write(instr.toUtf8()); + file.close(); + if(!result) { + qDebug() << "Error creating file " << local_filename; + } + return result; +} + +bool +{{prefix}}HttpFileElement::fromJsonValue(const QJsonValue &jval) { + QFile file(local_filename); + bool result = false; + if(file.exists()) { + file.remove(); + } + result = file.open(QIODevice::WriteOnly); + file.write(QJsonDocument(jval.toObject()).toBinaryData()); + file.close(); + if(!result) { + qDebug() << "Error creating file " << local_filename; + } + return result; +} + +QByteArray +{{prefix}}HttpFileElement::asByteArray() const { + QFile file(local_filename); + QByteArray bArray; + bool result = false; + if(file.exists()) { + result = file.open(QIODevice::ReadOnly); + bArray = file.readAll(); + file.close(); + } + if(!result) { + qDebug() << "Error opening file " << local_filename; + } + return bArray; +} + +bool +{{prefix}}HttpFileElement::fromByteArray(const QByteArray& bytes){ + QFile file(local_filename); + bool result = false; + if(file.exists()){ + file.remove(); + } + result = file.open(QIODevice::WriteOnly); + file.write(bytes); + file.close(); + if(!result) { + qDebug() << "Error creating file " << local_filename; + } + return result; +} + +bool +{{prefix}}HttpFileElement::saveToFile(const QString &varName, const QString &localFName, const QString &reqFname, const QString &mime, const QByteArray& bytes){ + setMimeType(mime); + setFileName(localFName); + setVariableName(varName); + setRequestFileName(reqFname); + return fromByteArray(bytes); +} + +QByteArray +{{prefix}}HttpFileElement::loadFromFile(const QString &varName, const QString &localFName, const QString &reqFname, const QString &mime){ + setMimeType(mime); + setFileName(localFName); + setVariableName(varName); + setRequestFileName(reqFname); + return asByteArray(); +} + +{{#cppNamespaceDeclarations}} +} +{{/cppNamespaceDeclarations}} \ No newline at end of file diff --git a/modules/openapi-generator/src/main/resources/cpp-qt5-qhttpengine-server/HttpFileElement.h.mustache b/modules/openapi-generator/src/main/resources/cpp-qt5-qhttpengine-server/HttpFileElement.h.mustache new file mode 100644 index 000000000000..9ebfe3623566 --- /dev/null +++ b/modules/openapi-generator/src/main/resources/cpp-qt5-qhttpengine-server/HttpFileElement.h.mustache @@ -0,0 +1,42 @@ +{{>licenseInfo}} +#ifndef {{prefix}}_HTTP_FILE_ELEMENT_H +#define {{prefix}}_HTTP_FILE_ELEMENT_H + +#include +#include +#include + + +{{#cppNamespaceDeclarations}} +namespace {{this}} { +{{/cppNamespaceDeclarations}} + +class {{prefix}}HttpFileElement { + +public: + QString variable_name; + QString local_filename; + QString request_filename; + QString mime_type; + void setMimeType(const QString &mime); + void setFileName(const QString &name); + void setVariableName(const QString &name); + void setRequestFileName(const QString &name); + bool isSet() const; + bool fromStringValue(const QString &instr); + bool fromJsonValue(const QJsonValue &jval); + bool fromByteArray(const QByteArray& bytes); + bool saveToFile(const QString &variable_name, const QString &local_filename, const QString &request_filename, const QString &mime, const QByteArray& bytes); + QString asJson() const; + QJsonValue asJsonValue() const; + QByteArray asByteArray() const; + QByteArray loadFromFile(const QString &variable_name, const QString &local_filename, const QString &request_filename, const QString &mime); +}; + +{{#cppNamespaceDeclarations}} +} +{{/cppNamespaceDeclarations}} + +Q_DECLARE_METATYPE({{#cppNamespaceDeclarations}}{{this}}::{{/cppNamespaceDeclarations}}{{prefix}}HttpFileElement) + +#endif // {{prefix}}_HTTP_FILE_ELEMENT_H diff --git a/modules/openapi-generator/src/main/resources/cpp-qt5-qhttpengine-server/enum.mustache b/modules/openapi-generator/src/main/resources/cpp-qt5-qhttpengine-server/enum.mustache index 2874ef8c7129..bf34a3a150c0 100644 --- a/modules/openapi-generator/src/main/resources/cpp-qt5-qhttpengine-server/enum.mustache +++ b/modules/openapi-generator/src/main/resources/cpp-qt5-qhttpengine-server/enum.mustache @@ -15,7 +15,7 @@ class {{prefix}}Enum { {{prefix}}Enum() { } - + {{prefix}}Enum(QString jsonString) { fromJson(jsonString); } @@ -48,7 +48,7 @@ class {{prefix}}Enum { return true; } private : - QString jstr; + QString jstr; }; {{#cppNamespaceDeclarations}} diff --git a/modules/openapi-generator/src/main/resources/cpp-qt5-qhttpengine-server/helpers-body.mustache b/modules/openapi-generator/src/main/resources/cpp-qt5-qhttpengine-server/helpers-body.mustache index 9aa16e1b52a0..9b97b53e52c9 100644 --- a/modules/openapi-generator/src/main/resources/cpp-qt5-qhttpengine-server/helpers-body.mustache +++ b/modules/openapi-generator/src/main/resources/cpp-qt5-qhttpengine-server/helpers-body.mustache @@ -55,11 +55,23 @@ toStringValue(const double &value){ return QString::number(value); } +QString +toStringValue(const {{prefix}}Object &value){ + return value.asJson(); +} + + QString toStringValue(const {{prefix}}Enum &value){ return value.asJson(); } +QString +toStringValue(const {{prefix}}HttpFileElement &value){ + return value.asJson(); +} + + QJsonValue toJsonValue(const QString &value){ return QJsonValue(value); @@ -115,6 +127,12 @@ toJsonValue(const {{prefix}}Enum &value){ return value.asJsonValue(); } +QJsonValue +toJsonValue(const {{prefix}}HttpFileElement &value){ + return value.asJsonValue(); +} + + bool fromStringValue(const QString &inStr, QString &value){ value.clear(); @@ -209,6 +227,11 @@ fromStringValue(const QString &inStr, {{prefix}}Enum &value){ return true; } +bool +fromStringValue(const QString &inStr, OAIHttpFileElement &value){ + return value.fromStringValue(inStr); +} + bool fromJsonValue(QString &value, const QJsonValue &jval){ bool ok = true; @@ -220,7 +243,7 @@ fromJsonValue(QString &value, const QJsonValue &jval){ } else if(jval.isDouble()){ value = QString::number(jval.toDouble()); } else { - ok = false; + ok = false; } } else { ok = false; @@ -230,7 +253,7 @@ fromJsonValue(QString &value, const QJsonValue &jval){ bool fromJsonValue(QDateTime &value, const QJsonValue &jval){ - bool ok = true; + bool ok = true; if(!jval.isUndefined() && !jval.isNull() && jval.isString()){ value = QDateTime::fromString(jval.toString(), Qt::ISODate); ok = value.isValid(); @@ -254,7 +277,7 @@ fromJsonValue(QByteArray &value, const QJsonValue &jval){ bool fromJsonValue(QDate &value, const QJsonValue &jval){ - bool ok = true; + bool ok = true; if(!jval.isUndefined() && !jval.isNull() && jval.isString()){ value = QDate::fromString(jval.toString(), Qt::ISODate); ok = value.isValid(); @@ -266,7 +289,7 @@ fromJsonValue(QDate &value, const QJsonValue &jval){ bool fromJsonValue(qint32 &value, const QJsonValue &jval){ - bool ok = true; + bool ok = true; if(!jval.isUndefined() && !jval.isNull() && !jval.isObject() && !jval.isArray()){ value = jval.toInt(); } else { @@ -277,7 +300,7 @@ fromJsonValue(qint32 &value, const QJsonValue &jval){ bool fromJsonValue(qint64 &value, const QJsonValue &jval){ - bool ok = true; + bool ok = true; if(!jval.isUndefined() && !jval.isNull() && !jval.isObject() && !jval.isArray()){ value = jval.toVariant().toLongLong(); } else { @@ -288,7 +311,7 @@ fromJsonValue(qint64 &value, const QJsonValue &jval){ bool fromJsonValue(bool &value, const QJsonValue &jval){ - bool ok = true; + bool ok = true; if(jval.isBool()){ value = jval.toBool(); } else { @@ -299,7 +322,7 @@ fromJsonValue(bool &value, const QJsonValue &jval){ bool fromJsonValue(float &value, const QJsonValue &jval){ - bool ok = true; + bool ok = true; if(jval.isDouble()){ value = static_cast(jval.toDouble()); } else { @@ -310,7 +333,7 @@ fromJsonValue(float &value, const QJsonValue &jval){ bool fromJsonValue(double &value, const QJsonValue &jval){ - bool ok = true; + bool ok = true; if(jval.isDouble()){ value = jval.toDouble(); } else { @@ -321,7 +344,7 @@ fromJsonValue(double &value, const QJsonValue &jval){ bool fromJsonValue({{prefix}}Object &value, const QJsonValue &jval){ - bool ok = true; + bool ok = true; if(jval.isObject()){ value.fromJsonObject(jval.toObject()); ok = value.isValid(); @@ -337,6 +360,11 @@ fromJsonValue({{prefix}}Enum &value, const QJsonValue &jval){ return true; } +bool +fromJsonValue({{prefix}}HttpFileElement &value, const QJsonValue &jval){ + return value.fromJsonValue(jval); +} + {{#cppNamespaceDeclarations}} } {{/cppNamespaceDeclarations}} diff --git a/modules/openapi-generator/src/main/resources/cpp-qt5-qhttpengine-server/helpers-header.mustache b/modules/openapi-generator/src/main/resources/cpp-qt5-qhttpengine-server/helpers-header.mustache index 0948f4f662f1..f5275022a716 100644 --- a/modules/openapi-generator/src/main/resources/cpp-qt5-qhttpengine-server/helpers-header.mustache +++ b/modules/openapi-generator/src/main/resources/cpp-qt5-qhttpengine-server/helpers-header.mustache @@ -11,8 +11,10 @@ #include #include #include + #include "{{prefix}}Object.h" #include "{{prefix}}Enum.h" +#include "{{prefix}}HttpFileElement.h" {{#cppNamespaceDeclarations}} namespace {{this}} { @@ -27,7 +29,9 @@ namespace {{this}} { QString toStringValue(const bool &value); QString toStringValue(const float &value); QString toStringValue(const double &value); - QString toStringValue(const {{prefix}}Enum &value); + QString toStringValue(const {{prefix}}Object &value); + QString toStringValue(const {{prefix}}Enum &value); + QString toStringValue(const {{prefix}}HttpFileElement &value); template QString toStringValue(const QList &val) { @@ -52,6 +56,7 @@ namespace {{this}} { QJsonValue toJsonValue(const double &value); QJsonValue toJsonValue(const {{prefix}}Object &value); QJsonValue toJsonValue(const {{prefix}}Enum &value); + QJsonValue toJsonValue(const {{prefix}}HttpFileElement &value); template QJsonValue toJsonValue(const QList &val) { @@ -80,7 +85,9 @@ namespace {{this}} { bool fromStringValue(const QString &inStr, bool &value); bool fromStringValue(const QString &inStr, float &value); bool fromStringValue(const QString &inStr, double &value); - bool fromStringValue(const QString &inStr, {{prefix}}Enum &value); + bool fromStringValue(const QString &inStr, {{prefix}}Object &value); + bool fromStringValue(const QString &inStr, {{prefix}}Enum &value); + bool fromStringValue(const QString &inStr, {{prefix}}HttpFileElement &value); template bool fromStringValue(const QList &inStr, QList &val) { @@ -115,6 +122,7 @@ namespace {{this}} { bool fromJsonValue(double &value, const QJsonValue &jval); bool fromJsonValue({{prefix}}Object &value, const QJsonValue &jval); bool fromJsonValue({{prefix}}Enum &value, const QJsonValue &jval); + bool fromJsonValue({{prefix}}HttpFileElement &value, const QJsonValue &jval); template bool fromJsonValue(QList &val, const QJsonValue &jval) { @@ -129,7 +137,7 @@ namespace {{this}} { ok = false; } return ok; - } + } template bool fromJsonValue(QMap &val, const QJsonValue &jval) { diff --git a/modules/openapi-generator/src/main/resources/cpp-qt5-qhttpengine-server/model-body.mustache b/modules/openapi-generator/src/main/resources/cpp-qt5-qhttpengine-server/model-body.mustache index 2a75a18c760c..0f71c97ca6c8 100644 --- a/modules/openapi-generator/src/main/resources/cpp-qt5-qhttpengine-server/model-body.mustache +++ b/modules/openapi-generator/src/main/resources/cpp-qt5-qhttpengine-server/model-body.mustache @@ -2,13 +2,13 @@ {{#models}}{{#model}} #include "{{classname}}.h" -#include "{{prefix}}Helpers.h" - #include #include #include #include +#include "{{prefix}}Helpers.h" + {{#cppNamespaceDeclarations}} namespace {{this}} { {{/cppNamespaceDeclarations}} @@ -43,7 +43,7 @@ void {{^isEnum}}QByteArray array (jsonString.toStdString().c_str()); QJsonDocument doc = QJsonDocument::fromJson(array); QJsonObject jsonObject = doc.object(); - this->fromJsonObject(jsonObject);{{/isEnum}}{{#isEnum}}{{#allowableValues}}{{#enumVars}} + this->fromJsonObject(jsonObject);{{/isEnum}}{{#isEnum}}{{#allowableValues}}{{#enumVars}} {{#-first}}if{{/-first}}{{^-first}}else if{{/-first}} ( jsonString.compare({{#isString}}"{{value}}"{{/isString}}{{^isString}}QString::number({{value}}){{/isString}}, Qt::CaseInsensitive) == 0) { m_value = e{{classname}}::{{name}}; m_value_isValid = true; @@ -70,7 +70,7 @@ void if(varmap.count() > 0){ for(auto val : varmap.keys()){ {{^items.isContainer}}{{items.baseType}}{{/items.isContainer}}{{#items.isListContainer}}QList<{{items.items.baseType}}>{{/items.isListContainer}}{{#items.isMapContainer}}QMap{{/items.isMapContainer}} item; - auto jval = QJsonValue::fromVariant(varmap.value(val)); + auto jval = QJsonValue::fromVariant(varmap.value(val)); m_{{name}}_isValid &= ::{{cppNamespace}}::fromJsonValue(item, jval); {{name}}.insert({{name}}.end(), val, item); } @@ -92,7 +92,7 @@ QString {{#enumVars}} case e{{classname}}::{{name}}: val = {{#isString}}"{{value}}"{{/isString}}{{^isString}}QString::number({{value}}){{/isString}}; - break;{{#-last}} + break;{{#-last}} default: break;{{/-last}} {{/enumVars}} @@ -103,7 +103,7 @@ QString QJson{{^isEnum}}Object{{/isEnum}}{{#isEnum}}Value{{/isEnum}} {{classname}}::asJson{{^isEnum}}Object{{/isEnum}}{{#isEnum}}Value{{/isEnum}}() const { {{^isEnum}}QJsonObject obj;{{#vars}} - {{^isContainer}}{{#complexType}}if({{name}}.isSet()){{/complexType}}{{^complexType}}if(m_{{name}}_isSet){{/complexType}}{ + {{^isContainer}}{{#complexType}}if({{name}}.isSet()){{/complexType}}{{^complexType}}if(m_{{name}}_isSet){{/complexType}}{ obj.insert(QString("{{baseName}}"), ::{{cppNamespace}}::toJsonValue({{name}})); }{{/isContainer}}{{#isContainer}} if({{name}}.size() > 0){ diff --git a/modules/openapi-generator/src/main/resources/cpp-qt5-qhttpengine-server/model-header.mustache b/modules/openapi-generator/src/main/resources/cpp-qt5-qhttpengine-server/model-header.mustache index 38b42f401a2c..3c83c1f0d534 100644 --- a/modules/openapi-generator/src/main/resources/cpp-qt5-qhttpengine-server/model-header.mustache +++ b/modules/openapi-generator/src/main/resources/cpp-qt5-qhttpengine-server/model-header.mustache @@ -17,6 +17,7 @@ #include "{{prefix}}Object.h" #include "{{prefix}}Enum.h" + {{#models}} {{#model}} {{#cppNamespaceDeclarations}} @@ -53,7 +54,7 @@ public: {{classname}}::e{{classname}} getValue() const; void setValue(const {{classname}}::e{{classname}}& value);{{/isEnum}} - + virtual bool isSet() const override; virtual bool isValid() const override; diff --git a/modules/openapi-generator/src/main/resources/cpp-qt5-qhttpengine-server/object.mustache b/modules/openapi-generator/src/main/resources/cpp-qt5-qhttpengine-server/object.mustache index 100670d1fc5c..e58b49adb921 100644 --- a/modules/openapi-generator/src/main/resources/cpp-qt5-qhttpengine-server/object.mustache +++ b/modules/openapi-generator/src/main/resources/cpp-qt5-qhttpengine-server/object.mustache @@ -15,7 +15,7 @@ class {{prefix}}Object { {{prefix}}Object() { } - + {{prefix}}Object(QString jsonString) { fromJson(jsonString); } diff --git a/samples/client/petstore/cpp-qt5/.openapi-generator/VERSION b/samples/client/petstore/cpp-qt5/.openapi-generator/VERSION index 83a328a9227e..d1a8f58b3884 100644 --- a/samples/client/petstore/cpp-qt5/.openapi-generator/VERSION +++ b/samples/client/petstore/cpp-qt5/.openapi-generator/VERSION @@ -1 +1 @@ -4.1.0-SNAPSHOT \ No newline at end of file +4.1.2-SNAPSHOT \ No newline at end of file diff --git a/samples/client/petstore/cpp-qt5/client/OAIApiResponse.cpp b/samples/client/petstore/cpp-qt5/client/OAIApiResponse.cpp index 9d4dd1eb8174..233f607a9cfc 100644 --- a/samples/client/petstore/cpp-qt5/client/OAIApiResponse.cpp +++ b/samples/client/petstore/cpp-qt5/client/OAIApiResponse.cpp @@ -13,13 +13,13 @@ #include "OAIApiResponse.h" -#include "OAIHelpers.h" - #include #include #include #include +#include "OAIHelpers.h" + namespace OpenAPI { OAIApiResponse::OAIApiResponse(QString json) { @@ -81,13 +81,13 @@ OAIApiResponse::asJson () const { QJsonObject OAIApiResponse::asJsonObject() const { QJsonObject obj; - if(m_code_isSet){ + if(m_code_isSet){ obj.insert(QString("code"), ::OpenAPI::toJsonValue(code)); } - if(m_type_isSet){ + if(m_type_isSet){ obj.insert(QString("type"), ::OpenAPI::toJsonValue(type)); } - if(m_message_isSet){ + if(m_message_isSet){ obj.insert(QString("message"), ::OpenAPI::toJsonValue(message)); } return obj; diff --git a/samples/client/petstore/cpp-qt5/client/OAIApiResponse.h b/samples/client/petstore/cpp-qt5/client/OAIApiResponse.h index aa71d9cdfbe5..7e4d74603831 100644 --- a/samples/client/petstore/cpp-qt5/client/OAIApiResponse.h +++ b/samples/client/petstore/cpp-qt5/client/OAIApiResponse.h @@ -27,6 +27,7 @@ #include "OAIObject.h" #include "OAIEnum.h" + namespace OpenAPI { class OAIApiResponse: public OAIObject { diff --git a/samples/client/petstore/cpp-qt5/client/OAICategory.cpp b/samples/client/petstore/cpp-qt5/client/OAICategory.cpp index 752f6bdbba95..571dc37b6fa7 100644 --- a/samples/client/petstore/cpp-qt5/client/OAICategory.cpp +++ b/samples/client/petstore/cpp-qt5/client/OAICategory.cpp @@ -13,13 +13,13 @@ #include "OAICategory.h" -#include "OAIHelpers.h" - #include #include #include #include +#include "OAIHelpers.h" + namespace OpenAPI { OAICategory::OAICategory(QString json) { @@ -75,10 +75,10 @@ OAICategory::asJson () const { QJsonObject OAICategory::asJsonObject() const { QJsonObject obj; - if(m_id_isSet){ + if(m_id_isSet){ obj.insert(QString("id"), ::OpenAPI::toJsonValue(id)); } - if(m_name_isSet){ + if(m_name_isSet){ obj.insert(QString("name"), ::OpenAPI::toJsonValue(name)); } return obj; diff --git a/samples/client/petstore/cpp-qt5/client/OAICategory.h b/samples/client/petstore/cpp-qt5/client/OAICategory.h index 966f5e295f11..8cfc76f4305c 100644 --- a/samples/client/petstore/cpp-qt5/client/OAICategory.h +++ b/samples/client/petstore/cpp-qt5/client/OAICategory.h @@ -27,6 +27,7 @@ #include "OAIObject.h" #include "OAIEnum.h" + namespace OpenAPI { class OAICategory: public OAIObject { diff --git a/samples/client/petstore/cpp-qt5/client/OAIHelpers.cpp b/samples/client/petstore/cpp-qt5/client/OAIHelpers.cpp index fa0ba7d9f22f..e4138649b5a2 100644 --- a/samples/client/petstore/cpp-qt5/client/OAIHelpers.cpp +++ b/samples/client/petstore/cpp-qt5/client/OAIHelpers.cpp @@ -64,11 +64,23 @@ toStringValue(const double &value){ return QString::number(value); } +QString +toStringValue(const OAIObject &value){ + return value.asJson(); +} + + QString toStringValue(const OAIEnum &value){ return value.asJson(); } +QString +toStringValue(const OAIHttpFileElement &value){ + return value.asJson(); +} + + QJsonValue toJsonValue(const QString &value){ return QJsonValue(value); @@ -124,6 +136,12 @@ toJsonValue(const OAIEnum &value){ return value.asJsonValue(); } +QJsonValue +toJsonValue(const OAIHttpFileElement &value){ + return value.asJsonValue(); +} + + bool fromStringValue(const QString &inStr, QString &value){ value.clear(); @@ -218,6 +236,11 @@ fromStringValue(const QString &inStr, OAIEnum &value){ return true; } +bool +fromStringValue(const QString &inStr, OAIHttpFileElement &value){ + return value.fromStringValue(inStr); +} + bool fromJsonValue(QString &value, const QJsonValue &jval){ bool ok = true; @@ -346,4 +369,9 @@ fromJsonValue(OAIEnum &value, const QJsonValue &jval){ return true; } +bool +fromJsonValue(OAIHttpFileElement &value, const QJsonValue &jval){ + return value.fromJsonValue(jval); +} + } diff --git a/samples/client/petstore/cpp-qt5/client/OAIHelpers.h b/samples/client/petstore/cpp-qt5/client/OAIHelpers.h index 0555e5dc2440..a2992183298d 100644 --- a/samples/client/petstore/cpp-qt5/client/OAIHelpers.h +++ b/samples/client/petstore/cpp-qt5/client/OAIHelpers.h @@ -22,8 +22,10 @@ #include #include #include + #include "OAIObject.h" #include "OAIEnum.h" +#include "OAIHttpFileElement.h" namespace OpenAPI { @@ -36,7 +38,9 @@ namespace OpenAPI { QString toStringValue(const bool &value); QString toStringValue(const float &value); QString toStringValue(const double &value); - QString toStringValue(const OAIEnum &value); + QString toStringValue(const OAIObject &value); + QString toStringValue(const OAIEnum &value); + QString toStringValue(const OAIHttpFileElement &value); template QString toStringValue(const QList &val) { @@ -61,6 +65,7 @@ namespace OpenAPI { QJsonValue toJsonValue(const double &value); QJsonValue toJsonValue(const OAIObject &value); QJsonValue toJsonValue(const OAIEnum &value); + QJsonValue toJsonValue(const OAIHttpFileElement &value); template QJsonValue toJsonValue(const QList &val) { @@ -89,7 +94,9 @@ namespace OpenAPI { bool fromStringValue(const QString &inStr, bool &value); bool fromStringValue(const QString &inStr, float &value); bool fromStringValue(const QString &inStr, double &value); - bool fromStringValue(const QString &inStr, OAIEnum &value); + bool fromStringValue(const QString &inStr, OAIObject &value); + bool fromStringValue(const QString &inStr, OAIEnum &value); + bool fromStringValue(const QString &inStr, OAIHttpFileElement &value); template bool fromStringValue(const QList &inStr, QList &val) { @@ -124,6 +131,7 @@ namespace OpenAPI { bool fromJsonValue(double &value, const QJsonValue &jval); bool fromJsonValue(OAIObject &value, const QJsonValue &jval); bool fromJsonValue(OAIEnum &value, const QJsonValue &jval); + bool fromJsonValue(OAIHttpFileElement &value, const QJsonValue &jval); template bool fromJsonValue(QList &val, const QJsonValue &jval) { diff --git a/samples/client/petstore/cpp-qt5/client/OAIHttpFileElement.cpp b/samples/client/petstore/cpp-qt5/client/OAIHttpFileElement.cpp new file mode 100644 index 000000000000..ef627144b1e5 --- /dev/null +++ b/samples/client/petstore/cpp-qt5/client/OAIHttpFileElement.cpp @@ -0,0 +1,162 @@ +/** + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +#include +#include +#include +#include + +#include "OAIHttpFileElement.h" + +namespace OpenAPI { + +void +OAIHttpFileElement::setMimeType(const QString &mime){ + mime_type = mime; +} + +void +OAIHttpFileElement::setFileName(const QString &name){ + local_filename = name; +} + +void +OAIHttpFileElement::setVariableName(const QString &name){ + variable_name = name; +} + +void +OAIHttpFileElement::setRequestFileName(const QString &name){ + request_filename = name; +} + +bool +OAIHttpFileElement::isSet() const { + return !local_filename.isEmpty() || !request_filename.isEmpty(); +} + +QString +OAIHttpFileElement::asJson() const{ + QFile file(local_filename); + QByteArray bArray; + bool result = false; + if(file.exists()) { + result = file.open(QIODevice::ReadOnly); + bArray = file.readAll(); + file.close(); + } + if(!result) { + qDebug() << "Error opening file " << local_filename; + } + return QString(bArray); +} + +QJsonValue +OAIHttpFileElement::asJsonValue() const{ + QFile file(local_filename); + QByteArray bArray; + bool result = false; + if(file.exists()) { + result = file.open(QIODevice::ReadOnly); + bArray = file.readAll(); + file.close(); + } + if(!result) { + qDebug() << "Error opening file " << local_filename; + } + return QJsonDocument::fromBinaryData(bArray.data()).object(); +} + +bool +OAIHttpFileElement::fromStringValue(const QString &instr){ + QFile file(local_filename); + bool result = false; + if(file.exists()) { + file.remove(); + } + result = file.open(QIODevice::WriteOnly); + file.write(instr.toUtf8()); + file.close(); + if(!result) { + qDebug() << "Error creating file " << local_filename; + } + return result; +} + +bool +OAIHttpFileElement::fromJsonValue(const QJsonValue &jval) { + QFile file(local_filename); + bool result = false; + if(file.exists()) { + file.remove(); + } + result = file.open(QIODevice::WriteOnly); + file.write(QJsonDocument(jval.toObject()).toBinaryData()); + file.close(); + if(!result) { + qDebug() << "Error creating file " << local_filename; + } + return result; +} + +QByteArray +OAIHttpFileElement::asByteArray() const { + QFile file(local_filename); + QByteArray bArray; + bool result = false; + if(file.exists()) { + result = file.open(QIODevice::ReadOnly); + bArray = file.readAll(); + file.close(); + } + if(!result) { + qDebug() << "Error opening file " << local_filename; + } + return bArray; +} + +bool +OAIHttpFileElement::fromByteArray(const QByteArray& bytes){ + QFile file(local_filename); + bool result = false; + if(file.exists()){ + file.remove(); + } + result = file.open(QIODevice::WriteOnly); + file.write(bytes); + file.close(); + if(!result) { + qDebug() << "Error creating file " << local_filename; + } + return result; +} + +bool +OAIHttpFileElement::saveToFile(const QString &varName, const QString &localFName, const QString &reqFname, const QString &mime, const QByteArray& bytes){ + setMimeType(mime); + setFileName(localFName); + setVariableName(varName); + setRequestFileName(reqFname); + return fromByteArray(bytes); +} + +QByteArray +OAIHttpFileElement::loadFromFile(const QString &varName, const QString &localFName, const QString &reqFname, const QString &mime){ + setMimeType(mime); + setFileName(localFName); + setVariableName(varName); + setRequestFileName(reqFname); + return asByteArray(); +} + +} diff --git a/samples/client/petstore/cpp-qt5/client/OAIHttpFileElement.h b/samples/client/petstore/cpp-qt5/client/OAIHttpFileElement.h new file mode 100644 index 000000000000..b5d189b3440c --- /dev/null +++ b/samples/client/petstore/cpp-qt5/client/OAIHttpFileElement.h @@ -0,0 +1,49 @@ +/** + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +#ifndef OAI_HTTP_FILE_ELEMENT_H +#define OAI_HTTP_FILE_ELEMENT_H + +#include +#include +#include + + +namespace OpenAPI { + +class OAIHttpFileElement { + +public: + QString variable_name; + QString local_filename; + QString request_filename; + QString mime_type; + void setMimeType(const QString &mime); + void setFileName(const QString &name); + void setVariableName(const QString &name); + void setRequestFileName(const QString &name); + bool isSet() const; + bool fromStringValue(const QString &instr); + bool fromJsonValue(const QJsonValue &jval); + bool fromByteArray(const QByteArray& bytes); + bool saveToFile(const QString &variable_name, const QString &local_filename, const QString &request_filename, const QString &mime, const QByteArray& bytes); + QString asJson() const; + QJsonValue asJsonValue() const; + QByteArray asByteArray() const; + QByteArray loadFromFile(const QString &variable_name, const QString &local_filename, const QString &request_filename, const QString &mime); +}; + +} + +Q_DECLARE_METATYPE(OpenAPI::OAIHttpFileElement) + +#endif // OAI_HTTP_FILE_ELEMENT_H diff --git a/samples/client/petstore/cpp-qt5/client/OAIHttpRequest.cpp b/samples/client/petstore/cpp-qt5/client/OAIHttpRequest.cpp index a2ec8558cee0..ef06abdf2899 100644 --- a/samples/client/petstore/cpp-qt5/client/OAIHttpRequest.cpp +++ b/samples/client/petstore/cpp-qt5/client/OAIHttpRequest.cpp @@ -10,13 +10,18 @@ * Do not edit the class manually. */ -#include "OAIHttpRequest.h" + + #include +#include +#include #include #include #include #include +#include "OAIHttpRequest.h" + namespace OpenAPI { @@ -41,7 +46,7 @@ void OAIHttpRequestInput::add_var(QString key, QString value) { } void OAIHttpRequestInput::add_file(QString variable_name, QString local_filename, QString request_filename, QString mime_type) { - OAIHttpRequestInputFileElement file; + OAIHttpFileElement file; file.variable_name = variable_name; file.local_filename = local_filename; file.request_filename = request_filename; @@ -57,6 +62,7 @@ OAIHttpRequestWorker::OAIHttpRequestWorker(QObject *parent) timeout = 0; timer = new QTimer(); manager = new QNetworkAccessManager(this); + workingDirectory = QDir::currentPath(); connect(manager, &QNetworkAccessManager::finished, this, &OAIHttpRequestWorker::on_manager_finished); } @@ -67,16 +73,50 @@ OAIHttpRequestWorker::~OAIHttpRequestWorker() { } timer->deleteLater(); } + for (const auto & item: multiPartFields) { + if(item != nullptr) { + delete item; + } + } } -QMap OAIHttpRequestWorker::getResponseHeaders() const { +QMap OAIHttpRequestWorker::getResponseHeaders() const { return headers; } +OAIHttpFileElement OAIHttpRequestWorker::getHttpFileElement(const QString &fieldname){ + if(!files.isEmpty()){ + if(fieldname.isEmpty()){ + return files.first(); + }else if (files.contains(fieldname)){ + return files[fieldname]; + } + } + return OAIHttpFileElement(); +} + +QByteArray *OAIHttpRequestWorker::getMultiPartField(const QString &fieldname){ + if(!multiPartFields.isEmpty()){ + if(fieldname.isEmpty()){ + return multiPartFields.first(); + }else if (multiPartFields.contains(fieldname)){ + return multiPartFields[fieldname]; + } + } + return nullptr; +} + void OAIHttpRequestWorker::setTimeOut(int tout){ timeout = tout; } +void OAIHttpRequestWorker::setWorkingDirectory(const QString &path){ + if(!path.isEmpty()){ + workingDirectory = path; + } +} + + QString OAIHttpRequestWorker::http_attribute_encode(QString attribute_name, QString input) { // result structure follows RFC 5987 bool need_utf_encoding = false; @@ -205,7 +245,7 @@ void OAIHttpRequestWorker::execute(OAIHttpRequestInput *input) { } // add files - for (QList::iterator file_info = input->files.begin(); file_info != input->files.end(); file_info++) { + for (QList::iterator file_info = input->files.begin(); file_info != input->files.end(); file_info++) { QFileInfo fi(file_info->local_filename); // ensure necessary variables are available @@ -285,8 +325,13 @@ void OAIHttpRequestWorker::execute(OAIHttpRequestInput *input) { request.setRawHeader(key.toStdString().c_str(), input->headers.value(key).toStdString().c_str()); } - if (request_content.size() > 0 && !isFormData) { - request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json"); + if (request_content.size() > 0 && !isFormData && (input->var_layout != MULTIPART)) { + if(!input->headers.contains("Content-Type")){ + request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json"); + } + else { + request.setHeader(QNetworkRequest::ContentTypeHeader, input->headers.value("Content-Type")); + } } else if (input->var_layout == URL_ENCODED) { request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded"); @@ -340,9 +385,10 @@ void OAIHttpRequestWorker::on_manager_finished(QNetworkReply *reply) { } } reply->deleteLater(); - + process_form_response(); emit on_execution_finished(this); } + void OAIHttpRequestWorker::on_manager_timeout(QNetworkReply *reply) { error_type = QNetworkReply::TimeoutError; response = ""; @@ -350,9 +396,37 @@ void OAIHttpRequestWorker::on_manager_timeout(QNetworkReply *reply) { disconnect(manager, nullptr, nullptr, nullptr); reply->abort(); reply->deleteLater(); - emit on_execution_finished(this); } + +void OAIHttpRequestWorker::process_form_response() { + if(getResponseHeaders().contains(QString("Content-Disposition")) ) { + auto contentDisposition = getResponseHeaders().value(QString("Content-Disposition").toUtf8()).split(QString(";"), QString::SkipEmptyParts); + auto contentType = getResponseHeaders().contains(QString("Content-Type")) ? getResponseHeaders().value(QString("Content-Type").toUtf8()).split(QString(";"), QString::SkipEmptyParts).first() : QString(); + if((contentDisposition.count() > 0) && (contentDisposition.first() == QString("attachment"))){ + QString filename = QUuid::createUuid().toString(); + for(const auto &file : contentDisposition){ + if(file.contains(QString("filename"))){ + filename = file.split(QString("="), QString::SkipEmptyParts).at(1); + break; + } + } + OAIHttpFileElement felement; + felement.saveToFile(QString(), workingDirectory + QDir::separator() + filename, filename, contentType, response.data()); + files.insert(filename, felement); + } + + } else if(getResponseHeaders().contains(QString("Content-Type")) ) { + auto contentType = getResponseHeaders().value(QString("Content-Type").toUtf8()).split(QString(";"), QString::SkipEmptyParts); + if((contentType.count() > 0) && (contentType.first() == QString("multipart/form-data"))){ + + } + else { + + } + } +} + QSslConfiguration* OAIHttpRequestWorker::sslDefaultConfiguration; diff --git a/samples/client/petstore/cpp-qt5/client/OAIHttpRequest.h b/samples/client/petstore/cpp-qt5/client/OAIHttpRequest.h index ad3c31f69423..021f05d6d89f 100644 --- a/samples/client/petstore/cpp-qt5/client/OAIHttpRequest.h +++ b/samples/client/petstore/cpp-qt5/client/OAIHttpRequest.h @@ -27,21 +27,12 @@ #include +#include "OAIHttpFileElement.h" namespace OpenAPI { enum OAIHttpRequestVarLayout {NOT_SET, ADDRESS, URL_ENCODED, MULTIPART}; -class OAIHttpRequestInputFileElement { - -public: - QString variable_name; - QString local_filename; - QString request_filename; - QString mime_type; - -}; - class OAIHttpRequestInput { @@ -51,7 +42,7 @@ class OAIHttpRequestInput { OAIHttpRequestVarLayout var_layout; QMap vars; QMap headers; - QList files; + QList files; QByteArray request_body; OAIHttpRequestInput(); @@ -74,19 +65,26 @@ class OAIHttpRequestWorker : public QObject { explicit OAIHttpRequestWorker(QObject *parent = nullptr); virtual ~OAIHttpRequestWorker(); - QMap getResponseHeaders() const; + QMap getResponseHeaders() const; QString http_attribute_encode(QString attribute_name, QString input); void execute(OAIHttpRequestInput *input); static QSslConfiguration* sslDefaultConfiguration; void setTimeOut(int tout); + void setWorkingDirectory(const QString &path); + OAIHttpFileElement getHttpFileElement(const QString &fieldname = QString()); + QByteArray* getMultiPartField(const QString &fieldname = QString()); signals: void on_execution_finished(OAIHttpRequestWorker *worker); private: QNetworkAccessManager *manager; - QMap headers; + QMap headers; + QMap files; + QMap multiPartFields; + QString workingDirectory; int timeout; void on_manager_timeout(QNetworkReply *reply); + void process_form_response(); private slots: void on_manager_finished(QNetworkReply *reply); }; diff --git a/samples/client/petstore/cpp-qt5/client/OAIOrder.cpp b/samples/client/petstore/cpp-qt5/client/OAIOrder.cpp index 1ea3fba155de..a6f0fb92d97b 100644 --- a/samples/client/petstore/cpp-qt5/client/OAIOrder.cpp +++ b/samples/client/petstore/cpp-qt5/client/OAIOrder.cpp @@ -13,13 +13,13 @@ #include "OAIOrder.h" -#include "OAIHelpers.h" - #include #include #include #include +#include "OAIHelpers.h" + namespace OpenAPI { OAIOrder::OAIOrder(QString json) { @@ -99,22 +99,22 @@ OAIOrder::asJson () const { QJsonObject OAIOrder::asJsonObject() const { QJsonObject obj; - if(m_id_isSet){ + if(m_id_isSet){ obj.insert(QString("id"), ::OpenAPI::toJsonValue(id)); } - if(m_pet_id_isSet){ + if(m_pet_id_isSet){ obj.insert(QString("petId"), ::OpenAPI::toJsonValue(pet_id)); } - if(m_quantity_isSet){ + if(m_quantity_isSet){ obj.insert(QString("quantity"), ::OpenAPI::toJsonValue(quantity)); } - if(m_ship_date_isSet){ + if(m_ship_date_isSet){ obj.insert(QString("shipDate"), ::OpenAPI::toJsonValue(ship_date)); } - if(m_status_isSet){ + if(m_status_isSet){ obj.insert(QString("status"), ::OpenAPI::toJsonValue(status)); } - if(m_complete_isSet){ + if(m_complete_isSet){ obj.insert(QString("complete"), ::OpenAPI::toJsonValue(complete)); } return obj; diff --git a/samples/client/petstore/cpp-qt5/client/OAIOrder.h b/samples/client/petstore/cpp-qt5/client/OAIOrder.h index 79b3fe74136e..7acf2ab0a32d 100644 --- a/samples/client/petstore/cpp-qt5/client/OAIOrder.h +++ b/samples/client/petstore/cpp-qt5/client/OAIOrder.h @@ -28,6 +28,7 @@ #include "OAIObject.h" #include "OAIEnum.h" + namespace OpenAPI { class OAIOrder: public OAIObject { diff --git a/samples/client/petstore/cpp-qt5/client/OAIPet.cpp b/samples/client/petstore/cpp-qt5/client/OAIPet.cpp index c611d2d82ab2..8a6cfec0319d 100644 --- a/samples/client/petstore/cpp-qt5/client/OAIPet.cpp +++ b/samples/client/petstore/cpp-qt5/client/OAIPet.cpp @@ -13,13 +13,13 @@ #include "OAIPet.h" -#include "OAIHelpers.h" - #include #include #include #include +#include "OAIHelpers.h" + namespace OpenAPI { OAIPet::OAIPet(QString json) { @@ -99,24 +99,24 @@ OAIPet::asJson () const { QJsonObject OAIPet::asJsonObject() const { QJsonObject obj; - if(m_id_isSet){ + if(m_id_isSet){ obj.insert(QString("id"), ::OpenAPI::toJsonValue(id)); } - if(category.isSet()){ + if(category.isSet()){ obj.insert(QString("category"), ::OpenAPI::toJsonValue(category)); } - if(m_name_isSet){ + if(m_name_isSet){ obj.insert(QString("name"), ::OpenAPI::toJsonValue(name)); } - + if(photo_urls.size() > 0){ obj.insert(QString("photoUrls"), ::OpenAPI::toJsonValue(photo_urls)); } - + if(tags.size() > 0){ obj.insert(QString("tags"), ::OpenAPI::toJsonValue(tags)); } - if(m_status_isSet){ + if(m_status_isSet){ obj.insert(QString("status"), ::OpenAPI::toJsonValue(status)); } return obj; diff --git a/samples/client/petstore/cpp-qt5/client/OAIPet.h b/samples/client/petstore/cpp-qt5/client/OAIPet.h index f4e357e693fc..c2577bfc5a25 100644 --- a/samples/client/petstore/cpp-qt5/client/OAIPet.h +++ b/samples/client/petstore/cpp-qt5/client/OAIPet.h @@ -30,6 +30,7 @@ #include "OAIObject.h" #include "OAIEnum.h" + namespace OpenAPI { class OAIPet: public OAIObject { diff --git a/samples/client/petstore/cpp-qt5/client/OAIPetApi.cpp b/samples/client/petstore/cpp-qt5/client/OAIPetApi.cpp index 9b491dc59212..8cb7352341d7 100644 --- a/samples/client/petstore/cpp-qt5/client/OAIPetApi.cpp +++ b/samples/client/petstore/cpp-qt5/client/OAIPetApi.cpp @@ -46,6 +46,10 @@ void OAIPetApi::setApiTimeOutMs(const int tout){ timeout = tout; } +void OAIPetApi::setWorkingDirectory(const QString& path){ + workingDirectory = path; +} + void OAIPetApi::addHeaders(const QString& key, const QString& value){ defaultHeaders.insert(key, value); } @@ -58,8 +62,9 @@ OAIPetApi::addPet(const OAIPet& body) { OAIHttpRequestWorker *worker = new OAIHttpRequestWorker(this); worker->setTimeOut(timeout); + worker->setWorkingDirectory(workingDirectory); OAIHttpRequestInput input(fullPath, "POST"); - + QString output = body.asJson(); input.request_body.append(output); @@ -110,7 +115,9 @@ OAIPetApi::deletePet(const qint64& pet_id, const QString& api_key) { OAIHttpRequestWorker *worker = new OAIHttpRequestWorker(this); worker->setTimeOut(timeout); + worker->setWorkingDirectory(workingDirectory); OAIHttpRequestInput input(fullPath, "DELETE"); + if (api_key != nullptr) { input.headers.insert("api_key", api_key); @@ -198,7 +205,9 @@ OAIPetApi::findPetsByStatus(const QList& status) { OAIHttpRequestWorker *worker = new OAIHttpRequestWorker(this); worker->setTimeOut(timeout); + worker->setWorkingDirectory(workingDirectory); OAIHttpRequestInput input(fullPath, "GET"); + foreach(QString key, this->defaultHeaders.keys()) { @@ -293,7 +302,9 @@ OAIPetApi::findPetsByTags(const QList& tags) { OAIHttpRequestWorker *worker = new OAIHttpRequestWorker(this); worker->setTimeOut(timeout); + worker->setWorkingDirectory(workingDirectory); OAIHttpRequestInput input(fullPath, "GET"); + foreach(QString key, this->defaultHeaders.keys()) { @@ -351,7 +362,9 @@ OAIPetApi::getPetById(const qint64& pet_id) { OAIHttpRequestWorker *worker = new OAIHttpRequestWorker(this); worker->setTimeOut(timeout); + worker->setWorkingDirectory(workingDirectory); OAIHttpRequestInput input(fullPath, "GET"); + foreach(QString key, this->defaultHeaders.keys()) { @@ -397,8 +410,9 @@ OAIPetApi::updatePet(const OAIPet& body) { OAIHttpRequestWorker *worker = new OAIHttpRequestWorker(this); worker->setTimeOut(timeout); + worker->setWorkingDirectory(workingDirectory); OAIHttpRequestInput input(fullPath, "PUT"); - + QString output = body.asJson(); input.request_body.append(output); @@ -449,14 +463,12 @@ OAIPetApi::updatePetWithForm(const qint64& pet_id, const QString& name, const QS OAIHttpRequestWorker *worker = new OAIHttpRequestWorker(this); worker->setTimeOut(timeout); + worker->setWorkingDirectory(workingDirectory); OAIHttpRequestInput input(fullPath, "POST"); - if (name != nullptr) { - input.add_var("name", name); - } - if (status != nullptr) { - input.add_var("status", status); - } + input.add_var("name", ::OpenAPI::toStringValue(name)); + input.add_var("status", ::OpenAPI::toStringValue(status)); + foreach(QString key, this->defaultHeaders.keys()) { input.headers.insert(key, this->defaultHeaders.value(key)); @@ -494,7 +506,7 @@ OAIPetApi::updatePetWithFormCallback(OAIHttpRequestWorker * worker) { } void -OAIPetApi::uploadFile(const qint64& pet_id, const QString& additional_metadata, const OAIHttpRequestInputFileElement*& file) { +OAIPetApi::uploadFile(const qint64& pet_id, const QString& additional_metadata, const OAIHttpFileElement& file) { QString fullPath; fullPath.append(this->host).append(this->basePath).append("/pet/{petId}/uploadImage"); QString pet_idPathParam("{"); @@ -503,14 +515,12 @@ OAIPetApi::uploadFile(const qint64& pet_id, const QString& additional_metadata, OAIHttpRequestWorker *worker = new OAIHttpRequestWorker(this); worker->setTimeOut(timeout); + worker->setWorkingDirectory(workingDirectory); OAIHttpRequestInput input(fullPath, "POST"); - if (additional_metadata != nullptr) { - input.add_var("additionalMetadata", additional_metadata); - } - if (file != nullptr) { - input.add_file("file", (*file).local_filename, (*file).request_filename, (*file).mime_type); - } + input.add_var("additionalMetadata", ::OpenAPI::toStringValue(additional_metadata)); + input.add_file("file", file.local_filename, file.request_filename, file.mime_type); + foreach(QString key, this->defaultHeaders.keys()) { input.headers.insert(key, this->defaultHeaders.value(key)); diff --git a/samples/client/petstore/cpp-qt5/client/OAIPetApi.h b/samples/client/petstore/cpp-qt5/client/OAIPetApi.h index 449de958530e..56e8eecce313 100644 --- a/samples/client/petstore/cpp-qt5/client/OAIPetApi.h +++ b/samples/client/petstore/cpp-qt5/client/OAIPetApi.h @@ -16,7 +16,7 @@ #include "OAIHttpRequest.h" #include "OAIApiResponse.h" -#include "OAIHttpRequest.h" +#include "OAIHttpFileElement.h" #include "OAIPet.h" #include @@ -35,6 +35,7 @@ class OAIPetApi: public QObject { void setBasePath(const QString& basePath); void setHost(const QString& host); void setApiTimeOutMs(const int tout); + void setWorkingDirectory(const QString& path); void addHeaders(const QString& key, const QString& value); void addPet(const OAIPet& body); @@ -44,11 +45,12 @@ class OAIPetApi: public QObject { void getPetById(const qint64& pet_id); void updatePet(const OAIPet& body); void updatePetWithForm(const qint64& pet_id, const QString& name, const QString& status); - void uploadFile(const qint64& pet_id, const QString& additional_metadata, const OAIHttpRequestInputFileElement*& file); + void uploadFile(const qint64& pet_id, const QString& additional_metadata, const OAIHttpFileElement& file); private: QString basePath; QString host; + QString workingDirectory; int timeout; QMap defaultHeaders; void addPetCallback (OAIHttpRequestWorker * worker); diff --git a/samples/client/petstore/cpp-qt5/client/OAIStoreApi.cpp b/samples/client/petstore/cpp-qt5/client/OAIStoreApi.cpp index cb141576b200..eaff088e585a 100644 --- a/samples/client/petstore/cpp-qt5/client/OAIStoreApi.cpp +++ b/samples/client/petstore/cpp-qt5/client/OAIStoreApi.cpp @@ -46,6 +46,10 @@ void OAIStoreApi::setApiTimeOutMs(const int tout){ timeout = tout; } +void OAIStoreApi::setWorkingDirectory(const QString& path){ + workingDirectory = path; +} + void OAIStoreApi::addHeaders(const QString& key, const QString& value){ defaultHeaders.insert(key, value); } @@ -61,7 +65,9 @@ OAIStoreApi::deleteOrder(const QString& order_id) { OAIHttpRequestWorker *worker = new OAIHttpRequestWorker(this); worker->setTimeOut(timeout); + worker->setWorkingDirectory(workingDirectory); OAIHttpRequestInput input(fullPath, "DELETE"); + foreach(QString key, this->defaultHeaders.keys()) { @@ -106,7 +112,9 @@ OAIStoreApi::getInventory() { OAIHttpRequestWorker *worker = new OAIHttpRequestWorker(this); worker->setTimeOut(timeout); + worker->setWorkingDirectory(workingDirectory); OAIHttpRequestInput input(fullPath, "GET"); + foreach(QString key, this->defaultHeaders.keys()) { @@ -164,7 +172,9 @@ OAIStoreApi::getOrderById(const qint64& order_id) { OAIHttpRequestWorker *worker = new OAIHttpRequestWorker(this); worker->setTimeOut(timeout); + worker->setWorkingDirectory(workingDirectory); OAIHttpRequestInput input(fullPath, "GET"); + foreach(QString key, this->defaultHeaders.keys()) { @@ -210,8 +220,9 @@ OAIStoreApi::placeOrder(const OAIOrder& body) { OAIHttpRequestWorker *worker = new OAIHttpRequestWorker(this); worker->setTimeOut(timeout); + worker->setWorkingDirectory(workingDirectory); OAIHttpRequestInput input(fullPath, "POST"); - + QString output = body.asJson(); input.request_body.append(output); diff --git a/samples/client/petstore/cpp-qt5/client/OAIStoreApi.h b/samples/client/petstore/cpp-qt5/client/OAIStoreApi.h index 2f9d41b99853..317550ec170c 100644 --- a/samples/client/petstore/cpp-qt5/client/OAIStoreApi.h +++ b/samples/client/petstore/cpp-qt5/client/OAIStoreApi.h @@ -34,6 +34,7 @@ class OAIStoreApi: public QObject { void setBasePath(const QString& basePath); void setHost(const QString& host); void setApiTimeOutMs(const int tout); + void setWorkingDirectory(const QString& path); void addHeaders(const QString& key, const QString& value); void deleteOrder(const QString& order_id); @@ -44,6 +45,7 @@ class OAIStoreApi: public QObject { private: QString basePath; QString host; + QString workingDirectory; int timeout; QMap defaultHeaders; void deleteOrderCallback (OAIHttpRequestWorker * worker); diff --git a/samples/client/petstore/cpp-qt5/client/OAITag.cpp b/samples/client/petstore/cpp-qt5/client/OAITag.cpp index 4cf8d349b452..d986ce63b144 100644 --- a/samples/client/petstore/cpp-qt5/client/OAITag.cpp +++ b/samples/client/petstore/cpp-qt5/client/OAITag.cpp @@ -13,13 +13,13 @@ #include "OAITag.h" -#include "OAIHelpers.h" - #include #include #include #include +#include "OAIHelpers.h" + namespace OpenAPI { OAITag::OAITag(QString json) { @@ -75,10 +75,10 @@ OAITag::asJson () const { QJsonObject OAITag::asJsonObject() const { QJsonObject obj; - if(m_id_isSet){ + if(m_id_isSet){ obj.insert(QString("id"), ::OpenAPI::toJsonValue(id)); } - if(m_name_isSet){ + if(m_name_isSet){ obj.insert(QString("name"), ::OpenAPI::toJsonValue(name)); } return obj; diff --git a/samples/client/petstore/cpp-qt5/client/OAITag.h b/samples/client/petstore/cpp-qt5/client/OAITag.h index 1ea18b386771..2c8eb291d0ff 100644 --- a/samples/client/petstore/cpp-qt5/client/OAITag.h +++ b/samples/client/petstore/cpp-qt5/client/OAITag.h @@ -27,6 +27,7 @@ #include "OAIObject.h" #include "OAIEnum.h" + namespace OpenAPI { class OAITag: public OAIObject { diff --git a/samples/client/petstore/cpp-qt5/client/OAIUser.cpp b/samples/client/petstore/cpp-qt5/client/OAIUser.cpp index 52431c0367bb..2afe6d808eb4 100644 --- a/samples/client/petstore/cpp-qt5/client/OAIUser.cpp +++ b/samples/client/petstore/cpp-qt5/client/OAIUser.cpp @@ -13,13 +13,13 @@ #include "OAIUser.h" -#include "OAIHelpers.h" - #include #include #include #include +#include "OAIHelpers.h" + namespace OpenAPI { OAIUser::OAIUser(QString json) { @@ -111,28 +111,28 @@ OAIUser::asJson () const { QJsonObject OAIUser::asJsonObject() const { QJsonObject obj; - if(m_id_isSet){ + if(m_id_isSet){ obj.insert(QString("id"), ::OpenAPI::toJsonValue(id)); } - if(m_username_isSet){ + if(m_username_isSet){ obj.insert(QString("username"), ::OpenAPI::toJsonValue(username)); } - if(m_first_name_isSet){ + if(m_first_name_isSet){ obj.insert(QString("firstName"), ::OpenAPI::toJsonValue(first_name)); } - if(m_last_name_isSet){ + if(m_last_name_isSet){ obj.insert(QString("lastName"), ::OpenAPI::toJsonValue(last_name)); } - if(m_email_isSet){ + if(m_email_isSet){ obj.insert(QString("email"), ::OpenAPI::toJsonValue(email)); } - if(m_password_isSet){ + if(m_password_isSet){ obj.insert(QString("password"), ::OpenAPI::toJsonValue(password)); } - if(m_phone_isSet){ + if(m_phone_isSet){ obj.insert(QString("phone"), ::OpenAPI::toJsonValue(phone)); } - if(m_user_status_isSet){ + if(m_user_status_isSet){ obj.insert(QString("userStatus"), ::OpenAPI::toJsonValue(user_status)); } return obj; diff --git a/samples/client/petstore/cpp-qt5/client/OAIUser.h b/samples/client/petstore/cpp-qt5/client/OAIUser.h index f7dd6591ec84..29da83043b6b 100644 --- a/samples/client/petstore/cpp-qt5/client/OAIUser.h +++ b/samples/client/petstore/cpp-qt5/client/OAIUser.h @@ -27,6 +27,7 @@ #include "OAIObject.h" #include "OAIEnum.h" + namespace OpenAPI { class OAIUser: public OAIObject { diff --git a/samples/client/petstore/cpp-qt5/client/OAIUserApi.cpp b/samples/client/petstore/cpp-qt5/client/OAIUserApi.cpp index 353e77c89811..05391dc93d35 100644 --- a/samples/client/petstore/cpp-qt5/client/OAIUserApi.cpp +++ b/samples/client/petstore/cpp-qt5/client/OAIUserApi.cpp @@ -46,6 +46,10 @@ void OAIUserApi::setApiTimeOutMs(const int tout){ timeout = tout; } +void OAIUserApi::setWorkingDirectory(const QString& path){ + workingDirectory = path; +} + void OAIUserApi::addHeaders(const QString& key, const QString& value){ defaultHeaders.insert(key, value); } @@ -58,8 +62,9 @@ OAIUserApi::createUser(const OAIUser& body) { OAIHttpRequestWorker *worker = new OAIHttpRequestWorker(this); worker->setTimeOut(timeout); + worker->setWorkingDirectory(workingDirectory); OAIHttpRequestInput input(fullPath, "POST"); - + QString output = body.asJson(); input.request_body.append(output); @@ -107,8 +112,9 @@ OAIUserApi::createUsersWithArrayInput(const QList& body) { OAIHttpRequestWorker *worker = new OAIHttpRequestWorker(this); worker->setTimeOut(timeout); + worker->setWorkingDirectory(workingDirectory); OAIHttpRequestInput input(fullPath, "POST"); - + QJsonDocument doc(::OpenAPI::toJsonValue(body).toArray()); QByteArray bytes = doc.toJson(); @@ -157,8 +163,9 @@ OAIUserApi::createUsersWithListInput(const QList& body) { OAIHttpRequestWorker *worker = new OAIHttpRequestWorker(this); worker->setTimeOut(timeout); + worker->setWorkingDirectory(workingDirectory); OAIHttpRequestInput input(fullPath, "POST"); - + QJsonDocument doc(::OpenAPI::toJsonValue(body).toArray()); QByteArray bytes = doc.toJson(); @@ -210,7 +217,9 @@ OAIUserApi::deleteUser(const QString& username) { OAIHttpRequestWorker *worker = new OAIHttpRequestWorker(this); worker->setTimeOut(timeout); + worker->setWorkingDirectory(workingDirectory); OAIHttpRequestInput input(fullPath, "DELETE"); + foreach(QString key, this->defaultHeaders.keys()) { @@ -258,7 +267,9 @@ OAIUserApi::getUserByName(const QString& username) { OAIHttpRequestWorker *worker = new OAIHttpRequestWorker(this); worker->setTimeOut(timeout); + worker->setWorkingDirectory(workingDirectory); OAIHttpRequestInput input(fullPath, "GET"); + foreach(QString key, this->defaultHeaders.keys()) { @@ -320,7 +331,9 @@ OAIUserApi::loginUser(const QString& username, const QString& password) { OAIHttpRequestWorker *worker = new OAIHttpRequestWorker(this); worker->setTimeOut(timeout); + worker->setWorkingDirectory(workingDirectory); OAIHttpRequestInput input(fullPath, "GET"); + foreach(QString key, this->defaultHeaders.keys()) { @@ -367,7 +380,9 @@ OAIUserApi::logoutUser() { OAIHttpRequestWorker *worker = new OAIHttpRequestWorker(this); worker->setTimeOut(timeout); + worker->setWorkingDirectory(workingDirectory); OAIHttpRequestInput input(fullPath, "GET"); + foreach(QString key, this->defaultHeaders.keys()) { @@ -415,8 +430,9 @@ OAIUserApi::updateUser(const QString& username, const OAIUser& body) { OAIHttpRequestWorker *worker = new OAIHttpRequestWorker(this); worker->setTimeOut(timeout); + worker->setWorkingDirectory(workingDirectory); OAIHttpRequestInput input(fullPath, "PUT"); - + QString output = body.asJson(); input.request_body.append(output); diff --git a/samples/client/petstore/cpp-qt5/client/OAIUserApi.h b/samples/client/petstore/cpp-qt5/client/OAIUserApi.h index 454210caa6d2..7a3ab0271558 100644 --- a/samples/client/petstore/cpp-qt5/client/OAIUserApi.h +++ b/samples/client/petstore/cpp-qt5/client/OAIUserApi.h @@ -34,6 +34,7 @@ class OAIUserApi: public QObject { void setBasePath(const QString& basePath); void setHost(const QString& host); void setApiTimeOutMs(const int tout); + void setWorkingDirectory(const QString& path); void addHeaders(const QString& key, const QString& value); void createUser(const OAIUser& body); @@ -48,6 +49,7 @@ class OAIUserApi: public QObject { private: QString basePath; QString host; + QString workingDirectory; int timeout; QMap defaultHeaders; void createUserCallback (OAIHttpRequestWorker * worker); diff --git a/samples/client/petstore/cpp-qt5/client/client.pri b/samples/client/petstore/cpp-qt5/client/client.pri index ca6c9b552457..3e98ae6c8d23 100644 --- a/samples/client/petstore/cpp-qt5/client/client.pri +++ b/samples/client/petstore/cpp-qt5/client/client.pri @@ -15,8 +15,9 @@ HEADERS += \ # Others $${PWD}/OAIHelpers.h \ $${PWD}/OAIHttpRequest.h \ - $${PWD}/OAIObject.h - $${PWD}/OAIEnum.h + $${PWD}/OAIObject.h \ + $${PWD}/OAIEnum.h \ + $${PWD}/OAIHttpFileElement.h SOURCES += \ # Models @@ -32,5 +33,6 @@ SOURCES += \ $${PWD}/OAIUserApi.cpp \ # Others $${PWD}/OAIHelpers.cpp \ - $${PWD}/OAIHttpRequest.cpp + $${PWD}/OAIHttpRequest.cpp \ + $${PWD}/OAIHttpFileElement.cpp diff --git a/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/handlers/OAIPetApiHandler.cpp b/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/handlers/OAIPetApiHandler.cpp index ed0535ee0f3c..b565ee9a74f7 100644 --- a/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/handlers/OAIPetApiHandler.cpp +++ b/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/handlers/OAIPetApiHandler.cpp @@ -95,7 +95,7 @@ void OAIPetApiHandler::updatePetWithForm(qint64 pet_id, QString name, QString st reqObj->updatePetWithFormResponse(); } } -void OAIPetApiHandler::uploadFile(qint64 pet_id, QString additional_metadata, QIODevice* file) { +void OAIPetApiHandler::uploadFile(qint64 pet_id, QString additional_metadata, OAIHttpFileElement file) { Q_UNUSED(pet_id); Q_UNUSED(additional_metadata); Q_UNUSED(file); diff --git a/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/handlers/OAIPetApiHandler.h b/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/handlers/OAIPetApiHandler.h index 1b1c50de6e30..cfa39da6d4b6 100644 --- a/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/handlers/OAIPetApiHandler.h +++ b/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/handlers/OAIPetApiHandler.h @@ -16,8 +16,8 @@ #include #include "OAIApiResponse.h" +#include "OAIHttpFileElement.h" #include "OAIPet.h" -#include #include namespace OpenAPI { @@ -39,7 +39,7 @@ public slots: virtual void getPetById(qint64 pet_id); virtual void updatePet(OAIPet body); virtual void updatePetWithForm(qint64 pet_id, QString name, QString status); - virtual void uploadFile(qint64 pet_id, QString additional_metadata, QIODevice* file); + virtual void uploadFile(qint64 pet_id, QString additional_metadata, OAIHttpFileElement file); }; diff --git a/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/models/OAIApiResponse.cpp b/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/models/OAIApiResponse.cpp index 9d4dd1eb8174..233f607a9cfc 100644 --- a/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/models/OAIApiResponse.cpp +++ b/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/models/OAIApiResponse.cpp @@ -13,13 +13,13 @@ #include "OAIApiResponse.h" -#include "OAIHelpers.h" - #include #include #include #include +#include "OAIHelpers.h" + namespace OpenAPI { OAIApiResponse::OAIApiResponse(QString json) { @@ -81,13 +81,13 @@ OAIApiResponse::asJson () const { QJsonObject OAIApiResponse::asJsonObject() const { QJsonObject obj; - if(m_code_isSet){ + if(m_code_isSet){ obj.insert(QString("code"), ::OpenAPI::toJsonValue(code)); } - if(m_type_isSet){ + if(m_type_isSet){ obj.insert(QString("type"), ::OpenAPI::toJsonValue(type)); } - if(m_message_isSet){ + if(m_message_isSet){ obj.insert(QString("message"), ::OpenAPI::toJsonValue(message)); } return obj; diff --git a/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/models/OAIApiResponse.h b/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/models/OAIApiResponse.h index 2fe8209ac10a..7e4d74603831 100644 --- a/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/models/OAIApiResponse.h +++ b/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/models/OAIApiResponse.h @@ -27,6 +27,7 @@ #include "OAIObject.h" #include "OAIEnum.h" + namespace OpenAPI { class OAIApiResponse: public OAIObject { @@ -53,7 +54,7 @@ class OAIApiResponse: public OAIObject { void setMessage(const QString &message); - + virtual bool isSet() const override; virtual bool isValid() const override; diff --git a/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/models/OAICategory.cpp b/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/models/OAICategory.cpp index 752f6bdbba95..571dc37b6fa7 100644 --- a/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/models/OAICategory.cpp +++ b/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/models/OAICategory.cpp @@ -13,13 +13,13 @@ #include "OAICategory.h" -#include "OAIHelpers.h" - #include #include #include #include +#include "OAIHelpers.h" + namespace OpenAPI { OAICategory::OAICategory(QString json) { @@ -75,10 +75,10 @@ OAICategory::asJson () const { QJsonObject OAICategory::asJsonObject() const { QJsonObject obj; - if(m_id_isSet){ + if(m_id_isSet){ obj.insert(QString("id"), ::OpenAPI::toJsonValue(id)); } - if(m_name_isSet){ + if(m_name_isSet){ obj.insert(QString("name"), ::OpenAPI::toJsonValue(name)); } return obj; diff --git a/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/models/OAICategory.h b/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/models/OAICategory.h index 129d97485766..8cfc76f4305c 100644 --- a/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/models/OAICategory.h +++ b/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/models/OAICategory.h @@ -27,6 +27,7 @@ #include "OAIObject.h" #include "OAIEnum.h" + namespace OpenAPI { class OAICategory: public OAIObject { @@ -49,7 +50,7 @@ class OAICategory: public OAIObject { void setName(const QString &name); - + virtual bool isSet() const override; virtual bool isValid() const override; diff --git a/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/models/OAIEnum.h b/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/models/OAIEnum.h index a5e619960fba..66625c43b633 100644 --- a/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/models/OAIEnum.h +++ b/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/models/OAIEnum.h @@ -24,7 +24,7 @@ class OAIEnum { OAIEnum() { } - + OAIEnum(QString jsonString) { fromJson(jsonString); } @@ -57,7 +57,7 @@ class OAIEnum { return true; } private : - QString jstr; + QString jstr; }; } diff --git a/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/models/OAIHelpers.cpp b/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/models/OAIHelpers.cpp index bbe372ea8563..e4138649b5a2 100644 --- a/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/models/OAIHelpers.cpp +++ b/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/models/OAIHelpers.cpp @@ -64,11 +64,23 @@ toStringValue(const double &value){ return QString::number(value); } +QString +toStringValue(const OAIObject &value){ + return value.asJson(); +} + + QString toStringValue(const OAIEnum &value){ return value.asJson(); } +QString +toStringValue(const OAIHttpFileElement &value){ + return value.asJson(); +} + + QJsonValue toJsonValue(const QString &value){ return QJsonValue(value); @@ -124,6 +136,12 @@ toJsonValue(const OAIEnum &value){ return value.asJsonValue(); } +QJsonValue +toJsonValue(const OAIHttpFileElement &value){ + return value.asJsonValue(); +} + + bool fromStringValue(const QString &inStr, QString &value){ value.clear(); @@ -218,6 +236,11 @@ fromStringValue(const QString &inStr, OAIEnum &value){ return true; } +bool +fromStringValue(const QString &inStr, OAIHttpFileElement &value){ + return value.fromStringValue(inStr); +} + bool fromJsonValue(QString &value, const QJsonValue &jval){ bool ok = true; @@ -229,7 +252,7 @@ fromJsonValue(QString &value, const QJsonValue &jval){ } else if(jval.isDouble()){ value = QString::number(jval.toDouble()); } else { - ok = false; + ok = false; } } else { ok = false; @@ -239,7 +262,7 @@ fromJsonValue(QString &value, const QJsonValue &jval){ bool fromJsonValue(QDateTime &value, const QJsonValue &jval){ - bool ok = true; + bool ok = true; if(!jval.isUndefined() && !jval.isNull() && jval.isString()){ value = QDateTime::fromString(jval.toString(), Qt::ISODate); ok = value.isValid(); @@ -263,7 +286,7 @@ fromJsonValue(QByteArray &value, const QJsonValue &jval){ bool fromJsonValue(QDate &value, const QJsonValue &jval){ - bool ok = true; + bool ok = true; if(!jval.isUndefined() && !jval.isNull() && jval.isString()){ value = QDate::fromString(jval.toString(), Qt::ISODate); ok = value.isValid(); @@ -275,7 +298,7 @@ fromJsonValue(QDate &value, const QJsonValue &jval){ bool fromJsonValue(qint32 &value, const QJsonValue &jval){ - bool ok = true; + bool ok = true; if(!jval.isUndefined() && !jval.isNull() && !jval.isObject() && !jval.isArray()){ value = jval.toInt(); } else { @@ -286,7 +309,7 @@ fromJsonValue(qint32 &value, const QJsonValue &jval){ bool fromJsonValue(qint64 &value, const QJsonValue &jval){ - bool ok = true; + bool ok = true; if(!jval.isUndefined() && !jval.isNull() && !jval.isObject() && !jval.isArray()){ value = jval.toVariant().toLongLong(); } else { @@ -297,7 +320,7 @@ fromJsonValue(qint64 &value, const QJsonValue &jval){ bool fromJsonValue(bool &value, const QJsonValue &jval){ - bool ok = true; + bool ok = true; if(jval.isBool()){ value = jval.toBool(); } else { @@ -308,7 +331,7 @@ fromJsonValue(bool &value, const QJsonValue &jval){ bool fromJsonValue(float &value, const QJsonValue &jval){ - bool ok = true; + bool ok = true; if(jval.isDouble()){ value = static_cast(jval.toDouble()); } else { @@ -319,7 +342,7 @@ fromJsonValue(float &value, const QJsonValue &jval){ bool fromJsonValue(double &value, const QJsonValue &jval){ - bool ok = true; + bool ok = true; if(jval.isDouble()){ value = jval.toDouble(); } else { @@ -330,7 +353,7 @@ fromJsonValue(double &value, const QJsonValue &jval){ bool fromJsonValue(OAIObject &value, const QJsonValue &jval){ - bool ok = true; + bool ok = true; if(jval.isObject()){ value.fromJsonObject(jval.toObject()); ok = value.isValid(); @@ -346,4 +369,9 @@ fromJsonValue(OAIEnum &value, const QJsonValue &jval){ return true; } +bool +fromJsonValue(OAIHttpFileElement &value, const QJsonValue &jval){ + return value.fromJsonValue(jval); +} + } diff --git a/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/models/OAIHelpers.h b/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/models/OAIHelpers.h index ce7cec3fc710..a2992183298d 100644 --- a/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/models/OAIHelpers.h +++ b/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/models/OAIHelpers.h @@ -22,8 +22,10 @@ #include #include #include + #include "OAIObject.h" #include "OAIEnum.h" +#include "OAIHttpFileElement.h" namespace OpenAPI { @@ -36,7 +38,9 @@ namespace OpenAPI { QString toStringValue(const bool &value); QString toStringValue(const float &value); QString toStringValue(const double &value); - QString toStringValue(const OAIEnum &value); + QString toStringValue(const OAIObject &value); + QString toStringValue(const OAIEnum &value); + QString toStringValue(const OAIHttpFileElement &value); template QString toStringValue(const QList &val) { @@ -61,6 +65,7 @@ namespace OpenAPI { QJsonValue toJsonValue(const double &value); QJsonValue toJsonValue(const OAIObject &value); QJsonValue toJsonValue(const OAIEnum &value); + QJsonValue toJsonValue(const OAIHttpFileElement &value); template QJsonValue toJsonValue(const QList &val) { @@ -89,7 +94,9 @@ namespace OpenAPI { bool fromStringValue(const QString &inStr, bool &value); bool fromStringValue(const QString &inStr, float &value); bool fromStringValue(const QString &inStr, double &value); - bool fromStringValue(const QString &inStr, OAIEnum &value); + bool fromStringValue(const QString &inStr, OAIObject &value); + bool fromStringValue(const QString &inStr, OAIEnum &value); + bool fromStringValue(const QString &inStr, OAIHttpFileElement &value); template bool fromStringValue(const QList &inStr, QList &val) { @@ -124,6 +131,7 @@ namespace OpenAPI { bool fromJsonValue(double &value, const QJsonValue &jval); bool fromJsonValue(OAIObject &value, const QJsonValue &jval); bool fromJsonValue(OAIEnum &value, const QJsonValue &jval); + bool fromJsonValue(OAIHttpFileElement &value, const QJsonValue &jval); template bool fromJsonValue(QList &val, const QJsonValue &jval) { @@ -138,7 +146,7 @@ namespace OpenAPI { ok = false; } return ok; - } + } template bool fromJsonValue(QMap &val, const QJsonValue &jval) { diff --git a/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/models/OAIHttpFileElement.cpp b/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/models/OAIHttpFileElement.cpp new file mode 100644 index 000000000000..ef627144b1e5 --- /dev/null +++ b/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/models/OAIHttpFileElement.cpp @@ -0,0 +1,162 @@ +/** + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +#include +#include +#include +#include + +#include "OAIHttpFileElement.h" + +namespace OpenAPI { + +void +OAIHttpFileElement::setMimeType(const QString &mime){ + mime_type = mime; +} + +void +OAIHttpFileElement::setFileName(const QString &name){ + local_filename = name; +} + +void +OAIHttpFileElement::setVariableName(const QString &name){ + variable_name = name; +} + +void +OAIHttpFileElement::setRequestFileName(const QString &name){ + request_filename = name; +} + +bool +OAIHttpFileElement::isSet() const { + return !local_filename.isEmpty() || !request_filename.isEmpty(); +} + +QString +OAIHttpFileElement::asJson() const{ + QFile file(local_filename); + QByteArray bArray; + bool result = false; + if(file.exists()) { + result = file.open(QIODevice::ReadOnly); + bArray = file.readAll(); + file.close(); + } + if(!result) { + qDebug() << "Error opening file " << local_filename; + } + return QString(bArray); +} + +QJsonValue +OAIHttpFileElement::asJsonValue() const{ + QFile file(local_filename); + QByteArray bArray; + bool result = false; + if(file.exists()) { + result = file.open(QIODevice::ReadOnly); + bArray = file.readAll(); + file.close(); + } + if(!result) { + qDebug() << "Error opening file " << local_filename; + } + return QJsonDocument::fromBinaryData(bArray.data()).object(); +} + +bool +OAIHttpFileElement::fromStringValue(const QString &instr){ + QFile file(local_filename); + bool result = false; + if(file.exists()) { + file.remove(); + } + result = file.open(QIODevice::WriteOnly); + file.write(instr.toUtf8()); + file.close(); + if(!result) { + qDebug() << "Error creating file " << local_filename; + } + return result; +} + +bool +OAIHttpFileElement::fromJsonValue(const QJsonValue &jval) { + QFile file(local_filename); + bool result = false; + if(file.exists()) { + file.remove(); + } + result = file.open(QIODevice::WriteOnly); + file.write(QJsonDocument(jval.toObject()).toBinaryData()); + file.close(); + if(!result) { + qDebug() << "Error creating file " << local_filename; + } + return result; +} + +QByteArray +OAIHttpFileElement::asByteArray() const { + QFile file(local_filename); + QByteArray bArray; + bool result = false; + if(file.exists()) { + result = file.open(QIODevice::ReadOnly); + bArray = file.readAll(); + file.close(); + } + if(!result) { + qDebug() << "Error opening file " << local_filename; + } + return bArray; +} + +bool +OAIHttpFileElement::fromByteArray(const QByteArray& bytes){ + QFile file(local_filename); + bool result = false; + if(file.exists()){ + file.remove(); + } + result = file.open(QIODevice::WriteOnly); + file.write(bytes); + file.close(); + if(!result) { + qDebug() << "Error creating file " << local_filename; + } + return result; +} + +bool +OAIHttpFileElement::saveToFile(const QString &varName, const QString &localFName, const QString &reqFname, const QString &mime, const QByteArray& bytes){ + setMimeType(mime); + setFileName(localFName); + setVariableName(varName); + setRequestFileName(reqFname); + return fromByteArray(bytes); +} + +QByteArray +OAIHttpFileElement::loadFromFile(const QString &varName, const QString &localFName, const QString &reqFname, const QString &mime){ + setMimeType(mime); + setFileName(localFName); + setVariableName(varName); + setRequestFileName(reqFname); + return asByteArray(); +} + +} diff --git a/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/models/OAIHttpFileElement.h b/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/models/OAIHttpFileElement.h new file mode 100644 index 000000000000..b5d189b3440c --- /dev/null +++ b/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/models/OAIHttpFileElement.h @@ -0,0 +1,49 @@ +/** + * OpenAPI Petstore + * This is a sample server Petstore server. For this sample, you can use the api key `special-key` to test the authorization filters. + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +#ifndef OAI_HTTP_FILE_ELEMENT_H +#define OAI_HTTP_FILE_ELEMENT_H + +#include +#include +#include + + +namespace OpenAPI { + +class OAIHttpFileElement { + +public: + QString variable_name; + QString local_filename; + QString request_filename; + QString mime_type; + void setMimeType(const QString &mime); + void setFileName(const QString &name); + void setVariableName(const QString &name); + void setRequestFileName(const QString &name); + bool isSet() const; + bool fromStringValue(const QString &instr); + bool fromJsonValue(const QJsonValue &jval); + bool fromByteArray(const QByteArray& bytes); + bool saveToFile(const QString &variable_name, const QString &local_filename, const QString &request_filename, const QString &mime, const QByteArray& bytes); + QString asJson() const; + QJsonValue asJsonValue() const; + QByteArray asByteArray() const; + QByteArray loadFromFile(const QString &variable_name, const QString &local_filename, const QString &request_filename, const QString &mime); +}; + +} + +Q_DECLARE_METATYPE(OpenAPI::OAIHttpFileElement) + +#endif // OAI_HTTP_FILE_ELEMENT_H diff --git a/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/models/OAIObject.h b/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/models/OAIObject.h index babc1e64fbbf..83757b567175 100644 --- a/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/models/OAIObject.h +++ b/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/models/OAIObject.h @@ -24,7 +24,7 @@ class OAIObject { OAIObject() { } - + OAIObject(QString jsonString) { fromJson(jsonString); } diff --git a/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/models/OAIOrder.cpp b/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/models/OAIOrder.cpp index 1ea3fba155de..a6f0fb92d97b 100644 --- a/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/models/OAIOrder.cpp +++ b/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/models/OAIOrder.cpp @@ -13,13 +13,13 @@ #include "OAIOrder.h" -#include "OAIHelpers.h" - #include #include #include #include +#include "OAIHelpers.h" + namespace OpenAPI { OAIOrder::OAIOrder(QString json) { @@ -99,22 +99,22 @@ OAIOrder::asJson () const { QJsonObject OAIOrder::asJsonObject() const { QJsonObject obj; - if(m_id_isSet){ + if(m_id_isSet){ obj.insert(QString("id"), ::OpenAPI::toJsonValue(id)); } - if(m_pet_id_isSet){ + if(m_pet_id_isSet){ obj.insert(QString("petId"), ::OpenAPI::toJsonValue(pet_id)); } - if(m_quantity_isSet){ + if(m_quantity_isSet){ obj.insert(QString("quantity"), ::OpenAPI::toJsonValue(quantity)); } - if(m_ship_date_isSet){ + if(m_ship_date_isSet){ obj.insert(QString("shipDate"), ::OpenAPI::toJsonValue(ship_date)); } - if(m_status_isSet){ + if(m_status_isSet){ obj.insert(QString("status"), ::OpenAPI::toJsonValue(status)); } - if(m_complete_isSet){ + if(m_complete_isSet){ obj.insert(QString("complete"), ::OpenAPI::toJsonValue(complete)); } return obj; diff --git a/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/models/OAIOrder.h b/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/models/OAIOrder.h index c9b006d36320..7acf2ab0a32d 100644 --- a/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/models/OAIOrder.h +++ b/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/models/OAIOrder.h @@ -28,6 +28,7 @@ #include "OAIObject.h" #include "OAIEnum.h" + namespace OpenAPI { class OAIOrder: public OAIObject { @@ -66,7 +67,7 @@ class OAIOrder: public OAIObject { void setComplete(const bool &complete); - + virtual bool isSet() const override; virtual bool isValid() const override; diff --git a/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/models/OAIPet.cpp b/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/models/OAIPet.cpp index c611d2d82ab2..8a6cfec0319d 100644 --- a/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/models/OAIPet.cpp +++ b/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/models/OAIPet.cpp @@ -13,13 +13,13 @@ #include "OAIPet.h" -#include "OAIHelpers.h" - #include #include #include #include +#include "OAIHelpers.h" + namespace OpenAPI { OAIPet::OAIPet(QString json) { @@ -99,24 +99,24 @@ OAIPet::asJson () const { QJsonObject OAIPet::asJsonObject() const { QJsonObject obj; - if(m_id_isSet){ + if(m_id_isSet){ obj.insert(QString("id"), ::OpenAPI::toJsonValue(id)); } - if(category.isSet()){ + if(category.isSet()){ obj.insert(QString("category"), ::OpenAPI::toJsonValue(category)); } - if(m_name_isSet){ + if(m_name_isSet){ obj.insert(QString("name"), ::OpenAPI::toJsonValue(name)); } - + if(photo_urls.size() > 0){ obj.insert(QString("photoUrls"), ::OpenAPI::toJsonValue(photo_urls)); } - + if(tags.size() > 0){ obj.insert(QString("tags"), ::OpenAPI::toJsonValue(tags)); } - if(m_status_isSet){ + if(m_status_isSet){ obj.insert(QString("status"), ::OpenAPI::toJsonValue(status)); } return obj; diff --git a/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/models/OAIPet.h b/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/models/OAIPet.h index 6bec604d216c..c2577bfc5a25 100644 --- a/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/models/OAIPet.h +++ b/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/models/OAIPet.h @@ -30,6 +30,7 @@ #include "OAIObject.h" #include "OAIEnum.h" + namespace OpenAPI { class OAIPet: public OAIObject { @@ -68,7 +69,7 @@ class OAIPet: public OAIObject { void setStatus(const QString &status); - + virtual bool isSet() const override; virtual bool isValid() const override; diff --git a/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/models/OAITag.cpp b/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/models/OAITag.cpp index 4cf8d349b452..d986ce63b144 100644 --- a/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/models/OAITag.cpp +++ b/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/models/OAITag.cpp @@ -13,13 +13,13 @@ #include "OAITag.h" -#include "OAIHelpers.h" - #include #include #include #include +#include "OAIHelpers.h" + namespace OpenAPI { OAITag::OAITag(QString json) { @@ -75,10 +75,10 @@ OAITag::asJson () const { QJsonObject OAITag::asJsonObject() const { QJsonObject obj; - if(m_id_isSet){ + if(m_id_isSet){ obj.insert(QString("id"), ::OpenAPI::toJsonValue(id)); } - if(m_name_isSet){ + if(m_name_isSet){ obj.insert(QString("name"), ::OpenAPI::toJsonValue(name)); } return obj; diff --git a/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/models/OAITag.h b/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/models/OAITag.h index 497a021f0858..2c8eb291d0ff 100644 --- a/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/models/OAITag.h +++ b/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/models/OAITag.h @@ -27,6 +27,7 @@ #include "OAIObject.h" #include "OAIEnum.h" + namespace OpenAPI { class OAITag: public OAIObject { @@ -49,7 +50,7 @@ class OAITag: public OAIObject { void setName(const QString &name); - + virtual bool isSet() const override; virtual bool isValid() const override; diff --git a/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/models/OAIUser.cpp b/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/models/OAIUser.cpp index 52431c0367bb..2afe6d808eb4 100644 --- a/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/models/OAIUser.cpp +++ b/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/models/OAIUser.cpp @@ -13,13 +13,13 @@ #include "OAIUser.h" -#include "OAIHelpers.h" - #include #include #include #include +#include "OAIHelpers.h" + namespace OpenAPI { OAIUser::OAIUser(QString json) { @@ -111,28 +111,28 @@ OAIUser::asJson () const { QJsonObject OAIUser::asJsonObject() const { QJsonObject obj; - if(m_id_isSet){ + if(m_id_isSet){ obj.insert(QString("id"), ::OpenAPI::toJsonValue(id)); } - if(m_username_isSet){ + if(m_username_isSet){ obj.insert(QString("username"), ::OpenAPI::toJsonValue(username)); } - if(m_first_name_isSet){ + if(m_first_name_isSet){ obj.insert(QString("firstName"), ::OpenAPI::toJsonValue(first_name)); } - if(m_last_name_isSet){ + if(m_last_name_isSet){ obj.insert(QString("lastName"), ::OpenAPI::toJsonValue(last_name)); } - if(m_email_isSet){ + if(m_email_isSet){ obj.insert(QString("email"), ::OpenAPI::toJsonValue(email)); } - if(m_password_isSet){ + if(m_password_isSet){ obj.insert(QString("password"), ::OpenAPI::toJsonValue(password)); } - if(m_phone_isSet){ + if(m_phone_isSet){ obj.insert(QString("phone"), ::OpenAPI::toJsonValue(phone)); } - if(m_user_status_isSet){ + if(m_user_status_isSet){ obj.insert(QString("userStatus"), ::OpenAPI::toJsonValue(user_status)); } return obj; diff --git a/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/models/OAIUser.h b/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/models/OAIUser.h index 556de322584e..29da83043b6b 100644 --- a/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/models/OAIUser.h +++ b/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/models/OAIUser.h @@ -27,6 +27,7 @@ #include "OAIObject.h" #include "OAIEnum.h" + namespace OpenAPI { class OAIUser: public OAIObject { @@ -73,7 +74,7 @@ class OAIUser: public OAIObject { void setUserStatus(const qint32 &user_status); - + virtual bool isSet() const override; virtual bool isValid() const override; diff --git a/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/requests/OAIPetApiRequest.cpp b/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/requests/OAIPetApiRequest.cpp index 1d4fcfa1634a..d1a62ee04b5e 100644 --- a/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/requests/OAIPetApiRequest.cpp +++ b/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/requests/OAIPetApiRequest.cpp @@ -173,7 +173,7 @@ void OAIPetApiRequest::uploadFileRequest(const QString& pet_idstr){ fromStringValue(pet_idstr, pet_id); QString additional_metadata; - QIODevice* file; + OAIHttpFileElement file; emit uploadFile(pet_id, additional_metadata, file); } diff --git a/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/requests/OAIPetApiRequest.h b/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/requests/OAIPetApiRequest.h index ad53bb80e731..41a0e49e7965 100644 --- a/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/requests/OAIPetApiRequest.h +++ b/samples/server/petstore/cpp-qt5-qhttpengine-server/server/src/requests/OAIPetApiRequest.h @@ -21,8 +21,8 @@ #include #include "OAIApiResponse.h" +#include "OAIHttpFileElement.h" #include "OAIPet.h" -#include #include #include "OAIPetApiHandler.h" @@ -84,7 +84,7 @@ class OAIPetApiRequest : public QObject void getPetById(qint64 pet_id); void updatePet(OAIPet body); void updatePetWithForm(qint64 pet_id, QString name, QString status); - void uploadFile(qint64 pet_id, QString additional_metadata, QIODevice* file); + void uploadFile(qint64 pet_id, QString additional_metadata, OAIHttpFileElement file); private: