spring 3.0 download
[fedora-idea.git] / java / idea-ui / src / com / intellij / facet / impl / ui / libraries / LibraryCompositionSettings.java
blob43ab025dce27aa5d46b8705165496a6de50f4999
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.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;
31 import javax.swing.*;
32 import java.util.*;
34 /**
35 * @author nik
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;
56 myTitle = title;
57 myLibraryName = defaultLibraryName;
58 myIcon = icon;
61 @NotNull
62 public LibraryInfo[] getLibraryInfos() {
63 return myLibraryInfos;
66 @NotNull
67 public String getBaseDirectoryForDownloadedFiles() {
68 return myBaseDirectoryForDownloadedFiles;
71 public void setDirectoryForDownloadedLibrariesPath(final String directoryForDownloadedLibrariesPath) {
72 myDirectoryForDownloadedLibrariesPath = directoryForDownloadedLibrariesPath;
75 public Set<VirtualFile> getAddedJars() {
76 return myAddedJars;
79 public void setAddedJars(final Collection<VirtualFile> addedJars) {
80 myAddedJars.clear();
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() {
113 return myTitle;
116 public boolean downloadFiles(final @NotNull LibraryDownloadingMirrorsMap mirrorsMap, @NotNull LibrariesContainer librariesContainer, final @NotNull JComponent parent,
117 boolean all) {
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);
128 if (info != null) {
129 LibraryDownloadInfo[] downloadingInfos = LibraryDownloader.getDownloadingInfos(info.getLibraryInfos());
130 if (downloadingInfos.length > 0) {
131 LibraryDownloader downloader = new LibraryDownloader(downloadingInfos, null, parent,
132 getDirectoryForDownloadedLibrariesPath(), myLibraryName,
133 mirrorsMap);
134 VirtualFile[] files = downloader.download();
135 if (files.length != downloadingInfos.length) {
136 return false;
138 myAddedJars.addAll(Arrays.asList(files));
142 return true;
145 @Nullable
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);
152 return null;
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() {
168 return myIcon;
171 @Nullable
172 public Library addLibraries(final ModifiableRootModel rootModel, final List<Library> addedLibraries) {
173 return addLibraries(rootModel, addedLibraries, null);
176 @Nullable
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);
191 return library;