Author: solomax
Date: Thu Sep 11 08:53:57 2014
New Revision: 1624232
URL: http://svn.apache.org/r1624232
Log:
[OPENMEETINGS-1079] download progress bar is added
Added:
openmeetings/branches/3.0.x/src/install/java/org/apache/openmeetings/backup/ProgressHolder.java
openmeetings/trunk/singlewebapp/openmeetings-install/src/main/java/org/apache/openmeetings/backup/ProgressHolder.java
Modified:
openmeetings/branches/3.0.x/src/install/java/org/apache/openmeetings/backup/BackupExport.java
openmeetings/branches/3.0.x/src/install/java/org/apache/openmeetings/cli/Admin.java
openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/admin/backup/BackupPanel.html
openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/admin/backup/BackupPanel.java
openmeetings/trunk/singlewebapp/openmeetings-install/src/main/java/org/apache/openmeetings/backup/BackupExport.java
openmeetings/trunk/singlewebapp/openmeetings-install/src/main/java/org/apache/openmeetings/cli/Admin.java
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/backup/BackupPanel.html
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/backup/BackupPanel.java
Modified:
openmeetings/branches/3.0.x/src/install/java/org/apache/openmeetings/backup/BackupExport.java
URL:
http://svn.apache.org/viewvc/openmeetings/branches/3.0.x/src/install/java/org/apache/openmeetings/backup/BackupExport.java?rev=1624232&r1=1624231&r2=1624232&view=diff
==============================================================================
---
openmeetings/branches/3.0.x/src/install/java/org/apache/openmeetings/backup/BackupExport.java
(original)
+++
openmeetings/branches/3.0.x/src/install/java/org/apache/openmeetings/backup/BackupExport.java
Thu Sep 11 08:53:57 2014
@@ -138,22 +138,24 @@ public class BackupExport {
@Autowired
private RoomOrganisationDao roomOrganisationDao;
- public void performExport(File filePath, File backup_dir, boolean
includeFiles) throws Exception {
+ public void performExport(File filePath, File backup_dir, boolean
includeFiles, ProgressHolder progressHolder) throws Exception {
if (!backup_dir.exists()) {
backup_dir.mkdirs();
}
Serializer simpleSerializer = new Persister();
+ progressHolder.setProgress(0);
/*
* ##################### Backup Organizations
*/
writeList(simpleSerializer, backup_dir, "organizations.xml",
"organisations", organisationDao.get(0,
Integer.MAX_VALUE));
-
+ progressHolder.setProgress(5);
/*
* ##################### Backup Users
*/
exportUsers(backup_dir, usersDao.getAllBackupUsers());
+ progressHolder.setProgress(10);
/*
* ##################### Backup Room
@@ -167,6 +169,7 @@ public class BackupExport {
registry.bind(RoomType.class, RoomTypeConverter.class);
writeList(serializer, backup_dir, "rooms.xml", "rooms",
roomDao.get());
+ progressHolder.setProgress(15);
}
/*
@@ -182,6 +185,7 @@ public class BackupExport {
writeList(serializer, backup_dir,
"rooms_organisation.xml",
"room_organisations",
roomOrganisationDao.get());
+ progressHolder.setProgress(20);
}
/*
@@ -202,6 +206,7 @@ public class BackupExport {
}
writeList(serializer, backup_dir, "appointements.xml",
"appointments", list);
+ progressHolder.setProgress(25);
}
/*
@@ -217,6 +222,7 @@ public class BackupExport {
writeList(serializer, backup_dir, "meetingmembers.xml",
"meetingmembers",
meetingMemberDao.getMeetingMembers());
+ progressHolder.setProgress(30);
}
/*
@@ -224,16 +230,19 @@ public class BackupExport {
*/
writeList(simpleSerializer, backup_dir, "ldapconfigs.xml",
"ldapconfigs", ldapConfigDao.get());
+ progressHolder.setProgress(35);
/*
* ##################### Cluster servers
*/
writeList(simpleSerializer, backup_dir, "servers.xml",
"servers", serverDao.get(0, Integer.MAX_VALUE));
+ progressHolder.setProgress(40);
/*
* ##################### OAuth2 servers
*/
writeList(simpleSerializer, backup_dir, "oauth2servers.xml",
"oauth2servers", auth2Dao.get(0, Integer.MAX_VALUE));
+ progressHolder.setProgress(45);
/*
* ##################### Private Messages
@@ -252,6 +261,7 @@ public class BackupExport {
writeList(serializer, backup_dir, "privateMessages.xml",
"privatemessages", list);
+ progressHolder.setProgress(50);
}
/*
@@ -259,6 +269,7 @@ public class BackupExport {
*/
writeList(simpleSerializer, backup_dir,
"privateMessageFolder.xml",
"privatemessagefolders",
privateMessageFolderDao.get(0, Integer.MAX_VALUE));
+ progressHolder.setProgress(55);
/*
* ##################### User Contacts
@@ -272,6 +283,7 @@ public class BackupExport {
writeList(serializer, backup_dir, "userContacts.xml",
"usercontacts",
userContactsDao.getUserContacts());
+ progressHolder.setProgress(60);
}
/*
@@ -289,6 +301,7 @@ public class BackupExport {
writeList(serializer, backup_dir,
"fileExplorerItems.xml",
"fileExplorerItems", list);
+ progressHolder.setProgress(65);
}
/*
@@ -306,6 +319,7 @@ public class BackupExport {
writeList(serializer, backup_dir, "flvRecordings.xml",
"flvrecordings", list);
+ progressHolder.setProgress(70);
}
/*
@@ -325,6 +339,7 @@ public class BackupExport {
}
writeList(serializer, backup_dir, "roompolls.xml",
"roompolls", list);
+ progressHolder.setProgress(75);
}
/*
@@ -344,6 +359,7 @@ public class BackupExport {
}
writeList(serializer, backup_dir, "configs.xml",
"configs", list);
+ progressHolder.setProgress(80);
}
/*
@@ -362,6 +378,7 @@ public class BackupExport {
}
writeList(serializer, backup_dir, "chat_messages.xml",
"chat_messages", list);
+ progressHolder.setProgress(85);
}
if (includeFiles) {
/*
@@ -398,9 +415,11 @@ public class BackupExport {
File sourceDirRec =
OmFileHelper.getStreamsHibernateDir();
FileHelper.copyRec(sourceDirRec, targetDirRec);
+ progressHolder.setProgress(90);
}
writeZipDir(backup_dir, filePath);
+ progressHolder.setProgress(100);
log.debug("---Done");
}
@@ -494,7 +513,7 @@ public class BackupExport {
File backupFile = new File(backup_dir,
requestedFile);
try {
- performExport(backupFile, backup_dir,
includeFiles);
+ performExport(backupFile, backup_dir,
includeFiles, new ProgressHolder());
response.reset();
response.resetBuffer();
Added:
openmeetings/branches/3.0.x/src/install/java/org/apache/openmeetings/backup/ProgressHolder.java
URL:
http://svn.apache.org/viewvc/openmeetings/branches/3.0.x/src/install/java/org/apache/openmeetings/backup/ProgressHolder.java?rev=1624232&view=auto
==============================================================================
---
openmeetings/branches/3.0.x/src/install/java/org/apache/openmeetings/backup/ProgressHolder.java
(added)
+++
openmeetings/branches/3.0.x/src/install/java/org/apache/openmeetings/backup/ProgressHolder.java
Thu Sep 11 08:53:57 2014
@@ -0,0 +1,35 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") + you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.backup;
+
+import java.io.Serializable;
+
+public class ProgressHolder implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ private int progress;
+
+ public int getProgress() {
+ return progress;
+ }
+
+ public void setProgress(int progress) {
+ this.progress = progress;
+ }
+}
Modified:
openmeetings/branches/3.0.x/src/install/java/org/apache/openmeetings/cli/Admin.java
URL:
http://svn.apache.org/viewvc/openmeetings/branches/3.0.x/src/install/java/org/apache/openmeetings/cli/Admin.java?rev=1624232&r1=1624231&r2=1624232&view=diff
==============================================================================
---
openmeetings/branches/3.0.x/src/install/java/org/apache/openmeetings/cli/Admin.java
(original)
+++
openmeetings/branches/3.0.x/src/install/java/org/apache/openmeetings/cli/Admin.java
Thu Sep 11 08:53:57 2014
@@ -51,6 +51,7 @@ import org.apache.openjpa.lib.log.Log;
import org.apache.openjpa.lib.log.LogFactoryImpl.LogImpl;
import org.apache.openmeetings.backup.BackupExport;
import org.apache.openmeetings.backup.BackupImport;
+import org.apache.openmeetings.backup.ProgressHolder;
import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
import org.apache.openmeetings.db.dao.file.FileExplorerItemDao;
import org.apache.openmeetings.db.dao.record.FlvRecordingDao;
@@ -300,7 +301,7 @@ public class Admin {
backup_dir.mkdirs();
BackupExport export =
getApplicationContext(ctxName).getBean(BackupExport.class);
- export.performExport(f, backup_dir,
includeFiles);
+ export.performExport(f, backup_dir,
includeFiles, new ProgressHolder());
FileHelper.removeRec(backup_dir);
backup_dir.delete();
} catch (Exception e) {
Modified:
openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/admin/backup/BackupPanel.html
URL:
http://svn.apache.org/viewvc/openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/admin/backup/BackupPanel.html?rev=1624232&r1=1624231&r2=1624232&view=diff
==============================================================================
---
openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/admin/backup/BackupPanel.html
(original)
+++
openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/admin/backup/BackupPanel.html
Thu Sep 11 08:53:57 2014
@@ -34,7 +34,8 @@
<label><wicket:ommessage key="1537" /></label> <input
type="checkbox" wicket:id="includeFilesInBackup" />
</div>
<div class="formelement">
- <span wicket:id="progress">[[upload progressbar]]</span>
+ <span wicket:id="progress"></span>
+ <div wicket:id="dprogress"></div>
</div>
<div class="formelement">
<!-- Perform Download -->
Modified:
openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/admin/backup/BackupPanel.java
URL:
http://svn.apache.org/viewvc/openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/admin/backup/BackupPanel.java?rev=1624232&r1=1624231&r2=1624232&view=diff
==============================================================================
---
openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/admin/backup/BackupPanel.java
(original)
+++
openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/admin/backup/BackupPanel.java
Thu Sep 11 08:53:57 2014
@@ -27,6 +27,7 @@ import java.util.Date;
import org.apache.openmeetings.backup.BackupExport;
import org.apache.openmeetings.backup.BackupImport;
+import org.apache.openmeetings.backup.ProgressHolder;
import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
import org.apache.openmeetings.util.CalendarPatterns;
import org.apache.openmeetings.util.OmFileHelper;
@@ -34,6 +35,7 @@ import org.apache.openmeetings.web.admin
import org.apache.openmeetings.web.app.WebSession;
import org.apache.openmeetings.web.util.AjaxDownload;
import org.apache.openmeetings.web.util.BootstrapFileUploadBehavior;
+import org.apache.wicket.ajax.AbstractAjaxTimerBehavior;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.form.AjaxFormSubmitBehavior;
import org.apache.wicket.ajax.markup.html.form.AjaxButton;
@@ -47,9 +49,12 @@ import org.apache.wicket.markup.html.pan
import org.apache.wicket.model.Model;
import org.apache.wicket.util.lang.Bytes;
import org.apache.wicket.util.resource.FileResourceStream;
+import org.apache.wicket.util.time.Duration;
import org.red5.logging.Red5LoggerFactory;
import org.slf4j.Logger;
+import com.googlecode.wicket.jquery.ui.widget.progressbar.ProgressBar;
+
/**
* Panel component to manage Backup Import/Export
*
@@ -72,8 +77,14 @@ public class BackupPanel extends AdminPa
*/
private class BackupForm extends Form<Void> {
private static final long serialVersionUID = 1L;
- private FileUploadField fileUploadField;
- private Model<Boolean> includeFilesInBackup = Model.of(true);
+ private final FileUploadField fileUploadField;
+ private final Model<Boolean> includeFilesInBackup =
Model.of(true);
+ private final AbstractAjaxTimerBehavior timer;
+ private final ProgressBar progressBar;
+ private File backupFile;
+ private Throwable th = null;
+ private boolean started = false;
+ private ProgressHolder progressHolder;
public BackupForm(String id) {
super(id);
@@ -104,30 +115,20 @@ public class BackupPanel extends AdminPa
@Override
protected void onSubmit(AjaxRequestTarget
target, Form<?> form) {
-
- File working_dir =
OmFileHelper.getUploadBackupDir();
-
+ File workingDir =
OmFileHelper.getUploadBackupDir();
String dateString = "backup_" +
CalendarPatterns.getTimeForStreamId(new Date());
-
- File backup_dir = new File(working_dir,
dateString);
- File backupFile = new File(backup_dir,
dateString + ".zip");
-
- try {
-
getBean(BackupExport.class).performExport(
- backupFile,
- backup_dir,
-
includeFilesInBackup.getObject());
-
-
download.setFileName(backupFile.getName());
- download.setResourceStream(new
FileResourceStream(backupFile));
- download.initiate(target);
- } catch (Exception e) {
- log.error("Exception on panel
backup download ", e);
- uploadFeedback.error(e);
- }
+ File backupDir = new File(workingDir,
dateString);
+ backupFile = new File(backupDir,
dateString + ".zip");
+ th = null;
+ started = true;
+ progressHolder = new ProgressHolder();
+
+ timer.restart(target);
+ new Thread(new
BackupProcess(getBean(BackupExport.class), backupDir,
includeFilesInBackup.getObject(), progressHolder)
+ , "Openmeetings - " +
dateString).start();
// repaint the feedback panel so that
it is hidden
- target.add(uploadFeedback);
+ target.add(uploadFeedback,
progressBar.setVisible(true));
}
@Override
@@ -136,7 +137,41 @@ public class BackupPanel extends AdminPa
target.add(uploadFeedback);
}
});
+ add(timer = new
AbstractAjaxTimerBehavior(Duration.ONE_SECOND) {
+ private static final long serialVersionUID = 1L;
+
+ @Override
+ protected void onTimer(AjaxRequestTarget
target) {
+ if (!started) {
+ timer.stop(target);
+ return;
+ }
+ if (th != null) {
+ timer.stop(target);
+ //TODO change text, localize
+ progressBar.setVisible(false);
+ uploadFeedback.error(th);
+ target.add(uploadFeedback);
+ } else {
+
progressBar.setModelObject(progressHolder.getProgress());
+ progressBar.refresh(target);
+ //TODO add current step result
as info
+ }
+ }
+ });
+ add((progressBar = new ProgressBar("dprogress", new
Model<Integer>(0)) {
+ private static final long serialVersionUID = 1L;
+ @Override
+ protected void onComplete(AjaxRequestTarget
target) {
+ timer.stop(target);
+
target.add(progressBar.setVisible(false));
+
+
download.setFileName(backupFile.getName());
+ download.setResourceStream(new
FileResourceStream(backupFile));
+ download.initiate(target);
+ }
+
}).setVisible(false).setOutputMarkupPlaceholderTag(true));
add(fileUploadField.add(new
AjaxFormSubmitBehavior(this, "onchange") {
private static final long serialVersionUID = 1L;
@@ -167,6 +202,29 @@ public class BackupPanel extends AdminPa
add(new Label("cmdLineDesc",
WebSession.getString(1505)).setEscapeModelStrings(false));
}
+ private class BackupProcess implements Runnable {
+ private BackupExport backup;
+ private File backupDir;
+ private boolean includeFiles;
+ private ProgressHolder progressHolder;
+
+ public BackupProcess(BackupExport backup, File
backupDir, boolean includeFiles, ProgressHolder progressHolder) {
+ this.backup = backup;
+ this.backupDir = backupDir;
+ this.includeFiles = includeFiles;
+ this.progressHolder = progressHolder;
+ th = null;
+ }
+
+ public void run() {
+ try {
+ backup.performExport(backupFile,
backupDir, includeFiles, progressHolder);
+ } catch (Exception e) {
+ log.error("Exception on panel backup
download ", e);
+ th = e;
+ }
+ }
+ }
}
public BackupPanel(String id) {
Modified:
openmeetings/trunk/singlewebapp/openmeetings-install/src/main/java/org/apache/openmeetings/backup/BackupExport.java
URL:
http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-install/src/main/java/org/apache/openmeetings/backup/BackupExport.java?rev=1624232&r1=1624231&r2=1624232&view=diff
==============================================================================
---
openmeetings/trunk/singlewebapp/openmeetings-install/src/main/java/org/apache/openmeetings/backup/BackupExport.java
(original)
+++
openmeetings/trunk/singlewebapp/openmeetings-install/src/main/java/org/apache/openmeetings/backup/BackupExport.java
Thu Sep 11 08:53:57 2014
@@ -138,22 +138,25 @@ public class BackupExport {
@Autowired
private RoomOrganisationDao roomOrganisationDao;
- public void performExport(File filePath, File backup_dir, boolean
includeFiles) throws Exception {
+ public void performExport(File filePath, File backup_dir, boolean
includeFiles, ProgressHolder progressHolder) throws Exception {
if (!backup_dir.exists()) {
backup_dir.mkdirs();
}
Serializer simpleSerializer = new Persister();
+ progressHolder.setProgress(0);
/*
* ##################### Backup Organizations
*/
writeList(simpleSerializer, backup_dir, "organizations.xml",
"organisations", organisationDao.get(0,
Integer.MAX_VALUE));
+ progressHolder.setProgress(5);
/*
* ##################### Backup Users
*/
exportUsers(backup_dir, usersDao.getAllBackupUsers());
+ progressHolder.setProgress(10);
/*
* ##################### Backup Room
@@ -167,6 +170,7 @@ public class BackupExport {
registry.bind(RoomType.class, RoomTypeConverter.class);
writeList(serializer, backup_dir, "rooms.xml", "rooms",
roomDao.get());
+ progressHolder.setProgress(15);
}
/*
@@ -182,6 +186,7 @@ public class BackupExport {
writeList(serializer, backup_dir,
"rooms_organisation.xml",
"room_organisations",
roomOrganisationDao.get());
+ progressHolder.setProgress(20);
}
/*
@@ -202,6 +207,7 @@ public class BackupExport {
}
writeList(serializer, backup_dir, "appointements.xml",
"appointments", list);
+ progressHolder.setProgress(25);
}
/*
@@ -217,6 +223,7 @@ public class BackupExport {
writeList(serializer, backup_dir, "meetingmembers.xml",
"meetingmembers",
meetingMemberDao.getMeetingMembers());
+ progressHolder.setProgress(30);
}
/*
@@ -224,16 +231,19 @@ public class BackupExport {
*/
writeList(simpleSerializer, backup_dir, "ldapconfigs.xml",
"ldapconfigs", ldapConfigDao.get());
+ progressHolder.setProgress(35);
/*
* ##################### Cluster servers
*/
writeList(simpleSerializer, backup_dir, "servers.xml",
"servers", serverDao.get(0, Integer.MAX_VALUE));
+ progressHolder.setProgress(40);
/*
* ##################### OAuth2 servers
*/
writeList(simpleSerializer, backup_dir, "oauth2servers.xml",
"oauth2servers", auth2Dao.get(0, Integer.MAX_VALUE));
+ progressHolder.setProgress(45);
/*
* ##################### Private Messages
@@ -252,6 +262,7 @@ public class BackupExport {
writeList(serializer, backup_dir, "privateMessages.xml",
"privatemessages", list);
+ progressHolder.setProgress(50);
}
/*
@@ -259,6 +270,7 @@ public class BackupExport {
*/
writeList(simpleSerializer, backup_dir,
"privateMessageFolder.xml",
"privatemessagefolders",
privateMessageFolderDao.get(0, Integer.MAX_VALUE));
+ progressHolder.setProgress(55);
/*
* ##################### User Contacts
@@ -272,6 +284,7 @@ public class BackupExport {
writeList(serializer, backup_dir, "userContacts.xml",
"usercontacts",
userContactsDao.getUserContacts());
+ progressHolder.setProgress(60);
}
/*
@@ -289,6 +302,7 @@ public class BackupExport {
writeList(serializer, backup_dir,
"fileExplorerItems.xml",
"fileExplorerItems", list);
+ progressHolder.setProgress(65);
}
/*
@@ -306,6 +320,7 @@ public class BackupExport {
writeList(serializer, backup_dir, "flvRecordings.xml",
"flvrecordings", list);
+ progressHolder.setProgress(70);
}
/*
@@ -325,6 +340,7 @@ public class BackupExport {
}
writeList(serializer, backup_dir, "roompolls.xml",
"roompolls", list);
+ progressHolder.setProgress(75);
}
/*
@@ -343,6 +359,7 @@ public class BackupExport {
}
writeList(serializer, backup_dir, "configs.xml",
"configs", list);
+ progressHolder.setProgress(80);
}
/*
@@ -361,6 +378,7 @@ public class BackupExport {
}
writeList(serializer, backup_dir, "chat_messages.xml",
"chat_messages", list);
+ progressHolder.setProgress(85);
}
if (includeFiles) {
/*
@@ -397,9 +415,11 @@ public class BackupExport {
File sourceDirRec =
OmFileHelper.getStreamsHibernateDir();
FileHelper.copyRec(sourceDirRec, targetDirRec);
+ progressHolder.setProgress(90);
}
writeZipDir(backup_dir, filePath);
+ progressHolder.setProgress(100);
log.debug("---Done");
}
@@ -493,7 +513,7 @@ public class BackupExport {
File backupFile = new File(backup_dir,
requestedFile);
try {
- performExport(backupFile, backup_dir,
includeFiles);
+ performExport(backupFile, backup_dir,
includeFiles, new ProgressHolder());
response.reset();
response.resetBuffer();
Added:
openmeetings/trunk/singlewebapp/openmeetings-install/src/main/java/org/apache/openmeetings/backup/ProgressHolder.java
URL:
http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-install/src/main/java/org/apache/openmeetings/backup/ProgressHolder.java?rev=1624232&view=auto
==============================================================================
---
openmeetings/trunk/singlewebapp/openmeetings-install/src/main/java/org/apache/openmeetings/backup/ProgressHolder.java
(added)
+++
openmeetings/trunk/singlewebapp/openmeetings-install/src/main/java/org/apache/openmeetings/backup/ProgressHolder.java
Thu Sep 11 08:53:57 2014
@@ -0,0 +1,35 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") + you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.backup;
+
+import java.io.Serializable;
+
+public class ProgressHolder implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ private int progress;
+
+ public int getProgress() {
+ return progress;
+ }
+
+ public void setProgress(int progress) {
+ this.progress = progress;
+ }
+}
Modified:
openmeetings/trunk/singlewebapp/openmeetings-install/src/main/java/org/apache/openmeetings/cli/Admin.java
URL:
http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-install/src/main/java/org/apache/openmeetings/cli/Admin.java?rev=1624232&r1=1624231&r2=1624232&view=diff
==============================================================================
---
openmeetings/trunk/singlewebapp/openmeetings-install/src/main/java/org/apache/openmeetings/cli/Admin.java
(original)
+++
openmeetings/trunk/singlewebapp/openmeetings-install/src/main/java/org/apache/openmeetings/cli/Admin.java
Thu Sep 11 08:53:57 2014
@@ -51,6 +51,7 @@ import org.apache.openjpa.lib.log.Log;
import org.apache.openjpa.lib.log.LogFactoryImpl.LogImpl;
import org.apache.openmeetings.backup.BackupExport;
import org.apache.openmeetings.backup.BackupImport;
+import org.apache.openmeetings.backup.ProgressHolder;
import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
import org.apache.openmeetings.db.dao.file.FileExplorerItemDao;
import org.apache.openmeetings.db.dao.record.FlvRecordingDao;
@@ -300,7 +301,7 @@ public class Admin {
backup_dir.mkdirs();
BackupExport export =
getApplicationContext(ctxName).getBean(BackupExport.class);
- export.performExport(f, backup_dir,
includeFiles);
+ export.performExport(f, backup_dir,
includeFiles, new ProgressHolder());
FileHelper.removeRec(backup_dir);
backup_dir.delete();
} catch (Exception e) {
Modified:
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/backup/BackupPanel.html
URL:
http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/backup/BackupPanel.html?rev=1624232&r1=1624231&r2=1624232&view=diff
==============================================================================
---
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/backup/BackupPanel.html
(original)
+++
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/backup/BackupPanel.html
Thu Sep 11 08:53:57 2014
@@ -34,7 +34,8 @@
<label><wicket:ommessage key="1537" /></label> <input
type="checkbox" wicket:id="includeFilesInBackup" />
</div>
<div class="formelement">
- <span wicket:id="progress">[[upload progressbar]]</span>
+ <span wicket:id="progress"></span>
+ <div wicket:id="dprogress"></div>
</div>
<div class="formelement">
<!-- Perform Download -->
Modified:
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/backup/BackupPanel.java
URL:
http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/backup/BackupPanel.java?rev=1624232&r1=1624231&r2=1624232&view=diff
==============================================================================
---
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/backup/BackupPanel.java
(original)
+++
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/backup/BackupPanel.java
Thu Sep 11 08:53:57 2014
@@ -27,6 +27,7 @@ import java.util.Date;
import org.apache.openmeetings.backup.BackupExport;
import org.apache.openmeetings.backup.BackupImport;
+import org.apache.openmeetings.backup.ProgressHolder;
import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
import org.apache.openmeetings.util.CalendarPatterns;
import org.apache.openmeetings.util.OmFileHelper;
@@ -34,6 +35,7 @@ import org.apache.openmeetings.web.admin
import org.apache.openmeetings.web.app.WebSession;
import org.apache.openmeetings.web.util.AjaxDownload;
import org.apache.openmeetings.web.util.BootstrapFileUploadBehavior;
+import org.apache.wicket.ajax.AbstractAjaxTimerBehavior;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.form.AjaxFormSubmitBehavior;
import org.apache.wicket.ajax.markup.html.form.AjaxButton;
@@ -47,9 +49,11 @@ import org.apache.wicket.markup.html.pan
import org.apache.wicket.model.Model;
import org.apache.wicket.util.lang.Bytes;
import org.apache.wicket.util.resource.FileResourceStream;
+import org.apache.wicket.util.time.Duration;
import org.red5.logging.Red5LoggerFactory;
import org.slf4j.Logger;
+import com.googlecode.wicket.jquery.ui.widget.progressbar.ProgressBar;
/**
* Panel component to manage Backup Import/Export
*
@@ -72,8 +76,14 @@ public class BackupPanel extends AdminPa
*/
private class BackupForm extends Form<Void> {
private static final long serialVersionUID = 1L;
- private FileUploadField fileUploadField;
- private Model<Boolean> includeFilesInBackup = Model.of(true);
+ private final FileUploadField fileUploadField;
+ private final Model<Boolean> includeFilesInBackup =
Model.of(true);
+ private final AbstractAjaxTimerBehavior timer;
+ private final ProgressBar progressBar;
+ private File backupFile;
+ private Throwable th = null;
+ private boolean started = false;
+ private ProgressHolder progressHolder;
public BackupForm(String id) {
super(id);
@@ -105,29 +115,20 @@ public class BackupPanel extends AdminPa
@Override
protected void onSubmit(AjaxRequestTarget
target, Form<?> form) {
- File working_dir =
OmFileHelper.getUploadBackupDir();
-
+ File workingDir =
OmFileHelper.getUploadBackupDir();
String dateString = "backup_" +
CalendarPatterns.getTimeForStreamId(new Date());
-
- File backup_dir = new File(working_dir,
dateString);
- File backupFile = new File(backup_dir,
dateString + ".zip");
-
- try {
-
getBean(BackupExport.class).performExport(
- backupFile,
- backup_dir,
-
includeFilesInBackup.getObject());
-
-
download.setFileName(backupFile.getName());
- download.setResourceStream(new
FileResourceStream(backupFile));
- download.initiate(target);
- } catch (Exception e) {
- log.error("Exception on panel
backup download ", e);
- uploadFeedback.error(e);
- }
+ File backupDir = new File(workingDir,
dateString);
+ backupFile = new File(backupDir,
dateString + ".zip");
+ th = null;
+ started = true;
+ progressHolder = new ProgressHolder();
+
+ timer.restart(target);
+ new Thread(new
BackupProcess(getBean(BackupExport.class), backupDir,
includeFilesInBackup.getObject(), progressHolder)
+ , "Openmeetings - " +
dateString).start();
// repaint the feedback panel so that
it is hidden
- target.add(uploadFeedback);
+ target.add(uploadFeedback,
progressBar.setVisible(true));
}
@Override
@@ -136,7 +137,41 @@ public class BackupPanel extends AdminPa
target.add(uploadFeedback);
}
});
+ add(timer = new
AbstractAjaxTimerBehavior(Duration.ONE_SECOND) {
+ private static final long serialVersionUID = 1L;
+
+ @Override
+ protected void onTimer(AjaxRequestTarget
target) {
+ if (!started) {
+ timer.stop(target);
+ return;
+ }
+ if (th != null) {
+ timer.stop(target);
+ //TODO change text, localize
+ progressBar.setVisible(false);
+ uploadFeedback.error(th);
+ target.add(uploadFeedback);
+ } else {
+
progressBar.setModelObject(progressHolder.getProgress());
+ progressBar.refresh(target);
+ //TODO add current step result
as info
+ }
+ }
+ });
+ add((progressBar = new ProgressBar("dprogress", new
Model<Integer>(0)) {
+ private static final long serialVersionUID = 1L;
+ @Override
+ protected void onComplete(AjaxRequestTarget
target) {
+ timer.stop(target);
+
target.add(progressBar.setVisible(false));
+
+
download.setFileName(backupFile.getName());
+ download.setResourceStream(new
FileResourceStream(backupFile));
+ download.initiate(target);
+ }
+
}).setVisible(false).setOutputMarkupPlaceholderTag(true));
add(fileUploadField.add(new
AjaxFormSubmitBehavior(this, "onchange") {
private static final long serialVersionUID = 1L;
@@ -167,6 +202,29 @@ public class BackupPanel extends AdminPa
add(new Label("cmdLineDesc",
WebSession.getString(1505)).setEscapeModelStrings(false));
}
+ private class BackupProcess implements Runnable {
+ private BackupExport backup;
+ private File backupDir;
+ private boolean includeFiles;
+ private ProgressHolder progressHolder;
+
+ public BackupProcess(BackupExport backup, File
backupDir, boolean includeFiles, ProgressHolder progressHolder) {
+ this.backup = backup;
+ this.backupDir = backupDir;
+ this.includeFiles = includeFiles;
+ this.progressHolder = progressHolder;
+ th = null;
+ }
+
+ public void run() {
+ try {
+ backup.performExport(backupFile,
backupDir, includeFiles, progressHolder);
+ } catch (Exception e) {
+ log.error("Exception on panel backup
download ", e);
+ th = e;
+ }
+ }
+ }
}
public BackupPanel(String id) {