blob: 0154b0651ff63d2a2997f92485fe73b5263009c1 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.camel.component.atomix.cluster.springboot;
import java.util.stream.Collectors;
import io.atomix.catalyst.transport.Address;
import org.apache.camel.cluster.CamelClusterService;
import org.apache.camel.component.atomix.cluster.AtomixClusterClientService;
import org.apache.camel.component.atomix.cluster.AtomixClusterService;
import org.apache.camel.spring.boot.CamelAutoConfiguration;
import org.apache.camel.spring.boot.cluster.ClusteredRouteControllerAutoConfiguration;
import org.apache.camel.util.ObjectHelper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
import org.springframework.boot.autoconfigure.AutoConfigureBefore;
import org.springframework.boot.autoconfigure.condition.AllNestedConditions;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Conditional;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Scope;
@Configuration
@AutoConfigureBefore({ ClusteredRouteControllerAutoConfiguration.class, CamelAutoConfiguration.class })
@Conditional(AtomixClusterServiceAutoConfiguration.AutoConfigurationCondition.class)
@EnableConfigurationProperties(AtomixClusterServiceConfiguration.class)
public class AtomixClusterServiceAutoConfiguration {
@Autowired
private AtomixClusterServiceConfiguration configuration;
@Bean(name = "atomix-cluster-service")
@Scope(ConfigurableBeanFactory.SCOPE_SINGLETON)
@ConditionalOnProperty(prefix = "camel.component.atomix.cluster.service", name = "mode", havingValue = "node")
public CamelClusterService atomixClusterService() {
AtomixClusterService service = new AtomixClusterService();
service.setNodes(configuration.getNodes().stream().map(Address::new).collect(Collectors.toList()));
ObjectHelper.ifNotEmpty(configuration.isEphemeral(), service::setEphemeral);
ObjectHelper.ifNotEmpty(configuration.getId(), service::setId);
ObjectHelper.ifNotEmpty(configuration.getAddress(), service::setAddress);
ObjectHelper.ifNotEmpty(configuration.getStoragePath(), service::setStoragePath);
ObjectHelper.ifNotEmpty(configuration.getStorageLevel(), service::setStorageLevel);
ObjectHelper.ifNotEmpty(configuration.getConfigurationUri(), service::setConfigurationUri);
ObjectHelper.ifNotEmpty(configuration.getAttributes(), service::setAttributes);
ObjectHelper.ifNotEmpty(configuration.getOrder(), service::setOrder);
return service;
}
@Bean(name = "atomix-cluster-client-service")
@Scope(ConfigurableBeanFactory.SCOPE_SINGLETON)
@ConditionalOnProperty(prefix = "camel.component.atomix.cluster.service", name = "mode", havingValue = "client")
public CamelClusterService atomixClusterClientService() {
AtomixClusterClientService service = new AtomixClusterClientService();
service.setNodes(configuration.getNodes().stream().map(Address::new).collect(Collectors.toList()));
ObjectHelper.ifNotEmpty(configuration.getId(), service::setId);
ObjectHelper.ifNotEmpty(configuration.getConfigurationUri(), service::setConfigurationUri);
ObjectHelper.ifNotEmpty(configuration.getAttributes(), service::setAttributes);
ObjectHelper.ifNotEmpty(configuration.getOrder(), service::setOrder);
return service;
}
// *****************************************
// Conditions
// *****************************************
public static class AutoConfigurationCondition extends AllNestedConditions {
public AutoConfigurationCondition() {
super(ConfigurationPhase.REGISTER_BEAN);
}
@ConditionalOnProperty(prefix = "camel.component.atomix.cluster.service", name = "enabled")
static class IfEnabled {
}
@ConditionalOnProperty(prefix = "camel.component.atomix.cluster.service", name = "mode")
static class WithMode {
}
}
}