[LIB-9] Add functional for transcoding vector images
[chesshog.git] / chesshog-graphics / src / main / java / org / hedgecode / chess / img / FilenameUtils.java
1 /*
2  * Copyright (c) 2018-2019. Developed by Hedgecode.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *   http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 package org.hedgecode.chess.img;
18
19 /**
20  * Utilities for path, file name and extension manipulation.
21  *
22  * @author Dmitry Samoshin aka gotty
23  */
24 public final class FilenameUtils {
25
26     private static final String EMPTY_STRING = "";
27
28     private static final char EXTENSION_SEPARATOR = '.';
29
30     private static final char UNIX_SEPARATOR = '/';
31     private static final char WINDOWS_SEPARATOR = '\\';
32
33     private static final String PATH_COLON = ":";
34
35     private static final String JAR_SEPARATOR = ".jar!";
36
37     private static final String OS = System.getProperty("os.name").toLowerCase();
38
39     private static final String WIN_OS_TEMPLATE = "win";
40
41     public static String getName(final String fileName) {
42         if (fileName == null) {
43             return null;
44         }
45         final int endPathIndex = Math.max(
46                 fileName.lastIndexOf(UNIX_SEPARATOR),
47                 fileName.lastIndexOf(WINDOWS_SEPARATOR)
48         );
49         return fileName.substring(endPathIndex + 1);
50     }
51
52     public static String getBaseName(final String fileName) {
53         return removeExtension(
54                 getName(fileName)
55         );
56     }
57
58     public static String getExtension(final String fileName) {
59         if (fileName == null) {
60             return null;
61         }
62         final int extensionPos = fileName.lastIndexOf(EXTENSION_SEPARATOR);
63         return extensionPos < 0
64                 ? EMPTY_STRING
65                 : fileName.substring(extensionPos + 1);
66     }
67
68     public static String getFullPath(final String parentDir, final String... childDirs) {
69         StringBuilder sb = new StringBuilder();
70         sb.append(parentDir);
71         if (childDirs.length > 0) {
72             for (String childDir : childDirs) {
73                 sb.append(isWindows() ? WINDOWS_SEPARATOR : UNIX_SEPARATOR).append(childDir);
74             }
75         }
76         return sb.toString();
77     }
78
79     public static String fixPath(final String path) {
80         if (isWindows()) {
81             return path.startsWith(String.valueOf(UNIX_SEPARATOR))
82                     && path.contains(PATH_COLON)
83                     ? path.substring(1)
84                     : path;
85         }
86         return path;
87     }
88
89     public static String getPathFromJar(final String jarPath) {
90         final int jarEndPos = jarPath.lastIndexOf(JAR_SEPARATOR);
91         return jarEndPos < 0
92                 ? EMPTY_STRING
93                 : jarPath.substring(jarEndPos + JAR_SEPARATOR.length());
94     }
95
96     private static String removeExtension(final String fileName) {
97         if (fileName == null) {
98             return null;
99         }
100         final int extensionPos = fileName.lastIndexOf(EXTENSION_SEPARATOR);
101         return extensionPos < 0
102                 ? fileName
103                 : fileName.substring(0, extensionPos);
104     }
105
106     private static boolean isWindows() {
107         return (OS.contains(WIN_OS_TEMPLATE));
108     }
109
110     private FilenameUtils() {
111         throw new AssertionError(
112                 "No org.hedgecode.chess.img.FilenameUtils instances!"
113         );
114     }
115
116 }