sascha@69: package de.intevation.artifactdatabase; sascha@69: sascha@69: import org.w3c.dom.Document; sascha@69: import org.w3c.dom.Node; sascha@69: sascha@69: import de.intevation.artifacts.ServiceFactory; sascha@69: import de.intevation.artifacts.Service; sascha@69: sascha@69: import org.apache.log4j.Logger; sascha@69: sascha@69: /** sascha@69: * @author Sascha L. Teichmann (sascha.teichmann@intevation.de) sascha@69: */ sascha@69: public class DefaultServiceFactory sascha@69: implements ServiceFactory sascha@69: { sascha@69: private static Logger logger = sascha@69: Logger.getLogger(DefaultServiceFactory.class); sascha@69: sascha@69: public static final String XPATH_NAME = "@name"; sascha@69: public static final String XPATH_DESCRIPTION = "@description"; sascha@69: public static final String XPATH_SERVICE = "@service"; sascha@69: sascha@69: public static final String DEFAULT_DESCRIPTION = sascha@69: "No description available"; sascha@69: sascha@69: public static final String DEFAULT_SERVICE = sascha@69: "de.intevation.artifactdatabase.DefaultService"; sascha@69: sascha@69: protected String name; sascha@69: sascha@69: protected String description; sascha@69: sascha@69: protected Class serviceClass; sascha@69: sascha@69: public DefaultServiceFactory() { sascha@69: } sascha@69: sascha@69: public String getName() { sascha@69: return name; sascha@69: } sascha@69: sascha@69: public String getDescription() { sascha@69: return description; sascha@69: } sascha@69: sascha@69: public Service createService(Object globalContext) { sascha@69: try { sascha@69: Service service = (Service)serviceClass.newInstance(); sascha@69: sascha@69: service.setup(this, globalContext); sascha@69: sascha@69: return service; sascha@69: } sascha@69: catch (InstantiationException ie) { sascha@69: logger.error(ie.getLocalizedMessage(), ie); sascha@69: } sascha@69: catch (IllegalAccessException iae) { sascha@69: logger.error(iae.getLocalizedMessage(), iae); sascha@69: } sascha@69: catch (ClassCastException cce) { sascha@69: logger.error(cce.getLocalizedMessage(), cce); sascha@69: } sascha@69: sascha@69: return null; sascha@69: } sascha@69: sascha@69: public void setup(Document config, Node factoryNode) { sascha@69: sascha@69: description = Config.getStringXPath( sascha@69: factoryNode, XPATH_DESCRIPTION, DEFAULT_DESCRIPTION); sascha@69: sascha@69: name = Config.getStringXPath( sascha@69: factoryNode, XPATH_NAME, toString()); sascha@69: sascha@69: String service = Config.getStringXPath( sascha@69: factoryNode, XPATH_SERVICE, DEFAULT_SERVICE); sascha@69: sascha@69: try { sascha@69: serviceClass = Class.forName(service); sascha@69: } sascha@69: catch (ClassNotFoundException cnfe) { sascha@69: logger.error(cnfe.getLocalizedMessage(), cnfe); sascha@69: } sascha@69: sascha@69: if (serviceClass == null) { sascha@69: serviceClass = DefaultService.class; sascha@69: } sascha@69: } sascha@69: } sascha@69: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :