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.ArrayList; 020import java.util.List; 021import java.util.Map; 022 023import javax.xml.bind.annotation.XmlAccessType; 024import javax.xml.bind.annotation.XmlAccessorType; 025import javax.xml.bind.annotation.XmlElement; 026import javax.xml.bind.annotation.XmlElements; 027import javax.xml.bind.annotation.XmlRootElement; 028 029import org.apache.camel.CamelContext; 030import org.apache.camel.cloud.ServiceFilter; 031import org.apache.camel.spi.Metadata; 032 033@Metadata(label = "routing,cloud,service-filter") 034@XmlRootElement(name = "combinedServiceFilter") 035@XmlAccessorType(XmlAccessType.FIELD) 036public class CombinedServiceCallServiceFilterConfiguration extends ServiceCallServiceFilterConfiguration { 037 @XmlElements({ 038 @XmlElement(name = "blacklistServiceFilter", type = BlacklistServiceCallServiceFilterConfiguration.class), 039 @XmlElement(name = "customServiceFilter", type = CustomServiceCallServiceFilterConfiguration.class), 040 @XmlElement(name = "healthyServiceFilter", type = HealthyServiceCallServiceFilterConfiguration.class), 041 @XmlElement(name = "passThroughServiceFilter", type = PassThroughServiceCallServiceFilterConfiguration.class) } 042 ) 043 private List<ServiceCallServiceFilterConfiguration> serviceFilterConfigurations; 044 045 public CombinedServiceCallServiceFilterConfiguration() { 046 this(null); 047 } 048 049 public CombinedServiceCallServiceFilterConfiguration(ServiceCallDefinition parent) { 050 super(parent, "combined-service-filter"); 051 } 052 053 // ************************************************************************* 054 // Properties 055 // ************************************************************************* 056 057 public List<ServiceCallServiceFilterConfiguration> getServiceFilterConfigurations() { 058 return serviceFilterConfigurations; 059 } 060 061 /** 062 * List of ServiceFilter configuration to use 063 * @param serviceFilterConfigurations 064 */ 065 public void setServiceFilterConfigurations(List<ServiceCallServiceFilterConfiguration> serviceFilterConfigurations) { 066 this.serviceFilterConfigurations = serviceFilterConfigurations; 067 } 068 069 /** 070 * Add a ServiceFilter configuration 071 */ 072 public void addServiceFilterConfiguration(ServiceCallServiceFilterConfiguration serviceFilterConfiguration) { 073 if (serviceFilterConfigurations == null) { 074 serviceFilterConfigurations = new ArrayList<>(); 075 } 076 077 serviceFilterConfigurations.add(serviceFilterConfiguration); 078 } 079 080 // ************************************************************************* 081 // Fluent API 082 // ************************************************************************* 083 084 /** 085 * List of ServiceFilter configuration to use 086 */ 087 public CombinedServiceCallServiceFilterConfiguration serviceFilterConfigurations(List<ServiceCallServiceFilterConfiguration> serviceFilterConfigurations) { 088 setServiceFilterConfigurations(serviceFilterConfigurations); 089 return this; 090 } 091 092 /** 093 * Add a ServiceFilter configuration 094 */ 095 public CombinedServiceCallServiceFilterConfiguration serviceFilterConfiguration(ServiceCallServiceFilterConfiguration serviceFilterConfiguration) { 096 addServiceFilterConfiguration(serviceFilterConfiguration); 097 return this; 098 } 099 100 // ***************************** 101 // Shortcuts - ServiceFilter 102 // ***************************** 103 104 public CombinedServiceCallServiceFilterConfiguration healthy() { 105 addServiceFilterConfiguration(new HealthyServiceCallServiceFilterConfiguration()); 106 return this; 107 } 108 109 public CombinedServiceCallServiceFilterConfiguration passThrough() { 110 addServiceFilterConfiguration(new PassThroughServiceCallServiceFilterConfiguration()); 111 return this; 112 } 113 114 public CombinedServiceCallServiceFilterConfiguration custom(String serviceFilter) { 115 addServiceFilterConfiguration(new CustomServiceCallServiceFilterConfiguration().serviceFilter(serviceFilter)); 116 return this; 117 } 118 119 public CombinedServiceCallServiceFilterConfiguration custom(ServiceFilter serviceFilter) { 120 addServiceFilterConfiguration(new CustomServiceCallServiceFilterConfiguration().serviceFilter(serviceFilter)); 121 return this; 122 } 123 124 // ************************************************************************* 125 // Utilities 126 // ************************************************************************* 127 128 @Override 129 protected void postProcessFactoryParameters(final CamelContext camelContext, final Map<String, Object> parameters) throws Exception { 130 if (serviceFilterConfigurations != null && !serviceFilterConfigurations.isEmpty()) { 131 List<ServiceFilter> discoveries = new ArrayList<>(serviceFilterConfigurations.size()); 132 for (ServiceCallServiceFilterConfiguration conf : serviceFilterConfigurations) { 133 discoveries.add(conf.newInstance(camelContext)); 134 } 135 136 parameters.put("serviceFilterList", discoveries); 137 } 138 } 139}