This is an automated email from the ASF dual-hosted git repository. ahuber pushed a commit to branch spring6 in repository https://gitbox.apache.org/repos/asf/isis.git
commit 2f728fecd96f22e174996fcac426524f63de31cb Merge: e2b5fa7283 93fa6a21b8 Author: Andi Huber <ahu...@apache.org> AuthorDate: Wed Nov 23 15:30:07 2022 +0100 Merge remote-tracking branch 'origin/master' into spring6 bom/pom.xml | 2 +- core/metamodel/pom.xml | 4 +- core/pom.xml | 4 +- .../rendering/src/main/java/module-info.java | 4 +- .../CausewayModuleRestfulObjectsRendering.java | 8 +- .../service/swagger/SwaggerServiceDefault.java | 6 +- .../service/swagger/internal/Caching.java | 35 +- .../service/swagger/internal/Generation.java | 844 --------------------- ...pecGenerator.java => OpenApiSpecGenerator.java} | 29 +- .../rendering/service/swagger/internal/RoSpec.java | 68 ++ .../internal/ValuePropertyFactoryDefault.java | 149 ---- .../swagger/internal/ValuePropertyPlugin.java | 75 -- ...ropertyFactory.java => ValueSchemaFactory.java} | 21 +- .../internal/ValueSchemaFactoryDefault.java | 127 ++++ .../service/swagger/internal/_OpenApi.java | 117 +++ .../swagger/internal/_OpenApiModelFactory.java | 813 ++++++++++++++++++++ .../rendering/service/swagger/internal/_Util.java | 19 +- ...ationTest.java => OpenApiModelFactoryTest.java} | 8 +- .../viewer/resources/SwaggerSpecResource.java | 5 + 19 files changed, 1202 insertions(+), 1136 deletions(-) diff --cc bom/pom.xml index 2e41c14f48,78833db1fa..f6bca5dbbd --- a/bom/pom.xml +++ b/bom/pom.xml @@@ -405,24 -405,17 +405,24 @@@ It is therefore a copy of org.apache:ap <quartz-scheduler.version>2.3.2</quartz-scheduler.version> - <resteasy-spring-boot-starter.version>5.0.0.Final</resteasy-spring-boot-starter.version> - <resteasy.version>5.0.0.Final</resteasy.version> <!-- keep in sync with property defined in resteasy4-spring-boot-starter --> + <resteasy-spring-boot.version>6.0.0.Alpha2</resteasy-spring-boot.version> + <resteasy-spring.version>3.0.0.Final</resteasy-spring.version> + <resteasy.version>6.2.1.Final</resteasy.version> <!-- keep in sync with property defined in resteasy4-spring-boot-starter --> + <resteasy-jaxb-provider.version>6.2.1.Final</resteasy-jaxb-provider.version> + <select2.version>4.0.13</select2.version> - <shiro.version>1.10.1</shiro.version> + <shiro.version>2.0.0-SNAPSHOT</shiro.version> <!-- latest release was 1.10.0, however we need jakarta namespace support --> <simpleslackapi.version>1.4.0</simpleslackapi.version> <slf4j-api.version>2.0.4</slf4j-api.version> <!-- also provided by spring-boot-starter-logging, needed to solve convergence issues --> - <spring-boot.version>2.7.5</spring-boot.version> + <spring-boot.version>3.0.0-RC2</spring-boot.version> <summernote.version>0.8.20</summernote.version> - <surefire-plugin.argLine>-Xmx384m</surefire-plugin.argLine> + <surefire-plugin.argLine> + -Xmx384m + --add-modules com.sun.tools.xjc + --add-reads org.eclipse.persistence.moxy=com.sun.tools.xjc + </surefire-plugin.argLine> - <swagger-core.version>1.6.9</swagger-core.version> + <swagger-core.version>2.2.7</swagger-core.version> <togglz.version>3.3.2</togglz.version> diff --cc viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/service/swagger/internal/OpenApiSpecGenerator.java index 51e6a6c78d,c785a587e6..7eb42b6d11 --- a/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/service/swagger/internal/OpenApiSpecGenerator.java +++ b/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/service/swagger/internal/OpenApiSpecGenerator.java @@@ -18,9 -18,9 +18,6 @@@ */ package org.apache.causeway.viewer.restfulobjects.rendering.service.swagger.internal; - import jakarta.inject.Inject; - import jakarta.inject.Named; -import javax.inject.Inject; -import javax.inject.Named; -- import com.fasterxml.jackson.core.JsonProcessingException; import org.springframework.stereotype.Component; @@@ -30,13 -30,13 +27,15 @@@ import org.apache.causeway.applib.servi import org.apache.causeway.core.metamodel.specloader.SpecificationLoader; import org.apache.causeway.viewer.restfulobjects.applib.CausewayModuleViewerRestfulObjectsApplib; - import io.swagger.models.Swagger; - import io.swagger.util.Json; - import io.swagger.util.Yaml; + import io.swagger.v3.core.util.Json; + import io.swagger.v3.core.util.Yaml; + import io.swagger.v3.oas.models.OpenAPI; ++import jakarta.inject.Inject; ++import jakarta.inject.Named; @Component - @Named(CausewayModuleViewerRestfulObjectsApplib.NAMESPACE + ".SwaggerSpecGenerator") - public class SwaggerSpecGenerator { + @Named(CausewayModuleViewerRestfulObjectsApplib.NAMESPACE + ".OpenApiSpecGenerator") + public class OpenApiSpecGenerator { private final SpecificationLoader specificationLoader; private final Tagger tagger; diff --cc viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/service/swagger/internal/ValueSchemaFactoryDefault.java index 0000000000,ca7e842c2f..6d4572ff78 mode 000000,100644..100644 --- a/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/service/swagger/internal/ValueSchemaFactoryDefault.java +++ b/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/service/swagger/internal/ValueSchemaFactoryDefault.java @@@ -1,0 -1,128 +1,127 @@@ + /* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + package org.apache.causeway.viewer.restfulobjects.rendering.service.swagger.internal; + + import java.math.BigDecimal; + import java.math.BigInteger; + import java.util.List; + import java.util.Map; + import java.util.Optional; + import java.util.UUID; + import java.util.function.Supplier; + import java.util.stream.Collectors; + -import javax.inject.Named; - + import org.joda.time.DateTime; + import org.joda.time.LocalDate; + import org.joda.time.LocalDateTime; + import org.springframework.stereotype.Component; + + import org.apache.causeway.commons.internal.base._NullSafe; + import org.apache.causeway.commons.internal.collections._Maps; + import org.apache.causeway.viewer.restfulobjects.applib.CausewayModuleViewerRestfulObjectsApplib; + + import io.swagger.v3.oas.models.media.BooleanSchema; + import io.swagger.v3.oas.models.media.ByteArraySchema; + import io.swagger.v3.oas.models.media.DateSchema; + import io.swagger.v3.oas.models.media.DateTimeSchema; + import io.swagger.v3.oas.models.media.IntegerSchema; + import io.swagger.v3.oas.models.media.NumberSchema; + import io.swagger.v3.oas.models.media.Schema; + import io.swagger.v3.oas.models.media.StringSchema; + import io.swagger.v3.oas.models.media.UUIDSchema; ++import jakarta.inject.Named; + import lombok.val; + + @Component + @Named(CausewayModuleViewerRestfulObjectsApplib.NAMESPACE + ".ValueSchemaFactoryDefault") + public class ValueSchemaFactoryDefault implements ValueSchemaFactory { + + private final Map<Class<?>, Factory> propertyFactoryByClass = _Maps.newHashMap(); + + private static interface Factory extends Supplier<Schema<?>> {}; + + public ValueSchemaFactoryDefault() { + + propertyFactoryByClass.put(boolean.class, BooleanSchema::new); + propertyFactoryByClass.put(Boolean.class, BooleanSchema::new); + + propertyFactoryByClass.put(byte.class, IntegerSchema::new); + propertyFactoryByClass.put(Byte.class, IntegerSchema::new); + propertyFactoryByClass.put(short.class, IntegerSchema::new); + propertyFactoryByClass.put(Short.class, IntegerSchema::new); + propertyFactoryByClass.put(int.class, IntegerSchema::new); + propertyFactoryByClass.put(Integer.class, IntegerSchema::new); + + propertyFactoryByClass.put(BigInteger.class, NumberSchema::new); + + propertyFactoryByClass.put(long.class, NumberSchema::new); + propertyFactoryByClass.put(Long.class, NumberSchema::new); + propertyFactoryByClass.put(java.sql.Timestamp.class, NumberSchema::new); + + propertyFactoryByClass.put(BigDecimal.class, NumberSchema::new); + + propertyFactoryByClass.put(float.class, NumberSchema::new); + propertyFactoryByClass.put(Float.class, NumberSchema::new); + + propertyFactoryByClass.put(double.class, NumberSchema::new); + propertyFactoryByClass.put(Double.class, NumberSchema::new); + + propertyFactoryByClass.put(char.class, StringSchema::new); + propertyFactoryByClass.put(Character.class, StringSchema::new); + propertyFactoryByClass.put(char[].class, StringSchema::new); + propertyFactoryByClass.put(String.class, StringSchema::new); + + propertyFactoryByClass.put(UUID.class, UUIDSchema::new); + + propertyFactoryByClass.put(java.util.Date.class, DateTimeSchema::new); + propertyFactoryByClass.put(DateTime.class, DateTimeSchema::new); + propertyFactoryByClass.put(LocalDateTime.class, DateTimeSchema::new); + + propertyFactoryByClass.put(java.sql.Date.class, DateSchema::new); + propertyFactoryByClass.put(LocalDate.class, DateSchema::new); + + propertyFactoryByClass.put(byte[].class, ByteArraySchema::new); + propertyFactoryByClass.put(org.apache.causeway.applib.value.Blob.class, ByteArraySchema::new); + + } + + @Override + public Optional<Schema<?>> schemaForValue(final Class<?> cls) { + if(cls == null) { + return Optional.empty(); + } + + // special case, want to treat as a value + if(cls.isEnum()) { + final List<String> enumNames = _NullSafe.stream(cls.getEnumConstants()) + .map(input->((Enum<?>)input).name()) + .collect(Collectors.toList()); + val schema = new StringSchema()._enum(enumNames); + return Optional.of(schema); + } + + final Factory factory = propertyFactoryByClass.get(cls); + if(factory != null) { + return Optional.ofNullable(factory.get()); + } + + return Optional.empty(); + } + + }