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}