/* * This code is licensed under the GPL 2.0 license, available at the root * application directory. */ package org.geoserver.config.hibernate; import java.io.Serializable; import java.util.Collection; import java.util.Iterator; import org.apache.log4j.Logger; import org.geoserver.catalog.MetadataLinkInfo; import org.geoserver.config.ContactInfo; import org.geoserver.config.GeoServerFactory; import org.geoserver.config.GeoServerInfo; import org.geoserver.config.JAIInfo; import org.geoserver.config.LoggingInfo; import org.geoserver.config.ServiceInfo; import org.geoserver.config.hibernate.beans.ContactInfoImplHb; import org.geoserver.config.hibernate.beans.GeoServerInfoImplHb; import org.geoserver.config.hibernate.beans.LoggingInfoImplHb; import org.geoserver.config.hibernate.beans.MetadataLinkInfoImplHb; import org.geoserver.config.impl.JAIInfoImpl; import org.geoserver.config.impl.ServiceInfoImpl; import org.springframework.beans.BeansException; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; public class HibGeoServerFactoryImpl implements GeoServerFactory, ApplicationContextAware, Serializable { /** * */ private static final long serialVersionUID = -2733985227400129195L; private final static Logger LOGGER = Logger.getLogger(HibGeoServerFactoryImpl.class); transient protected ApplicationContext applicationContext = null; public GeoServerInfo createGlobal() { return new GeoServerInfoImplHb(); } public ContactInfo createContact() { return new ContactInfoImplHb(); } public ServiceInfo createService() { return new ServiceInfoImpl(); } public <T> T create(Class<T> clazz) { if (applicationContext != null) { final Collection extensions = applicationContext.getBeansOfType( GeoServerFactory.Extension.class).values(); for (Iterator e = extensions.iterator(); e.hasNext();) { Extension extension = (Extension) e.next(); if (extension.canCreate(clazz)) { return extension.create(clazz); } } } LOGGER.warn("Not creating class " + clazz.getName()); return null; } public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { this.applicationContext = applicationContext; } public JAIInfo createJAI() { return new JAIInfoImpl(); } public MetadataLinkInfo createMetadataLink() { return new MetadataLinkInfoImplHb(); } public LoggingInfo createLogging() { return new LoggingInfoImplHb(); } }