package com.bansheeproject.engine.converters;
import org.apache.commons.discovery.tools.DiscoverClass;
import com.bansheeproject.log.BansheeLogFactory;
import com.bansheeproject.log.BansheeLogger;
/**
* An abstract factory for {@link ObjectConverter}.
*
* @author Alexandre Saudate
* @since 1.0
*/
public abstract class ObjectConverterFactory {
public static final String DEFAULT_FACTORY = JAXBConverterFactory.class.getName();
public static final String SYSTEM_PROPERTY = ObjectConverterFactory.class.getCanonicalName();
public abstract ObjectConverter newObjectConverter();
private static BansheeLogger logger = BansheeLogFactory.getDefaultLogger(ObjectConverterFactory.class);
public static ObjectConverterFactory newInstance() {
logger.debug("Attempting to initialize commons-discovery discoverer to find instances of ObjectConverterFactory");
DiscoverClass discoverer = new DiscoverClass();
ObjectConverterFactory instance;
try {
instance = (ObjectConverterFactory)discoverer.newInstance(ObjectConverterFactory.class, System.getProperties(), ObjectConverterFactory.DEFAULT_FACTORY);
logger.debug(new StringBuilder ("Instance found: ").append(instance.getClass()));
} catch (Exception e) {
logger.warn("Could not initialize any instance of ObjectConverterFactory");
logger.warn("Exception data: ");
logger.warn(e.getMessage());
throw new RuntimeException("An exception ocurred when looking for an object converter factory.", e);
}
return instance;
}
}