Skip to content

Commit 80c0560

Browse files
committed
Fixed resource error
1 parent a765762 commit 80c0560

File tree

16 files changed

+218
-117
lines changed

16 files changed

+218
-117
lines changed

configuration/src/main/java/com/github/squishylib/configuration/Configuration.java

Lines changed: 63 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919
package com.github.squishylib.configuration;
2020

2121
import com.github.squishylib.common.CompletableFuture;
22-
import com.github.squishylib.common.logger.Logger;
2322
import org.jetbrains.annotations.NotNull;
2423
import org.jetbrains.annotations.Nullable;
2524

@@ -28,6 +27,7 @@
2827
import java.io.InputStream;
2928
import java.nio.file.Files;
3029
import java.util.Optional;
30+
import java.util.logging.Logger;
3131

3232
public interface Configuration extends ConfigurationSection {
3333

@@ -83,6 +83,14 @@ interface Listener {
8383
return Optional.of(extensions[index + 1]);
8484
}
8585

86+
/**
87+
* A class within the module where the
88+
* resource file exists.
89+
*
90+
* @return The project class.
91+
*/
92+
@NotNull Class<?> getProjectClass();
93+
8694
/**
8795
* Used to get the default resource file's path
8896
* from the resource folder.
@@ -181,42 +189,67 @@ interface Listener {
181189
*/
182190
@SuppressWarnings("all")
183191
default @NotNull CompletableFuture<@NotNull Boolean> createFile() {
192+
try {
193+
// Set up the future value provider.
194+
CompletableFuture<Boolean> future = new CompletableFuture<>();
195+
196+
// Get the resource file path.
197+
String resourcePath = this.getResourcePath().orElse(null);
198+
199+
// Check if the path doesnt exist.
200+
if (resourcePath == null) {
201+
future.completeAsync(() -> {
202+
try {
203+
boolean success = this.getFile().createNewFile();
204+
if (!success) {
205+
throw new ConfigurationException(
206+
new RuntimeException(),
207+
"Configuration.createFile()",
208+
"Failed to create the file.",
209+
"Unable to create a empty file with path " + this.getPath()
210+
);
211+
}
212+
return success;
213+
} catch (IOException exception) {
214+
throw new ConfigurationException(
215+
exception,
216+
"Configuration.createFile() create empty file",
217+
"Unable to create a empty file with path " + this.getPath()
218+
);
219+
}
220+
});
221+
return future;
222+
}
223+
224+
future.completeAsync(() -> {
184225

185-
// Set up the future value provider.
186-
CompletableFuture<Boolean> future = new CompletableFuture<>();
226+
// Attempt to copy the default resource file to the configuration location.
227+
try (InputStream input = ConfigurationFactory.class.getResourceAsStream("/" + resourcePath)) {
187228

188-
// Get the resource file path.
189-
String resourcePath = this.getResourcePath().orElse(null);
229+
if (input == null) {
230+
Logger logger = ConfigurationException.getLogger();
231+
logger.info("[Configuration] Could not load resource " + resourcePath);
232+
return false;
233+
}
234+
235+
Files.copy(input, this.getFile().toPath());
236+
return true;
190237

191-
// Check if the path doesnt exist.
192-
if (resourcePath == null) {
193-
future.completeAsync(() -> {
194-
try {
195-
return this.getFile().createNewFile();
196238
} catch (IOException exception) {
197-
throw new RuntimeException(exception.getMessage());
239+
throw new ConfigurationException(
240+
exception,
241+
"Configuration.createFile() create resource",
242+
"Unable to copy the resource file with path " + this.getResourcePath()
243+
);
198244
}
199245
});
200246
return future;
247+
} catch (Exception exception) {
248+
throw new ConfigurationException(
249+
exception,
250+
"Configuration.createFile()",
251+
"Somthing occured while creating the config file. "
252+
);
201253
}
202-
203-
future.completeAsync(() -> {
204-
205-
// Attempt to copy the default resource file to the configuration location.
206-
try (InputStream input = ConfigurationFactory.class.getResourceAsStream("/" + resourcePath)) {
207-
208-
if (input == null) {
209-
Logger logger = new Logger(this.getClass().getPackageName());
210-
logger.info("&c[Configuration] Could not load resource &f" + resourcePath);
211-
return false;
212-
}
213-
Files.copy(input, this.getFile().toPath());
214-
return true;
215-
216-
} catch (IOException exception) {
217-
throw new RuntimeException(exception);
218-
}
219-
});
220-
return future;
221254
}
222255
}

configuration/src/main/java/com/github/squishylib/configuration/ConfigurationException.java

Lines changed: 23 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,17 @@
1818

1919
package com.github.squishylib.configuration;
2020

21-
import com.github.squishylib.common.logger.Logger;
2221
import org.jetbrains.annotations.NotNull;
2322
import org.jetbrains.annotations.Nullable;
2423

24+
import java.util.logging.ConsoleHandler;
25+
import java.util.logging.Level;
26+
import java.util.logging.Logger;
27+
2528
public class ConfigurationException extends RuntimeException {
2629

27-
public static long lastErrorTimeStamp;
30+
private static Logger logger;
31+
private static long lastErrorTimeStamp;
2832

2933
/**
3034
* @param exception The optional instance of the exception.
@@ -42,15 +46,26 @@ public ConfigurationException(@Nullable Exception exception, @NotNull final Stri
4246

4347
lastErrorTimeStamp = System.currentTimeMillis();
4448

45-
Logger logger = new Logger("com.github.squishylib.configuration");
46-
logger.error("source: &f" + source);
47-
if (reason != null) logger.error("reason: &f" + reason);
48-
if (helpMessage != null) logger.error("&7" + String.join("\n&7", helpMessage));
49-
logger.error("&c");
49+
if (logger == null) {
50+
System.out.println("Squishy library logger is null!");
51+
return;
52+
}
53+
54+
logger.severe("source: " + source);
55+
if (reason != null) logger.severe("reason: " + reason);
56+
if (helpMessage != null) logger.severe(String.join("\n", helpMessage));
5057

5158
for (StackTraceElement element : exception.getStackTrace()) {
52-
logger.error("[Trace] " + element.getMethodName() + ":" + element.getLineNumber());
59+
logger.severe("[Trace] " + element.getMethodName() + ":" + element.getLineNumber());
5360
}
5461
}
62+
63+
public static void useLogger(Logger logger) {
64+
ConfigurationException.logger = logger;
65+
}
66+
67+
public static Logger getLogger() {
68+
return ConfigurationException.logger;
69+
}
5570
}
5671

configuration/src/main/java/com/github/squishylib/configuration/ConfigurationFactory.java

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -29,24 +29,24 @@
2929
public enum ConfigurationFactory {
3030
YAML(List.of("yaml", "yml")) {
3131
@Override
32-
public @NotNull Configuration create(@NotNull File file) {
33-
return new YamlConfiguration(file);
32+
public @NotNull Configuration create(@NotNull File file, @NotNull Class<?> clazz) {
33+
return new YamlConfiguration(file, clazz);
3434
}
3535

3636
@Override
37-
public @NotNull Configuration create(@NotNull File folder, @NotNull String pathFromFolder) {
38-
return new YamlConfiguration(folder, pathFromFolder);
37+
public @NotNull Configuration create(@NotNull File folder, @NotNull String pathFromFolder, @NotNull Class<?> clazz) {
38+
return new YamlConfiguration(folder, pathFromFolder, clazz);
3939
}
4040
},
4141
TOML(List.of("toml")) {
4242
@Override
43-
public @NotNull Configuration create(@NotNull File file) {
44-
return new TomlConfiguration(file);
43+
public @NotNull Configuration create(@NotNull File file, @NotNull Class<?> clazz) {
44+
return new TomlConfiguration(file, clazz);
4545
}
4646

4747
@Override
48-
public @NotNull Configuration create(@NotNull File folder, @NotNull String pathFromFolder) {
49-
return new TomlConfiguration(folder, pathFromFolder);
48+
public @NotNull Configuration create(@NotNull File folder, @NotNull String pathFromFolder, @NotNull Class<?> clazz) {
49+
return new TomlConfiguration(folder, pathFromFolder, clazz);
5050
}
5151
};
5252

@@ -60,25 +60,25 @@ public enum ConfigurationFactory {
6060
return this.extensions;
6161
}
6262

63-
public abstract @NotNull Configuration create(@NotNull File file);
63+
public abstract @NotNull Configuration create(@NotNull File file, @NotNull Class<?> clazz);
6464

65-
public abstract @NotNull Configuration create(@NotNull File folder, @NotNull String pathFromFolder);
65+
public abstract @NotNull Configuration create(@NotNull File folder, @NotNull String pathFromFolder, @NotNull Class<?> clazz);
6666

67-
public static @NotNull Optional<Configuration> createConfiguration(@NotNull String extension, @NotNull File file) {
67+
public static @NotNull Optional<Configuration> createConfiguration(@NotNull String extension, @NotNull File file, @NotNull Class<?> clazz) {
6868
for (ConfigurationFactory factory : ConfigurationFactory.values()) {
69-
if (factory.extensions.contains(extension)) return Optional.of(factory.create(file));
69+
if (factory.extensions.contains(extension)) return Optional.of(factory.create(file, clazz));
7070
}
7171
return Optional.empty();
7272
}
7373

74-
public static @NotNull Optional<Configuration> createConfiguration(@NotNull String extension, @NotNull File folder, @NotNull String pathFromFolder) {
74+
public static @NotNull Optional<Configuration> createConfiguration(@NotNull String extension, @NotNull File folder, @NotNull String pathFromFolder, @NotNull Class<?> clazz) {
7575
for (ConfigurationFactory factory : ConfigurationFactory.values()) {
76-
if (factory.extensions.contains(extension)) return Optional.of(factory.create(folder, pathFromFolder));
76+
if (factory.extensions.contains(extension)) return Optional.of(factory.create(folder, pathFromFolder, clazz));
7777
}
7878
return Optional.empty();
7979
}
8080

81-
public static @NotNull Optional<Configuration> createConfiguration(@NotNull File file) {
82-
return ConfigurationFactory.createConfiguration(file.getName().split("\\.")[file.getName().split("\\.").length - 1], file);
81+
public static @NotNull Optional<Configuration> createConfiguration(@NotNull File file, @NotNull Class<?> clazz) {
82+
return ConfigurationFactory.createConfiguration(file.getName().split("\\.")[file.getName().split("\\.").length - 1], file, clazz);
8383
}
8484
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
/*
2+
* Java configuration and database library.
3+
* Copyright (C) 2024 Smuddgge
4+
*
5+
* This program is free software: you can redistribute it and/or modify
6+
* it under the terms of the GNU General Public License as published by
7+
* the Free Software Foundation, either version 3 of the License, or
8+
* (at your option) any later version.
9+
*
10+
* This program is distributed in the hope that it will be useful,
11+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
12+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13+
* GNU General Public License for more details.
14+
*
15+
* You should have received a copy of the GNU General Public License
16+
* along with this program. If not, see <https://www.gnu.org/licenses/>.
17+
*/
18+
19+
package com.github.squishylib.configuration;
20+
21+
import java.util.logging.Logger;
22+
23+
public class ConfigurationSettings {
24+
25+
private static Logger logger;
26+
27+
}

configuration/src/main/java/com/github/squishylib/configuration/PreparedConfigurationFactory.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,13 +26,15 @@ public class PreparedConfigurationFactory {
2626

2727
private final @NotNull ConfigurationFactory factory;
2828
private final @NotNull File file;
29+
private final @NotNull Class<?> clazz;
2930

30-
public PreparedConfigurationFactory(@NotNull ConfigurationFactory factory, @NotNull File file) {
31+
public PreparedConfigurationFactory(@NotNull ConfigurationFactory factory, @NotNull File file, @NotNull Class<?> clazz) {
3132
this.factory = factory;
3233
this.file = file;
34+
this.clazz = clazz;
3335
}
3436

3537
public @NotNull Configuration create() {
36-
return this.factory.create(this.file);
38+
return this.factory.create(this.file, this.clazz);
3739
}
3840
}

configuration/src/main/java/com/github/squishylib/configuration/directory/ConfigurationDirectory.java

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -57,11 +57,13 @@ public class ConfigurationDirectory extends MemoryConfigurationSection {
5757
public static final @NotNull String DATA_FILE_EXTENSION = ".squishystore.yml";
5858

5959
private final @NotNull File directory;
60+
private final @NotNull Class<?> clazz;
6061
private final @NotNull List<String> resourcePathList;
6162

62-
public ConfigurationDirectory(@NotNull final File directory) {
63+
public ConfigurationDirectory(@NotNull final File directory, @NotNull final Class<?> clazz) {
6364
this.directory = directory;
6465
this.resourcePathList = new ArrayList<>();
66+
this.clazz = clazz;
6567
}
6668

6769
public @NotNull File getDirectory() {
@@ -77,7 +79,7 @@ public ConfigurationDirectory(@NotNull final File directory) {
7779
*/
7880
public @NotNull ConfigurationDirectory getDirectory(@NotNull String pathFromThisDirectory) {
7981
if (pathFromThisDirectory.isEmpty()) return this;
80-
return new ConfigurationDirectory(new File(this.directory, pathFromThisDirectory));
82+
return new ConfigurationDirectory(new File(this.directory, pathFromThisDirectory), clazz);
8183
}
8284

8385
public @NotNull String getDirectoryName() {
@@ -119,15 +121,16 @@ public ConfigurationDirectory(@NotNull final File directory) {
119121
if (!file.getName().endsWith(DATA_FILE_EXTENSION)) continue;
120122

121123
// Load the configuration file.
122-
YamlConfiguration configuration = new YamlConfiguration(file);
124+
YamlConfiguration configuration = new YamlConfiguration(file, this.clazz);
123125
configuration.load();
124126
return configuration;
125127
}
126128

127129
// Otherwise, create the data store file.
128130
YamlConfiguration configuration = new YamlConfiguration(
129131
this.getDirectory(),
130-
ConfigurationDirectory.DATA_FILE_EXTENSION
132+
ConfigurationDirectory.DATA_FILE_EXTENSION,
133+
this.clazz
131134
);
132135
configuration.load();
133136
return configuration;
@@ -223,7 +226,7 @@ public ConfigurationDirectory(@NotNull final File directory) {
223226

224227
for (final File file : this.getFiles(true, onlyThisDirectory)) {
225228

226-
final Configuration configuration = ConfigurationFactory.createConfiguration(file).orElseThrow(
229+
final Configuration configuration = ConfigurationFactory.createConfiguration(file, this.clazz).orElseThrow(
227230
() -> new ConfigurationException(
228231
new RuntimeException(),
229232
"ConfigurationDirectory.getConfigurationFiles(onlyThisDirectory)",
@@ -259,7 +262,7 @@ public ConfigurationDirectory(@NotNull final File directory) {
259262
if (factory == null) {
260263

261264
// Attempt to create the configuration.
262-
final Configuration configuration = ConfigurationFactory.createConfiguration(file).orElseThrow();
265+
final Configuration configuration = ConfigurationFactory.createConfiguration(file, this.clazz).orElseThrow();
263266
configuration.load();
264267

265268
if (configuration.getKeys().contains(key)) return Optional.of(configuration);
@@ -270,7 +273,7 @@ public ConfigurationDirectory(@NotNull final File directory) {
270273
if (!factory.getExtensions().contains(extension)) continue;
271274

272275
// Create the configuration.
273-
Configuration configuration = factory.create(file);
276+
Configuration configuration = factory.create(file, this.clazz);
274277
configuration.load();
275278

276279
if (configuration.getKeys().contains(key)) return Optional.of(configuration);
@@ -305,7 +308,7 @@ public ConfigurationDirectory(@NotNull final File directory) {
305308
public @NotNull ConfigurationDirectory appendFile(@NotNull final File file) {
306309

307310
// Create the configuration file.
308-
final Configuration configuration = ConfigurationFactory.createConfiguration(file).orElseThrow(
311+
final Configuration configuration = ConfigurationFactory.createConfiguration(file, this.clazz).orElseThrow(
309312
() -> new ConfigurationException(
310313
new RuntimeException(),
311314
"ConfigurationDirectory.getConfigurationFiles(onlyThisDirectory)",
@@ -447,7 +450,7 @@ public boolean isEmpty() {
447450

448451
// Does the configuration not exist?
449452
if (configuration == null) {
450-
Configuration temp = new YamlConfiguration(this.getDirectory(), "lost_keys.yml").load();
453+
Configuration temp = new YamlConfiguration(this.getDirectory(), "lost_keys.yml", this.clazz).load();
451454
temp.set(key, this.get(key));
452455
continue;
453456
}

0 commit comments

Comments
 (0)