You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openmeetings.apache.org by se...@apache.org on 2012/10/14 14:30:02 UTC
svn commit: r1398067 - in
/incubator/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web:
components/admin/backup/BackupPanel.html
components/admin/backup/BackupPanel.java util/ util/AjaxDownload.java
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;
+ }
+
+}