Skip to content

Commit b4c25eb

Browse files
authored
Set codegen save dir to default if it's invalid (#772)
* Set codegen save dir to default if it's invalid Fixes #764 * Change logger level from info to warning
1 parent 7bfae24 commit b4c25eb

File tree

3 files changed

+38
-0
lines changed

3 files changed

+38
-0
lines changed

core/src/main/java/edu/wpi/grip/core/serialization/CodeGenerationSettingsConverter.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,18 @@
99
import com.thoughtworks.xstream.converters.reflection.ReflectionConverter;
1010
import com.thoughtworks.xstream.io.HierarchicalStreamReader;
1111

12+
import java.nio.file.Files;
13+
import java.nio.file.Paths;
14+
import java.util.logging.Logger;
15+
1216
/**
1317
* XStream converter for {@link edu.wpi.grip.core.settings.CodeGenerationSettings}.
1418
*/
1519
public class CodeGenerationSettingsConverter extends ReflectionConverter {
1620

21+
private static final Logger logger =
22+
Logger.getLogger(CodeGenerationSettingsConverter.class.getName());
23+
1724
private final EventBus eventBus;
1825

1926
@Inject
@@ -28,6 +35,12 @@ public CodeGenerationSettingsConverter(Project project, EventBus eventBus) {
2835
public CodeGenerationSettings unmarshal(HierarchicalStreamReader reader,
2936
UnmarshallingContext context) {
3037
CodeGenerationSettings settings = (CodeGenerationSettings) super.unmarshal(reader, context);
38+
if (!Files.isDirectory(Paths.get(settings.getSaveDir()))) {
39+
logger.warning("Save dir '" + settings.getSaveDir() + "' does not exist; using default");
40+
settings = CodeGenerationSettings.builder(settings)
41+
.saveDir(CodeGenerationSettings.DEFAULT_SETTINGS.getSaveDir())
42+
.build();
43+
}
3144
eventBus.post(new CodeGenerationSettingsChangedEvent(settings));
3245
return settings;
3346
}

core/src/main/java/edu/wpi/grip/core/settings/CodeGenerationSettings.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,22 @@ public static Builder builder() {
106106
return new Builder();
107107
}
108108

109+
/**
110+
* Creates a builder with defaults from the given settings.
111+
*
112+
* @param defaultSettings the default settings for the builder to use
113+
* @return a settings builder
114+
*/
115+
public static Builder builder(CodeGenerationSettings defaultSettings) {
116+
return new Builder()
117+
.language(defaultSettings.getLanguage())
118+
.className(defaultSettings.getClassName())
119+
.implementVisionPipeline(defaultSettings.shouldImplementWpilibPipeline())
120+
.saveDir(defaultSettings.getSaveDir())
121+
.packageName(defaultSettings.getPackageName())
122+
.moduleName(defaultSettings.getModuleName());
123+
}
124+
109125
public static final class Builder {
110126

111127
private String language;

ui/src/main/java/edu/wpi/grip/ui/codegeneration/CodeGenerationOptionsController.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@
1313
import org.bytedeco.javacpp.opencv_core.Mat;
1414

1515
import java.io.File;
16+
import java.nio.file.Files;
17+
import java.util.logging.Logger;
1618

1719
import javafx.application.Platform;
1820
import javafx.collections.FXCollections;
@@ -33,6 +35,9 @@
3335
*/
3436
public class CodeGenerationOptionsController {
3537

38+
private static final Logger logger =
39+
Logger.getLogger(CodeGenerationOptionsController.class.getName());
40+
3641
@Inject
3742
private SettingsProvider settingsProvider;
3843
@Inject
@@ -188,6 +193,10 @@ private void loadPythonControls() {
188193
private void browseForSave() {
189194
DirectoryChooser dc = new DirectoryChooser();
190195
File destDir = new File(settingsProvider.getCodeGenerationSettings().getSaveDir());
196+
if (!Files.isDirectory(destDir.toPath())) {
197+
logger.warning("Loaded save directory does not exist, setting to default.");
198+
destDir = new File(CodeGenerationSettings.DEFAULT_SETTINGS.getSaveDir());
199+
}
191200
dc.setInitialDirectory(destDir);
192201
dc.setTitle("Choose save location");
193202
File save = dc.showDialog(optionsGrid.getScene().getWindow());

0 commit comments

Comments
 (0)