diff --git a/qqq-middleware-api/src/main/java/com/kingsrook/qqq/api/actions/ApiFieldUtils.java b/qqq-middleware-api/src/main/java/com/kingsrook/qqq/api/actions/ApiFieldUtils.java new file mode 100644 index 00000000..79235273 --- /dev/null +++ b/qqq-middleware-api/src/main/java/com/kingsrook/qqq/api/actions/ApiFieldUtils.java @@ -0,0 +1,106 @@ +/* + * QQQ - Low-code Application Framework for Engineers. + * Copyright (C) 2021-2023. Kingsrook, LLC + * 651 N Broad St Ste 205 # 6917 | Middletown DE 19709 | United States + * contact@kingsrook.com + * https://github.com/Kingsrook/ + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +package com.kingsrook.qqq.api.actions; + + +import com.kingsrook.qqq.api.model.APIVersionRange; +import com.kingsrook.qqq.api.model.metadata.fields.ApiFieldMetaData; +import com.kingsrook.qqq.api.model.metadata.fields.ApiFieldMetaDataContainer; +import com.kingsrook.qqq.backend.core.model.metadata.fields.QFieldMetaData; +import com.kingsrook.qqq.backend.core.utils.ObjectUtils; +import com.kingsrook.qqq.backend.core.utils.StringUtils; +import org.apache.commons.lang.BooleanUtils; + + +/******************************************************************************* + ** utility methods for working with fields + ** + *******************************************************************************/ +public class ApiFieldUtils +{ + + + /******************************************************************************* + ** + *******************************************************************************/ + public static boolean isIncluded(String apiName, QFieldMetaData field) + { + ApiFieldMetaData apiFieldMetaData = getApiFieldMetaData(apiName, field); + if(apiFieldMetaData != null && BooleanUtils.isTrue(apiFieldMetaData.getIsExcluded())) + { + return (false); + } + + return (true); + } + + + + /******************************************************************************* + ** + *******************************************************************************/ + public static APIVersionRange getApiVersionRangeForRemovedField(String apiName, QFieldMetaData field) + { + ApiFieldMetaData apiFieldMetaData = getApiFieldMetaData(apiName, field); + if(apiFieldMetaData != null && apiFieldMetaData.getInitialVersion() != null) + { + if(StringUtils.hasContent(apiFieldMetaData.getFinalVersion())) + { + return (APIVersionRange.betweenAndIncluding(apiFieldMetaData.getInitialVersion(), apiFieldMetaData.getFinalVersion())); + } + else + { + throw (new IllegalStateException("RemovedApiFieldMetaData for field [" + field.getName() + "] did not specify a finalVersion.")); + } + } + else + { + throw (new IllegalStateException("RemovedApiFieldMetaData for field [" + field.getName() + "] did not specify an initialVersion.")); + } + } + + + + /******************************************************************************* + ** + *******************************************************************************/ + public static APIVersionRange getApiVersionRange(String apiName, QFieldMetaData field) + { + ApiFieldMetaData apiFieldMetaData = getApiFieldMetaData(apiName, field); + if(apiFieldMetaData != null && apiFieldMetaData.getInitialVersion() != null) + { + return (APIVersionRange.afterAndIncluding(apiFieldMetaData.getInitialVersion())); + } + + return (APIVersionRange.none()); + } + + + + /******************************************************************************* + ** + *******************************************************************************/ + public static ApiFieldMetaData getApiFieldMetaData(String apiName, QFieldMetaData field) + { + return ObjectUtils.tryAndRequireNonNullElse(() -> ApiFieldMetaDataContainer.of(field).getApiFieldMetaData(apiName), new ApiFieldMetaData()); + } +} diff --git a/qqq-middleware-api/src/main/java/com/kingsrook/qqq/api/actions/GenerateOpenApiSpecAction.java b/qqq-middleware-api/src/main/java/com/kingsrook/qqq/api/actions/GenerateOpenApiSpecAction.java index 247242b1..c6eda4c5 100644 --- a/qqq-middleware-api/src/main/java/com/kingsrook/qqq/api/actions/GenerateOpenApiSpecAction.java +++ b/qqq-middleware-api/src/main/java/com/kingsrook/qqq/api/actions/GenerateOpenApiSpecAction.java @@ -111,7 +111,7 @@ public class GenerateOpenApiSpecAction extends AbstractQActionFunction tags) + private Path generateProcessSpecPathObject(ApiInstanceMetaData apiInstanceMetaData, ApiProcessMetaData apiProcessMetaData, QProcessMetaData processMetaData, List tags, APIVersion apiVersion) { String description = apiProcessMetaData.getDescription(); if(!StringUtils.hasContent(description)) @@ -927,7 +927,10 @@ public class GenerateOpenApiSpecAction extends AbstractQActionFunction ApiFieldMetaDataContainer.of(field).getApiFieldMetaData(apiName), new ApiFieldMetaData()); - } - - - /******************************************************************************* ** *******************************************************************************/