package org.mongodb.morphia.ext.entityscanner; import com.google.common.base.Predicate; import com.google.common.base.Predicates; import org.mongodb.morphia.Morphia; import org.mongodb.morphia.annotations.Entity; import org.mongodb.morphia.utils.Assert; import org.reflections.Reflections; import org.reflections.scanners.SubTypesScanner; import org.reflections.scanners.TypeAnnotationsScanner; import org.reflections.scanners.TypeElementsScanner; import org.reflections.util.ClasspathHelper; import org.reflections.util.ConfigurationBuilder; import java.net.URL; import java.util.ArrayList; import java.util.HashSet; import java.util.Iterator; import java.util.Set; /** * Provides a scanner to find entities according to a given predicate * * @author us@thomas-daily.de * * @deprecated this class is vestigial and incomplete. no replacement is planned. */ @Deprecated public class EntityScanner { /** * Creates an EntityScanner using the given Morphia instance with no predicate defined. * * @param m the Morphia instance */ public EntityScanner(final Morphia m) { this(m, null); } /** * Creates an EntityScanner using the given Morphia instance with the given predicate. * * @param m the Morphia instance * @param predicate the Predicate to use when determining which classes to map. */ public EntityScanner(final Morphia m, final Predicate<String> predicate) { Predicate<String> localPredicate = predicate; if (localPredicate == null) { localPredicate = Predicates.alwaysTrue(); } Assert.parametersNotNull("m, predicate", m, localPredicate); final ConfigurationBuilder conf = new ConfigurationBuilder(); conf.setScanners(new TypeElementsScanner(), new TypeAnnotationsScanner()); final Set<URL> s = new HashSet<URL>(); s.addAll(ClasspathHelper.forClassLoader()); s.addAll(ClasspathHelper.forJavaClassPath()); final Iterator<URL> iterator = s.iterator(); while (iterator.hasNext()) { final URL url = iterator.next(); if (url.getPath().endsWith("jnilib")) { iterator.remove(); } } conf.setUrls(new ArrayList<URL>(s)); conf.filterInputsBy(localPredicate); conf.addScanners(new SubTypesScanner()); final Reflections r = new Reflections(conf); final Set<Class<?>> entities = r.getTypesAnnotatedWith(Entity.class); for (final Class<?> c : entities) { m.map(c); } } }