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