All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.softicar.platform.common.core.java.classpath.JavaClasspath Maven / Gradle / Ivy

Go to download

The SoftiCAR Platform is a lightweight, Java-based library to create interactive business web applications.

There is a newer version: 50.0.0
Show newest version
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;
	}
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy