blob: f6fb05ec9103eb58b0c9fa8d2fd16a8afebbfb99 [file] [log] [blame]
/*
* Copyright 2000-2011 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.framework.detection.impl.ui;
import com.intellij.framework.detection.DetectedFrameworkDescription;
import com.intellij.framework.detection.DetectionExcludesConfiguration;
import com.intellij.framework.detection.FrameworkDetectionContext;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.vfs.VfsUtilCore;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.ui.ColoredTreeCellRenderer;
import com.intellij.ui.SimpleTextAttributes;
import com.intellij.util.containers.ContainerUtil;
import org.jetbrains.annotations.NotNull;
import java.io.File;
import java.util.Collection;
/**
* @author nik
*/
class DetectedFrameworkNode extends DetectedFrameworkTreeNodeBase {
private static final Logger LOG = Logger.getInstance("#com.intellij.framework.detection.impl.ui.DetectedFrameworkNode");
private final DetectedFrameworkDescription myDescription;
private final FrameworkDetectionContext myContext;
public DetectedFrameworkNode(DetectedFrameworkDescription description, FrameworkDetectionContext context) {
super(description);
myDescription = description;
myContext = context;
}
@Override
public void renderNode(ColoredTreeCellRenderer renderer) {
renderer.setIcon(myDescription.getDetector().getFrameworkType().getIcon());
final Collection<? extends VirtualFile> files = myDescription.getRelatedFiles();
final VirtualFile firstFile = ContainerUtil.getFirstItem(files);
LOG.assertTrue(firstFile != null);
if (files.size() == 1) {
renderer.append(firstFile.getName());
appendDirectoryPath(renderer, firstFile.getParent());
}
else {
String commonName = firstFile.getName();
VirtualFile commonParent = firstFile.getParent();
for (VirtualFile file : files) {
if (commonName != null && !commonName.equals(file.getName())) {
commonName = null;
}
if (commonParent != null && !commonParent.equals(file.getParent())) {
commonParent = null;
}
}
renderer.append(files.size() + " " + (commonName != null ? commonName : firstFile.getFileType().getDefaultExtension()) + " files");
if (commonParent != null) {
appendDirectoryPath(renderer, commonParent);
}
}
}
@Override
public String getCheckedDescription() {
return myDescription.getSetupText();
}
@Override
public String getUncheckedDescription() {
return null;
}
@Override
public void disableDetection(DetectionExcludesConfiguration configuration) {
for (VirtualFile file : myDescription.getRelatedFiles()) {
configuration.addExcludedFile(file, myDescription.getDetector().getFrameworkType());
}
}
private void appendDirectoryPath(ColoredTreeCellRenderer renderer, final VirtualFile dir) {
final String path = getRelativePath(dir);
renderer.append(" (" + (path.isEmpty() ? "/" : path) + ")", SimpleTextAttributes.GRAY_ATTRIBUTES);
}
@NotNull
private String getRelativePath(@NotNull VirtualFile file) {
final VirtualFile dir = myContext.getBaseDir();
if (dir != null) {
final String path = VfsUtilCore.getRelativePath(dir, file, File.separatorChar);
if (path != null) {
return path;
}
}
return file.getPresentableUrl();
}
}