/* (c) 2014 Open Source Geospatial Foundation - all rights reserved * (c) 2001 - 2013 OpenPlans * This code is licensed under the GPL 2.0 license, available at the root * application directory. */ package org.geoserver.catalog.impl; import org.geoserver.catalog.CatalogInfo; import org.geoserver.catalog.CoverageInfo; import org.geoserver.catalog.CoverageStoreInfo; import org.geoserver.catalog.DataStoreInfo; import org.geoserver.catalog.FeatureTypeInfo; import org.geoserver.catalog.Info; import org.geoserver.catalog.LayerGroupInfo; import org.geoserver.catalog.LayerInfo; import org.geoserver.catalog.MapInfo; import org.geoserver.catalog.NamespaceInfo; import org.geoserver.catalog.PublishedInfo; import org.geoserver.catalog.ResourceInfo; import org.geoserver.catalog.StoreInfo; import org.geoserver.catalog.StyleInfo; import org.geoserver.catalog.WMSLayerInfo; import org.geoserver.catalog.WMSStoreInfo; import org.geoserver.catalog.WorkspaceInfo; import org.geoserver.config.GeoServerInfo; import org.geoserver.config.LoggingInfo; import org.geoserver.config.ServiceInfo; import org.geoserver.config.SettingsInfo; import org.geoserver.config.impl.GeoServerInfoImpl; import org.geoserver.config.impl.LoggingInfoImpl; import org.geoserver.config.impl.ServiceInfoImpl; import org.geoserver.config.impl.SettingsInfoImpl; public enum ClassMappings { // // catalog // WORKSPACE { @Override public Class getInterface() { return WorkspaceInfo.class; } @Override public Class getImpl() { return WorkspaceInfoImpl.class; }; }, NAMESPACE { @Override public Class getInterface() { return NamespaceInfo.class; } @Override public Class getImpl() { return NamespaceInfoImpl.class; }; }, // stores, order matters DATASTORE { @Override public Class getInterface() { return DataStoreInfo.class; } @Override public Class getImpl() { return DataStoreInfoImpl.class; }; }, COVERAGESTORE { @Override public Class getInterface() { return CoverageStoreInfo.class; } @Override public Class getImpl() { return CoverageStoreInfoImpl.class; }; }, WMSSTORE { @Override public Class getInterface() { return WMSStoreInfo.class; } @Override public Class getImpl() { return WMSStoreInfoImpl.class; }; }, STORE { @Override public Class getInterface() { return StoreInfo.class; } @Override public Class getImpl() { return StoreInfoImpl.class; }; @Override public Class<? extends CatalogInfo>[] concreteInterfaces() { return new Class[] { CoverageStoreInfo.class, DataStoreInfo.class, WMSStoreInfo.class }; } }, // resources, order matters FEATURETYPE { @Override public Class getInterface() { return FeatureTypeInfo.class; } @Override public Class getImpl() { return FeatureTypeInfoImpl.class; }; }, COVERAGE { @Override public Class getInterface() { return CoverageInfo.class; } @Override public Class getImpl() { return CoverageInfoImpl.class; }; }, WMSLAYER { @Override public Class getInterface() { return WMSLayerInfo.class; } @Override public Class getImpl() { return WMSLayerInfoImpl.class; }; }, RESOURCE { @Override public Class getInterface() { return ResourceInfo.class; } @Override public Class getImpl() { return ResourceInfoImpl.class; }; @Override public Class<? extends CatalogInfo>[] concreteInterfaces() { return new Class[] { CoverageInfo.class, FeatureTypeInfo.class, WMSLayerInfo.class }; } }, PUBLISHED { @Override public Class getInterface() { return PublishedInfo.class; } @Override public Class getImpl() { return null; }; @Override public Class<? extends CatalogInfo>[] concreteInterfaces() { return new Class[] { LayerInfo.class, LayerGroupInfo.class }; } }, LAYER { @Override public Class getInterface() { return LayerInfo.class; } @Override public Class getImpl() { return LayerInfoImpl.class; }; }, LAYERGROUP { @Override public Class getInterface() { return LayerGroupInfo.class; } @Override public Class getImpl() { return LayerGroupInfoImpl.class; }; }, MAP { @Override public Class getInterface() { return MapInfo.class; } @Override public Class getImpl() { return MapInfoImpl.class; }; }, STYLE { @Override public Class getInterface() { return StyleInfo.class; } @Override public Class getImpl() { return StyleInfoImpl.class; }; }, // // config // GLOBAL { @Override public Class getInterface() { return GeoServerInfo.class; } @Override public Class getImpl() { return GeoServerInfoImpl.class; }; }, LOGGING { @Override public Class getInterface() { return LoggingInfo.class; } @Override public Class getImpl() { return LoggingInfoImpl.class; }; }, SETTINGS { @Override public Class getInterface() { return SettingsInfo.class; } @Override public Class getImpl() { return SettingsInfoImpl.class; }; }, // // services, order matters // WMS { // @Override public Class getInterface() { return WMSInfo.class; } // @Override public Class getImpl() { return WMSInfoImpl.class; }; // }, // // WFS { // @Override public Class getInterface() { return WFSInfo.class; } // @Override public Class getImpl() { return WFSInfoImpl.class; }; // }, // // WCS { // @Override public Class getInterface() { return WCSInfo.class; } // @Override public Class getImpl() { return WCSInfoImpl.class; }; // }, SERVICE { @Override public Class getInterface() { return ServiceInfo.class; } @Override public Class getImpl() { return ServiceInfoImpl.class; }; }; public abstract <T> Class<T> getInterface(); public abstract Class<? extends Info> getImpl(); @SuppressWarnings({ "rawtypes", "unchecked" }) public Class<? extends Info>[] concreteInterfaces() { Class interf = getInterface(); return new Class[] { interf }; } public static ClassMappings fromInterface(Class<? extends Info> interfce) { if (ServiceInfo.class.isAssignableFrom(interfce)) { return SERVICE; } for (ClassMappings cm : values()) { if (interfce.equals(cm.getInterface())) { return cm; } } return null; } public static ClassMappings fromImpl(Class<?> clazz) { if (ServiceInfo.class.isAssignableFrom(clazz)) { return SERVICE; } for (ClassMappings cm : values()) { if (clazz == cm.getImpl()) return cm; } return null; } }