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