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
.facet
.impl
.ui
.libraries
;
18 import com
.intellij
.facet
.ui
.libraries
.LibraryDownloadInfo
;
19 import com
.intellij
.facet
.ui
.libraries
.LibraryInfo
;
20 import com
.intellij
.openapi
.roots
.ModifiableRootModel
;
21 import com
.intellij
.openapi
.roots
.OrderRootType
;
22 import com
.intellij
.openapi
.roots
.libraries
.Library
;
23 import com
.intellij
.openapi
.roots
.ui
.configuration
.projectRoot
.LibrariesContainer
;
24 import com
.intellij
.openapi
.roots
.ui
.configuration
.projectRoot
.LibrariesContainerFactory
;
25 import com
.intellij
.openapi
.vfs
.VfsUtil
;
26 import com
.intellij
.openapi
.vfs
.VirtualFile
;
27 import org
.jetbrains
.annotations
.NonNls
;
28 import org
.jetbrains
.annotations
.NotNull
;
29 import org
.jetbrains
.annotations
.Nullable
;
37 public class LibraryCompositionSettings
{
38 @NonNls private static final String DEFAULT_LIB_FOLDER
= "lib";
39 private final LibraryInfo
[] myLibraryInfos
;
40 private final String myBaseDirectoryForDownloadedFiles
;
41 private final String myTitle
;
42 private String myDirectoryForDownloadedLibrariesPath
;
43 private final Set
<VirtualFile
> myAddedJars
= new LinkedHashSet
<VirtualFile
>();
44 private boolean myDownloadLibraries
= true;
45 private final Set
<Library
> myUsedLibraries
= new LinkedHashSet
<Library
>();
46 private LibrariesContainer
.LibraryLevel myLibraryLevel
= LibrariesContainer
.LibraryLevel
.PROJECT
;
47 private String myLibraryName
;
48 private final Icon myIcon
;
50 public LibraryCompositionSettings(final @NotNull LibraryInfo
[] libraryInfos
,
51 final @NotNull String defaultLibraryName
,
52 final @NotNull String baseDirectoryForDownloadedFiles
,
53 final String title
, @Nullable Icon icon
) {
54 myLibraryInfos
= libraryInfos
;
55 myBaseDirectoryForDownloadedFiles
= baseDirectoryForDownloadedFiles
;
57 myLibraryName
= defaultLibraryName
;
62 public LibraryInfo
[] getLibraryInfos() {
63 return myLibraryInfos
;
67 public String
getBaseDirectoryForDownloadedFiles() {
68 return myBaseDirectoryForDownloadedFiles
;
71 public void setDirectoryForDownloadedLibrariesPath(final String directoryForDownloadedLibrariesPath
) {
72 myDirectoryForDownloadedLibrariesPath
= directoryForDownloadedLibrariesPath
;
75 public Set
<VirtualFile
> getAddedJars() {
79 public void setAddedJars(final Collection
<VirtualFile
> addedJars
) {
81 myAddedJars
.addAll(addedJars
);
84 public boolean isDownloadLibraries() {
85 return myDownloadLibraries
;
88 public void setDownloadLibraries(final boolean downloadLibraries
) {
89 myDownloadLibraries
= downloadLibraries
;
92 public void setUsedLibraries(Collection
<Library
> addedLibraries
) {
93 myUsedLibraries
.clear();
94 myUsedLibraries
.addAll(addedLibraries
);
97 public void setLibraryLevel(final LibrariesContainer
.LibraryLevel libraryLevel
) {
98 myLibraryLevel
= libraryLevel
;
101 public void setLibraryName(final String libraryName
) {
102 myLibraryName
= libraryName
;
105 public String
getDirectoryForDownloadedLibrariesPath() {
106 if (myDirectoryForDownloadedLibrariesPath
== null) {
107 myDirectoryForDownloadedLibrariesPath
= myBaseDirectoryForDownloadedFiles
+ "/" + DEFAULT_LIB_FOLDER
;
109 return myDirectoryForDownloadedLibrariesPath
;
112 public String
getTitle() {
116 public boolean downloadFiles(final @NotNull LibraryDownloadingMirrorsMap mirrorsMap
, @NotNull LibrariesContainer librariesContainer
, final @NotNull JComponent parent
,
118 if (myDownloadLibraries
) {
119 RequiredLibrariesInfo requiredLibraries
= new RequiredLibrariesInfo(getLibraryInfos());
121 List
<VirtualFile
> roots
= new ArrayList
<VirtualFile
>();
122 roots
.addAll(myAddedJars
);
123 for (Library library
: myUsedLibraries
) {
124 roots
.addAll(Arrays
.asList(librariesContainer
.getLibraryFiles(library
, OrderRootType
.CLASSES
)));
126 VirtualFile
[] jars
= VfsUtil
.toVirtualFileArray(roots
);
127 RequiredLibrariesInfo
.RequiredClassesNotFoundInfo info
= requiredLibraries
.checkLibraries(jars
, all
);
129 LibraryDownloadInfo
[] downloadingInfos
= LibraryDownloader
.getDownloadingInfos(info
.getLibraryInfos());
130 if (downloadingInfos
.length
> 0) {
131 LibraryDownloader downloader
= new LibraryDownloader(downloadingInfos
, null, parent
,
132 getDirectoryForDownloadedLibrariesPath(), myLibraryName
,
134 VirtualFile
[] files
= downloader
.download();
135 if (files
.length
!= downloadingInfos
.length
) {
138 myAddedJars
.addAll(Arrays
.asList(files
));
146 private Library
createLibrary(final ModifiableRootModel rootModel
, @Nullable LibrariesContainer additionalContainer
) {
147 if (!myAddedJars
.isEmpty()) {
148 VirtualFile
[] roots
= VfsUtil
.toVirtualFileArray(myAddedJars
);
149 return LibrariesContainerFactory
.createLibrary(additionalContainer
, LibrariesContainerFactory
.createContainer(rootModel
),
150 myLibraryName
, myLibraryLevel
, roots
, VirtualFile
.EMPTY_ARRAY
);
155 public LibrariesContainer
.LibraryLevel
getLibraryLevel() {
156 return myLibraryLevel
;
159 public String
getLibraryName() {
160 return myLibraryName
;
163 public Collection
<Library
> getUsedLibraries() {
164 return Collections
.unmodifiableCollection(myUsedLibraries
);
167 public Icon
getIcon() {
172 public Library
addLibraries(final ModifiableRootModel rootModel
, final List
<Library
> addedLibraries
) {
173 return addLibraries(rootModel
, addedLibraries
, null);
177 public Library
addLibraries(final @NotNull ModifiableRootModel rootModel
, final @NotNull List
<Library
> addedLibraries
,
178 final @Nullable LibrariesContainer librariesContainer
) {
179 Library library
= createLibrary(rootModel
, librariesContainer
);
181 if (library
!= null) {
182 addedLibraries
.add(library
);
183 if (getLibraryLevel() != LibrariesContainer
.LibraryLevel
.MODULE
) {
184 rootModel
.addLibraryEntry(library
);
187 for (Library usedLibrary
: getUsedLibraries()) {
188 addedLibraries
.add(usedLibrary
);
189 rootModel
.addLibraryEntry(usedLibrary
);