Search in sources :

Example 1 with RUNTIME_LIBRARY

use of org.eclipse.n4js.n4mf.ProjectType.RUNTIME_LIBRARY in project n4js by eclipse.

the class N4JSProjectExplorerHelper method getVirtualNodesForProject.

/**
 * Returns with an array of virtual {@link Node node} instances for the project that should be revealed in the
 * project explorer.
 *
 * @param project
 *            the workspace project.
 * @return an array of virtual nodes.
 */
public Node[] getVirtualNodesForProject(IProject project) {
    checkArgument(!(project instanceof ExternalProject), "Expected Eclipse workspace project. Got: " + project);
    if (null == project || !project.exists() || !project.isAccessible()) {
        return Node.EMPTY_NODES;
    }
    IN4JSProject n4Project = getProject(project);
    if (null == n4Project || !n4Project.exists() || n4Project.isExternal()) {
        return Node.EMPTY_NODES;
    }
    final Image image = ImageRef.LIB_PATH.asImage().get();
    final NamedNode rootNode = new NamedNode(project, "External Dependencies", image);
    Iterable<IN4JSProject> directDependencies = from(n4Project.getAllDirectDependencies()).filter(IN4JSProject.class);
    Iterable<IN4JSProject> runtimeLibraries = getExternalDependenciesOfType(directDependencies, RUNTIME_LIBRARY);
    if (!from(runtimeLibraries).isEmpty()) {
        Map<String, IN4JSProject> builtInRuntimeEnvironments = getBuiltInRuntimeEnvironments();
        Map<String, IN4JSProject> builtInRuntimeLibraries = getBuiltInRuntimeLibraries();
        Collection<IN4JSProject> libs = newHashSet();
        Collection<IN4JSProject> envs = newHashSet();
        for (IN4JSProject p : runtimeLibraries) {
            IN4JSProject dependency = builtInRuntimeLibraries.get(p.getProjectId());
            if (null != dependency) {
                libs.add(dependency);
            }
        }
        if (!libs.isEmpty()) {
            OUTER: for (IN4JSProject p : builtInRuntimeEnvironments.values()) {
                for (IN4JSProject providedLib : from(p.getProvidedRuntimeLibraries()).filter(IN4JSProject.class)) {
                    if (libs.contains(providedLib)) {
                        envs.add(p);
                        String extndedRuntimeEnvName = p.getExtendedRuntimeEnvironmentId().orNull();
                        if (null != extndedRuntimeEnvName) {
                            final IN4JSProject extension = builtInRuntimeEnvironments.get(extndedRuntimeEnvName);
                            if (null != extension) {
                                envs.add(extension);
                            }
                        }
                        continue OUTER;
                    }
                }
            }
        }
        NamedNode runtimeNode = new NamedNode(rootNode, "N4JS Runtime", image);
        if (!envs.isEmpty()) {
            NamedNode envsNode = new NamedNode(runtimeNode, "Runtime Environments", image);
            envsNode.addChild(from(envs).transform(p -> new BuiltInProjectNode(envsNode, p)));
            runtimeNode.addChild(envsNode);
        }
        if (!libs.isEmpty()) {
            NamedNode libsNode = new NamedNode(runtimeNode, "Runtime Libraries", image);
            libsNode.addChild(from(libs).transform(p -> new BuiltInProjectNode(libsNode, p)));
            runtimeNode.addChild(libsNode);
        }
        if (!Arrays2.isEmpty(runtimeNode.getChildren())) {
            rootNode.addChild(runtimeNode);
        }
    }
    Map<String, IN4JSProject> langProjects = getAvailableLangProjects();
    Map<String, IN4JSProject> mangelhaftProjects = getAvailableMangelhaftProjects();
    Map<String, IN4JSProject> npmProjects = getAvailableNpmProjects();
    Collection<IN4JSProject> requiredLangLibs = newHashSet();
    Collection<IN4JSProject> requiredMangelhaftLibs = newHashSet();
    Collection<IN4JSProject> requiredNpmLibs = newHashSet();
    for (IN4JSProject directDependecy : directDependencies) {
        if (directDependecy.exists() && directDependecy.isExternal()) {
            IN4JSProject externalDepenency = mangelhaftProjects.get(directDependecy.getProjectId());
            if (null != externalDepenency) {
                requiredMangelhaftLibs.add(externalDepenency);
            } else {
                externalDepenency = npmProjects.get(directDependecy.getProjectId());
                if (null != externalDepenency) {
                    requiredNpmLibs.add(externalDepenency);
                } else {
                    externalDepenency = langProjects.get(directDependecy.getProjectId());
                    if (null != externalDepenency) {
                        requiredLangLibs.add(externalDepenency);
                    }
                }
            }
        }
    }
    if (!requiredLangLibs.isEmpty()) {
        NamedNode langNode = new NamedNode(rootNode, EXTERNAL_LIBRARY_NAMES.get(LANG_CATEGORY), image);
        langNode.addChild(from(requiredLangLibs).transform(p -> new BuiltInProjectNode(langNode, p)));
        rootNode.addChild(langNode);
    }
    if (!requiredMangelhaftLibs.isEmpty()) {
        NamedNode mangNode = new NamedNode(rootNode, EXTERNAL_LIBRARY_NAMES.get(MANGELHAFT_CATEGORY), image);
        mangNode.addChild(from(requiredMangelhaftLibs).transform(p -> new BuiltInProjectNode(mangNode, p)));
        rootNode.addChild(mangNode);
    }
    if (!requiredNpmLibs.isEmpty()) {
        NamedNode npmNode = new NamedNode(rootNode, EXTERNAL_LIBRARY_NAMES.get(NPM_CATEGORY), image);
        npmNode.addChild(from(requiredNpmLibs).transform(p -> new BuiltInProjectNode(npmNode, p)));
        rootNode.addChild(npmNode);
    }
    return Arrays2.isEmpty(rootNode.getChildren()) ? new Node[0] : new Node[] { rootNode };
}
Also used : IFolder(org.eclipse.core.resources.IFolder) ExternalLibraryWorkspace(org.eclipse.n4js.external.ExternalLibraryWorkspace) LANG_CATEGORY(org.eclipse.n4js.external.libraries.ExternalLibrariesActivator.LANG_CATEGORY) Inject(com.google.inject.Inject) Image(org.eclipse.swt.graphics.Image) Maps.uniqueIndex(com.google.common.collect.Maps.uniqueIndex) MANGELHAFT_CATEGORY(org.eclipse.n4js.external.libraries.ExternalLibrariesActivator.MANGELHAFT_CATEGORY) IN4JSCore(org.eclipse.n4js.projectModel.IN4JSCore) Arrays2(org.eclipse.n4js.utils.collections.Arrays2) Strings(com.google.common.base.Strings) Preconditions.checkArgument(com.google.common.base.Preconditions.checkArgument) RUNTIME_ENVIRONMENT(org.eclipse.n4js.n4mf.ProjectType.RUNTIME_ENVIRONMENT) IProject(org.eclipse.core.resources.IProject) FluentIterable.from(com.google.common.collect.FluentIterable.from) Map(java.util.Map) EXTERNAL_LIBRARIES_SUPPLIER(org.eclipse.n4js.external.libraries.ExternalLibrariesActivator.EXTERNAL_LIBRARIES_SUPPLIER) Sets.newHashSet(com.google.common.collect.Sets.newHashSet) IExternalResource(org.eclipse.n4js.utils.resources.IExternalResource) URI(java.net.URI) EnumSet(java.util.EnumSet) Collection(java.util.Collection) IN4JSProject(org.eclipse.n4js.projectModel.IN4JSProject) RUNTIME_CATEGORY(org.eclipse.n4js.external.libraries.ExternalLibrariesActivator.RUNTIME_CATEGORY) EXTERNAL_LIBRARY_NAMES(org.eclipse.n4js.external.libraries.ExternalLibrariesActivator.EXTERNAL_LIBRARY_NAMES) ExternalProject(org.eclipse.n4js.utils.resources.ExternalProject) URI.createFileURI(org.eclipse.emf.common.util.URI.createFileURI) ProjectType(org.eclipse.n4js.n4mf.ProjectType) URI.createPlatformResourceURI(org.eclipse.emf.common.util.URI.createPlatformResourceURI) Collections(java.util.Collections) ImageRef(org.eclipse.n4js.ui.ImageDescriptorCache.ImageRef) NPM_CATEGORY(org.eclipse.n4js.external.libraries.ExternalLibrariesActivator.NPM_CATEGORY) RUNTIME_LIBRARY(org.eclipse.n4js.n4mf.ProjectType.RUNTIME_LIBRARY) Singleton(com.google.inject.Singleton) ExternalProject(org.eclipse.n4js.utils.resources.ExternalProject) IN4JSProject(org.eclipse.n4js.projectModel.IN4JSProject) Image(org.eclipse.swt.graphics.Image)

Aggregations

Preconditions.checkArgument (com.google.common.base.Preconditions.checkArgument)1 Strings (com.google.common.base.Strings)1 FluentIterable.from (com.google.common.collect.FluentIterable.from)1 Maps.uniqueIndex (com.google.common.collect.Maps.uniqueIndex)1 Sets.newHashSet (com.google.common.collect.Sets.newHashSet)1 Inject (com.google.inject.Inject)1 Singleton (com.google.inject.Singleton)1 URI (java.net.URI)1 Collection (java.util.Collection)1 Collections (java.util.Collections)1 EnumSet (java.util.EnumSet)1 Map (java.util.Map)1 IFolder (org.eclipse.core.resources.IFolder)1 IProject (org.eclipse.core.resources.IProject)1 URI.createFileURI (org.eclipse.emf.common.util.URI.createFileURI)1 URI.createPlatformResourceURI (org.eclipse.emf.common.util.URI.createPlatformResourceURI)1 ExternalLibraryWorkspace (org.eclipse.n4js.external.ExternalLibraryWorkspace)1 EXTERNAL_LIBRARIES_SUPPLIER (org.eclipse.n4js.external.libraries.ExternalLibrariesActivator.EXTERNAL_LIBRARIES_SUPPLIER)1 EXTERNAL_LIBRARY_NAMES (org.eclipse.n4js.external.libraries.ExternalLibrariesActivator.EXTERNAL_LIBRARY_NAMES)1 LANG_CATEGORY (org.eclipse.n4js.external.libraries.ExternalLibrariesActivator.LANG_CATEGORY)1