Skip to content

Commit cfb5675

Browse files
authored
Merge pull request #986 from Bram-Hub/dev
Fix User Directory Issue
2 parents 2d3514f + 8fefce0 commit cfb5675

4 files changed

Lines changed: 79 additions & 24 deletions

File tree

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ cmake-build-*/
1212
out/
1313
build/
1414
bin/
15+
installer/
1516

1617
# Native files generated on build, not needed in git
1718
native/windows/lib

src/main/java/edu/rpi/legup/app/LegupPreferences.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package edu.rpi.legup.app;
22

3+
import java.nio.file.Paths;
34
import java.util.EnumMap;
45
import java.util.Map;
56
import java.util.function.Function;
@@ -23,7 +24,7 @@ public class LegupPreferences {
2324
new EnumMap<>(LegupPreference.class);
2425

2526
public enum LegupPreference {
26-
WORK_DIRECTORY("work-directory", System.getProperty("user.dir"), o -> o),
27+
WORK_DIRECTORY("work-directory", defaultUserDirectory(), o -> o),
2728
START_FULL_SCREEN("start-full-screen", false, Boolean::parseBoolean),
2829
AUTO_UPDATE("auto-update", true, Boolean::parseBoolean),
2930
DARK_MODE("night-mode", false, Boolean::parseBoolean),
@@ -33,7 +34,7 @@ public enum LegupPreference {
3334
ALLOW_DEFAULT_RULES("allow-default-rules", false, Boolean::parseBoolean),
3435
AUTO_GENERATE_CASES("auto-generate-cases", true, Boolean::parseBoolean),
3536
IMMEDIATE_FEEDBACK("immediate-feedback", true, Boolean::parseBoolean),
36-
COLOR_THEME_FILE("color-theme-file", System.getProperty("user.dir"), o -> o),
37+
COLOR_THEME_FILE("color-theme-file", defaultUserDirectory(), o -> o),
3738
COLOR_BLIND("color-blind", false, Boolean::parseBoolean);
3839

3940
private final String id;
@@ -124,6 +125,10 @@ private static Object getPreferenceOrDefault(LegupPreference preference) {
124125
return current;
125126
}
126127

128+
private static String defaultUserDirectory() {
129+
return Paths.get(System.getProperty("user.home")).toString();
130+
}
131+
127132
private static void addPreferenceFromDefault(LegupPreference preference) {
128133
preferencesMap.put(preference, getPreferenceOrDefault(preference));
129134
}
Lines changed: 42 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
package edu.rpi.legup.utility;
22

3-
import java.io.File;
3+
import java.io.IOException;
4+
import java.nio.file.Files;
5+
import java.nio.file.Path;
6+
import java.nio.file.Paths;
47
import org.apache.logging.log4j.LogManager;
58
import org.apache.logging.log4j.core.LoggerContext;
69
import org.apache.logging.log4j.core.appender.ConsoleAppender;
@@ -12,35 +15,52 @@
1215

1316
public class Logger {
1417

15-
private static final String LEGUP_HOME =
16-
System.getProperty("user.dir") + File.separator + ".legup" + File.separator;
18+
private static final String LOG_PATTERN =
19+
"[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n";
1720

1821
public static void initLogger() {
1922
LoggerContext context = (LoggerContext) LogManager.getContext(false);
2023
Configuration config = context.getConfiguration();
24+
if (config.getAppender("fileLogger") != null) {
25+
System.setProperty("sun.java2d.noddraw", Boolean.TRUE.toString());
26+
return;
27+
}
28+
2129
ConsoleAppender consoleAppender = config.getAppender("console");
22-
PatternLayout consolePattern = (PatternLayout) consoleAppender.getLayout();
30+
String logPattern = LOG_PATTERN;
31+
if (consoleAppender != null && consoleAppender.getLayout() instanceof PatternLayout) {
32+
logPattern = ((PatternLayout) consoleAppender.getLayout()).getConversionPattern();
33+
}
2334
TimeBasedTriggeringPolicy triggeringPolicy =
2435
TimeBasedTriggeringPolicy.newBuilder().withInterval(1).withModulate(true).build();
25-
PatternLayout patternLayout =
26-
PatternLayout.newBuilder()
27-
.withPattern(consolePattern.getConversionPattern())
28-
.build();
29-
RollingFileAppender rollingFileAppender =
30-
RollingFileAppender.newBuilder()
31-
.setName("fileLogger")
32-
.withFileName(LEGUP_HOME + "legup.log")
33-
.withFilePattern(LEGUP_HOME + "legup-%d{yyyy-MM-dd}.log.gz")
34-
.withPolicy(triggeringPolicy)
35-
.setLayout(patternLayout)
36-
.setConfiguration(config)
37-
.build();
38-
rollingFileAppender.start();
39-
config.addAppender(rollingFileAppender);
40-
LoggerConfig rootLogger = config.getRootLogger();
41-
rootLogger.addAppender(config.getAppender("fileLogger"), null, null);
42-
context.updateLoggers();
36+
PatternLayout patternLayout = PatternLayout.newBuilder().withPattern(logPattern).build();
37+
38+
try {
39+
Path legupHome = getLegupHome();
40+
Files.createDirectories(legupHome);
41+
RollingFileAppender rollingFileAppender =
42+
RollingFileAppender.newBuilder()
43+
.setName("fileLogger")
44+
.withFileName(legupHome.resolve("legup.log").toString())
45+
.withFilePattern(
46+
legupHome.resolve("legup-%d{yyyy-MM-dd}.log.gz").toString())
47+
.withPolicy(triggeringPolicy)
48+
.setLayout(patternLayout)
49+
.setConfiguration(config)
50+
.build();
51+
rollingFileAppender.start();
52+
config.addAppender(rollingFileAppender);
53+
LoggerConfig rootLogger = config.getRootLogger();
54+
rootLogger.addAppender(config.getAppender("fileLogger"), null, null);
55+
context.updateLoggers();
56+
} catch (IOException | RuntimeException e) {
57+
System.err.println("Unable to initialize LEGUP file logging: " + e.getMessage());
58+
}
4359

4460
System.setProperty("sun.java2d.noddraw", Boolean.TRUE.toString());
4561
}
62+
63+
private static Path getLegupHome() {
64+
return Paths.get(System.getProperty("user.home"), ".legup");
65+
}
4666
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package edu.rpi.legup.utility;
2+
3+
import static org.junit.Assert.assertTrue;
4+
5+
import java.nio.file.Files;
6+
import java.nio.file.Path;
7+
import org.junit.Rule;
8+
import org.junit.Test;
9+
import org.junit.rules.TemporaryFolder;
10+
11+
public class LoggerTest {
12+
13+
@Rule public TemporaryFolder temporaryFolder = new TemporaryFolder();
14+
15+
@Test
16+
public void initLoggerCreatesLegupHomeDirectory() throws Exception {
17+
String originalUserHome = System.getProperty("user.home");
18+
Path userHome = temporaryFolder.newFolder("home").toPath();
19+
System.setProperty("user.home", userHome.toString());
20+
21+
try {
22+
Logger.initLogger();
23+
24+
assertTrue(Files.isDirectory(userHome.resolve(".legup")));
25+
} finally {
26+
System.setProperty("user.home", originalUserHome);
27+
}
28+
}
29+
}

0 commit comments

Comments
 (0)