blob: 96c3a5bf611b908665f3d80698821c0c334d0144 [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.util;
import org.apache.camel.CamelContext;
import org.apache.camel.Endpoint;
import org.apache.camel.Exchange;
import org.apache.camel.NoSuchBeanException;
import org.apache.camel.NoSuchEndpointException;
import static org.apache.camel.util.ObjectHelper.isEmpty;
import static org.apache.camel.util.ObjectHelper.isNotEmpty;
import static org.apache.camel.util.ObjectHelper.notNull;
/**
* A number of helper methods
*
* @version
*/
public final class CamelContextHelper {
/**
* Utility classes should not have a public constructor.
*/
private CamelContextHelper() {
}
/**
* Returns the mandatory endpoint for the given URI or the
* {@link org.apache.camel.NoSuchEndpointException} is thrown
*/
public static Endpoint getMandatoryEndpoint(CamelContext camelContext, String uri)
throws NoSuchEndpointException {
Endpoint endpoint = camelContext.getEndpoint(uri);
if (endpoint == null) {
throw new NoSuchEndpointException(uri);
} else {
return endpoint;
}
}
/**
* Returns the mandatory endpoint for the given URI and type or the
* {@link org.apache.camel.NoSuchEndpointException} is thrown
*/
public static <T extends Endpoint> T getMandatoryEndpoint(CamelContext camelContext, String uri, Class<T> type) {
Endpoint endpoint = getMandatoryEndpoint(camelContext, uri);
return ObjectHelper.cast(type, endpoint);
}
/**
* Converts the given value to the requested type
*/
public static <T> T convertTo(CamelContext context, Class<T> type, Object value) {
notNull(context, "camelContext");
return context.getTypeConverter().convertTo(type, value);
}
/**
* Converts the given value to the specified type throwing an {@link IllegalArgumentException}
* if the value could not be converted to a non null value
*/
public static <T> T mandatoryConvertTo(CamelContext context, Class<T> type, Object value) {
T answer = convertTo(context, type, value);
if (answer == null) {
throw new IllegalArgumentException("Value " + value + " converted to " + type.getName() + " cannot be null");
}
return answer;
}
/**
* Creates a new instance of the given type using the {@link org.apache.camel.spi.Injector} on the given
* {@link CamelContext}
*/
public static <T> T newInstance(CamelContext context, Class<T> beanType) {
return context.getInjector().newInstance(beanType);
}
/**
* Look up the given named bean in the {@link org.apache.camel.spi.Registry} on the
* {@link CamelContext}
*/
public static Object lookup(CamelContext context, String name) {
return context.getRegistry().lookup(name);
}
/**
* Look up the given named bean of the given type in the {@link org.apache.camel.spi.Registry} on the
* {@link CamelContext}
*/
public static <T> T lookup(CamelContext context, String name, Class<T> beanType) {
return context.getRegistry().lookup(name, beanType);
}
/**
* Look up the given named bean in the {@link org.apache.camel.spi.Registry} on the
* {@link CamelContext} or throws NoSuchBeanException if not found.
*/
public static Object mandatoryLookup(CamelContext context, String name) {
Object answer = lookup(context, name);
if (answer == null) {
throw new NoSuchBeanException(name);
}
return answer;
}
/**
* Look up the given named bean of the given type in the {@link org.apache.camel.spi.Registry} on the
* {@link CamelContext} or throws NoSuchBeanException if not found.
*/
public static <T> T mandatoryLookup(CamelContext context, String name, Class<T> beanType) {
T answer = lookup(context, name, beanType);
if (answer == null) {
throw new NoSuchBeanException(name, beanType.getName());
}
return answer;
}
/**
* Evaluates the @EndpointInject annotation using the given context
*/
public static Endpoint getEndpointInjection(CamelContext camelContext, String uri, String ref, String injectionPointName, boolean mandatory) {
if (ObjectHelper.isNotEmpty(uri) && ObjectHelper.isNotEmpty(ref)) {
throw new IllegalArgumentException("Both uri and name is provided, only either one is allowed: uri=" + uri + ", ref=" + ref);
}
Endpoint endpoint;
if (isNotEmpty(uri)) {
endpoint = camelContext.getEndpoint(uri);
} else {
// if a ref is given then it should be possible to lookup
// otherwise we do not catch situations where there is a typo etc
if (isNotEmpty(ref)) {
endpoint = mandatoryLookup(camelContext, ref, Endpoint.class);
} else {
if (isEmpty(ref)) {
ref = injectionPointName;
}
if (mandatory) {
endpoint = mandatoryLookup(camelContext, ref, Endpoint.class);
} else {
endpoint = lookup(camelContext, ref, Endpoint.class);
}
}
}
return endpoint;
}
/**
* Gets the maximum cache pool size.
* <p/>
* Will use the property set on CamelContext with the key {@link Exchange#MAXIMUM_CACHE_POOL_SIZE}.
* If no property has been set, then it will fallback to return a size of 1000.
*
* @param camelContext the camel context
* @return the maximum cache size
* @throws IllegalArgumentException is thrown if the property is illegal
*/
public static int getMaximumCachePoolSize(CamelContext camelContext) throws IllegalArgumentException {
if (camelContext != null) {
String s = camelContext.getProperties().get(Exchange.MAXIMUM_CACHE_POOL_SIZE);
if (s != null) {
try {
// we cannot use Camel type converters as they may not be ready this early
Integer size = Integer.valueOf(s);
if (size == null || size <= 0) {
throw new IllegalArgumentException("Property " + Exchange.MAXIMUM_CACHE_POOL_SIZE + " must be a positive number, was: " + s);
}
return size;
} catch (NumberFormatException e) {
throw new IllegalArgumentException("Property " + Exchange.MAXIMUM_CACHE_POOL_SIZE + " must be a positive number, was: " + s, e);
}
}
}
// 1000 is the default fallback
return 1000;
}
/**
* Gets the maximum endpoint cache size.
* <p/>
* Will use the property set on CamelContext with the key {@link Exchange#MAXIMUM_ENDPOINT_CACHE_SIZE}.
* If no property has been set, then it will fallback to return a size of 1000.
*
* @param camelContext the camel context
* @return the maximum cache size
* @throws IllegalArgumentException is thrown if the property is illegal
*/
public static int getMaximumEndpointCacheSize(CamelContext camelContext) throws IllegalArgumentException {
if (camelContext != null) {
String s = camelContext.getProperties().get(Exchange.MAXIMUM_ENDPOINT_CACHE_SIZE);
if (s != null) {
// we cannot use Camel type converters as they may not be ready this early
try {
Integer size = Integer.valueOf(s);
if (size == null || size <= 0) {
throw new IllegalArgumentException("Property " + Exchange.MAXIMUM_ENDPOINT_CACHE_SIZE + " must be a positive number, was: " + s);
}
return size;
} catch (NumberFormatException e) {
throw new IllegalArgumentException("Property " + Exchange.MAXIMUM_ENDPOINT_CACHE_SIZE + " must be a positive number, was: " + s, e);
}
}
}
// 1000 is the default fallback
return 1000;
}
/**
* Parses the given text and handling property placeholders as well
*
* @param camelContext the camel context
* @param text the text
* @return the parsed text, or <tt>null</tt> if the text was <tt>null</tt>
* @throws Exception is thrown if illegal argument
*/
public static String parseText(CamelContext camelContext, String text) throws Exception {
// ensure we support property placeholders
return camelContext.resolvePropertyPlaceholders(text);
}
/**
* Parses the given text and converts it to an Integer and handling property placeholders as well
*
* @param camelContext the camel context
* @param text the text
* @return the integer vale, or <tt>null</tt> if the text was <tt>null</tt>
* @throws Exception is thrown if illegal argument or type conversion not possible
*/
public static Integer parseInteger(CamelContext camelContext, String text) throws Exception {
// ensure we support property placeholders
String s = camelContext.resolvePropertyPlaceholders(text);
if (s != null) {
try {
return camelContext.getTypeConverter().mandatoryConvertTo(Integer.class, s);
} catch (NumberFormatException e) {
if (s.equals(text)) {
throw new IllegalArgumentException("Error parsing [" + s + "] as an Integer.", e);
} else {
throw new IllegalArgumentException("Error parsing [" + s + "] from property " + text + " as an Integer.", e);
}
}
}
return null;
}
/**
* Parses the given text and converts it to an Long and handling property placeholders as well
*
* @param camelContext the camel context
* @param text the text
* @return the long vale, or <tt>null</tt> if the text was <tt>null</tt>
* @throws Exception is thrown if illegal argument or type conversion not possible
*/
public static Long parseLong(CamelContext camelContext, String text) throws Exception {
// ensure we support property placeholders
String s = camelContext.resolvePropertyPlaceholders(text);
if (s != null) {
try {
return camelContext.getTypeConverter().mandatoryConvertTo(Long.class, s);
} catch (NumberFormatException e) {
if (s.equals(text)) {
throw new IllegalArgumentException("Error parsing [" + s + "] as a Long.", e);
} else {
throw new IllegalArgumentException("Error parsing [" + s + "] from property " + text + " as a Long.", e);
}
}
}
return null;
}
/**
* Parses the given text and converts it to a Double and handling property placeholders as well
*
* @param camelContext the camel context
* @param text the text
* @return the double vale, or <tt>null</tt> if the text was <tt>null</tt>
* @throws Exception is thrown if illegal argument or type conversion not possible
*/
public static Double parseDouble(CamelContext camelContext, String text) throws Exception {
// ensure we support property placeholders
String s = camelContext.resolvePropertyPlaceholders(text);
if (s != null) {
try {
return camelContext.getTypeConverter().mandatoryConvertTo(Double.class, s);
} catch (NumberFormatException e) {
if (s.equals(text)) {
throw new IllegalArgumentException("Error parsing [" + s + "] as an Integer.", e);
} else {
throw new IllegalArgumentException("Error parsing [" + s + "] from property " + text + " as an Integer.", e);
}
}
}
return null;
}
/**
* Parses the given text and converts it to an Boolean and handling property placeholders as well
*
* @param camelContext the camel context
* @param text the text
* @return the boolean vale, or <tt>null</tt> if the text was <tt>null</tt>
* @throws Exception is thrown if illegal argument or type conversion not possible
*/
public static Boolean parseBoolean(CamelContext camelContext, String text) throws Exception {
// ensure we support property placeholders
String s = camelContext.resolvePropertyPlaceholders(text);
if (s != null) {
s = s.trim().toLowerCase();
if (s.equals("true") || s.equals("false")) {
return "true".equals(s) ? Boolean.TRUE : Boolean.FALSE;
} else {
if (s.equals(text)) {
throw new IllegalArgumentException("Error parsing [" + s + "] as a Boolean.");
} else {
throw new IllegalArgumentException("Error parsing [" + s + "] from property " + text + " as a Boolean.");
}
}
}
return null;
}
}