20 package net.sf.gridarta.utils;
23 import java.io.IOException;
24 import java.util.regex.Pattern;
25 import org.jetbrains.annotations.NotNull;
58 public static String
getMapPath(@NotNull
final File file, @NotNull
final File baseDir) {
59 final String mapDirName = baseDir.getPath();
60 String mapPath = file.getPath().replace(
'\\',
'/');
61 if (mapPath.startsWith(mapDirName)) {
62 mapPath = mapPath.substring(mapDirName.length());
65 mapPath = mapPath.substring(
new File(mapDirName).
getAbsolutePath().length());
68 if (mapPath.startsWith(
new File(mapDirName).getCanonicalPath())) {
69 mapPath = mapPath.substring(
new File(mapDirName).getCanonicalPath().length());
71 }
catch (
final IOException ignored) {
74 mapPath = mapPath.replace(
'\\',
'/');
87 return path.startsWith(
"/") ||
new File(
path).isAbsolute();
98 return !
path.startsWith(
"/") && !
new File(
path).isAbsolute();
111 public static String
relativeToAbsolute(@NotNull
final String reference, @NotNull
final String relative) {
112 final String normalizedRelative = relative.replace(
'\\',
'/');
114 return normalizedRelative;
117 final String normalizedReference = reference.replace(
'\\',
'/');
118 String work = normalizedReference.substring(0, normalizedReference.lastIndexOf(
'/') + 1) + normalizedRelative;
123 }
while (!work2.equals(work));
137 public static String
absoluteToRelative(@NotNull
final String reference, @NotNull
final String absolute) {
138 final String normalizedAbsolute = absolute.replace(
'\\',
'/');
140 return normalizedAbsolute;
145 final String normalizedReference = reference.replace(
'\\',
'/');
146 final int difference =
findDifference(normalizedReference, normalizedAbsolute);
147 final StringBuilder relative =
new StringBuilder(normalizedAbsolute.substring(difference));
148 final CharSequence referencePath = normalizedReference.substring(difference);
150 relative.insert(0,
"../");
152 return relative.toString();
165 private static int findDifference(@NotNull
final CharSequence s1, @NotNull
final CharSequence s2) {
170 for (
int index = 0, l1 = s1.length(), l2 = s2.length(); index < l1 && index < l2 && c1 == c2; index++) {
171 c1 = s1.charAt(index);
172 c2 = s2.charAt(index);
180 return Math.min(s1slash, s2slash) + 1;
191 for (
int i = 0, l = s.length(); i < l; i++) {
192 if (s.charAt(i) == c) {
205 public static String
path(@NotNull
final CharSequence str) {