package knorxx.framework.generator.library; import com.google.common.base.Optional; import java.util.Set; /** * * @author sj */ public abstract class LibraryDetector { private Optional<LibraryDetector> nextDetector = Optional.absent(); public LibraryDetector() { } public LibraryDetector(LibraryDetector nextDetector) { this.nextDetector = Optional.of(nextDetector); } public final LibraryUrls detect(Set<String> javaClassNames) { LibraryUrls libraryUrls = detectInternal(javaClassNames); if (nextDetector.isPresent()) { libraryUrls.addAll(nextDetector.get().detect(javaClassNames)); } return libraryUrls; } protected abstract LibraryUrls detectInternal(Set<String> javaClassNames); public static class None extends LibraryDetector { @Override protected LibraryUrls detectInternal(Set<String> javaClassNames) { return new LibraryUrls(); } } }