Skip to content

Commit 009b2f3

Browse files
authored
Patch/apply scheduled updates (#412)
* remove rollback on fail * create new instance when reopen mmpk * update comments * clean up imports
1 parent f9e744d commit 009b2f3

File tree

1 file changed

+16
-8
lines changed

1 file changed

+16
-8
lines changed

map/apply-scheduled-updates-to-preplanned-map-area/src/main/java/com/esri/samples/apply_scheduled_updates_to_preplanned_map_area/ApplyScheduledUpdatesToPreplannedMapAreaSample.java

+16-8
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import javafx.scene.control.ButtonType;
2828
import javafx.scene.layout.StackPane;
2929
import javafx.stage.Stage;
30+
3031
import org.apache.commons.io.FileUtils;
3132

3233
import com.esri.arcgisruntime.concurrent.Job;
@@ -48,6 +49,7 @@ public class ApplyScheduledUpdatesToPreplannedMapAreaSample extends Application
4849
private MapView mapView;
4950
private MobileMapPackage mobileMapPackage;
5051
private OfflineMapSyncTask offlineMapSyncTask;
52+
private File tempMobileMapPackageDirectory;
5153

5254
@Override
5355
public void start(Stage stage) {
@@ -69,7 +71,7 @@ public void start(Stage stage) {
6971
stackPane.getChildren().add(mapView);
7072

7173
// create a temporary copy of the local offline map files, so that updating does not overwrite them permanently
72-
File tempMobileMapPackageDirectory = Files.createTempDirectory("canyonlands_offline_map").toFile();
74+
tempMobileMapPackageDirectory = Files.createTempDirectory("canyonlands_offline_map").toFile();
7375
tempMobileMapPackageDirectory.deleteOnExit();
7476
File sourceDirectory = new File("./samples-data/canyonlands/");
7577
FileUtils.copyDirectory(sourceDirectory, tempMobileMapPackageDirectory);
@@ -159,8 +161,6 @@ private void applyScheduledUpdates() {
159161

160162
// set the parameters to download all updates for the mobile map packages
161163
offlineMapSyncParameters.setPreplannedScheduledUpdatesOption(PreplannedScheduledUpdatesOption.DOWNLOAD_ALL_UPDATES);
162-
// set the map package to rollback to the old state should the sync job fail
163-
offlineMapSyncParameters.setRollbackOnFailure(true);
164164

165165
// create a sync job using the parameters
166166
OfflineMapSyncJob offlineMapSyncJob = offlineMapSyncTask.syncOfflineMap(offlineMapSyncParameters);
@@ -171,15 +171,23 @@ private void applyScheduledUpdates() {
171171
if (offlineMapSyncJob.getStatus() == Job.Status.SUCCEEDED) {
172172
OfflineMapSyncResult offlineMapSyncResult = offlineMapSyncJob.getResult();
173173

174-
// if mobile map package reopen is required, close the existing mobile map package and load it again
174+
// check if mobile map package reopen is required
175175
if (offlineMapSyncResult.isMobileMapPackageReopenRequired()) {
176+
// release the mobile map package maps from the map view
177+
mapView.setMap(null);
178+
// close the old mobile map package
176179
mobileMapPackage.close();
177-
mobileMapPackage.loadAsync();
178-
mobileMapPackage.addDoneLoadingListener(() -> {
179-
if (mobileMapPackage.getLoadStatus() == LoadStatus.LOADED && !mobileMapPackage.getMaps().isEmpty()) {
180+
181+
// create a new instance of the now updated mobile map package
182+
MobileMapPackage updatedMobileMapPackage = new MobileMapPackage(tempMobileMapPackageDirectory.toString());
183+
updatedMobileMapPackage.loadAsync();
184+
185+
// wait for the new instance of the mobile map package to load
186+
updatedMobileMapPackage.addDoneLoadingListener(() -> {
187+
if (updatedMobileMapPackage.getLoadStatus() == LoadStatus.LOADED && !updatedMobileMapPackage.getMaps().isEmpty()) {
180188

181189
// add the map from the mobile map package to the map view
182-
mapView.setMap(mobileMapPackage.getMaps().get(0));
190+
mapView.setMap(updatedMobileMapPackage.getMaps().get(0));
183191

184192
} else {
185193
new Alert(Alert.AlertType.ERROR, "Failed to load the mobile map package.").show();

0 commit comments

Comments
 (0)