Author: sebawagner
Date: Sun Oct 14 12:30:02 2012
New Revision: 1398067
URL: http://svn.apache.org/viewvc?rev=1398067&view=rev
Log:
OPENMEETINGS-444 - basic functionality, however backup does currently not work
at all (see OPENMEETINGS-445)
Added:
incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/util/
incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/util/AjaxDownload.java
Modified:
incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/components/admin/backup/BackupPanel.html
incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/components/admin/backup/BackupPanel.java
Modified:
incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/components/admin/backup/BackupPanel.html
URL:
http://svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/components/admin/backup/BackupPanel.html?rev=1398067&r1=1398066&r2=1398067&view=diff
==============================================================================
---
incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/components/admin/backup/BackupPanel.html
(original)
+++
incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/components/admin/backup/BackupPanel.html
Sun Oct 14 12:30:02 2012
@@ -38,9 +38,9 @@
<span wicket:id="progress">[[upload progressbar]]</span>
<br/>
<!-- Perform Download -->
- <input type="submit" value="System Import"
wicket:id="ajax-backup-download-button" />
+ <input type="submit" value="System Import"
wicket:id="ajax-backup-upload-button" />
<!-- Perform Upload -->
- <input type="submit" value="System Backup"
wicket:id="ajax-backup-upload-button" />
+ <input type="submit" value="System Backup"
wicket:id="ajax-backup-download-button" />
<br/>
<!-- Max upload size -->
<wicket:ommessage key="1491" />
Modified:
incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/components/admin/backup/BackupPanel.java
URL:
http://svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/components/admin/backup/BackupPanel.java?rev=1398067&r1=1398066&r2=1398067&view=diff
==============================================================================
---
incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/components/admin/backup/BackupPanel.java
(original)
+++
incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/components/admin/backup/BackupPanel.java
Sun Oct 14 12:30:02 2012
@@ -18,19 +18,33 @@
*/
package org.apache.openmeetings.web.components.admin.backup;
+import java.io.File;
+import java.io.IOException;
+import java.util.Date;
+
+import org.apache.openmeetings.OpenmeetingsVariables;
import org.apache.openmeetings.data.basic.dao.ConfigurationDaoImpl;
+import org.apache.openmeetings.servlet.outputhandler.BackupExport;
+import org.apache.openmeetings.servlet.outputhandler.BackupImportController;
import org.apache.openmeetings.utils.ImportHelper;
+import org.apache.openmeetings.utils.OmFileHelper;
+import org.apache.openmeetings.utils.math.CalendarPatterns;
import org.apache.openmeetings.web.app.Application;
import org.apache.openmeetings.web.components.admin.AdminPanel;
+import org.apache.openmeetings.web.util.AjaxDownload;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.markup.html.form.AjaxButton;
import
org.apache.wicket.extensions.ajax.markup.html.form.upload.UploadProgressBar;
import org.apache.wicket.markup.html.form.CheckBox;
import org.apache.wicket.markup.html.form.Form;
+import org.apache.wicket.markup.html.form.upload.FileUpload;
import org.apache.wicket.markup.html.form.upload.FileUploadField;
import org.apache.wicket.markup.html.panel.FeedbackPanel;
import org.apache.wicket.model.Model;
import org.apache.wicket.util.lang.Bytes;
+import org.apache.wicket.util.resource.FileResourceStream;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
/**
* Panel component to manage Backup Import/Export
@@ -40,8 +54,11 @@ import org.apache.wicket.util.lang.Bytes
*/
public class BackupPanel extends AdminPanel {
+ private static final Logger log = Red5LoggerFactory.getLogger(
+ BackupPanel.class, OpenmeetingsVariables.webAppRootKey);
+
private static final long serialVersionUID = -1L;
-
+
// Create feedback panels
final FeedbackPanel uploadFeedback;
@@ -56,6 +73,7 @@ public class BackupPanel extends AdminPa
private static final long serialVersionUID = 1L;
FileUploadField fileUploadField;
+ CheckBox includeFilesInBackup;
public BackupForm(String id) {
super(id);
@@ -67,20 +85,50 @@ public class BackupPanel extends AdminPa
fileUploadField = new FileUploadField("fileInput");
add(fileUploadField);
- CheckBox includeFilesInBackup = new CheckBox(
- "includeFilesInBackup", Model.of(true));
+ includeFilesInBackup = new
CheckBox("includeFilesInBackup",
+ Model.of(true));
add(includeFilesInBackup);
// Set maximum size controlled by configuration
setMaxSize(Bytes.bytes(ImportHelper.getMaxUploadSize(Application
.getBean(ConfigurationDaoImpl.class))));
-
+
+ // Add a component to download a file without page
refresh
+ final AjaxDownload download = new AjaxDownload();
+ add(download);
+
// add an download button
add(new AjaxButton("ajax-backup-download-button", this)
{
private static final long serialVersionUID =
839803820502260006L;
@Override
protected void onSubmit(AjaxRequestTarget
target, Form<?> form) {
+
+ File working_dir =
OmFileHelper.getUploadBackupDir();
+
+ String dateString = "backup_"
+ +
CalendarPatterns.getTimeForStreamId(new Date());
+
+ File backup_dir = new File(working_dir,
dateString);
+ String requestedFile = dateString +
".zip";
+ File backupFile = new File(backup_dir,
requestedFile);
+
+ try {
+
Application.getBean(BackupExport.class).performExport(
+ backupFile,
+ backup_dir,
+
includeFilesInBackup.getConvertedInput()
+
.booleanValue());
+
+
download.setFileName(backupFile.getName());
+ download.setResourceStream(new
FileResourceStream(
+ new
org.apache.wicket.util.file.File(backupFile)));
+
+ } catch (Exception e) {
+ log.error("Exception on panel
backup download ", e);
+ uploadFeedback.error(e);
+ }
+
// repaint the feedback panel so that
it is hidden
target.add(uploadFeedback);
@@ -99,6 +147,22 @@ public class BackupPanel extends AdminPa
@Override
protected void onSubmit(AjaxRequestTarget
target, Form<?> form) {
+ FileUpload upload =
fileUploadField.getFileUpload();
+ try {
+ if (upload.getInputStream() ==
null) {
+
uploadFeedback.error("File is empty");
+ return;
+ }
+
Application.getBean(BackupImportController.class)
+
.performImport(upload.getInputStream());
+ } catch (IOException e) {
+ log.error("IOException on panel
backup upload ", e);
+ uploadFeedback.error(e);
+ } catch (Exception e) {
+ log.error("Exception on panel
backup upload ", e);
+ uploadFeedback.error(e);
+ }
+
// repaint the feedback panel so that
it is hidden
target.add(uploadFeedback);
@@ -110,6 +174,7 @@ public class BackupPanel extends AdminPa
target.add(uploadFeedback);
}
});
+
}
}
Added:
incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/util/AjaxDownload.java
URL:
http://svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/util/AjaxDownload.java?rev=1398067&view=auto
==============================================================================
---
incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/util/AjaxDownload.java
(added)
+++
incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/util/AjaxDownload.java
Sun Oct 14 12:30:02 2012
@@ -0,0 +1,82 @@
+package org.apache.openmeetings.web.util;
+
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.behavior.AbstractAjaxBehavior;
+import org.apache.wicket.request.handler.resource.ResourceStreamRequestHandler;
+import org.apache.wicket.request.resource.ContentDisposition;
+import org.apache.wicket.util.resource.IResourceStream;
+
+/**
+ * see: <a
href="https://cwiki.apache.org/confluence/display/WICKET/AJAX+update+and+file+download+in+one+blow">
+ *
https://cwiki.apache.org/confluence/display/WICKET/AJAX+update+and+file+download+in+one+blow</href>
+ *
+ */
+public class AjaxDownload extends AbstractAjaxBehavior {
+
+ private static final long serialVersionUID = 1L;
+
+ private boolean addAntiCache;
+
+ private String fileName;
+ private IResourceStream resourceStream;
+
+ public AjaxDownload() {
+ this(true);
+ }
+
+ public AjaxDownload(boolean addAntiCache) {
+ super();
+ this.addAntiCache = addAntiCache;
+ }
+
+ /**
+ * Call this method to initiate the download.
+ */
+ public void initiate(AjaxRequestTarget target) {
+ String url = getCallbackUrl().toString();
+
+ if (addAntiCache) {
+ url = url + (url.contains("?") ? "&" : "?");
+ url = url + "antiCache=" + System.currentTimeMillis();
+ }
+
+ // the timeout is needed to let Wicket release the channel
+ target.appendJavaScript("setTimeout(\"window.location.href='" +
url
+ + "'\", 100);");
+ }
+
+ public void onRequest() {
+ ResourceStreamRequestHandler handler = new
ResourceStreamRequestHandler(
+ getResourceStream(), getFileName());
+ handler.setContentDisposition(ContentDisposition.ATTACHMENT);
+
getComponent().getRequestCycle().scheduleRequestHandlerAfterCurrent(
+ handler);
+ }
+
+ /**
+ * Override this method for a file name which will let the browser
prompt
+ * with a save/open dialog.
+ *
+ * @see ResourceStreamRequestTarget#getFileName()
+ */
+ protected String getFileName() {
+ return this.fileName;
+ }
+
+ public void setFileName(String fileName) {
+ this.fileName = fileName;
+ }
+
+ /**
+ * Hook method providing the actual resource stream.
+ */
+ protected IResourceStream getResourceStream() {
+ return resourceStream;
+
+ }
+
+ public void setResourceStream(IResourceStream resourceStream) {
+ this.resourceStream = resourceStream;
+ }
+
+}