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 */ 017 018package org.apache.camel.model.cloud; 019 020import java.util.Map; 021import java.util.concurrent.TimeUnit; 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.builder.xml.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 @Metadata(defaultValue = "60") 039 private Integer timeout = 60; 040 @XmlAttribute 041 @XmlJavaTypeAdapter(TimeUnitAdapter.class) @Metadata(defaultValue = "SECONDS") 042 private TimeUnit units = TimeUnit.SECONDS; 043 @XmlElements({ 044 @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 = "aggregatingServiceDiscovery", type = AggregatingServiceCallServiceDiscoveryConfiguration.class), 049 @XmlElement(name = "staticServiceDiscovery", type = StaticServiceCallServiceDiscoveryConfiguration.class)} 050 ) 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 // ************************************************************************* 100 // Fluent API 101 // ************************************************************************* 102 103 /** 104 * Set the time the services will be retained. 105 */ 106 public CachingServiceCallServiceDiscoveryConfiguration timeout(Integer timeout) { 107 setTimeout(timeout); 108 return this; 109 } 110 111 /** 112 * Set the time unit for the timeout. 113 */ 114 public CachingServiceCallServiceDiscoveryConfiguration units(TimeUnit units) { 115 setUnits(units); 116 return this; 117 } 118 119 /** 120 * Set the service-call configuration to use 121 */ 122 public CachingServiceCallServiceDiscoveryConfiguration serviceDiscoveryConfiguration(ServiceCallServiceDiscoveryConfiguration serviceDiscoveryConfiguration) { 123 setServiceDiscoveryConfiguration(serviceDiscoveryConfiguration); 124 return this; 125 } 126 127 // ***************************** 128 // Shortcuts - ServiceDiscovery 129 // ***************************** 130 131 public CachingServiceCallServiceDiscoveryConfiguration cachingServiceDiscovery() { 132 CachingServiceCallServiceDiscoveryConfiguration conf = new CachingServiceCallServiceDiscoveryConfiguration(); 133 setServiceDiscoveryConfiguration(conf); 134 135 return serviceDiscoveryConfiguration(conf); 136 } 137 138 public ConsulServiceCallServiceDiscoveryConfiguration consulServiceDiscovery() { 139 ConsulServiceCallServiceDiscoveryConfiguration conf = new ConsulServiceCallServiceDiscoveryConfiguration(); 140 setServiceDiscoveryConfiguration(conf); 141 142 return conf; 143 } 144 145 public DnsServiceCallServiceDiscoveryConfiguration dnsServiceDiscovery() { 146 DnsServiceCallServiceDiscoveryConfiguration conf = new DnsServiceCallServiceDiscoveryConfiguration(); 147 setServiceDiscoveryConfiguration(conf); 148 149 return conf; 150 } 151 152 public EtcdServiceCallServiceDiscoveryConfiguration etcdServiceDiscovery() { 153 EtcdServiceCallServiceDiscoveryConfiguration conf = new EtcdServiceCallServiceDiscoveryConfiguration(); 154 setServiceDiscoveryConfiguration(conf); 155 156 return conf; 157 } 158 159 public KubernetesServiceCallServiceDiscoveryConfiguration kubernetesServiceDiscovery() { 160 KubernetesServiceCallServiceDiscoveryConfiguration conf = new KubernetesServiceCallServiceDiscoveryConfiguration(); 161 setServiceDiscoveryConfiguration(conf); 162 163 return conf; 164 } 165 166 public AggregatingServiceCallServiceDiscoveryConfiguration aggregatingServiceDiscovery() { 167 AggregatingServiceCallServiceDiscoveryConfiguration conf = new AggregatingServiceCallServiceDiscoveryConfiguration(); 168 setServiceDiscoveryConfiguration(conf); 169 170 return conf; 171 } 172 173 public StaticServiceCallServiceDiscoveryConfiguration staticServiceDiscovery() { 174 StaticServiceCallServiceDiscoveryConfiguration conf = new StaticServiceCallServiceDiscoveryConfiguration(); 175 setServiceDiscoveryConfiguration(conf); 176 177 return conf; 178 } 179 180 // ************************************************************************* 181 // Utilities 182 // ************************************************************************* 183 184 @Override 185 protected void postProcessFactoryParameters(CamelContext camelContext, Map<String, Object> parameters) throws Exception { 186 if (serviceDiscoveryConfiguration != null) { 187 parameters.put("serviceDiscovery", serviceDiscoveryConfiguration.newInstance(camelContext)); 188 } 189 } 190}