001/** 002 * Licensed to the Apache Software Foundation (ASF) under one or more 003 * contributor license agreements. See the NOTICE file distributed with 004 * this work for additional information regarding copyright ownership. 005 * The ASF licenses this file to You under the Apache License, Version 2.0 006 * (the "License"); you may not use this file except in compliance with 007 * the License. You may obtain a copy of the License at 008 * 009 * http://www.apache.org/licenses/LICENSE-2.0 010 * 011 * Unless required by applicable law or agreed to in writing, software 012 * distributed under the License is distributed on an "AS IS" BASIS, 013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 014 * See the License for the specific language governing permissions and 015 * limitations under the License. 016 */ 017package org.apache.camel.model.cloud; 018 019import java.util.ArrayList; 020import java.util.List; 021import java.util.Map; 022import javax.xml.bind.annotation.XmlAccessType; 023import javax.xml.bind.annotation.XmlAccessorType; 024import javax.xml.bind.annotation.XmlElement; 025import javax.xml.bind.annotation.XmlElements; 026import javax.xml.bind.annotation.XmlRootElement; 027 028import org.apache.camel.CamelContext; 029import org.apache.camel.cloud.ServiceDiscovery; 030import org.apache.camel.spi.Metadata; 031 032@Metadata(label = "routing,cloud,service-discovery") 033@XmlRootElement(name = "multiServiceDiscovery") 034@XmlAccessorType(XmlAccessType.FIELD) 035public class AggregatingServiceCallServiceDiscoveryConfiguration extends ServiceCallServiceDiscoveryConfiguration { 036 @XmlElements({ 037 @XmlElement(name = "consulServiceDiscovery", type = ConsulServiceCallServiceDiscoveryConfiguration.class), 038 @XmlElement(name = "dnsServiceDiscovery", type = DnsServiceCallServiceDiscoveryConfiguration.class), 039 @XmlElement(name = "etcdServiceDiscovery", type = EtcdServiceCallServiceDiscoveryConfiguration.class), 040 @XmlElement(name = "kubernetesServiceDiscovery", type = KubernetesServiceCallServiceDiscoveryConfiguration.class), 041 @XmlElement(name = "staticServiceDiscovery", type = StaticServiceCallServiceDiscoveryConfiguration.class), 042 @XmlElement(name = "cachingServiceDiscovery", type = CachingServiceCallServiceDiscoveryConfiguration.class)} 043 ) 044 private List<ServiceCallServiceDiscoveryConfiguration> serviceDiscoveryConfigurations; 045 046 public AggregatingServiceCallServiceDiscoveryConfiguration() { 047 this(null); 048 } 049 050 public AggregatingServiceCallServiceDiscoveryConfiguration(ServiceCallDefinition parent) { 051 super(parent, "aggregating-service-discovery"); 052 } 053 054 // ************************************************************************* 055 // Properties 056 // ************************************************************************* 057 058 public List<ServiceCallServiceDiscoveryConfiguration> getServiceDiscoveryConfigurations() { 059 return serviceDiscoveryConfigurations; 060 } 061 062 /** 063 * List of ServiceDiscovery configuration to use 064 * @param serviceDiscoveryConfigurations 065 */ 066 public void setServiceDiscoveryConfigurations(List<ServiceCallServiceDiscoveryConfiguration> serviceDiscoveryConfigurations) { 067 this.serviceDiscoveryConfigurations = serviceDiscoveryConfigurations; 068 } 069 070 /** 071 * Add a ServiceDiscovery configuration 072 */ 073 public void addServiceDiscoveryConfigurations(ServiceCallServiceDiscoveryConfiguration serviceDiscoveryConfiguration) { 074 if (serviceDiscoveryConfigurations == null) { 075 serviceDiscoveryConfigurations = new ArrayList<>(); 076 } 077 078 serviceDiscoveryConfigurations.add(serviceDiscoveryConfiguration); 079 } 080 081 // ************************************************************************* 082 // Fluent API 083 // ************************************************************************* 084 085 /** 086 * List of ServiceDiscovery configuration to use 087 */ 088 public AggregatingServiceCallServiceDiscoveryConfiguration serviceDiscoveryConfigurations(List<ServiceCallServiceDiscoveryConfiguration> serviceDiscoveryConfigurations) { 089 setServiceDiscoveryConfigurations(serviceDiscoveryConfigurations); 090 return this; 091 } 092 093 /** 094 * Add a ServiceDiscovery configuration 095 */ 096 public AggregatingServiceCallServiceDiscoveryConfiguration serviceDiscoveryConfiguration(ServiceCallServiceDiscoveryConfiguration serviceDiscoveryConfiguration) { 097 addServiceDiscoveryConfigurations(serviceDiscoveryConfiguration); 098 return this; 099 } 100 101 // ***************************** 102 // Shortcuts - ServiceDiscovery 103 // ***************************** 104 105 public CachingServiceCallServiceDiscoveryConfiguration cachingServiceDiscovery() { 106 CachingServiceCallServiceDiscoveryConfiguration conf = new CachingServiceCallServiceDiscoveryConfiguration(); 107 addServiceDiscoveryConfigurations(conf); 108 109 return conf; 110 } 111 112 public ConsulServiceCallServiceDiscoveryConfiguration consulServiceDiscovery() { 113 ConsulServiceCallServiceDiscoveryConfiguration conf = new ConsulServiceCallServiceDiscoveryConfiguration(); 114 addServiceDiscoveryConfigurations(conf); 115 116 return conf; 117 } 118 119 public DnsServiceCallServiceDiscoveryConfiguration dnsServiceDiscovery() { 120 DnsServiceCallServiceDiscoveryConfiguration conf = new DnsServiceCallServiceDiscoveryConfiguration(); 121 addServiceDiscoveryConfigurations(conf); 122 123 return conf; 124 } 125 126 public EtcdServiceCallServiceDiscoveryConfiguration etcdServiceDiscovery() { 127 EtcdServiceCallServiceDiscoveryConfiguration conf = new EtcdServiceCallServiceDiscoveryConfiguration(); 128 addServiceDiscoveryConfigurations(conf); 129 130 return conf; 131 } 132 133 public KubernetesServiceCallServiceDiscoveryConfiguration kubernetesServiceDiscovery() { 134 KubernetesServiceCallServiceDiscoveryConfiguration conf = new KubernetesServiceCallServiceDiscoveryConfiguration(); 135 addServiceDiscoveryConfigurations(conf); 136 137 return conf; 138 } 139 140 public AggregatingServiceCallServiceDiscoveryConfiguration multiServiceDiscovery() { 141 AggregatingServiceCallServiceDiscoveryConfiguration conf = new AggregatingServiceCallServiceDiscoveryConfiguration(); 142 addServiceDiscoveryConfigurations(conf); 143 144 return conf; 145 } 146 147 public StaticServiceCallServiceDiscoveryConfiguration staticServiceDiscovery() { 148 StaticServiceCallServiceDiscoveryConfiguration conf = new StaticServiceCallServiceDiscoveryConfiguration(); 149 addServiceDiscoveryConfigurations(conf); 150 151 return conf; 152 } 153 154 // ************************************************************************* 155 // Utilities 156 // ************************************************************************* 157 158 @Override 159 protected void postProcessFactoryParameters(final CamelContext camelContext, final Map<String, Object> parameters) throws Exception { 160 if (serviceDiscoveryConfigurations != null && !serviceDiscoveryConfigurations.isEmpty()) { 161 List<ServiceDiscovery> discoveries = new ArrayList<>(serviceDiscoveryConfigurations.size()); 162 for (ServiceCallServiceDiscoveryConfiguration conf : serviceDiscoveryConfigurations) { 163 discoveries.add(conf.newInstance(camelContext)); 164 } 165 166 parameters.put("serviceDiscoveryList", discoveries); 167 } 168 } 169}