blob: 399e03b20a5a2c3600bd27d9a8ff773022545462 [file] [log] [blame]
/*
* Copyright 2000-2013 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.util.ui;
import java.io.File;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
/**
* author: lesya
*/
public class SplitBySeparatorPolicy extends FilePathSplittingPolicy {
@Override
public String getPresentableName(File file, int length) {
String absolutePath = file.getPath();
if (absolutePath.length() <= length) return absolutePath;
String name = file.getName();
if (length < name.length()) return "...";
if (length == name.length()) return name;
List<String> components = getComponents(file);
int currentLength = 0;
List<String> end = new ArrayList<String>();
List<String> begin = new ArrayList<String>();
int size = components.size();
int mult = 1;
int currentIndex = 0;
for (int i = size - 1; i >= 0; i--) {
String s = components.get(currentIndex);
currentLength += s.length();
if (currentLength > (length - 3)) break;
if (mult > 0) {
end.add(s);
}
else {
begin.add(s);
}
currentIndex = currentIndex + i * mult;
mult *= -1;
}
if (end.isEmpty()) {
return name;
}
StringBuffer result = new StringBuffer();
for (Iterator<String> iterator = begin.iterator(); iterator.hasNext();) {
result.append(iterator.next());
}
result.append("...");
for (int i = end.size() - 1; i >=0; i--) {
result.append(end.get(i));
}
return result.toString();
}
private ArrayList<String> getComponents(File file) {
ArrayList<String> result = new ArrayList<String>();
File current = file;
while (current != null) {
result.add(getFileName(current));
current = current.getParentFile();
if (current != null) result.add(File.separator);
}
return result;
}
private String getFileName(File current) {
String result = current.getName();
if (!result.isEmpty()) return result;
String path = current.getPath();
return path.substring(0, path.length() - 1);
}
}