69 lines
1.9 KiB
Java
69 lines
1.9 KiB
Java
package org.gcube.common.scope.impl;
|
|
|
|
import java.util.Set;
|
|
|
|
import org.gcube.common.scope.api.DefaultScopeProvider;
|
|
import org.gcube.common.scope.api.ScopeProvider;
|
|
import org.reflections.Reflections;
|
|
import org.reflections.scanners.SubTypesScanner;
|
|
import org.reflections.util.ClasspathHelper;
|
|
import org.reflections.util.ConfigurationBuilder;
|
|
import org.slf4j.Logger;
|
|
import org.slf4j.LoggerFactory;
|
|
|
|
/**
|
|
* Scans the classpath for a {@link ScopeProvider} implementation.
|
|
* <p>
|
|
* Returns a shared {@link DefaultScopeProvider} by default.
|
|
*
|
|
* @author Fabio Simeoni
|
|
* @see ScopeProvider
|
|
* @see ScopeProvider#instance
|
|
*/
|
|
public class ScopeProviderScanner {
|
|
|
|
private static Logger log = LoggerFactory.getLogger(ScopeProviderScanner.class);
|
|
|
|
/**
|
|
* Returns the configured provider.
|
|
* @return the provider
|
|
*/
|
|
public static ScopeProvider provider() {
|
|
try {
|
|
|
|
// we include urls specified in manifest files, which is required
|
|
// when we run tests in surefire's forked-mode
|
|
ConfigurationBuilder builder = new ConfigurationBuilder().setUrls(
|
|
ClasspathHelper.forManifest(Utils.urlsToScan())).setScanners(new SubTypesScanner());
|
|
|
|
Reflections reflections = new Reflections(builder);
|
|
|
|
Set<Class<? extends ScopeProvider>> impls =
|
|
reflections.getSubTypesOf(ScopeProvider.class);
|
|
|
|
ScopeProvider defaultProvider = null;
|
|
|
|
for (Class<? extends ScopeProvider> impl : impls)
|
|
if (impl.isAnnotationPresent(DefaultScopeProvider.class))
|
|
if (defaultProvider==null)
|
|
defaultProvider = impl.newInstance();
|
|
else
|
|
throw new Exception("mis-configured environment: detected multiple deafult providers among "+impls);
|
|
|
|
if (defaultProvider==null) {
|
|
log.info("using default scope provider");
|
|
defaultProvider = new DefaultScopeProviderImpl();
|
|
}
|
|
|
|
return defaultProvider;
|
|
|
|
|
|
} catch (Exception e) {
|
|
throw new RuntimeException("could not configure scope provider", e);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
}
|