Small improvements to build-tools, including Swagger

Project: http://git-wip-us.apache.org/repos/asf/syncope/repo
Commit: http://git-wip-us.apache.org/repos/asf/syncope/commit/e073cc43
Tree: http://git-wip-us.apache.org/repos/asf/syncope/tree/e073cc43
Diff: http://git-wip-us.apache.org/repos/asf/syncope/diff/e073cc43

Branch: refs/heads/master
Commit: e073cc43225bbeb4c8ea670750b8f5a0829d6676
Parents: d505627
Author: Francesco Chicchiriccò <ilgro...@apache.org>
Authored: Thu Mar 1 15:47:13 2018 +0100
Committer: Francesco Chicchiriccò <ilgro...@apache.org>
Committed: Fri Mar 2 12:13:18 2018 +0100

----------------------------------------------------------------------
 fit/build-tools/pom.xml                         | 16 ++++++++++++-
 .../syncope/fit/buildtools/cxf/UserService.java |  3 ++-
 .../fit/buildtools/cxf/UserServiceImpl.java     | 13 ++++++++--
 .../META-INF/cxf/org.apache.cxf.Logger          |  1 +
 .../src/main/resources/cxfContext.xml           | 25 ++++++++++++++++++++
 5 files changed, 54 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/syncope/blob/e073cc43/fit/build-tools/pom.xml
----------------------------------------------------------------------
diff --git a/fit/build-tools/pom.xml b/fit/build-tools/pom.xml
index 9f0d783..a4172e7 100644
--- a/fit/build-tools/pom.xml
+++ b/fit/build-tools/pom.xml
@@ -45,6 +45,11 @@ under the License.
     </dependency>
     
     <dependency>
+      <groupId>javax.validation</groupId>
+      <artifactId>validation-api</artifactId>
+    </dependency>
+
+    <dependency>
       <groupId>org.apache.directory.server</groupId>
       <artifactId>apacheds-all</artifactId>
     </dependency>
@@ -88,13 +93,22 @@ under the License.
     <dependency>
       <groupId>org.apache.cxf</groupId>
       <artifactId>cxf-rt-rs-service-description</artifactId>
-    </dependency>    
+    </dependency>
+    <dependency>
+      <groupId>org.apache.cxf</groupId>
+      <artifactId>cxf-rt-rs-service-description-openapi-v3</artifactId>
+    </dependency>
     <dependency>
       <groupId>com.fasterxml.jackson.jaxrs</groupId>
       <artifactId>jackson-jaxrs-json-provider</artifactId>
     </dependency>
 
     <dependency>
+      <groupId>org.webjars</groupId>
+      <artifactId>swagger-ui</artifactId>
+    </dependency>
+
+    <dependency>
       <groupId>org.springframework</groupId>
       <artifactId>spring-core</artifactId>
       <version>${spring.version}</version>

http://git-wip-us.apache.org/repos/asf/syncope/blob/e073cc43/fit/build-tools/src/main/java/org/apache/syncope/fit/buildtools/cxf/UserService.java
----------------------------------------------------------------------
diff --git 
a/fit/build-tools/src/main/java/org/apache/syncope/fit/buildtools/cxf/UserService.java
 
b/fit/build-tools/src/main/java/org/apache/syncope/fit/buildtools/cxf/UserService.java
index 5d64cfc..f02cae4 100644
--- 
a/fit/build-tools/src/main/java/org/apache/syncope/fit/buildtools/cxf/UserService.java
+++ 
b/fit/build-tools/src/main/java/org/apache/syncope/fit/buildtools/cxf/UserService.java
@@ -30,6 +30,7 @@ import javax.ws.rs.PathParam;
 import javax.ws.rs.Produces;
 import javax.ws.rs.QueryParam;
 import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
 
 @Path("users")
 public interface UserService {
@@ -44,7 +45,7 @@ public interface UserService {
 
     @POST
     @Consumes({ MediaType.APPLICATION_JSON })
-    void create(User user);
+    Response create(User user);
 
     @PUT
     @Path("{key}")

http://git-wip-us.apache.org/repos/asf/syncope/blob/e073cc43/fit/build-tools/src/main/java/org/apache/syncope/fit/buildtools/cxf/UserServiceImpl.java
----------------------------------------------------------------------
diff --git 
a/fit/build-tools/src/main/java/org/apache/syncope/fit/buildtools/cxf/UserServiceImpl.java
 
b/fit/build-tools/src/main/java/org/apache/syncope/fit/buildtools/cxf/UserServiceImpl.java
index dea0f63..6b04515 100644
--- 
a/fit/build-tools/src/main/java/org/apache/syncope/fit/buildtools/cxf/UserServiceImpl.java
+++ 
b/fit/build-tools/src/main/java/org/apache/syncope/fit/buildtools/cxf/UserServiceImpl.java
@@ -23,8 +23,12 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.UUID;
+import javax.ws.rs.ClientErrorException;
 import javax.ws.rs.ForbiddenException;
 import javax.ws.rs.NotFoundException;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.UriInfo;
 import org.springframework.stereotype.Service;
 
 @Service
@@ -32,6 +36,9 @@ public class UserServiceImpl implements UserService {
 
     private static final Map<UUID, User> USERS = new HashMap<UUID, User>();
 
+    @Context
+    private UriInfo uriInfo;
+
     @Override
     public List<User> list() {
         return new ArrayList<>(USERS.values());
@@ -47,14 +54,16 @@ public class UserServiceImpl implements UserService {
     }
 
     @Override
-    public void create(final User user) {
+    public Response create(final User user) {
         if (user.getKey() == null) {
             user.setKey(UUID.randomUUID());
         }
         if (USERS.containsKey(user.getKey())) {
-            throw new IllegalArgumentException("User already exists: " + 
user.getKey());
+            throw new ClientErrorException("User already exists: " + 
user.getKey(), Response.Status.CONFLICT);
         }
         USERS.put(user.getKey(), user);
+
+        return 
Response.created(uriInfo.getAbsolutePathBuilder().path(user.getKey().toString()).build()).build();
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/syncope/blob/e073cc43/fit/build-tools/src/main/resources/META-INF/cxf/org.apache.cxf.Logger
----------------------------------------------------------------------
diff --git 
a/fit/build-tools/src/main/resources/META-INF/cxf/org.apache.cxf.Logger 
b/fit/build-tools/src/main/resources/META-INF/cxf/org.apache.cxf.Logger
new file mode 100644
index 0000000..6e7bd36
--- /dev/null
+++ b/fit/build-tools/src/main/resources/META-INF/cxf/org.apache.cxf.Logger
@@ -0,0 +1 @@
+org.apache.cxf.common.logging.Slf4jLogger

http://git-wip-us.apache.org/repos/asf/syncope/blob/e073cc43/fit/build-tools/src/main/resources/cxfContext.xml
----------------------------------------------------------------------
diff --git a/fit/build-tools/src/main/resources/cxfContext.xml 
b/fit/build-tools/src/main/resources/cxfContext.xml
index 9a6c959..7384e55 100644
--- a/fit/build-tools/src/main/resources/cxfContext.xml
+++ b/fit/build-tools/src/main/resources/cxfContext.xml
@@ -38,6 +38,28 @@ under the License.
       
   <jaxws:endpoint id="soapProvisioning" address="/soap" 
implementor="#provisioningImpl"/>
   
+  <bean id="openApiCustomizer" 
class="org.apache.cxf.jaxrs.openapi.OpenApiCustomizer">
+    <property name="dynamicBasePath" value="true"/>
+    <property name="replaceTags" value="false"/>
+  </bean>
+  <bean id="openapiFeature" 
class="org.apache.cxf.jaxrs.openapi.OpenApiFeature">
+    <property name="title" value="Apache Syncope FIT Build Tools"/>
+    <property name="version" value="${syncope.version}"/>
+    <property name="description" value="Apache Syncope ${syncope.version}"/>   
 
+    <property name="contactName" value="The Apache Syncope community"/>    
+    <property name="contactEmail" value="d...@syncope.apache.org"/>    
+    <property name="contactUrl" value="http://syncope.apache.org"/>    
+    
+    <property name="scan" value="false"/>    
+    <property name="resourcePackages">
+      <set>
+        <value>org.apache.syncope.fit.buildtools.cxf</value>
+      </set>
+    </property>
+    
+    <property name="customizer" ref="openApiCustomizer"/>
+  </bean>
+  
   <bean id="jsonProvider" 
class="com.fasterxml.jackson.jaxrs.json.JacksonJaxbJsonProvider"/>
   <jaxrs:server id="restProvisioning" address="/rest"
                 basePackages="org.apache.syncope.fit.buildtools.cxf" 
@@ -45,6 +67,9 @@ under the License.
     <jaxrs:providers>
       <ref bean="jsonProvider"/>
     </jaxrs:providers>
+    <jaxrs:features>
+      <ref bean="openapiFeature"/>
+    </jaxrs:features>
   </jaxrs:server>
 
 </beans>

Reply via email to