use of dev.jbang.util.TemplateEngine in project jbang by jbangdev.
the class Edit method renderTemplate.
private void renderTemplate(TemplateEngine engine, List<String> collectDependencies, String fullclassName, String baseName, List<String> resolvedDependencies, List<MavenRepo> repositories, String templateName, List<String> userParams, Path destination) throws IOException {
Template template = engine.getTemplate(templateName);
if (template == null)
throw new ExitException(EXIT_INVALID_INPUT, "Could not locate template named: '" + templateName + "'");
String result = template.data("repositories", repositories.stream().map(MavenRepo::getUrl).filter(s -> !"".equals(s))).data("dependencies", collectDependencies).data("gradledependencies", gradleify(collectDependencies)).data("baseName", baseName).data("fullClassName", fullclassName).data("classpath", resolvedDependencies.stream().filter(t -> !t.isEmpty()).collect(Collectors.toList())).data("userParams", String.join(" ", userParams)).data("cwd", System.getProperty("user.dir")).render();
Util.writeString(destination, result);
}
use of dev.jbang.util.TemplateEngine in project jbang by jbangdev.
the class Edit method createProjectForEdit.
/**
* Create Project to use for editing *
*/
File createProjectForEdit(SourceSet ss, RunContext ctx, boolean reload) throws IOException {
File originalFile = ss.getResourceRef().getFile();
List<String> dependencies = ss.getDependencies();
String cp = ss.getClassPath().getClassPath();
List<String> resolvedDependencies = Arrays.asList(cp.split(CP_SEPARATOR));
File baseDir = Settings.getCacheDir(Cache.CacheClass.projects).toFile();
String name = originalFile.getName();
name = Util.unkebabify(name);
File tmpProjectDir = new File(baseDir, name + "_jbang_" + Util.getStableID(originalFile.getAbsolutePath()));
tmpProjectDir.mkdirs();
tmpProjectDir = new File(tmpProjectDir, stripPrefix(name));
tmpProjectDir.mkdirs();
File srcDir = new File(tmpProjectDir, "src");
srcDir.mkdir();
Path srcFile = srcDir.toPath().resolve(name);
Util.createLink(srcFile, originalFile.toPath());
for (Source source : ss.getSources()) {
File sfile = null;
if (source.getJavaPackage().isPresent()) {
File packageDir = new File(srcDir, source.getJavaPackage().get().replace(".", File.separator));
packageDir.mkdirs();
sfile = new File(packageDir, source.getResourceRef().getFile().getName());
} else {
sfile = new File(srcDir, source.getResourceRef().getFile().getName());
}
Path destFile = source.getResourceRef().getFile().toPath().toAbsolutePath();
Util.createLink(sfile.toPath(), destFile);
}
for (RefTarget ref : ss.getResources()) {
File target = ref.to(srcDir.toPath()).toFile();
target.getParentFile().mkdirs();
Util.createLink(target.toPath(), ref.getSource().getFile().toPath().toAbsolutePath());
}
// create build gradle
Optional<String> packageName = Util.getSourcePackage(new String(Files.readAllBytes(srcFile), Charset.defaultCharset()));
String baseName = Util.getBaseName(name);
String fullClassName;
fullClassName = packageName.map(s -> s + "." + baseName).orElse(baseName);
String templateName = "build.qute.gradle";
Path destination = new File(tmpProjectDir, "build.gradle").toPath();
TemplateEngine engine = TemplateEngine.instance();
// both collectDependencies and repositories are manipulated by
// resolveDependencies
List<MavenRepo> repositories = ss.getRepositories();
if (repositories.isEmpty()) {
ss.addRepository(DependencyUtil.toMavenRepo("mavencentral"));
}
// Turn any URL dependencies into regular GAV coordinates
List<String> depIds = dependencies.stream().map(JitPackUtil::ensureGAV).collect(Collectors.toList());
// And if we encountered URLs let's make sure the JitPack repo is available
if (!depIds.equals(dependencies) && repositories.stream().noneMatch(r -> DependencyUtil.REPO_JITPACK.equals(r.getUrl()))) {
ss.addRepository(DependencyUtil.toMavenRepo(DependencyUtil.ALIAS_JITPACK));
}
renderTemplate(engine, depIds, fullClassName, baseName, resolvedDependencies, repositories, templateName, ctx.getArguments(), destination);
// setup eclipse
templateName = ".qute.classpath";
destination = new File(tmpProjectDir, ".classpath").toPath();
renderTemplate(engine, dependencies, fullClassName, baseName, resolvedDependencies, repositories, templateName, ctx.getArguments(), destination);
templateName = ".qute.project";
destination = new File(tmpProjectDir, ".project").toPath();
renderTemplate(engine, dependencies, fullClassName, baseName, resolvedDependencies, repositories, templateName, ctx.getArguments(), destination);
templateName = "main.qute.launch";
destination = new File(tmpProjectDir, ".eclipse/" + baseName + ".launch").toPath();
destination.toFile().getParentFile().mkdirs();
renderTemplate(engine, dependencies, fullClassName, baseName, resolvedDependencies, repositories, templateName, ctx.getArguments(), destination);
templateName = "main-port-4004.qute.launch";
destination = new File(tmpProjectDir, ".eclipse/" + baseName + "-port-4004.launch").toPath();
renderTemplate(engine, dependencies, fullClassName, baseName, resolvedDependencies, repositories, templateName, ctx.getArguments(), destination);
// setup vscode
templateName = "launch.qute.json";
destination = new File(tmpProjectDir, ".vscode/launch.json").toPath();
if (isNeeded(reload, destination)) {
destination.toFile().getParentFile().mkdirs();
renderTemplate(engine, dependencies, fullClassName, baseName, resolvedDependencies, repositories, templateName, ctx.getArguments(), destination);
}
// setup vscode
templateName = "README.qute.md";
destination = new File(tmpProjectDir, "README.md").toPath();
if (isNeeded(reload, destination)) {
destination.toFile().getParentFile().mkdirs();
renderTemplate(engine, dependencies, fullClassName, baseName, resolvedDependencies, repositories, templateName, ctx.getArguments(), destination);
}
templateName = "settings.qute.json";
destination = new File(tmpProjectDir, ".vscode/settings.json").toPath();
if (isNeeded(reload, destination)) {
destination.toFile().getParentFile().mkdirs();
renderTemplate(engine, dependencies, fullClassName, baseName, resolvedDependencies, repositories, templateName, ctx.getArguments(), destination);
}
return tmpProjectDir;
}
Aggregations