package com.morcinek.android.codegenerator.plugin.utils; import com.google.common.collect.Lists; import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.openapi.actionSystem.LangDataKeys; import com.intellij.openapi.fileEditor.FileEditorManager; import com.intellij.openapi.project.Project; import com.intellij.openapi.roots.ModuleRootManager; import com.intellij.openapi.vfs.VirtualFile; import org.apache.velocity.util.StringUtils; import java.io.IOException; import java.util.List; /** * Copyright 2014 Tomasz Morcinek. All rights reserved. */ public class ProjectHelper { public boolean fileExists(Project project, String fileName, String folderPath) throws IOException { try { return project.getBaseDir().findFileByRelativePath(folderPath).findFileByRelativePath(fileName).exists(); } catch (NullPointerException e) { return false; } } public VirtualFile createOrFindFile(Project project, String fileName, String folderPath) throws IOException { VirtualFile folder = createFolderIfNotExist(project, folderPath); return folder.findOrCreateChildData(project, fileName); } public VirtualFile setFileContent(Project project, VirtualFile createdFile, String code) throws IOException { createdFile.setBinaryContent(code.getBytes()); openFileInEditor(project, createdFile); return createdFile; } private void openFileInEditor(Project project, VirtualFile fileWithGeneratedCode) { FileEditorManager.getInstance(project).openFile(fileWithGeneratedCode, true); } private VirtualFile createFolderIfNotExist(Project project, String folder) throws IOException { VirtualFile directory = project.getBaseDir(); String[] folders = folder.split("/"); for (String childFolder : folders) { VirtualFile childDirectory = directory.findChild(childFolder); if (childDirectory != null && childDirectory.isDirectory()) { directory = childDirectory; } else { directory = directory.createChildDirectory(project, childFolder); } } return directory; } public List<String> getSourceRootPathList(Project project, AnActionEvent event) { List<String> sourceRoots = Lists.newArrayList(); String projectPath = StringUtils.normalizePath(project.getBasePath()); for (VirtualFile virtualFile : getModuleRootManager(event).getSourceRoots(false)) { sourceRoots.add(StringUtils.normalizePath(virtualFile.getPath()).replace(projectPath, "")); } return sourceRoots; } private ModuleRootManager getModuleRootManager(AnActionEvent event) { return ModuleRootManager.getInstance(event.getData(LangDataKeys.MODULE)); } }