/* * Copyright 2003-2014 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package jetbrains.mps.ide.ui.tree.module; import com.intellij.icons.AllIcons.Nodes; import jetbrains.mps.FilteredGlobalScope; import jetbrains.mps.ide.ui.tree.TextTreeNode; import jetbrains.mps.project.DevKit; import jetbrains.mps.project.Project; import jetbrains.mps.project.Solution; import jetbrains.mps.project.structure.ProjectStructureModule; import jetbrains.mps.smodel.Generator; import jetbrains.mps.smodel.Language; import jetbrains.mps.util.NameUtil; import org.jetbrains.mps.openapi.module.SModule; public class ProjectModulesPoolTreeNode extends TextTreeNode { private Project myProject; private boolean myInitialized; public ProjectModulesPoolTreeNode(Project project) { super("Modules Pool"); myProject = project; setIcon(Nodes.ModuleGroup); } @Override public boolean isLoadingEnabled() { return true; } @Override public boolean isInitialized() { return myInitialized; } @Override protected boolean propogateErrorUpwards() { return false; } @Override protected void doInit() { populate(); myInitialized = true; } private void populate() { Iterable<SModule> modules = new FilteredGlobalScope().getModules(); { ModulePoolNamespaceBuilder builder = new ModulePoolNamespaceBuilder(); TextTreeNode solutions = new TextTreeNode("Solutions"); for (SModule s : modules) { if (s instanceof Solution || s instanceof ProjectStructureModule) { builder.addNode(ProjectModuleTreeNode.createFor(myProject, s, true)); } } builder.fillNode(solutions); add(solutions); } { ModulePoolNamespaceBuilder builder = new ModulePoolNamespaceBuilder(); TextTreeNode languages = new TextTreeNode("Languages"); for (SModule m : modules) { if (Language.class.isInstance(m)) { builder.addNode(ProjectModuleTreeNode.createFor(myProject, m, true)); } } builder.fillNode(languages); add(languages); } { ModulePoolNamespaceBuilder builder = new ModulePoolNamespaceBuilder(); TextTreeNode devkits = new TextTreeNode("DevKits"); for (SModule m : modules) { if (DevKit.class.isInstance(m)) { builder.addNode(ProjectModuleTreeNode.createFor(myProject, m, true)); } } builder.fillNode(devkits); add(devkits); } } @Override public boolean isLeaf() { return false; } private class ModulePoolNamespaceBuilder extends DefaultNamespaceTreeBuilder<ProjectModuleTreeNode> { @Override protected String getNamespace(ProjectModuleTreeNode node) { if (node.getModule() instanceof Generator) { Generator generator = (Generator) node.getModule(); return NameUtil.namespaceFromLongName(generator.getSourceLanguage().getModuleName()); } return NameUtil.namespaceFromLongName(node.getModule().getModuleName()); } } }