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
.VirtualFile
;
26 import org
.jetbrains
.annotations
.NonNls
;
27 import org
.jetbrains
.annotations
.NotNull
;
28 import org
.jetbrains
.annotations
.Nullable
;
36 public class LibraryCompositionSettings
{
37 @NonNls private static final String DEFAULT_LIB_FOLDER
= "lib";
38 private final LibraryInfo
[] myLibraryInfos
;
39 private final String myBaseDirectoryForDownloadedFiles
;
40 private final String myTitle
;
41 private String myDirectoryForDownloadedLibrariesPath
;
42 private final Set
<VirtualFile
> myAddedJars
= new LinkedHashSet
<VirtualFile
>();
43 private boolean myDownloadLibraries
= true;
44 private final Set
<Library
> myUsedLibraries
= new LinkedHashSet
<Library
>();
45 private LibrariesContainer
.LibraryLevel myLibraryLevel
= LibrariesContainer
.LibraryLevel
.PROJECT
;
46 private String myLibraryName
;
47 private final Icon myIcon
;
49 public LibraryCompositionSettings(final @NotNull LibraryInfo
[] libraryInfos
,
50 final @NotNull String defaultLibraryName
,
51 final @NotNull String baseDirectoryForDownloadedFiles
,
52 final String title
, @Nullable Icon icon
) {
53 myLibraryInfos
= libraryInfos
;
54 myBaseDirectoryForDownloadedFiles
= baseDirectoryForDownloadedFiles
;
56 myLibraryName
= defaultLibraryName
;
61 public LibraryInfo
[] getLibraryInfos() {
62 return myLibraryInfos
;
66 public String
getBaseDirectoryForDownloadedFiles() {
67 return myBaseDirectoryForDownloadedFiles
;
70 public void setDirectoryForDownloadedLibrariesPath(final String directoryForDownloadedLibrariesPath
) {
71 myDirectoryForDownloadedLibrariesPath
= directoryForDownloadedLibrariesPath
;
74 public Set
<VirtualFile
> getAddedJars() {
78 public void setAddedJars(final Collection
<VirtualFile
> addedJars
) {
80 myAddedJars
.addAll(addedJars
);
83 public boolean isDownloadLibraries() {
84 return myDownloadLibraries
;
87 public void setDownloadLibraries(final boolean downloadLibraries
) {
88 myDownloadLibraries
= downloadLibraries
;
91 public void setUsedLibraries(Collection
<Library
> addedLibraries
) {
92 myUsedLibraries
.clear();
93 myUsedLibraries
.addAll(addedLibraries
);
96 public void setLibraryLevel(final LibrariesContainer
.LibraryLevel libraryLevel
) {
97 myLibraryLevel
= libraryLevel
;
100 public void setLibraryName(final String libraryName
) {
101 myLibraryName
= libraryName
;
104 public String
getDirectoryForDownloadedLibrariesPath() {
105 if (myDirectoryForDownloadedLibrariesPath
== null) {
106 myDirectoryForDownloadedLibrariesPath
= myBaseDirectoryForDownloadedFiles
+ "/" + DEFAULT_LIB_FOLDER
;
108 return myDirectoryForDownloadedLibrariesPath
;
111 public String
getTitle() {
115 public boolean downloadFiles(final @NotNull LibraryDownloadingMirrorsMap mirrorsMap
, @NotNull LibrariesContainer librariesContainer
, final @NotNull JComponent parent
) {
116 if (myDownloadLibraries
) {
117 RequiredLibrariesInfo requiredLibraries
= new RequiredLibrariesInfo(getLibraryInfos());
119 List
<VirtualFile
> roots
= new ArrayList
<VirtualFile
>();
120 roots
.addAll(myAddedJars
);
121 for (Library library
: myUsedLibraries
) {
122 roots
.addAll(Arrays
.asList(librariesContainer
.getLibraryFiles(library
, OrderRootType
.CLASSES
)));
124 VirtualFile
[] jars
= roots
.toArray(new VirtualFile
[roots
.size()]);
125 RequiredLibrariesInfo
.RequiredClassesNotFoundInfo info
= requiredLibraries
.checkLibraries(jars
);
127 LibraryDownloadInfo
[] downloadingInfos
= LibraryDownloader
.getDownloadingInfos(info
.getLibraryInfos());
128 if (downloadingInfos
.length
> 0) {
129 LibraryDownloader downloader
= new LibraryDownloader(downloadingInfos
, null, parent
,
130 getDirectoryForDownloadedLibrariesPath(), myLibraryName
,
132 VirtualFile
[] files
= downloader
.download();
133 if (files
.length
!= downloadingInfos
.length
) {
136 myAddedJars
.addAll(Arrays
.asList(files
));
144 private Library
createLibrary(final ModifiableRootModel rootModel
, @Nullable LibrariesContainer additionalContainer
) {
145 if (!myAddedJars
.isEmpty()) {
146 VirtualFile
[] roots
= myAddedJars
.toArray(new VirtualFile
[myAddedJars
.size()]);
147 return LibrariesContainerFactory
.createLibrary(additionalContainer
, LibrariesContainerFactory
.createContainer(rootModel
),
148 myLibraryName
, myLibraryLevel
, roots
, VirtualFile
.EMPTY_ARRAY
);
153 public LibrariesContainer
.LibraryLevel
getLibraryLevel() {
154 return myLibraryLevel
;
157 public String
getLibraryName() {
158 return myLibraryName
;
161 public Collection
<Library
> getUsedLibraries() {
162 return Collections
.unmodifiableCollection(myUsedLibraries
);
165 public Icon
getIcon() {
170 public Library
addLibraries(final ModifiableRootModel rootModel
, final List
<Library
> addedLibraries
) {
171 return addLibraries(rootModel
, addedLibraries
, null);
175 public Library
addLibraries(final @NotNull ModifiableRootModel rootModel
, final @NotNull List
<Library
> addedLibraries
,
176 final @Nullable LibrariesContainer librariesContainer
) {
177 Library library
= createLibrary(rootModel
, librariesContainer
);
179 if (library
!= null) {
180 addedLibraries
.add(library
);
181 if (getLibraryLevel() != LibrariesContainer
.LibraryLevel
.MODULE
) {
182 rootModel
.addLibraryEntry(library
);
185 for (Library usedLibrary
: getUsedLibraries()) {
186 addedLibraries
.add(usedLibrary
);
187 rootModel
.addLibraryEntry(usedLibrary
);