/*
* Copyright (c) 2013-2016 Chris Newland.
* Licensed under https://github.com/AdoptOpenJDK/jitwatch/blob/master/LICENSE-BSD
* Instructions: https://github.com/AdoptOpenJDK/jitwatch/wiki
*/
package org.adoptopenjdk.jitwatch.process.runtime;
import static org.adoptopenjdk.jitwatch.core.JITWatchConstants.VM_LANGUAGE_GROOVY;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FilenameFilter;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List;
import org.adoptopenjdk.jitwatch.logger.ILogListener;
import org.adoptopenjdk.jitwatch.process.AbstractProcess;
public class RuntimeGroovy extends AbstractProcess implements IRuntime
{
private Path runtimePath;
private Path groovyLibDir;
private final String RUNTIME_NAME = "java" + getExecutableSuffix();
public RuntimeGroovy(String languageHomeDir) throws FileNotFoundException
{
super();
// Groovy is executed on the current running Java VM
runtimePath = Paths.get(System.getProperty("java.home"), "bin", RUNTIME_NAME);
groovyLibDir = Paths.get(languageHomeDir, "../lib");
if (!runtimePath.toFile().exists())
{
throw new FileNotFoundException("Could not find " + RUNTIME_NAME);
}
runtimePath = runtimePath.normalize();
}
private void addGroovyJars(List<String> classpathEntries)
{
File libDir = groovyLibDir.toFile();
String[] jars = libDir.list(new FilenameFilter()
{
@Override
public boolean accept(File dir, String name)
{
return name.endsWith(".jar");
}
});
for (String jar : jars)
{
classpathEntries.add(new File(libDir, jar).getAbsolutePath());
}
}
@Override
public boolean execute(String className, List<String> classpathEntries, List<String> vmOptions, ILogListener logListener)
{
List<String> commands = new ArrayList<>();
commands.add(runtimePath.toString());
if (vmOptions.size() > 0)
{
commands.addAll(vmOptions);
}
commands.add("-cp");
addGroovyJars(classpathEntries);
commands.add(makeClassPath(classpathEntries));
commands.add(className);
return runCommands(commands, logListener);
}
@Override
public String getClassToExecute(File fileToRun)
{
String filename = fileToRun.getName();
return filename.substring(0, filename.length() - (VM_LANGUAGE_GROOVY.length() + 1));
}
@Override
public String getClassForTriView(File fileToRun)
{
return getClassToExecute(fileToRun);
}
}