package jetbrains.mps.core.tool.environment.util; /*Generated by MPS */ import org.jetbrains.annotations.NonNls; import java.io.File; import java.util.StringTokenizer; import java.util.Stack; public class CanonicalPath { private final String canonicalPath; public CanonicalPath(@NonNls String path) { canonicalPath = convertToCanonical(path); } private static String convertToCanonical(@NonNls String path) { if (path == null || path.length() == 0) { return path; } path = path.replace(File.separatorChar, '/'); final StringTokenizer tokenizer = new StringTokenizer(path, "/"); final Stack<String> stack = new Stack<String>(); while (tokenizer.hasMoreTokens()) { final String token = tokenizer.nextToken(); if ("..".equals(token)) { if (stack.isEmpty()) { return null; } stack.pop(); } else if (token.length() != 0 && !(".".equals(token))) { stack.push(token); } } final StringBuilder result = new StringBuilder(path.length()); if (path.charAt(0) == '/') { result.append("/"); } for (int i = 0; i < stack.size(); i++) { String str = stack.get(i); if (i > 0) { result.append('/'); } result.append(str); } return result.toString(); } public boolean isValidDirectory() { File file = new File(canonicalPath); if (file.exists() && file.isDirectory()) { return true; } return false; } public String getValue() { return canonicalPath; } }