package com.jetbrains.lang.dart.projectWizard; import com.intellij.ide.highlighter.HtmlFileType; import com.intellij.openapi.module.Module; import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.vfs.LocalFileSystem; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.util.containers.ContainerUtil; import com.jetbrains.lang.dart.DartFileType; import com.jetbrains.lang.dart.util.PubspecYamlUtil; import org.jetbrains.annotations.NotNull; import java.io.IOException; import java.util.ArrayList; import java.util.Collection; import java.util.List; class StagehandTemplate extends DartProjectTemplate { @NotNull private final Stagehand myStagehand; @NotNull private final Stagehand.StagehandDescriptor myTemplate; public StagehandTemplate(@NotNull final Stagehand stagehand, @NotNull final Stagehand.StagehandDescriptor template) { super(getLabel(template), template.myDescription); myStagehand = stagehand; myTemplate = template; } private static String getLabel(final Stagehand.StagehandDescriptor descriptor) { return !StringUtil.isEmptyOrSpaces(descriptor.myLabel) ? descriptor.myLabel : prettify(descriptor.myId); } @Override public Collection<VirtualFile> generateProject(@NotNull final String sdkRoot, @NotNull final Module module, @NotNull final VirtualFile baseDir) throws IOException { try { myStagehand.generateInto(sdkRoot, baseDir, myTemplate.myId); } catch (Stagehand.StagehandException e) { throw new IOException(e); } final List<VirtualFile> files = new ArrayList<>(); final VirtualFile pubspec = LocalFileSystem.getInstance().refreshAndFindFileByPath(baseDir.getPath() + "/" + PubspecYamlUtil.PUBSPEC_YAML); ContainerUtil.addIfNotNull(files, pubspec); final VirtualFile mainFile = myTemplate.myEntrypoint.isEmpty() ? null : LocalFileSystem.getInstance() .refreshAndFindFileByPath(baseDir.getPath() + "/" + myTemplate.myEntrypoint); if (mainFile != null && mainFile.getName().equals("index.html")) { ContainerUtil.addIfNotNull(files, mainFile.getParent().findChild("main.dart")); } ContainerUtil.addIfNotNull(files, mainFile); if (!myTemplate.myEntrypoint.isEmpty() && mainFile != null) { if (myTemplate.myEntrypoint.startsWith("bin/") && mainFile.getFileType() == DartFileType.INSTANCE) { createCmdLineRunConfiguration(module, mainFile); } if (myTemplate.myEntrypoint.startsWith("web/") && mainFile.getFileType() == HtmlFileType.INSTANCE) { createWebRunConfiguration(module, mainFile); } } return files; } private static String prettify(@NotNull String name) { // consoleapp -> Console App name = StringUtil.capitalize(name); if (name.endsWith("app")) { name = name.substring(0, name.length() - "app".length()) + " App"; } return name; } }