forked from MovingBlocks/TerasologyLauncher
/
DirectoryUtils.java
122 lines (104 loc) · 4.42 KB
/
DirectoryUtils.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
/*
* Copyright 2013 MovingBlocks
*
* 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 org.terasology.launcher.util;
import java.io.File;
import java.io.IOException;
public final class DirectoryUtils {
public static final String LAUNCHER_APPLICATION_DIR_NAME = "TerasologyLauncher";
public static final String GAMES_APPLICATION_DIR_NAME = "Terasology";
public static final String TEMP_DIR_NAME = "temp";
public static final String CACHE_DIR_NAME = "cache";
private static final String PROPERTY_USER_HOME = "user.home";
private static final String ENV_APPDATA = "APPDATA";
private static final String MAC_PATH = "Library/Application Support/";
private DirectoryUtils() {
}
public static void checkDirectory(final File directory) throws IOException {
if (!directory.exists() && !directory.mkdirs()) {
throw new IOException("Can not create directory! " + directory);
}
if (!directory.isDirectory()) {
throw new IOException("Directory is not a directory! " + directory);
}
if (!directory.canRead() || !directory.canWrite()) {
throw new IOException("Can not read from or write into directory! " + directory);
}
}
public static boolean containsGameData(final File gameInstallationPath) {
if ((gameInstallationPath == null) || !gameInstallationPath.exists() || !gameInstallationPath.isDirectory()) {
return false;
}
// TODO: Might need to add "saves" here?
final File[] files = gameInstallationPath.listFiles();
if ((files != null) && (files.length > 0)) {
for (File child : files) {
if (child.isDirectory()
&& (child.getName().equals("SAVED_WORLDS")
|| child.getName().equals("worlds")
|| child.getName().equals("screens")
|| child.getName().equals("screenshots"))
&& containsFiles(child)) {
return true;
}
}
}
return false;
}
public static boolean containsFiles(final File directory) {
if ((directory == null) || !directory.exists() || !directory.isDirectory()) {
return false;
}
final File[] files = directory.listFiles();
if ((files != null) && (files.length > 0)) {
for (File child : files) {
if (child.isDirectory()) {
if (containsFiles(child)) {
return true;
}
} else if (child.isFile()) {
return true;
}
}
}
return false;
}
/**
* Should only be executed once at the start.
*/
public static File getApplicationDirectory(final OperatingSystem os, final String applicationName) {
final File userHome = new File(System.getProperty(PROPERTY_USER_HOME, "."));
File applicationDirectory;
if (os.isWindows()) {
final String envAppData = System.getenv(ENV_APPDATA);
if ((envAppData != null) && (envAppData.length() > 0)) {
applicationDirectory = new File(envAppData, applicationName + '\\');
} else {
applicationDirectory = new File(userHome, applicationName + '\\');
// Alternatives :
// System.getenv("HOME")
// System.getenv("USERPROFILE")
// System.getenv("HOMEDRIVE") + System.getenv("HOMEPATH")
}
} else if (os.isUnix()) {
applicationDirectory = new File(userHome, '.' + applicationName.toLowerCase() + '/');
} else if (os.isMac()) {
applicationDirectory = new File(userHome, MAC_PATH + applicationName + '/');
} else {
applicationDirectory = new File(userHome, applicationName + '/');
}
return applicationDirectory;
}
}