Skip to content

Commit 9dcfae0

Browse files
authored
Set local server appDataPath to short temp dir (#355)
* Set local server appDataPath to short temp dir
1 parent 2a0790d commit 9dcfae0

File tree

2 files changed

+51
-8
lines changed

2 files changed

+51
-8
lines changed

src/main/java/com/esri/samples/localserver/local_server_services/LocalServerServicesController.java

Lines changed: 40 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,9 @@
1717
package com.esri.samples.localserver.local_server_services;
1818

1919
import java.io.File;
20+
import java.io.IOException;
21+
import java.nio.file.Files;
22+
import java.nio.file.Path;
2023

2124
import javafx.application.HostServices;
2225
import javafx.application.Platform;
@@ -31,6 +34,7 @@
3134
import javafx.scene.control.TextField;
3235
import javafx.stage.FileChooser;
3336
import javafx.stage.FileChooser.ExtensionFilter;
37+
import org.apache.commons.io.FileUtils;
3438

3539
import com.esri.arcgisruntime.localserver.LocalFeatureService;
3640
import com.esri.arcgisruntime.localserver.LocalGeoprocessingService;
@@ -50,12 +54,25 @@ public class LocalServerServicesController {
5054

5155
private HostServices hostServices;
5256
private FileChooser packageChooser;
57+
private Path appDataPath;
5358

5459
@FXML
5560
private void initialize() {
5661

5762
if (LocalServer.INSTANCE.checkInstallValid()) {
5863
LocalServer server = LocalServer.INSTANCE;
64+
65+
// configure app data path (path length must be short for some services)
66+
appDataPath = Path.of(System.getProperty("user.home"), "EsriSamples");
67+
if (!appDataPath.toFile().exists()) {
68+
try {
69+
Files.createDirectory(appDataPath);
70+
} catch (IOException ex) {
71+
new Alert(AlertType.ERROR, "Failed to set local server app data path. Some processes may not work.").show();
72+
}
73+
}
74+
LocalServer.INSTANCE.setAppDataPath(appDataPath.toFile().getAbsolutePath());
75+
5976
// log the server status
6077
server.addStatusChangedListener(status -> statusLog.appendText("Server Status: " + status.getNewStatus()
6178
.toString() + "\n"));
@@ -87,17 +104,15 @@ private void initialize() {
87104
serviceOptions.getSelectionModel().selectedItemProperty().addListener(o -> {
88105
packageChooser.setInitialFileName(null);
89106
packageChooser.getExtensionFilters().clear();
90-
switch (serviceOptions.getSelectionModel().getSelectedItem()) {
91-
case "Geoprocessing Service":
92-
packageChooser.getExtensionFilters().add(gpkFilter);
93-
break;
94-
default:
95-
packageChooser.getExtensionFilters().add(mpkFilter);
107+
if ("Geoprocessing Service".equals(serviceOptions.getSelectionModel().getSelectedItem())) {
108+
packageChooser.getExtensionFilters().add(gpkFilter);
109+
} else {
110+
packageChooser.getExtensionFilters().add(mpkFilter);
96111
}
97112
});
98113

99114
// create list view representation of running services
100-
runningServices.setCellFactory(list -> new ListCell<LocalService>() {
115+
runningServices.setCellFactory(list -> new ListCell<>() {
101116

102117
@Override
103118
protected void updateItem(LocalService service, boolean bln) {
@@ -196,4 +211,22 @@ void setHostServices(HostServices hostServices) {
196211

197212
this.hostServices = hostServices;
198213
}
214+
215+
/**
216+
* Stops and releases all resources used in application.
217+
*/
218+
void terminate() {
219+
220+
// make sure all services are stopped before deleting app data
221+
LocalServer.INSTANCE.stopAsync().addDoneListener(() -> {
222+
if (appDataPath != null) {
223+
try {
224+
// delete the app data
225+
FileUtils.deleteDirectory(appDataPath.toFile());
226+
} catch (IOException ex) {
227+
ex.printStackTrace();
228+
}
229+
}
230+
});
231+
}
199232
}

src/main/java/com/esri/samples/localserver/local_server_services/LocalServerServicesSample.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,12 +26,14 @@
2626

2727
public class LocalServerServicesSample extends Application {
2828

29+
private LocalServerServicesController controller;
30+
2931
@Override
3032
public void start(Stage stage) throws IOException {
3133
// set up the scene
3234
FXMLLoader loader = new FXMLLoader(getClass().getResource("/fxml/local_server_services.fxml"));
3335
Parent root = loader.load();
34-
LocalServerServicesController controller = loader.getController();
36+
controller = loader.getController();
3537
controller.setHostServices(getHostServices());
3638
Scene scene = new Scene(root);
3739

@@ -43,6 +45,14 @@ public void start(Stage stage) throws IOException {
4345
stage.show();
4446
}
4547

48+
/**
49+
* Stops and releases all resources used in application.
50+
*/
51+
@Override
52+
public void stop() {
53+
controller.terminate();
54+
}
55+
4656
/**
4757
* Opens and runs application.
4858
*

0 commit comments

Comments
 (0)