blob: 387164cd3fb5c791186a10cdc107024c86756c53 [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.connector;
import java.net.URISyntaxException;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import org.apache.camel.catalog.CamelCatalog;
import org.apache.camel.catalog.DefaultCamelCatalog;
public class DefaultCamelConnectorCatalog implements CamelConnectorCatalog {
private final CamelCatalog camelCatalog = new DefaultCamelCatalog(true);
private ConnectorDataStore dataStore = new MemoryConnectorDataStore();
@Override
public void setConnectorDataStore(ConnectorDataStore dataStore) {
this.dataStore = dataStore;
}
@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 scheme,
String javaType, String description, String labels,
String connectorJson, String connectorSchemaJson, String componentSchemaJson) {
ConnectorDto dto = new ConnectorDto();
dto.setGroupId(groupId);
dto.setArtifactId(artifactId);
dto.setVersion(version);
dto.setName(name);
dto.setScheme(scheme);
dto.setJavaType(javaType);
dto.setDescription(description);
dto.setLabels(labels);
dataStore.addConnector(dto, connectorJson, connectorSchemaJson, componentSchemaJson);
}
@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);
}
@Override
public List<ConnectorDto> findConnector(boolean latestVersionOnly) {
return findConnector(null, latestVersionOnly);
}
@Override
public List<ConnectorDto> findConnector(String filter, boolean latestVersionOnly) {
return dataStore.findConnector(filter, latestVersionOnly);
}
@Override
public String connectorJSon(String groupId, String artifactId, String version) {
ConnectorDto dto = new ConnectorDto();
dto.setGroupId(groupId);
dto.setArtifactId(artifactId);
dto.setVersion(version);
return dataStore.connectorJSon(dto);
}
@Override
public String connectorSchemaJSon(String groupId, String artifactId, String version) {
ConnectorDto dto = new ConnectorDto();
dto.setGroupId(groupId);
dto.setArtifactId(artifactId);
dto.setVersion(version);
return dataStore.connectorSchemaJSon(dto);
}
@Override
public String componentSchemaJSon(String groupId, String artifactId, String version) {
ConnectorDto dto = new ConnectorDto();
dto.setGroupId(groupId);
dto.setArtifactId(artifactId);
dto.setVersion(version);
return dataStore.componentSchemaJSon(dto);
}
@Override
public String asEndpointUri(String scheme, Map<String, String> properties, boolean encode) throws URISyntaxException {
// delegate to use CamelCatalog
Optional<ConnectorDto> found = dataStore.findConnector(null, true).stream().filter(d -> d.getScheme().equals(scheme)).findAny();
if (found.isPresent()) {
ConnectorDto dto = found.get();
// need to add custom connector as component to the catalog before we can build the uri
String javaType = dto.getJavaType();
String componentJson = componentSchemaJSon(dto.getGroupId(), dto.getArtifactId(), dto.getVersion());
camelCatalog.addComponent(scheme, javaType, componentJson);
return camelCatalog.asEndpointUri(scheme, properties, encode);
}
// no connector with that scheme
return null;
}
@Override
public String asEndpointUriXml(String scheme, Map<String, String> properties, boolean encode) throws URISyntaxException {
// delegate to use CamelCatalog
Optional<ConnectorDto> found = dataStore.findConnector(null, true).stream().filter(d -> d.getScheme().equals(scheme)).findAny();
if (found.isPresent()) {
ConnectorDto dto = found.get();
// need to add custom connector as component to the catalog before we can build the uri
String javaType = dto.getJavaType();
String componentJson = componentSchemaJSon(dto.getGroupId(), dto.getArtifactId(), dto.getVersion());
camelCatalog.addComponent(scheme, javaType, componentJson);
return camelCatalog.asEndpointUriXml(scheme, properties, encode);
}
// no connector with that scheme
return null;
}
}