package org.jboss.windup.graph;
import java.io.File;
import java.nio.file.Path;
import org.apache.commons.io.FileUtils;
import org.apache.commons.lang3.RandomStringUtils;
import org.jboss.forge.furnace.Furnace;
import org.jboss.forge.furnace.container.simple.lifecycle.SimpleContainer;
import org.jboss.windup.util.ExecutionStatistics;
public class GraphContextFactoryImpl implements GraphContextFactory
{
private GraphApiCompositeClassLoaderProvider graphApiCompositeClassLoaderProvider;
private Furnace furnace;
private GraphTypeManager graphTypeManager;
private Furnace getFurnace()
{
if (furnace == null)
this.furnace = SimpleContainer.getFurnace(GraphContextFactory.class.getClassLoader());
return this.furnace;
}
private GraphApiCompositeClassLoaderProvider getGraphApiCompositeClassLoaderProvider()
{
if (this.graphApiCompositeClassLoaderProvider == null)
this.graphApiCompositeClassLoaderProvider = getFurnace().getAddonRegistry().getServices(GraphApiCompositeClassLoaderProvider.class)
.get();
return this.graphApiCompositeClassLoaderProvider;
}
private GraphTypeManager getGraphTypeManager()
{
if (this.graphTypeManager == null)
this.graphTypeManager = getFurnace().getAddonRegistry().getServices(GraphTypeManager.class).get();
return this.graphTypeManager;
}
@Override
public GraphContext create()
{
return ExecutionStatistics.performBenchmarked(GraphContextFactory.class.getName() + ".create(Path)", () ->
new GraphContextImpl(
getFurnace(),
getGraphTypeManager(),
getGraphApiCompositeClassLoaderProvider(),
getTempGraphDirectory()).create()
);
}
@Override
public GraphContext create(Path graphDir)
{
return ExecutionStatistics.performBenchmarked(GraphContextFactory.class.getName() + ".create(Path)", () ->
new GraphContextImpl(
getFurnace(),
getGraphTypeManager(),
getGraphApiCompositeClassLoaderProvider(),
graphDir).create()
);
}
@Override
public GraphContext load(Path graphDir)
{
return new GraphContextImpl(
getFurnace(),
getGraphTypeManager(),
getGraphApiCompositeClassLoaderProvider(),
graphDir).load();
}
private Path getTempGraphDirectory()
{
return new File(FileUtils.getTempDirectory(), "windupgraph_" + RandomStringUtils.randomAlphanumeric(6))
.toPath();
}
}