1 package com.jetbrains.edu.coursecreator;
3 import com.intellij.ide.projectView.actions.MarkRootActionBase;
4 import com.intellij.openapi.actionSystem.AnActionEvent;
5 import com.intellij.openapi.actionSystem.Presentation;
6 import com.intellij.openapi.application.ApplicationManager;
7 import com.intellij.openapi.diagnostic.Logger;
8 import com.intellij.openapi.module.Module;
9 import com.intellij.openapi.module.ModuleUtilCore;
10 import com.intellij.openapi.project.Project;
11 import com.intellij.openapi.roots.ContentEntry;
12 import com.intellij.openapi.roots.ModifiableRootModel;
13 import com.intellij.openapi.roots.ModuleRootManager;
14 import com.intellij.openapi.vfs.VirtualFile;
15 import org.jetbrains.annotations.NotNull;
17 public class CCUtils {
18 private static final Logger LOG = Logger.getInstance(CCUtils.class.getName());
20 public static void markDirAsSourceRoot(@NotNull final VirtualFile dir, @NotNull final Project project) {
21 final Module module = ModuleUtilCore.findModuleForFile(dir, project);
23 LOG.info("Module for " + dir.getPath() + " was not found");
26 final ModifiableRootModel model = ModuleRootManager.getInstance(module).getModifiableModel();
27 ContentEntry entry = MarkRootActionBase.findContentEntry(model, dir);
29 LOG.info("Content entry for " + dir.getPath() + " was not found");
32 entry.addSourceFolder(dir, false);
33 ApplicationManager.getApplication().runWriteAction(new Runnable() {
37 module.getProject().save();
42 public static void enableAction(@NotNull final AnActionEvent event, boolean isEnable) {
43 final Presentation presentation = event.getPresentation();
44 presentation.setVisible(isEnable);
45 presentation.setEnabled(isEnable);
48 public static int getIndex(@NotNull final String fullName, @NotNull final String logicalName) {
49 if (!fullName.startsWith(logicalName)) {
50 throw new IllegalArgumentException();
53 return Integer.parseInt(fullName.substring(logicalName.length()));
55 catch (NumberFormatException e) {