20 package net.sf.gridarta.model.io;
23 import java.io.IOException;
24 import java.util.regex.Pattern;
26 import org.jetbrains.annotations.NotNull;
59 public static String
getMapPath(@NotNull
final File file, @NotNull
final File baseDir) {
60 @NotNull
final String mapDirName = baseDir.getPath();
61 String mapPath = file.getPath().replace(
'\\',
'/');
62 if (mapPath.startsWith(mapDirName)) {
63 mapPath = mapPath.substring(mapDirName.length());
66 mapPath = mapPath.substring(
new File(mapDirName).
getAbsolutePath().length());
69 if (mapPath.startsWith(
new File(mapDirName).getCanonicalPath())) {
70 mapPath = mapPath.substring(
new File(mapDirName).getCanonicalPath().length());
72 }
catch (
final IOException ignored) {
75 mapPath = mapPath.replace(
'\\',
'/');
88 return path.startsWith(
"/") ||
new File(path).isAbsolute();
99 return !path.startsWith(
"/") && !
new File(path).isAbsolute();
112 public static String
relativeToAbsolute(@NotNull
final String reference, @NotNull
final String relative) {
113 final String normalizedReference = reference.replace(
'\\',
'/');
114 final String normalizedRelative = relative.replace(
'\\',
'/');
116 return normalizedRelative;
118 String work = normalizedReference.substring(0, normalizedReference.lastIndexOf(
'/') + 1) + normalizedRelative;
122 work = PATTERN_REDUNDANT.matcher(work2).replaceAll(
"");
123 }
while (!work2.equals(work));
137 public static String
absoluteToRelative(@NotNull
final String reference, @NotNull
final String absolute) {
138 final String normalizedReference = reference.replace(
'\\',
'/');
139 final String normalizedAbsolute = absolute.replace(
'\\',
'/');
141 return normalizedAbsolute;
145 final int difference =
findDifference(normalizedReference, normalizedAbsolute);
146 final StringBuilder relative =
new StringBuilder(normalizedAbsolute.substring(difference));
147 final CharSequence referencePath = normalizedReference.substring(difference);
149 relative.insert(0,
"../");
151 return relative.toString();
164 private static int findDifference(@NotNull
final CharSequence s1, @NotNull
final CharSequence s2) {
169 for (
int index = 0, l1 = s1.length(), l2 = s2.length(); index < l1 && index < l2 && c1 == c2; index++) {
170 c1 = s1.charAt(index);
171 c2 = s2.charAt(index);
179 return Math.min(s1slash, s2slash) + 1;
190 for (
int i = 0, l = s.length(); i < l; i++) {
191 if (s.charAt(i) == c) {
204 public static String
path(@NotNull
final CharSequence str) {
206 path = path.endsWith(
"/") ? path.substring(0, path.length() - 1) : path;
207 path = path.startsWith(
"file:") ? path.substring(
"file:".length()) :
path;
208 path = PATTERN_SLASHES.matcher(path).replaceAll(
"/");
Utility class for string manipulation.
static String path(@NotNull final CharSequence str)
Create a reasonable path.
Utility class for converting relative map paths to absolute map paths and vice versa.
static int findDifference(@NotNull final CharSequence s1, @NotNull final CharSequence s2)
Helper method that returns the first string index at which two strings denoting paths aren't identica...
static String relativeToAbsolute(@NotNull final String reference, @NotNull final String relative)
Converts a relative path to an absolute path.
Base package of all Gridarta classes.
static final Pattern PATTERN_REDUNDANT
A Pattern that matches redundant directory parts like "dir/../".
static String getAbsolutePath(@NotNull final CharSequence path)
Returns the given path in absolute form.
static final Pattern PATTERN_SLASHES
A Pattern that matches redundant directory separators.
static String absoluteToRelative(@NotNull final String reference, @NotNull final String absolute)
Converts an absolute path to a relative path.
PathManagerUtils()
Private constructor to prevent instantiation.
static boolean isAbsolute(@NotNull final String path)
Check whether a path is absolute.
static final Pattern PATTERN_BACKSLASH
The pattern that matches a single backslash ("\").
static boolean isRelative(@NotNull final String path)
Check whether a path is relative.
static String getMapPath(@NotNull final File file, @NotNull final File baseDir)
Returns a relative path path for a File.
static int findOccurrences(@NotNull final CharSequence s, final char c)
Counts the occurrences of a character within a string.