/* * Copyright 2000-2009 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.intellij.openapi.roots.ui.configuration.libraryEditor; import com.intellij.icons.AllIcons; import com.intellij.ide.IconUtilEx; import com.intellij.openapi.roots.OrderRootType; import com.intellij.openapi.vfs.JarFileSystem; import com.intellij.openapi.vfs.LocalFileSystem; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.openapi.vfs.VirtualFileManager; import com.intellij.openapi.vfs.ex.http.HttpFileSystem; import com.intellij.util.PlatformIcons; import org.jetbrains.annotations.NotNull; import javax.swing.*; import java.io.File; class ItemElement extends LibraryTableTreeContentElement<ItemElement> { protected final String myUrl; private final OrderRootType myRootType; public ItemElement(@NotNull OrderRootTypeElement parent, @NotNull String url, @NotNull OrderRootType rootType, final boolean isJarDirectory, boolean isValid) { super(parent); myUrl = url; myName = getPresentablePath(url).replace('/', File.separatorChar); myColor = getForegroundColor(isValid); setIcon(getIconForUrl(url, isValid, isJarDirectory)); myRootType = rootType; } private static Icon getIconForUrl(final String url, final boolean isValid, final boolean isJarDirectory) { final Icon icon; if (isValid) { VirtualFile presentableFile; if (isJarFileRoot(url)) { presentableFile = LocalFileSystem.getInstance().findFileByPath(getPresentablePath(url)); } else { presentableFile = VirtualFileManager.getInstance().findFileByUrl(url); } if (presentableFile != null && presentableFile.isValid()) { if (presentableFile.getFileSystem() instanceof HttpFileSystem) { icon = PlatformIcons.WEB_ICON; } else { if (presentableFile.isDirectory()) { if (isJarDirectory) { icon = AllIcons.Nodes.JarDirectory; } else { icon = PlatformIcons.DIRECTORY_CLOSED_ICON; } } else { icon = IconUtilEx.getIcon(presentableFile, 0, null); } } } else { icon = AllIcons.Nodes.PpInvalid; } } else { icon = AllIcons.Nodes.PpInvalid; } return icon; } public static String getPresentablePath(final String url) { String presentablePath = VirtualFileManager.extractPath(url); if (isJarFileRoot(url)) { presentablePath = presentablePath.substring(0, presentablePath.length() - JarFileSystem.JAR_SEPARATOR.length()); } return presentablePath; } private static boolean isJarFileRoot(final String url) { return VirtualFileManager.extractPath(url).endsWith(JarFileSystem.JAR_SEPARATOR); } public OrderRootTypeElement getParent() { return (OrderRootTypeElement)getParentDescriptor(); } @NotNull public OrderRootType getRootType() { return myRootType; } public boolean equals(Object o) { if (this == o) return true; if (!(o instanceof ItemElement)) return false; final ItemElement itemElement = (ItemElement)o; if (!getParent().equals(itemElement.getParent())) return false; if (!myRootType.equals(itemElement.myRootType)) return false; if (!myUrl.equals(itemElement.myUrl)) return false; return true; } @NotNull public String getUrl() { return myUrl; } public int hashCode() { int result; result = getParent().hashCode(); result = 29 * result + myUrl.hashCode(); result = 29 * result + myRootType.hashCode(); return result; } }