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