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}