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