/* * 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); } }