diff --git a/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/template/ExprEvaluator.java b/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/template/ExprEvaluator.java new file mode 100644 index 000000000..01074a88d --- /dev/null +++ b/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/template/ExprEvaluator.java @@ -0,0 +1,33 @@ +package io.quarkiverse.openapi.generator.deployment.template; + +import java.util.List; +import java.util.concurrent.ExecutionException; + +import io.quarkus.qute.EvalContext; +import io.quarkus.qute.Expression; + +final class ExprEvaluator { + + private ExprEvaluator() { + } + + @SuppressWarnings("unchecked") + public static T evaluate(EvalContext context, Expression expression) throws ExecutionException, InterruptedException { + return (T) context.evaluate(expression).toCompletableFuture().get(); + } + + @SuppressWarnings("unchecked") + public static T[] evaluate(EvalContext context, List expressions, Class type) + throws ExecutionException, InterruptedException { + T[] results = (T[]) java.lang.reflect.Array.newInstance(type, expressions.size()); + + for (int i = 0; i < expressions.size(); i++) { + Expression expression = expressions.get(i); + T result = type.cast(context.evaluate(expression).toCompletableFuture().get()); + results[i] = result; + } + + return results; + } + +} diff --git a/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/template/OpenApiNamespaceResolver.java b/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/template/OpenApiNamespaceResolver.java index 140ed1bfe..0cb8f2b8b 100644 --- a/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/template/OpenApiNamespaceResolver.java +++ b/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/template/OpenApiNamespaceResolver.java @@ -7,6 +7,8 @@ import java.util.concurrent.CompletionStage; import java.util.concurrent.ExecutionException; +import org.openapitools.codegen.model.OperationMap; + import io.quarkiverse.openapi.generator.deployment.codegen.OpenApiGeneratorOutputPaths; import io.quarkus.qute.EvalContext; import io.quarkus.qute.Expression; @@ -18,9 +20,8 @@ * implement and use them. */ public class OpenApiNamespaceResolver implements NamespaceResolver { - private static final String GENERATE_DEPRECATED_PROP = "generateDeprecated"; - static final OpenApiNamespaceResolver INSTANCE = new OpenApiNamespaceResolver(); + private static final String GENERATE_DEPRECATED_PROP = "generateDeprecated"; private OpenApiNamespaceResolver() { } @@ -53,6 +54,10 @@ public String parseUri(String uri) { return OpenApiGeneratorOutputPaths.getRelativePath(Path.of(uri)).toString().replace(File.separatorChar, '/'); } + public boolean hasAuthMethods(OperationMap operations) { + return operations != null && operations.getOperation().stream().anyMatch(operation -> operation.hasAuthMethods); + } + @Override public CompletionStage resolve(EvalContext context) { try { diff --git a/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/template/QuteTemplatingEngineAdapter.java b/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/template/QuteTemplatingEngineAdapter.java index 5498f8543..4a27a6fe8 100644 --- a/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/template/QuteTemplatingEngineAdapter.java +++ b/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/template/QuteTemplatingEngineAdapter.java @@ -42,8 +42,9 @@ public QuteTemplatingEngineAdapter() { .addDefaults() .addValueResolver(new ReflectionValueResolver()) .addNamespaceResolver(OpenApiNamespaceResolver.INSTANCE) + .addNamespaceResolver(StrNamespaceResolver.INSTANCE) .removeStandaloneLines(true) - .strictRendering(false) + .strictRendering(true) .build(); } diff --git a/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/template/StrNamespaceResolver.java b/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/template/StrNamespaceResolver.java new file mode 100644 index 000000000..86ee7873b --- /dev/null +++ b/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/template/StrNamespaceResolver.java @@ -0,0 +1,58 @@ +package io.quarkiverse.openapi.generator.deployment.template; + +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.CompletionStage; + +import io.quarkus.qute.EvalContext; +import io.quarkus.qute.NamespaceResolver; + +/** + * Namespace resolver to mimic the function of io.quarkus.qute.runtime.extensions.StringTemplateExtensions. + * This extension is built-in with Qute when used in a context with Quarkus DI. + * Since these extensions are built in build time by Qute we can't use them because our process also runs in build time without + * a CDI context. + * So any namespace resolver auto-generated by Quarkus won't be added to our engine. + * + * @see Template Extension Methods + */ +public class StrNamespaceResolver implements NamespaceResolver { + + static final StrNamespaceResolver INSTANCE = new StrNamespaceResolver(); + + private StrNamespaceResolver() { + } + + @Override + public String getNamespace() { + return "str"; + } + + /** + * @see io.quarkus.qute.runtime.extensions.StringTemplateExtensions#fmt(String, String, Object...) + */ + public String fmt(String format, Object... args) { + return String.format(format, args); + } + + @Override + public CompletionStage resolve(EvalContext context) { + switch (context.getName()) { + case "fmt": + if (context.getParams().size() < 2) { + throw new IllegalArgumentException( + "Missing required parameter for 'fmt'. Make sure that the function has at least two parameters"); + } + try { + return CompletableFuture.completedFuture( + fmt(ExprEvaluator.evaluate(context, context.getParams().get(0)), + ExprEvaluator.evaluate(context, context.getParams().subList(1, context.getParams().size()), + Object.class))); + } catch (Exception e) { + throw new RuntimeException(e); + } + default: + throw new IllegalArgumentException("There's no method named '" + context.getName() + "'"); + } + } + +} diff --git a/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/wrapper/OpenApiClientGeneratorWrapper.java b/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/wrapper/OpenApiClientGeneratorWrapper.java index f7aa635c0..e8cb162df 100644 --- a/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/wrapper/OpenApiClientGeneratorWrapper.java +++ b/client/deployment/src/main/java/io/quarkiverse/openapi/generator/deployment/wrapper/OpenApiClientGeneratorWrapper.java @@ -33,17 +33,14 @@ public abstract class OpenApiClientGeneratorWrapper { public static final String VERBOSE = "verbose"; - private static final String ONCE_LOGGER = "org.openapitools.codegen.utils.oncelogger.enabled"; /** * Security scheme for which to apply security constraints even if the OpenAPI definition has no security definition */ public static final String DEFAULT_SECURITY_SCHEME = "defaultSecurityScheme"; public static final String SUPPORTS_ADDITIONAL_PROPERTIES_AS_ATTRIBUTE = "supportsAdditionalPropertiesWithComposedSchema"; - private static final Map defaultTypeMappings = Map.of( - "date", "LocalDate", - "DateTime", "OffsetDateTime"); - private static final Map defaultImportMappings = Map.of( - "LocalDate", "java.time.LocalDate", + private static final String ONCE_LOGGER = "org.openapitools.codegen.utils.oncelogger.enabled"; + private static final Map defaultTypeMappings = Map.of("date", "LocalDate", "DateTime", "OffsetDateTime"); + private static final Map defaultImportMappings = Map.of("LocalDate", "java.time.LocalDate", "OffsetDateTime", "java.time.OffsetDateTime"); private final QuarkusCodegenConfigurator configurator; private final DefaultGenerator generator; @@ -53,8 +50,8 @@ public abstract class OpenApiClientGeneratorWrapper { private String modelPackage = ""; OpenApiClientGeneratorWrapper(final QuarkusCodegenConfigurator configurator, final Path specFilePath, final Path outputDir, - final boolean verbose, - final boolean validateSpec) { + final boolean verbose, final boolean validateSpec) { + // do not generate docs nor tests GlobalSettings.setProperty(CodegenConstants.API_DOCS, FALSE.toString()); GlobalSettings.setProperty(CodegenConstants.API_TESTS, FALSE.toString()); @@ -78,17 +75,44 @@ public abstract class OpenApiClientGeneratorWrapper { defaultTypeMappings.forEach(this.configurator::addTypeMapping); defaultImportMappings.forEach(this.configurator::addImportMapping); - this.generator = new DefaultGenerator(); - } + this.setDefaults(); - public OpenApiClientGeneratorWrapper withApiPackage(final String pkg) { - this.apiPackage = pkg; - return this; + this.generator = new DefaultGenerator(); } - public OpenApiClientGeneratorWrapper withModelPackage(final String pkg) { - this.modelPackage = pkg; - return this; + /** + * A few properties from the "with*" methods must be injected in the Qute context by default since we turned strict model + * rendering. + * This way we avoid side effects in the model such as "NOT_FOUND" strings printed everywhere. + * + * @see Qute - Configuration Reference + */ + private void setDefaults() { + // Set default values directly here + this.configurator.addAdditionalProperty("additionalApiTypeAnnotations", new String[0]); + this.configurator.addAdditionalProperty("additionalPropertiesAsAttribute", FALSE); + this.configurator.addAdditionalProperty("additionalEnumTypeUnexpectedMember", FALSE); + this.configurator.addAdditionalProperty("additionalEnumTypeUnexpectedMemberName", ""); + this.configurator.addAdditionalProperty("additionalEnumTypeUnexpectedMemberStringValue", ""); + this.configurator.addAdditionalProperty("additionalRequestArgs", new String[0]); + this.configurator.addAdditionalProperty("classes-codegen", new HashMap<>()); + this.configurator.addAdditionalProperty("circuit-breaker", new HashMap<>()); + this.configurator.addAdditionalProperty("configKey", ""); + this.configurator.addAdditionalProperty("datatypeWithEnum", ""); + this.configurator.addAdditionalProperty("enable-security-generation", TRUE); + this.configurator.addAdditionalProperty("generate-part-filename", FALSE); + this.configurator.addAdditionalProperty("mutiny", FALSE); + this.configurator.addAdditionalProperty("mutiny-operation-ids", new HashMap<>()); + this.configurator.addAdditionalProperty("mutiny-return-response", FALSE); + this.configurator.addAdditionalProperty("part-filename-value", ""); + this.configurator.addAdditionalProperty("return-response", FALSE); + this.configurator.addAdditionalProperty("skipFormModel", TRUE); + this.configurator.addAdditionalProperty("templateDir", ""); + this.configurator.addAdditionalProperty("use-bean-validation", FALSE); + this.configurator.addAdditionalProperty("use-field-name-in-part-filename", FALSE); + this.configurator.addAdditionalProperty("verbose", FALSE); + // TODO: expose as properties https://github.com/quarkiverse/quarkus-openapi-generator/issues/869 + this.configurator.addAdditionalProperty(CodegenConstants.SERIALIZABLE_MODEL, FALSE); } /** @@ -98,30 +122,30 @@ public OpenApiClientGeneratorWrapper withModelPackage(final String pkg) { * @return this wrapper */ public OpenApiClientGeneratorWrapper withCircuitBreakerConfig(final Map> config) { - if (config != null) { - configurator.addAdditionalProperty("circuit-breaker", config); - } + Optional.ofNullable(config).ifPresent(cfg -> { + this.configurator.addAdditionalProperty("circuit-breaker", config); + }); return this; } public OpenApiClientGeneratorWrapper withClassesCodeGenConfig(final Map config) { - if (config != null) { - configurator.addAdditionalProperty("classes-codegen", config); - } + Optional.ofNullable(config).ifPresent(cfg -> { + this.configurator.addAdditionalProperty("classes-codegen", cfg); + }); return this; } public OpenApiClientGeneratorWrapper withMutiny(final Boolean config) { - if (config != null) { - configurator.addAdditionalProperty("mutiny", config); - } + Optional.ofNullable(config).ifPresent(cfg -> { + this.configurator.addAdditionalProperty("mutiny", cfg); + }); return this; } public OpenApiClientGeneratorWrapper withMutinyReturnResponse(final Boolean config) { - if (config != null) { - configurator.addAdditionalProperty("mutiny-return-response", config); - } + Optional.ofNullable(config).ifPresent(cfg -> { + this.configurator.addAdditionalProperty("mutiny-return-response", cfg); + }); return this; } @@ -209,16 +233,16 @@ public OpenApiClientGeneratorWrapper withAdditionalEnumTypeUnexpectedMemberStrin * @return this wrapper */ public OpenApiClientGeneratorWrapper withAdditionalApiTypeAnnotationsConfig(final String additionalApiTypeAnnotations) { - if (additionalApiTypeAnnotations != null) { + Optional.ofNullable(additionalApiTypeAnnotations).ifPresent(cfg -> { this.configurator.addAdditionalProperty("additionalApiTypeAnnotations", additionalApiTypeAnnotations.split(";")); - } + }); return this; } public OpenApiClientGeneratorWrapper withAdditionalRequestArgs(final String additionalRequestArgs) { - if (additionalRequestArgs != null) { + Optional.ofNullable(additionalRequestArgs).ifPresent(cfg -> { this.configurator.addAdditionalProperty("additionalRequestArgs", additionalRequestArgs.split(";")); - } + }); return this; } @@ -261,6 +285,12 @@ public OpenApiClientGeneratorWrapper withModelNamePrefix(final String modelNameP return this; } + /** + * Main entrypoint, or where to generate the files based on the given base package. + * + * @param basePackage Java package name, e.g. org.acme + * @return a list of generated files + */ public List generate(final String basePackage) { this.basePackage = basePackage; this.consolidatePackageNames(); diff --git a/client/deployment/src/main/resources/templates/libraries/microprofile/additionalEnumTypeUnexpectedMember.qute b/client/deployment/src/main/resources/templates/libraries/microprofile/additionalEnumTypeUnexpectedMember.qute index d130f7d41..9aa8cf918 100644 --- a/client/deployment/src/main/resources/templates/libraries/microprofile/additionalEnumTypeUnexpectedMember.qute +++ b/client/deployment/src/main/resources/templates/libraries/microprofile/additionalEnumTypeUnexpectedMember.qute @@ -2,4 +2,4 @@ * Special value if the API response contains some new value not declared in this enum. * You should react accordingly. */ -{additionalEnumTypeUnexpectedMemberName}({#if e.isContainer}{e.items.dataType}{#else}{e.dataType}{/if}.valueOf("{additionalEnumTypeUnexpectedMemberStringValue}")){#if e.allowableValues},{/if} +{additionalEnumTypeUnexpectedMemberName}({#if e.isContainer.or(false)}{e.items.dataType}{#else}{e.dataType}{/if}.valueOf("{additionalEnumTypeUnexpectedMemberStringValue}")){#if e.allowableValues},{/if} diff --git a/client/deployment/src/main/resources/templates/libraries/microprofile/api.qute b/client/deployment/src/main/resources/templates/libraries/microprofile/api.qute index 738a52b08..d315a412a 100644 --- a/client/deployment/src/main/resources/templates/libraries/microprofile/api.qute +++ b/client/deployment/src/main/resources/templates/libraries/microprofile/api.qute @@ -17,10 +17,10 @@ import {imp.import}; * {#if appDescription}

{appDescription}

{/if} */ {/if} -@jakarta.ws.rs.Path("{#if useAnnotatedBasePath}{contextPath}{/if}{commonPath}") -@org.eclipse.microprofile.rest.client.inject.RegisterRestClient({#if defaultServerUrl}baseUri="{defaultServerUrl}",{/if} configKey="{configKey}") +@jakarta.ws.rs.Path("{#if useAnnotatedBasePath.or(false)}{contextPath}{/if}{commonPath}") +@org.eclipse.microprofile.rest.client.inject.RegisterRestClient({#if !defaultServerUrl.or('') == ''}baseUri="{defaultServerUrl}", {/if}configKey="{configKey}") @io.quarkiverse.openapi.generator.annotations.GeneratedClass(value="{openapi:parseUri(inputSpec)}", tag = "{baseName}") -{#if enable-security-generation && hasAuthMethods} +{#if enable-security-generation && openapi:hasAuthMethods(operations) } @org.eclipse.microprofile.rest.client.annotation.RegisterProvider({package}.auth.CompositeAuthenticationProvider.class) @org.eclipse.microprofile.rest.client.annotation.RegisterClientHeaders({package}.auth.AuthenticationPropagationHeadersFactory.class) {/if} @@ -53,7 +53,7 @@ public interface {classname} { @jakarta.ws.rs.Produces(\{{#for produce in op.produces}"{produce.mediaType}"{#if produce_hasNext}, {/if}{/for}\}) {/if} @io.quarkiverse.openapi.generator.annotations.GeneratedMethod("{op.operationIdOriginal}") - {#for cbClassConfig in circuit-breaker.orEmpty}{#if cbClassConfig.key == package + classname} + {#for cbClassConfig in circuit-breaker.orEmpty}{#if cbClassConfig.key == str:fmt("%s.%s", package, classname)} {#for cbMethod in cbClassConfig.value.orEmpty}{#if cbMethod == op.nickname} @org.eclipse.microprofile.faulttolerance.CircuitBreaker {/if}{/for} @@ -138,13 +138,13 @@ public interface {classname} { {#for p in op.pathParams}@jakarta.validation.Valid {#include pathParams.qute param=p/}{#if p_hasNext}, {/if}{/for}{#if op.hasQueryParams},{/if} {#for p in op.queryParams}@jakarta.validation.Valid {#include queryParams.qute param=p/}{#if p_hasNext}, {/if}{/for}{#if op.hasCookieParams},{/if} {#for p in op.cookieParams}@jakarta.validation.Valid {#include cookieParams.qute param=p/}{#if p_hasNext}, {/if}{/for}{#if op.hasHeaderParams},{/if} - {#for p in op.headerParams}@jakarta.validation.Valid {#include headerParams.qute param=p/}{#if p_hasNext}, {/if}{/for}{#if op.hasBodyParams}, + {#for p in op.headerParams}@jakarta.validation.Valid {#include headerParams.qute param=p/}{#if p_hasNext}, {/if}{/for}{#if op.hasBodyParam}, {#for p in op.bodyParams}@jakarta.validation.Valid {#include bodyParams.qute param=p/}{#if p_hasNext}, {/if}{/for}{/if} {#else} {#for p in op.pathParams}{#include pathParams.qute param=p/}{#if p_hasNext}, {/if}{/for}{#if op.hasQueryParams},{/if} {#for p in op.queryParams}{#include queryParams.qute param=p/}{#if p_hasNext}, {/if}{/for}{#if op.hasCookieParams},{/if} {#for p in op.cookieParams}{#include cookieParams.qute param=p/}{#if p_hasNext}, {/if}{/for}{#if op.hasHeaderParams},{/if} - {#for p in op.headerParams}{#include headerParams.qute param=p/}{#if p_hasNext}, {/if}{/for}{#if op.hasBodyParams},{/if} + {#for p in op.headerParams}{#include headerParams.qute param=p/}{#if p_hasNext}, {/if}{/for}{#if op.hasBodyParam},{/if} {#for p in op.bodyParams}{#include bodyParams.qute param=p/}{#if p_hasNext}, {/if}{/for} {/if} {#else} diff --git a/client/deployment/src/main/resources/templates/libraries/microprofile/enumClass.qute b/client/deployment/src/main/resources/templates/libraries/microprofile/enumClass.qute index 75a41699b..45f921047 100644 --- a/client/deployment/src/main/resources/templates/libraries/microprofile/enumClass.qute +++ b/client/deployment/src/main/resources/templates/libraries/microprofile/enumClass.qute @@ -1,16 +1,8 @@ -{#if e.withXml} - @jakarta.xml.bind.annotation.XmlType(name={#if e.isEnum}"{e.items.enumName}"{#else}"{e.enumName}"{/if}) - @akarta.xml.bind.annotation.XmlEnum({#if e.isEnum}{e.items.dataType}{#else}{e.dataType}{/if}.class) -{/if} {#include additionalEnumTypeAnnotations.qute e=e /}public enum {e.enumName} { {#if e.allowableValues} {#if additionalEnumTypeUnexpectedMember}{#include additionalEnumTypeUnexpectedMember.qute e=e/}{/if} - {#if e.withXml} - {#for v in e.allowableValues.enumVars}@XmlEnumValue({#if v.isInteger || v.isDouble || v.isLong || v.isFloat}"{/if}{v.value}{#if v.isInteger || v.isDouble || v.isLong || v.isFloat}"{/if}) {v.name}({#if e.isEnum}{e.items.dataType}{#else}{e.dataType}{/if}.valueOf({v.value})){#if v_hasNext}, {#else}; {/if}{/for} - {#else} {#for v in e.allowableValues.enumVars}{v.name}({#if eq e.isNumeric}{v.value}{#else}{#if e.isContainer}{e.items.dataType}{#else}{e.dataType}{/if}.valueOf({v.value}){/if}){#if v_hasNext}, {#else};{/if}{/for} {/if} - {/if} // caching enum access private static final java.util.EnumSet<{e.enumName}> values = java.util.EnumSet.allOf({e.enumName}.class); @@ -38,6 +30,6 @@ return b; } } - {#if e.useNullForUnknownEnumValue}return null;{#else if additionalEnumTypeUnexpectedMember}return {additionalEnumTypeUnexpectedMemberName};{#else}throw new IllegalArgumentException("Unexpected value '" + v + "'");{/if} + {#if e.isNullable}return null;{#else if additionalEnumTypeUnexpectedMember}return {additionalEnumTypeUnexpectedMemberName};{#else}throw new IllegalArgumentException("Unexpected value '" + v + "'");{/if} } } diff --git a/client/deployment/src/main/resources/templates/libraries/microprofile/enumOuterClass.qute b/client/deployment/src/main/resources/templates/libraries/microprofile/enumOuterClass.qute index c47e1944a..d5f1dbecb 100644 --- a/client/deployment/src/main/resources/templates/libraries/microprofile/enumOuterClass.qute +++ b/client/deployment/src/main/resources/templates/libraries/microprofile/enumOuterClass.qute @@ -1,25 +1,25 @@ /** - * {#insert e.description}Gets or Sets {e.name}{/}{#if e.description}{description}{/} + * {#insert e.description}Gets or Sets {e.name}{/}{#if e.description}{e.description}{/} */ @com.fasterxml.jackson.annotation.JsonIgnoreProperties(ignoreUnknown = true) -{#include additionalEnumTypeAnnotations.qute e=e/}public enum {#if e.datatypeWithEnum}{e.datatypeWithEnum}{#else}{e.classname}{/if} { +{#include additionalEnumTypeAnnotations.qute e=e/}public enum {#if e.datatypeWithEnum.or(false)}{e.datatypeWithEnum}{#else}{e.classname}{/if} { {#if e.allowableValues} {#if additionalEnumTypeUnexpectedMember}{#include additionalEnumTypeUnexpectedMember.qute e=e/}{/if} {#for v in e.allowableValues.enumVars}{v.name}({e.dataType}.valueOf({v.value})){#if v_hasNext}, {#else};{/if}{/for} {/if} // caching enum access - private static final java.util.EnumSet<{#if e.datatypeWithEnum}{e.datatypeWithEnum}{#else}{e.classname}{/if}> values = java.util.EnumSet.allOf({#if e.datatypeWithEnum}{e.datatypeWithEnum}{#else}{e.classname}{/if}.class); + private static final java.util.EnumSet<{#if e.datatypeWithEnum.or(false)}{e.datatypeWithEnum}{#else}{e.classname}{/if}> values = java.util.EnumSet.allOf({#if e.datatypeWithEnum.or(false)}{e.datatypeWithEnum}{#else}{e.classname}{/if}.class); private {e.dataType} value; - {#if e.datatypeWithEnum}{e.datatypeWithEnum}{#else}{e.classname}{/if}({e.dataType} value){ + {#if e.datatypeWithEnum.or(false)}{e.datatypeWithEnum}{#else}{e.classname}{/if}({e.dataType} value){ this.value = value; } @com.fasterxml.jackson.annotation.JsonValue - public {#if e.isContainer}{e.items.dataType}{#else}{e.dataType}{/if} value() { + public {#if e.isContainer.or(false)}{e.items.dataType}{#else}{e.dataType}{/if} value() { return value; } @@ -29,12 +29,12 @@ } @com.fasterxml.jackson.annotation.JsonCreator - public static {#if e.datatypeWithEnum}{e.datatypeWithEnum}{#else}{e.classname}{/if} fromString(String text) { - for ({#if e.datatypeWithEnum}{e.datatypeWithEnum}{#else}{e.classname}{/if} b : values) { + public static {#if e.datatypeWithEnum.or(false)}{e.datatypeWithEnum}{#else}{e.classname}{/if} fromString(String text) { + for ({#if e.datatypeWithEnum.or(false)}{e.datatypeWithEnum}{#else}{e.classname}{/if} b : values) { if (String.valueOf(b.value).equalsIgnoreCase(text)) { return b; } } - {#if e.useNullForUnknownEnumValue}return null;{#else if additionalEnumTypeUnexpectedMember}return {additionalEnumTypeUnexpectedMemberName};{#else}throw new IllegalArgumentException("Unexpected value '" + text + "'");{/if} + {#if e.isNullable}return null;{#else if additionalEnumTypeUnexpectedMember}return {additionalEnumTypeUnexpectedMemberName};{#else}throw new IllegalArgumentException("Unexpected value '" + text + "'");{/if} } } diff --git a/client/deployment/src/main/resources/templates/libraries/microprofile/model.qute b/client/deployment/src/main/resources/templates/libraries/microprofile/model.qute index 7b266fdc1..437740b5a 100644 --- a/client/deployment/src/main/resources/templates/libraries/microprofile/model.qute +++ b/client/deployment/src/main/resources/templates/libraries/microprofile/model.qute @@ -17,5 +17,5 @@ import com.fasterxml.jackson.annotation.JsonIgnoreProperties; {#for m in models} {#if m.model.isEnum}{#include enumOuterClass.qute e=m.model/} -{#else}{#include pojo.qute m=m.model withXml=withXml codegen=classes-codegen package=modelPackage/}{/if} +{#else}{#include pojo.qute m=m.model codegen=classes-codegen package=modelPackage/}{/if} {/for} \ No newline at end of file diff --git a/client/deployment/src/main/resources/templates/libraries/microprofile/pojo.qute b/client/deployment/src/main/resources/templates/libraries/microprofile/pojo.qute index a8662e818..ae5542c1e 100644 --- a/client/deployment/src/main/resources/templates/libraries/microprofile/pojo.qute +++ b/client/deployment/src/main/resources/templates/libraries/microprofile/pojo.qute @@ -1,35 +1,27 @@ {@org.openapitools.codegen.CodegenModel m} -{#if withXml} -{#else} import com.fasterxml.jackson.annotation.JsonProperty; -{/if} {#if m.description} /** * {m.description} **/ {/if} -{#if withXml} -@jakarta.xml.bind.annotation.XmlAccessorType(jakarta.xml.bind.annotation.XmlAccessType.FIELD) -{#if m.hasVars}@jakarta.xml.bind.annotation.XmlType(name = "{m.classname}", propOrder = - { {#for var in m.vars}"{var.name}"{#if var_hasNext}, {/if}{/for} -}){#else} -@jakarta.xml.bind.annotation.XmlType(name = "{m.classname}") -{/if} -{#if !m.parent || m.parent.isEmpty}@jakarta.xml.bind.annotation.XmlRootElement(name = "{m.classname}"){/if} -{#else} -@com.fasterxml.jackson.annotation.JsonIgnoreProperties(ignoreUnknown = true) -{/if} {#include additionalModelTypeAnnotations.qute m=m/} {#if m.discriminator && m.discriminator.mappedModels && !m.discriminator.mappedModels.empty} -@com.fasterxml.jackson.annotation.JsonTypeInfo(use = com.fasterxml.jackson.annotation.JsonTypeInfo.Id.NAME, include = com.fasterxml.jackson.annotation.JsonTypeInfo.As.EXISTING_PROPERTY, property = "{m.discriminator.propertyBaseName}") +@com.fasterxml.jackson.annotation.JsonIgnoreProperties( + value = "{m.discriminator.propertyBaseName}", // ignore manually set {m.discriminator.propertyBaseName}, it will be automatically generated by Jackson during serialization + allowSetters = true // allows the {m.discriminator.propertyBaseName} to be set during deserialization +) +@com.fasterxml.jackson.annotation.JsonTypeInfo(use = com.fasterxml.jackson.annotation.JsonTypeInfo.Id.NAME, include = com.fasterxml.jackson.annotation.JsonTypeInfo.As.PROPERTY, property = "{m.discriminator.propertyBaseName}", visible = true) @com.fasterxml.jackson.annotation.JsonSubTypes({ {#for child in m.discriminator.mappedModels} - @com.fasterxml.jackson.annotation.JsonSubTypes.Type(value = {child.model.classname}.class, name = "{child.mappingName}"), + @com.fasterxml.jackson.annotation.JsonSubTypes.Type(value = {child.modelName}.class, name = "{#if m.vendorExtensions.x-discriminator-value.or('') == ''}{child.mappingName}{#else}{m.vendorExtensions.x-discriminator-value}{/if}"), {/for} }) +{#else} +@com.fasterxml.jackson.annotation.JsonIgnoreProperties(ignoreUnknown = true) {/if} -public class {m.classname} {#if m.parent}extends {m.parent}{/if}{#if m.serializableModel} implements java.io.Serializable{/if} { +public class {m.classname} {#if m.parent}extends {m.parent}{/if}{#if serializableModel} implements java.io.Serializable{/if} { {#for v in m.vars} {#if !v.deprecated || openapi:genDeprecatedModelAttr(package, m.classname, codegen)} @@ -40,9 +32,6 @@ public class {m.classname} {#if m.parent}extends {m.parent}{/if}{#if m.serializa {#include enumClass.qute e=v/}{/if} {/if} - {#if withXml} - @jakarta.xml.bind.annotation.XmlElement(name="{v.basename}"{#if v.required}, required = {v.required}{/if}) - {/if} {#if v.description} /** * {v.description} @@ -73,12 +62,10 @@ public class {m.classname} {#if m.parent}extends {m.parent}{/if}{#if m.serializa {/if} * @return {v.name} **/ - {#if !withXml} @JsonProperty("{v.baseName}") {#if !v.required} @com.fasterxml.jackson.annotation.JsonInclude(com.fasterxml.jackson.annotation.JsonInclude.Include.NON_NULL) {/if} - {/if} {#for ext in v.vendorExtensions.x-extra-annotation.orEmpty} {ext} {/for} @@ -128,7 +115,7 @@ public class {m.classname} {#if m.parent}extends {m.parent}{/if}{#if m.serializa {/if} {/for} - {#include pojoAdditionalProperties.qute m=m.model additionalPropertiesAsAttribute=additionalPropertiesAsAttribute /} + {#include pojoAdditionalProperties.qute m=m additionalPropertiesAsAttribute=additionalPropertiesAsAttribute /} /** * Create a string representation of this pojo. **/ @@ -159,5 +146,5 @@ public class {m.classname} {#if m.parent}extends {m.parent}{/if}{#if m.serializa return o.toString().replace("\n", "\n "); } - {#include pojoQueryParam.qute m=m.model withXml=withXml codegen=classes-codegen package=modelPackage/} + {#include pojoQueryParam.qute m=m codegen=classes-codegen package=modelPackage/} } diff --git a/client/deployment/src/main/resources/templates/libraries/microprofile/pojoQueryParam.qute b/client/deployment/src/main/resources/templates/libraries/microprofile/pojoQueryParam.qute index 26ef23f25..cb0ccd9ee 100644 --- a/client/deployment/src/main/resources/templates/libraries/microprofile/pojoQueryParam.qute +++ b/client/deployment/src/main/resources/templates/libraries/microprofile/pojoQueryParam.qute @@ -3,19 +3,9 @@ * {m.description} **/ {/if} - {#if withXml} - @jakarta.xml.bind.annotation.XmlAccessorType(jakarta.xml.bind.annotation.XmlType.XmlAccessType.FIELD) - {#if m.hasVars}@jakarta.xml.bind.annotation.XmlType(name = "{m.classname}", propOrder = - { {#for var in m.vars}"{var.name}"{#if var_hasNext}, {/if}{/for} - }){#else} - @jakarta.xml.bind.annotation.XmlType(name = "{m.classname}") - {/if} - {#if !m.parent || m.parent.isEmpty}@jakarta.xml.bind.annotation.XmlRootElement(name = "{m.classname}"){/if} - {#else} @com.fasterxml.jackson.annotation.JsonIgnoreProperties(ignoreUnknown = true) - {/if} {#include additionalModelTypeAnnotations.qute m=m/} - public static class {m.classname}QueryParam {#if m.parent}extends {m.parent}{/if}{#if m.serializableModel} implements java.io.Serializable{/if} { + public static class {m.classname}QueryParam {#if m.parent}extends {m.parent}{/if}{#if serializableModel} implements java.io.Serializable{/if} { {#for v in m.vars} {#if !v.deprecated || openapi:genDeprecatedModelAttr(package, m.classname, codegen)} @@ -26,9 +16,6 @@ {#include enumClass.qute e=v/}{/if} {/if} - {#if withXml} - @jakarta.xml.bind.annotation.XmlType.XmlElement(name="{v.basename}"{#if v.required}, required = {v.required}{/if}) - {/if} {#if m.description} /** * {m.description} @@ -41,7 +28,7 @@ {#include beanValidation.qute p=v/} {/if} {#if v.isContainer} - private {v.datatypeWithEnum} {v.name}{#if v.required&&v.defaultValue} = {v.defaultValue}{#else} = null{/if}; + private {v.datatypeWithEnum} {v.name}{#if v.required && v.defaultValue} = {v.defaultValue}{#else} = null{/if}; {#else} private {v.datatypeWithEnum} {v.name}{#if v.defaultValue} = {v.defaultValue}{/if}; {/if} @@ -64,9 +51,7 @@ {/if} * @return {v.name} **/ - {#if !withXml} @com.fasterxml.jackson.annotation.JsonProperty("{v.baseName}") - {/if} {#for ext in v.vendorExtensions.x-extra-annotation.orEmpty} {ext} {/for} diff --git a/client/deployment/src/test/java/io/quarkiverse/openapi/generator/deployment/authentication/OpenApiSpecProviderTest.java b/client/deployment/src/test/java/io/quarkiverse/openapi/generator/deployment/authentication/OpenApiSpecProviderTest.java index cf3e03c4f..2c13db0dd 100644 --- a/client/deployment/src/test/java/io/quarkiverse/openapi/generator/deployment/authentication/OpenApiSpecProviderTest.java +++ b/client/deployment/src/test/java/io/quarkiverse/openapi/generator/deployment/authentication/OpenApiSpecProviderTest.java @@ -35,6 +35,7 @@ public class OpenApiSpecProviderTest { quarkus.oidc-client.oauth_auth.auth-server-url=localhost quarkus.oidc-client.oauth_auth1.auth-server-url=localhost quarkus.oidc-client.oauth_auth2.auth-server-url=localhost + quarkus.keycloak.devservices.enabled=false """), "application.properties")); diff --git a/client/deployment/src/test/java/io/quarkiverse/openapi/generator/deployment/authentication/OperationTest.java b/client/deployment/src/test/java/io/quarkiverse/openapi/generator/deployment/authentication/OperationTest.java index ea2f7e4fa..f9a330c1f 100644 --- a/client/deployment/src/test/java/io/quarkiverse/openapi/generator/deployment/authentication/OperationTest.java +++ b/client/deployment/src/test/java/io/quarkiverse/openapi/generator/deployment/authentication/OperationTest.java @@ -32,7 +32,10 @@ public class OperationTest { .addClass(PetApi.class) .addClass(LocalAuthenticationProvider.class) .addAsResource( - new StringAsset("quarkus.oidc-client.oauth_auth.auth-server-url=localhost\n"), + new StringAsset(""" + quarkus.oidc-client.oauth_auth.auth-server-url=localhost + quarkus.keycloak.devservices.enabled=false + """), "application.properties")); @Inject diff --git a/client/deployment/src/test/java/io/quarkiverse/openapi/generator/deployment/wrapper/OpenApiClientGeneratorWrapperTest.java b/client/deployment/src/test/java/io/quarkiverse/openapi/generator/deployment/wrapper/OpenApiClientGeneratorWrapperTest.java index 2a80f9ec2..248ef41f5 100644 --- a/client/deployment/src/test/java/io/quarkiverse/openapi/generator/deployment/wrapper/OpenApiClientGeneratorWrapperTest.java +++ b/client/deployment/src/test/java/io/quarkiverse/openapi/generator/deployment/wrapper/OpenApiClientGeneratorWrapperTest.java @@ -45,6 +45,29 @@ public class OpenApiClientGeneratorWrapperTest { + private static Optional getMethodDeclarationByIdentifier(List methodDeclarations, + String methodName) { + return methodDeclarations.stream().filter(md -> md.getName().getIdentifier().equals(methodName)).findAny(); + } + + @Test + void verifyDiscriminatorGeneration() throws java.net.URISyntaxException, FileNotFoundException { + OpenApiClientGeneratorWrapper generatorWrapper = createGeneratorWrapper("issue-852.json"); + final List generatedFiles = generatorWrapper.generate("org.issue852"); + + assertNotNull(generatedFiles); + assertFalse(generatedFiles.isEmpty()); + + final Optional classWithDiscriminator = generatedFiles.stream() + .filter(f -> f.getName().endsWith("PostRevisionForDocumentRequest.java")).findFirst(); + assertThat(classWithDiscriminator).isPresent(); + + final CompilationUnit compilationUnit = StaticJavaParser.parse(classWithDiscriminator.orElseThrow()); + assertThat(compilationUnit.findFirst(ClassOrInterfaceDeclaration.class) + .flatMap(first -> first.getAnnotationByClass(com.fasterxml.jackson.annotation.JsonSubTypes.class))) + .isPresent(); + } + @Test void verifyFlink() throws URISyntaxException, FileNotFoundException { OpenApiClientGeneratorWrapper generatorWrapper = createGeneratorWrapper("issue-flink.yaml"); @@ -765,9 +788,4 @@ private Optional findVariableByName(List f .filter((VariableDeclarator variable) -> name.equals(variable.getName().asString())) .findFirst(); } - - private static Optional getMethodDeclarationByIdentifier(List methodDeclarations, - String methodName) { - return methodDeclarations.stream().filter(md -> md.getName().getIdentifier().equals(methodName)).findAny(); - } } diff --git a/client/deployment/src/test/resources/openapi/issue-852.json b/client/deployment/src/test/resources/openapi/issue-852.json new file mode 100644 index 000000000..679ffb7ad --- /dev/null +++ b/client/deployment/src/test/resources/openapi/issue-852.json @@ -0,0 +1,6160 @@ +{ + "openapi": "3.0.0", + "info": { + "version": "OnBase Foundation 22.1", + "title": "OnBase Document API", + "description": "Provides core OnBase Document Management functionality.", + "x-public": true, + "contact": { + "name": "Hyland Community", + "url": "https://community.hyland.com/technical/rest-apis" + } + }, + "servers": [ + { + "url": "{protocol}://{server}/{product}", + "variables": { + "protocol": { + "enum": [ + "http", + "https" + ], + "default": "https" + }, + "server": { + "default": "localhost/apiserver", + "description": "This is the server being used to host the API in the current environment." + }, + "product": { + "default": "onbase/core", + "description": "This is the portion of the url to add to each base-url before each path defined below." + } + } + } + ], + "security": [ + { + "Bearer": [] + } + ], + "tags": [ + { + "name": "Autofills", + "description": "AutoFill Keyword Set metadata retrieval." + }, + { + "name": "Currency Formats", + "description": "Configuration items related to currency formats." + }, + { + "name": "Custom Queries", + "description": "Configuration items related to custom queries." + }, + { + "name": "Document", + "description": "Document archival and metadata retrieval." + }, + { + "name": "Document Content", + "description": "Document content retrieval." + }, + { + "name": "Document Keywords", + "description": "Document keywords." + }, + { + "name": "Document Notes", + "description": "Notes retrieval from a document's revision." + }, + { + "name": "Document Queries", + "description": "Document search." + }, + { + "name": "Document Renditions", + "description": "Document renditions." + }, + { + "name": "Document Revisions", + "description": "Document revisions." + }, + { + "name": "Document Types", + "description": "Configuration items related to document types." + }, + { + "name": "Document Type Groups", + "description": "Configuration items related to document type groups." + }, + { + "name": "File Types", + "description": "Configuration items related to file types." + }, + { + "name": "File Upload", + "description": "File upload for document archival." + }, + { + "name": "Locks", + "description": "Locking and unlocking documents." + }, + { + "name": "Keyword Types", + "description": "Keyword types metadata retrieval." + }, + { + "name": "Keyword Type Groups", + "description": "Keyword type groups metadata retrieval." + }, + { + "name": "Notes", + "description": "Note metadata retrieval." + }, + { + "name": "Note Types", + "description": "Configuration items related to Note types." + } + ], + "paths": { + "/currency-formats": { + "get": { + "summary": "Get the metadata for all currency formats.", + "description": "Get all the currency formats configured. This list will not include the currency\nused to support Workstation Region Settings.", + "operationId": "GetCurrencyFormatCollection", + "tags": [ + "Currency Formats" + ], + "parameters": [ + { + "in": "query", + "name": "id", + "schema": { + "type": "array", + "items": { + "type": "string" + } + }, + "description": "The unique identifiers of currency formats. This parameter cannot be used in conjunction with the `systemName` parameter. Multiple values are supported and in a URL should be joined using the \"&\" character. Ex:?id=102&id=103" + }, + { + "in": "query", + "name": "systemName", + "schema": { + "type": "array", + "items": { + "type": "string" + } + }, + "description": "The unique configured system names of currency formats. This parameter cannot be used in conjunction with the `id` parameter. Multiple values are supported and in a URL should be joined using the \"&\" character. Ex:?systemName=currencyFormat1&systemName=currencyFormat2" + }, + { + "$ref": "#/components/parameters/Accept-Language" + } + ], + "responses": { + "200": { + "description": "OK", + "headers": { + "Content-Language": { + "$ref": "#/components/headers/Content-Language" + } + }, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CurrencyFormatCollection" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400-COLLECTIONPARAMETERS-RESPONSE" + }, + "401": { + "$ref": "#/components/responses/401-GENERIC-RESPONSE" + } + } + } + }, + "/currency-formats/{currencyFormatId}": { + "get": { + "summary": "Gets currency format metadata.", + "description": "Gets currency format metadata. When Keyword Type is configured to use Workstation Regional Settings\n'default' can be used.", + "operationId": "GetCurrencyFormatById", + "tags": [ + "Currency Formats" + ], + "parameters": [ + { + "$ref": "#/components/parameters/currencyFormatId" + }, + { + "$ref": "#/components/parameters/Accept-Language" + } + ], + "responses": { + "200": { + "description": "OK", + "headers": { + "Content-Language": { + "$ref": "#/components/headers/Content-Language" + } + }, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CurrencyFormat" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401-GENERIC-RESPONSE" + }, + "404": { + "$ref": "#/components/responses/404-GENERIC-RESPONSE" + } + } + } + }, + "/custom-queries": { + "get": { + "summary": "Gets custom queries", + "description": "Currently only returns Custom Queries the user has permissions to and that the /documents/queries end point is capable of executing.", + "operationId": "GetCustomQueryCollection", + "tags": [ + "Custom Queries" + ], + "parameters": [ + { + "in": "query", + "name": "id", + "schema": { + "type": "array", + "items": { + "type": "string" + } + }, + "description": "The unique identifiers of custom queries. This parameter cannot be used in conjunction with the `systemName` parameter. Multiple values are supported and in a URL should be joined using the \"&\" character. Ex:?id=102&id=103" + }, + { + "in": "query", + "name": "systemName", + "schema": { + "type": "array", + "items": { + "type": "string" + } + }, + "description": "The unique configured system names of custom queries. This parameter cannot be used in conjunction with the `id` parameter. Multiple values are supported and in a URL should be joined using the \"&\" character. Ex:?systemName=customQuery1&systemName=customQuery2" + }, + { + "$ref": "#/components/parameters/Accept-Language" + } + ], + "responses": { + "200": { + "description": "OK", + "headers": { + "Content-Language": { + "$ref": "#/components/headers/Content-Language" + } + }, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CustomQueryCollection" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400-COLLECTIONPARAMETERS-RESPONSE" + }, + "401": { + "$ref": "#/components/responses/401-GENERIC-RESPONSE" + } + } + } + }, + "/custom-queries/{customQueryId}": { + "get": { + "summary": "Gets custom query metadata", + "description": "Gets custom query metadata", + "operationId": "GetCustomQueryById", + "tags": [ + "Custom Queries" + ], + "parameters": [ + { + "$ref": "#/components/parameters/customQueryId" + }, + { + "$ref": "#/components/parameters/Accept-Language" + } + ], + "responses": { + "200": { + "description": "OK", + "headers": { + "Content-Language": { + "$ref": "#/components/headers/Content-Language" + } + }, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CustomQuery" + } + } + } + }, + "400": { + "description": "Response for when user attempts to retrieve a type of custom query that is not supported.", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/Problem-Detail" + }, + "example": { + "type": "https://example.net/bad-request", + "title": "Bad Request", + "status": 400, + "detail": "Custom query type is not supported.", + "instance": "/example-resource" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401-GENERIC-RESPONSE" + }, + "404": { + "$ref": "#/components/responses/404-GENERIC-RESPONSE" + } + } + } + }, + "/custom-queries/{customQueryId}/keyword-types": { + "get": { + "summary": "Gets keyword types for a custom query", + "description": "Gets a keyword type collection for the custom query", + "operationId": "GetKeywordTypeCollectionForCustomQuery", + "tags": [ + "Custom Queries" + ], + "parameters": [ + { + "$ref": "#/components/parameters/customQueryId" + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CustomQueryKeywordTypeCollection" + } + } + } + }, + "400": { + "description": "Response for when user attempts to retrieve a type of custom query that is not supported.", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/Problem-Detail" + }, + "example": { + "type": "https://example.net/bad-request", + "title": "Bad Request", + "status": 400, + "detail": "Custom query type is not supported.", + "instance": "/example-resource" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401-GENERIC-RESPONSE" + }, + "404": { + "$ref": "#/components/responses/404-GENERIC-RESPONSE" + } + } + } + }, + "/document-types": { + "get": { + "summary": "Get a list of document types.", + "description": "Get all the document types the logged in user has permissions to view.", + "operationId": "GetDocumentTypeCollection", + "tags": [ + "Document Types" + ], + "parameters": [ + { + "in": "query", + "name": "id", + "schema": { + "type": "array", + "items": { + "type": "string" + } + }, + "description": "The unique identifiers of document types.This parameter cannot be used in conjunction with the `systemName` parameter. Multiple values are supported and in a URL should be joined using the \"&\" character. Ex:?id=102&id=103" + }, + { + "in": "query", + "name": "systemName", + "schema": { + "type": "array", + "items": { + "type": "string" + } + }, + "description": "The unique configured system names of document types. This parameter cannot be used in conjunction with the `id` parameter. Multiple values are supported and in a URL should be joined using the \"&\" character. Ex:?systemName=docType1&systemName=docType2" + }, + { + "$ref": "#/components/parameters/Accept-Language" + } + ], + "responses": { + "200": { + "description": "OK", + "headers": { + "Content-Language": { + "$ref": "#/components/headers/Content-Language" + } + }, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DocumentTypeCollection" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400-COLLECTIONPARAMETERS-RESPONSE" + }, + "401": { + "$ref": "#/components/responses/401-GENERIC-RESPONSE" + } + } + } + }, + "/document-types/{documentTypeId}": { + "get": { + "summary": "Get a document type", + "description": "Gets the document type with the associated id.", + "operationId": "GetDocumentTypeById", + "tags": [ + "Document Types" + ], + "parameters": [ + { + "$ref": "#/components/parameters/documentTypeId" + }, + { + "$ref": "#/components/parameters/Accept-Language" + } + ], + "responses": { + "200": { + "description": "OK", + "headers": { + "Content-Language": { + "$ref": "#/components/headers/Content-Language" + } + }, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DocumentType" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401-GENERIC-RESPONSE" + }, + "404": { + "$ref": "#/components/responses/404-GENERIC-RESPONSE" + } + } + } + }, + "/document-types/{documentTypeId}/keyword-type-groups": { + "get": { + "summary": "Get keyword type group metadata for a document type.", + "description": "Gets the associated keyword type groups or associated list of keyword types for standalone keywords.\n\nThe keyword type group metadata will be returned in the display order as it has\nbeen configured on the document type.", + "operationId": "GetKeywordTypeGroupCollectionForDocumentType", + "tags": [ + "Document Types" + ], + "parameters": [ + { + "$ref": "#/components/parameters/documentTypeId" + }, + { + "$ref": "#/components/parameters/Accept-Language" + } + ], + "responses": { + "200": { + "description": "OK", + "headers": { + "Content-Language": { + "$ref": "#/components/headers/Content-Language" + } + }, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/KeywordTypeGroupCollectionModel" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401-GENERIC-RESPONSE" + }, + "404": { + "$ref": "#/components/responses/404-GENERIC-RESPONSE" + } + } + } + }, + "/document-types/{documentTypeId}/default-keywords": { + "get": { + "summary": "Gets default keywords for a new document.", + "description": "Gets the default keyword values for a document type grouped by keyword type group and\nkeyword type.", + "operationId": "GetDefaultKeywordCollectionForDocumentType", + "tags": [ + "Document Types" + ], + "parameters": [ + { + "$ref": "#/components/parameters/documentTypeId" + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/KeywordCollectionResponse" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401-GENERIC-RESPONSE" + }, + "403": { + "description": "Response when the user does not have the document privilege `Create Document' or\ndocument privilege 'ReIndex Document'", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/Problem-Detail" + }, + "example": { + "type": "https://example.net/forbidden", + "title": "Forbidden", + "status": 403, + "detail": "Do not have the document privilege Create Document or document privilege ReIndex Document", + "instance": "/example-resource" + } + } + } + }, + "404": { + "$ref": "#/components/responses/404-GENERIC-RESPONSE" + } + } + } + }, + "/document-type-groups": { + "get": { + "summary": "Get a list of document type groups.", + "description": "Get all the document type groups the logged in user has permissions to view.", + "operationId": "GetDocumentTypeGroupCollection", + "tags": [ + "Document Type Groups" + ], + "parameters": [ + { + "in": "query", + "name": "id", + "schema": { + "type": "array", + "items": { + "type": "string" + } + }, + "description": "The unique identifiers of document type groups. This parameter cannot be used in conjunction with the `systemName` parameter. Multiple values are supported and in a URL should be joined using the \"&\" character. Ex:?id=102&id=103" + }, + { + "in": "query", + "name": "systemName", + "schema": { + "type": "array", + "items": { + "type": "string" + } + }, + "description": "The unique system names of document type groups. This parameter cannot be used in conjunction with the `id` parameter. Multiple values are supported and in a URL should be joined using the \"&\" character. Ex:?systemName=docTypeGroup1&systemName=docTypeGroup2" + }, + { + "$ref": "#/components/parameters/Accept-Language" + } + ], + "responses": { + "200": { + "description": "OK", + "headers": { + "Content-Language": { + "$ref": "#/components/headers/Content-Language" + } + }, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DocumentTypeGroupCollection" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400-COLLECTIONPARAMETERS-RESPONSE" + }, + "401": { + "$ref": "#/components/responses/401-GENERIC-RESPONSE" + } + } + } + }, + "/document-type-groups/{documentTypeGroupId}": { + "get": { + "summary": "Get a document type group", + "description": "Gets the document type group with the associated id.", + "operationId": "GetDocumentTypeGroupById", + "tags": [ + "Document Type Groups" + ], + "parameters": [ + { + "$ref": "#/components/parameters/documentTypeGroupId" + }, + { + "$ref": "#/components/parameters/Accept-Language" + } + ], + "responses": { + "200": { + "description": "OK", + "headers": { + "Content-Language": { + "$ref": "#/components/headers/Content-Language" + } + }, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DocumentTypeGroup" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401-GENERIC-RESPONSE" + }, + "404": { + "$ref": "#/components/responses/404-GENERIC-RESPONSE" + } + } + } + }, + "/document-type-groups/{documentTypeGroupId}/document-types": { + "get": { + "summary": "Gets the associated document types for a document type group", + "description": "Gets the associated document type collection for the document type group", + "operationId": "GetDocumentTypeCollectionForDocumentTypeGroup", + "tags": [ + "Document Type Groups" + ], + "parameters": [ + { + "$ref": "#/components/parameters/documentTypeGroupId" + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DocumentTypeGroupDocumentTypeCollection" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401-GENERIC-RESPONSE" + }, + "404": { + "$ref": "#/components/responses/404-GENERIC-RESPONSE" + } + } + } + }, + "/file-types": { + "get": { + "summary": "Get file type metadata for all file types.", + "description": "Get the file type metadata for all file types in\nthe system.", + "operationId": "GetFileTypeCollection", + "tags": [ + "File Types" + ], + "parameters": [ + { + "in": "query", + "name": "id", + "schema": { + "type": "array", + "items": { + "type": "string" + } + }, + "description": "The unique identifiers of file types. This parameter cannot be used in conjunction with the `systemName` parameter. Multiple values are supported and in a URL should be joined using the \"&\" character. Ex:?id=2&id=16" + }, + { + "in": "query", + "name": "systemName", + "schema": { + "type": "array", + "items": { + "type": "string" + } + }, + "description": "The unique configured system names of file types. This parameter cannot be used in conjunction with the `id` parameter. Multiple values are supported and in a URL should be joined using the \"&\" character. Ex:?systemName=Image File Format&systemName=PDF" + }, + { + "$ref": "#/components/parameters/Accept-Language" + } + ], + "responses": { + "200": { + "description": "OK", + "headers": { + "Content-Language": { + "$ref": "#/components/headers/Content-Language" + } + }, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FileTypeCollection" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400-COLLECTIONPARAMETERS-RESPONSE" + }, + "401": { + "$ref": "#/components/responses/401-GENERIC-RESPONSE" + } + } + } + }, + "/file-types/{fileTypeId}": { + "get": { + "summary": "Get file type metadata.", + "description": "Get file type metadata for the specified file type id.", + "operationId": "GetFileTypeById", + "tags": [ + "File Types" + ], + "parameters": [ + { + "$ref": "#/components/parameters/fileTypeId" + }, + { + "$ref": "#/components/parameters/Accept-Language" + } + ], + "responses": { + "200": { + "description": "OK", + "headers": { + "Content-Language": { + "$ref": "#/components/headers/Content-Language" + } + }, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FileType" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401-GENERIC-RESPONSE" + }, + "404": { + "$ref": "#/components/responses/404-GENERIC-RESPONSE" + } + } + } + }, + "/default-upload-file-types": { + "get": { + "summary": "Gets the \"best guess\" file type for upload based on a given extension.", + "description": "Gets the \"best guess\" file type for upload based on a given extension.", + "operationId": "GetFileTypeForUpload", + "tags": [ + "File Types" + ], + "parameters": [ + { + "in": "query", + "name": "extension", + "required": true, + "schema": { + "type": "string" + }, + "description": "The extension that will determine the File Type that is appropriate for upload." + }, + { + "$ref": "#/components/parameters/Accept-Language" + } + ], + "responses": { + "200": { + "description": "OK", + "headers": { + "Content-Language": { + "$ref": "#/components/headers/Content-Language" + } + }, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DefaultUploadFileType" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401-GENERIC-RESPONSE" + }, + "404": { + "$ref": "#/components/responses/404-GENERIC-RESPONSE" + } + } + } + }, + "/keyword-types": { + "get": { + "summary": "Get keyword type metadata for all keyword types.", + "description": "Get the keyword type metadata for all keyword types in\nthe system.", + "operationId": "GetKeywordTypeCollection", + "tags": [ + "Keyword Types" + ], + "parameters": [ + { + "in": "query", + "name": "id", + "schema": { + "type": "array", + "items": { + "type": "string" + } + }, + "description": "The unique identifiers of keyword types. This parameter cannot be used in conjunction with the `systemName` parameter. Multiple values are supported and in a URL should be joined using the \"&\" character. Ex:?id=102&id=103" + }, + { + "in": "query", + "name": "systemName", + "schema": { + "type": "array", + "items": { + "type": "string" + } + }, + "description": "The unique configured system names of keyword types. This parameter cannot be used in conjunction with the `id` parameter. Multiple values are supported and in a URL should be joined using the \"&\" character. Ex:?systemName=keywordType1&systemName=keywordType2" + }, + { + "$ref": "#/components/parameters/Accept-Language" + } + ], + "responses": { + "200": { + "description": "OK", + "headers": { + "Content-Language": { + "$ref": "#/components/headers/Content-Language" + } + }, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/KeywordTypeCollection" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400-COLLECTIONPARAMETERS-RESPONSE" + }, + "401": { + "$ref": "#/components/responses/401-GENERIC-RESPONSE" + } + } + } + }, + "/keyword-types/{keywordTypeId}": { + "get": { + "summary": "Get keyword type metadata.", + "description": "Get keyword type metadata for the specified keyword type id.", + "operationId": "GetKeywordTypeById", + "tags": [ + "Keyword Types" + ], + "parameters": [ + { + "$ref": "#/components/parameters/keywordTypeId" + }, + { + "$ref": "#/components/parameters/Accept-Language" + } + ], + "responses": { + "200": { + "description": "OK", + "headers": { + "Content-Language": { + "$ref": "#/components/headers/Content-Language" + } + }, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/KeywordType" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401-GENERIC-RESPONSE" + }, + "404": { + "$ref": "#/components/responses/404-GENERIC-RESPONSE" + } + } + } + }, + "/keyword-type-groups": { + "get": { + "summary": "Get keyword type group metadata for all keyword type groups.", + "description": "Get the keyword type group metadata for all keyword type groups in\nthe system.", + "operationId": "GetKeywordTypeGroupCollection", + "tags": [ + "Keyword Type Groups" + ], + "parameters": [ + { + "in": "query", + "name": "id", + "schema": { + "type": "array", + "items": { + "type": "string" + } + }, + "description": "The unique identifiers of keyword type groups. This parameter cannot be used in conjunction with the `systemName` parameter. Multiple values are supported and in a URL should be joined using the \"&\" character. Ex:?id=102&id=103" + }, + { + "in": "query", + "name": "systemName", + "schema": { + "type": "array", + "items": { + "type": "string" + } + }, + "description": "The unique configured system names of keyword type groups. This parameter cannot be used in conjunction with the `id` parameter. Multiple values are supported and in a URL should be joined using the \"&\" character. Ex:?systemName=keywordTypeGroup1&systemName=keywordTypeGroup2" + }, + { + "$ref": "#/components/parameters/Accept-Language" + } + ], + "responses": { + "200": { + "description": "OK", + "headers": { + "Content-Language": { + "$ref": "#/components/headers/Content-Language" + } + }, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/KeywordTypeGroupCollection" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400-COLLECTIONPARAMETERS-RESPONSE" + }, + "401": { + "$ref": "#/components/responses/401-GENERIC-RESPONSE" + } + } + } + }, + "/keyword-type-groups/{keywordTypeGroupId}": { + "get": { + "summary": "Get keyword type group metadata.", + "description": "Get keyword type group metadata for the specified keyword type group id.", + "operationId": "GetKeywordTypeGroupById", + "tags": [ + "Keyword Type Groups" + ], + "parameters": [ + { + "$ref": "#/components/parameters/keywordTypeGroupId" + }, + { + "$ref": "#/components/parameters/Accept-Language" + } + ], + "responses": { + "200": { + "description": "OK", + "headers": { + "Content-Language": { + "$ref": "#/components/headers/Content-Language" + } + }, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/KeywordTypeGroup" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401-GENERIC-RESPONSE" + }, + "404": { + "$ref": "#/components/responses/404-GENERIC-RESPONSE" + } + } + } + }, + "/keyword-type-groups/{keywordTypeGroupId}/keyword-types": { + "get": { + "summary": "Get a list of keyword types in the keyword type group.", + "description": "Get a list of keyword types in the keyword type group with the specified id.", + "operationId": "GetKeywordTypeCollectionForKeywordTypeGroup", + "tags": [ + "Keyword Type Groups" + ], + "parameters": [ + { + "$ref": "#/components/parameters/keywordTypeGroupId" + }, + { + "$ref": "#/components/parameters/Accept-Language" + } + ], + "responses": { + "200": { + "description": "OK", + "headers": { + "Content-Language": { + "$ref": "#/components/headers/Content-Language" + } + }, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/KeywordTypeGroupKeywordTypeCollection" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401-GENERIC-RESPONSE" + }, + "404": { + "$ref": "#/components/responses/404-GENERIC-RESPONSE" + } + } + } + }, + "/autofill-keyword-sets": { + "get": { + "summary": "Get autofill keyword set metadata for all autofill keyword sets.", + "description": "Get the autofill keyword set metadata for all autofill keyword sets in\nthe system.", + "operationId": "GetAutofillKeywordSetCollection", + "tags": [ + "Autofills" + ], + "parameters": [ + { + "in": "query", + "name": "id", + "schema": { + "type": "array", + "items": { + "type": "string" + } + }, + "description": "The unique identifiers of autofill keyword sets. This parameter cannot be used in conjunction with the `systemName` parameter. Multiple values are supported and in a URL should be joined using the \"&\" character. Ex:?id=102&id=103" + }, + { + "in": "query", + "name": "systemName", + "schema": { + "type": "array", + "items": { + "type": "string" + } + }, + "description": "The unique configured system names of autofill keyword sets. This parameter cannot be used in conjunction with the `id` parameter. Multiple values are supported and in a URL should be joined using the \"&\" character. Ex:?systemName=testAutofill1&systemName=testAutofill2" + }, + { + "$ref": "#/components/parameters/Accept-Language" + } + ], + "responses": { + "200": { + "description": "OK", + "headers": { + "Content-Language": { + "$ref": "#/components/headers/Content-Language" + } + }, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AutoFillKeywordSetCollection" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400-COLLECTIONPARAMETERS-RESPONSE" + }, + "401": { + "$ref": "#/components/responses/401-GENERIC-RESPONSE" + } + } + } + }, + "/autofill-keyword-sets/{autoFillKeywordSetId}": { + "get": { + "summary": "Get autofill keyword set metadata.", + "description": "Get autofill keyword set metadata for the specified autofill keyword set id.", + "operationId": "GetAutofillKeywordSetById", + "tags": [ + "Autofills" + ], + "parameters": [ + { + "$ref": "#/components/parameters/autoFillKeywordSetId" + }, + { + "$ref": "#/components/parameters/Accept-Language" + } + ], + "responses": { + "200": { + "description": "OK", + "headers": { + "Content-Language": { + "$ref": "#/components/headers/Content-Language" + } + }, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AutoFillKeywordSet" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401-GENERIC-RESPONSE" + }, + "404": { + "$ref": "#/components/responses/404-GENERIC-RESPONSE" + } + } + } + }, + "/autofill-keyword-sets/{autoFillKeywordSetId}/keyword-types": { + "get": { + "summary": "Get keyword metadata for a autofill type.", + "description": "Gets the associated keyword types.", + "operationId": "GetKeywordTypeCollectionForAutofillKeywordSet", + "tags": [ + "Autofills" + ], + "parameters": [ + { + "$ref": "#/components/parameters/autoFillKeywordSetId" + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AutoFillKeywordSetKeywordTypeCollection" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401-GENERIC-RESPONSE" + }, + "404": { + "$ref": "#/components/responses/404-GENERIC-RESPONSE" + } + } + } + }, + "/autofill-keyword-sets/{autoFillKeywordSetId}/keyword-set-data": { + "get": { + "summary": "Get the keyword set data.", + "description": "Get the keyword set data instances based on query parameters.", + "operationId": "GetKeywordDataCollectionForAutofillKeywordSet", + "tags": [ + "Autofills" + ], + "parameters": [ + { + "$ref": "#/components/parameters/autoFillKeywordSetId" + }, + { + "$ref": "#/components/parameters/Accept-Language" + }, + { + "in": "query", + "name": "primaryValue", + "schema": { + "type": "string" + }, + "description": "The primary keyword value associated with the particular autofill keyword set." + } + ], + "responses": { + "200": { + "description": "OK", + "headers": { + "Content-Language": { + "$ref": "#/components/headers/Content-Language" + } + }, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/KeywordSetDataCollection" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401-GENERIC-RESPONSE" + }, + "404": { + "$ref": "#/components/responses/404-GENERIC-RESPONSE" + } + } + } + }, + "/documents": { + "get": { + "summary": "Get a list of documents.", + "description": "Get the list of documents with the given ids that the user has permission to view. An empty list is returned if the user does not have access to any documents or the documents cannot be found.", + "operationId": "GetDocumentCollection", + "tags": [ + "Document" + ], + "parameters": [ + { + "in": "query", + "name": "id", + "description": "The unique identifiers of Document. Multiple values are supported and in a URL should be joined using the '&' character.\nEx: ?id=101&id=102&id=103.", + "required": true, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ], + "responses": { + "200": { + "description": "OK", + "headers": { + "Content-Language": { + "$ref": "#/components/headers/Content-Language" + } + }, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DocumentCollection" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401-GENERIC-RESPONSE" + } + } + }, + "post": { + "summary": "Archive the document.", + "description": "Finishes the document upload by archiving the document into the given document type. Can also optionally specify the document date, comments if the document type is Revisable/Renditionable and also a boolean to indicate if this needs to be stored as a new document regardless of the document type settings. If fileTypeId is not specified, then the default file type for the document type will be used. Providing a keyword collection with a keyword guid is required. Takes a list of references to uploaded file resources.", + "operationId": "PostDocument", + "tags": [ + "Document" + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DocumentArchiveProperties" + } + } + } + }, + "responses": { + "201": { + "description": "Document successfully archived.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DocumentsPostResponse" + } + } + }, + "headers": { + "Location": { + "$ref": "#/components/headers/Location" + } + } + }, + "300": { + "description": "Document(s) are found for which the new document can be added as Revision/Rendition.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/MatchedDocumentCollectionResponse" + } + } + } + }, + "400": { + "description": "Document Type Id and/or File Type Id is invalid,\nKeyword information is invalid, unique handle(s)\nare invalid, no comments are provided when the document type is set to \"Force Comments\",\nor an invalid archival option has been provided for Revisable/Renditionable document type.", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/Problem-Detail" + }, + "example": { + "type": "https://example.net/bad-request", + "title": "Bad Request", + "status": 400, + "detail": "Invalid document type.", + "instance": "/example-resource" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401-GENERIC-RESPONSE" + }, + "403": { + "description": "User does not have rights to create document or when the user is trying to add read-only and hidden keywords without 'Access Restricted Keywords' privilege.", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/Problem-Detail" + }, + "example": { + "type": "https://example.net/forbidden", + "title": "Forbidden", + "status": 403, + "detail": "User does not have rights to create document.", + "instance": "/example-resource" + } + } + } + } + } + } + }, + "/documents/{documentId}": { + "get": { + "summary": "Gets document metadata.", + "description": "Gets document metadata.", + "operationId": "GetDocumentById", + "tags": [ + "Document" + ], + "parameters": [ + { + "$ref": "#/components/parameters/documentId" + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Document" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401-GENERIC-RESPONSE" + }, + "404": { + "$ref": "#/components/responses/404-GENERIC-RESPONSE" + } + } + }, + "delete": { + "summary": "Deletes a document.", + "description": "Deletes a document.", + "operationId": "DeleteDocumentById", + "tags": [ + "Document" + ], + "parameters": [ + { + "$ref": "#/components/parameters/documentId" + } + ], + "responses": { + "204": { + "description": "No Content" + }, + "401": { + "$ref": "#/components/responses/401-GENERIC-RESPONSE" + }, + "403": { + "description": "Response when the user does not have delete rights to the specified document,\nretention criteria has not been met, or the resource is checked out.", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/Problem-Detail" + }, + "example": { + "type": "https://example.net/forbidden", + "title": "Forbidden", + "status": 403, + "detail": "Do not have rights to the specified document, retention criteria has not been met, or the resource is checked out.", + "instance": "/example-resource" + } + } + } + }, + "404": { + "description": "Response when the resource does not exist or the user does not have view rights to the specified document.", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/Problem-Detail" + }, + "example": { + "type": "https://example.net/not-found", + "title": "Not Found", + "status": 404, + "detail": "Document does not exist.", + "instance": "/example-resource" + } + } + } + } + } + }, + "patch": { + "summary": "Updates document metadata.", + "description": "Updates document metadata.", + "operationId": "PatchDocumentById", + "tags": [ + "Document" + ], + "parameters": [ + { + "$ref": "#/components/parameters/documentId" + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DocumentPatchRequest" + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Document" + } + } + } + }, + "400": { + "description": "Response when the user sends invalid data to modify document metadata.", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/Problem-Detail" + }, + "example": { + "type": "https://example.net/bad-request", + "title": "Bad Request", + "status": 400, + "detail": "Invalid Document Date Format.", + "instance": "/example-resource" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401-GENERIC-RESPONSE" + }, + "403": { + "description": "Response when the user does not have rights to modify document metadata.", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/Problem-Detail" + }, + "example": { + "type": "https://example.net/forbidden", + "title": "Forbidden", + "status": 403, + "detail": "Do not have rights to modify the specified document.", + "instance": "/example-resource" + } + } + } + }, + "404": { + "$ref": "#/components/responses/404-GENERIC-RESPONSE" + } + } + }, + "put": { + "summary": "Reindex document.", + "description": "Reindexes a document by first checking if there is a match for rendition or revisions\nand then applies the reindex if there are no matches, the user verifies that it will not\nstore as a new revision or rendition, or if there is no document type change.\nThe keywordCollection requires a keyword GUID. For reindexing, this must come from the source document (/document/{id}/keywords) rather than the target document type.", + "operationId": "PutDocumentById", + "tags": [ + "Document" + ], + "parameters": [ + { + "$ref": "#/components/parameters/documentId" + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DocumentReindexProperties" + } + } + } + }, + "responses": { + "204": { + "description": "No Content" + }, + "300": { + "description": "Document(s) are found for which the new document can be added as Revision/Rendition.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/MatchedDocumentCollectionResponse" + } + } + } + }, + "400": { + "description": "Response when the user sends invalid data to reindex.", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/Problem-Detail" + }, + "example": { + "type": "https://example.net/bad-request", + "title": "Bad Request", + "status": 400, + "detail": "Invalid Document Date Format.", + "instance": "/example-resource" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401-GENERIC-RESPONSE" + }, + "403": { + "description": "Response when the user does not have rights to reindex.", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/Problem-Detail" + }, + "example": { + "type": "https://example.net/forbidden", + "title": "Forbidden", + "status": 403, + "detail": "Do not have rights to reindex the specified document.", + "instance": "/example-resource" + } + } + } + }, + "404": { + "$ref": "#/components/responses/404-GENERIC-RESPONSE" + } + } + } + }, + "/documents/{documentId}/keywords": { + "get": { + "summary": "Gets keywords for a document.", + "description": "Gets the keyword values for a document grouped by keyword type group and\nkeyword type.", + "operationId": "GetKeywordCollectionForDocument", + "tags": [ + "Document Keywords" + ], + "parameters": [ + { + "$ref": "#/components/parameters/documentId" + }, + { + "in": "query", + "name": "unmask", + "description": "Value determining whether to unmask security masked Keywords. If true and user does not\nhave Access Security Masked Keywords privilege, security masked Keywords will stay masked.\nSetting unmask to false is equivalent to omitting the query string parameter.", + "schema": { + "type": "boolean" + }, + "required": false + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/KeywordCollectionResponse" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401-GENERIC-RESPONSE" + }, + "403": { + "description": "Response when the user does not have the document privilege `View Keywords'", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/Problem-Detail" + }, + "example": { + "type": "https://example.net/forbidden", + "title": "Forbidden", + "status": 403, + "detail": "Do not have the document privilege View Keywords", + "instance": "/example-resource" + } + } + } + }, + "404": { + "$ref": "#/components/responses/404-GENERIC-RESPONSE" + } + } + }, + "put": { + "summary": "Sets all keyword values for an indexed document.", + "description": "Sets all keyword values for an indexed document. Existing values will be\nreplaced with the supplied list of keyword values grouped by keyword type\ngroup and keyword type.", + "operationId": "PutKeywordCollectionForDocument", + "tags": [ + "Document Keywords" + ], + "parameters": [ + { + "$ref": "#/components/parameters/documentId" + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/KeywordCollectionRequest" + } + } + } + }, + "responses": { + "204": { + "description": "No Content" + }, + "400": { + "description": "Response when the user sends a empty request body,\ninvalid keyword syntax, invalid keyword data, or missing restricted keyword guid.", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/Problem-Detail" + }, + "example": { + "type": "https://example.net/bad-request", + "title": "Bad Request", + "status": 400, + "detail": "Do not have the document privilege View Keywords", + "instance": "/example-resource" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401-GENERIC-RESPONSE" + }, + "403": { + "description": "Response when the user does not have the document privilege `Modify Keywords',\nthe document is locked by Records Management or Medical records.", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/Problem-Detail" + }, + "example": { + "type": "https://example.net/forbidden", + "title": "Forbidden", + "status": 403, + "detail": "Does not have the document privilege Modify Keywords, the document is locked by Records Management or Medical records.", + "instance": "/example-resource" + } + } + } + }, + "404": { + "$ref": "#/components/responses/404-GENERIC-RESPONSE" + } + } + } + }, + "/indexing-modifiers": { + "post": { + "summary": "Performs modification of keyword data during indexing processes like Reindex and Archival.", + "description": "During the indexing process, some actions require additional information from the server before indexing can continue. This\nend point provides the ability to perform these actions.\nThis end point is intended to assist with indexing processes that are interactive. Requests to this end point do not persist\nany indexing data on the document.\n# Expand AutoFill Keyword Sets\nAutoFill Keyword Sets can be expanded during the Reindex process and during the Archival process. Information about the desired AutoFill\nto expand is sent to the server to perform the operation and sends back the results based on a Primary Keyword value. Expansion will\noccur if a single Primary Keyword value match is found and will return back the updated Keyword Collection. If multiple matches are\nfound the endpoint will behave differently depending on the following AutoFill Keyword Set configuration.\n\n\n \n \n \n \n \n \n \n \n \n
Expansion Type Behavior
Single Selection A collection of AutoFill Keyword Set Data Sets will be sent\n back that requires a selection of a single AutoFill Keyword Set Data Set Instance Id\n to be passed back for successful expansion.
Multiple Selection A collection of AutoFill Keyword Set Data Sets will be sent back\n that requires a selection of AutoFill Keyword Set Data Set Instance Ids to be passed\n back for successful expansion.
Expand All All matching AutoFill Keyword Set Data Sets will be\n expanded without any other interaction.
", + "operationId": "PostIndexingModifier", + "tags": [ + "Document Keywords" + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "oneOf": [ + { + "$ref": "#/components/schemas/ReindexAutoFillExpansionModifierProperties" + }, + { + "$ref": "#/components/schemas/ArchivalAutoFillExpansionModifierProperties" + } + ], + "discriminator": { + "propertyName": "objectType", + "mapping": { + "ReindexAutoFillExpansion": "#/components/schemas/ReindexAutoFillExpansionModifierProperties", + "ArchivalAutoFillExpansion": "#/components/schemas/ArchivalAutoFillExpansionModifierProperties" + } + } + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IndexingModifiersPostResponse" + } + } + } + }, + "300": { + "description": "Multiple AutoFill Keyword Set Data Set items are found matching the Primary Keyword Value.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AutoFillMultipleMatchesResponse" + } + } + } + }, + "400": { + "description": "Response when the user sends an invalid AutoFill Keyword Expansion Properties.", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/Problem-Detail" + }, + "example": { + "type": "https://example.net/bad-request", + "title": "Bad Request", + "status": 400, + "detail": "Invalid Document Type Id.", + "instance": "/example-resource" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401-GENERIC-RESPONSE" + }, + "403": { + "description": "Response when the user does not have the necessary privileges.", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/Problem-Detail" + }, + "example": { + "type": "https://example.net/forbidden", + "title": "Forbidden", + "status": 403, + "detail": "No privileges to perform Autofill Expansion", + "instance": "/example-resource" + } + } + } + }, + "404": { + "$ref": "#/components/responses/404-GENERIC-RESPONSE" + } + } + } + }, + "/documents/{documentId}/locks": { + "get": { + "summary": "Gets the current locks for the document.", + "description": "Gets the list of locks that are currently placed on a document.", + "operationId": "GetDocumentLocks", + "tags": [ + "Locks" + ], + "parameters": [ + { + "$ref": "#/components/parameters/documentId" + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/LockInfoCollection" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401-GENERIC-RESPONSE" + }, + "404": { + "$ref": "#/components/responses/404-GENERIC-RESPONSE" + } + } + }, + "post": { + "summary": "Create a lock on a document.", + "description": "Creates lock on a document. The type of lock is\nspecified in the required query parameter `lockType`.", + "operationId": "PostDocumentLocks", + "tags": [ + "Locks" + ], + "parameters": [ + { + "$ref": "#/components/parameters/documentId" + }, + { + "$ref": "#/components/parameters/lockTypeParam" + } + ], + "responses": { + "204": { + "description": "No Content. Lock created." + }, + "400": { + "description": "Response when lockType is not included.", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/Problem-Detail" + }, + "example": { + "type": "https://example.net/bad-request", + "title": "Bad Request", + "status": 400, + "detail": "Required parameter lockType is not included.", + "instance": "/example-resource" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401-GENERIC-RESPONSE" + }, + "404": { + "$ref": "#/components/responses/404-GENERIC-RESPONSE" + }, + "409": { + "$ref": "#/components/responses/409-LOCKING-RESPONSE" + } + } + }, + "delete": { + "summary": "Delete a lock on a document.", + "description": "Deletes a lock on a document. The type of lock is\nspecified in the required query parameter `lockType`.", + "operationId": "DeleteDocumentLock", + "tags": [ + "Locks" + ], + "parameters": [ + { + "$ref": "#/components/parameters/documentId" + }, + { + "$ref": "#/components/parameters/lockTypeParam" + } + ], + "responses": { + "204": { + "description": "No content. Document Lock has been removed." + }, + "400": { + "description": "Response when lockType is not included.", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/Problem-Detail" + }, + "example": { + "type": "https://example.net/bad-request", + "title": "Bad Request", + "status": 400, + "detail": "Required parameter lockType is not included.", + "instance": "/example-resource" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401-GENERIC-RESPONSE" + }, + "404": { + "$ref": "#/components/responses/404-GENERIC-RESPONSE" + } + } + } + }, + "/documents/{documentId}/revisions/{revisionId}/notes": { + "get": { + "tags": [ + "Document Notes" + ], + "summary": "Gets a collection of notes for a given document.", + "description": "Gets a collection of notes for a given document.\nUse `latest` to retrieve the most recent revision's notes.", + "operationId": "GetNoteCollectionForDocument", + "parameters": [ + { + "$ref": "#/components/parameters/documentId" + }, + { + "$ref": "#/components/parameters/revisionId" + }, + { + "name": "page", + "in": "query", + "description": "The page of the document to retrieve notes from. A page is one based.\nIf the value is not present then all notes on the document revision will be retrieved.", + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NoteCollectionModel" + } + } + } + } + }, + "401": { + "$ref": "#/components/responses/401-GENERIC-RESPONSE" + }, + "404": { + "$ref": "#/components/responses/404-GENERIC-RESPONSE" + } + } + }, + "post": { + "tags": [ + "Document Notes" + ], + "summary": "Create a new note and add it to a given document revision.", + "description": "Create a new note and add it to a given document revision.\nUse `latest` to add to the most recent revision.", + "operationId": "PostNoteOnDocument", + "parameters": [ + { + "$ref": "#/components/parameters/documentId" + }, + { + "$ref": "#/components/parameters/revisionId" + } + ], + "requestBody": { + "description": "Model containing the note metadata to save.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AddNotePropertiesModel" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "The note was successfully created.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NotesPostResponse" + } + } + }, + "headers": { + "Location": { + "$ref": "#/components/headers/Location" + } + } + }, + "400": { + "description": "The note has an invalid size, the note type of the note is unsupported, or the note\ncould not be created.", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/Problem-Detail" + }, + "example": { + "type": "https://example.net/bad-request", + "title": "Bad Request", + "status": 400, + "detail": "NoteType ID is a staple. Staples and back staples are currently unsupported Note Types.\"", + "instance": "/example-resource" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401-GENERIC-RESPONSE" + }, + "403": { + "description": "The user does not have rights to create notes on this document or\nthe document lock prevents the note from being created.", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/Problem-Detail" + }, + "example": { + "type": "https://example.net/forbidden", + "title": "Forbidden", + "status": 403, + "detail": "Do not have rights to create the note.", + "instance": "/example-resource" + } + } + } + }, + "404": { + "$ref": "#/components/responses/404-GENERIC-RESPONSE" + } + } + } + }, + "/documents/{documentId}/revisions": { + "get": { + "summary": "Gets a collection of document revisions.", + "description": "Gets collection of document revisions.", + "operationId": "GetRevisionCollectionForDocument", + "tags": [ + "Document Revisions" + ], + "parameters": [ + { + "$ref": "#/components/parameters/documentId" + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RevisionCollection" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401-GENERIC-RESPONSE" + }, + "403": { + "$ref": "#/components/responses/403-GENERIC-RESPONSE" + }, + "404": { + "$ref": "#/components/responses/404-GENERIC-RESPONSE" + } + } + }, + "post": { + "summary": "Store a new revision", + "description": "Archives or Reindexes the document as a latest revision to the current document.\nKeywords supplied with this request are merged with the existing keywords on the document. For Single Instance keywords, old values are replaced by the new values.", + "operationId": "PostRevisionForDocument", + "tags": [ + "Document Revisions" + ], + "parameters": [ + { + "$ref": "#/components/parameters/documentId" + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "oneOf": [ + { + "$ref": "#/components/schemas/RevisionArchiveProperties" + }, + { + "$ref": "#/components/schemas/RevisionReindexProperties" + } + ], + "discriminator": { + "propertyName": "objectType", + "mapping": { + "RevisionArchive": "#/components/schemas/RevisionArchiveProperties", + "RevisionReindex": "#/components/schemas/RevisionReindexProperties" + } + } + } + } + } + }, + "responses": { + "201": { + "description": "Revision successfully stored.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RevisionsPostResponse" + } + } + }, + "headers": { + "Location": { + "$ref": "#/components/headers/Location" + } + } + }, + "400": { + "description": "A reference to an uploaded file resource is not found, invalid File\nType Id is provided, the document type is not revisable, invalid keywords are supplied or\na comment is not supplied when 'Force Comments' is set to true.", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/Problem-Detail" + }, + "example": { + "type": "https://example.net/bad-request", + "title": "Bad Request", + "status": 400, + "detail": "A reference to an uploaded file resource is not found, invalid File Type Id is provided, or the document type is not revisable", + "instance": "/example-resource" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401-GENERIC-RESPONSE" + }, + "403": { + "description": "Response when the user does not have rights to create or reindex a document, when the user is trying to add/modify keywords with an invalid Keyword Guid, or when the user is trying to add/modify read-only keywords without `Access Restricted Keywords`.", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/Problem-Detail" + }, + "example": { + "type": "https://example.net/forbidden", + "title": "Forbidden", + "status": 403, + "detail": "Does not have rights to create revisions.", + "instance": "/example-resource" + } + } + } + }, + "404": { + "$ref": "#/components/responses/404-GENERIC-RESPONSE" + } + } + } + }, + "/documents/{documentId}/revisions/{revisionId}": { + "get": { + "summary": "Gets the metadata for a revision.", + "description": "Gets the metadata for a revision.\nUse `latest` to retrieve the most recent revision.\nThe `latest` revision will be available regardless of permission to view revisions.", + "operationId": "GetRevisionByIdForDocument", + "tags": [ + "Document Revisions" + ], + "parameters": [ + { + "$ref": "#/components/parameters/documentId" + }, + { + "$ref": "#/components/parameters/revisionId" + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Revision" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401-GENERIC-RESPONSE" + }, + "403": { + "$ref": "#/components/responses/403-GENERIC-RESPONSE" + }, + "404": { + "$ref": "#/components/responses/404-GENERIC-RESPONSE" + } + } + } + }, + "/documents/{documentId}/revisions/{revisionId}/renditions": { + "get": { + "summary": "Gets a collection of document renditions.", + "description": "Gets a collection of document renditions.\nUse `latest` to retrieve the most recent revision.\nThe `latest` revision will be available regardless of permission to view revisions.", + "operationId": "GetRenditionCollectionForRevisionOfDocument", + "tags": [ + "Document Renditions" + ], + "parameters": [ + { + "$ref": "#/components/parameters/documentId" + }, + { + "$ref": "#/components/parameters/revisionId" + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RenditionCollection" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401-GENERIC-RESPONSE" + }, + "403": { + "$ref": "#/components/responses/403-GENERIC-RESPONSE" + }, + "404": { + "$ref": "#/components/responses/404-GENERIC-RESPONSE" + } + } + } + }, + "/documents/{documentId}/revisions/latest/renditions": { + "post": { + "summary": "Store rendition to the latest revision", + "description": "Archives or Reindexes the document as a rendition to the latest revision.\nKeywords supplied with this request are merged with the existing keywords on the document. For Single Instance keywords, old values are replaced by the new values.", + "operationId": "PostRenditionForLatestRevisionOfDocument", + "tags": [ + "Document Renditions" + ], + "parameters": [ + { + "$ref": "#/components/parameters/documentId" + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "oneOf": [ + { + "$ref": "#/components/schemas/RenditionArchiveProperties" + }, + { + "$ref": "#/components/schemas/RenditionReindexProperties" + } + ], + "discriminator": { + "propertyName": "objectType", + "mapping": { + "RenditionArchive": "#/components/schemas/RenditionArchiveProperties", + "RenditionReindex": "#/components/schemas/RenditionReindexProperties" + } + } + } + } + } + }, + "responses": { + "201": { + "description": "Document successfully archived as rendition to the given revision.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RenditionsPostResponse" + } + } + }, + "headers": { + "Location": { + "$ref": "#/components/headers/Location" + } + } + }, + "400": { + "description": "A reference to the uploaded file resource is not found,\nan invalid File Type Id is provided,\nthe document already contains a rendition of the given File Type Id,\nthe document type is not renditionable,\ninvalid keywords are supplied or\na comment is not supplied when 'Force Comments' is set to true.", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/Problem-Detail" + }, + "example": { + "type": "https://example.net/bad-request", + "title": "Bad Request", + "status": 400, + "detail": "An invalid File Type Id is provided", + "instance": "/example-resource" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401-GENERIC-RESPONSE" + }, + "403": { + "description": "Response when the user does not have rights to create or reindex a document, when the user is trying to add/modify keywords with an invalid Keyword Guid, or when the user is trying to add/modify read-only keywords without `Access Restricted Keywords`.", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/Problem-Detail" + }, + "example": { + "type": "https://example.net/forbidden", + "title": "Forbidden", + "status": 403, + "detail": "Do not have rights to create a document.", + "instance": "/example-resource" + } + } + } + }, + "404": { + "$ref": "#/components/responses/404-GENERIC-RESPONSE" + } + } + } + }, + "/documents/{documentId}/revisions/{revisionId}/renditions/{fileTypeId}": { + "get": { + "summary": "Gets the metadata for a rendition of a revision.", + "description": "Gets the metadata for a rendition of a revision.\nUse `latest` to retrieve the most recent revision.\nThe `latest` revision will be available regardless of permission to view revisions.\nUse `default` to retrieve the default rendition.", + "operationId": "GetRenditionByIdForRevisionOfDocument", + "tags": [ + "Document Renditions" + ], + "parameters": [ + { + "$ref": "#/components/parameters/documentId" + }, + { + "$ref": "#/components/parameters/revisionId" + }, + { + "$ref": "#/components/parameters/fileTypeId" + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Rendition" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400-GENERIC-RESPONSE" + }, + "401": { + "$ref": "#/components/responses/401-GENERIC-RESPONSE" + }, + "403": { + "$ref": "#/components/responses/403-GENERIC-RESPONSE" + }, + "404": { + "$ref": "#/components/responses/404-GENERIC-RESPONSE" + } + } + } + }, + "/documents/{documentId}/revisions/{revisionId}/renditions/{fileTypeId}/content": { + "get": { + "summary": "Get document content for a rendition of a revision.", + "description": "To retrieve the default rendition of the latest revision,\nuse 'default' for the fileTypeId and 'latest' for the revisionId.\n\nThe `latest` revision will be available regardless of permission to view revisions.\n\nConsumers can `GET` the content resource by supplying the required\nparameters. A response will be returned\nbased on the result of Content Negotiation. For more detailed information\nregarding how the response content type will be determined, please review\nthe Document Retrieval section of the Programmers Guide.\n\nThe `pages` query parameter can be used to retrieve a single page of the document.\nWhen the `pages` query parameter is provided, the total page count for the document\nwill be included on the response in the `Hyland-Item-Count` header.\nThe Range header can be used to retrieve a specific byte range.\n\nThe `Hyland-Item-Count` header will only be included if the `pages` query parameter is used.\n\nWhen the `pages` query parameter and 'Range' request header is omitted, document content is returned\nin its entirety as a single file with a 200 OK Status code.\n\nThe `context` query parameter can be used to provide additional context of what the\nclient is retrieving the page data for. This will perform client privilege checks and\nlog more appropriate messages to the document history indicating what action the client\nwill be performing.\n\nWhen retrieving a byte range of a document, the response will include an ETag\nrepresenting the specific document that the byte range is from. When retrieving\na second byte range from the same document, this ETag should be included in the\nrequest header If-Match. This will ensure that the second byte range is taken\nfrom the same exact document as the first. If this original document does not\nexist anymore, or if it has been changed in the interim, a status code of 412\nPrecondition Failed will be returned.\n\nWhen requesting a byte range that only represents part of a document, a 206 Partial\nContent response will be returned. If a byte range is requested that includes all of\ndocument's bytes, a 200 OK response will be returned instead.\n\nThe `height` and `width` query parameters can be used to retrieve a smaller scale version\nof the resource with the provided dimensions, in pixels. The `fit` query parameter can also be\nincluded to define how the scaling should occur. When the `fit` query parameter is not provided\nthe default value of `Both` is used.", + "operationId": "GetContentForRenditionOfRevisionOfDocument", + "tags": [ + "Document Content" + ], + "parameters": [ + { + "$ref": "#/components/parameters/documentId" + }, + { + "$ref": "#/components/parameters/revisionId" + }, + { + "$ref": "#/components/parameters/fileTypeId" + }, + { + "$ref": "#/components/parameters/pages" + }, + { + "$ref": "#/components/parameters/contentContext" + }, + { + "$ref": "#/components/parameters/height" + }, + { + "$ref": "#/components/parameters/width" + }, + { + "$ref": "#/components/parameters/fit" + }, + { + "$ref": "#/components/parameters/Accept" + }, + { + "$ref": "#/components/parameters/If-Match" + }, + { + "$ref": "#/components/parameters/Range" + } + ], + "responses": { + "200": { + "description": "Response containing document content.", + "headers": { + "Hyland-Item-Count": { + "$ref": "#/components/headers/Hyland-Item-Count" + } + }, + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/Binary-Content" + } + } + } + }, + "206": { + "description": "Response for content that consists of multiple parts.", + "headers": { + "Content-Range": { + "$ref": "#/components/headers/Content-Range" + }, + "Accept-Ranges": { + "$ref": "#/components/headers/Accept-Ranges" + }, + "ETag": { + "$ref": "#/components/headers/ETag" + } + }, + "content": { + "*/*": { + "schema": { + "$ref": "#/components/schemas/Binary-Content" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401-GENERIC-RESPONSE" + }, + "403": { + "$ref": "#/components/responses/403-GENERIC-RESPONSE" + }, + "404": { + "description": "Response for content when the document does not exist a requested\npage does not exist, or the user does not have rights to access.", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/Problem-Detail" + }, + "example": { + "type": "https://example.net/not-found", + "title": "Not Found", + "status": 404, + "detail": "The document does not exist, a requested page does not exist, or the user does not have rights to access.", + "instance": "/example-resource" + } + } + } + }, + "406": { + "$ref": "#/components/responses/406-GENERIC-RESPONSE" + }, + "412": { + "description": "Response for when a user is attempting to retrieve a byte range for\nspecific document and that document no longer exists or has been changed.", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/Problem-Detail" + }, + "example": { + "type": "https://example.net/precondition-failed", + "title": "Precondition Failed", + "status": 412, + "detail": "The request `ETag: db43771c6daa4f4da95e6d747483452c` is not valid.", + "instance": "/content" + } + } + } + }, + "416": { + "description": "Response for content when the specified range is not valid for the\ncontent or when the specified range requested is for more than one\npart.", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/Problem-Detail" + }, + "example": { + "type": "https://example.net/range-not-satisfiable", + "title": "Range not satisfiable", + "status": 416, + "detail": "The request Range bytes=1000-1100 is not valid.", + "instance": "/content" + } + } + } + } + } + }, + "head": { + "summary": "Preview document content.", + "description": "Consumers can make a `HEAD` request to see the response\nheaders without the response body. This allows previewing\nthe result of Content Negotiation with Content-Type,\nand Hyland-Item-Count headers.", + "operationId": "HeadContentForRenditionOfRevisionOfDocument", + "tags": [ + "Document Content" + ], + "parameters": [ + { + "$ref": "#/components/parameters/documentId" + }, + { + "$ref": "#/components/parameters/revisionId" + }, + { + "$ref": "#/components/parameters/fileTypeId" + }, + { + "$ref": "#/components/parameters/pages" + }, + { + "$ref": "#/components/parameters/contentContext" + }, + { + "$ref": "#/components/parameters/height" + }, + { + "$ref": "#/components/parameters/width" + }, + { + "$ref": "#/components/parameters/fit" + }, + { + "$ref": "#/components/parameters/Accept" + }, + { + "$ref": "#/components/parameters/If-Match" + }, + { + "$ref": "#/components/parameters/Range" + } + ], + "responses": { + "200": { + "description": "Preview the result of the document content.", + "headers": { + "Hyland-Item-Count": { + "$ref": "#/components/headers/Hyland-Item-Count" + } + } + }, + "206": { + "description": "Preview the result of content negotiation when the underlying\ncontent consists of multiple parts.", + "headers": { + "Content-Range": { + "$ref": "#/components/headers/Content-Range" + }, + "Accept-Ranges": { + "$ref": "#/components/headers/Accept-Ranges" + }, + "ETag": { + "$ref": "#/components/headers/ETag" + } + } + }, + "401": { + "$ref": "#/components/responses/401-GENERIC-RESPONSE" + }, + "403": { + "$ref": "#/components/responses/403-GENERIC-RESPONSE" + }, + "404": { + "description": "Response for content when the document does not exist, a requested\npage does not exist, or the user does not have rights to access.", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/Problem-Detail" + }, + "example": { + "type": "https://example.net/not-found", + "title": "Not Found", + "status": 404, + "detail": "The document does not exist, a requested page does not exist, or the user does not have rights to access.", + "instance": "/example-resource" + } + } + } + }, + "406": { + "$ref": "#/components/responses/406-GENERIC-RESPONSE" + }, + "412": { + "description": "Response for when a user is attempting to retrieve a byte range for\nspecific document and that document no longer exists or has been changed.", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/Problem-Detail" + }, + "example": { + "type": "https://example.net/precondition-failed", + "title": "Precondition Failed", + "status": 412, + "detail": "The request ETag: db43771c6daa4f4da95e6d747483452c is not valid.", + "instance": "/content" + } + } + } + }, + "416": { + "description": "Response for content when the specified range is not valid for the\ncontent or when the specified range requested is for more than one\npart.", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/Problem-Detail" + }, + "example": { + "type": "https://example.net/range-not-satisfiable", + "title": "Range not satisfiable", + "status": 416, + "detail": "The request Range bytes=1000-1100 is not valid.", + "instance": "/content" + } + } + } + } + } + } + }, + "/documents/queries": { + "post": { + "summary": "Submits a document query, with the provided search constraints.", + "description": "Submits a document query, with the provided search constraints.\n\nIf `Hyland-Include-Item-Count` header is set to true, the estimated number\nof documents that will be returned by the query will be included on the\nresponse in the `Hyland-Item-Count` header.\nEstimated because the number may vary in accuracy based on how the\nquery is formed, any filtering that takes places after the query is run, and\nif there are any external constraints.", + "operationId": "PostDocumentQuery", + "tags": [ + "Document Queries" + ], + "parameters": [ + { + "$ref": "#/components/parameters/Hyland-Include-Item-Count" + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/QueryInformation" + } + } + } + }, + "responses": { + "201": { + "description": "Query created. The location of the results of the query results\nis given in the Location header.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/QueriesPostResponse" + } + } + }, + "headers": { + "Location": { + "$ref": "#/components/headers/Location" + }, + "Hyland-Item-Count": { + "$ref": "#/components/headers/Hyland-Item-Count" + } + } + }, + "400": { + "$ref": "#/components/responses/400-GENERIC-RESPONSE" + }, + "401": { + "$ref": "#/components/responses/401-GENERIC-RESPONSE" + } + } + } + }, + "/documents/queries/{queryId}/results": { + "get": { + "summary": "Returns the documents results of a query.", + "description": "Returns the documents results of a query.", + "operationId": "GetResultCollectionForDocumentQuery", + "tags": [ + "Document Queries" + ], + "parameters": [ + { + "$ref": "#/components/parameters/queryId" + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/QueryResults" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401-GENERIC-RESPONSE" + }, + "404": { + "$ref": "#/components/responses/404-GENERIC-RESPONSE" + } + } + } + }, + "/documents/queries/{queryId}/columns": { + "get": { + "summary": "Returns the display column configuration of a query.", + "description": "Returns the display column configuration of a query.", + "operationId": "GetColumnCollectionForDocumentQuery", + "tags": [ + "Document Queries" + ], + "parameters": [ + { + "$ref": "#/components/parameters/queryId" + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DisplayColumnConfigurationCollection" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401-GENERIC-RESPONSE" + }, + "404": { + "$ref": "#/components/responses/404-GENERIC-RESPONSE" + } + } + } + }, + "/documents/uploads": { + "post": { + "summary": "Prepare the staging area to start the upload process.", + "description": "Prepares the staging area to start the upload.\nReturns a reference to the file being uploaded.", + "operationId": "PostFileUploadMetadata", + "tags": [ + "File Upload" + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UploadFileMetaData" + } + } + } + }, + "responses": { + "201": { + "description": "Upload staging area created.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UploadsPostResponse" + } + } + }, + "headers": { + "Location": { + "$ref": "#/components/headers/Location" + } + } + }, + "400": { + "description": "Invalid or missing file metadata. Such as missing extension\nor file or file part size that is less than or equal to zero.", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/Problem-Detail" + }, + "example": { + "type": "https://example.net/bad-request", + "title": "Bad Request", + "status": 400, + "detail": "File Size cannot be negative.", + "instance": "/example-resource" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401-GENERIC-RESPONSE" + } + } + } + }, + "/documents/uploads/{uploadId}": { + "put": { + "summary": "Upload file data.", + "description": "Upload file to a location identified by the unique file reference.\nThis end-point can be called multiple times, to upload multiple files.\nEach file will have it's own unique reference.\nWhen uploading a single file as chunks, upload it to the same file reference.", + "operationId": "PutFileUploadById", + "tags": [ + "File Upload" + ], + "parameters": [ + { + "$ref": "#/components/parameters/uploadId" + }, + { + "$ref": "#/components/parameters/filePart" + } + ], + "requestBody": { + "required": true, + "content": { + "application/octet-stream": { + "schema": { + "$ref": "#/components/schemas/Binary-Content" + } + } + } + }, + "responses": { + "204": { + "description": "Uploaded part has been successfully stored." + }, + "400": { + "description": "File part number is provided in incorrect format", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/Problem-Detail" + }, + "example": { + "type": "https://example.net/bad-request", + "title": "Bad Request", + "status": 400, + "detail": "File part number is provided in incorrect format", + "instance": "/example-resource" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401-GENERIC-RESPONSE" + }, + "404": { + "$ref": "#/components/responses/404-GENERIC-RESPONSE" + } + } + }, + "delete": { + "summary": "Delete file corresponding to the given uploadId", + "description": "Deletes an uploaded file corresponding to the given uploadId.\nThis can be used to cancel the upload.", + "operationId": "DeleteFileUploadById", + "tags": [ + "File Upload" + ], + "parameters": [ + { + "$ref": "#/components/parameters/uploadId" + } + ], + "responses": { + "204": { + "description": "File has been deleted." + }, + "401": { + "$ref": "#/components/responses/401-GENERIC-RESPONSE" + } + } + } + }, + "/notes/{noteId}": { + "get": { + "tags": [ + "Notes" + ], + "summary": "Get the information of a given note.", + "operationId": "GetNoteByNoteId", + "parameters": [ + { + "name": "noteId", + "in": "path", + "description": "The identifier of the note.", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NoteModel" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401-GENERIC-RESPONSE" + }, + "403": { + "description": "The user does not have rights to view this note.", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/Problem-Detail" + }, + "example": { + "type": "https://example.net/forbidden", + "title": "Forbidden", + "status": 403, + "detail": "Do not have rights to view this note.", + "instance": "/example-resource" + } + } + } + }, + "404": { + "$ref": "#/components/responses/404-GENERIC-RESPONSE" + } + } + }, + "patch": { + "tags": [ + "Notes" + ], + "summary": "Update the information of a given note.", + "operationId": "PatchNoteByNoteId", + "parameters": [ + { + "name": "noteId", + "in": "path", + "description": "Id of the note to update.", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "description": "Model containing the note data to update.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateNotePropertiesModel" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "The note was updated.", + "content": { + "application/json": { + "schema": { + "properties": { + "noteId": { + "description": "Identifier of the note.", + "type": "string" + } + } + } + } + } + }, + "400": { + "description": "The body of the request is not present or the note type of the note is unsupported.", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/Problem-Detail" + }, + "example": { + "type": "https://example.net/bad-request", + "title": "Bad Request", + "status": 400, + "detail": "NoteType ID is a staple. Staples and back staples are currently unsupported Note Types.\"", + "instance": "/example-resource" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401-GENERIC-RESPONSE" + }, + "403": { + "description": "The user does not have rights to update the note or\nthe document lock prevents the note from being updated or\nthe noteType is not movable.", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/Problem-Detail" + }, + "example": { + "type": "https://example.net/forbidden", + "title": "Forbidden", + "status": 403, + "detail": "Do not have rights to update the note.", + "instance": "/example-resource" + } + } + } + }, + "404": { + "$ref": "#/components/responses/404-GENERIC-RESPONSE" + }, + "422": { + "description": "The note type is not movable.", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/Problem-Detail" + }, + "example": { + "type": "https://example.net/unprocessable", + "title": "Unprocessable Request", + "status": 422, + "detail": "Cannot change position, size or page number of Note ID on document ID because the noteType ID is not movable." + } + } + } + } + } + }, + "delete": { + "tags": [ + "Notes" + ], + "summary": "Delete a single note.", + "operationId": "DeleteNoteByNoteId", + "parameters": [ + { + "name": "noteId", + "in": "path", + "description": "Id of the note to delete.", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "204": { + "description": "Note was deleted without any issues." + }, + "400": { + "description": "The note is a note type that is unsupported.", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/Problem-Detail" + }, + "example": { + "type": "https://example.net/bad-request", + "title": "Bad Request", + "status": 400, + "detail": "NoteType ID is a staple. Staples and back staples are currently unsupported Note Types.\"", + "instance": "/example-resource" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401-GENERIC-RESPONSE" + }, + "403": { + "description": "The user does not have rights to delete the note or\nthe document lock prevents the note from being deleted.", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/Problem-Detail" + }, + "example": { + "type": "https://example.net/forbidden", + "title": "Forbidden", + "status": 403, + "detail": "Do not have rights to delete the note.", + "instance": "/example-resource" + } + } + } + }, + "404": { + "$ref": "#/components/responses/404-GENERIC-RESPONSE" + } + } + } + }, + "/note-types": { + "get": { + "summary": "Get note type metadata for all note types.", + "description": "Get the note type metadata for all note types in\nthe system.", + "operationId": "GetNoteTypeCollection", + "tags": [ + "Note Types" + ], + "parameters": [ + { + "in": "query", + "name": "ids", + "schema": { + "type": "array", + "items": { + "type": "string" + } + }, + "description": "The unique identifiers of note types. Multiple values are supported and in a URL should be joined using the \"&\" character. Ex:?id=102&id=103" + }, + { + "$ref": "#/components/parameters/Accept-Language" + } + ], + "responses": { + "200": { + "description": "OK", + "headers": { + "Content-Language": { + "$ref": "#/components/headers/Content-Language" + } + }, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NoteTypeCollectionModel" + } + } + } + }, + "400": { + "$ref": "#/components/responses/400-COLLECTIONPARAMETERS-RESPONSE" + }, + "401": { + "$ref": "#/components/responses/401-GENERIC-RESPONSE" + } + } + } + }, + "/note-types/{noteTypeId}": { + "get": { + "summary": "Get note type metadata.", + "description": "Get note type metadata for the specified note type id.", + "operationId": "GetNoteTypeById", + "tags": [ + "Note Types" + ], + "parameters": [ + { + "name": "noteTypeId", + "in": "path", + "description": "The identifier of the note type.", + "required": true, + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/Accept-Language" + } + ], + "responses": { + "200": { + "description": "OK", + "headers": { + "Content-Language": { + "$ref": "#/components/headers/Content-Language" + } + }, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NoteTypeModel" + } + } + } + }, + "401": { + "$ref": "#/components/responses/401-GENERIC-RESPONSE" + }, + "403": { + "$ref": "#/components/responses/403-GENERIC-RESPONSE" + }, + "404": { + "$ref": "#/components/responses/404-GENERIC-RESPONSE" + } + } + } + } + }, + "components": { + "securitySchemes": { + "Bearer": { + "type": "http", + "scheme": "bearer" + } + }, + "schemas": { + "FileTypeCollection": { + "description": "An array of file types.", + "properties": { + "items": { + "description": "An array of file types.", + "type": "array", + "items": { + "$ref": "#/components/schemas/FileType" + } + } + } + }, + "FileType": { + "description": "File type metadata.", + "properties": { + "id": { + "description": "The unique identifier of the file type.", + "type": "string" + }, + "name": { + "description": "The localized name of the file type.", + "type": "string" + }, + "systemName": { + "description": "The untranslated system name of the file type.\nLocalization is controlled by the Accept-Language header and\nthe language of the response is represented by the Content-Language\nheader.", + "type": "string" + } + } + }, + "DefaultUploadFileType": { + "description": "File type metadata for default upload.", + "properties": { + "id": { + "description": "The unique identifier of the file type.", + "type": "string" + } + } + }, + "KeywordTypeGroupCollectionModel": { + "description": "A representation of keyword type information for a document type", + "properties": { + "keywordOptions": { + "$ref": "#/components/schemas/KeywordOptions" + }, + "items": { + "description": "An array of keyword types grouped by the keyword type group they belong to.", + "type": "array", + "items": { + "$ref": "#/components/schemas/KeywordTypeGroupOnDocumentType" + } + } + } + }, + "KeywordOptions": { + "description": "A group containing keyword type options in relation to the document type\nthey belong to.", + "properties": { + "requiredForArchivalKeywordTypeIds": { + "description": "An array of required keyword type ids for a document to be stored.", + "type": "array", + "items": { + "type": "string" + } + }, + "requiredForRetrievalKeywordTypeIds": { + "description": "An array of required keyword type ids for a document to be retrieved.", + "type": "array", + "items": { + "type": "string" + } + }, + "readOnlyKeywordTypeIds": { + "description": "An array of read only keyword type ids for a document type.", + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "KeywordTypeGroupOnDocumentType": { + "description": "Keyword type group metadata.", + "properties": { + "id": { + "type": "string", + "description": "The unique identifier of the keyword type group. Omitted id indicates Standalone Keyword Group." + }, + "keywordTypes": { + "description": "An array of keyword types.", + "type": "array", + "items": { + "$ref": "#/components/schemas/KeywordTypeOnDocumentType" + } + } + } + }, + "KeywordTypeOnDocumentType": { + "description": "Keyword type metadata.", + "properties": { + "id": { + "description": "The unique identifier of the keyword type.", + "type": "string" + } + }, + "required": [ + "id" + ] + }, + "QueryInformation": { + "description": "Represents the information required to execute a query.", + "type": "object", + "properties": { + "queryType": { + "description": "An array of query types.", + "type": "array", + "items": { + "$ref": "#/components/schemas/QueryType" + } + }, + "maxResults": { + "description": "Limits the number of results that the execution of\na query can create.", + "type": "integer", + "format": "int32" + }, + "queryKeywordCollection": { + "description": "An array of keywords used to execute a query.", + "type": "array", + "items": { + "$ref": "#/components/schemas/QueryKeyword" + } + }, + "documentDateRangeCollection": { + "description": "An array of date ranges used to execute a query.", + "type": "array", + "items": { + "$ref": "#/components/schemas/DateRange" + } + }, + "userDisplayColumns": { + "description": "An array of user defined display columns. If the\nquery already has display columns defined, the predefined\ndisplay columns will be ignored and the user defined\ndisplay columns will be used.", + "type": "array", + "items": { + "$ref": "#/components/schemas/UserDefinedDisplayColumn" + } + } + } + }, + "QueryType": { + "type": "object", + "required": [ + "type", + "ids" + ], + "description": "The type of query to execute. DocumentType, DocumentTypeGroup, and CustomQuery type queries are supported.\nSee the /custom-queries documentation for which CustomQuery types are supported.", + "properties": { + "type": { + "description": "The type of query to execute. DocumentType, DocumentTypeGroup, and CustomQuery type queries are supported.\nSee the /custom-queries documentation for which CustomQuery types are supported.", + "type": "string", + "enum": [ + "CustomQuery", + "DocumentType", + "DocumentTypeGroup" + ] + }, + "ids": { + "description": "An array of ids for the query", + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "QueryKeyword": { + "type": "object", + "required": [ + "typeId", + "value" + ], + "description": "Represents a keyword required to execute a query.", + "properties": { + "typeId": { + "description": "The keyword type Id for the keyword.", + "type": "string" + }, + "value": { + "description": "The keyword value.", + "type": "string" + }, + "operator": { + "description": "Represents the operator for the keyword value of\nthis query keyword. Defaults to Equal if not present.", + "type": "string", + "enum": [ + "Equal", + "LessThan", + "GreaterThan", + "LessThanEqual", + "GreaterThanEqual", + "NotEqual", + "Literal" + ] + }, + "relation": { + "description": "Represents the relation of this query keyword to\nother query keywords. Defaults to And if not present.", + "type": "string", + "enum": [ + "And", + "Or", + "To" + ] + } + } + }, + "UserDefinedDisplayColumn": { + "type": "object", + "description": "Represents a DisplayColumn that the user has defined for this query.", + "properties": { + "keywordTypeId": { + "description": "The keyword type Id for the DisplayColumn. If the\nDisplayColumn is not of type Keyword, this property can be\nomitted and only the displayColumnType is required.", + "type": "string" + }, + "displayColumnType": { + "description": "The attribute type for the Display Column.", + "type": "string", + "enum": [ + "Keyword", + "DocumentId", + "DocumentName", + "DocumentDate", + "ArchivalDate", + "AuthorId", + "Batch", + "DocumentTypeGroup", + "DocumentTypeName" + ] + } + } + }, + "CurrencyFormat": { + "description": "Currency format metadata", + "properties": { + "id": { + "description": "The unique identifier of the currency format. Will be set to 'default' if\ncurrency is configured to use Workstation Regional Settings.", + "type": "string" + }, + "name": { + "description": "The name of the currency format.", + "type": "string" + }, + "currencySymbol": { + "description": "The symbol to represent the currency. For instance, the '$' in $1,000.00.", + "type": "string" + }, + "decimalPlaces": { + "description": "The number of decimal places represented after the decimal point.", + "type": "integer", + "format": "int64" + }, + "decimalSymbol": { + "description": "The symbol to represent the decimal place. For instance, the '.' in 100.00.", + "type": "string" + }, + "groupingDigits": { + "description": "The number of digits by which to group. Also the number of digits between grouping symbols. For instance, in\n$1,000,000.00 the number of grouping digits is 3.", + "type": "integer", + "format": "int64" + }, + "groupingSymbol": { + "description": "The symbol to represent the grouping of digits. For instance, the ',' in 1,000,000.00.", + "type": "string" + }, + "isoCurrencyName": { + "description": "The ISO name for the currency format if one exists.", + "type": "string" + }, + "hasCurrencySymbol": { + "description": "A value indicating whether the format allows for a currency symbols.", + "type": "boolean" + }, + "hasGroupSeparator": { + "description": "A value indicating whether a grouping symbol is specified. Ex. $9,999.00.", + "type": "boolean" + }, + "hasLeadingZero": { + "description": "A value indicating whether there is a leading zero.", + "type": "boolean" + }, + "hasMinusSign": { + "description": "A value indicating whether there is a a minus sign. If true, negativity is indicated with a minus sign \"-\". If\nfalse, negativity is indicated with parentheses around the value.", + "type": "boolean" + }, + "hasWhitespace": { + "description": "A value indicating whether there is a space between the currency symbol and positive values\nEx. $ 9.99\nEx. 9.99 $", + "type": "boolean" + }, + "hasWhitespaceOnNegative": { + "description": "A value indicating whether there is a space between the currency symbol and negative values. Ex. $ -9.99 Ex. -9.99 $.", + "type": "boolean" + }, + "isMinusSignAfter": { + "description": "A value indicating whether the minus is after the number. Only respected if hasMinusSign is also true.", + "type": "boolean" + }, + "isSymbolAfter": { + "description": "A value indicating whether the currency symbol goes after positive values\nEx. 9.99$.", + "type": "boolean" + }, + "isSymbolAfterOnNegative": { + "description": "A value indicating whether the currency symbol comes after the decimal value. Ex. 9.99$-.", + "type": "boolean" + }, + "isSymbolInsideNegative": { + "description": "A value indicating whether the Symbol goes inside the negative If MinusSign is false, SymbolInsideNegative is\nautomatically on. Ex. ($9.99), not $(9.99) If true, the currency symbol will come before the minus sign. Ex.\n9.99$- If false, the currency symbol will go after the minus sign. Ex. 9.99-$", + "type": "boolean" + } + } + }, + "CurrencyFormatCollection": { + "description": "An array of currency formats.", + "properties": { + "items": { + "description": "An array of currency formats.", + "type": "array", + "items": { + "$ref": "#/components/schemas/CurrencyFormat" + } + } + } + }, + "CustomQuery": { + "description": "Custom query metadata", + "properties": { + "id": { + "description": "The unique identifier of the custom query.", + "type": "string" + }, + "name": { + "description": "The localized name of the custom query object", + "type": "string" + }, + "systemName": { + "description": "The untranslated system name of the custom query.\nLocalization is controlled by the Accept-Language header and\nthe language of the response is represented by the Content-Language\nheader.", + "type": "string" + }, + "instructions": { + "description": "Information describing the usage and/or purpose of the custom query", + "type": "string" + }, + "dateOptions": { + "$ref": "#/components/schemas/CustomQueryDateSearchOptions" + }, + "queryType": { + "description": "The type of this custom query.\n\n`DocumentType` is a query configured to limit the results to preselected document type(s).\n\n`DocumentTypeGroup` is a query configured to limit the results to preselected document type group(s).\n\n`Keyword` is a query configured to limit the results to preselected keyword type(s).\n\n`SQL` is a query configured with a SQL statement.", + "type": "string", + "enum": [ + "DocumentType", + "DocumentTypeGroup", + "Keyword", + "SQL" + ] + } + } + }, + "CustomQueryDateSearchOptions": { + "description": "Date options set on a custom query", + "properties": { + "dateSearch": { + "description": "Date search option on the custom query", + "type": "string", + "enum": [ + "NoDate", + "SingleDate", + "DateRange" + ] + }, + "defaultDateRange": { + "$ref": "#/components/schemas/CustomQueryDefaultDateRange" + } + } + }, + "CustomQueryDefaultDateRange": { + "description": "Represents default date set on the custom query. This is set when date search option is set to 'SingleDate' or 'DateRange'.", + "properties": { + "start": { + "description": "Default start date.\nformat - date", + "type": "string", + "format": "date", + "example": "2018-02-21" + }, + "end": { + "description": "Default end date.\nThis is equal to `defaultStartDate` if single date option is set as default.\nformat - date", + "type": "string", + "format": "date", + "example": "2018-02-21" + } + } + }, + "CustomQueryCollection": { + "description": "An array of custom queries.", + "properties": { + "items": { + "description": "An array of custom queries.", + "type": "array", + "items": { + "$ref": "#/components/schemas/CustomQuery" + } + } + } + }, + "CustomQueryKeywordTypeCollection": { + "description": "A lightweight array of keyword types for custom queries.", + "properties": { + "items": { + "description": "An array of keyword type identifiers.", + "type": "array", + "items": { + "$ref": "#/components/schemas/CustomQueryKeywordType" + } + } + } + }, + "CustomQueryKeywordType": { + "description": "Keyword type identifier", + "properties": { + "id": { + "description": "The unique identifier of the keyword type", + "type": "string" + } + } + }, + "DateRange": { + "description": "Represents a range of dates.", + "properties": { + "start": { + "description": "The starting date of the date range.\nIf no start date is present, a default minimum date will be used.", + "type": "string" + }, + "end": { + "description": "The ending date of the date range.\nIf no end date is present, a default maximum date will be used.", + "type": "string" + } + } + }, + "QueriesPostResponse": { + "description": "Query handle information corresponding to a query.", + "type": "object", + "properties": { + "id": { + "description": "Unique handle for the query", + "type": "string" + } + } + }, + "QueryResults": { + "description": "Represents the result of a query", + "properties": { + "items": { + "description": "An array of Documents returned from executing a query.", + "type": "array", + "items": { + "$ref": "#/components/schemas/DocumentResult" + } + } + } + }, + "DocumentResult": { + "description": "Document metadata.", + "properties": { + "id": { + "description": "The unique identifier of the document.", + "type": "string" + }, + "displayColumns": { + "description": "An array of Display columns returned from executing a query.", + "type": "array", + "items": { + "$ref": "#/components/schemas/DisplayColumn" + } + } + } + }, + "DisplayColumn": { + "description": "Display column values.", + "properties": { + "index": { + "description": "Index representing the Display column configuration\nassociated with this Display column.", + "type": "string" + }, + "values": { + "description": "An array of values for the Display Column.", + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "DisplayColumnConfigurationCollection": { + "description": "Represents a collection of configurations of\na Display Column.", + "properties": { + "items": { + "description": "An array of Display Column Configurations returned from executing a query.", + "type": "array", + "items": { + "$ref": "#/components/schemas/DisplayColumnConfiguration" + } + } + } + }, + "DisplayColumnConfiguration": { + "description": "Represents the configuration of a Display Column.", + "properties": { + "index": { + "description": "Index representing the Display column configuration\nassociated with this Display column.", + "type": "integer", + "format": "int32" + }, + "type": { + "description": "Describes the type of Display Column. If the value is `Keyword` than the `keywordTypeId` will be populated as well.", + "type": "string", + "enum": [ + "Keyword", + "Attribute" + ] + }, + "heading": { + "description": "The Header value for the Display Column.", + "type": "string" + }, + "keywordTypeId": { + "description": "The Keyword Type associated with the Display Column.\nOnly necessary if the Display Column Type is \"Keyword\".", + "type": "string" + }, + "dataType": { + "description": "The Data Type of the value of the display column.\nThis is only necessary if the Display Column Type\nis not \"Keyword\". For Keyword Display Columns,\ndata type can be retrieved from the Keyword Type.", + "type": "string", + "enum": [ + "Numeric9", + "Numeric20", + "Alphanumeric", + "Currency", + "SpecificCurrency", + "Date", + "DateTime", + "FloatingPoint" + ] + } + } + }, + "KeywordValueRequest": { + "description": "A list of keyword values. Keyword values are represented as strings\nand blank keyword values are represented by an empty list of values.", + "properties": { + "value": { + "description": "Depending on the underlying keyword type datatype, the specific\nformat of the underlying string adheres to the following formatting\nrules.\n\nValues are normalized and locale specific formatting is not applied.\nFormatting to a specific currency is not applied. Consumers can\napply this formatting through libraries and client locale\npreferences. Determining data type or currency format\nis retrieved from other metadata resources.\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Data Type Format Example
Numeric9 A whole positive number up to 9 digits, or\n negative number up to 8 digits without commas.123456789
-12345678
Numeric20 A whole number up to 20 digits without\n commas, or a negative number with 19 digits without commas.12345678901234567890
-1234567890123456789
Alphanumeric A string value. ABC 123
Currency Positive or negative numeric value with a\n whole number and decimal portion separated by a period.123456.00
SpecificCurrency Positive or negative numeric value\n with a whole number and decimal portion separated by a\n period. 123456.00
Date ISO-8601\n Date 2018-02-21
DateTime ISO-8601 Date and\n time without time zone. 2018-02-21T21:17:28
FloatingPoint Positive or negative numeric value\n with a whole number and decimal portion separated by a\n period. 123456.091231
", + "type": "string" + }, + "currencyFormatId": { + "description": "The Currency Format Id if the Keyword Type's data type is Specific Currency.", + "type": "string" + } + } + }, + "KeywordValueResponse": { + "allOf": [ + { + "$ref": "#/components/schemas/KeywordValueRequest" + } + ], + "properties": { + "formattedValue": { + "description": "A Keyword Value that has been formatted using locale specific formatting\nand Keyword Masking settings.", + "type": "string" + } + } + }, + "KeywordRequest": { + "description": "A keyword value and information about the related keyword type.", + "properties": { + "typeId": { + "description": "The unique identifier of the keyword type for this keyword value.", + "type": "string" + }, + "values": { + "description": "A List of keyword values that contain various formats of the keyword\nvalue.", + "type": "array", + "items": { + "$ref": "#/components/schemas/KeywordValueRequest" + } + } + } + }, + "KeywordResponse": { + "description": "A keyword value and information about the related keyword type.", + "properties": { + "typeId": { + "description": "The unique identifier of the keyword type for this keyword value.", + "type": "string" + }, + "values": { + "description": "A List of keyword values that contain various formats of the keyword\nvalue.", + "type": "array", + "items": { + "$ref": "#/components/schemas/KeywordValueResponse" + } + } + } + }, + "KeywordGroupRequest": { + "description": "A group of keyword values.", + "properties": { + "typeGroupId": { + "description": "The keyword type group identifier. This field will be omitted when\nnot associated with a `SingleInstance` or `MultiInstance` type\ngroup.", + "type": "string" + }, + "groupId": { + "description": "The identifier for the group of keywords. This field will be omitted\nwhen not associated with a `MultiInstance` type group. This field must be omitted\nif creating a new instance of a `MultiInstance` type group.", + "type": "string" + }, + "instanceId": { + "description": "The identifier used to track restricted keyword data and assign it to\nan instance of a 'MultiInstance' type group. This field is required for\nrestricted keyword values existing on a 'MultiInstance' type group and is provided\nby the GET Keywords on a document or GET Default Keywords response.", + "type": "string" + }, + "keywords": { + "description": "An array of keywords in the group.", + "type": "array", + "items": { + "$ref": "#/components/schemas/KeywordRequest" + } + } + }, + "required": [ + "keywords" + ] + }, + "KeywordGroupResponse": { + "description": "A group of keyword values.", + "properties": { + "typeGroupId": { + "description": "The keyword type group identifier. This field will be omitted when\nnot associated with a `SingleInstance` or `MultiInstance` type\ngroup.", + "type": "string" + }, + "groupId": { + "description": "The identifier for the group of keywords. This field will be omitted\nwhen not associated with a `MultiInstance` type group. This field must be omitted\nif creating a new instance of a `MultiInstance` type group.", + "type": "string" + }, + "instanceId": { + "description": "The identifier used to track restricted keyword data and assign it to\nan instance of a 'MultiInstance' type group.", + "type": "string" + }, + "keywords": { + "description": "An array of keywords in the group.", + "type": "array", + "items": { + "$ref": "#/components/schemas/KeywordResponse" + } + } + }, + "required": [ + "keywords" + ] + }, + "KeywordCollectionRequest": { + "description": "Instance data for keywords on a document", + "properties": { + "keywordGuid": { + "description": "Guid string to ensure integrity of restricted keyword values.", + "type": "string" + }, + "items": { + "description": "An array of keywords grouped by the keyword group they belong to.", + "type": "array", + "items": { + "$ref": "#/components/schemas/KeywordGroupRequest" + } + } + }, + "required": [ + "keywordGuid", + "items" + ] + }, + "KeywordCollectionResponse": { + "description": "Instance data for keywords on a document", + "properties": { + "keywordGuid": { + "description": "Guid string to ensure integrity of restricted keyword values.", + "type": "string" + }, + "items": { + "description": "An array of keywords grouped by the keyword group they belong to.", + "type": "array", + "items": { + "$ref": "#/components/schemas/KeywordGroupResponse" + } + } + }, + "required": [ + "keywordGuid", + "items" + ] + }, + "DocumentCollection": { + "description": "A list of documents.", + "properties": { + "items": { + "description": "An array of documents.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Document" + } + } + } + }, + "Document": { + "description": "Document metadata.", + "properties": { + "id": { + "description": "The unique identifier of the document.", + "type": "string" + }, + "typeId": { + "description": "The unique identifier of the document type for this document.", + "type": "string" + }, + "name": { + "description": "The auto name string for this document.", + "type": "string" + }, + "createdByUserId": { + "description": "The unique identifier of the user that created this document.", + "type": "string" + }, + "storedDate": { + "description": "The date/time this document was stored.\nISO-8601 Date and\n time without time zone.", + "type": "string", + "example": "2018-02-21T21:17:28" + }, + "documentDate": { + "description": "The document date.", + "type": "string", + "format": "date", + "example": "2018-02-21" + }, + "status": { + "description": "The document status of Active, Deleted or Inactive.", + "type": "string", + "enum": [ + "Active", + "Deleted", + "Inactive" + ] + }, + "captureProperties": { + "description": "Meta-data information about the document that was brought in via scanning.", + "$ref": "#/components/schemas/CaptureProperties" + } + } + }, + "DocumentHistory": { + "properties": { + "items": { + "description": "An array of history items.", + "type": "array", + "items": { + "$ref": "#/components/schemas/HistoryItem" + } + } + } + }, + "HistoryItem": { + "properties": { + "action": { + "description": "The action taken on the document", + "type": "string" + }, + "logDate": { + "description": "The date/time this document action was logged.\nISO-8601 Date and\n time with milliseconds and without time zone.", + "type": "string", + "example": "2022-08-01T07:36:13.007" + }, + "message": { + "description": "The logged message.", + "type": "string" + }, + "userId": { + "description": "The user under which action was taken.", + "type": "string" + } + } + }, + "DocumentPatchRequest": { + "description": "Metadata that can be modified on a document.", + "properties": { + "documentDate": { + "description": "The document date.", + "type": "string", + "format": "date", + "example": "2018-02-21" + } + } + }, + "CaptureProperties": { + "description": "Meta-data information about the document that was brought in via scanning.", + "properties": { + "unidentified": { + "description": "Indicates if the document is unidentified.", + "type": "boolean" + }, + "reviewStatus": { + "description": "The review status of NeedsAttention, NeedsRescan or NeedsManagerAttention. This should be used in conjunction with the `unidentified` property.", + "type": "string", + "enum": [ + "NeedsAttention", + "NeedsRescan", + "NeedsManagerAttention" + ] + } + } + }, + "DocumentsPostResponse": { + "description": "Document handle information corresponding to a document.", + "type": "object", + "properties": { + "id": { + "description": "Unique handle for the document", + "type": "string" + } + } + }, + "MatchedDocumentCollectionResponse": { + "description": "List of matching documents along with the options available for each when archiving into a Revisable/Renditionable document type.", + "properties": { + "canAddAsNew": { + "description": "Boolean to indicate if the document can be stored as a new document.\nTo continue adding the document as a new document, a POST request to '/documents' end-point must be made with 'storeAsNew' property set to 'true' in 'DocumentArchiveProperties'.", + "type": "boolean" + }, + "items": { + "description": "List of matching documents along with the options available for each.", + "type": "array", + "items": { + "$ref": "#/components/schemas/MatchedDocument" + } + } + } + }, + "MatchedDocument": { + "description": "A Revisable/Renditionable document that matched along with the options available to archive.", + "type": "object", + "properties": { + "id": { + "description": "Id of the Revisable/Renditionable document that matched.", + "type": "string" + }, + "canAddAsRevision": { + "description": "Boolean indicating if the document can be added as a revision.\nTo add the document as a new revision, a POST request to '/documents/{id}/revisions' must me made.", + "type": "boolean" + }, + "canAddAsRendition": { + "description": "Boolean indicating if the document can be added as a rendition.\nTo add the document as a rendition, a POST request to '/documents/{id}/revisions/latest' must be made.", + "type": "boolean" + } + } + }, + "RevisionsPostResponse": { + "description": "Id of the newly created revision.", + "properties": { + "revisionId": { + "description": "Latest revision Id.", + "type": "string" + } + } + }, + "RenditionsPostResponse": { + "description": "Id of the newly created rendition, which is the File Type Id.", + "properties": { + "fileTypeId": { + "description": "File Type Id.", + "type": "string" + } + } + }, + "DocumentType": { + "description": "Document Type metadata.", + "properties": { + "id": { + "description": "The unique identifier of the document type.", + "type": "string" + }, + "name": { + "description": "The localized name of the document type.", + "type": "string" + }, + "systemName": { + "description": "The untranslated system name of the document type.\nLocalization is controlled by the Accept-Language header and\nthe language of the response is represented by the Content-Language\nheader.", + "type": "string" + }, + "defaultFileTypeId": { + "description": "The unique identifier of the default file format for the document type", + "type": "string" + }, + "documentDateDisplayName": { + "description": "The document date display name setting for the document type", + "type": "string" + }, + "autofillKeywordSetId": { + "description": "The Id of the autofill keyset associated with this document type, if any.", + "type": "string" + }, + "documentTypeGroupId": { + "description": "The id of the document type group the document type is assigned to.", + "type": "string" + }, + "revisionRenditionProperties": { + "description": "Revision/Rendition properties of the document type.", + "type": "object", + "$ref": "#/components/schemas/RevisionRenditionProperties" + } + } + }, + "RevisionRenditionProperties": { + "description": "Revision/Rendition settings of the document type.", + "properties": { + "revisable": { + "description": "Indicates if the document type is revisable", + "type": "boolean" + }, + "renditionable": { + "description": "Indicates if the document is renditionable", + "type": "boolean" + }, + "commentSettings": { + "description": "Comment settings on the document type", + "type": "object", + "$ref": "#/components/schemas/DocumentTypeCommentSettings" + } + } + }, + "DocumentTypeCommentSettings": { + "description": "Settings for comments on the document type.", + "properties": { + "allowComments": { + "description": "True if the document type is set to \"Allow Comments\", false otherwise.", + "type": "boolean" + }, + "forceComment": { + "description": "True if the document type is set to \"Force Comment\".", + "type": "boolean" + }, + "firstRevisionNoComment": { + "description": "True if document type is set to \"Save first revision with no comment\"", + "type": "boolean" + } + } + }, + "DocumentTypeCollection": { + "description": "An array of document types.", + "properties": { + "items": { + "description": "An array of document types.", + "type": "array", + "items": { + "$ref": "#/components/schemas/DocumentType" + } + } + } + }, + "DocumentTypeGroup": { + "description": "Document Type Group metadata", + "properties": { + "id": { + "description": "The unique identifier of the document type group.", + "type": "string" + }, + "name": { + "description": "The localized name of the document type group.", + "type": "string" + }, + "systemName": { + "description": "The untranslated system name of the document type group.\nLocalization is controlled by the Accept-Language header and\nthe language of the response is represented by the Content-Language\nheader.", + "type": "string" + } + } + }, + "DocumentTypeGroupCollection": { + "description": "An array of document type groups.", + "properties": { + "items": { + "description": "An array of document type groups", + "type": "array", + "items": { + "$ref": "#/components/schemas/DocumentTypeGroup" + } + } + } + }, + "DocumentTypeGroupDocumentType": { + "description": "Document type identifier", + "properties": { + "id": { + "description": "The unique identifier of the document type", + "type": "string" + } + } + }, + "DocumentTypeGroupDocumentTypeCollection": { + "description": "A lightweight array of document types associated with a document type group", + "properties": { + "items": { + "description": "An array of document type identifiers.", + "type": "array", + "items": { + "$ref": "#/components/schemas/DocumentTypeGroupDocumentType" + } + } + } + }, + "DocumentReindexProperties": { + "description": "Metadata that can be modified on a document.", + "properties": { + "targetDocumentTypeId": { + "description": "The document type id to be reindexed into.", + "type": "string" + }, + "targetFileTypeId": { + "description": "The file type id to be reindexed into. This is only necessary if attempting to change the\nfile type ID of the default rendition of the latest revision.", + "type": "string" + }, + "storeAsNew": { + "description": "Boolean indicating if the document should be reindexed as specified.\nThis should be used in conjunction with a Revisable/Renditionable document type to\nindicate that the document should be reindexed as specified regardless of the document type\nsettings for revisions and renditions.\nThis would be considered false by default and if it's a Revisable/Renditionable document type,\nexisting documents are checked to find matching documents for which this new document can be\nadded as a Revision/Rendition.", + "type": "boolean" + }, + "comment": { + "description": "The revision comment that will be saved during reindex if the document is\nrevisiable.", + "type": "string" + }, + "documentDate": { + "description": "The document date.", + "type": "string", + "format": "date", + "example": "2018-02-21" + }, + "keywordCollection": { + "description": "An array of keywords grouped by the keyword group they belong to.", + "type": "object", + "$ref": "#/components/schemas/KeywordCollectionRequest" + } + }, + "required": [ + "keywordCollection", + "targetDocumentTypeId" + ] + }, + "RevisionReindexProperties": { + "description": "Meta-data information required to reindex as revision", + "allOf": [ + { + "$ref": "#/components/schemas/DiscriminatorObject" + }, + { + "type": "object", + "properties": { + "comment": { + "description": "The revision comment that will be saved during reindex if the document\nis revisiable.", + "type": "string" + }, + "sourceDocumentId": { + "description": "The document id of the document that is being reindexed as a new revision.", + "type": "string" + }, + "appendNewRevision": { + "description": "A value indicating whether to append the source document at the end of the target document.\nOnly the image file type supports this option.", + "type": "boolean" + }, + "keywordCollection": { + "description": "An array of keywords grouped by the keyword group they belong to.", + "type": "object", + "$ref": "#/components/schemas/KeywordCollectionRequest" + } + } + } + ], + "required": [ + "sourceDocumentId", + "keywordCollection" + ] + }, + "RenditionReindexProperties": { + "description": "Meta-data information required to reindex as rendition", + "allOf": [ + { + "$ref": "#/components/schemas/DiscriminatorObject" + }, + { + "type": "object", + "properties": { + "comment": { + "description": "The rendition comment that will be saved during reindex if the document\nis revisiable.", + "type": "string" + }, + "targetFileTypeId": { + "description": "The file type id that the document will be reindexed to. If the file type does not need to be changed,\nthen this property does not need to be passed in.", + "type": "string" + }, + "sourceDocumentId": { + "description": "The document id of the document that is being reindexed as a new rendition.", + "type": "string" + }, + "appendPages": { + "description": "A value indicating whether to append the source document at the end of the target document.\nOnly the image file type supports this option.", + "type": "boolean" + }, + "keywordCollection": { + "description": "An array of keywords grouped by the keyword group they belong to.", + "type": "object", + "$ref": "#/components/schemas/KeywordCollectionRequest" + } + } + } + ], + "required": [ + "sourceDocumentId", + "keywordCollection" + ] + }, + "DocumentArchiveProperties": { + "description": "Meta-data information required to upload documents", + "properties": { + "documentTypeId": { + "description": "The Id of the document type to store the document into", + "type": "string" + }, + "fileTypeId": { + "description": "Id of the file Type for the document.", + "type": "string" + }, + "storeAsNew": { + "description": "Boolean indicating if the document should be stored as a new document.\nThis should be used in conjunction with a Revisable/Renditionable document type to indicate that the document should be stored as a new document regardless of the settings.\nThis would be considered false by default and if it's a Revisable/Renditionable document type, existing documents are checked to find matching documents for which this new document can be added as a Revision/Rendition.", + "type": "boolean" + }, + "comment": { + "description": "Comments if the document type is Revisable/Renditionable.", + "type": "string" + }, + "documentDate": { + "description": "Document's date", + "type": "string", + "format": "date", + "example": "2018-08-21" + }, + "uploads": { + "description": "List of references to uploaded files. The order of uploaded file references will be used for the document page order.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Upload" + } + }, + "keywordCollection": { + "description": "An array of keywords grouped by the keyword group they belong to.", + "type": "object", + "$ref": "#/components/schemas/KeywordCollectionRequest" + } + }, + "required": [ + "documentTypeId", + "uploads", + "keywordCollection" + ] + }, + "RevisionArchiveProperties": { + "description": "Meta-data information required to upload revision", + "allOf": [ + { + "$ref": "#/components/schemas/DiscriminatorObject" + }, + { + "type": "object", + "properties": { + "comment": { + "description": "Comment for the revision", + "type": "string" + }, + "fileTypeId": { + "description": "Id of the File Type for the document. If File Type Id is not provided, Document Type's default File Type will be used.", + "type": "string" + }, + "uploads": { + "description": "List of references to uploaded files. The order of uploaded file references will be used for the document page order.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Upload" + } + }, + "keywordCollection": { + "description": "An array of keywords grouped by the keyword group they belong to.", + "type": "object", + "$ref": "#/components/schemas/KeywordCollectionRequest" + } + } + } + ], + "required": [ + "uploads" + ] + }, + "RenditionArchiveProperties": { + "description": "Meta-data information required to upload rendition", + "allOf": [ + { + "$ref": "#/components/schemas/DiscriminatorObject" + }, + { + "type": "object", + "properties": { + "comment": { + "description": "Comment for the rendition", + "type": "string" + }, + "fileTypeId": { + "description": "Id of the File Type for the document. If a File Type Id is not provided, then the Document Type's default File Type ID will be used. If the revision already contains the File Type Id then 400 Bad Request will be returned.", + "type": "string" + }, + "uploads": { + "description": "List of references to uploaded files. The order of uploaded file references will be used for the document page order.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Upload" + } + }, + "keywordCollection": { + "description": "An array of keywords grouped by the keyword group they belong to.", + "type": "object", + "$ref": "#/components/schemas/KeywordCollectionRequest" + } + }, + "required": [ + "uploads" + ] + } + ] + }, + "Upload": { + "description": "Reference to an uploaded file.", + "type": "object", + "properties": { + "id": { + "description": "Unique file reference", + "type": "string" + } + } + }, + "UploadsPostResponse": { + "description": "Unique file reference corresponding to the uploaded file.", + "type": "object", + "properties": { + "id": { + "description": "Unique reference for the uploaded file", + "type": "string" + }, + "filePartSize": { + "description": "Size in bytes of the file parts that will be uploaded. All file parts except the last one must be of size filePartSize. Last part will be either less than or equal to filePartSize.", + "type": "integer", + "format": "int32" + }, + "numberOfParts": { + "description": "Total number of parts a file must be divided into when uploading. This must be used in conjunction with filePartSize.", + "type": "integer", + "format": "int32" + } + } + }, + "UploadFileMetaData": { + "description": "Meta-data information about the file being uploaded.", + "properties": { + "fileExtension": { + "description": "Extension of the file being uploaded. The extension does not need a leading period `.`", + "type": "string" + }, + "fileSize": { + "description": "Size of the file in bytes. Recommended maximum size of a file is 4GB, but the maximum size is only limited by the programming language being used and the host's file system.", + "type": "integer", + "format": "int64" + } + }, + "required": [ + "fileExtension", + "fileSize" + ] + }, + "Revision": { + "description": "Revision metadata", + "properties": { + "id": { + "description": "The unique identifier of the revision.", + "type": "string" + }, + "revisionNumber": { + "description": "The revision number for display purposes and provide ordering of revisions.", + "type": "integer", + "format": "int32" + } + } + }, + "RevisionCollection": { + "description": "An Array of revisions.", + "properties": { + "items": { + "description": "The unique identifier of the revisions.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Revision" + } + } + } + }, + "Rendition": { + "description": "Rendition metadata", + "properties": { + "fileTypeId": { + "description": "The unique identifier of the rendition.", + "type": "string" + }, + "created": { + "description": "The date the rendition was stored.", + "type": "string" + }, + "pageCount": { + "description": "The number of pages in the rendition.", + "type": "integer", + "format": "int32" + }, + "createdByUserId": { + "description": "The user ID of the revision creator.", + "type": "string" + }, + "comment": { + "description": "A comment for the revision.", + "type": "string" + } + } + }, + "RenditionCollection": { + "description": "An Array of renditions.", + "properties": { + "items": { + "description": "An array of Renditions", + "type": "array", + "items": { + "$ref": "#/components/schemas/Rendition" + } + } + } + }, + "Problem-Detail-Locking-Error": { + "type": "object", + "description": "The Problem Detail\nformat defines a way to carry machine-readable details of errors in a\nHTTP response to avoid the need to define new error response formats for\nHTTP APIs.\n\nProblem details can be extended and defined for specific\nproblem types.", + "properties": { + "type": { + "type": "string", + "format": "uri", + "description": "An absolute URI that identifies the problem type. When\ndereferenced, it should provide human-readable documentation\nfor the problem type (e.g., using HTML)." + }, + "title": { + "type": "string", + "description": "A short, human-readable summary of the problem type. It should\nnot change from occurrence to occurrence of the problem." + }, + "status": { + "type": "integer", + "format": "int32", + "description": "The HTTP status code generated by the origin server for this\noccurrence of the problem.", + "minimum": 100, + "maximum": 600, + "exclusiveMaximum": true + }, + "detail": { + "type": "string", + "description": "A human readable explanation specific to this occurrence of the\nproblem." + }, + "instance": { + "type": "string", + "format": "uri", + "description": "A URI reference that identifies the specific occurrence of\nthe problem. It may or may not yield further information\nif dereferenced." + }, + "lockInfo": { + "$ref": "#/components/schemas/LockInfo" + } + } + }, + "LockInfo": { + "type": "object", + "description": "Information on a lock that has been put on an item.", + "properties": { + "lockedByUserId": { + "type": "string", + "description": "A unique identifier of the user that holds the lock on this item." + }, + "lockType": { + "$ref": "#/components/schemas/LockType" + }, + "currentLock": { + "$ref": "#/components/schemas/DocumentLockStatus" + } + }, + "example": { + "lockInfo": { + "lockedByUserId": "103", + "lockType": "Keywords", + "currentLock": "DocumentCheckoutInSameSession" + } + } + }, + "LockInfoCollection": { + "description": "A collection of LockInfo objects.", + "properties": { + "items": { + "description": "A collection of LockInfo objects.", + "type": "array", + "items": { + "$ref": "#/components/schemas/LockInfo" + } + } + } + }, + "DocumentLockStatus": { + "description": "The type of lock which is currently locking the document.", + "type": "string", + "enum": [ + "DocumentLock", + "DocumentCheckout", + "DocumentCheckoutInSameSession", + "Persistent", + "Process" + ] + }, + "LockType": { + "description": "The type of lock to retrieve.\nCurrently, only keyword locks are supported.", + "type": "string", + "enum": [ + "Keywords" + ] + }, + "Binary-Content": { + "description": "Binary content in the request or response for file uploads and downloads.", + "type": "string", + "format": "binary" + }, + "KeywordTypeCollection": { + "description": "An array of keyword types.", + "properties": { + "items": { + "description": "An array of keyword types.", + "type": "array", + "items": { + "$ref": "#/components/schemas/KeywordType" + } + } + } + }, + "KeywordType": { + "description": "Keyword type metadata.", + "properties": { + "id": { + "description": "The unique identifier of the keyword type.", + "type": "string" + }, + "systemName": { + "description": "The untranslated name of the keyword type.\nLocalization is controlled by the Accept-Language header and\nthe language of the response is represented by the Content-Language\nheader.", + "type": "string" + }, + "name": { + "description": "The name of the keyword type. This value is localized.", + "type": "string" + }, + "dataType": { + "description": "Describes the type of data represented by the keyword type.\n\n`Numeric9` represents a number up to 9 digits in length.\n\n`Numeric20` represents a number up to 20 digits in length.\n\n`Alphanumeric` represents any value with letters and/or numbers.\n\n`Currency` represents a monetary value. The currency format used is\n'built-in' to the keyword type.\n\n`SpecificCurrency` represents a monetary value and allows multiple\n currency formats to be used with the same keyword type.\n\n`Date` represents a date.\n\n`DateTime` represents both a date and a time.\n\n`FloatingPoint` represents numeric values that have variable decimal\n point locations.", + "type": "string", + "enum": [ + "Numeric9", + "Numeric20", + "Alphanumeric", + "Currency", + "SpecificCurrency", + "Date", + "DateTime", + "FloatingPoint" + ] + }, + "usedForRetrieval": { + "description": "Classification to determine if the keyword type is used for document retrieval.", + "type": "boolean" + }, + "invisible": { + "description": "Indicates if the keyword type should be made invisible in UI contexts.", + "type": "boolean" + }, + "alphanumericSettings": { + "$ref": "#/components/schemas/AlphanumericSettings" + }, + "currencyFormatId": { + "description": "The Currency Format Id if the Keyword Type's data type is Currency. If Specific Currency, this\nwill be the default currency format id set on the Specific Currency Keyword Type. When Regional Workstation\nSettings is used an id of 'default' is used.", + "type": "string" + }, + "isSecurityMasked": { + "description": "A value indicating whether the keyword type is configured for security masking.\nWhen the value is true and the keyword values have not been unmasked,\nthe corresponding keyword value should be treated as readonly.", + "type": "boolean" + }, + "maskSettings": { + "$ref": "#/components/schemas/KeywordTypeMaskSettings" + } + } + }, + "KeywordTypeMaskSettings": { + "description": "Masking settings for a particular keyword type.", + "properties": { + "fullFieldRequired": { + "description": "A value indicating whether the keyword type required the entire field filled out.", + "type": "boolean" + }, + "maskString": { + "description": "A value that specifies the mask string for a masked keyword type.", + "type": "string" + }, + "staticCharacters": { + "description": "The configured static characters for the keyword mask.", + "type": "string" + }, + "storeMask": { + "description": "A value indicating whether the mask should be stored to the database or stripped.", + "type": "boolean" + } + } + }, + "AlphanumericSettings": { + "description": "Configuration settings for alphanumeric keyword types.", + "properties": { + "caseOptions": { + "description": "The character case option for keyword values of this keyword type.\n\n`Uppercase` keyword values are stored using only uppercase characters.\n\n`MixedCase` keyword values are stored using upper and lower case characters.", + "type": "string", + "enum": [ + "Uppercase", + "MixedCase" + ] + }, + "maximumLength": { + "description": "The maximum number of characters allowed by the keyword type.", + "type": "integer", + "format": "int64" + }, + "storageOptions": { + "description": "The database storage method used for keyword values of this keyword type.\n\n`SingleTable` indicates keyword values are stored in a single database table.\n\n`DualTable` indicates keyword values are stored in two database tables.", + "type": "string", + "enum": [ + "SingleTable", + "DualTable" + ] + } + } + }, + "KeywordTypeGroupCollection": { + "description": "An array of keyword type groups.", + "properties": { + "items": { + "description": "An array of keyword type groups.", + "type": "array", + "items": { + "$ref": "#/components/schemas/KeywordTypeGroup" + } + } + } + }, + "KeywordTypeGroup": { + "description": "Keyword type group metadata.", + "properties": { + "id": { + "description": "The unique identifier of the keyword type group.", + "type": "string" + }, + "systemName": { + "description": "The untranslated name of the keyword type group.\nLocalization is controlled by the Accept-Language header and\nthe language of the response is represented by the Content-Language\nheader.", + "type": "string" + }, + "name": { + "description": "The name of the keyword type group. This value is localized.", + "type": "string" + }, + "storageType": { + "description": "The type of storage for the keyword type group.\n\n`SingleInstance` represents a set of keyword types that will appear\nonly once and are associated with a specific group type. Each single\ninstance keyword type may have only one value instance.\n\n`MultiInstance` represents a set of keyword types that can appear\nmultiple times as a related instance. Each multiple instance keyword\ntype may have only one value instance within a particular group.", + "type": "string", + "enum": [ + "SingleInstance", + "MultiInstance" + ] + } + } + }, + "KeywordTypeGroupKeywordTypeCollection": { + "description": "A list of keyword types grouped by the keyword type group they belong to.", + "properties": { + "items": { + "description": "An array of keyword types.", + "type": "array", + "items": { + "$ref": "#/components/schemas/KeywordTypeGroupKeywordType" + } + } + } + }, + "KeywordTypeGroupKeywordType": { + "description": "Keyword type metadata.", + "properties": { + "id": { + "description": "The unique identifier of the keyword type.", + "type": "string" + } + }, + "required": [ + "id" + ] + }, + "AutoFillKeywordSetCollection": { + "description": "An array of autofill keyword sets.", + "properties": { + "items": { + "description": "An array of autofill keyword sets.", + "type": "array", + "items": { + "$ref": "#/components/schemas/AutoFillKeywordSet" + } + } + } + }, + "AutoFillKeywordSet": { + "description": "Autofill keyword set metadata.", + "properties": { + "id": { + "description": "The unique identifier of the autofill keyword set.", + "type": "string" + }, + "systemName": { + "description": "The untranslated name of the autofill keyword set.\nLocalization is controlled by the Accept-Language header and\nthe language of the response is represented by the Content-Language\nheader.", + "type": "string" + }, + "name": { + "description": "The name of the autofill keyword set. This value is localized.", + "type": "string" + }, + "primaryKeywordTypeId": { + "description": "The keyword type id of the autofill keyword set's primary key.", + "type": "string" + }, + "external": { + "description": "Indicates that the autofill keyword set is external.", + "type": "boolean" + } + } + }, + "AutoFillKeywordSetKeywordTypeCollection": { + "description": "A representation of keyword type information for a autofill type.", + "properties": { + "items": { + "description": "A lightweight array of keyword types associated with an auto fill keyword set.", + "type": "array", + "items": { + "$ref": "#/components/schemas/AutoFillKeywordSetKeywordType" + } + } + } + }, + "AutoFillKeywordSetKeywordType": { + "description": "Keyword type identifier", + "properties": { + "id": { + "description": "The unique identifier of the keyword type.", + "type": "string" + } + } + }, + "KeywordSetDataCollection": { + "description": "An array of autofill keyword set data.", + "properties": { + "items": { + "description": "An array of autofill keyword set data.", + "type": "array", + "items": { + "$ref": "#/components/schemas/KeywordSetData" + } + } + } + }, + "KeywordSetData": { + "description": "A collection of autofill keyword set keyword data.", + "properties": { + "id": { + "description": "The unique identifier of the autofill keyword set data.", + "type": "string" + }, + "keywords": { + "description": "An array of keyword values associated with an auto fill keyword set data object.", + "type": "array", + "items": { + "$ref": "#/components/schemas/AutoFillKeywordSetKeyword" + } + } + } + }, + "AutoFillKeywordSetKeyword": { + "description": "Autofill keyword set keyword data.", + "properties": { + "typeId": { + "description": "The keyword type id.", + "type": "string" + }, + "value": { + "description": "The keyword value.", + "type": "string" + } + } + }, + "AutoFillMultipleMatchesResponse": { + "description": "A collection of AutoFill Keyword Set Data Set items that match a Primary\nKeyword value.", + "properties": { + "autoFillKeywordSetData": { + "description": "An array of autofill keyword set data.", + "type": "array", + "items": { + "$ref": "#/components/schemas/KeywordSetData" + } + }, + "selectMultiple": { + "description": "A value indicating whether multiple AutoFill Keyword Set Data Set selection\nis allowed.", + "type": "boolean" + } + } + }, + "IndexingModifiersPostResponse": { + "description": "Result Keyword Collection.", + "properties": { + "keywordCollection": { + "$ref": "#/components/schemas/KeywordCollectionResponse" + } + } + }, + "ReindexAutoFillExpansionModifierProperties": { + "description": "The properties required to perform AutoFill Keyword Set expansion.", + "allOf": [ + { + "$ref": "#/components/schemas/DiscriminatorObject" + }, + { + "type": "object", + "properties": { + "documentId": { + "description": "The ID of the Document containing the keywords.", + "type": "string" + }, + "targetDocumentTypeId": { + "description": "The ID of the target Document Type containing the keywords being modified. This is the\ntarget Document Type during the Reindex process.", + "type": "string" + } + } + }, + { + "$ref": "#/components/schemas/AutoFillExpansionProperties" + } + ], + "required": [ + "documentId", + "targetDocumentTypeId" + ] + }, + "ArchivalAutoFillExpansionModifierProperties": { + "description": "The properties required to perform AutoFill Keyword Set expansion.", + "allOf": [ + { + "$ref": "#/components/schemas/DiscriminatorObject" + }, + { + "type": "object", + "properties": { + "documentTypeId": { + "description": "The ID of the Document Type containing the keywords being modified. This is the document\ntype that the document is going to be archived into.", + "type": "string" + } + } + }, + { + "$ref": "#/components/schemas/AutoFillExpansionProperties" + } + ], + "required": [ + "documentTypeId" + ] + }, + "AutoFillExpansionProperties": { + "description": "Properties that are required during AutoFill expansion regardless of method of expansion.", + "properties": { + "autoFillKeywordSetDataIds": { + "description": "If selection is required for expansion to occur, the list of AutoFill Keyword\nSet Data Set Ids that the server will expand.", + "type": "array", + "items": { + "description": "AutoFill Keyword Set Data Set Id", + "type": "string" + } + }, + "autoFillKeywordSetPrimaryKeyword": { + "description": "The Primary Keyword value of the AutoFill Keyword Set.", + "$ref": "#/components/schemas/AutoFillKeywordSetKeyword" + }, + "keywordCollection": { + "$ref": "#/components/schemas/KeywordCollectionRequest" + }, + "keywordGroupIndex": { + "description": "If any Keyword Types configured for an AutoFill Keyword Set are part of\na MultiInstance Keyword Group, a index that relates to the order of\nMultiInstance Keyword Group passed in is required. Example. If expanding\ninto a MultiInstance Group that has 3 instances, and the second one is the desired\ngroup to be updated, 2 should be passed in.", + "type": "integer", + "format": "int32" + } + }, + "required": [ + "autoFillKeywordSetPrimaryKeyword", + "keywordCollection" + ] + }, + "AddNotePropertiesModel": { + "properties": { + "noteTypeId": { + "description": "The id of the note type.", + "type": "string" + }, + "page": { + "description": "The page the note is on. This defaults to 1 if not present.", + "type": "integer", + "format": "int64" + }, + "x": { + "description": "This defaults to 0 if not present.", + "$ref": "#/components/schemas/XCoordinate" + }, + "y": { + "description": "This defaults to 0 if not present.", + "$ref": "#/components/schemas/YCoordinate" + }, + "width": { + "description": "This defaults to 0 if not present.", + "$ref": "#/components/schemas/NoteWidth" + }, + "height": { + "description": "This defaults to 0 if not present.", + "$ref": "#/components/schemas/NoteHeight" + }, + "text": { + "description": "The text in the note.\nThis defaults to the configured note type default text if not present.", + "type": "string" + } + }, + "required": [ + "noteTypeId" + ] + }, + "UpdateNotePropertiesModel": { + "properties": { + "position": { + "$ref": "#/components/schemas/UpdateNotePositionModel" + }, + "size": { + "$ref": "#/components/schemas/UpdateNoteSizeModel" + }, + "text": { + "description": "The text in the note.", + "type": "string" + } + } + }, + "NotePrivileges": { + "properties": { + "canModify": { + "type": "boolean", + "description": "A value indicating if the note can be updated." + }, + "canDelete": { + "type": "boolean", + "description": "A value indicating if the note can be deleted." + }, + "canUpdatePrivacyOptions": { + "type": "boolean", + "description": "A value indicating if the user is allowed to update privacy options." + } + } + }, + "NoteCollectionModel": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NoteModel" + } + } + } + }, + "NoteModel": { + "properties": { + "id": { + "description": "The unique id of the note.", + "type": "string" + }, + "noteTypeId": { + "description": "The note type identifier of the note.", + "type": "string" + }, + "title": { + "description": "The title of the note.", + "type": "string" + }, + "text": { + "description": "The text in the note.", + "type": "string" + }, + "createdByUserId": { + "description": "The unique id of the user this note was created by.", + "type": "string" + }, + "created": { + "description": "The date the note was created.", + "type": "string" + }, + "documentId": { + "description": "The unique id of the document the note is affiliated with.", + "type": "string" + }, + "documentRevisionId": { + "description": "The revision number that the note is affiliated with.", + "type": "string" + }, + "page": { + "description": "The page the note is on.", + "type": "integer", + "format": "int64" + }, + "x": { + "$ref": "#/components/schemas/XCoordinate" + }, + "y": { + "$ref": "#/components/schemas/YCoordinate" + }, + "width": { + "$ref": "#/components/schemas/NoteWidth" + }, + "height": { + "$ref": "#/components/schemas/NoteHeight" + }, + "privileges": { + "description": "The user's privileges for the note.", + "$ref": "#/components/schemas/NotePrivileges" + }, + "displayFlags": { + "description": "The flag values set for the note.", + "$ref": "#/components/schemas/NoteDisplayFlags" + } + } + }, + "XCoordinate": { + "description": "The x coordinate of the note.\nThe x coordinate on image documents is given in pixels from the left side.\nThe x coordinate on text documents is given in number of characters from the left side.", + "type": "integer", + "format": "int32" + }, + "YCoordinate": { + "description": "The y coordinate of the note.\nThe y coordinate on image documents is given in pixels from the top.\nThe y coordinate on text documents is given in number of lines from the top.", + "type": "integer", + "format": "int32" + }, + "NoteWidth": { + "description": "The width of the note.\nThe width on image documents is given in pixels.\nThe width on text documents is given in number of characters.", + "type": "integer", + "format": "int32" + }, + "NoteHeight": { + "description": "The height of the note.\nThe height on image documents is given in pixels.\nThe height on text documents is given in number of lines.", + "type": "integer", + "format": "int32" + }, + "NoteTypeCollectionModel": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NoteTypeModel" + } + } + } + }, + "NoteTypeModel": { + "type": "object", + "description": "Note type metadata.", + "properties": { + "color": { + "$ref": "#/components/schemas/Color" + }, + "displayFlags": { + "description": "Note type display metadata.", + "$ref": "#/components/schemas/NoteTypeDisplayFlags" + }, + "flavor": { + "type": "string", + "description": "The style of the note type.", + "enum": [ + "Note", + "Highlight", + "Arrow", + "Ellipse", + "OverlappedText", + "IconStamp" + ] + }, + "fontId": { + "description": "The id of the font used with the note type.", + "type": "string" + }, + "iconId": { + "description": "The id of the icon used with the note type.", + "type": "string" + }, + "id": { + "description": "The id of the note type.", + "type": "string" + }, + "name": { + "description": "The localized name of the note type.", + "type": "string" + }, + "systemName": { + "description": "The untranslated name of the note type.\nLocalization is controlled by the Accept-Language header and\nthe language of the response is represented by the Content-Language\nheader.", + "type": "string" + }, + "userPrivileges": { + "description": "User privileges for the note type.", + "$ref": "#/components/schemas/NoteTypeUserPrivileges" + } + } + }, + "Color": { + "type": "object", + "description": "The color of the note type.", + "properties": { + "r": { + "type": "string", + "description": "The red(R) component of a color." + }, + "g": { + "type": "string", + "description": "The green(G) component of a color." + }, + "b": { + "type": "string", + "description": "The blue(B) component of a color." + }, + "a": { + "type": "string", + "description": "The alpha(A) component of a color." + } + } + }, + "NoteTypeDisplayFlags": { + "type": "object", + "description": "Note type display metadata.", + "properties": { + "allPages": { + "type": "boolean", + "description": "A value indicating whether the note type should be repeated on all pages." + }, + "allRevisions": { + "type": "boolean", + "description": "A value indicating whether the note type should appear on all revisions." + }, + "createOpenNoteWindow": { + "type": "boolean", + "description": "A value indicating whether a note created from this note type should display open when creation is completed." + }, + "deleteWithPage": { + "type": "boolean", + "description": "A value indicating whether a note associated with this note type should be deleted when the page the note is on is deleted." + }, + "floatOnWindow": { + "type": "boolean", + "description": "A value indicating that notes associated with this note type should not be bound to the document." + }, + "hideNoteWindow": { + "type": "boolean", + "description": "A value indicating whether a note created from this note type should be hidden." + }, + "moveable": { + "type": "boolean", + "description": "A value indicating the note associated with this note type should be movable." + }, + "noPrivacyOptions": { + "type": "boolean", + "description": "A value indicating the note type should not allow privacy options to be set on a note." + }, + "open": { + "type": "boolean", + "description": "A value indicating the note associated with this note type should be displayed open." + }, + "privacyNoDelete": { + "type": "boolean", + "description": "A value indicating that only the creator of a note from this note type can delete the note." + }, + "privacyNoModify": { + "type": "boolean", + "description": "A value indicating that only the creator of a note from this note type can modify the note." + }, + "privacyNoView": { + "type": "boolean", + "description": "A value indicating that only the creator of a note from this note type can view the note." + }, + "stampKeepOriginalSize": { + "type": "boolean", + "description": "A value indicating that Icon Stamps cannot have their icons resized." + }, + "stampTransparent": { + "type": "boolean", + "description": "A value indicating that Icon Stamps are transparent." + } + } + }, + "NoteTypeUserPrivileges": { + "type": "object", + "properties": { + "create": { + "type": "boolean", + "description": "A value indicating whether the user can create a note of the note type." + }, + "view": { + "type": "boolean", + "description": "A value indicating whether the user can view a note of the note type." + } + } + }, + "NoteDisplayFlags": { + "type": "object", + "description": "Note display metadata.", + "properties": { + "allowView": { + "type": "boolean", + "description": "A value indicating whether an user other than the creator of the note can view the note." + }, + "allowModify": { + "type": "boolean", + "description": "A value indicating whether an user other than the creator of the note can modify the note." + }, + "allowDelete": { + "type": "boolean", + "description": "A value indicating whether an user other than the creator of the note can delete the note." + } + } + }, + "NotesPostResponse": { + "description": "Id of the newly created note.", + "properties": { + "noteId": { + "description": "Identifier of the note.", + "type": "string" + } + } + }, + "UpdateNotePositionModel": { + "description": "Model containing position metadata to update the note with.", + "required": [ + "x", + "y" + ], + "properties": { + "x": { + "$ref": "#/components/schemas/XCoordinate" + }, + "y": { + "$ref": "#/components/schemas/YCoordinate" + } + } + }, + "UpdateNoteSizeModel": { + "description": "Model containing size metadata to update the note with.", + "required": [ + "width", + "height" + ], + "properties": { + "width": { + "$ref": "#/components/schemas/NoteWidth" + }, + "height": { + "$ref": "#/components/schemas/NoteHeight" + } + } + }, + "Problem-Detail": { + "type": "object", + "description": "The Problem Detail\nformat defines a way to carry machine-readable details of errors in a\nHTTP response to avoid the need to define new error response formats for\nHTTP APIs.\n\nProblem details can be extended and defined for specific\nproblem types.", + "properties": { + "type": { + "type": "string", + "format": "uri", + "description": "An absolute URI that identifies the problem type. When\ndereferenced, it should provide human-readable documentation\nfor the problem type (e.g., using HTML)." + }, + "title": { + "type": "string", + "description": "A short, human-readable summary of the problem type. It should\nnot change from occurrence to occurrence of the problem." + }, + "status": { + "type": "integer", + "format": "int32", + "description": "The HTTP status code generated by the origin server for this\noccurrence of the problem.", + "minimum": 100, + "maximum": 600, + "exclusiveMaximum": true + }, + "detail": { + "type": "string", + "description": "A human readable explanation specific to this occurrence of the\nproblem." + }, + "instance": { + "type": "string", + "format": "uri", + "description": "A URI reference that identifies the specific occurrence of\nthe problem. It may or may not yield further information\nif dereferenced." + } + } + }, + "DiscriminatorObject": { + "type": "object", + "description": "The generic type with a discriminator property, which is an object type name\nthat is used to differentiate between other schemas which may satisfy\nthe payload description.", + "properties": { + "objectType": { + "type": "string", + "description": "The object type of the schema specified for the request body or used for the response payload. " + } + } + } + }, + "parameters": { + "acceptImageHeader": { + "name": "Accept", + "in": "header", + "description": "The Accept request HTTP header advertises which content types,\nexpressed as MIME types, the client is able to understand. Using\ncontent negotiation, the server then selects one of the proposals,\nuses it and informs the client of its choice with the `Content-Type`\nresponse header.", + "required": true, + "schema": { + "type": "string", + "enum": [ + "image/png", + "image/jpeg", + "image/tiff", + "image/svg+xml", + "text/plain", + "text/html", + "application/pdf", + "application/x-isys-docpack" + ] + } + }, + "documentTypeId": { + "description": "The unique identifier of a document type.", + "name": "documentTypeId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + "documentTypeGroupId": { + "description": "The unique identifier of a document type group", + "name": "documentTypeGroupId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + "documentId": { + "name": "documentId", + "in": "path", + "description": "The unique identifier of a document.", + "required": true, + "schema": { + "type": "string" + } + }, + "queryId": { + "name": "queryId", + "in": "path", + "description": "The unique identifier of a query.", + "required": true, + "schema": { + "type": "string" + } + }, + "currencyFormatId": { + "name": "currencyFormatId", + "in": "path", + "description": "The unique identifier of a currency format.", + "required": true, + "schema": { + "type": "string" + } + }, + "customQueryId": { + "name": "customQueryId", + "in": "path", + "description": "The unique identifier of a custom query.", + "required": true, + "schema": { + "type": "string" + } + }, + "fileTypeId": { + "description": "The unique identifier of a file type.", + "name": "fileTypeId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + "lockTypeParam": { + "description": "The type of lock to retrieve.\nCurrently, only keyword locks are supported.", + "schema": { + "type": "string", + "enum": [ + "Keywords" + ] + }, + "name": "lockType", + "in": "query", + "required": true + }, + "pageId": { + "description": "The unique identifier of a document page.", + "name": "pageId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + "pages": { + "description": "The page to be retrieved. Currently only a single\npage number is supported. If a valid page number is provided,\nthe `Hyland-Item-Count` custom header will be included on the response.\n\nIf the page number does not exist or the value provided is not a single\npage number, a 404 Not Found will be returned.\n\nPage number is one-based.", + "name": "pages", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + }, + "contentContext": { + "description": "The context for which the document content is being retrieved. If retrieving the document\nfor client purposes, it is recommended to use the context to verify correct privileges\nand log the most appropriate message in document history.", + "name": "context", + "in": "query", + "required": false, + "schema": { + "type": "string", + "enum": [ + "View", + "Download", + "EmailAttachment" + ] + } + }, + "uploadId": { + "name": "uploadId", + "in": "path", + "description": "The unique reference to the file being uploaded", + "required": true, + "schema": { + "type": "string" + } + }, + "filePart": { + "name": "filePart", + "in": "query", + "required": true, + "description": "part number of the file to upload. Part numbers are sequential and start at 1.", + "schema": { + "type": "integer", + "format": "Int32" + } + }, + "fit": { + "name": "fit", + "in": "query", + "required": false, + "description": "Options for scaling the resource to the provided dimensions.", + "schema": { + "type": "string", + "enum": [ + "Both", + "Height", + "Stretch", + "Width" + ] + } + }, + "height": { + "name": "height", + "in": "query", + "required": false, + "description": "The height of the resource in pixels.", + "schema": { + "type": "integer", + "format": "Int32" + } + }, + "width": { + "name": "width", + "in": "query", + "required": false, + "description": "The width of the resource in pixels.", + "schema": { + "type": "integer", + "format": "Int32" + } + }, + "revisionId": { + "description": "The unique identifier of a document revision.", + "name": "revisionId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + "Hyland-Include-Item-Count": { + "name": "Hyland-Include-Item-Count", + "in": "header", + "description": "The Hyland-Include-Item-Count custom header field can be used by user agents\nto indicate that the item count should be included in the response.", + "required": false, + "schema": { + "type": "boolean" + }, + "example": true + }, + "keywordTypeId": { + "description": "The unique identifier of a keyword type.", + "name": "keywordTypeId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + "keywordTypeGroupId": { + "description": "The unique identifier of a keyword type group.", + "name": "keywordTypeGroupId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + "autoFillKeywordSetId": { + "description": "The unique identifier of a autofill keyword set.", + "name": "autoFillKeywordSetId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + "Accept-Language": { + "name": "Accept-Language", + "in": "header", + "description": "The Accept-Language\nheader field can be used by user agents to\nindicate the set of natural languages that are preferred in the\nresponse. Language tags are defined in RFC 5646. If none of the \nlanguages given are supported, a default language will be returned.", + "required": false, + "schema": { + "type": "string" + }, + "example": "en-US" + }, + "Accept": { + "name": "Accept", + "in": "header", + "description": "The Accept\nheader field can be used by consumers to specify response media types\nthat are preferred.\n\nUpon receiving this header the server will use Proactive\nContent Negotiation to determine the \"best guess\" format for the\nconsumer.\n\nIn cases where the underlying resource can not be returned as a\nrequested format, the server may make a determination of which format\nof the content will be returned.\n\nIn cases where the Accept header is omitted or has the value `*/*`, the\nserver will make a determination of which format of the content will\nbe returned.\n\nConsumers should inspect the `Content-Type` response header to determine\nthe actual format of the content returned.\n\nReview documentation for the specific end point for more detailed information.\non Content Negotiation or how the Accept header.", + "required": false, + "schema": { + "type": "string" + }, + "example": "*/*" + }, + "If-Match": { + "name": "If-Match", + "in": "header", + "description": "The If-Match\nheader field makes the request method conditional on\nthe recipient origin server either having at least one current\nrepresentation of the target resource, when the field-value is \"*\",\nor having a current representation of the target resource that has an\nentity-tag matching a member of the list of entity-tags provided in\nthe field-value.", + "required": false, + "schema": { + "type": "string" + }, + "example": "0731961c81c7403389c42cffd60f209d" + }, + "Range": { + "name": "Range", + "in": "header", + "description": "The Range\nheader field on a request modifies the method semantics to request\ntransfer of only one or more subranges of the selected representation\ndata, rather than the entire selected representation data.\n\nThe Range unit `bytes` is supported to represent byte ranges of the\npage or document of the specific rendition's content. \n\nFor the cases where the Range header is omitted, the full document or page will be \nreturned. ", + "required": false, + "schema": { + "type": "string" + }, + "example": "bytes 1-1000" + } + }, + "headers": { + "Hyland-Item-Count": { + "description": "The Hyland-Item-Count custom\nresponse header indicates the total number of items included in a response.", + "schema": { + "type": "string" + } + }, + "Hyland-Original-Width": { + "description": "Width of original first page before any scaling", + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Hyland-Original-Height": { + "description": "Height of original first page before any scaling", + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Hyland-Original-Orientation": { + "description": "The TIFF orientation of the original first page, before any re-orientation", + "schema": { + "type": "string" + } + }, + "Hyland-Original-Media-Type": { + "description": "The original media type of the first page", + "schema": { + "type": "string" + } + }, + "Hyland-Original-X-DPI": { + "description": "The X dpi of the original first page before any scaling", + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Hyland-Original-Y-DPI": { + "description": "The Y dpi of the original first page before any scaling", + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Hyland-Rendition-Width": { + "description": "The width of the first page rendition", + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Hyland-Rendition-Height": { + "description": "The height of the first page rendition", + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Hyland-Rendition-X-DPI": { + "description": "The X dpi of the first page rendition", + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Hyland-Rendition-Y-DPI": { + "description": "The Y dpi of the first page rendition", + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Hyland-Available-Pages": { + "description": "The total number of available pages in the file", + "schema": { + "type": "integer", + "format": "int32" + } + }, + "Content-Language": { + "description": "The Content-Language header field describes the natural language(s)\nof the intended audience for the representation. Note that this\nmight not be equivalent to all the languages used within the\nrepresentation.\n\nReference: https://tools.ietf.org/html/rfc7231#section-3.1.3.2", + "schema": { + "type": "string" + }, + "example": "en" + }, + "Location": { + "description": "The \"Location\" header field is used in some responses to refer to a\nspecific resource in relation to the response. The type of\nrelationship is defined by the combination of request method and\nstatus code semantics.\nReference: https://tools.ietf.org/html/rfc7231#section-7.1.2", + "schema": { + "type": "string" + }, + "example": "http://www.example.net/index.html" + }, + "Content-Range": { + "description": "The Content-Range header field is sent in a single part 206 (Partial\nContent) response to indicate the partial range of the selected\nrepresentation enclosed as the message payload, sent in each part of a\nmultipart 206 response to indicate the range enclosed within each body\npart, and sent in 416 (Range Not Satisfiable) responses to provide\ninformation about the selected representation.\nReference: https://tools.ietf.org/html/rfc7233#section-4.2", + "schema": { + "type": "string" + }, + "example": "bytes 1-1000/3000" + }, + "Accept-Ranges": { + "description": "The Accept-Ranges header field allows a server to indicate that it\nsupports range requests for the target resource.\nReference: https://tools.ietf.org/html/rfc7233#section-2.3", + "schema": { + "type": "string" + }, + "example": "bytes" + }, + "ETag": { + "description": "The \"ETag\" header field in a response provides the current entity-tag\nfor the selected representation, as determined at the conclusion of\nhandling the request.\nReference: https://tools.ietf.org/html/rfc7232#section-2.3", + "schema": { + "type": "string" + }, + "example": "0731961c81c7403389c42cffd60f209d" + } + }, + "responses": { + "200-rendering-conversion-content": { + "description": "OK", + "content": { + "image/png": { + "schema": { + "$ref": "#/components/schemas/Binary-Content" + } + }, + "image/jpeg": { + "schema": { + "$ref": "#/components/schemas/Binary-Content" + } + }, + "image/tiff": { + "schema": { + "$ref": "#/components/schemas/Binary-Content" + } + }, + "image/svg+xml": { + "schema": { + "$ref": "#/components/schemas/Binary-Content" + } + }, + "text/plain": { + "schema": { + "$ref": "#/components/schemas/Binary-Content" + } + }, + "text/html": { + "schema": { + "$ref": "#/components/schemas/Binary-Content" + } + }, + "application/pdf": { + "schema": { + "$ref": "#/components/schemas/Binary-Content" + } + }, + "application/x-isys-docpack": { + "schema": { + "$ref": "#/components/schemas/Binary-Content" + } + } + }, + "headers": { + "Hyland-Original-Width": { + "$ref": "#/components/headers/Hyland-Original-Width" + }, + "Hyland-Original-Height": { + "$ref": "#/components/headers/Hyland-Original-Height" + }, + "Hyland-Original-Orientation": { + "$ref": "#/components/headers/Hyland-Original-Orientation" + }, + "Hyland-Original-Media-Type": { + "$ref": "#/components/headers/Hyland-Original-Media-Type" + }, + "Hyland-Original-X-DPI": { + "$ref": "#/components/headers/Hyland-Original-X-DPI" + }, + "Hyland-Original-Y-DPI": { + "$ref": "#/components/headers/Hyland-Original-Y-DPI" + }, + "Hyland-Rendition-Width": { + "$ref": "#/components/headers/Hyland-Rendition-Width" + }, + "Hyland-Rendition-Height": { + "$ref": "#/components/headers/Hyland-Rendition-Height" + }, + "Hyland-Rendition-X-DPI": { + "$ref": "#/components/headers/Hyland-Rendition-X-DPI" + }, + "Hyland-Rendition-Y-DPI": { + "$ref": "#/components/headers/Hyland-Rendition-Y-DPI" + }, + "Hyland-Available-Pages": { + "$ref": "#/components/headers/Hyland-Available-Pages" + } + } + }, + "400-COLLECTIONPARAMETERS-RESPONSE": { + "description": "Response when the user tries to combine id and systemName query parameters.", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/Problem-Detail" + }, + "example": { + "type": "https://example.net/bad-request", + "title": "Bad Request", + "status": 400, + "detail": "Cannot combine id and systemName query parameters.", + "instance": "/example-resource" + } + } + } + }, + "409-LOCKING-RESPONSE": { + "description": "Response when the user tries to obtain a lock on an item that is already locked.", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/Problem-Detail-Locking-Error" + }, + "example": { + "type": "https://example.net/conflict", + "title": "Conflict", + "status": 409, + "detail": "Cannot obtain lock. Item is already locked.", + "instance": "/example-resource", + "lockInfo": { + "lockedByUserId": "2", + "lockType": "Keywords", + "currentLock": "DocumentCheckoutInSameSession" + } + } + } + } + }, + "401-GENERIC-RESPONSE": { + "description": "Response when the user does not supply valid authorization credentials.", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/Problem-Detail" + }, + "example": { + "type": "https://example.net/unauthorized", + "title": "Unauthorized", + "status": 401, + "detail": "Not authorized to perform this action.", + "instance": "/example-resource" + } + } + } + }, + "404-GENERIC-RESPONSE": { + "description": "Response when the resource does not exist or the user does not have rights\nto the resource.", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/Problem-Detail" + }, + "example": { + "type": "https://example.net/not-found", + "title": "Not Found", + "status": 404, + "detail": "The requested resource was not found.", + "instance": "/example-resource" + } + } + } + }, + "403-GENERIC-RESPONSE": { + "description": "Response when the user does not have permissions to access the resource.", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/Problem-Detail" + }, + "example": { + "type": "https://example.net/forbidden", + "title": "Forbidden", + "status": 403, + "detail": "Do not have permissions to access this resource.", + "instance": "/example-resource" + } + } + } + }, + "400-GENERIC-RESPONSE": { + "description": "Response for when a bad request is provided.", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/Problem-Detail" + }, + "example": { + "type": "https://example.net/bad-request", + "title": "Bad Request", + "status": 400, + "detail": "Request is missing required data.", + "instance": "/example-resource" + } + } + } + }, + "406-GENERIC-RESPONSE": { + "description": "Response for when a response matching the list of acceptable values\ndefined in `Accept` cannot be served.", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/Problem-Detail" + }, + "example": { + "type": "https://example.net/not-acceptable", + "title": "Not Acceptable", + "status": 406, + "detail": "The requested media type is not acceptable.", + "instance": "/example-resource" + } + } + } + } + } + } +} \ No newline at end of file diff --git a/client/integration-tests/additional-properties/src/main/resources/application.properties b/client/integration-tests/additional-properties/src/main/resources/application.properties index d0997432d..b64974415 100644 --- a/client/integration-tests/additional-properties/src/main/resources/application.properties +++ b/client/integration-tests/additional-properties/src/main/resources/application.properties @@ -5,10 +5,6 @@ quarkus.openapi-generator.codegen.spec.with_additional_properties_as_attr_yaml.a # with additional properties as attribute = FALSE quarkus.openapi-generator.codegen.spec.no_additional_properties_as_attr_yaml.additional-properties-as-attribute=false - - - - - +quarkus.keycloak.devservices.enabled=false diff --git a/client/integration-tests/array-enum/src/main/resources/application.properties b/client/integration-tests/array-enum/src/main/resources/application.properties index dbf38ebe3..1cb92c2d8 100644 --- a/client/integration-tests/array-enum/src/main/resources/application.properties +++ b/client/integration-tests/array-enum/src/main/resources/application.properties @@ -1 +1,2 @@ -quarkus.rest-client.array_enum_yaml.url=http://localhost:8080 \ No newline at end of file +quarkus.rest-client.array_enum_yaml.url=http://localhost:8080 +quarkus.keycloak.devservices.enabled=false \ No newline at end of file diff --git a/client/integration-tests/bean-validation/src/main/resources/application.properties b/client/integration-tests/bean-validation/src/main/resources/application.properties index e3cf8e15d..0078b6e34 100644 --- a/client/integration-tests/bean-validation/src/main/resources/application.properties +++ b/client/integration-tests/bean-validation/src/main/resources/application.properties @@ -1,2 +1,3 @@ quarkus.openapi-generator.codegen.spec.bean_validation_true_yaml.use-bean-validation = true -quarkus.openapi-generator.codegen.spec.bean_validation_false_yaml.use-bean-validation = false \ No newline at end of file +quarkus.openapi-generator.codegen.spec.bean_validation_false_yaml.use-bean-validation = false +quarkus.keycloak.devservices.enabled=false \ No newline at end of file diff --git a/client/integration-tests/beanparam/src/main/resources/application.properties b/client/integration-tests/beanparam/src/main/resources/application.properties new file mode 100644 index 000000000..9de819ddd --- /dev/null +++ b/client/integration-tests/beanparam/src/main/resources/application.properties @@ -0,0 +1 @@ +quarkus.keycloak.devservices.enabled=false \ No newline at end of file diff --git a/client/integration-tests/change-custom-template-directory/src/main/custom/templates/api.qute b/client/integration-tests/change-custom-template-directory/src/main/custom/templates/api.qute index ba096f06d..6e60df751 100644 --- a/client/integration-tests/change-custom-template-directory/src/main/custom/templates/api.qute +++ b/client/integration-tests/change-custom-template-directory/src/main/custom/templates/api.qute @@ -4,10 +4,10 @@ package {package}; import {imp.import}; {/for} import org.eclipse.microprofile.rest.client.inject.RegisterRestClient; -{#if hasAuthMethods || custom-register-providers.orEmpty.size > 0} +{#if openapi:hasAuthMethods(operations) || custom-register-providers.orEmpty.size > 0} import org.eclipse.microprofile.rest.client.annotation.RegisterProvider; {/if} -{#if hasAuthMethods} +{#if openapi:hasAuthMethods(operations)} import org.eclipse.microprofile.rest.client.annotation.RegisterClientHeaders; import {package}.auth.CompositeAuthenticationProvider; {#if client-headers-factory is 'default'} @@ -34,10 +34,10 @@ import io.quarkiverse.openapi.generator.annotations.GeneratedParam; * {#if appDescription}

{appDescription}

{/if} */ {/if} -@Path("{#if useAnnotatedBasePath}{contextPath}{/if}{commonPath}") -@RegisterRestClient({#if defaultServerUrl}baseUri="{defaultServerUrl}",{/if}configKey="{configKey}") +@Path("{commonPath}") +@RegisterRestClient({#if !defaultServerUrl.or('') == ''}baseUri="{defaultServerUrl}",{/if} configKey="{configKey}") @GeneratedClass(value="{openapi:parseUri(inputSpec)}", tag = "{baseName}") -{#if hasAuthMethods} +{#if openapi:hasAuthMethods(operations)} @RegisterProvider(CompositeAuthenticationProvider.class) {#when client-headers-factory} {#is 'default'} @@ -106,13 +106,13 @@ public interface {classname} { {#if is-resteasy-reactive} @jakarta.ws.rs.BeanParam {op.operationIdCamelCase}MultipartForm multipartForm{#if op.hasPathParams},{/if}{! !}{#for p in op.pathParams}{#include templates.path_params param=p/}{#if p_hasNext}, {/if}{/for}{#if op.hasQueryParams},{/if}{! - !}{#for p in op.queryParams}{#include templates.query_params param=p/}{#if p_hasNext}, {/if}{/for}{#if op.hasBodyParams},{/if}{! + !}{#for p in op.queryParams}{#include templates.query_params param=p/}{#if p_hasNext}, {/if}{/for}{#if op.hasBodyParam},{/if}{! !}{#for p in op.bodyParams}{#include bodyParams.qute param=p/}{#if p_hasNext}, {/if}{/for}{#if op.hasHeaderParams},{/if}{! !}{#for p in op.headerParams}{#include headerParams.qute param=p/}{#if p_hasNext}, {/if}{/for} {#else} @org.jboss.resteasy.annotations.providers.multipart.MultipartForm {op.operationIdCamelCase}MultipartForm multipartForm{#if op.hasPathParams},{/if}{! !}{#for p in op.pathParams}{#include pathParams.qute param=p/}{#if p_hasNext}, {/if}{/for}{#if op.hasQueryParams},{/if}{! - !}{#for p in op.queryParams}{#include queryParams.qute param=p/}{#if p_hasNext}, {/if}{/for}{#if op.hasBodyParams},{/if}{! + !}{#for p in op.queryParams}{#include queryParams.qute param=p/}{#if p_hasNext}, {/if}{/for}{#if op.hasBodyParam},{/if}{! !}{#for p in op.bodyParams}{#include bodyParams.qute param=p/}{#if p_hasNext}, {/if}{/for}{#if op.hasHeaderParams},{/if}{! !}{#for p in op.headerParams}{#include headerParams.qute param=p/}{#if p_hasNext}, {/if}{/for} {/if} diff --git a/client/integration-tests/change-custom-template-directory/src/main/resources/application.properties b/client/integration-tests/change-custom-template-directory/src/main/resources/application.properties index 1d8f83320..fd3f253cc 100644 --- a/client/integration-tests/change-custom-template-directory/src/main/resources/application.properties +++ b/client/integration-tests/change-custom-template-directory/src/main/resources/application.properties @@ -1,3 +1,4 @@ quarkus.openapi-generator.codegen.template-base-dir=custom/templates quarkus.openapi-generator.codegen.spec.simple_openapi_yaml.base-package=org.simple.openapi -quarkus.rest-client.simple_openapi_yaml.uri=http://localhost:8080 \ No newline at end of file +quarkus.rest-client.simple_openapi_yaml.uri=http://localhost:8080 +quarkus.keycloak.devservices.enabled=false \ No newline at end of file diff --git a/client/integration-tests/change-directory/src/main/resources/application.properties b/client/integration-tests/change-directory/src/main/resources/application.properties index e28f97b63..a483204b1 100644 --- a/client/integration-tests/change-directory/src/main/resources/application.properties +++ b/client/integration-tests/change-directory/src/main/resources/application.properties @@ -1,3 +1,4 @@ quarkus.openapi-generator.codegen.input-base-dir=openapi-definitions quarkus.openapi-generator.codegen.spec.simple_openapi_yaml.base-package=org.simple.openapi -quarkus.rest-client.simple_openapi_yaml.uri=http://localhost:8080 \ No newline at end of file +quarkus.rest-client.simple_openapi_yaml.uri=http://localhost:8080 +quarkus.keycloak.devservices.enabled=false \ No newline at end of file diff --git a/client/integration-tests/circuit-breaker/src/main/resources/application.properties b/client/integration-tests/circuit-breaker/src/main/resources/application.properties index a5ac61d5c..334e83247 100644 --- a/client/integration-tests/circuit-breaker/src/main/resources/application.properties +++ b/client/integration-tests/circuit-breaker/src/main/resources/application.properties @@ -7,3 +7,6 @@ org.acme.openapi.simple.api.DefaultApi/byeGet/CircuitBreaker/requestVolumeThresh org.acme.openapi.simple.api.DefaultApi/byeGet/CircuitBreaker/failureRatio = 3.14 org.acme.openapi.simple.api.DefaultApi/byeGet/CircuitBreaker/successThreshold = 22 +quarkus.keycloak.devservices.enabled=false + +quarkus.openapi-generator.codegen.spec.simple_openapi_json.base-package=org.acme.openapi.simple diff --git a/client/integration-tests/circuit-breaker/src/test/java/io/quarkiverse/openapi/generator/it/circuit/breaker/SimpleOpenApiTest.java b/client/integration-tests/circuit-breaker/src/test/java/io/quarkiverse/openapi/generator/it/circuit/breaker/SimpleOpenApiTest.java index 8980f481e..73221966b 100644 --- a/client/integration-tests/circuit-breaker/src/test/java/io/quarkiverse/openapi/generator/it/circuit/breaker/SimpleOpenApiTest.java +++ b/client/integration-tests/circuit-breaker/src/test/java/io/quarkiverse/openapi/generator/it/circuit/breaker/SimpleOpenApiTest.java @@ -24,8 +24,8 @@ class SimpleOpenApiTest { @Test void circuitBreaker() throws IOException { - Path generatedRestClient = Paths.get("target", "generated-sources", "open-api-json", "org", "openapi", - "quarkus", "simple_openapi_json", "api", "DefaultApi.java"); + Path generatedRestClient = Paths.get("target", "generated-sources", "open-api-json", "org", "acme", + "openapi", "simple", "api", "DefaultApi.java"); assertThat(generatedRestClient) .exists() diff --git a/client/integration-tests/config-key/src/main/resources/application.properties b/client/integration-tests/config-key/src/main/resources/application.properties index de078f4ae..b0bfd21e4 100644 --- a/client/integration-tests/config-key/src/main/resources/application.properties +++ b/client/integration-tests/config-key/src/main/resources/application.properties @@ -14,3 +14,5 @@ quarkus.openapi-generator.codegen.spec.empty_config_key_yaml.config-key= quarkus.openapi-generator.codegen.spec.empty_config_key_yaml.additional-api-type-annotations=@io.quarkiverse.openapi.generator.configkey.CustomAnnotation quarkus.rest-client.empty_config_key_yaml.url=http://localhost:8080 + +quarkus.keycloak.devservices.enabled=false \ No newline at end of file diff --git a/client/integration-tests/cookie-authentication/src/main/resources/application.properties b/client/integration-tests/cookie-authentication/src/main/resources/application.properties index 517251c08..2cd30cc3d 100644 --- a/client/integration-tests/cookie-authentication/src/main/resources/application.properties +++ b/client/integration-tests/cookie-authentication/src/main/resources/application.properties @@ -1,2 +1,4 @@ quarkus.openapi-generator.codegen.spec.cookie_authentication_json.mutiny=true quarkus.openapi-generator.cookie_authentication_json.auth.cookie.api-key=Quarkus + +quarkus.keycloak.devservices.enabled=false \ No newline at end of file diff --git a/client/integration-tests/custom-templates/src/main/resources/application.properties b/client/integration-tests/custom-templates/src/main/resources/application.properties index a2f16a854..07439c101 100644 --- a/client/integration-tests/custom-templates/src/main/resources/application.properties +++ b/client/integration-tests/custom-templates/src/main/resources/application.properties @@ -1 +1,3 @@ -quarkus.rest-client.quarkus_simple_openapi_yaml.url=http://localhost:8080 \ No newline at end of file +quarkus.rest-client.quarkus_simple_openapi_yaml.url=http://localhost:8080 + +quarkus.keycloak.devservices.enabled=false \ No newline at end of file diff --git a/client/integration-tests/custom-templates/src/main/resources/templates/api.qute b/client/integration-tests/custom-templates/src/main/resources/templates/api.qute index ba096f06d..d037a0993 100644 --- a/client/integration-tests/custom-templates/src/main/resources/templates/api.qute +++ b/client/integration-tests/custom-templates/src/main/resources/templates/api.qute @@ -4,10 +4,10 @@ package {package}; import {imp.import}; {/for} import org.eclipse.microprofile.rest.client.inject.RegisterRestClient; -{#if hasAuthMethods || custom-register-providers.orEmpty.size > 0} +{#if openapi:hasAuthMethods(operations) || custom-register-providers.orEmpty.size > 0} import org.eclipse.microprofile.rest.client.annotation.RegisterProvider; {/if} -{#if hasAuthMethods} +{#if openapi:hasAuthMethods(operations)} import org.eclipse.microprofile.rest.client.annotation.RegisterClientHeaders; import {package}.auth.CompositeAuthenticationProvider; {#if client-headers-factory is 'default'} @@ -34,10 +34,10 @@ import io.quarkiverse.openapi.generator.annotations.GeneratedParam; * {#if appDescription}

{appDescription}

{/if} */ {/if} -@Path("{#if useAnnotatedBasePath}{contextPath}{/if}{commonPath}") -@RegisterRestClient({#if defaultServerUrl}baseUri="{defaultServerUrl}",{/if}configKey="{configKey}") +@Path("{commonPath}") +@RegisterRestClient({#if !defaultServerUrl.or('') == ''}baseUri="{defaultServerUrl}", {/if}configKey="{configKey}") @GeneratedClass(value="{openapi:parseUri(inputSpec)}", tag = "{baseName}") -{#if hasAuthMethods} +{#if openapi:hasAuthMethods(operations)} @RegisterProvider(CompositeAuthenticationProvider.class) {#when client-headers-factory} {#is 'default'} @@ -106,13 +106,13 @@ public interface {classname} { {#if is-resteasy-reactive} @jakarta.ws.rs.BeanParam {op.operationIdCamelCase}MultipartForm multipartForm{#if op.hasPathParams},{/if}{! !}{#for p in op.pathParams}{#include templates.path_params param=p/}{#if p_hasNext}, {/if}{/for}{#if op.hasQueryParams},{/if}{! - !}{#for p in op.queryParams}{#include templates.query_params param=p/}{#if p_hasNext}, {/if}{/for}{#if op.hasBodyParams},{/if}{! + !}{#for p in op.queryParams}{#include templates.query_params param=p/}{#if p_hasNext}, {/if}{/for}{#if op.hasBodyParam},{/if}{! !}{#for p in op.bodyParams}{#include bodyParams.qute param=p/}{#if p_hasNext}, {/if}{/for}{#if op.hasHeaderParams},{/if}{! !}{#for p in op.headerParams}{#include headerParams.qute param=p/}{#if p_hasNext}, {/if}{/for} {#else} @org.jboss.resteasy.annotations.providers.multipart.MultipartForm {op.operationIdCamelCase}MultipartForm multipartForm{#if op.hasPathParams},{/if}{! !}{#for p in op.pathParams}{#include pathParams.qute param=p/}{#if p_hasNext}, {/if}{/for}{#if op.hasQueryParams},{/if}{! - !}{#for p in op.queryParams}{#include queryParams.qute param=p/}{#if p_hasNext}, {/if}{/for}{#if op.hasBodyParams},{/if}{! + !}{#for p in op.queryParams}{#include queryParams.qute param=p/}{#if p_hasNext}, {/if}{/for}{#if op.hasBodyParam},{/if}{! !}{#for p in op.bodyParams}{#include bodyParams.qute param=p/}{#if p_hasNext}, {/if}{/for}{#if op.hasHeaderParams},{/if}{! !}{#for p in op.headerParams}{#include headerParams.qute param=p/}{#if p_hasNext}, {/if}{/for} {/if} diff --git a/client/integration-tests/custom-templates/src/main/resources/templates/pojoQueryParam.qute b/client/integration-tests/custom-templates/src/main/resources/templates/pojoQueryParam.qute index 74d2d1646..6beb12f1e 100644 --- a/client/integration-tests/custom-templates/src/main/resources/templates/pojoQueryParam.qute +++ b/client/integration-tests/custom-templates/src/main/resources/templates/pojoQueryParam.qute @@ -1,21 +1,11 @@ - {#if withXml} - @XmlAccessorType(XmlAccessType.FIELD) - {#if m.hasVars}@XmlType(name = "{m.classname}", propOrder = - { {#for var in m.vars}"{var.name}"{#if var_hasNext}, {/if}{/for} - }){#else} - @XmlType(name = "{m.classname}") - {/if} - {#if !m.parent || m.parent.isEmpty}@XmlRootElement(name = "{m.classname}"){/if} - {#else} @JsonIgnoreProperties(ignoreUnknown = true) - {/if} {#if m.description} /** * {m.description} **/ {/if} {#include additionalModelTypeAnnotations.qute m=m/} - public static class {m.classname}QueryParam {#if m.parent}extends {m.parent}{/if}{#if m.serializableModel} implements Serializable{/if} { + public static class {m.classname}QueryParam {#if m.parent}extends {m.parent}{/if}{#if serializableModel} implements Serializable{/if} { public final int myCustomQueryParamAttribute = 42; @@ -28,9 +18,6 @@ {#include enumClass.qute e=v/}{/if} {/if} - {#if withXml} - @XmlElement(name="{v.basename}"{#if v.required}, required = {v.required}{/if}) - {/if} {#if m.description} /** * {m.description} @@ -63,13 +50,11 @@ {/if} * @return {v.name} **/ - {#if !withXml} @JsonProperty("{v.baseName}") - {/if} {#for ext in v.vendorExtensions.x-extra-annotation.orEmpty} {ext} {/for} - {#if v.useBeanValidation}{#include beanValidation.qute p=v/}{/if} + {#if use-bean-validation}{#include beanValidation.qute p=v/}{/if} {#if v.isEnum && v.isContainer}public {v.datatypeWithEnum} {v.getter}(){ return {v.name}; }{#else if v.isEnum && !v.isArray && !v.isMap}public {v.datatypeWithEnum} {v.getter}() { diff --git a/client/integration-tests/enum-property/src/main/resources/application.properties b/client/integration-tests/enum-property/src/main/resources/application.properties new file mode 100644 index 000000000..9de819ddd --- /dev/null +++ b/client/integration-tests/enum-property/src/main/resources/application.properties @@ -0,0 +1 @@ +quarkus.keycloak.devservices.enabled=false \ No newline at end of file diff --git a/client/integration-tests/enum-unexpected/src/main/resources/application.properties b/client/integration-tests/enum-unexpected/src/main/resources/application.properties index 04ab946c7..f41961686 100644 --- a/client/integration-tests/enum-unexpected/src/main/resources/application.properties +++ b/client/integration-tests/enum-unexpected/src/main/resources/application.properties @@ -1,4 +1,5 @@ quarkus.openapi-generator.codegen.spec.with_enum_unexpected_yaml.additional-enum-type-unexpected-member=true - quarkus.openapi-generator.codegen.spec.without_enum_unexpected_yaml.additional-enum-type-unexpected-member=false + +quarkus.keycloak.devservices.enabled=false \ No newline at end of file diff --git a/client/integration-tests/exclude/src/main/resources/application.properties b/client/integration-tests/exclude/src/main/resources/application.properties index a5f55c31d..14b0b7b70 100644 --- a/client/integration-tests/exclude/src/main/resources/application.properties +++ b/client/integration-tests/exclude/src/main/resources/application.properties @@ -1 +1,2 @@ quarkus.openapi-generator.codegen.exclude=exclude-openapi.yaml +quarkus.keycloak.devservices.enabled=false \ No newline at end of file diff --git a/client/integration-tests/generation-input/src/main/resources/application.properties b/client/integration-tests/generation-input/src/main/resources/application.properties new file mode 100644 index 000000000..9de819ddd --- /dev/null +++ b/client/integration-tests/generation-input/src/main/resources/application.properties @@ -0,0 +1 @@ +quarkus.keycloak.devservices.enabled=false \ No newline at end of file diff --git a/client/integration-tests/generation-tests/src/main/resources/application.properties b/client/integration-tests/generation-tests/src/main/resources/application.properties index 6a8f163ae..a312f6f35 100644 --- a/client/integration-tests/generation-tests/src/main/resources/application.properties +++ b/client/integration-tests/generation-tests/src/main/resources/application.properties @@ -14,3 +14,5 @@ quarkus.oidc-client.petstore_auth.grant.type=password quarkus.oidc-client.petstore_auth.grant-options.password.username=alice quarkus.oidc-client.petstore_auth.grant-options.password.password=alice quarkus.oidc-client.petstore_auth.client-id=petstore-app + +quarkus.keycloak.devservices.enabled=false \ No newline at end of file diff --git a/client/integration-tests/github/src/main/resources/application.properties b/client/integration-tests/github/src/main/resources/application.properties new file mode 100644 index 000000000..9de819ddd --- /dev/null +++ b/client/integration-tests/github/src/main/resources/application.properties @@ -0,0 +1 @@ +quarkus.keycloak.devservices.enabled=false \ No newline at end of file diff --git a/client/integration-tests/include/src/main/resources/application.properties b/client/integration-tests/include/src/main/resources/application.properties index 0d10e8524..207a30aef 100644 --- a/client/integration-tests/include/src/main/resources/application.properties +++ b/client/integration-tests/include/src/main/resources/application.properties @@ -1 +1,2 @@ quarkus.openapi-generator.codegen.include=include-openapi.yaml +quarkus.keycloak.devservices.enabled=false \ No newline at end of file diff --git a/client/integration-tests/multipart-request/src/main/resources/application.properties b/client/integration-tests/multipart-request/src/main/resources/application.properties index 3ccb9c794..fa64e2ec1 100644 --- a/client/integration-tests/multipart-request/src/main/resources/application.properties +++ b/client/integration-tests/multipart-request/src/main/resources/application.properties @@ -2,3 +2,5 @@ quarkus.openapi-generator.codegen.spec.multipart_requests_yml.base-package=org.a quarkus.openapi-generator.codegen.spec.multipart_requests_yml.additional-model-type-annotations=@io.quarkus.runtime.annotations.RegisterForReflection # By default the openapi-generator doesn't generate models for multipart requests quarkus.openapi-generator.codegen.spec.multipart_requests_yml.skip-form-model=false + +quarkus.keycloak.devservices.enabled=false \ No newline at end of file diff --git a/client/integration-tests/mutiny-return-response/src/main/resources/application.properties b/client/integration-tests/mutiny-return-response/src/main/resources/application.properties index 826dba648..ce35b884b 100644 --- a/client/integration-tests/mutiny-return-response/src/main/resources/application.properties +++ b/client/integration-tests/mutiny-return-response/src/main/resources/application.properties @@ -34,3 +34,5 @@ quarkus.openapi-generator.codegen.spec.mutiny_return_response_true_void_simple_o quarkus.openapi-generator.codegen.spec.mutiny_multi_return_response_true_void_simple_openapi_yaml.mutiny = true quarkus.openapi-generator.codegen.spec.mutiny_multi_return_response_true_void_simple_openapi_yaml.mutiny.return-response = true quarkus.openapi-generator.codegen.spec.mutiny_multi_return_response_true_void_simple_openapi_yaml.mutiny.operation-ids.hello = Multi + +quarkus.keycloak.devservices.enabled=false \ No newline at end of file diff --git a/client/integration-tests/mutiny/src/main/resources/application.properties b/client/integration-tests/mutiny/src/main/resources/application.properties index b1900ad13..7fdc33f2c 100644 --- a/client/integration-tests/mutiny/src/main/resources/application.properties +++ b/client/integration-tests/mutiny/src/main/resources/application.properties @@ -8,4 +8,6 @@ quarkus.openapi-generator.codegen.spec.quarkus_multiple_endpoints_openapi_yaml.m quarkus.openapi-generator.codegen.spec.quarkus_multiple_endpoints_wrong_configuration_openapi_yaml.mutiny=true quarkus.openapi-generator.codegen.spec.quarkus_multiple_endpoints_wrong_configuration_openapi_yaml.mutiny.operation-ids.testEndpoint1=Multi quarkus.openapi-generator.codegen.spec.quarkus_multiple_endpoints_wrong_configuration_openapi_yaml.mutiny.operation-ids.testEndpoint2=Uni -quarkus.openapi-generator.codegen.spec.quarkus_multiple_endpoints_wrong_configuration_openapi_yaml.mutiny.operation-ids.testEndpoint3=Umi \ No newline at end of file +quarkus.openapi-generator.codegen.spec.quarkus_multiple_endpoints_wrong_configuration_openapi_yaml.mutiny.operation-ids.testEndpoint3=Umi + +quarkus.keycloak.devservices.enabled=false \ No newline at end of file diff --git a/client/integration-tests/open-api-normalizer/src/main/resources/application.properties b/client/integration-tests/open-api-normalizer/src/main/resources/application.properties index d80d6c847..9a6d0d6a3 100644 --- a/client/integration-tests/open-api-normalizer/src/main/resources/application.properties +++ b/client/integration-tests/open-api-normalizer/src/main/resources/application.properties @@ -1,4 +1,6 @@ quarkus.openapi-generator.codegen.spec.open_api_normalizer_json.base-package=org.acme.openapi.animals quarkus.openapi-generator.codegen.spec.open_api_normalizer_json.type-mappings.DateTime=Instant quarkus.openapi-generator.codegen.spec.open_api_normalizer_json.import-mappings.Instant=java.time.Instant -quarkus.openapi-generator.codegen.spec.open_api_normalizer_json.open-api-normalizer.REF_AS_PARENT_IN_ALLOF=true \ No newline at end of file +quarkus.openapi-generator.codegen.spec.open_api_normalizer_json.open-api-normalizer.REF_AS_PARENT_IN_ALLOF=true + +quarkus.keycloak.devservices.enabled=false \ No newline at end of file diff --git a/client/integration-tests/part-filename/src/main/resources/application.properties b/client/integration-tests/part-filename/src/main/resources/application.properties index b48826d72..9327f700a 100644 --- a/client/integration-tests/part-filename/src/main/resources/application.properties +++ b/client/integration-tests/part-filename/src/main/resources/application.properties @@ -23,3 +23,5 @@ quarkus.openapi-generator.codegen.spec.do_not_use_field_name_in_part_filename_ym quarkus.openapi-generator.codegen.spec.do_not_use_field_name_in_part_filename_yml.generate-part-filename=true quarkus.openapi-generator.codegen.spec.do_not_use_field_name_in_part_filename_yml.part-filename-value=test.pdf quarkus.openapi-generator.codegen.spec.do_not_use_field_name_in_part_filename_yml.use-field-name-in-part-filename=false + +quarkus.keycloak.devservices.enabled=false \ No newline at end of file diff --git a/client/integration-tests/polymorphism/src/main/resources/application.properties b/client/integration-tests/polymorphism/src/main/resources/application.properties new file mode 100644 index 000000000..9de819ddd --- /dev/null +++ b/client/integration-tests/polymorphism/src/main/resources/application.properties @@ -0,0 +1 @@ +quarkus.keycloak.devservices.enabled=false \ No newline at end of file diff --git a/client/integration-tests/return-response/src/main/resources/application.properties b/client/integration-tests/return-response/src/main/resources/application.properties index a8e2cac17..ea03ea095 100644 --- a/client/integration-tests/return-response/src/main/resources/application.properties +++ b/client/integration-tests/return-response/src/main/resources/application.properties @@ -11,4 +11,6 @@ quarkus.openapi-generator.codegen.spec.return_response_true_void_simple_openapi_ quarkus.openapi-generator.codegen.spec.return_response_false_string_simple_openapi_yaml.mutiny = false quarkus.openapi-generator.codegen.spec.return_response_false_void_simple_openapi_yaml.mutiny = false quarkus.openapi-generator.codegen.spec.return_response_true_string_simple_openapi_yaml.mutiny = false -quarkus.openapi-generator.codegen.spec.return_response_true_void_simple_openapi_yaml.mutiny = false \ No newline at end of file +quarkus.openapi-generator.codegen.spec.return_response_true_void_simple_openapi_yaml.mutiny = false + +quarkus.keycloak.devservices.enabled=false \ No newline at end of file diff --git a/client/integration-tests/security/src/main/resources/application.properties b/client/integration-tests/security/src/main/resources/application.properties index 03188f952..5422a5e76 100644 --- a/client/integration-tests/security/src/main/resources/application.properties +++ b/client/integration-tests/security/src/main/resources/application.properties @@ -76,4 +76,6 @@ quarkus.oidc-client.service5_oauth2.discovery-enabled=false quarkus.oidc-client.service5_oauth2.client-id=kogito-app quarkus.oidc-client.service5_oauth2.grant.type=client quarkus.oidc-client.service5_oauth2.credentials.client-secret.method=basic -quarkus.oidc-client.service5_oauth2.credentials.client-secret.value=secret \ No newline at end of file +quarkus.oidc-client.service5_oauth2.credentials.client-secret.value=secret + +quarkus.keycloak.devservices.enabled=false \ No newline at end of file diff --git a/client/integration-tests/simple/src/main/resources/application.properties b/client/integration-tests/simple/src/main/resources/application.properties index a2f16a854..07439c101 100644 --- a/client/integration-tests/simple/src/main/resources/application.properties +++ b/client/integration-tests/simple/src/main/resources/application.properties @@ -1 +1,3 @@ -quarkus.rest-client.quarkus_simple_openapi_yaml.url=http://localhost:8080 \ No newline at end of file +quarkus.rest-client.quarkus_simple_openapi_yaml.url=http://localhost:8080 + +quarkus.keycloak.devservices.enabled=false \ No newline at end of file diff --git a/client/integration-tests/skip-validation/src/main/resources/application.properties b/client/integration-tests/skip-validation/src/main/resources/application.properties index 054894535..8cccb79fe 100644 --- a/client/integration-tests/skip-validation/src/main/resources/application.properties +++ b/client/integration-tests/skip-validation/src/main/resources/application.properties @@ -1 +1,2 @@ -quarkus.openapi-generator.codegen.validateSpec=false \ No newline at end of file +quarkus.openapi-generator.codegen.validateSpec=false +quarkus.keycloak.devservices.enabled=false \ No newline at end of file diff --git a/client/integration-tests/suffix-prefix/src/main/resources/application.properties b/client/integration-tests/suffix-prefix/src/main/resources/application.properties index 2655ddeec..3e88e88d6 100644 --- a/client/integration-tests/suffix-prefix/src/main/resources/application.properties +++ b/client/integration-tests/suffix-prefix/src/main/resources/application.properties @@ -1,4 +1,6 @@ quarkus.rest-client.quarkus_suffix_prefix_openapi_yaml.url=http://localhost:8080 quarkus.openapi-generator.codegen.spec.quarkus_suffix_prefix_openapi_yaml.api-name-suffix=CustomApiSuffix quarkus.openapi-generator.codegen.spec.quarkus_suffix_prefix_openapi_yaml.model-name-suffix=CustomModelSuffix -quarkus.openapi-generator.codegen.spec.quarkus_suffix_prefix_openapi_yaml.model-name-prefix=CustomModelPrefix \ No newline at end of file +quarkus.openapi-generator.codegen.spec.quarkus_suffix_prefix_openapi_yaml.model-name-prefix=CustomModelPrefix + +quarkus.keycloak.devservices.enabled=false \ No newline at end of file diff --git a/client/integration-tests/type-mapping/src/main/resources/application.properties b/client/integration-tests/type-mapping/src/main/resources/application.properties index e7665f407..8a347ccf3 100644 --- a/client/integration-tests/type-mapping/src/main/resources/application.properties +++ b/client/integration-tests/type-mapping/src/main/resources/application.properties @@ -2,4 +2,6 @@ quarkus.openapi-generator.codegen.spec.type_mappings_testing_yml.type-mappings.U quarkus.openapi-generator.codegen.spec.type_mappings_testing_yml.type-mappings.File=InputStream quarkus.openapi-generator.codegen.spec.type_mappings_testing_yml.import-mappings.File=java.io.InputStream quarkus.openapi-generator.codegen.spec.type_mappings_testing_yml.base-package=org.acme.openapi.typemapping -quarkus.openapi-generator.codegen.spec.type_mappings_testing_yml.additional-api-type-annotations=@org.eclipse.microprofile.rest.client.annotation.RegisterProvider(io.quarkiverse.openapi.generator.it.type.mapping.OffsetDateTimeParamConverterProvider.class) \ No newline at end of file +quarkus.openapi-generator.codegen.spec.type_mappings_testing_yml.additional-api-type-annotations=@org.eclipse.microprofile.rest.client.annotation.RegisterProvider(io.quarkiverse.openapi.generator.it.type.mapping.OffsetDateTimeParamConverterProvider.class) + +quarkus.keycloak.devservices.enabled=false \ No newline at end of file diff --git a/client/integration-tests/without-oidc/src/main/resources/application.properties b/client/integration-tests/without-oidc/src/main/resources/application.properties index a2f16a854..07439c101 100644 --- a/client/integration-tests/without-oidc/src/main/resources/application.properties +++ b/client/integration-tests/without-oidc/src/main/resources/application.properties @@ -1 +1,3 @@ -quarkus.rest-client.quarkus_simple_openapi_yaml.url=http://localhost:8080 \ No newline at end of file +quarkus.rest-client.quarkus_simple_openapi_yaml.url=http://localhost:8080 + +quarkus.keycloak.devservices.enabled=false \ No newline at end of file