update copyright
[fedora-idea.git] / java / idea-ui / src / com / intellij / ide / util / newProjectWizard / FrameworkSupportNode.java
blobb84f127cebde88d55ddef8ddd14c1defd1ae2ff2
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.
16 package com.intellij.ide.util.newProjectWizard;
18 import com.intellij.facet.impl.ui.libraries.LibraryCompositionSettings;
19 import com.intellij.facet.impl.ui.libraries.LibraryCompositionOptionsPanel;
20 import com.intellij.facet.impl.ui.libraries.LibraryDownloadingMirrorsMap;
21 import com.intellij.ide.util.frameworkSupport.FrameworkSupportConfigurable;
22 import com.intellij.ide.util.frameworkSupport.FrameworkSupportProvider;
23 import com.intellij.ide.util.frameworkSupport.FrameworkVersion;
24 import com.intellij.facet.ui.libraries.LibraryInfo;
25 import com.intellij.ide.util.newProjectWizard.impl.FrameworkSupportModelImpl;
26 import com.intellij.openapi.util.Comparing;
27 import com.intellij.openapi.util.Computable;
28 import com.intellij.openapi.util.text.StringUtil;
29 import com.intellij.openapi.roots.ui.configuration.projectRoot.LibrariesContainer;
30 import com.intellij.ui.CheckedTreeNode;
31 import com.intellij.util.ui.UIUtil;
32 import org.jetbrains.annotations.NotNull;
33 import org.jetbrains.annotations.Nullable;
35 import javax.swing.*;
36 import java.util.ArrayList;
37 import java.util.Collections;
38 import java.util.Comparator;
39 import java.util.List;
41 /**
42 * @author nik
44 public class FrameworkSupportNode extends CheckedTreeNode {
45 private final FrameworkSupportProvider myProvider;
46 private final FrameworkSupportNode myParentNode;
47 private final FrameworkSupportConfigurable myConfigurable;
48 private final List<FrameworkSupportNode> myChildren = new ArrayList<FrameworkSupportNode>();
49 private LibraryCompositionSettings myLibraryCompositionSettings;
50 private final Computable<String> myBaseDirForLibrariesGetter;
51 private LibraryCompositionOptionsPanel myLibraryCompositionOptionsPanel;
53 FrameworkSupportNode(final FrameworkSupportProvider provider, final FrameworkSupportNode parentNode, final FrameworkSupportModelImpl model,
54 Computable<String> baseDirForLibrariesGetter) {
55 super(provider);
56 myBaseDirForLibrariesGetter = baseDirForLibrariesGetter;
57 setChecked(false);
58 myProvider = provider;
59 myParentNode = parentNode;
60 model.registerComponent(provider, this);
61 myConfigurable = provider.createConfigurable(model);
62 if (parentNode != null) {
63 parentNode.add(this);
64 parentNode.myChildren.add(this);
67 setConfigurableComponentEnabled(false);
70 public List<FrameworkSupportNode> getChildren() {
71 return myChildren;
74 @Nullable
75 public LibraryCompositionOptionsPanel getLibraryCompositionOptionsPanel(LibrariesContainer librariesContainer,
76 LibraryDownloadingMirrorsMap mirrorsMap) {
77 final LibraryCompositionSettings libraryCompositionSettings = getLibraryCompositionSettings();
78 if (myLibraryCompositionOptionsPanel == null || !myLibraryCompositionOptionsPanel.getLibraryCompositionSettings().equals(libraryCompositionSettings)) {
79 if (libraryCompositionSettings != null) {
80 myLibraryCompositionOptionsPanel = new LibraryCompositionOptionsPanel(librariesContainer, libraryCompositionSettings, mirrorsMap);
82 else {
83 myLibraryCompositionOptionsPanel = null;
86 return myLibraryCompositionOptionsPanel;
89 public void setConfigurableComponentEnabled(final boolean enable) {
90 JComponent component = getConfigurable().getComponent();
91 if (component != null) {
92 UIUtil.setEnabled(component, enable, true);
96 public FrameworkSupportProvider getProvider() {
97 return myProvider;
100 public FrameworkSupportNode getParentNode() {
101 return myParentNode;
104 public FrameworkSupportConfigurable getConfigurable() {
105 return myConfigurable;
108 private boolean isObsolete(@NotNull LibraryCompositionSettings settings) {
109 final LibraryInfo[] libraries = getLibraries();
110 return !settings.getBaseDirectoryForDownloadedFiles().equals(myBaseDirForLibrariesGetter.compute())
111 || !Comparing.equal(settings.getLibraryInfos(), libraries);
114 public LibraryInfo[] getLibraries() {
115 final FrameworkVersion version = myConfigurable.getSelectedVersion();
116 return version != null ? version.getLibraries() : LibraryInfo.EMPTY_ARRAY;
119 @Nullable
120 public LibraryCompositionSettings getLibraryCompositionSettings() {
121 if (myLibraryCompositionSettings == null || isObsolete(myLibraryCompositionSettings)) {
122 final LibraryInfo[] libraries = getLibraries();
123 if (libraries.length != 0) {
124 myLibraryCompositionSettings = new LibraryCompositionSettings(libraries, myConfigurable.getSelectedVersion().getLibraryName(), myBaseDirForLibrariesGetter.compute(),
125 "Libraries", myProvider.getIcon());
127 else {
128 myLibraryCompositionSettings = null;
131 return myLibraryCompositionSettings;
134 public static void sortByTitle(List<FrameworkSupportNode> nodes) {
135 if (nodes.isEmpty()) return;
137 Collections.sort(nodes, new Comparator<FrameworkSupportNode>() {
138 public int compare(final FrameworkSupportNode o1, final FrameworkSupportNode o2) {
139 return getTitleWithoutMnemonic(o1.getProvider()).compareTo(getTitleWithoutMnemonic(o2.getProvider()));
142 for (FrameworkSupportNode node : nodes) {
143 node.sortChildren();
147 public String getTitle() {
148 return getTitleWithoutMnemonic(myProvider);
151 private static String getTitleWithoutMnemonic(final FrameworkSupportProvider provider) {
152 return StringUtil.replace(provider.getTitle(), String.valueOf(UIUtil.MNEMONIC), "");
155 private void sortChildren() {
156 sortByTitle(myChildren);