blob: 24c8153938bc7d343567f631e8d9c35307a17246 [file] [log] [blame]
/**
* 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 java.util.Map;
import java.util.Set;
import javax.ws.rs.Consumes;
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;
import javax.ws.rs.QueryParam;
import com.fasterxml.jackson.databind.ObjectMapper;
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;
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.
*/
@Api(value = "/camel-connector-catalog", description = "Camel Connector Catalog REST API")
@Path("/camel-connector-catalog")
public class CamelConnectorCatalogRest {
private CamelConnectorCatalog catalog = new DefaultCamelConnectorCatalog();
private MavenArtifactProvider maven = new DefaultMavenArtifactProvider();
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(value = "Whether to include latest version only", defaultValue = "true")
@QueryParam("latestVersionOnly") Boolean latestVersionOnly) {
boolean latest = latestVersionOnly != null ? latestVersionOnly : true;
return catalog.findConnector(latest);
}
@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(value = "Whether to include latest version only", defaultValue = "true")
@QueryParam("latestVersionOnly") Boolean latestVersionOnly) {
boolean latest = latestVersionOnly != null ? latestVersionOnly : true;
return catalog.findConnector(latest);
}
@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(value = "Maven groupdId of the connector", required = true)
@PathParam("groupId") String groupId,
@ApiParam(value = "Maven artifactId of the connector", required = true)
@PathParam("artifactId") String artifactId,
@ApiParam(value = "Maven version of the connector", required = true)
@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(value = "Maven groupdId of the connector", required = true)
@PathParam("groupId") String groupId,
@ApiParam(value = "Maven artifactId of the connector", required = true)
@PathParam("artifactId") String artifactId,
@ApiParam(value = "Maven version of the connector", required = true)
@PathParam("version") String version) {
return catalog.connectorSchemaJSon(groupId, artifactId, version);
}
@POST
@Path("/asEndpointUri/{scheme}")
@Consumes("application/json")
@Produces("text/plain")
@ApiOperation(value = "Creates an endpoint uri in Java style configured using the provided options in the JSon body")
public String asEndpointUri(@ApiParam(value = "The component scheme", readOnly = true) @PathParam("scheme") String scheme,
@ApiParam(value = "The options as a JSon map with key/value pairs", required = true) String json) {
try {
ObjectMapper mapper = new ObjectMapper();
Map map = mapper.readValue(json, Map.class);
return catalog.asEndpointUri(scheme, map, true);
} catch (Exception e) {
return null;
}
}
@POST
@Path("/asEndpointUriXml/{scheme}")
@Consumes("application/json")
@Produces("text/plain")
@ApiOperation(value = "Creates an endpoint uri in XML style configured using the provided options in the JSon body")
public String asEndpointUriXml(@ApiParam(value = "The component scheme", readOnly = true) @PathParam("scheme") String scheme,
@ApiParam(value = "The options as a JSon map with key/value pairs", required = true) String json) {
try {
ObjectMapper mapper = new ObjectMapper();
Map map = mapper.readValue(json, Map.class);
return catalog.asEndpointUriXml(scheme, map, true);
} catch (Exception e) {
return null;
}
}
@POST
@Path("/mavenCacheDirectory/{name}")
@ApiOperation(value = "Configures the Maven cache directory to use when downloading artifacts")
public void mavenCacheDirectory(@ApiParam(value = "The name of the cache directory", required = true) @PathParam("name") String name) {
maven.setCacheDirectory(name);
}
@POST
@Path("/addMavenRepository/{name}/{url}")
@ApiOperation(value = "Adds a third party Maven repository to use for downloading Maven artifacts")
public void addMavenRepository(@ApiParam(value = "The name of the Maven repository", required = true) @PathParam("name") String name,
@ApiParam(value = "The URL of the Maven repository", required = true) @PathParam("url") String url) {
maven.addMavenRepository(name, url);
}
@POST
@Path("/addConnectorFromMavenArtifact/{groupId}/{artifactId}/{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(value = "The Maven groupId", required = true) @PathParam("groupId") String groupId,
@ApiParam(value = "The Maven artifactId", required = true) @PathParam("artifactId") String artifactId,
@ApiParam(value = "The Maven version", required = true) @PathParam("version") String version) {
return maven.addArtifactToCatalog(null, catalog, groupId, artifactId, version);
}
}