package com.intellij.lang.javascript.flex.actions.addAsLib;
import com.intellij.lang.javascript.flex.FlexBundle;
import com.intellij.lang.javascript.flex.FlexModuleType;
import com.intellij.openapi.actionSystem.AnAction;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.actionSystem.CommonDataKeys;
import com.intellij.openapi.actionSystem.PlatformDataKeys;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.module.ModuleManager;
import com.intellij.openapi.module.ModuleType;
import com.intellij.openapi.module.ModuleUtilCore;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.io.FileUtilRt;
import com.intellij.openapi.vfs.JarFileSystem;
import com.intellij.openapi.vfs.VirtualFile;
import org.jetbrains.annotations.NotNull;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class AddAsSwcLibAction extends AnAction {
@Override
public void actionPerformed(AnActionEvent e) {
final Project project = getEventProject(e);
if (project == null) return;
final List<VirtualFile> roots = getRoots(e);
if (!roots.isEmpty()) {
VirtualFile file = roots.get(0);
if (!file.isInLocalFileSystem()) {
file = JarFileSystem.getInstance().getLocalVirtualFileFor(file);
}
final Module module = file == null ? null : ModuleUtilCore.findModuleForFile(file, project);
new AddAsSwcLibDialog(project, module, roots).show();
}
}
@Override
public void update(AnActionEvent e) {
final Project project = getEventProject(e);
final boolean enabled = project != null && containsFlashModule(project) && !getRoots(e).isEmpty();
e.getPresentation().setText(FlexBundle.message("add.as.library.title") + "...");
e.getPresentation().setVisible(enabled);
e.getPresentation().setEnabled(enabled);
}
@NotNull
private static List<VirtualFile> getRoots(AnActionEvent e) {
final Project project = getEventProject(e);
final VirtualFile[] files = e.getData(CommonDataKeys.VIRTUAL_FILE_ARRAY);
if (project == null || files == null || files.length == 0) return Collections.emptyList();
//final ProjectFileIndex fileIndex = ProjectRootManager.getInstance(project).getFileIndex();
final List<VirtualFile> roots = new ArrayList<>();
for (VirtualFile file : files) {
if (file.isDirectory()) {
for (VirtualFile child : file.getChildren()) {
if (FileUtilRt.extensionEquals(child.getName(), "swc")) {
final VirtualFile jarRoot = JarFileSystem.getInstance().getJarRootForLocalFile(child);
if (jarRoot != null/* && !fileIndex.isInLibraryClasses(child)*/) {
roots.add(file);
}
}
}
}
else if (FileUtilRt.extensionEquals(file.getName(), "swc")) {
final VirtualFile root = JarFileSystem.getInstance().getJarRootForLocalFile(file);
if (root != null/* && !fileIndex.isInLibraryClasses(root)*/) {
roots.add(root);
}
}
}
return roots;
}
private static boolean containsFlashModule(final Project project) {
final Module[] modules = ModuleManager.getInstance(project).getModules();
for (Module module : modules) {
if (ModuleType.get(module) == FlexModuleType.getInstance()) {
return true;
}
}
return false;
}
}