package mil.nga.giat.geowave.core.store.spi; import java.util.Collections; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.ServiceLoader; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * These are the plugin index types that can be registered and used within * Geowave. */ public class DimensionalityTypeRegistry { private final static Logger LOGGER = LoggerFactory.getLogger(DimensionalityTypeRegistry.class); private static Map<String, DimensionalityTypeProviderSpi> registeredDimensionalityTypes = null; private static String defaultDimensionalityType; private static synchronized void initDimensionalityTypeRegistry() { registeredDimensionalityTypes = new HashMap<String, DimensionalityTypeProviderSpi>(); final Iterator<DimensionalityTypeProviderSpi> dimensionalityTypesProviders = ServiceLoader.load( DimensionalityTypeProviderSpi.class).iterator(); int currentDefaultPriority = Integer.MIN_VALUE; while (dimensionalityTypesProviders.hasNext()) { final DimensionalityTypeProviderSpi dimensionalityTypeProvider = dimensionalityTypesProviders.next(); if (registeredDimensionalityTypes.containsKey(dimensionalityTypeProvider.getDimensionalityTypeName())) { LOGGER.warn("Dimensionality type '" + dimensionalityTypeProvider.getDimensionalityTypeName() + "' already registered. Unable to register type provided by " + dimensionalityTypeProvider.getClass().getName()); } else { registeredDimensionalityTypes.put( dimensionalityTypeProvider.getDimensionalityTypeName(), dimensionalityTypeProvider); if (dimensionalityTypeProvider.getPriority() > currentDefaultPriority) { currentDefaultPriority = dimensionalityTypeProvider.getPriority(); defaultDimensionalityType = dimensionalityTypeProvider.getDimensionalityTypeName(); } } } } public static Map<String, DimensionalityTypeProviderSpi> getRegisteredDimensionalityTypes() { if (registeredDimensionalityTypes == null) { initDimensionalityTypeRegistry(); } return Collections.unmodifiableMap(registeredDimensionalityTypes); } public static DimensionalityTypeProviderSpi getSelectedDimensionalityProvider( final String dimensionalityType ) { if (registeredDimensionalityTypes == null) { initDimensionalityTypeRegistry(); } return registeredDimensionalityTypes.get(dimensionalityType); } public static String getDefaultDimensionalityType() { if (registeredDimensionalityTypes == null) { initDimensionalityTypeRegistry(); } if (defaultDimensionalityType == null) { return ""; } return defaultDimensionalityType; } }