update copyright
[fedora-idea.git] / java / idea-ui / src / com / intellij / openapi / roots / ui / configuration / projectRoot / FacetEditorFacadeImpl.java
blob8c1fbed618f08dd0a1b6007c59aebe47c70208e7
1 /*
2 * Copyright 2000-2009 JetBrains s.r.o.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
17 package com.intellij.openapi.roots.ui.configuration.projectRoot;
19 import com.intellij.facet.*;
20 import com.intellij.facet.impl.ProjectFacetsConfigurator;
21 import com.intellij.facet.impl.ui.FacetEditorFacade;
22 import com.intellij.facet.impl.ui.FacetTreeModel;
23 import com.intellij.openapi.diagnostic.Logger;
24 import com.intellij.openapi.module.Module;
25 import com.intellij.openapi.module.ModuleType;
26 import com.intellij.openapi.ui.MasterDetailsComponent;
27 import com.intellij.openapi.ui.NamedConfigurable;
28 import org.jetbrains.annotations.Nullable;
30 import javax.swing.tree.TreeNode;
31 import java.util.*;
33 /**
34 * @author nik
36 public class FacetEditorFacadeImpl implements FacetEditorFacade {
37 private static final Logger LOG = Logger.getInstance("#com.intellij.openapi.roots.ui.configuration.projectRoot.FacetEditorFacadeImpl");
38 private final ModuleStructureConfigurable myStructureConfigurable;
39 private final Runnable myTreeUpdater;
40 private final Map<Facet, MasterDetailsComponent.MyNode> myNodes = new HashMap<Facet, MasterDetailsComponent.MyNode>();
41 private final Map<Facet, FacetConfigurable> myConfigurables = new HashMap<Facet, FacetConfigurable>();
43 public FacetEditorFacadeImpl(final ModuleStructureConfigurable structureConfigurable, final Runnable treeUpdater) {
44 myStructureConfigurable = structureConfigurable;
45 myTreeUpdater = treeUpdater;
48 public boolean addFacetsNodes(final Module module, final MasterDetailsComponent.MyNode moduleNode) {
49 boolean facetsExist = false;
51 getFacetConfigurator().addFacetInfos(module);
53 final FacetModel facetModel = getFacetConfigurator().getFacetModel(module);
54 for (Facet facet : facetModel.getSortedFacets()) {
55 addFacetNode(facet, moduleNode);
56 facetsExist = true;
59 return facetsExist;
62 private MasterDetailsComponent.MyNode addFacetNode(final Facet facet, final MasterDetailsComponent.MyNode moduleNode) {
63 final MasterDetailsComponent.MyNode existing = findFacetNode(facet, moduleNode);
64 if (existing != null) return existing;
66 final FacetConfigurable facetConfigurable = getOrCreateConfigurable(facet);
67 final MasterDetailsComponent.MyNode facetNode = new MasterDetailsComponent.MyNode(facetConfigurable);
68 myNodes.put(facet, facetNode);
69 MasterDetailsComponent.MyNode parent = moduleNode;
70 final Facet underlyingFacet = facet.getUnderlyingFacet();
71 if (underlyingFacet != null) {
72 parent = myNodes.get(underlyingFacet);
73 LOG.assertTrue(parent != null);
75 myStructureConfigurable.addNode(facetNode, parent);
76 return facetNode;
79 public FacetConfigurable getOrCreateConfigurable(final Facet facet) {
80 FacetConfigurable configurable = myConfigurables.get(facet);
81 if (configurable == null) {
82 configurable = new FacetConfigurable(facet, getFacetConfigurator(), myTreeUpdater);
83 myConfigurables.put(facet, configurable);
85 return configurable;
88 @Nullable
89 private static MasterDetailsComponent.MyNode findFacetNode(final Facet facet, final MasterDetailsComponent.MyNode moduleNode) {
90 for (int i = 0; i < moduleNode.getChildCount(); i++) {
91 final TreeNode node = moduleNode.getChildAt(i);
92 if (node instanceof MasterDetailsComponent.MyNode) {
93 final MasterDetailsComponent.MyNode configNode = (MasterDetailsComponent.MyNode)node;
94 final NamedConfigurable config = configNode.getConfigurable();
95 if (config instanceof FacetConfigurable) {
96 final Facet existingFacet = ((FacetConfigurable)config).getEditableObject();
97 if (existingFacet != null && existingFacet.equals(facet)) {
98 return configNode;
104 return null;
107 public boolean nodeHasFacetOfType(final FacetInfo facet, FacetTypeId typeId) {
108 final Module selectedModule = getSelectedModule();
109 if (selectedModule == null) {
110 return false;
112 final FacetTreeModel facetTreeModel = getFacetConfigurator().getTreeModel(selectedModule);
113 return facetTreeModel.hasFacetOfType(facet, typeId);
116 public void createFacet(final FacetInfo parent, FacetType type, final String name) {
117 Module module = getSelectedModule();
119 final Facet facet = getFacetConfigurator().createAndAddFacet(module, type, name, parent);
120 final MasterDetailsComponent.MyNode node = addFacetNode(facet, myStructureConfigurable.findModuleNode(module));
121 myStructureConfigurable.selectNodeInTree(node);
124 public Collection<FacetInfo> getFacetsByType(final FacetType<?,?> type) {
125 final Module selectedModule = getSelectedModule();
126 if (selectedModule == null) return Collections.emptyList();
127 final FacetModel facetModel = getFacetConfigurator().getFacetModel(selectedModule);
128 final Collection<? extends Facet> facets = facetModel.getFacetsByType(type.getId());
130 final ArrayList<FacetInfo> infos = new ArrayList<FacetInfo>();
131 for (Facet facet : facets) {
132 final FacetInfo facetInfo = getFacetConfigurator().getFacetInfo(facet);
133 if (facetInfo != null) {
134 infos.add(facetInfo);
137 return infos;
140 @Nullable
141 public FacetInfo getParent(final FacetInfo facetInfo) {
142 final Module module = getFacetConfigurator().getFacet(facetInfo).getModule();
143 return getFacetConfigurator().getTreeModel(module).getParent(facetInfo);
146 private ProjectFacetsConfigurator getFacetConfigurator() {
147 return myStructureConfigurable.getFacetConfigurator();
150 @Nullable
151 private Facet getSelectedFacet() {
152 final Object selectedObject = myStructureConfigurable.getSelectedObject();
153 if (selectedObject instanceof Facet) {
154 return (Facet)selectedObject;
156 return null;
159 @Nullable
160 private Module getSelectedModule() {
161 final Object selected = myStructureConfigurable.getSelectedObject();
162 if (selected instanceof Module) {
163 return (Module)selected;
165 if (selected instanceof Facet) {
166 return ((Facet)selected).getModule();
168 return null;
171 @Nullable
172 public ModuleType getSelectedModuleType() {
173 final Module module = getSelectedModule();
174 return module != null ? module.getModuleType() : null;
177 @Nullable
178 public FacetInfo getSelectedFacetInfo() {
179 final Facet facet = getSelectedFacet();
180 return facet != null ? getFacetConfigurator().getFacetInfo(facet) : null;
183 public void clearMaps() {
184 myConfigurables.clear();
185 myNodes.clear();