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.Map; 020import java.util.concurrent.TimeUnit; 021 022import javax.xml.bind.annotation.XmlAccessType; 023import javax.xml.bind.annotation.XmlAccessorType; 024import javax.xml.bind.annotation.XmlAttribute; 025import javax.xml.bind.annotation.XmlElement; 026import javax.xml.bind.annotation.XmlElements; 027import javax.xml.bind.annotation.XmlRootElement; 028import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; 029 030import org.apache.camel.CamelContext; 031import org.apache.camel.model.TimeUnitAdapter; 032import org.apache.camel.spi.Metadata; 033 034@Metadata(label = "routing,cloud,service-discovery") 035@XmlRootElement(name = "cachingServiceDiscovery") 036@XmlAccessorType(XmlAccessType.FIELD) 037public class CachingServiceCallServiceDiscoveryConfiguration extends ServiceCallServiceDiscoveryConfiguration { 038 @XmlAttribute 039 @Metadata(defaultValue = "60") 040 private Integer timeout = 60; 041 @XmlAttribute 042 @XmlJavaTypeAdapter(TimeUnitAdapter.class) 043 @Metadata(defaultValue = "SECONDS") 044 private TimeUnit units = TimeUnit.SECONDS; 045 @XmlElements({@XmlElement(name = "consulServiceDiscovery", type = ConsulServiceCallServiceDiscoveryConfiguration.class), 046 @XmlElement(name = "dnsServiceDiscovery", type = DnsServiceCallServiceDiscoveryConfiguration.class), 047 @XmlElement(name = "etcdServiceDiscovery", type = EtcdServiceCallServiceDiscoveryConfiguration.class), 048 @XmlElement(name = "kubernetesServiceDiscovery", type = KubernetesServiceCallServiceDiscoveryConfiguration.class), 049 @XmlElement(name = "combinedServiceDiscovery", type = CombinedServiceCallServiceDiscoveryConfiguration.class), 050 @XmlElement(name = "staticServiceDiscovery", type = StaticServiceCallServiceDiscoveryConfiguration.class)}) 051 private ServiceCallServiceDiscoveryConfiguration serviceDiscoveryConfiguration; 052 053 public CachingServiceCallServiceDiscoveryConfiguration() { 054 this(null); 055 } 056 057 public CachingServiceCallServiceDiscoveryConfiguration(ServiceCallDefinition parent) { 058 super(parent, "caching-service-discovery"); 059 } 060 061 // ************************************************************************* 062 // Properties 063 // ************************************************************************* 064 065 public Integer getTimeout() { 066 return timeout; 067 } 068 069 /** 070 * Set the time the services will be retained. 071 */ 072 public void setTimeout(Integer timeout) { 073 this.timeout = timeout; 074 } 075 076 public TimeUnit getUnits() { 077 return units; 078 } 079 080 /** 081 * Set the time unit for the timeout. 082 */ 083 public void setUnits(TimeUnit units) { 084 this.units = units; 085 } 086 087 public ServiceCallServiceDiscoveryConfiguration getServiceDiscoveryConfiguration() { 088 return serviceDiscoveryConfiguration; 089 } 090 091 /** 092 * Set the service-call configuration to use 093 */ 094 public void setServiceDiscoveryConfiguration(ServiceCallServiceDiscoveryConfiguration serviceDiscoveryConfiguration) { 095 this.serviceDiscoveryConfiguration = serviceDiscoveryConfiguration; 096 } 097 098 // ************************************************************************* 099 // Fluent API 100 // ************************************************************************* 101 102 /** 103 * Set the time the services will be retained. 104 */ 105 public CachingServiceCallServiceDiscoveryConfiguration timeout(Integer timeout) { 106 setTimeout(timeout); 107 return this; 108 } 109 110 /** 111 * Set the time unit for the timeout. 112 */ 113 public CachingServiceCallServiceDiscoveryConfiguration units(TimeUnit units) { 114 setUnits(units); 115 return this; 116 } 117 118 /** 119 * Set the service-call configuration to use 120 */ 121 public CachingServiceCallServiceDiscoveryConfiguration serviceDiscoveryConfiguration(ServiceCallServiceDiscoveryConfiguration serviceDiscoveryConfiguration) { 122 setServiceDiscoveryConfiguration(serviceDiscoveryConfiguration); 123 return this; 124 } 125 126 // ***************************** 127 // Shortcuts - ServiceDiscovery 128 // ***************************** 129 130 public CachingServiceCallServiceDiscoveryConfiguration cachingServiceDiscovery() { 131 CachingServiceCallServiceDiscoveryConfiguration conf = new CachingServiceCallServiceDiscoveryConfiguration(); 132 setServiceDiscoveryConfiguration(conf); 133 134 return serviceDiscoveryConfiguration(conf); 135 } 136 137 public ConsulServiceCallServiceDiscoveryConfiguration consulServiceDiscovery() { 138 ConsulServiceCallServiceDiscoveryConfiguration conf = new ConsulServiceCallServiceDiscoveryConfiguration(); 139 setServiceDiscoveryConfiguration(conf); 140 141 return conf; 142 } 143 144 public DnsServiceCallServiceDiscoveryConfiguration dnsServiceDiscovery() { 145 DnsServiceCallServiceDiscoveryConfiguration conf = new DnsServiceCallServiceDiscoveryConfiguration(); 146 setServiceDiscoveryConfiguration(conf); 147 148 return conf; 149 } 150 151 public EtcdServiceCallServiceDiscoveryConfiguration etcdServiceDiscovery() { 152 EtcdServiceCallServiceDiscoveryConfiguration conf = new EtcdServiceCallServiceDiscoveryConfiguration(); 153 setServiceDiscoveryConfiguration(conf); 154 155 return conf; 156 } 157 158 public KubernetesServiceCallServiceDiscoveryConfiguration kubernetesServiceDiscovery() { 159 KubernetesServiceCallServiceDiscoveryConfiguration conf = new KubernetesServiceCallServiceDiscoveryConfiguration(); 160 setServiceDiscoveryConfiguration(conf); 161 162 return conf; 163 } 164 165 public CombinedServiceCallServiceDiscoveryConfiguration combinedServiceDiscovery() { 166 CombinedServiceCallServiceDiscoveryConfiguration conf = new CombinedServiceCallServiceDiscoveryConfiguration(); 167 setServiceDiscoveryConfiguration(conf); 168 169 return conf; 170 } 171 172 public StaticServiceCallServiceDiscoveryConfiguration staticServiceDiscovery() { 173 StaticServiceCallServiceDiscoveryConfiguration conf = new StaticServiceCallServiceDiscoveryConfiguration(); 174 setServiceDiscoveryConfiguration(conf); 175 176 return conf; 177 } 178 179 // ************************************************************************* 180 // Utilities 181 // ************************************************************************* 182 183 @Override 184 protected void postProcessFactoryParameters(CamelContext camelContext, Map<String, Object> parameters) throws Exception { 185 if (serviceDiscoveryConfiguration != null) { 186 parameters.put("serviceDiscovery", serviceDiscoveryConfiguration.newInstance(camelContext)); 187 } 188 } 189}