update copyright
[fedora-idea.git] / java / idea-ui / src / com / intellij / facet / impl / ui / libraries / LibraryCompositionSettings.java
blobee28d78aecfc77bf84395a49f4b1391bda2c7f86
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.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;
30 import javax.swing.*;
31 import java.util.*;
33 /**
34 * @author nik
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;
55 myTitle = title;
56 myLibraryName = defaultLibraryName;
57 myIcon = icon;
60 @NotNull
61 public LibraryInfo[] getLibraryInfos() {
62 return myLibraryInfos;
65 @NotNull
66 public String getBaseDirectoryForDownloadedFiles() {
67 return myBaseDirectoryForDownloadedFiles;
70 public void setDirectoryForDownloadedLibrariesPath(final String directoryForDownloadedLibrariesPath) {
71 myDirectoryForDownloadedLibrariesPath = directoryForDownloadedLibrariesPath;
74 public Set<VirtualFile> getAddedJars() {
75 return myAddedJars;
78 public void setAddedJars(final Collection<VirtualFile> addedJars) {
79 myAddedJars.clear();
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() {
112 return myTitle;
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);
126 if (info != null) {
127 LibraryDownloadInfo[] downloadingInfos = LibraryDownloader.getDownloadingInfos(info.getLibraryInfos());
128 if (downloadingInfos.length > 0) {
129 LibraryDownloader downloader = new LibraryDownloader(downloadingInfos, null, parent,
130 getDirectoryForDownloadedLibrariesPath(), myLibraryName,
131 mirrorsMap);
132 VirtualFile[] files = downloader.download();
133 if (files.length != downloadingInfos.length) {
134 return false;
136 myAddedJars.addAll(Arrays.asList(files));
140 return true;
143 @Nullable
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);
150 return null;
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() {
166 return myIcon;
169 @Nullable
170 public Library addLibraries(final ModifiableRootModel rootModel, final List<Library> addedLibraries) {
171 return addLibraries(rootModel, addedLibraries, null);
174 @Nullable
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);
189 return library;