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}