| /** |
| * 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; |
| } |
| |
| } |