blob: 28e4fa85011e9fe9249ef7127ac032dabf9d8a8f [file] [log] [blame]
package com.intellij.util.ui.classpath;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.roots.OrderRootType;
import com.intellij.openapi.roots.libraries.Library;
import com.intellij.openapi.roots.libraries.LibraryTable;
import com.intellij.openapi.roots.libraries.LibraryTablesRegistrar;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.openapi.vfs.VirtualFileManager;
import org.jdom.Element;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
/**
* @author nik
*/
public class SimpleClasspathElementFactory {
private SimpleClasspathElementFactory() {
}
public static List<SimpleClasspathElement> createElements(@Nullable Project project, @NotNull Element element) {
final String name = element.getAttributeValue(GlobalLibraryReferenceElement.NAME_ATTRIBUTE);
final String level = element.getAttributeValue(GlobalLibraryReferenceElement.LEVEL_ATTRIBUTE);
final String url = element.getChildText(SingleRootClasspathElement.URL_ELEMENT);
if (!StringUtil.isEmpty(url)) {
return Collections.<SimpleClasspathElement>singletonList(new SingleRootClasspathElement(url));
}
if (name == null || level == null) {
return Collections.emptyList();
}
if (LibraryTablesRegistrar.APPLICATION_LEVEL.equals(level)) {
return Collections.<SimpleClasspathElement>singletonList(new GlobalLibraryReferenceElement(name));
}
//this is needed only for backward compatibility with version before 8
if (project != null) {
final LibraryTable libraryTable = LibraryTablesRegistrar.getInstance().getLibraryTableByLevel(level, project);
if (libraryTable != null) {
final Library library = libraryTable.getLibraryByName(name);
if (library != null) {
return createElements(library);
}
}
}
return Collections.emptyList();
}
public static List<SimpleClasspathElement> createElements(@NotNull Library library) {
final LibraryTable table = library.getTable();
if (table != null && LibraryTablesRegistrar.APPLICATION_LEVEL.equals(table.getTableLevel())) {
return Collections.<SimpleClasspathElement>singletonList(new GlobalLibraryReferenceElement(library.getName()));
}
final List<SimpleClasspathElement> elements = new ArrayList<SimpleClasspathElement>();
for (VirtualFile file : library.getFiles(OrderRootType.CLASSES)) {
elements.add(new SingleRootClasspathElement(file.getUrl()));
}
return elements;
}
public static List<SimpleClasspathElement> createElements(String... urls) {
final List<SimpleClasspathElement> list = new ArrayList<SimpleClasspathElement>();
for (String url : urls) {
list.add(new SingleRootClasspathElement(url));
}
return list;
}
public static List<VirtualFile> convertToFiles(Collection<SimpleClasspathElement> cpeList)
{
VirtualFileManager fileManager = VirtualFileManager.getInstance();
List<VirtualFile> files = new ArrayList<VirtualFile>();
for (SimpleClasspathElement cpe : cpeList) {
for (String fileUrl : cpe.getClassesRootUrls()) {
VirtualFile file = fileManager.findFileByUrl(fileUrl);
if (file != null) {
files.add(file);
}
}
}
return files;
}
}