You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2017/02/21 12:22:40 UTC

camel git commit: CAMEL-10865: camel catalog - Add catalog for connectors

Repository: camel
Updated Branches:
  refs/heads/master 615314557 -> dbeb42c42


CAMEL-10865: camel catalog - Add catalog for connectors


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

Branch: refs/heads/master
Commit: dbeb42c42eeea3ede0ead9dd8a05ec519a6c7ee3
Parents: 6153145
Author: Claus Ibsen <da...@apache.org>
Authored: Tue Feb 21 13:20:53 2017 +0100
Committer: Claus Ibsen <da...@apache.org>
Committed: Tue Feb 21 13:21:21 2017 +0100

----------------------------------------------------------------------
 platforms/catalog-rest-app/ReadMe.md            |  2 +-
 .../catalog/rest/CamelCatalogRestMain.java      | 18 +++-
 platforms/catalog-rest/pom.xml                  | 37 ++++----
 .../catalog/rest/CamelConnectorCatalogRest.java | 99 ++++++++++++++++++++
 .../catalog/rest/CamelCatalogRestTest.java      |  4 +-
 .../rest/CamelConnectorCatalogRestTest.java     | 88 +++++++++++++++++
 6 files changed, 225 insertions(+), 23 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/dbeb42c4/platforms/catalog-rest-app/ReadMe.md
----------------------------------------------------------------------
diff --git a/platforms/catalog-rest-app/ReadMe.md b/platforms/catalog-rest-app/ReadMe.md
index 97ea172..8506593 100644
--- a/platforms/catalog-rest-app/ReadMe.md
+++ b/platforms/catalog-rest-app/ReadMe.md
@@ -1,7 +1,7 @@
 Camel Catalog REST Application
 ==============================
 
-This is a little standalone application which hosts the Camel Catalog REST API.
+This is a little standalone application which hosts the Camel Catalog and Connector Catalog REST API.
 
 You can run the application using
 

http://git-wip-us.apache.org/repos/asf/camel/blob/dbeb42c4/platforms/catalog-rest-app/src/main/java/org/apache/camel/catalog/rest/CamelCatalogRestMain.java
----------------------------------------------------------------------
diff --git a/platforms/catalog-rest-app/src/main/java/org/apache/camel/catalog/rest/CamelCatalogRestMain.java b/platforms/catalog-rest-app/src/main/java/org/apache/camel/catalog/rest/CamelCatalogRestMain.java
index 9f22952..674a126 100644
--- a/platforms/catalog-rest-app/src/main/java/org/apache/camel/catalog/rest/CamelCatalogRestMain.java
+++ b/platforms/catalog-rest-app/src/main/java/org/apache/camel/catalog/rest/CamelCatalogRestMain.java
@@ -27,8 +27,8 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 /**
- * Main to start the Camel Catalog REST Api application which runs standalone using an embedded CXF/Jetty server
- * with embedded Swagger Doc and Swagger UI.
+ * Main to start the Camel Catalog and Connector Catalog REST Api application
+ * which runs standalone using an embedded CXF/Jetty server with embedded Swagger Doc and Swagger UI.
  */
 public class CamelCatalogRestMain {
 
@@ -36,6 +36,7 @@ public class CamelCatalogRestMain {
 
     private Server server;
     private CamelCatalogRest catalog;
+    private CamelConnectorCatalogRest connectorCatalog;
     private int port = 8080;
 
     public static void main(String[] args) {
@@ -47,19 +48,21 @@ public class CamelCatalogRestMain {
         LOGGER.info("Starting ...");
 
         catalog = new CamelCatalogRest();
+        connectorCatalog = new CamelConnectorCatalogRest();
 
         // setup Apache CXF REST server
         JAXRSServerFactoryBean sf = new JAXRSServerFactoryBean();
-        sf.setResourceClasses(CamelCatalogRest.class);
+        sf.setResourceClasses(CamelCatalogRest.class, CamelConnectorCatalogRest.class);
         sf.setResourceProvider(CamelCatalogRest.class, new SingletonResourceProvider(catalog));
+        sf.setResourceProvider(CamelConnectorCatalogRest.class, new SingletonResourceProvider(connectorCatalog));
 
         Swagger2Feature swagger = new Swagger2Feature();
         swagger.setBasePath("/");
         swagger.setScanAllResources(false);
         swagger.setPrettyPrint(true);
         swagger.setSupportSwaggerUi(true);
-        swagger.setTitle("Camel Catalog REST Api");
-        swagger.setDescription("REST Api for the Camel Catalog");
+        swagger.setTitle("Camel Catalog and Connector Catalog REST Api");
+        swagger.setDescription("REST Api for the Camel Catalog and Connector Catalog");
         swagger.setVersion(catalog.getCatalogVersion());
         swagger.setContact("Apache Camel");
         sf.getFeatures().add(swagger);
@@ -76,6 +79,11 @@ public class CamelCatalogRestMain {
         LOGGER.info("");
         LOGGER.info("\tRest API base path: http://localhost:{}/camel-catalog", port);
         LOGGER.info("\tRest API version: http://localhost:{}/camel-catalog/catalogVersion", port);
+        LOGGER.info("");
+        LOGGER.info("CamelConnectorCatalog REST Api started");
+        LOGGER.info("");
+        LOGGER.info("\tRest API base path: http://localhost:{}/camel-connector-catalog", port);
+        LOGGER.info("");
         LOGGER.info("\tSwagger Doc: http://localhost:{}/swagger.json", port);
         LOGGER.info("\tSwagger UI: http://localhost:{}/api-docs?url=/swagger.json", port);
         LOGGER.info("");

http://git-wip-us.apache.org/repos/asf/camel/blob/dbeb42c4/platforms/catalog-rest/pom.xml
----------------------------------------------------------------------
diff --git a/platforms/catalog-rest/pom.xml b/platforms/catalog-rest/pom.xml
index 4ebc70f..4e67268 100644
--- a/platforms/catalog-rest/pom.xml
+++ b/platforms/catalog-rest/pom.xml
@@ -1,21 +1,22 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!--
+  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.
+-->
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-  <!--
-    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.
-  -->
+
   <modelVersion>4.0.0</modelVersion>
 
   <parent>
@@ -35,6 +36,10 @@
       <groupId>org.apache.camel</groupId>
       <artifactId>camel-catalog</artifactId>
     </dependency>
+    <dependency>
+      <groupId>org.apache.camel</groupId>
+      <artifactId>camel-catalog-connector</artifactId>
+    </dependency>
 
     <!-- REST api -->
     <dependency>

http://git-wip-us.apache.org/repos/asf/camel/blob/dbeb42c4/platforms/catalog-rest/src/main/java/org/apache/camel/catalog/rest/CamelConnectorCatalogRest.java
----------------------------------------------------------------------
diff --git a/platforms/catalog-rest/src/main/java/org/apache/camel/catalog/rest/CamelConnectorCatalogRest.java b/platforms/catalog-rest/src/main/java/org/apache/camel/catalog/rest/CamelConnectorCatalogRest.java
new file mode 100644
index 0000000..afe2445
--- /dev/null
+++ b/platforms/catalog-rest/src/main/java/org/apache/camel/catalog/rest/CamelConnectorCatalogRest.java
@@ -0,0 +1,99 @@
+/**
+ * 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.camel.catalog.rest;
+
+import java.util.List;
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.QueryParam;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import org.apache.camel.catalog.connector.CamelConnectorCatalog;
+import org.apache.camel.catalog.connector.ConnectorDto;
+import org.apache.camel.catalog.connector.DefaultCamelConnectorCatalog;
+
+/**
+ * A REST based {@link CamelConnectorCatalog} service as a JAX-RS resource class.
+ */
+@Api(value = "/camel-connector-catalog", description = "Camel Connector Catalog REST API")
+@Path("/camel-connector-catalog")
+public class CamelConnectorCatalogRest {
+
+    private CamelConnectorCatalog catalog = new DefaultCamelConnectorCatalog();
+
+    public CamelConnectorCatalog getCatalog() {
+        return catalog;
+    }
+
+    /**
+     * To inject an existing {@link CamelConnectorCatalog}
+     */
+    public void setCatalog(CamelConnectorCatalog catalog) {
+        this.catalog = catalog;
+    }
+
+    @GET
+    @Path("/findConnector")
+    @Produces("application/json")
+    @ApiOperation(value = "Find all the connectors from the catalog")
+    public List<ConnectorDto> findConnector(@ApiParam("Whether to include latest version only")
+                                            @QueryParam("latestVersionOnly") boolean latestVersionOnly) {
+        return catalog.findConnector(latestVersionOnly);
+    }
+
+    @GET
+    @Path("/findConnector/{filter}")
+    @Produces("application/json")
+    @ApiOperation(value = "Find all the connectors from the catalog")
+    public List<ConnectorDto> findConnector(@ApiParam("Filter the connector matching by name, description or labels")
+                                            @PathParam("filter") String filter,
+                                            @ApiParam("Whether to include latest version only")
+                                            @QueryParam("latestVersionOnly") boolean latestVersionOnly) {
+        return catalog.findConnector(latestVersionOnly);
+    }
+
+    @GET
+    @Path("/connectorJSon/{groupId}/{artifactId}/{version}")
+    @Produces("application/json")
+    @ApiOperation(value = "Returns the camel-connector json file for the given connector with the Maven coordinate")
+    public String connectorJSon(@ApiParam("Maven groupdId of the connector")
+                                @PathParam("groupId") String groupId,
+                                @ApiParam("Maven artifactId of the connector")
+                                @PathParam("artifactId") String artifactId,
+                                @ApiParam("Maven version of the connector")
+                                @PathParam("version") String version) {
+        return catalog.connectorJSon(groupId, artifactId, version);
+    }
+
+    @GET
+    @Path("/connectorSchemaJSon/{groupId}/{artifactId}/{version}")
+    @Produces("application/json")
+    @ApiOperation(value = "Returns the camel-connector-schema json file for the given connector with the Maven coordinate")
+    public String connectorSchemaJSon(@ApiParam("Maven groupdId of the connector")
+                                      @PathParam("groupId") String groupId,
+                                      @ApiParam("Maven artifactId of the connector")
+                                      @PathParam("artifactId") String artifactId,
+                                      @ApiParam("Maven version of the connector")
+                                      @PathParam("version") String version) {
+        return catalog.connectorSchemaJSon(groupId, artifactId, version);
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/camel/blob/dbeb42c4/platforms/catalog-rest/src/test/java/org/apache/camel/catalog/rest/CamelCatalogRestTest.java
----------------------------------------------------------------------
diff --git a/platforms/catalog-rest/src/test/java/org/apache/camel/catalog/rest/CamelCatalogRestTest.java b/platforms/catalog-rest/src/test/java/org/apache/camel/catalog/rest/CamelCatalogRestTest.java
index 44a17f6..46f233b 100644
--- a/platforms/catalog-rest/src/test/java/org/apache/camel/catalog/rest/CamelCatalogRestTest.java
+++ b/platforms/catalog-rest/src/test/java/org/apache/camel/catalog/rest/CamelCatalogRestTest.java
@@ -64,7 +64,8 @@ public class CamelCatalogRestTest {
     @Test
     public void testFindComponentLabels() throws Exception {
         given().
-           baseUri("http://localhost:" + port).
+            baseUri("http://localhost:" + port).
+            accept("application/json").
             when().
                 get("/camel-catalog/findComponentLabels").
             then().
@@ -75,6 +76,7 @@ public class CamelCatalogRestTest {
     public void testComponentJSonSchema() throws Exception {
         given().
             baseUri("http://localhost:" + port).
+            accept("application/json").
             when().
                 get("/camel-catalog/componentJSonSchema/quartz2").
             then().

http://git-wip-us.apache.org/repos/asf/camel/blob/dbeb42c4/platforms/catalog-rest/src/test/java/org/apache/camel/catalog/rest/CamelConnectorCatalogRestTest.java
----------------------------------------------------------------------
diff --git a/platforms/catalog-rest/src/test/java/org/apache/camel/catalog/rest/CamelConnectorCatalogRestTest.java b/platforms/catalog-rest/src/test/java/org/apache/camel/catalog/rest/CamelConnectorCatalogRestTest.java
new file mode 100644
index 0000000..04dfc22
--- /dev/null
+++ b/platforms/catalog-rest/src/test/java/org/apache/camel/catalog/rest/CamelConnectorCatalogRestTest.java
@@ -0,0 +1,88 @@
+/**
+ * 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.camel.catalog.rest;
+
+import com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider;
+import org.apache.camel.test.AvailablePortFinder;
+import org.apache.cxf.endpoint.Server;
+import org.apache.cxf.jaxrs.JAXRSServerFactoryBean;
+import org.apache.cxf.jaxrs.lifecycle.SingletonResourceProvider;
+import org.hamcrest.Matchers;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+import static io.restassured.RestAssured.given;
+
+public class CamelConnectorCatalogRestTest {
+
+    private Server server;
+    private CamelConnectorCatalogRest catalog;
+    private int port;
+
+    @Before
+    public void setup() {
+        catalog = new CamelConnectorCatalogRest();
+
+        port = AvailablePortFinder.getNextAvailable(9000);
+
+        // setup Apache CXF REST server
+        JAXRSServerFactoryBean sf = new JAXRSServerFactoryBean();
+        sf.setResourceClasses(CamelConnectorCatalogRest.class);
+        sf.setResourceProvider(CamelConnectorCatalogRest.class, new SingletonResourceProvider(catalog));
+        // to use jackson for json
+        sf.setProvider(JacksonJsonProvider.class);
+        sf.setAddress("http://localhost:" + port);
+
+        // create and start the CXF server (non blocking)
+        server = sf.create();
+        server.start();
+    }
+
+    @After
+    public void stop() {
+        if (server != null) {
+            server.stop();
+        }
+    }
+
+    @Test
+    public void testEmptyFindConnectors() throws Exception {
+        given().
+            baseUri("http://localhost:" + port).
+            accept("application/json").
+            when().
+                get("/camel-connector-catalog/findConnector?latestVersionOnly=false").
+            then().
+                body(Matchers.hasToString("[]"));
+    }
+
+    @Test
+    public void testFindConnectors() throws Exception {
+        catalog.getCatalog().addConnector("org.apache.camel", "myfoo-connector", "2.19.0", "MyFoo", "Something cool", "foo,timer", null, null);
+
+        given().
+            baseUri("http://localhost:" + port).
+            accept("application/json").
+            when().
+                get("/camel-connector-catalog/findConnector?latestVersionOnly=false").
+            then().
+                body(Matchers.containsString("MyFoo"));
+
+    }
+
+}