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;
+       }
+
+}


Reply via email to