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