com.softicar.platform.common.core.java.classpath.JavaClasspath Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of platform-common Show documentation
Show all versions of platform-common Show documentation
The SoftiCAR Platform is a lightweight, Java-based library to create interactive business web applications.
package com.softicar.platform.common.core.java.classpath;
import com.softicar.platform.common.core.java.classpath.finder.JavaClasspathFinder;
import java.io.File;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.function.Predicate;
import java.util.stream.Collectors;
/**
* Represents the class path of the JVM.
*
* @author Oliver Richers
*/
public class JavaClasspath {
private static final JavaClasspath INSTANCE = new JavaClasspath();
private final Collection roots;
private Predicate payloadFilter;
private JavaClasspath() {
this.roots = loadRoots();
this.payloadFilter = new JavaClasspathRootFilter();
}
public static JavaClasspath getInstance() {
return INSTANCE;
}
public Collection getAllRoots() {
return Collections.unmodifiableCollection(roots);
}
public synchronized Collection getPayloadRoots() {
return roots//
.stream()
.filter(payloadFilter)
.collect(Collectors.toList());
}
public synchronized void setPayloadFilter(Predicate payloadFilter) {
this.payloadFilter = payloadFilter;
}
private static Collection loadRoots() {
var roots = new ArrayList();
for (File classPathRoot: new JavaClasspathFinder().findAll()) {
if (classPathRoot.isDirectory()) {
roots.add(new JavaClasspathRootFolder(classPathRoot));
} else if (classPathRoot.getName().endsWith(".jar")) {
roots.add(new JavaClasspathJar(classPathRoot));
} else {
roots.add(new JavaClasspathUnknownRoot(classPathRoot));
}
}
return roots;
}
}