in openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/backup/BackupPanel.java [142:222]
protected void onInitialize() {
add(new CheckBox("includeFilesInBackup", includeFilesInBackup).setOutputMarkupId(true));
// Add a component to download a file without page refresh
final AjaxDownloadBehavior downloader = new AjaxDownloadBehavior(new IResource() {
private static final long serialVersionUID = 1L;
@Override
public void respond(Attributes attributes) {
new FileSystemResource(backupFile.toPath()) {
private static final long serialVersionUID = 1L;
@Override
protected ResourceResponse createResourceResponse(Attributes attr, Path path) {
ResourceResponse response = super.createResourceResponse(attr, path);
response.setCacheDuration(ZERO);
return response;
}
}.respond(attributes);
}
});
download = new BootstrapAjaxButton("download", new ResourceModel("admin.backup.lbl"), this, Buttons.Type.Outline_Primary) {
private static final long serialVersionUID = 1L;
@Override
protected void onSubmit(AjaxRequestTarget target) {
String dateString = "backup_" + CalendarPatterns.getTimeForStreamId(new Date());
backupFile = new File(OmFileHelper.getUploadBackupDir(), dateString + ".zip");
startWithProgress(() -> {
try {
backupExport.performExport(backupFile, includeFilesInBackup.getObject(), progress);
} catch (Exception e) {
log.error("Exception on panel backup download ", e);
th = e;
}
}, dateString, target);
}
@Override
protected void onError(AjaxRequestTarget target) {
// repaint the feedback panel so errors are shown
target.add(feedback);
}
};
download.setIconType(FontAwesome6IconType.file_arrow_down_s);
progressBar = new UpdatableProgressBar("progress", new Model<>(0), BackgroundColorBehavior.Color.Info, true) {
private static final long serialVersionUID = 1L;
@Override
protected IModel<Integer> newValue() {
return Model.of(progress.get());
}
@Override
protected void onPostProcessTarget(IPartialPageRequestHandler target) {
if (th != null) {
stop(target);
feedback.error(th.getMessage());
onComplete(target);
}
super.onPostProcessTarget(target);
}
@Override
protected void onComplete(IPartialPageRequestHandler target) {
progressBar.setVisible(false);
target.add(feedback);
updateButtons(target, true);
downloader.initiate(target);
super.onComplete(target);
}
};
progressBar.updateInterval(Duration.ofSeconds(1)).stop(null).striped(false).setVisible(false).setOutputMarkupPlaceholderTag(true);
add(downloader);
add(progressBar
, download
, new Label("backupSteps", new ResourceModel("admin.backup.steps"))
.setEscapeModelStrings(false)
.setRenderBodyOnly(true));
super.onInitialize();
}