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/27 13:07:55 UTC
[1/4] camel git commit: CAMEL-10898: camel-catalog - Allow to add
custom component/connector by download JAR via maven
Repository: camel
Updated Branches:
refs/heads/master 59170dd0f -> 4d9ad42bf
CAMEL-10898: camel-catalog - Allow to add custom component/connector by download JAR via maven
Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/4d9ad42b
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/4d9ad42b
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/4d9ad42b
Branch: refs/heads/master
Commit: 4d9ad42bfedd1745f81d54520476847980883162
Parents: c9e4817
Author: Claus Ibsen <da...@apache.org>
Authored: Mon Feb 27 14:07:37 2017 +0100
Committer: Claus Ibsen <da...@apache.org>
Committed: Mon Feb 27 14:07:45 2017 +0100
----------------------------------------------------------------------
.../maven/DefaultMavenArtifactProvider.java | 34 ++++++++++----------
.../catalog/maven/MavenArtifactProvider.java | 8 +++--
.../maven/MavenArtifactProviderTest.java | 10 +++---
.../camel/catalog/rest/CamelCatalogRest.java | 10 +++---
.../catalog/rest/CamelConnectorCatalogRest.java | 11 ++++---
5 files changed, 39 insertions(+), 34 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/4d9ad42b/platforms/camel-catalog-maven/src/main/java/org/apache/camel/catalog/maven/DefaultMavenArtifactProvider.java
----------------------------------------------------------------------
diff --git a/platforms/camel-catalog-maven/src/main/java/org/apache/camel/catalog/maven/DefaultMavenArtifactProvider.java b/platforms/camel-catalog-maven/src/main/java/org/apache/camel/catalog/maven/DefaultMavenArtifactProvider.java
index 9933494..77ee431 100644
--- a/platforms/camel-catalog-maven/src/main/java/org/apache/camel/catalog/maven/DefaultMavenArtifactProvider.java
+++ b/platforms/camel-catalog-maven/src/main/java/org/apache/camel/catalog/maven/DefaultMavenArtifactProvider.java
@@ -18,8 +18,10 @@ package org.apache.camel.catalog.maven;
import java.util.HashMap;
import java.util.Iterator;
+import java.util.LinkedHashSet;
import java.util.Map;
import java.util.Properties;
+import java.util.Set;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
@@ -51,8 +53,10 @@ public class DefaultMavenArtifactProvider implements MavenArtifactProvider {
}
@Override
- public boolean addArtifactToCatalog(CamelCatalog camelCatalog, CamelConnectorCatalog camelConnectorCatalog,
- String groupId, String artifactId, String version) {
+ public Set<String> addArtifactToCatalog(CamelCatalog camelCatalog, CamelConnectorCatalog camelConnectorCatalog,
+ String groupId, String artifactId, String version) {
+ final Set<String> names = new LinkedHashSet<>();
+
try {
Grape.setEnableAutoDownload(true);
@@ -68,22 +72,21 @@ public class DefaultMavenArtifactProvider implements MavenArtifactProvider {
Grape.grab(param);
// the classloader can load content from the downloaded JAR
- boolean found = false;
if (camelCatalog != null) {
- found |= scanCamelComponents(camelCatalog, classLoader);
+ scanCamelComponents(camelCatalog, classLoader, names);
}
if (camelConnectorCatalog != null) {
- found |= scanCamelConnectors(camelConnectorCatalog, classLoader, groupId, artifactId, version);
+ scanCamelConnectors(camelConnectorCatalog, classLoader, groupId, artifactId, version, names);
}
- return found;
} catch (Exception e) {
- return false;
+ LOG.warn("Error during add components from artifact " + groupId + ":" + artifactId + ":" + version + " due " + e.getMessage(), e);
}
+
+ return names;
}
- protected boolean scanCamelComponents(CamelCatalog camelCatalog, ClassLoader classLoader) {
- boolean found = false;
+ protected void scanCamelComponents(CamelCatalog camelCatalog, ClassLoader classLoader, Set<String> names) {
// is there any custom Camel components in this library?
Properties properties = loadComponentProperties(classLoader);
if (properties != null) {
@@ -99,20 +102,18 @@ public class DefaultMavenArtifactProvider implements MavenArtifactProvider {
if (json != null) {
LOG.debug("Adding component: {}", scheme);
camelCatalog.addComponent(scheme, javaType, json);
- found = true;
+ names.add(scheme);
}
}
}
}
}
}
- return found;
}
- protected boolean scanCamelConnectors(CamelConnectorCatalog camelConnectorCatalog, ClassLoader classLoader,
- String groupId, String artifactId, String version) {
- boolean found = false;
-
+ protected void scanCamelConnectors(CamelConnectorCatalog camelConnectorCatalog, ClassLoader classLoader,
+ String groupId, String artifactId, String version,
+ Set<String> names) {
String[] json = loadConnectorJSonSchema(classLoader);
if (json != null) {
if (!camelConnectorCatalog.hasConnector(groupId, artifactId, version)) {
@@ -132,13 +133,12 @@ public class DefaultMavenArtifactProvider implements MavenArtifactProvider {
camelConnectorCatalog.addConnector(groupId, artifactId, version,
name, description, csb.toString(), json[0], json[1]);
- found = true;
+ names.add(name);
} catch (Throwable e) {
LOG.warn("Error parsing Connector JSon due " + e.getMessage(), e);
}
}
}
- return found;
}
}
http://git-wip-us.apache.org/repos/asf/camel/blob/4d9ad42b/platforms/camel-catalog-maven/src/main/java/org/apache/camel/catalog/maven/MavenArtifactProvider.java
----------------------------------------------------------------------
diff --git a/platforms/camel-catalog-maven/src/main/java/org/apache/camel/catalog/maven/MavenArtifactProvider.java b/platforms/camel-catalog-maven/src/main/java/org/apache/camel/catalog/maven/MavenArtifactProvider.java
index d88fc2d..309a463 100644
--- a/platforms/camel-catalog-maven/src/main/java/org/apache/camel/catalog/maven/MavenArtifactProvider.java
+++ b/platforms/camel-catalog-maven/src/main/java/org/apache/camel/catalog/maven/MavenArtifactProvider.java
@@ -16,6 +16,8 @@
*/
package org.apache.camel.catalog.maven;
+import java.util.Set;
+
import org.apache.camel.catalog.CamelCatalog;
import org.apache.camel.catalog.connector.CamelConnectorCatalog;
@@ -41,9 +43,9 @@ public interface MavenArtifactProvider {
* @param groupId Maven group id
* @param artifactId Maven artifact id
* @param version Maven version
- * @return <tt>true</tt> if anything was added to the catalog, <tt>false</tt> if not.
+ * @return the names of the components that was added, or an empty set if none found or they already exists in the catalog
*/
- boolean addArtifactToCatalog(CamelCatalog camelCatalog, CamelConnectorCatalog camelConnectorCatalog,
- String groupId, String artifactId, String version);
+ Set<String> addArtifactToCatalog(CamelCatalog camelCatalog, CamelConnectorCatalog camelConnectorCatalog,
+ String groupId, String artifactId, String version);
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/camel/blob/4d9ad42b/platforms/camel-catalog-maven/src/test/java/org/apache/camel/catalog/maven/MavenArtifactProviderTest.java
----------------------------------------------------------------------
diff --git a/platforms/camel-catalog-maven/src/test/java/org/apache/camel/catalog/maven/MavenArtifactProviderTest.java b/platforms/camel-catalog-maven/src/test/java/org/apache/camel/catalog/maven/MavenArtifactProviderTest.java
index 93d7c12..bf83e1f 100644
--- a/platforms/camel-catalog-maven/src/test/java/org/apache/camel/catalog/maven/MavenArtifactProviderTest.java
+++ b/platforms/camel-catalog-maven/src/test/java/org/apache/camel/catalog/maven/MavenArtifactProviderTest.java
@@ -17,6 +17,7 @@
package org.apache.camel.catalog.maven;
import java.util.List;
+import java.util.Set;
import junit.framework.TestCase;
import org.apache.camel.catalog.CamelCatalog;
@@ -35,8 +36,8 @@ public class MavenArtifactProviderTest extends TestCase {
int before = camelCatalog.findComponentNames().size();
- boolean found = provider.addArtifactToCatalog(camelCatalog, null, "org.apache.camel", "dummy-component", camelCatalog.getCatalogVersion());
- assertTrue(found);
+ Set<String> names = provider.addArtifactToCatalog(camelCatalog, null, "org.apache.camel", "dummy-component", camelCatalog.getCatalogVersion());
+ assertTrue(names.contains("dummy"));
int after = camelCatalog.findComponentNames().size();
@@ -53,8 +54,8 @@ public class MavenArtifactProviderTest extends TestCase {
List<ConnectorDto> list = camelConnectorCatalog.findConnector("foo", false);
assertEquals(0, list.size());
- boolean found = provider.addArtifactToCatalog(camelCatalog, camelConnectorCatalog, "org.apache.camel", "myfoo-connector", camelCatalog.getCatalogVersion());
- assertTrue(found);
+ Set<String> names = provider.addArtifactToCatalog(camelCatalog, camelConnectorCatalog, "org.apache.camel", "myfoo-connector", camelCatalog.getCatalogVersion());
+ assertTrue(names.contains("MyFoo"));
int after = camelCatalog.findComponentNames().size();
@@ -65,4 +66,5 @@ public class MavenArtifactProviderTest extends TestCase {
assertEquals("MyFoo", list.get(0).getName());
assertTrue(camelCatalog.findComponentNames().contains("my-foo"));
}
+
}
http://git-wip-us.apache.org/repos/asf/camel/blob/4d9ad42b/platforms/camel-catalog-rest/src/main/java/org/apache/camel/catalog/rest/CamelCatalogRest.java
----------------------------------------------------------------------
diff --git a/platforms/camel-catalog-rest/src/main/java/org/apache/camel/catalog/rest/CamelCatalogRest.java b/platforms/camel-catalog-rest/src/main/java/org/apache/camel/catalog/rest/CamelCatalogRest.java
index 5690279..e81d795 100644
--- a/platforms/camel-catalog-rest/src/main/java/org/apache/camel/catalog/rest/CamelCatalogRest.java
+++ b/platforms/camel-catalog-rest/src/main/java/org/apache/camel/catalog/rest/CamelCatalogRest.java
@@ -298,11 +298,11 @@ public class CamelCatalogRest {
@POST
@Path("/addComponentFromMavenArtifact/{groupId}/{artifactId}/{version}")
- @Produces("text/plain")
- @ApiOperation(value = "Downloads the Maven artifact and scan for custom Camel components which will be added to the catalog")
- public boolean addComponentFromMavenArtifact(@ApiParam("The Maven groupId") @PathParam("groupId") String groupId,
- @ApiParam("The Maven artifactId") @PathParam("artifactId") String artifactId,
- @ApiParam("The Maven version") @PathParam("version") String version) {
+ @Produces("application/json")
+ @ApiOperation(value = "Downloads the Maven artifact and scan for custom Camel components which will be added to the catalog and returns the names of the found components")
+ public Set<String> addComponentFromMavenArtifact(@ApiParam("The Maven groupId") @PathParam("groupId") String groupId,
+ @ApiParam("The Maven artifactId") @PathParam("artifactId") String artifactId,
+ @ApiParam("The Maven version") @PathParam("version") String version) {
return maven.addArtifactToCatalog(catalog, null, groupId, artifactId, version);
}
http://git-wip-us.apache.org/repos/asf/camel/blob/4d9ad42b/platforms/camel-catalog-rest/src/main/java/org/apache/camel/catalog/rest/CamelConnectorCatalogRest.java
----------------------------------------------------------------------
diff --git a/platforms/camel-catalog-rest/src/main/java/org/apache/camel/catalog/rest/CamelConnectorCatalogRest.java b/platforms/camel-catalog-rest/src/main/java/org/apache/camel/catalog/rest/CamelConnectorCatalogRest.java
index 60b2455..e87124c 100644
--- a/platforms/camel-catalog-rest/src/main/java/org/apache/camel/catalog/rest/CamelConnectorCatalogRest.java
+++ b/platforms/camel-catalog-rest/src/main/java/org/apache/camel/catalog/rest/CamelConnectorCatalogRest.java
@@ -17,6 +17,7 @@
package org.apache.camel.catalog.rest;
import java.util.List;
+import java.util.Set;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
@@ -110,11 +111,11 @@ public class CamelConnectorCatalogRest {
@POST
@Path("/addConnectorFromMavenArtifact/{groupId}/{artifactId}/{version}")
- @Produces("text/plain")
- @ApiOperation(value = "Downloads the Maven artifact and scan for custom Camel connectors which will be added to the catalog")
- public boolean addConnectorFromMavenArtifact(@ApiParam("The Maven groupId") @PathParam("groupId") String groupId,
- @ApiParam("The Maven artifactId") @PathParam("artifactId") String artifactId,
- @ApiParam("The Maven version") @PathParam("version") String version) {
+ @Produces("application/json")
+ @ApiOperation(value = "Downloads the Maven artifact and scan for custom Camel connectors which will be added to the catalog and returns the names of the found connectors")
+ public Set<String> addConnectorFromMavenArtifact(@ApiParam("The Maven groupId") @PathParam("groupId") String groupId,
+ @ApiParam("The Maven artifactId") @PathParam("artifactId") String artifactId,
+ @ApiParam("The Maven version") @PathParam("version") String version) {
return maven.addArtifactToCatalog(null, catalog, groupId, artifactId, version);
}
[2/4] camel git commit: CAMEL-10898: camel-catalog - Allow to add
custom component/connector by download JAR via maven
Posted by da...@apache.org.
CAMEL-10898: camel-catalog - Allow to add custom component/connector by download JAR via maven
Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/1df8a2a4
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/1df8a2a4
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/1df8a2a4
Branch: refs/heads/master
Commit: 1df8a2a4c2ce9b97da12e1aa13a104e7985677bb
Parents: eec3f84
Author: Claus Ibsen <da...@apache.org>
Authored: Mon Feb 27 13:38:19 2017 +0100
Committer: Claus Ibsen <da...@apache.org>
Committed: Mon Feb 27 14:07:45 2017 +0100
----------------------------------------------------------------------
.../connector/CamelConnectorCatalog.java | 10 +++
.../catalog/connector/ConnectorDataStore.java | 7 ++
.../connector/DefaultCamelConnectorCatalog.java | 13 ++-
.../connector/MemoryConnectorDataStore.java | 5 ++
.../connector/CamelConnectorCatalogTest.java | 19 ++++-
platforms/camel-catalog-maven/pom.xml | 4 +
.../catalog/maven/ConnectorArtifactHelper.java | 59 ++++++++++++++
.../maven/DefaultMavenArtifactProvider.java | 54 +++++++++++--
.../catalog/maven/MavenArtifactProvider.java | 24 +++---
.../maven/MavenArtifactProviderTest.java | 30 ++++++-
platforms/camel-catalog-nexus/pom.xml | 4 +
.../nexus/ComponentCatalogNexusRepository.java | 83 ++++----------------
12 files changed, 222 insertions(+), 90 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/1df8a2a4/platforms/camel-catalog-connector/src/main/java/org/apache/camel/catalog/connector/CamelConnectorCatalog.java
----------------------------------------------------------------------
diff --git a/platforms/camel-catalog-connector/src/main/java/org/apache/camel/catalog/connector/CamelConnectorCatalog.java b/platforms/camel-catalog-connector/src/main/java/org/apache/camel/catalog/connector/CamelConnectorCatalog.java
index 6e41646..c3b288f 100644
--- a/platforms/camel-catalog-connector/src/main/java/org/apache/camel/catalog/connector/CamelConnectorCatalog.java
+++ b/platforms/camel-catalog-connector/src/main/java/org/apache/camel/catalog/connector/CamelConnectorCatalog.java
@@ -31,6 +31,16 @@ public interface CamelConnectorCatalog {
void setConnectorDataStore(ConnectorDataStore dataStore);
/**
+ * Is the connector already registered in the catalog
+ *
+ * @param groupId maven group id
+ * @param artifactId maven artifact id
+ * @param version maven version
+ * @return whether the catalog has the connector or not
+ */
+ boolean hasConnector(String groupId, String artifactId, String version);
+
+ /**
* Adds or updates the connector to the catalog
*
* @param groupId maven group id
http://git-wip-us.apache.org/repos/asf/camel/blob/1df8a2a4/platforms/camel-catalog-connector/src/main/java/org/apache/camel/catalog/connector/ConnectorDataStore.java
----------------------------------------------------------------------
diff --git a/platforms/camel-catalog-connector/src/main/java/org/apache/camel/catalog/connector/ConnectorDataStore.java b/platforms/camel-catalog-connector/src/main/java/org/apache/camel/catalog/connector/ConnectorDataStore.java
index f3ae803..fadfafb 100644
--- a/platforms/camel-catalog-connector/src/main/java/org/apache/camel/catalog/connector/ConnectorDataStore.java
+++ b/platforms/camel-catalog-connector/src/main/java/org/apache/camel/catalog/connector/ConnectorDataStore.java
@@ -33,6 +33,13 @@ public interface ConnectorDataStore {
void addConnector(ConnectorDto dto, String connectorJson, String connectorSchemaJson);
/**
+ * Is the connector already registered in the catalog
+ *
+ * @param dto the connector dto
+ */
+ boolean hasConnector(ConnectorDto dto);
+
+ /**
* Removes the connector from the catalog
*
* @param dto the connector dto
http://git-wip-us.apache.org/repos/asf/camel/blob/1df8a2a4/platforms/camel-catalog-connector/src/main/java/org/apache/camel/catalog/connector/DefaultCamelConnectorCatalog.java
----------------------------------------------------------------------
diff --git a/platforms/camel-catalog-connector/src/main/java/org/apache/camel/catalog/connector/DefaultCamelConnectorCatalog.java b/platforms/camel-catalog-connector/src/main/java/org/apache/camel/catalog/connector/DefaultCamelConnectorCatalog.java
index d3272a2..e25af70 100644
--- a/platforms/camel-catalog-connector/src/main/java/org/apache/camel/catalog/connector/DefaultCamelConnectorCatalog.java
+++ b/platforms/camel-catalog-connector/src/main/java/org/apache/camel/catalog/connector/DefaultCamelConnectorCatalog.java
@@ -28,9 +28,17 @@ public class DefaultCamelConnectorCatalog implements CamelConnectorCatalog {
}
@Override
+ public boolean hasConnector(String groupId, String artifactId, String version) {
+ ConnectorDto dto = new ConnectorDto();
+ dto.setGroupId(groupId);
+ dto.setArtifactId(artifactId);
+ dto.setVersion(version);
+ return dataStore.hasConnector(dto);
+ }
+
+ @Override
public void addConnector(String groupId, String artifactId, String version, String name, String description, String labels,
String connectorJson, String connectorSchemaJson) {
-
ConnectorDto dto = new ConnectorDto();
dto.setGroupId(groupId);
dto.setArtifactId(artifactId);
@@ -38,18 +46,15 @@ public class DefaultCamelConnectorCatalog implements CamelConnectorCatalog {
dto.setName(name);
dto.setDescription(description);
dto.setLabels(labels);
-
dataStore.addConnector(dto, connectorJson, connectorSchemaJson);
}
@Override
public void removeConnector(String groupId, String artifactId, String version) {
-
ConnectorDto dto = new ConnectorDto();
dto.setGroupId(groupId);
dto.setArtifactId(artifactId);
dto.setVersion(version);
-
dataStore.removeConnector(dto);
}
http://git-wip-us.apache.org/repos/asf/camel/blob/1df8a2a4/platforms/camel-catalog-connector/src/main/java/org/apache/camel/catalog/connector/MemoryConnectorDataStore.java
----------------------------------------------------------------------
diff --git a/platforms/camel-catalog-connector/src/main/java/org/apache/camel/catalog/connector/MemoryConnectorDataStore.java b/platforms/camel-catalog-connector/src/main/java/org/apache/camel/catalog/connector/MemoryConnectorDataStore.java
index 495a7f7..ebb0a21 100644
--- a/platforms/camel-catalog-connector/src/main/java/org/apache/camel/catalog/connector/MemoryConnectorDataStore.java
+++ b/platforms/camel-catalog-connector/src/main/java/org/apache/camel/catalog/connector/MemoryConnectorDataStore.java
@@ -40,6 +40,11 @@ public class MemoryConnectorDataStore implements ConnectorDataStore {
}
@Override
+ public boolean hasConnector(ConnectorDto dto) {
+ return store.contains(new ConnectorDetails(dto, null, null));
+ }
+
+ @Override
public void removeConnector(ConnectorDto dto) {
store.remove(new ConnectorDetails(dto, null, null));
}
http://git-wip-us.apache.org/repos/asf/camel/blob/1df8a2a4/platforms/camel-catalog-connector/src/test/java/org/apache/camel/catalog/connector/CamelConnectorCatalogTest.java
----------------------------------------------------------------------
diff --git a/platforms/camel-catalog-connector/src/test/java/org/apache/camel/catalog/connector/CamelConnectorCatalogTest.java b/platforms/camel-catalog-connector/src/test/java/org/apache/camel/catalog/connector/CamelConnectorCatalogTest.java
index 972a2a6..2970fdd 100644
--- a/platforms/camel-catalog-connector/src/test/java/org/apache/camel/catalog/connector/CamelConnectorCatalogTest.java
+++ b/platforms/camel-catalog-connector/src/test/java/org/apache/camel/catalog/connector/CamelConnectorCatalogTest.java
@@ -16,10 +16,11 @@
*/
package org.apache.camel.catalog.connector;
-import org.junit.Ignore;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
public class CamelConnectorCatalogTest {
@@ -36,6 +37,22 @@ public class CamelConnectorCatalogTest {
}
@Test
+ public void testHasConnector() throws Exception {
+ CamelConnectorCatalog catalog = new DefaultCamelConnectorCatalog();
+
+ assertEquals(0, catalog.findConnector(false).size());
+
+ assertFalse(catalog.hasConnector("org.apache.camel", "myfoo-connector", "2.19.0"));
+
+ catalog.addConnector("org.apache.camel", "myfoo-connector", "2.19.0",
+ "MyFoo", "Something cool", "foo,timer", null, null);
+
+ assertEquals(1, catalog.findConnector(false).size());
+
+ assertTrue(catalog.hasConnector("org.apache.camel", "myfoo-connector", "2.19.0"));
+ }
+
+ @Test
public void testRemoveConnector() throws Exception {
CamelConnectorCatalog catalog = new DefaultCamelConnectorCatalog();
http://git-wip-us.apache.org/repos/asf/camel/blob/1df8a2a4/platforms/camel-catalog-maven/pom.xml
----------------------------------------------------------------------
diff --git a/platforms/camel-catalog-maven/pom.xml b/platforms/camel-catalog-maven/pom.xml
index e204c6a..f1f0ff9 100644
--- a/platforms/camel-catalog-maven/pom.xml
+++ b/platforms/camel-catalog-maven/pom.xml
@@ -42,6 +42,10 @@
<groupId>org.apache.camel</groupId>
<artifactId>camel-catalog</artifactId>
</dependency>
+ <dependency>
+ <groupId>org.apache.camel</groupId>
+ <artifactId>camel-catalog-connector</artifactId>
+ </dependency>
<dependency>
<groupId>org.slf4j</groupId>
http://git-wip-us.apache.org/repos/asf/camel/blob/1df8a2a4/platforms/camel-catalog-maven/src/main/java/org/apache/camel/catalog/maven/ConnectorArtifactHelper.java
----------------------------------------------------------------------
diff --git a/platforms/camel-catalog-maven/src/main/java/org/apache/camel/catalog/maven/ConnectorArtifactHelper.java b/platforms/camel-catalog-maven/src/main/java/org/apache/camel/catalog/maven/ConnectorArtifactHelper.java
new file mode 100644
index 0000000..98aeab0
--- /dev/null
+++ b/platforms/camel-catalog-maven/src/main/java/org/apache/camel/catalog/maven/ConnectorArtifactHelper.java
@@ -0,0 +1,59 @@
+/**
+ * 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
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * 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.maven;
+
+import java.io.InputStream;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import static org.apache.camel.catalog.CatalogHelper.loadText;
+
+public class ConnectorArtifactHelper {
+
+ private static final Logger LOG = LoggerFactory.getLogger(ComponentArtifactHelper.class);
+
+ private ConnectorArtifactHelper() {
+ }
+
+ public static String[] loadConnectorJSonSchema(ClassLoader classLoader) {
+ String[] answer = new String[2];
+
+ String path = "camel-connector.json";
+ try {
+ InputStream is = classLoader.getResourceAsStream(path);
+ if (is != null) {
+ answer[0] = loadText(is);
+ }
+ } catch (Throwable e) {
+ LOG.warn("Error loading " + path + " file", e);
+ }
+
+ path = "camel-connector-schema.json";
+ try {
+ InputStream is = classLoader.getResourceAsStream(path);
+ if (is != null) {
+ answer[1] = loadText(is);
+ }
+ } catch (Throwable e) {
+ LOG.warn("Error loading " + path + " file", e);
+ }
+
+ return answer;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/camel/blob/1df8a2a4/platforms/camel-catalog-maven/src/main/java/org/apache/camel/catalog/maven/DefaultMavenArtifactProvider.java
----------------------------------------------------------------------
diff --git a/platforms/camel-catalog-maven/src/main/java/org/apache/camel/catalog/maven/DefaultMavenArtifactProvider.java b/platforms/camel-catalog-maven/src/main/java/org/apache/camel/catalog/maven/DefaultMavenArtifactProvider.java
index cafbd4b..9933494 100644
--- a/platforms/camel-catalog-maven/src/main/java/org/apache/camel/catalog/maven/DefaultMavenArtifactProvider.java
+++ b/platforms/camel-catalog-maven/src/main/java/org/apache/camel/catalog/maven/DefaultMavenArtifactProvider.java
@@ -5,9 +5,9 @@
* 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
- *
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
* 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.
@@ -17,18 +17,24 @@
package org.apache.camel.catalog.maven;
import java.util.HashMap;
+import java.util.Iterator;
import java.util.Map;
import java.util.Properties;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
import groovy.grape.Grape;
import groovy.lang.GroovyClassLoader;
import org.apache.camel.catalog.CamelCatalog;
+import org.apache.camel.catalog.CollectionStringBuffer;
+import org.apache.camel.catalog.connector.CamelConnectorCatalog;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import static org.apache.camel.catalog.maven.ComponentArtifactHelper.extractComponentJavaType;
import static org.apache.camel.catalog.maven.ComponentArtifactHelper.loadComponentJSonSchema;
import static org.apache.camel.catalog.maven.ComponentArtifactHelper.loadComponentProperties;
+import static org.apache.camel.catalog.maven.ConnectorArtifactHelper.loadConnectorJSonSchema;
/**
* Default {@link MavenArtifactProvider} which uses Groovy Grape to download the artifact.
@@ -45,7 +51,8 @@ public class DefaultMavenArtifactProvider implements MavenArtifactProvider {
}
@Override
- public boolean addArtifactToCatalog(CamelCatalog camelCatalog, String groupId, String artifactId, String version) {
+ public boolean addArtifactToCatalog(CamelCatalog camelCatalog, CamelConnectorCatalog camelConnectorCatalog,
+ String groupId, String artifactId, String version) {
try {
Grape.setEnableAutoDownload(true);
@@ -62,7 +69,12 @@ public class DefaultMavenArtifactProvider implements MavenArtifactProvider {
// the classloader can load content from the downloaded JAR
boolean found = false;
- found |= scanCamelComponents(camelCatalog, classLoader);
+ if (camelCatalog != null) {
+ found |= scanCamelComponents(camelCatalog, classLoader);
+ }
+ if (camelConnectorCatalog != null) {
+ found |= scanCamelConnectors(camelConnectorCatalog, classLoader, groupId, artifactId, version);
+ }
return found;
} catch (Exception e) {
@@ -97,5 +109,37 @@ public class DefaultMavenArtifactProvider implements MavenArtifactProvider {
return found;
}
+ protected boolean scanCamelConnectors(CamelConnectorCatalog camelConnectorCatalog, ClassLoader classLoader,
+ String groupId, String artifactId, String version) {
+ boolean found = false;
+
+ String[] json = loadConnectorJSonSchema(classLoader);
+ if (json != null) {
+ if (!camelConnectorCatalog.hasConnector(groupId, artifactId, version)) {
+ try {
+ ObjectMapper mapper = new ObjectMapper();
+ JsonNode tree = mapper.readTree(json[0]);
+ String name = tree.get("name").textValue();
+ String description = tree.get("description").textValue();
+ Iterator<JsonNode> it = tree.withArray("labels").iterator();
+
+ CollectionStringBuffer csb = new CollectionStringBuffer(",");
+ while (it.hasNext()) {
+ String text = it.next().textValue();
+ csb.append(text);
+ }
+
+ camelConnectorCatalog.addConnector(groupId, artifactId, version,
+ name, description, csb.toString(), json[0], json[1]);
+
+ found = true;
+ } catch (Throwable e) {
+ LOG.warn("Error parsing Connector JSon due " + e.getMessage(), e);
+ }
+ }
+ }
+ return found;
+ }
+
}
http://git-wip-us.apache.org/repos/asf/camel/blob/1df8a2a4/platforms/camel-catalog-maven/src/main/java/org/apache/camel/catalog/maven/MavenArtifactProvider.java
----------------------------------------------------------------------
diff --git a/platforms/camel-catalog-maven/src/main/java/org/apache/camel/catalog/maven/MavenArtifactProvider.java b/platforms/camel-catalog-maven/src/main/java/org/apache/camel/catalog/maven/MavenArtifactProvider.java
index a96c2a8..d88fc2d 100644
--- a/platforms/camel-catalog-maven/src/main/java/org/apache/camel/catalog/maven/MavenArtifactProvider.java
+++ b/platforms/camel-catalog-maven/src/main/java/org/apache/camel/catalog/maven/MavenArtifactProvider.java
@@ -5,9 +5,9 @@
* 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
- *
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
* 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.
@@ -17,6 +17,7 @@
package org.apache.camel.catalog.maven;
import org.apache.camel.catalog.CamelCatalog;
+import org.apache.camel.catalog.connector.CamelConnectorCatalog;
/**
* Provider which allows downloading artifact using Maven and add content to the {@link CamelCatalog}.
@@ -33,13 +34,16 @@ public interface MavenArtifactProvider {
/**
* Downloads the artifact using the Maven coordinates and scans the JAR for Camel components
- * which will be added to the CamelCatalog.
+ * which will be added to the CamelCatalog or CamelConnectorCatalog.
*
- * @param camelCatalog The Camel Catalog
- * @param groupId Maven group id
- * @param artifactId Maven artifact id
- * @param version Maven version
+ * @param camelCatalog The Camel Catalog
+ * @param camelConnectorCatalog The Camel Connector Catalog
+ * @param groupId Maven group id
+ * @param artifactId Maven artifact id
+ * @param version Maven version
* @return <tt>true</tt> if anything was added to the catalog, <tt>false</tt> if not.
*/
- boolean addArtifactToCatalog(CamelCatalog camelCatalog, String groupId, String artifactId, String version);
-}
+ boolean addArtifactToCatalog(CamelCatalog camelCatalog, CamelConnectorCatalog camelConnectorCatalog,
+ String groupId, String artifactId, String version);
+
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/camel/blob/1df8a2a4/platforms/camel-catalog-maven/src/test/java/org/apache/camel/catalog/maven/MavenArtifactProviderTest.java
----------------------------------------------------------------------
diff --git a/platforms/camel-catalog-maven/src/test/java/org/apache/camel/catalog/maven/MavenArtifactProviderTest.java b/platforms/camel-catalog-maven/src/test/java/org/apache/camel/catalog/maven/MavenArtifactProviderTest.java
index f1e42f0..93d7c12 100644
--- a/platforms/camel-catalog-maven/src/test/java/org/apache/camel/catalog/maven/MavenArtifactProviderTest.java
+++ b/platforms/camel-catalog-maven/src/test/java/org/apache/camel/catalog/maven/MavenArtifactProviderTest.java
@@ -16,9 +16,14 @@
*/
package org.apache.camel.catalog.maven;
+import java.util.List;
+
import junit.framework.TestCase;
import org.apache.camel.catalog.CamelCatalog;
import org.apache.camel.catalog.DefaultCamelCatalog;
+import org.apache.camel.catalog.connector.CamelConnectorCatalog;
+import org.apache.camel.catalog.connector.ConnectorDto;
+import org.apache.camel.catalog.connector.DefaultCamelConnectorCatalog;
import org.junit.Test;
public class MavenArtifactProviderTest extends TestCase {
@@ -30,11 +35,34 @@ public class MavenArtifactProviderTest extends TestCase {
int before = camelCatalog.findComponentNames().size();
- boolean found = provider.addArtifactToCatalog(camelCatalog, "org.apache.camel", "dummy-component", camelCatalog.getCatalogVersion());
+ boolean found = provider.addArtifactToCatalog(camelCatalog, null, "org.apache.camel", "dummy-component", camelCatalog.getCatalogVersion());
assertTrue(found);
int after = camelCatalog.findComponentNames().size();
assertTrue("Should find 1 new component", after - before == 1);
}
+
+ @Test
+ public void testAddConnector() {
+ CamelCatalog camelCatalog = new DefaultCamelCatalog();
+ CamelConnectorCatalog camelConnectorCatalog = new DefaultCamelConnectorCatalog();
+ MavenArtifactProvider provider = new DefaultMavenArtifactProvider();
+
+ int before = camelCatalog.findComponentNames().size();
+ List<ConnectorDto> list = camelConnectorCatalog.findConnector("foo", false);
+ assertEquals(0, list.size());
+
+ boolean found = provider.addArtifactToCatalog(camelCatalog, camelConnectorCatalog, "org.apache.camel", "myfoo-connector", camelCatalog.getCatalogVersion());
+ assertTrue(found);
+
+ int after = camelCatalog.findComponentNames().size();
+
+ assertTrue("Should find 1 new component", after - before == 1);
+
+ list = camelConnectorCatalog.findConnector("foo", false);
+ assertEquals(1, list.size());
+ assertEquals("MyFoo", list.get(0).getName());
+ assertTrue(camelCatalog.findComponentNames().contains("my-foo"));
+ }
}
http://git-wip-us.apache.org/repos/asf/camel/blob/1df8a2a4/platforms/camel-catalog-nexus/pom.xml
----------------------------------------------------------------------
diff --git a/platforms/camel-catalog-nexus/pom.xml b/platforms/camel-catalog-nexus/pom.xml
index 0f5db2a..853226b 100644
--- a/platforms/camel-catalog-nexus/pom.xml
+++ b/platforms/camel-catalog-nexus/pom.xml
@@ -47,6 +47,10 @@
<groupId>org.apache.camel</groupId>
<artifactId>camel-catalog-connector</artifactId>
</dependency>
+ <dependency>
+ <groupId>org.apache.camel</groupId>
+ <artifactId>camel-catalog-maven</artifactId>
+ </dependency>
<!-- testing -->
<dependency>
http://git-wip-us.apache.org/repos/asf/camel/blob/1df8a2a4/platforms/camel-catalog-nexus/src/main/java/org/apache/camel/catalog/nexus/ComponentCatalogNexusRepository.java
----------------------------------------------------------------------
diff --git a/platforms/camel-catalog-nexus/src/main/java/org/apache/camel/catalog/nexus/ComponentCatalogNexusRepository.java b/platforms/camel-catalog-nexus/src/main/java/org/apache/camel/catalog/nexus/ComponentCatalogNexusRepository.java
index 72bcc9e..5d0d084 100644
--- a/platforms/camel-catalog-nexus/src/main/java/org/apache/camel/catalog/nexus/ComponentCatalogNexusRepository.java
+++ b/platforms/camel-catalog-nexus/src/main/java/org/apache/camel/catalog/nexus/ComponentCatalogNexusRepository.java
@@ -17,7 +17,6 @@
package org.apache.camel.catalog.nexus;
import java.io.IOException;
-import java.io.InputStream;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.Properties;
@@ -25,7 +24,9 @@ import java.util.Set;
import org.apache.camel.catalog.CamelCatalog;
-import static org.apache.camel.catalog.CatalogHelper.loadText;
+import static org.apache.camel.catalog.maven.ComponentArtifactHelper.extractComponentJavaType;
+import static org.apache.camel.catalog.maven.ComponentArtifactHelper.loadComponentJSonSchema;
+import static org.apache.camel.catalog.maven.ComponentArtifactHelper.loadComponentProperties;
/**
* Nexus repository that can scan for custom Camel components and add to the {@link org.apache.camel.catalog.CamelCatalog}.
@@ -94,19 +95,17 @@ public class ComponentCatalogNexusRepository extends BaseNexusRepository {
try (URLClassLoader classLoader = new URLClassLoader(new URL[]{jarUrl})) {
// is there any custom Camel components in this library?
Properties properties = loadComponentProperties(classLoader);
- if (properties != null) {
- String components = (String) properties.get("components");
- if (components != null) {
- String[] part = components.split("\\s");
- for (String scheme : part) {
- if (!getCamelCatalog().findComponentNames().contains(scheme)) {
- // find the class name
- String javaType = extractComponentJavaType(classLoader, scheme);
- if (javaType != null) {
- String json = loadComponentJSonSchema(classLoader, scheme);
- if (json != null) {
- addComponent(dto, getCamelCatalog(), scheme, javaType, json);
- }
+ String components = (String) properties.get("components");
+ if (components != null) {
+ String[] part = components.split("\\s");
+ for (String scheme : part) {
+ if (!getCamelCatalog().findComponentNames().contains(scheme)) {
+ // find the class name
+ String javaType = extractComponentJavaType(classLoader, scheme);
+ if (javaType != null) {
+ String json = loadComponentJSonSchema(classLoader, scheme);
+ if (json != null) {
+ addComponent(dto, getCamelCatalog(), scheme, javaType, json);
}
}
}
@@ -117,58 +116,4 @@ public class ComponentCatalogNexusRepository extends BaseNexusRepository {
}
}
- private Properties loadComponentProperties(URLClassLoader classLoader) {
- Properties answer = new Properties();
- try {
- // load the component files using the recommended way by a component.properties file
- InputStream is = classLoader.getResourceAsStream("META-INF/services/org/apache/camel/component.properties");
- if (is != null) {
- answer.load(is);
- }
- } catch (Throwable e) {
- log.warn("Error loading META-INF/services/org/apache/camel/component.properties file", e);
- }
- return answer;
- }
-
- private String extractComponentJavaType(URLClassLoader classLoader, String scheme) {
- try {
- InputStream is = classLoader.getResourceAsStream("META-INF/services/org/apache/camel/component/" + scheme);
- if (is != null) {
- Properties props = new Properties();
- props.load(is);
- return (String) props.get("class");
- }
- } catch (Throwable e) {
- log.warn("Error loading META-INF/services/org/apache/camel/component/" + scheme + " file", e);
- }
-
- return null;
- }
-
- private String loadComponentJSonSchema(URLClassLoader classLoader, String scheme) {
- String answer = null;
-
- String path = null;
- String javaType = extractComponentJavaType(classLoader, scheme);
- if (javaType != null) {
- int pos = javaType.lastIndexOf(".");
- path = javaType.substring(0, pos);
- path = path.replace('.', '/');
- path = path + "/" + scheme + ".json";
- }
-
- if (path != null) {
- try {
- InputStream is = classLoader.getResourceAsStream(path);
- if (is != null) {
- answer = loadText(is);
- }
- } catch (Throwable e) {
- log.warn("Error loading " + path + " file", e);
- }
- }
-
- return answer;
- }
}
[3/4] camel git commit: CAMEL-10898: camel-catalog - Allow to add
custom component/connector by download JAR via maven
Posted by da...@apache.org.
CAMEL-10898: camel-catalog - Allow to add custom component/connector by download JAR via maven
Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/c9e48179
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/c9e48179
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/c9e48179
Branch: refs/heads/master
Commit: c9e4817905ebd4d3ba985873845eff550104fdd0
Parents: 1df8a2a
Author: Claus Ibsen <da...@apache.org>
Authored: Mon Feb 27 13:56:27 2017 +0100
Committer: Claus Ibsen <da...@apache.org>
Committed: Mon Feb 27 14:07:45 2017 +0100
----------------------------------------------------------------------
platforms/camel-catalog-rest/pom.xml | 4 ++++
.../camel/catalog/rest/CamelCatalogRest.java | 22 ++++++++++++++++++++
.../catalog/rest/CamelConnectorCatalogRest.java | 22 ++++++++++++++++++++
3 files changed, 48 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/c9e48179/platforms/camel-catalog-rest/pom.xml
----------------------------------------------------------------------
diff --git a/platforms/camel-catalog-rest/pom.xml b/platforms/camel-catalog-rest/pom.xml
index 300ed6c..b84a0ad 100644
--- a/platforms/camel-catalog-rest/pom.xml
+++ b/platforms/camel-catalog-rest/pom.xml
@@ -40,6 +40,10 @@
<groupId>org.apache.camel</groupId>
<artifactId>camel-catalog-connector</artifactId>
</dependency>
+ <dependency>
+ <groupId>org.apache.camel</groupId>
+ <artifactId>camel-catalog-maven</artifactId>
+ </dependency>
<!-- REST api -->
<dependency>
http://git-wip-us.apache.org/repos/asf/camel/blob/c9e48179/platforms/camel-catalog-rest/src/main/java/org/apache/camel/catalog/rest/CamelCatalogRest.java
----------------------------------------------------------------------
diff --git a/platforms/camel-catalog-rest/src/main/java/org/apache/camel/catalog/rest/CamelCatalogRest.java b/platforms/camel-catalog-rest/src/main/java/org/apache/camel/catalog/rest/CamelCatalogRest.java
index d47ce27..5690279 100644
--- a/platforms/camel-catalog-rest/src/main/java/org/apache/camel/catalog/rest/CamelCatalogRest.java
+++ b/platforms/camel-catalog-rest/src/main/java/org/apache/camel/catalog/rest/CamelCatalogRest.java
@@ -19,6 +19,7 @@ package org.apache.camel.catalog.rest;
import java.util.List;
import java.util.Set;
import javax.ws.rs.GET;
+import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
@@ -28,6 +29,8 @@ import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.apache.camel.catalog.CamelCatalog;
import org.apache.camel.catalog.DefaultCamelCatalog;
+import org.apache.camel.catalog.maven.DefaultMavenArtifactProvider;
+import org.apache.camel.catalog.maven.MavenArtifactProvider;
/**
* A REST based {@link CamelCatalog} service as a JAX-RS resource class.
@@ -37,6 +40,7 @@ import org.apache.camel.catalog.DefaultCamelCatalog;
public class CamelCatalogRest {
private CamelCatalog catalog = new DefaultCamelCatalog(true);
+ private MavenArtifactProvider maven = new DefaultMavenArtifactProvider();
public CamelCatalog getCatalog() {
return catalog;
@@ -284,4 +288,22 @@ public class CamelCatalogRest {
return catalog.summaryAsJson();
}
+ @POST
+ @Path("/addMavenRepository/{name}/{url}")
+ @ApiOperation(value = "Adds a third party Maven repository to use for downloading Maven artifacts")
+ public void addMavenRepository(@ApiParam("The name of the Maven repository") @PathParam("name") String name,
+ @ApiParam("The URL of the Maven repository") @PathParam("url") String url) {
+ maven.addMavenRepository(name, url);
+ }
+
+ @POST
+ @Path("/addComponentFromMavenArtifact/{groupId}/{artifactId}/{version}")
+ @Produces("text/plain")
+ @ApiOperation(value = "Downloads the Maven artifact and scan for custom Camel components which will be added to the catalog")
+ public boolean addComponentFromMavenArtifact(@ApiParam("The Maven groupId") @PathParam("groupId") String groupId,
+ @ApiParam("The Maven artifactId") @PathParam("artifactId") String artifactId,
+ @ApiParam("The Maven version") @PathParam("version") String version) {
+ return maven.addArtifactToCatalog(catalog, null, groupId, artifactId, version);
+ }
+
}
http://git-wip-us.apache.org/repos/asf/camel/blob/c9e48179/platforms/camel-catalog-rest/src/main/java/org/apache/camel/catalog/rest/CamelConnectorCatalogRest.java
----------------------------------------------------------------------
diff --git a/platforms/camel-catalog-rest/src/main/java/org/apache/camel/catalog/rest/CamelConnectorCatalogRest.java b/platforms/camel-catalog-rest/src/main/java/org/apache/camel/catalog/rest/CamelConnectorCatalogRest.java
index afe2445..60b2455 100644
--- a/platforms/camel-catalog-rest/src/main/java/org/apache/camel/catalog/rest/CamelConnectorCatalogRest.java
+++ b/platforms/camel-catalog-rest/src/main/java/org/apache/camel/catalog/rest/CamelConnectorCatalogRest.java
@@ -18,6 +18,7 @@ package org.apache.camel.catalog.rest;
import java.util.List;
import javax.ws.rs.GET;
+import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
@@ -29,6 +30,8 @@ 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;
+import org.apache.camel.catalog.maven.DefaultMavenArtifactProvider;
+import org.apache.camel.catalog.maven.MavenArtifactProvider;
/**
* A REST based {@link CamelConnectorCatalog} service as a JAX-RS resource class.
@@ -38,6 +41,7 @@ import org.apache.camel.catalog.connector.DefaultCamelConnectorCatalog;
public class CamelConnectorCatalogRest {
private CamelConnectorCatalog catalog = new DefaultCamelConnectorCatalog();
+ private MavenArtifactProvider maven = new DefaultMavenArtifactProvider();
public CamelConnectorCatalog getCatalog() {
return catalog;
@@ -96,4 +100,22 @@ public class CamelConnectorCatalogRest {
return catalog.connectorSchemaJSon(groupId, artifactId, version);
}
+ @POST
+ @Path("/addMavenRepository/{name}/{url}")
+ @ApiOperation(value = "Adds a third party Maven repository to use for downloading Maven artifacts")
+ public void addMavenRepository(@ApiParam("The name of the Maven repository") @PathParam("name") String name,
+ @ApiParam("The URL of the Maven repository") @PathParam("url") String url) {
+ maven.addMavenRepository(name, url);
+ }
+
+ @POST
+ @Path("/addConnectorFromMavenArtifact/{groupId}/{artifactId}/{version}")
+ @Produces("text/plain")
+ @ApiOperation(value = "Downloads the Maven artifact and scan for custom Camel connectors which will be added to the catalog")
+ public boolean addConnectorFromMavenArtifact(@ApiParam("The Maven groupId") @PathParam("groupId") String groupId,
+ @ApiParam("The Maven artifactId") @PathParam("artifactId") String artifactId,
+ @ApiParam("The Maven version") @PathParam("version") String version) {
+ return maven.addArtifactToCatalog(null, catalog, groupId, artifactId, version);
+ }
+
}
[4/4] camel git commit: CAMEL-10898: camel-catalog - Allow to add
custom component/connector by download JAR via maven
Posted by da...@apache.org.
CAMEL-10898: camel-catalog - Allow to add custom component/connector by download JAR via maven
Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/eec3f843
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/eec3f843
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/eec3f843
Branch: refs/heads/master
Commit: eec3f8436d6ef4db8ff3b76fca27c6880d00b1a9
Parents: 59170dd
Author: Claus Ibsen <da...@apache.org>
Authored: Mon Feb 27 13:12:47 2017 +0100
Committer: Claus Ibsen <da...@apache.org>
Committed: Mon Feb 27 14:07:45 2017 +0100
----------------------------------------------------------------------
platforms/camel-catalog-maven/pom.xml | 5 +
.../catalog/maven/ComponentArtifactHelper.java | 91 +++++++++++++++++
.../maven/DefaultMavenArtifactProvider.java | 101 +++++++++++++++++++
.../catalog/maven/MavenArtifactProvider.java | 45 +++++++++
.../maven/MavenArtifactProviderTest.java | 40 ++++++++
5 files changed, 282 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/eec3f843/platforms/camel-catalog-maven/pom.xml
----------------------------------------------------------------------
diff --git a/platforms/camel-catalog-maven/pom.xml b/platforms/camel-catalog-maven/pom.xml
index cc82045..e204c6a 100644
--- a/platforms/camel-catalog-maven/pom.xml
+++ b/platforms/camel-catalog-maven/pom.xml
@@ -43,6 +43,11 @@
<artifactId>camel-catalog</artifactId>
</dependency>
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-api</artifactId>
+ </dependency>
+
<!-- use groovy grape to download JARs as that is easy to use -->
<dependency>
<groupId>org.codehaus.groovy</groupId>
http://git-wip-us.apache.org/repos/asf/camel/blob/eec3f843/platforms/camel-catalog-maven/src/main/java/org/apache/camel/catalog/maven/ComponentArtifactHelper.java
----------------------------------------------------------------------
diff --git a/platforms/camel-catalog-maven/src/main/java/org/apache/camel/catalog/maven/ComponentArtifactHelper.java b/platforms/camel-catalog-maven/src/main/java/org/apache/camel/catalog/maven/ComponentArtifactHelper.java
new file mode 100644
index 0000000..234ee69
--- /dev/null
+++ b/platforms/camel-catalog-maven/src/main/java/org/apache/camel/catalog/maven/ComponentArtifactHelper.java
@@ -0,0 +1,91 @@
+/**
+ * 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.maven;
+
+import java.io.InputStream;
+import java.util.Properties;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import static org.apache.camel.catalog.CatalogHelper.loadText;
+
+/**
+ * Helper methods for loading content from Camel components that the {@link org.apache.camel.catalog.CamelCatalog} requires.
+ */
+public final class ComponentArtifactHelper {
+
+ private static final Logger LOG = LoggerFactory.getLogger(ComponentArtifactHelper.class);
+
+ private ComponentArtifactHelper() {
+ }
+
+ public static Properties loadComponentProperties(ClassLoader classLoader) {
+ Properties answer = new Properties();
+ try {
+ // load the component files using the recommended way by a component.properties file
+ InputStream is = classLoader.getResourceAsStream("META-INF/services/org/apache/camel/component.properties");
+ if (is != null) {
+ answer.load(is);
+ }
+ } catch (Throwable e) {
+ LOG.warn("Error loading META-INF/services/org/apache/camel/component.properties file", e);
+ }
+ return answer;
+ }
+
+ public static String extractComponentJavaType(ClassLoader classLoader, String scheme) {
+ try {
+ InputStream is = classLoader.getResourceAsStream("META-INF/services/org/apache/camel/component/" + scheme);
+ if (is != null) {
+ Properties props = new Properties();
+ props.load(is);
+ return (String) props.get("class");
+ }
+ } catch (Throwable e) {
+ LOG.warn("Error loading META-INF/services/org/apache/camel/component/" + scheme + " file", e);
+ }
+
+ return null;
+ }
+
+ public static String loadComponentJSonSchema(ClassLoader classLoader, String scheme) {
+ String answer = null;
+
+ String path = null;
+ String javaType = extractComponentJavaType(classLoader, scheme);
+ if (javaType != null) {
+ int pos = javaType.lastIndexOf(".");
+ path = javaType.substring(0, pos);
+ path = path.replace('.', '/');
+ path = path + "/" + scheme + ".json";
+ }
+
+ if (path != null) {
+ try {
+ InputStream is = classLoader.getResourceAsStream(path);
+ if (is != null) {
+ answer = loadText(is);
+ }
+ } catch (Throwable e) {
+ LOG.warn("Error loading " + path + " file", e);
+ }
+ }
+
+ return answer;
+ }
+}
http://git-wip-us.apache.org/repos/asf/camel/blob/eec3f843/platforms/camel-catalog-maven/src/main/java/org/apache/camel/catalog/maven/DefaultMavenArtifactProvider.java
----------------------------------------------------------------------
diff --git a/platforms/camel-catalog-maven/src/main/java/org/apache/camel/catalog/maven/DefaultMavenArtifactProvider.java b/platforms/camel-catalog-maven/src/main/java/org/apache/camel/catalog/maven/DefaultMavenArtifactProvider.java
new file mode 100644
index 0000000..cafbd4b
--- /dev/null
+++ b/platforms/camel-catalog-maven/src/main/java/org/apache/camel/catalog/maven/DefaultMavenArtifactProvider.java
@@ -0,0 +1,101 @@
+/**
+ * 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.maven;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Properties;
+
+import groovy.grape.Grape;
+import groovy.lang.GroovyClassLoader;
+import org.apache.camel.catalog.CamelCatalog;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import static org.apache.camel.catalog.maven.ComponentArtifactHelper.extractComponentJavaType;
+import static org.apache.camel.catalog.maven.ComponentArtifactHelper.loadComponentJSonSchema;
+import static org.apache.camel.catalog.maven.ComponentArtifactHelper.loadComponentProperties;
+
+/**
+ * Default {@link MavenArtifactProvider} which uses Groovy Grape to download the artifact.
+ */
+public class DefaultMavenArtifactProvider implements MavenArtifactProvider {
+
+ private static final Logger LOG = LoggerFactory.getLogger(DefaultMavenArtifactProvider.class);
+
+ public void addMavenRepository(String name, String url) {
+ Map<String, Object> repo = new HashMap<>();
+ repo.put("name", name);
+ repo.put("root", url);
+ Grape.addResolver(repo);
+ }
+
+ @Override
+ public boolean addArtifactToCatalog(CamelCatalog camelCatalog, String groupId, String artifactId, String version) {
+ try {
+ Grape.setEnableAutoDownload(true);
+
+ final ClassLoader classLoader = new GroovyClassLoader();
+
+ Map<String, Object> param = new HashMap<>();
+ param.put("classLoader", classLoader);
+ param.put("group", groupId);
+ param.put("module", artifactId);
+ param.put("version", version);
+
+ LOG.debug("Downloading {}:{}:{}", groupId, artifactId, version);
+ Grape.grab(param);
+
+ // the classloader can load content from the downloaded JAR
+ boolean found = false;
+ found |= scanCamelComponents(camelCatalog, classLoader);
+
+ return found;
+ } catch (Exception e) {
+ return false;
+ }
+ }
+
+ protected boolean scanCamelComponents(CamelCatalog camelCatalog, ClassLoader classLoader) {
+ boolean found = false;
+ // is there any custom Camel components in this library?
+ Properties properties = loadComponentProperties(classLoader);
+ if (properties != null) {
+ String components = (String) properties.get("components");
+ if (components != null) {
+ String[] part = components.split("\\s");
+ for (String scheme : part) {
+ if (!camelCatalog.findComponentNames().contains(scheme)) {
+ // find the class name
+ String javaType = extractComponentJavaType(classLoader, scheme);
+ if (javaType != null) {
+ String json = loadComponentJSonSchema(classLoader, scheme);
+ if (json != null) {
+ LOG.debug("Adding component: {}", scheme);
+ camelCatalog.addComponent(scheme, javaType, json);
+ found = true;
+ }
+ }
+ }
+ }
+ }
+ }
+ return found;
+ }
+
+}
+
http://git-wip-us.apache.org/repos/asf/camel/blob/eec3f843/platforms/camel-catalog-maven/src/main/java/org/apache/camel/catalog/maven/MavenArtifactProvider.java
----------------------------------------------------------------------
diff --git a/platforms/camel-catalog-maven/src/main/java/org/apache/camel/catalog/maven/MavenArtifactProvider.java b/platforms/camel-catalog-maven/src/main/java/org/apache/camel/catalog/maven/MavenArtifactProvider.java
new file mode 100644
index 0000000..a96c2a8
--- /dev/null
+++ b/platforms/camel-catalog-maven/src/main/java/org/apache/camel/catalog/maven/MavenArtifactProvider.java
@@ -0,0 +1,45 @@
+/**
+ * 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.maven;
+
+import org.apache.camel.catalog.CamelCatalog;
+
+/**
+ * Provider which allows downloading artifact using Maven and add content to the {@link CamelCatalog}.
+ */
+public interface MavenArtifactProvider {
+
+ /**
+ * To add a 3rd party Maven repository.
+ *
+ * @param name the repository name
+ * @param url the repository url
+ */
+ void addMavenRepository(String name, String url);
+
+ /**
+ * Downloads the artifact using the Maven coordinates and scans the JAR for Camel components
+ * which will be added to the CamelCatalog.
+ *
+ * @param camelCatalog The Camel Catalog
+ * @param groupId Maven group id
+ * @param artifactId Maven artifact id
+ * @param version Maven version
+ * @return <tt>true</tt> if anything was added to the catalog, <tt>false</tt> if not.
+ */
+ boolean addArtifactToCatalog(CamelCatalog camelCatalog, String groupId, String artifactId, String version);
+}
http://git-wip-us.apache.org/repos/asf/camel/blob/eec3f843/platforms/camel-catalog-maven/src/test/java/org/apache/camel/catalog/maven/MavenArtifactProviderTest.java
----------------------------------------------------------------------
diff --git a/platforms/camel-catalog-maven/src/test/java/org/apache/camel/catalog/maven/MavenArtifactProviderTest.java b/platforms/camel-catalog-maven/src/test/java/org/apache/camel/catalog/maven/MavenArtifactProviderTest.java
new file mode 100644
index 0000000..f1e42f0
--- /dev/null
+++ b/platforms/camel-catalog-maven/src/test/java/org/apache/camel/catalog/maven/MavenArtifactProviderTest.java
@@ -0,0 +1,40 @@
+/**
+ * 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.maven;
+
+import junit.framework.TestCase;
+import org.apache.camel.catalog.CamelCatalog;
+import org.apache.camel.catalog.DefaultCamelCatalog;
+import org.junit.Test;
+
+public class MavenArtifactProviderTest extends TestCase {
+
+ @Test
+ public void testAddComponent() {
+ CamelCatalog camelCatalog = new DefaultCamelCatalog();
+ MavenArtifactProvider provider = new DefaultMavenArtifactProvider();
+
+ int before = camelCatalog.findComponentNames().size();
+
+ boolean found = provider.addArtifactToCatalog(camelCatalog, "org.apache.camel", "dummy-component", camelCatalog.getCatalogVersion());
+ assertTrue(found);
+
+ int after = camelCatalog.findComponentNames().size();
+
+ assertTrue("Should find 1 new component", after - before == 1);
+ }
+}