package org.angularjs.cli;
import com.intellij.ide.projectView.actions.MarkRootActionBase;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.module.ModuleManager;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.roots.ContentEntry;
import com.intellij.openapi.roots.ModifiableRootModel;
import com.intellij.openapi.roots.ModuleRootManager;
import com.intellij.openapi.util.Ref;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.platform.DirectoryProjectConfigurator;
import org.jetbrains.annotations.NotNull;
/**
* @author Dennis.Ushakov
*/
public class AngularJSProjectConfigurator implements DirectoryProjectConfigurator {
public static final String ANGULAR_CLI_JSON = ".angular-cli.json";
@Override
public void configureProject(Project project, @NotNull VirtualFile baseDir, Ref<Module> moduleRef) {
final ModuleManager moduleManager = ModuleManager.getInstance(project);
final Module[] modules = moduleManager.getModules();
if (modules.length == 1) {
final VirtualFile cliJson = baseDir.findChild(ANGULAR_CLI_JSON);
final ModifiableRootModel model = ModuleRootManager.getInstance(modules[0]).getModifiableModel();
final ContentEntry entry = MarkRootActionBase.findContentEntry(model, baseDir);
if (entry != null && cliJson != null) {
excludeDefault(baseDir, entry);
ApplicationManager.getApplication().runWriteAction(() -> {
model.commit();
project.save();
});
} else {
model.dispose();
}
}
}
public static void excludeDefault(@NotNull VirtualFile baseDir, ContentEntry entry) {
entry.addExcludeFolder(baseDir.getUrl() + "/dist");
entry.addExcludeFolder(baseDir.getUrl() + "/tmp");
}
}