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();
+     }
+ 
+ }

Reply via email to