package org.needle4j.configuration; import static org.needle4j.common.Preconditions.checkArgument; import java.util.HashSet; import java.util.Map; import java.util.Set; import java.util.StringTokenizer; import org.needle4j.reflection.ReflectionUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * Function to lookup classes. Expects FQN classnames separated by colon. */ class LookupCustomClasses { private final Logger logger = LoggerFactory.getLogger(LookupCustomClasses.class); private final Map<String, String> configurationProperties; public LookupCustomClasses(final Map<String, String> configurationProperties) { checkArgument(configurationProperties != null, "configurationProperties must not be null!"); this.configurationProperties = configurationProperties; } public <T> Set<Class<T>> lookup(final String key) { final String classesList = configurationProperties.containsKey(key) ? configurationProperties.get(key) : ""; final Set<Class<T>> result = new HashSet<Class<T>>(); final StringTokenizer tokenizer = new StringTokenizer(classesList, ","); String token = null; while (tokenizer.hasMoreElements()) { try { token = tokenizer.nextToken().trim(); if (token == null || "".equals(token)) { continue; } @SuppressWarnings("unchecked") final Class<T> clazz = (Class<T>) ReflectionUtil.forName(token); if (clazz != null) { result.add(clazz); } else { logger.warn("could not load class '{}'", token); } } catch (final Exception e) { logger.warn("could not load class '" + token + "'", e); } } return result; } }