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
;
36 import java
.util
.ArrayList
;
37 import java
.util
.Collections
;
38 import java
.util
.Comparator
;
39 import java
.util
.List
;
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
) {
56 myBaseDirForLibrariesGetter
= baseDirForLibrariesGetter
;
58 myProvider
= provider
;
59 myParentNode
= parentNode
;
60 model
.registerComponent(provider
, this);
61 myConfigurable
= provider
.createConfigurable(model
);
62 if (parentNode
!= null) {
64 parentNode
.myChildren
.add(this);
67 setConfigurableComponentEnabled(false);
70 public List
<FrameworkSupportNode
> getChildren() {
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
);
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() {
100 public FrameworkSupportNode
getParentNode() {
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
;
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());
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
) {
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
);