/* * This code is licensed under the GPL 2.0 license, available at the root * application directory. */ package org.geoserver.hibernate; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.geoserver.catalog.AttributeTypeInfo; import org.geoserver.catalog.AttributionInfo; import org.geoserver.catalog.Catalog; import org.geoserver.catalog.CoverageDimensionInfo; import org.geoserver.catalog.CoverageInfo; import org.geoserver.catalog.CoverageStoreInfo; import org.geoserver.catalog.DataStoreInfo; import org.geoserver.catalog.FeatureTypeInfo; import org.geoserver.catalog.LayerGroupInfo; import org.geoserver.catalog.LayerInfo; import org.geoserver.catalog.MetadataLinkInfo; import org.geoserver.catalog.NamespaceInfo; import org.geoserver.catalog.ResourceInfo; import org.geoserver.catalog.StoreInfo; import org.geoserver.catalog.StyleInfo; import org.geoserver.catalog.WorkspaceInfo; import org.geoserver.catalog.hibernate.HibCatalogImpl; import org.geoserver.catalog.hibernate.beans.LayerGroupInfoImplHb; import org.geoserver.catalog.hibernate.beans.LayerInfoImplHb; import org.geoserver.catalog.impl.AttributeTypeInfoImpl; import org.geoserver.catalog.impl.AttributionInfoImpl; import org.geoserver.catalog.impl.CoverageDimensionImpl; import org.geoserver.catalog.impl.CoverageInfoImpl; import org.geoserver.catalog.impl.CoverageStoreInfoImpl; import org.geoserver.catalog.impl.DataStoreInfoImpl; import org.geoserver.catalog.impl.FeatureTypeInfoImpl; import org.geoserver.catalog.impl.NamespaceInfoImpl; import org.geoserver.catalog.impl.ResourceInfoImpl; import org.geoserver.catalog.impl.StoreInfoImpl; import org.geoserver.catalog.impl.StyleInfoImpl; import org.geoserver.catalog.impl.WorkspaceInfoImpl; import org.geoserver.config.ContactInfo; 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 com.thoughtworks.xstream.XStream; import com.thoughtworks.xstream.converters.Converter; import com.thoughtworks.xstream.converters.collections.CollectionConverter; /** * Provides implementation mapping for GeoServer interfaces. * Mainly used in XStream outputting. * * This is a WORKEROUND * Will be removed in 2.1 * * @author ETj <etj at geo-solutions.it> */ public class HibImplementationMapper { private static Map<Class, Class> impl = new HashMap<Class, Class>(); // private static List<Converter> converters = new ArrayList<Converter>(); static { populateImpl(); // populateConverters(); } public Class getImpl(Class clazz) { return impl.get(clazz); } public static Map<String, Converter> getLocalConverters() { return new HashMap<String, Converter>(); } public List<Converter> getConverters(XStream xs) { List<Converter> converters = new ArrayList<Converter>(); converters.add(new HibListConverter(xs)); return converters; } private static void populateImpl() { impl.put(GeoServerInfo.class, GeoServerInfoImplHb.class); impl.put(LoggingInfo.class, LoggingInfoImplHb.class); impl.put(JAIInfo.class, JAIInfoImpl.class); impl.put(Catalog.class, HibCatalogImpl.class); impl.put(NamespaceInfo.class, NamespaceInfoImpl.class); impl.put(WorkspaceInfo.class, WorkspaceInfoImpl.class); impl.put(DataStoreInfo.class, DataStoreInfoImpl.class); impl.put(CoverageStoreInfo.class, CoverageStoreInfoImpl.class); impl.put(StyleInfo.class, StyleInfoImpl.class); impl.put(FeatureTypeInfo.class, FeatureTypeInfoImpl.class); impl.put(CoverageInfo.class, CoverageInfoImpl.class); impl.put(CoverageDimensionInfo.class, CoverageDimensionImpl.class); impl.put(MetadataLinkInfo.class, MetadataLinkInfoImplHb.class); impl.put(AttributeTypeInfo.class, AttributeTypeInfoImpl.class); impl.put(LayerInfo.class, LayerInfoImplHb.class); impl.put(LayerGroupInfo.class, LayerGroupInfoImplHb.class); impl.put(AttributionInfo.class, AttributionInfoImpl.class); impl.put(ContactInfo.class, ContactInfoImplHb.class); impl.put(ResourceInfo.class, ResourceInfoImpl.class); impl.put(ServiceInfo.class, ServiceInfoImpl.class); impl.put(StoreInfo.class, StoreInfoImpl.class); } // private static void populateConverters() { // converters.add(new HibListConverter("hibllistconverter")); // } } /** * Loop through the items of an hibernate {@link org.hibernate.collection.PersistentList}. * If not handled by a Converter, XStream will try to extract its internal data. * * @author ETj <etj at geo-solutions.it> */ class HibListConverter extends CollectionConverter implements Converter { public HibListConverter( XStream xs ) { super(xs.getMapper()); } @Override public boolean canConvert(Class type) { return type.equals(org.hibernate.collection.PersistentList.class); } }