Search in sources :

Example 1 with N4jsLibsAccess

use of org.eclipse.n4js.cli.helper.N4jsLibsAccess in project n4js by eclipse.

the class ConvertedIdeTest method importProject.

/**
 * Imports a project into the running JUnit test workspace. Usage:
 *
 * <pre>
 * IProject project = ProjectTestsUtils.importProject(new File(&quot;probands&quot;), &quot;TestProject&quot;, n4jsLibs);
 * </pre>
 *
 * @param probandsFolder
 *            the parent folder in which the test project is found
 * @param projectName
 *            the name of the test project, must be folder contained in probandsFolder
 * @param n4jsLibs
 *            names of N4JS libraries to install from the local <code>n4js-libs</code> top-level folder (see
 *            {@link N4jsLibsAccess#installN4jsLibs(Path, boolean, boolean, boolean, N4JSPackageName...)}).
 * @return the imported project
 * @see <a href=
 *      "http://stackoverflow.com/questions/12484128/how-do-i-import-an-eclipse-project-from-a-zip-file-programmatically">
 *      stackoverflow: from zip</a>
 */
protected File importProject(File probandsFolder, N4JSPackageName projectName, Collection<N4JSPackageName> n4jsLibs) {
    if (!testWorkspaceManager.isCreated()) {
        throw new IllegalStateException("the test workspace is not yet created");
    }
    Path projectNameAsRelativePath = projectName.getProjectNameAsRelativePath();
    File projectSourceFolder = probandsFolder.toPath().resolve(projectNameAsRelativePath).toFile();
    if (!projectSourceFolder.exists()) {
        throw new IllegalArgumentException("proband not found in " + projectSourceFolder);
    }
    File projectFolder = projectName.getLocation(getProjectLocation().toPath());
    installN4jsLibs(projectName, n4jsLibs.toArray(new N4JSPackageName[0]));
    // copy project into workspace
    // (need to do that manually to properly handle NPM scopes, because the Eclipse import functionality won't put
    // those projects into an "@myScope" subfolder)
    final List<Path> filesCopied = new ArrayList<>();
    try {
        projectFolder.mkdirs();
        FileCopier.copy(projectSourceFolder.toPath(), projectFolder.toPath(), path -> filesCopied.add(path));
    } catch (IOException e) {
        throw new WrappedException("exception while copying project into workspace", e);
    }
    // create symbolic link in node_modules folder of root project (if necessary)
    if (isYarnWorkspace()) {
        try {
            File nodeModulesFolder = getNodeModulesFolder(projectName);
            Path from = nodeModulesFolder.toPath().resolve(projectNameAsRelativePath);
            Files.createDirectories(from.getParent());
            Files.createSymbolicLink(from, projectFolder.toPath());
        } catch (IOException e) {
            throw new WrappedException("exception while creating symbolic link from node_modules folder to project folder", e);
        }
    }
    // notify LSP server
    DidChangeWatchedFilesParams params = new DidChangeWatchedFilesParams(FluentIterable.from(filesCopied).transform(path -> new FileURI(path.toFile())).transform(fileURI -> new FileEvent(fileURI.toString(), FileChangeType.Created)).toList());
    languageServer.didChangeWatchedFiles(params);
    joinServerRequests();
    return projectFolder;
}
Also used : Path(java.nio.file.Path) UserDataMapper(org.eclipse.n4js.resource.UserDataMapper) ProcessResult(org.eclipse.n4js.cli.helper.ProcessResult) IssueCodes(org.eclipse.n4js.validation.IssueCodes) CliTools(org.eclipse.n4js.cli.helper.CliTools) FileTime(java.nio.file.attribute.FileTime) AbstractIdeTest(org.eclipse.n4js.ide.tests.helper.server.AbstractIdeTest) Diagnostic(org.eclipse.lsp4j.Diagnostic) Multimap(com.google.common.collect.Multimap) N4JSPackageName(org.eclipse.n4js.workspace.utils.N4JSPackageName) IResourceDescription(org.eclipse.xtext.resource.IResourceDescription) TestWorkspaceManager(org.eclipse.n4js.ide.tests.helper.server.TestWorkspaceManager) URIUtils(org.eclipse.n4js.utils.URIUtils) ArrayList(java.util.ArrayList) FileEvent(org.eclipse.lsp4j.FileEvent) HashSet(java.util.HashSet) FileChangeType(org.eclipse.lsp4j.FileChangeType) N4JSGlobals(org.eclipse.n4js.N4JSGlobals) FluentIterable(com.google.common.collect.FluentIterable) Optional(com.google.common.base.Optional) Path(java.nio.file.Path) ProjectDescriptionUtils(org.eclipse.n4js.utils.ProjectDescriptionUtils) FileURI(org.eclipse.n4js.workspace.locations.FileURI) Files(java.nio.file.Files) FileCopier(org.eclipse.n4js.utils.io.FileCopier) Collection(java.util.Collection) DidChangeWatchedFilesParams(org.eclipse.lsp4j.DidChangeWatchedFilesParams) Set(java.util.Set) IOException(java.io.IOException) WrappedException(org.eclipse.emf.common.util.WrappedException) Collectors(java.util.stream.Collectors) File(java.io.File) Sets(com.google.common.collect.Sets) YarnWorkspaceProject(org.eclipse.n4js.tests.codegen.YarnWorkspaceProject) ConcurrentIndex(org.eclipse.n4js.xtext.ide.server.build.ConcurrentIndex) List(java.util.List) IterableExtensions(org.eclipse.xtext.xbase.lib.IterableExtensions) N4jsLibsAccess(org.eclipse.n4js.cli.helper.N4jsLibsAccess) TypesPackage(org.eclipse.n4js.ts.types.TypesPackage) Entry(java.util.Map.Entry) Assert(org.junit.Assert) Collections(java.util.Collections) IEObjectDescription(org.eclipse.xtext.resource.IEObjectDescription) WrappedException(org.eclipse.emf.common.util.WrappedException) ArrayList(java.util.ArrayList) IOException(java.io.IOException) FileEvent(org.eclipse.lsp4j.FileEvent) FileURI(org.eclipse.n4js.workspace.locations.FileURI) N4JSPackageName(org.eclipse.n4js.workspace.utils.N4JSPackageName) File(java.io.File) DidChangeWatchedFilesParams(org.eclipse.lsp4j.DidChangeWatchedFilesParams)

Aggregations

Optional (com.google.common.base.Optional)1 FluentIterable (com.google.common.collect.FluentIterable)1 Multimap (com.google.common.collect.Multimap)1 Sets (com.google.common.collect.Sets)1 File (java.io.File)1 IOException (java.io.IOException)1 Files (java.nio.file.Files)1 Path (java.nio.file.Path)1 FileTime (java.nio.file.attribute.FileTime)1 ArrayList (java.util.ArrayList)1 Collection (java.util.Collection)1 Collections (java.util.Collections)1 HashSet (java.util.HashSet)1 List (java.util.List)1 Entry (java.util.Map.Entry)1 Set (java.util.Set)1 Collectors (java.util.stream.Collectors)1 WrappedException (org.eclipse.emf.common.util.WrappedException)1 Diagnostic (org.eclipse.lsp4j.Diagnostic)1 DidChangeWatchedFilesParams (org.eclipse.lsp4j.DidChangeWatchedFilesParams)1