Author: solomax
Date: Wed Mar 29 14:03:28 2017
New Revision: 1789370

URL: http://svn.apache.org/viewvc?rev=1789370&view=rev
Log:
[OPENMEETINGS-1617] backup export is improved

Modified:
    
openmeetings/application/branches/3.2.x/openmeetings-install/src/main/java/org/apache/openmeetings/backup/BackupExport.java
    
openmeetings/application/branches/3.2.x/openmeetings-install/src/main/java/org/apache/openmeetings/cli/Admin.java
    
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/backup/BackupPanel.java
    
openmeetings/application/trunk/openmeetings-install/src/main/java/org/apache/openmeetings/backup/BackupExport.java
    
openmeetings/application/trunk/openmeetings-install/src/main/java/org/apache/openmeetings/cli/Admin.java
    
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/backup/BackupPanel.java

Modified: 
openmeetings/application/branches/3.2.x/openmeetings-install/src/main/java/org/apache/openmeetings/backup/BackupExport.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-install/src/main/java/org/apache/openmeetings/backup/BackupExport.java?rev=1789370&r1=1789369&r2=1789370&view=diff
==============================================================================
--- 
openmeetings/application/branches/3.2.x/openmeetings-install/src/main/java/org/apache/openmeetings/backup/BackupExport.java
 (original)
+++ 
openmeetings/application/branches/3.2.x/openmeetings-install/src/main/java/org/apache/openmeetings/backup/BackupExport.java
 Wed Mar 29 14:03:28 2017
@@ -25,6 +25,7 @@ import static org.apache.openmeetings.ut
 import static org.apache.openmeetings.util.OmFileHelper.IMPORT_DIR;
 import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
 
+import java.io.ByteArrayOutputStream;
 import java.io.File;
 import java.io.FileOutputStream;
 import java.io.IOException;
@@ -81,13 +82,13 @@ import org.slf4j.Logger;
 import org.springframework.beans.factory.annotation.Autowired;
 
 /**
- * 
+ *
  * @author sebastianwagner
- * 
+ *
  */
 public class BackupExport {
        private static final Logger log = 
Red5LoggerFactory.getLogger(BackupExport.class, webAppRootKey);
-       private static final String BACKUP_COMMENT = 
+       private static final String BACKUP_COMMENT =
                        "###############################################\n"
                        + "This File is auto-generated by the Backup Tool \n"
                        + "you should use the BackupPanel to modify or change 
this file \n"
@@ -131,315 +132,297 @@ public class BackupExport {
        @Autowired
        private RoomGroupDao roomGroupDao;
 
-       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 Groups
-                */
-               writeList(simpleSerializer, backup_dir, "organizations.xml", 
"organisations", groupDao.get(0, Integer.MAX_VALUE));
-               progressHolder.setProgress(5);
-               /*
-                * ##################### Backup Users
-                */
-               exportUsers(backup_dir, userDao.getAllBackupUsers());
-               progressHolder.setProgress(10);
-
-               /*
-                * ##################### Backup Room
-                */
-               {
-                       Registry registry = new Registry();
-                       Strategy strategy = new RegistryStrategy(registry);
-                       Serializer serializer = new Persister(strategy);
-       
-                       registry.bind(User.class, UserConverter.class);
-                       registry.bind(Room.Type.class, RoomTypeConverter.class);
-                       
-                       writeList(serializer, backup_dir, "rooms.xml", "rooms", 
roomDao.get());
-                       progressHolder.setProgress(15);
+       public void performExport(File zip, boolean includeFiles, 
ProgressHolder progressHolder) throws Exception {
+               if (!zip.getParentFile().exists()) {
+                       zip.getParentFile().mkdirs();
                }
+               try (FileOutputStream fos = new FileOutputStream(zip); 
ZipOutputStream zos = new ZipOutputStream(fos)) {
 
-               /*
-                * ##################### Backup Room Groups
-                */
-               {
-                       Registry registry = new Registry();
-                       Strategy strategy = new RegistryStrategy(registry);
-                       Serializer serializer = new Persister(strategy);
-       
-                       registry.bind(Group.class, GroupConverter.class);
-                       registry.bind(Room.class, RoomConverter.class);
-                       
-                       writeList(serializer, backup_dir, 
"rooms_organisation.xml", "room_organisations", roomGroupDao.get());
-                       progressHolder.setProgress(17);
-               }
+                       Serializer ser = new Persister();
 
-               /*
-                * ##################### Backup Calendars
-                */
-               {
-                       List<OmCalendar> list = calendarDao.get();
-                       Registry registry = new Registry();
-                       Strategy strategy = new RegistryStrategy(registry);
-                       Serializer serializer = new Persister(strategy);
-                       registry.bind(User.class, UserConverter.class);
+                       progressHolder.setProgress(0);
+                       /*
+                        * ##################### Backup Groups
+                        */
+                       writeList(ser, zos, "organizations.xml", 
"organisations", groupDao.get(0, Integer.MAX_VALUE));
+                       progressHolder.setProgress(5);
+                       /*
+                        * ##################### Backup Users
+                        */
+                       exportUsers(zos, userDao.getAllBackupUsers());
+                       progressHolder.setProgress(10);
 
-                       writeList(serializer, backup_dir, "calendars.xml", 
"calendars", list);
-                       progressHolder.setProgress(22);
-               }
-               /*
-                * ##################### Backup Appointments
-                */
-               {
-                       List<Appointment> list = appointmentDao.get();
-                       Registry registry = new Registry();
-                       Strategy strategy = new RegistryStrategy(registry);
-                       Serializer serializer = new Persister(strategy);
-
-                       registry.bind(User.class, UserConverter.class);
-                       registry.bind(Appointment.Reminder.class, 
AppointmentReminderTypeConverter.class);
-                       registry.bind(Room.class, RoomConverter.class);
-                       if (list != null && !list.isEmpty()) {
-                               for (Appointment a : list) {
-                                       if (a.getStart() != null) {
-                                               
registry.bind(a.getStart().getClass(), DateConverter.class);
-                                               break;
-                                       } else if (a.getInserted() != null) {
-                                               
registry.bind(a.getInserted().getClass(), DateConverter.class);
-                                               break;
+                       /*
+                        * ##################### Backup Room
+                        */
+                       {
+                               Registry registry = new Registry();
+                               Strategy strategy = new 
RegistryStrategy(registry);
+                               Serializer serializer = new Persister(strategy);
+
+                               registry.bind(User.class, UserConverter.class);
+                               registry.bind(Room.Type.class, 
RoomTypeConverter.class);
+
+                               writeList(serializer, zos, "rooms.xml", 
"rooms", roomDao.get());
+                               progressHolder.setProgress(15);
+                       }
+
+                       /*
+                        * ##################### Backup Room Groups
+                        */
+                       {
+                               Registry registry = new Registry();
+                               Strategy strategy = new 
RegistryStrategy(registry);
+                               Serializer serializer = new Persister(strategy);
+
+                               registry.bind(Group.class, 
GroupConverter.class);
+                               registry.bind(Room.class, RoomConverter.class);
+
+                               writeList(serializer, zos, 
"rooms_organisation.xml", "room_organisations", roomGroupDao.get());
+                               progressHolder.setProgress(17);
+                       }
+
+                       /*
+                        * ##################### Backup Calendars
+                        */
+                       {
+                               List<OmCalendar> list = calendarDao.get();
+                               Registry registry = new Registry();
+                               Strategy strategy = new 
RegistryStrategy(registry);
+                               Serializer serializer = new Persister(strategy);
+                               registry.bind(User.class, UserConverter.class);
+
+                               writeList(serializer, zos, "calendars.xml", 
"calendars", list);
+                               progressHolder.setProgress(22);
+                       }
+                       /*
+                        * ##################### Backup Appointments
+                        */
+                       {
+                               List<Appointment> list = appointmentDao.get();
+                               Registry registry = new Registry();
+                               Strategy strategy = new 
RegistryStrategy(registry);
+                               Serializer serializer = new Persister(strategy);
+
+                               registry.bind(User.class, UserConverter.class);
+                               registry.bind(Appointment.Reminder.class, 
AppointmentReminderTypeConverter.class);
+                               registry.bind(Room.class, RoomConverter.class);
+                               if (list != null && !list.isEmpty()) {
+                                       for (Appointment a : list) {
+                                               if (a.getStart() != null) {
+                                                       
registry.bind(a.getStart().getClass(), DateConverter.class);
+                                                       break;
+                                               } else if (a.getInserted() != 
null) {
+                                                       
registry.bind(a.getInserted().getClass(), DateConverter.class);
+                                                       break;
+                                               }
                                        }
                                }
+
+                               writeList(serializer, zos, "appointements.xml", 
"appointments", list);
+                               progressHolder.setProgress(25);
                        }
 
-                       writeList(serializer, backup_dir, "appointements.xml", 
"appointments", list);
-                       progressHolder.setProgress(25);
-               }
+                       /*
+                        * ##################### Backup Meeting Members
+                        */
+                       {
+                               Registry registry = new Registry();
+                               Strategy strategy = new 
RegistryStrategy(registry);
+                               Serializer serializer = new Persister(strategy);
+
+                               registry.bind(User.class, UserConverter.class);
+                               registry.bind(Appointment.class, 
AppointmentConverter.class);
+
+                               writeList(serializer, zos, "meetingmembers.xml",
+                                               "meetingmembers", 
meetingMemberDao.getMeetingMembers());
+                               progressHolder.setProgress(30);
+                       }
 
-               /*
-                * ##################### Backup Meeting Members
-                */
-               {
-                       Registry registry = new Registry();
-                       Strategy strategy = new RegistryStrategy(registry);
-                       Serializer serializer = new Persister(strategy);
-       
-                       registry.bind(User.class, UserConverter.class);
-                       registry.bind(Appointment.class, 
AppointmentConverter.class);
-                       
-                       writeList(serializer, backup_dir, "meetingmembers.xml",
-                                       "meetingmembers", 
meetingMemberDao.getMeetingMembers());
-                       progressHolder.setProgress(30);
-               }
+                       /*
+                        * ##################### LDAP Configs
+                        */
+                       List<LdapConfig> ldapList = ldapConfigDao.get();
+                       if (!ldapList.isEmpty()) {
+                               ldapList.remove(0);
+                       }
+                       writeList(ser, zos, "ldapconfigs.xml", "ldapconfigs", 
ldapList);
+                       progressHolder.setProgress(35);
 
-               /*
-                * ##################### LDAP Configs
-                */
-               List<LdapConfig> ldapList = ldapConfigDao.get();
-               if (!ldapList.isEmpty()) {
-                       ldapList.remove(0);
-               }
-               writeList(simpleSerializer, backup_dir, "ldapconfigs.xml", 
"ldapconfigs", ldapList);
-               progressHolder.setProgress(35);
+                       /*
+                        * ##################### Cluster servers
+                        */
+                       writeList(ser, zos, "servers.xml", "servers", 
serverDao.get(0, Integer.MAX_VALUE));
+                       progressHolder.setProgress(40);
 
-               /*
-                * ##################### 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
-                */
-               {
-                       List<PrivateMessage> list = privateMessageDao.get(0, 
Integer.MAX_VALUE);
-                       Registry registry = new Registry();
-                       Strategy strategy = new RegistryStrategy(registry);
-                       Serializer serializer = new Persister(strategy);
-       
-                       registry.bind(User.class, UserConverter.class);
-                       registry.bind(Room.class, RoomConverter.class);
-                       if (list != null && !list.isEmpty()) {
-                               
registry.bind(list.get(0).getInserted().getClass(), DateConverter.class);
-                       }
-                       
-                       writeList(serializer, backup_dir, "privateMessages.xml",
-                                       "privatemessages", list);
-                       progressHolder.setProgress(50);
-               }
+                       /*
+                        * ##################### OAuth2 servers
+                        */
+                       writeList(ser, zos, "oauth2servers.xml", 
"oauth2servers", auth2Dao.get(0, Integer.MAX_VALUE));
+                       progressHolder.setProgress(45);
 
-               /*
-                * ##################### Private Message Folders
-                */
-               writeList(simpleSerializer, backup_dir, 
"privateMessageFolder.xml",
-                               "privatemessagefolders", 
privateMessageFolderDao.get(0, Integer.MAX_VALUE));
-               progressHolder.setProgress(55);
-
-               /*
-                * ##################### User Contacts
-                */
-               {
-                       Registry registry = new Registry();
-                       Strategy strategy = new RegistryStrategy(registry);
-                       Serializer serializer = new Persister(strategy);
-       
-                       registry.bind(User.class, UserConverter.class);
-                       
-                       writeList(serializer, backup_dir, "userContacts.xml",
-                                       "usercontacts", userContactDao.get());
-                       progressHolder.setProgress(60);
-               }
+                       /*
+                        * ##################### Private Messages
+                        */
+                       {
+                               List<PrivateMessage> list = 
privateMessageDao.get(0, Integer.MAX_VALUE);
+                               Registry registry = new Registry();
+                               Strategy strategy = new 
RegistryStrategy(registry);
+                               Serializer serializer = new Persister(strategy);
+
+                               registry.bind(User.class, UserConverter.class);
+                               registry.bind(Room.class, RoomConverter.class);
+                               if (list != null && !list.isEmpty()) {
+                                       
registry.bind(list.get(0).getInserted().getClass(), DateConverter.class);
+                               }
 
-               /*
-                * ##################### File-Explorer
-                */
-               {
-                       List<FileExplorerItem> list = fileExplorerItemDao.get();
-                       Registry registry = new Registry();
-                       Strategy strategy = new RegistryStrategy(registry);
-                       Serializer serializer = new Persister(strategy);
-       
-                       if (list != null && !list.isEmpty()) {
-                               
registry.bind(list.get(0).getInserted().getClass(), DateConverter.class);
-                       }
-                       
-                       writeList(serializer, backup_dir, 
"fileExplorerItems.xml",
-                                       "fileExplorerItems", list);
-                       progressHolder.setProgress(65);
-               }
+                               writeList(serializer, zos, 
"privateMessages.xml",
+                                               "privatemessages", list);
+                               progressHolder.setProgress(50);
+                       }
 
-               /*
-                * ##################### Recordings
-                */
-               {
-                       List<Recording> list = recordingDao.get();
-                       Registry registry = new Registry();
-                       Strategy strategy = new RegistryStrategy(registry);
-                       Serializer serializer = new Persister(strategy);
-       
-                       if (list != null && !list.isEmpty()) {
-                               
registry.bind(list.get(0).getInserted().getClass(), DateConverter.class);
-                       }
-                       
-                       writeList(serializer, backup_dir, "flvRecordings.xml", 
"flvrecordings", list);
-                       progressHolder.setProgress(70);
-               }
+                       /*
+                        * ##################### Private Message Folders
+                        */
+                       writeList(ser, zos, "privateMessageFolder.xml",
+                                       "privatemessagefolders", 
privateMessageFolderDao.get(0, Integer.MAX_VALUE));
+                       progressHolder.setProgress(55);
 
-               /*
-                * ##################### Polls
-                */
-               {
-                       List<RoomPoll> list = pollManager.get();
-                       Registry registry = new Registry();
-                       Strategy strategy = new RegistryStrategy(registry);
-                       Serializer serializer = new Persister(strategy);
-       
-                       registry.bind(User.class, UserConverter.class);
-                       registry.bind(Room.class, RoomConverter.class);
-                       registry.bind(RoomPoll.Type.class, 
PollTypeConverter.class);
-                       if (list != null && !list.isEmpty()) {
-                               
registry.bind(list.get(0).getCreated().getClass(), DateConverter.class);
-                       }
-                       
-                       writeList(serializer, backup_dir, "roompolls.xml", 
"roompolls", list);
-                       progressHolder.setProgress(75);
-               }
+                       /*
+                        * ##################### User Contacts
+                        */
+                       {
+                               Registry registry = new Registry();
+                               Strategy strategy = new 
RegistryStrategy(registry);
+                               Serializer serializer = new Persister(strategy);
+
+                               registry.bind(User.class, UserConverter.class);
+
+                               writeList(serializer, zos, "userContacts.xml", 
"usercontacts", userContactDao.get());
+                               progressHolder.setProgress(60);
+                       }
 
-               /*
-                * ##################### Config
-                */
-               {
-                       List<Configuration> list = 
configurationDao.getConfigurations(0, Integer.MAX_VALUE, "c.id", true);
-                       Registry registry = new Registry();
-                       registry.bind(User.class, UserConverter.class);
-                       Strategy strategy = new RegistryStrategy(registry);
-                       Serializer serializer = new Persister(strategy);
-       
-                       if (list != null && !list.isEmpty()) {
-                               
registry.bind(list.get(0).getInserted().getClass(), DateConverter.class);
-                       }
-                       
-                       writeList(serializer, backup_dir, "configs.xml", 
"configs", list);
-                       progressHolder.setProgress(80);
-               }
-               
-               /*
-                * ##################### Chat
-                */
-               {
-                       List<ChatMessage> list = chatDao.get(0, 
Integer.MAX_VALUE);
-                       Registry registry = new Registry();
-                       registry.bind(User.class, UserConverter.class);
-                       registry.bind(Room.class, RoomConverter.class);
-                       Strategy strategy = new RegistryStrategy(registry);
-                       Serializer serializer = new Persister(strategy);
-       
-                       if (list != null && !list.isEmpty()) {
-                               registry.bind(list.get(0).getSent().getClass(), 
DateConverter.class);
-                       }
-                       
-                       writeList(serializer, backup_dir, "chat_messages.xml", 
"chat_messages", list);
-                       progressHolder.setProgress(85);
-               }
-               if (includeFiles) {
                        /*
-                        * ##################### Backup Room Files
+                        * ##################### File-Explorer
                         */
-                       File targetRootDir = new File(backup_dir, 
BCKP_ROOM_FILES);
+                       {
+                               List<FileExplorerItem> list = 
fileExplorerItemDao.get();
+                               Registry registry = new Registry();
+                               Strategy strategy = new 
RegistryStrategy(registry);
+                               Serializer serializer = new Persister(strategy);
+
+                               if (list != null && !list.isEmpty()) {
+                                       
registry.bind(list.get(0).getInserted().getClass(), DateConverter.class);
+                               }
 
-                       if (!targetRootDir.exists()) {
-                               targetRootDir.mkdir();
+                               writeList(serializer, zos, 
"fileExplorerItems.xml", "fileExplorerItems", list);
+                               progressHolder.setProgress(65);
                        }
 
-                       File sourceDir = OmFileHelper.getUploadDir();
+                       /*
+                        * ##################### Recordings
+                        */
+                       {
+                               List<Recording> list = recordingDao.get();
+                               Registry registry = new Registry();
+                               Strategy strategy = new 
RegistryStrategy(registry);
+                               Serializer serializer = new Persister(strategy);
 
-                       File[] files = sourceDir.listFiles();
-                       for (File file : files) {
-                               if (file.isDirectory()) {
-                                       String fName = file.getName();
-                                       if (!IMPORT_DIR.equals(fName) && 
!BACKUP_DIR.equals(fName)) {
-                                               log.debug("### " + 
file.getName());
+                               if (list != null && !list.isEmpty()) {
+                                       
registry.bind(list.get(0).getInserted().getClass(), DateConverter.class);
+                               }
 
-                                               FileUtils.copyDirectory(file, 
new File(targetRootDir, file.getName()));
-                                       }
+                               writeList(serializer, zos, "flvRecordings.xml", 
"flvrecordings", list);
+                               progressHolder.setProgress(70);
+                       }
+
+                       /*
+                        * ##################### Polls
+                        */
+                       {
+                               List<RoomPoll> list = pollManager.get();
+                               Registry registry = new Registry();
+                               Strategy strategy = new 
RegistryStrategy(registry);
+                               Serializer serializer = new Persister(strategy);
+
+                               registry.bind(User.class, UserConverter.class);
+                               registry.bind(Room.class, RoomConverter.class);
+                               registry.bind(RoomPoll.Type.class, 
PollTypeConverter.class);
+                               if (list != null && !list.isEmpty()) {
+                                       
registry.bind(list.get(0).getCreated().getClass(), DateConverter.class);
                                }
+
+                               writeList(serializer, zos, "roompolls.xml", 
"roompolls", list);
+                               progressHolder.setProgress(75);
                        }
 
                        /*
-                        * ##################### Backup Recording Files
+                        * ##################### Config
                         */
-                       File targetDirRec = new File(backup_dir, 
BCKP_RECORD_FILES);
+                       {
+                               List<Configuration> list = 
configurationDao.getConfigurations(0, Integer.MAX_VALUE, "c.id", true);
+                               Registry registry = new Registry();
+                               registry.bind(User.class, UserConverter.class);
+                               Strategy strategy = new 
RegistryStrategy(registry);
+                               Serializer serializer = new Persister(strategy);
+
+                               if (list != null && !list.isEmpty()) {
+                                       
registry.bind(list.get(0).getInserted().getClass(), DateConverter.class);
+                               }
 
-                       if (!targetDirRec.exists()) {
-                               targetDirRec.mkdir();
+                               writeList(serializer, zos, "configs.xml", 
"configs", list);
+                               progressHolder.setProgress(80);
                        }
 
-                       File sourceDirRec = 
OmFileHelper.getStreamsHibernateDir();
+                       /*
+                        * ##################### Chat
+                        */
+                       {
+                               List<ChatMessage> list = chatDao.get(0, 
Integer.MAX_VALUE);
+                               Registry registry = new Registry();
+                               registry.bind(User.class, UserConverter.class);
+                               registry.bind(Room.class, RoomConverter.class);
+                               Strategy strategy = new 
RegistryStrategy(registry);
+                               Serializer serializer = new Persister(strategy);
 
-                       FileUtils.copyDirectory(sourceDirRec, targetDirRec);
-                       progressHolder.setProgress(90);
-               }
+                               if (list != null && !list.isEmpty()) {
+                                       
registry.bind(list.get(0).getSent().getClass(), DateConverter.class);
+                               }
 
-               writeZipDir(backup_dir, filePath);
+                               writeList(serializer, zos, "chat_messages.xml", 
"chat_messages", list);
+                               progressHolder.setProgress(85);
+                       }
+                       if (includeFiles) {
+                               //##################### Backup Room Files
+                               for (File file : 
OmFileHelper.getUploadDir().listFiles()) {
+                                       if (file.isDirectory()) {
+                                               String fName = file.getName();
+                                               if (!IMPORT_DIR.equals(fName) 
&& !BACKUP_DIR.equals(fName)) {
+                                                       log.debug("### " + 
file.getName());
+                                                       
writeZipDir(BCKP_ROOM_FILES, file.getParentFile().toURI(), file, zos);
+                                               }
+                                       }
+                               }
+
+                               //##################### Backup Recording Files
+                               File recDir = 
OmFileHelper.getStreamsHibernateDir();
+                               writeZipDir(BCKP_RECORD_FILES, recDir.toURI(), 
recDir, zos);
+                               progressHolder.setProgress(90);
+                       }
+               }
                progressHolder.setProgress(100);
                log.debug("---Done");
        }
-       
-       private static <T> void writeList(Serializer ser, File backup_dir, 
String fileName, String listElement, List<T> list) throws Exception {
-               FileOutputStream fos = new FileOutputStream(new 
File(backup_dir, fileName));
-               writeList(ser, fos, listElement, list);
+
+       private static <T> void writeList(Serializer ser, ZipOutputStream zos, 
String fileName, String listElement, List<T> list) throws Exception {
+               ZipEntry e = new ZipEntry(fileName);
+               zos.putNextEntry(e);
+               ByteArrayOutputStream baos = new ByteArrayOutputStream(10 * 
1024); //10K
+               writeList(ser, baos, listElement, list);
+               zos.write(baos.toByteArray());
+               zos.closeEntry();
        }
-       
+
        private static <T> void writeList(Serializer ser, OutputStream os, 
String listElement, List<T> list) throws Exception {
                Format format = new Format("<?xml version=\"1.0\" 
encoding=\"UTF-8\"?>");
                OutputNode doc = NodeBuilder.write(new OutputStreamWriter(os, 
UTF_8), format);
@@ -459,15 +442,10 @@ public class BackupExport {
                root.commit();
        }
 
-       public void exportUsers(File backup_dir, List<User> list) throws 
Exception {
-               FileOutputStream fos = new FileOutputStream(new 
File(backup_dir, "users.xml"));
-               exportUsers(fos, list);
-       }
-       
-       public void exportUsers(OutputStream os, List<User> list) throws 
Exception {
+       public void exportUsers(ZipOutputStream zos, List<User> list) throws 
Exception {
                Registry registry = new Registry();
                Strategy strategy = new RegistryStrategy(registry);
-               Serializer serializer = new Persister(strategy);
+               Serializer ser = new Persister(strategy);
 
                registry.bind(Group.class, GroupConverter.class);
                registry.bind(Salutation.class, SalutationConverter.class);
@@ -475,25 +453,16 @@ public class BackupExport {
                        Class<?> dateClass = list.get(0).getRegdate() != null ? 
list.get(0).getRegdate().getClass() : list.get(0).getInserted().getClass();
                        registry.bind(dateClass, DateConverter.class);
                }
-               
-               writeList(serializer, os, "users", list);
-       }
 
-       private void writeZipDir(File directoryToZip, File zipFile) throws 
IOException {
-               try (FileOutputStream fos = new FileOutputStream(zipFile); 
ZipOutputStream zos = new ZipOutputStream(fos)) {
-                       writeZipDir(directoryToZip.toURI(), directoryToZip, 
zos, zipFile);
-               }
+               writeList(ser, zos, "users.xml", "users", list);
        }
-       
-       private void writeZipDir(URI base, File dir, ZipOutputStream zos, File 
zipFile) throws IOException {
+
+       private void writeZipDir(String prefix, URI base, File dir, 
ZipOutputStream zos) throws IOException {
                for (File file : dir.listFiles()) {
-                       if (zipFile.equals(file)) {
-                               continue;
-                       }
                        if (file.isDirectory()) {
-                               writeZipDir(base, file, zos, zipFile);
+                               writeZipDir(prefix, base, file, zos);
                        } else {
-                               String path = 
base.relativize(file.toURI()).toString();
+                               String path = prefix + "/" + 
base.relativize(file.toURI()).toString();
                                log.debug("Writing '" + path + "' to zip file");
                                ZipEntry zipEntry = new ZipEntry(path);
                                zos.putNextEntry(zipEntry);

Modified: 
openmeetings/application/branches/3.2.x/openmeetings-install/src/main/java/org/apache/openmeetings/cli/Admin.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-install/src/main/java/org/apache/openmeetings/cli/Admin.java?rev=1789370&r1=1789369&r2=1789370&view=diff
==============================================================================
--- 
openmeetings/application/branches/3.2.x/openmeetings-install/src/main/java/org/apache/openmeetings/cli/Admin.java
 (original)
+++ 
openmeetings/application/branches/3.2.x/openmeetings-install/src/main/java/org/apache/openmeetings/cli/Admin.java
 Wed Mar 29 14:03:28 2017
@@ -295,7 +295,7 @@ public class Admin {
                                        backup_dir.mkdirs();
 
                                        BackupExport export = 
getApplicationContext().getBean(BackupExport.class);
-                                       export.performExport(f, backup_dir, 
includeFiles, new ProgressHolder());
+                                       export.performExport(f, includeFiles, 
new ProgressHolder());
                                        FileUtils.deleteDirectory(backup_dir);
                                        backup_dir.delete();
                                } catch (Exception e) {

Modified: 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/backup/BackupPanel.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/backup/BackupPanel.java?rev=1789370&r1=1789369&r2=1789370&view=diff
==============================================================================
--- 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/backup/BackupPanel.java
 (original)
+++ 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/backup/BackupPanel.java
 Wed Mar 29 14:03:28 2017
@@ -114,16 +114,14 @@ public class BackupPanel extends AdminPa
 
                                @Override
                                protected void onSubmit(AjaxRequestTarget 
target) {
-                                       File workingDir = 
OmFileHelper.getUploadBackupDir();
                                        String dateString = "backup_" + 
CalendarPatterns.getTimeForStreamId(new Date());
-                                       File backupDir = new File(workingDir, 
dateString);
-                                       backupFile = new File(backupDir, 
dateString + ".zip");
+                                       backupFile = new 
File(OmFileHelper.getUploadBackupDir(), dateString + ".zip");
                                        th = null;
                                        started = true;
                                        progressHolder = new ProgressHolder();
 
                                        timer.restart(target);
-                                       new Thread(new 
BackupProcess(getBean(BackupExport.class), backupDir, 
includeFilesInBackup.getObject())
+                                       new Thread(new 
BackupProcess(getBean(BackupExport.class), includeFilesInBackup.getObject())
                                                , "Openmeetings - " + 
dateString).start();
 
                                        // repaint the feedback panel so that 
it is hidden
@@ -209,12 +207,10 @@ public class BackupPanel extends AdminPa
 
                private class BackupProcess implements Runnable {
                        private BackupExport backup;
-                       private File backupDir;
                        private boolean includeFiles;
 
-                       public BackupProcess(BackupExport backup, File 
backupDir, boolean includeFiles) {
+                       public BackupProcess(BackupExport backup, boolean 
includeFiles) {
                                this.backup = backup;
-                               this.backupDir = backupDir;
                                this.includeFiles = includeFiles;
                                th = null;
                        }
@@ -222,7 +218,7 @@ public class BackupPanel extends AdminPa
                        @Override
                        public void run() {
                                try {
-                                       backup.performExport(backupFile, 
backupDir, includeFiles, progressHolder);
+                                       backup.performExport(backupFile, 
includeFiles, progressHolder);
                                } catch (Exception e) {
                                        log.error("Exception on panel backup 
download ", e);
                                        th = e;

Modified: 
openmeetings/application/trunk/openmeetings-install/src/main/java/org/apache/openmeetings/backup/BackupExport.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-install/src/main/java/org/apache/openmeetings/backup/BackupExport.java?rev=1789370&r1=1789369&r2=1789370&view=diff
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-install/src/main/java/org/apache/openmeetings/backup/BackupExport.java
 (original)
+++ 
openmeetings/application/trunk/openmeetings-install/src/main/java/org/apache/openmeetings/backup/BackupExport.java
 Wed Mar 29 14:03:28 2017
@@ -25,6 +25,7 @@ import static org.apache.openmeetings.ut
 import static org.apache.openmeetings.util.OmFileHelper.IMPORT_DIR;
 import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
 
+import java.io.ByteArrayOutputStream;
 import java.io.File;
 import java.io.FileOutputStream;
 import java.io.IOException;
@@ -81,13 +82,13 @@ import org.slf4j.Logger;
 import org.springframework.beans.factory.annotation.Autowired;
 
 /**
- * 
+ *
  * @author sebastianwagner
- * 
+ *
  */
 public class BackupExport {
        private static final Logger log = 
Red5LoggerFactory.getLogger(BackupExport.class, webAppRootKey);
-       private static final String BACKUP_COMMENT = 
+       private static final String BACKUP_COMMENT =
                        "###############################################\n"
                        + "This File is auto-generated by the Backup Tool \n"
                        + "you should use the BackupPanel to modify or change 
this file \n"
@@ -131,315 +132,297 @@ public class BackupExport {
        @Autowired
        private RoomGroupDao roomGroupDao;
 
-       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 Groups
-                */
-               writeList(simpleSerializer, backup_dir, "organizations.xml", 
"organisations", groupDao.get(0, Integer.MAX_VALUE));
-               progressHolder.setProgress(5);
-               /*
-                * ##################### Backup Users
-                */
-               exportUsers(backup_dir, userDao.getAllBackupUsers());
-               progressHolder.setProgress(10);
-
-               /*
-                * ##################### Backup Room
-                */
-               {
-                       Registry registry = new Registry();
-                       Strategy strategy = new RegistryStrategy(registry);
-                       Serializer serializer = new Persister(strategy);
-       
-                       registry.bind(User.class, UserConverter.class);
-                       registry.bind(Room.Type.class, RoomTypeConverter.class);
-                       
-                       writeList(serializer, backup_dir, "rooms.xml", "rooms", 
roomDao.get());
-                       progressHolder.setProgress(15);
+       public void performExport(File zip, boolean includeFiles, 
ProgressHolder progressHolder) throws Exception {
+               if (!zip.getParentFile().exists()) {
+                       zip.getParentFile().mkdirs();
                }
+               try (FileOutputStream fos = new FileOutputStream(zip); 
ZipOutputStream zos = new ZipOutputStream(fos)) {
 
-               /*
-                * ##################### Backup Room Groups
-                */
-               {
-                       Registry registry = new Registry();
-                       Strategy strategy = new RegistryStrategy(registry);
-                       Serializer serializer = new Persister(strategy);
-       
-                       registry.bind(Group.class, GroupConverter.class);
-                       registry.bind(Room.class, RoomConverter.class);
-                       
-                       writeList(serializer, backup_dir, 
"rooms_organisation.xml", "room_organisations", roomGroupDao.get());
-                       progressHolder.setProgress(17);
-               }
+                       Serializer ser = new Persister();
 
-               /*
-                * ##################### Backup Calendars
-                */
-               {
-                       List<OmCalendar> list = calendarDao.get();
-                       Registry registry = new Registry();
-                       Strategy strategy = new RegistryStrategy(registry);
-                       Serializer serializer = new Persister(strategy);
-                       registry.bind(User.class, UserConverter.class);
+                       progressHolder.setProgress(0);
+                       /*
+                        * ##################### Backup Groups
+                        */
+                       writeList(ser, zos, "organizations.xml", 
"organisations", groupDao.get(0, Integer.MAX_VALUE));
+                       progressHolder.setProgress(5);
+                       /*
+                        * ##################### Backup Users
+                        */
+                       exportUsers(zos, userDao.getAllBackupUsers());
+                       progressHolder.setProgress(10);
 
-                       writeList(serializer, backup_dir, "calendars.xml", 
"calendars", list);
-                       progressHolder.setProgress(22);
-               }
-               /*
-                * ##################### Backup Appointments
-                */
-               {
-                       List<Appointment> list = appointmentDao.get();
-                       Registry registry = new Registry();
-                       Strategy strategy = new RegistryStrategy(registry);
-                       Serializer serializer = new Persister(strategy);
-
-                       registry.bind(User.class, UserConverter.class);
-                       registry.bind(Appointment.Reminder.class, 
AppointmentReminderTypeConverter.class);
-                       registry.bind(Room.class, RoomConverter.class);
-                       if (list != null && !list.isEmpty()) {
-                               for (Appointment a : list) {
-                                       if (a.getStart() != null) {
-                                               
registry.bind(a.getStart().getClass(), DateConverter.class);
-                                               break;
-                                       } else if (a.getInserted() != null) {
-                                               
registry.bind(a.getInserted().getClass(), DateConverter.class);
-                                               break;
+                       /*
+                        * ##################### Backup Room
+                        */
+                       {
+                               Registry registry = new Registry();
+                               Strategy strategy = new 
RegistryStrategy(registry);
+                               Serializer serializer = new Persister(strategy);
+
+                               registry.bind(User.class, UserConverter.class);
+                               registry.bind(Room.Type.class, 
RoomTypeConverter.class);
+
+                               writeList(serializer, zos, "rooms.xml", 
"rooms", roomDao.get());
+                               progressHolder.setProgress(15);
+                       }
+
+                       /*
+                        * ##################### Backup Room Groups
+                        */
+                       {
+                               Registry registry = new Registry();
+                               Strategy strategy = new 
RegistryStrategy(registry);
+                               Serializer serializer = new Persister(strategy);
+
+                               registry.bind(Group.class, 
GroupConverter.class);
+                               registry.bind(Room.class, RoomConverter.class);
+
+                               writeList(serializer, zos, 
"rooms_organisation.xml", "room_organisations", roomGroupDao.get());
+                               progressHolder.setProgress(17);
+                       }
+
+                       /*
+                        * ##################### Backup Calendars
+                        */
+                       {
+                               List<OmCalendar> list = calendarDao.get();
+                               Registry registry = new Registry();
+                               Strategy strategy = new 
RegistryStrategy(registry);
+                               Serializer serializer = new Persister(strategy);
+                               registry.bind(User.class, UserConverter.class);
+
+                               writeList(serializer, zos, "calendars.xml", 
"calendars", list);
+                               progressHolder.setProgress(22);
+                       }
+                       /*
+                        * ##################### Backup Appointments
+                        */
+                       {
+                               List<Appointment> list = appointmentDao.get();
+                               Registry registry = new Registry();
+                               Strategy strategy = new 
RegistryStrategy(registry);
+                               Serializer serializer = new Persister(strategy);
+
+                               registry.bind(User.class, UserConverter.class);
+                               registry.bind(Appointment.Reminder.class, 
AppointmentReminderTypeConverter.class);
+                               registry.bind(Room.class, RoomConverter.class);
+                               if (list != null && !list.isEmpty()) {
+                                       for (Appointment a : list) {
+                                               if (a.getStart() != null) {
+                                                       
registry.bind(a.getStart().getClass(), DateConverter.class);
+                                                       break;
+                                               } else if (a.getInserted() != 
null) {
+                                                       
registry.bind(a.getInserted().getClass(), DateConverter.class);
+                                                       break;
+                                               }
                                        }
                                }
+
+                               writeList(serializer, zos, "appointements.xml", 
"appointments", list);
+                               progressHolder.setProgress(25);
                        }
 
-                       writeList(serializer, backup_dir, "appointements.xml", 
"appointments", list);
-                       progressHolder.setProgress(25);
-               }
+                       /*
+                        * ##################### Backup Meeting Members
+                        */
+                       {
+                               Registry registry = new Registry();
+                               Strategy strategy = new 
RegistryStrategy(registry);
+                               Serializer serializer = new Persister(strategy);
+
+                               registry.bind(User.class, UserConverter.class);
+                               registry.bind(Appointment.class, 
AppointmentConverter.class);
+
+                               writeList(serializer, zos, "meetingmembers.xml",
+                                               "meetingmembers", 
meetingMemberDao.getMeetingMembers());
+                               progressHolder.setProgress(30);
+                       }
 
-               /*
-                * ##################### Backup Meeting Members
-                */
-               {
-                       Registry registry = new Registry();
-                       Strategy strategy = new RegistryStrategy(registry);
-                       Serializer serializer = new Persister(strategy);
-       
-                       registry.bind(User.class, UserConverter.class);
-                       registry.bind(Appointment.class, 
AppointmentConverter.class);
-                       
-                       writeList(serializer, backup_dir, "meetingmembers.xml",
-                                       "meetingmembers", 
meetingMemberDao.getMeetingMembers());
-                       progressHolder.setProgress(30);
-               }
+                       /*
+                        * ##################### LDAP Configs
+                        */
+                       List<LdapConfig> ldapList = ldapConfigDao.get();
+                       if (!ldapList.isEmpty()) {
+                               ldapList.remove(0);
+                       }
+                       writeList(ser, zos, "ldapconfigs.xml", "ldapconfigs", 
ldapList);
+                       progressHolder.setProgress(35);
 
-               /*
-                * ##################### LDAP Configs
-                */
-               List<LdapConfig> ldapList = ldapConfigDao.get();
-               if (!ldapList.isEmpty()) {
-                       ldapList.remove(0);
-               }
-               writeList(simpleSerializer, backup_dir, "ldapconfigs.xml", 
"ldapconfigs", ldapList);
-               progressHolder.setProgress(35);
+                       /*
+                        * ##################### Cluster servers
+                        */
+                       writeList(ser, zos, "servers.xml", "servers", 
serverDao.get(0, Integer.MAX_VALUE));
+                       progressHolder.setProgress(40);
 
-               /*
-                * ##################### 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
-                */
-               {
-                       List<PrivateMessage> list = privateMessageDao.get(0, 
Integer.MAX_VALUE);
-                       Registry registry = new Registry();
-                       Strategy strategy = new RegistryStrategy(registry);
-                       Serializer serializer = new Persister(strategy);
-       
-                       registry.bind(User.class, UserConverter.class);
-                       registry.bind(Room.class, RoomConverter.class);
-                       if (list != null && !list.isEmpty()) {
-                               
registry.bind(list.get(0).getInserted().getClass(), DateConverter.class);
-                       }
-                       
-                       writeList(serializer, backup_dir, "privateMessages.xml",
-                                       "privatemessages", list);
-                       progressHolder.setProgress(50);
-               }
+                       /*
+                        * ##################### OAuth2 servers
+                        */
+                       writeList(ser, zos, "oauth2servers.xml", 
"oauth2servers", auth2Dao.get(0, Integer.MAX_VALUE));
+                       progressHolder.setProgress(45);
 
-               /*
-                * ##################### Private Message Folders
-                */
-               writeList(simpleSerializer, backup_dir, 
"privateMessageFolder.xml",
-                               "privatemessagefolders", 
privateMessageFolderDao.get(0, Integer.MAX_VALUE));
-               progressHolder.setProgress(55);
-
-               /*
-                * ##################### User Contacts
-                */
-               {
-                       Registry registry = new Registry();
-                       Strategy strategy = new RegistryStrategy(registry);
-                       Serializer serializer = new Persister(strategy);
-       
-                       registry.bind(User.class, UserConverter.class);
-                       
-                       writeList(serializer, backup_dir, "userContacts.xml",
-                                       "usercontacts", userContactDao.get());
-                       progressHolder.setProgress(60);
-               }
+                       /*
+                        * ##################### Private Messages
+                        */
+                       {
+                               List<PrivateMessage> list = 
privateMessageDao.get(0, Integer.MAX_VALUE);
+                               Registry registry = new Registry();
+                               Strategy strategy = new 
RegistryStrategy(registry);
+                               Serializer serializer = new Persister(strategy);
+
+                               registry.bind(User.class, UserConverter.class);
+                               registry.bind(Room.class, RoomConverter.class);
+                               if (list != null && !list.isEmpty()) {
+                                       
registry.bind(list.get(0).getInserted().getClass(), DateConverter.class);
+                               }
 
-               /*
-                * ##################### File-Explorer
-                */
-               {
-                       List<FileExplorerItem> list = fileExplorerItemDao.get();
-                       Registry registry = new Registry();
-                       Strategy strategy = new RegistryStrategy(registry);
-                       Serializer serializer = new Persister(strategy);
-       
-                       if (list != null && !list.isEmpty()) {
-                               
registry.bind(list.get(0).getInserted().getClass(), DateConverter.class);
-                       }
-                       
-                       writeList(serializer, backup_dir, 
"fileExplorerItems.xml",
-                                       "fileExplorerItems", list);
-                       progressHolder.setProgress(65);
-               }
+                               writeList(serializer, zos, 
"privateMessages.xml",
+                                               "privatemessages", list);
+                               progressHolder.setProgress(50);
+                       }
 
-               /*
-                * ##################### Recordings
-                */
-               {
-                       List<Recording> list = recordingDao.get();
-                       Registry registry = new Registry();
-                       Strategy strategy = new RegistryStrategy(registry);
-                       Serializer serializer = new Persister(strategy);
-       
-                       if (list != null && !list.isEmpty()) {
-                               
registry.bind(list.get(0).getInserted().getClass(), DateConverter.class);
-                       }
-                       
-                       writeList(serializer, backup_dir, "flvRecordings.xml", 
"flvrecordings", list);
-                       progressHolder.setProgress(70);
-               }
+                       /*
+                        * ##################### Private Message Folders
+                        */
+                       writeList(ser, zos, "privateMessageFolder.xml",
+                                       "privatemessagefolders", 
privateMessageFolderDao.get(0, Integer.MAX_VALUE));
+                       progressHolder.setProgress(55);
 
-               /*
-                * ##################### Polls
-                */
-               {
-                       List<RoomPoll> list = pollManager.get();
-                       Registry registry = new Registry();
-                       Strategy strategy = new RegistryStrategy(registry);
-                       Serializer serializer = new Persister(strategy);
-       
-                       registry.bind(User.class, UserConverter.class);
-                       registry.bind(Room.class, RoomConverter.class);
-                       registry.bind(RoomPoll.Type.class, 
PollTypeConverter.class);
-                       if (list != null && !list.isEmpty()) {
-                               
registry.bind(list.get(0).getCreated().getClass(), DateConverter.class);
-                       }
-                       
-                       writeList(serializer, backup_dir, "roompolls.xml", 
"roompolls", list);
-                       progressHolder.setProgress(75);
-               }
+                       /*
+                        * ##################### User Contacts
+                        */
+                       {
+                               Registry registry = new Registry();
+                               Strategy strategy = new 
RegistryStrategy(registry);
+                               Serializer serializer = new Persister(strategy);
+
+                               registry.bind(User.class, UserConverter.class);
+
+                               writeList(serializer, zos, "userContacts.xml", 
"usercontacts", userContactDao.get());
+                               progressHolder.setProgress(60);
+                       }
 
-               /*
-                * ##################### Config
-                */
-               {
-                       List<Configuration> list = 
configurationDao.getConfigurations(0, Integer.MAX_VALUE, "c.id", true);
-                       Registry registry = new Registry();
-                       registry.bind(User.class, UserConverter.class);
-                       Strategy strategy = new RegistryStrategy(registry);
-                       Serializer serializer = new Persister(strategy);
-       
-                       if (list != null && !list.isEmpty()) {
-                               
registry.bind(list.get(0).getInserted().getClass(), DateConverter.class);
-                       }
-                       
-                       writeList(serializer, backup_dir, "configs.xml", 
"configs", list);
-                       progressHolder.setProgress(80);
-               }
-               
-               /*
-                * ##################### Chat
-                */
-               {
-                       List<ChatMessage> list = chatDao.get(0, 
Integer.MAX_VALUE);
-                       Registry registry = new Registry();
-                       registry.bind(User.class, UserConverter.class);
-                       registry.bind(Room.class, RoomConverter.class);
-                       Strategy strategy = new RegistryStrategy(registry);
-                       Serializer serializer = new Persister(strategy);
-       
-                       if (list != null && !list.isEmpty()) {
-                               registry.bind(list.get(0).getSent().getClass(), 
DateConverter.class);
-                       }
-                       
-                       writeList(serializer, backup_dir, "chat_messages.xml", 
"chat_messages", list);
-                       progressHolder.setProgress(85);
-               }
-               if (includeFiles) {
                        /*
-                        * ##################### Backup Room Files
+                        * ##################### File-Explorer
                         */
-                       File targetRootDir = new File(backup_dir, 
BCKP_ROOM_FILES);
+                       {
+                               List<FileExplorerItem> list = 
fileExplorerItemDao.get();
+                               Registry registry = new Registry();
+                               Strategy strategy = new 
RegistryStrategy(registry);
+                               Serializer serializer = new Persister(strategy);
+
+                               if (list != null && !list.isEmpty()) {
+                                       
registry.bind(list.get(0).getInserted().getClass(), DateConverter.class);
+                               }
 
-                       if (!targetRootDir.exists()) {
-                               targetRootDir.mkdir();
+                               writeList(serializer, zos, 
"fileExplorerItems.xml", "fileExplorerItems", list);
+                               progressHolder.setProgress(65);
                        }
 
-                       File sourceDir = OmFileHelper.getUploadDir();
+                       /*
+                        * ##################### Recordings
+                        */
+                       {
+                               List<Recording> list = recordingDao.get();
+                               Registry registry = new Registry();
+                               Strategy strategy = new 
RegistryStrategy(registry);
+                               Serializer serializer = new Persister(strategy);
 
-                       File[] files = sourceDir.listFiles();
-                       for (File file : files) {
-                               if (file.isDirectory()) {
-                                       String fName = file.getName();
-                                       if (!IMPORT_DIR.equals(fName) && 
!BACKUP_DIR.equals(fName)) {
-                                               log.debug("### " + 
file.getName());
+                               if (list != null && !list.isEmpty()) {
+                                       
registry.bind(list.get(0).getInserted().getClass(), DateConverter.class);
+                               }
 
-                                               FileUtils.copyDirectory(file, 
new File(targetRootDir, file.getName()));
-                                       }
+                               writeList(serializer, zos, "flvRecordings.xml", 
"flvrecordings", list);
+                               progressHolder.setProgress(70);
+                       }
+
+                       /*
+                        * ##################### Polls
+                        */
+                       {
+                               List<RoomPoll> list = pollManager.get();
+                               Registry registry = new Registry();
+                               Strategy strategy = new 
RegistryStrategy(registry);
+                               Serializer serializer = new Persister(strategy);
+
+                               registry.bind(User.class, UserConverter.class);
+                               registry.bind(Room.class, RoomConverter.class);
+                               registry.bind(RoomPoll.Type.class, 
PollTypeConverter.class);
+                               if (list != null && !list.isEmpty()) {
+                                       
registry.bind(list.get(0).getCreated().getClass(), DateConverter.class);
                                }
+
+                               writeList(serializer, zos, "roompolls.xml", 
"roompolls", list);
+                               progressHolder.setProgress(75);
                        }
 
                        /*
-                        * ##################### Backup Recording Files
+                        * ##################### Config
                         */
-                       File targetDirRec = new File(backup_dir, 
BCKP_RECORD_FILES);
+                       {
+                               List<Configuration> list = 
configurationDao.getConfigurations(0, Integer.MAX_VALUE, "c.id", true);
+                               Registry registry = new Registry();
+                               registry.bind(User.class, UserConverter.class);
+                               Strategy strategy = new 
RegistryStrategy(registry);
+                               Serializer serializer = new Persister(strategy);
+
+                               if (list != null && !list.isEmpty()) {
+                                       
registry.bind(list.get(0).getInserted().getClass(), DateConverter.class);
+                               }
 
-                       if (!targetDirRec.exists()) {
-                               targetDirRec.mkdir();
+                               writeList(serializer, zos, "configs.xml", 
"configs", list);
+                               progressHolder.setProgress(80);
                        }
 
-                       File sourceDirRec = 
OmFileHelper.getStreamsHibernateDir();
+                       /*
+                        * ##################### Chat
+                        */
+                       {
+                               List<ChatMessage> list = chatDao.get(0, 
Integer.MAX_VALUE);
+                               Registry registry = new Registry();
+                               registry.bind(User.class, UserConverter.class);
+                               registry.bind(Room.class, RoomConverter.class);
+                               Strategy strategy = new 
RegistryStrategy(registry);
+                               Serializer serializer = new Persister(strategy);
 
-                       FileUtils.copyDirectory(sourceDirRec, targetDirRec);
-                       progressHolder.setProgress(90);
-               }
+                               if (list != null && !list.isEmpty()) {
+                                       
registry.bind(list.get(0).getSent().getClass(), DateConverter.class);
+                               }
 
-               writeZipDir(backup_dir, filePath);
+                               writeList(serializer, zos, "chat_messages.xml", 
"chat_messages", list);
+                               progressHolder.setProgress(85);
+                       }
+                       if (includeFiles) {
+                               //##################### Backup Room Files
+                               for (File file : 
OmFileHelper.getUploadDir().listFiles()) {
+                                       if (file.isDirectory()) {
+                                               String fName = file.getName();
+                                               if (!IMPORT_DIR.equals(fName) 
&& !BACKUP_DIR.equals(fName)) {
+                                                       log.debug("### " + 
file.getName());
+                                                       
writeZipDir(BCKP_ROOM_FILES, file.getParentFile().toURI(), file, zos);
+                                               }
+                                       }
+                               }
+
+                               //##################### Backup Recording Files
+                               File recDir = 
OmFileHelper.getStreamsHibernateDir();
+                               writeZipDir(BCKP_RECORD_FILES, recDir.toURI(), 
recDir, zos);
+                               progressHolder.setProgress(90);
+                       }
+               }
                progressHolder.setProgress(100);
                log.debug("---Done");
        }
-       
-       private static <T> void writeList(Serializer ser, File backup_dir, 
String fileName, String listElement, List<T> list) throws Exception {
-               FileOutputStream fos = new FileOutputStream(new 
File(backup_dir, fileName));
-               writeList(ser, fos, listElement, list);
+
+       private static <T> void writeList(Serializer ser, ZipOutputStream zos, 
String fileName, String listElement, List<T> list) throws Exception {
+               ZipEntry e = new ZipEntry(fileName);
+               zos.putNextEntry(e);
+               ByteArrayOutputStream baos = new ByteArrayOutputStream(10 * 
1024); //10K
+               writeList(ser, baos, listElement, list);
+               zos.write(baos.toByteArray());
+               zos.closeEntry();
        }
-       
+
        private static <T> void writeList(Serializer ser, OutputStream os, 
String listElement, List<T> list) throws Exception {
                Format format = new Format("<?xml version=\"1.0\" 
encoding=\"UTF-8\"?>");
                OutputNode doc = NodeBuilder.write(new OutputStreamWriter(os, 
UTF_8), format);
@@ -459,15 +442,10 @@ public class BackupExport {
                root.commit();
        }
 
-       public void exportUsers(File backup_dir, List<User> list) throws 
Exception {
-               FileOutputStream fos = new FileOutputStream(new 
File(backup_dir, "users.xml"));
-               exportUsers(fos, list);
-       }
-       
-       public void exportUsers(OutputStream os, List<User> list) throws 
Exception {
+       public void exportUsers(ZipOutputStream zos, List<User> list) throws 
Exception {
                Registry registry = new Registry();
                Strategy strategy = new RegistryStrategy(registry);
-               Serializer serializer = new Persister(strategy);
+               Serializer ser = new Persister(strategy);
 
                registry.bind(Group.class, GroupConverter.class);
                registry.bind(Salutation.class, SalutationConverter.class);
@@ -475,25 +453,16 @@ public class BackupExport {
                        Class<?> dateClass = list.get(0).getRegdate() != null ? 
list.get(0).getRegdate().getClass() : list.get(0).getInserted().getClass();
                        registry.bind(dateClass, DateConverter.class);
                }
-               
-               writeList(serializer, os, "users", list);
-       }
 
-       private void writeZipDir(File directoryToZip, File zipFile) throws 
IOException {
-               try (FileOutputStream fos = new FileOutputStream(zipFile); 
ZipOutputStream zos = new ZipOutputStream(fos)) {
-                       writeZipDir(directoryToZip.toURI(), directoryToZip, 
zos, zipFile);
-               }
+               writeList(ser, zos, "users.xml", "users", list);
        }
-       
-       private void writeZipDir(URI base, File dir, ZipOutputStream zos, File 
zipFile) throws IOException {
+
+       private void writeZipDir(String prefix, URI base, File dir, 
ZipOutputStream zos) throws IOException {
                for (File file : dir.listFiles()) {
-                       if (zipFile.equals(file)) {
-                               continue;
-                       }
                        if (file.isDirectory()) {
-                               writeZipDir(base, file, zos, zipFile);
+                               writeZipDir(prefix, base, file, zos);
                        } else {
-                               String path = 
base.relativize(file.toURI()).toString();
+                               String path = prefix + "/" + 
base.relativize(file.toURI()).toString();
                                log.debug("Writing '" + path + "' to zip file");
                                ZipEntry zipEntry = new ZipEntry(path);
                                zos.putNextEntry(zipEntry);

Modified: 
openmeetings/application/trunk/openmeetings-install/src/main/java/org/apache/openmeetings/cli/Admin.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-install/src/main/java/org/apache/openmeetings/cli/Admin.java?rev=1789370&r1=1789369&r2=1789370&view=diff
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-install/src/main/java/org/apache/openmeetings/cli/Admin.java
 (original)
+++ 
openmeetings/application/trunk/openmeetings-install/src/main/java/org/apache/openmeetings/cli/Admin.java
 Wed Mar 29 14:03:28 2017
@@ -295,7 +295,7 @@ public class Admin {
                                        backup_dir.mkdirs();
 
                                        BackupExport export = 
getApplicationContext().getBean(BackupExport.class);
-                                       export.performExport(f, backup_dir, 
includeFiles, new ProgressHolder());
+                                       export.performExport(f, includeFiles, 
new ProgressHolder());
                                        FileUtils.deleteDirectory(backup_dir);
                                        backup_dir.delete();
                                } catch (Exception e) {

Modified: 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/backup/BackupPanel.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/backup/BackupPanel.java?rev=1789370&r1=1789369&r2=1789370&view=diff
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/backup/BackupPanel.java
 (original)
+++ 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/backup/BackupPanel.java
 Wed Mar 29 14:03:28 2017
@@ -114,16 +114,14 @@ public class BackupPanel extends AdminPa
 
                                @Override
                                protected void onSubmit(AjaxRequestTarget 
target) {
-                                       File workingDir = 
OmFileHelper.getUploadBackupDir();
                                        String dateString = "backup_" + 
CalendarPatterns.getTimeForStreamId(new Date());
-                                       File backupDir = new File(workingDir, 
dateString);
-                                       backupFile = new File(backupDir, 
dateString + ".zip");
+                                       backupFile = new 
File(OmFileHelper.getUploadBackupDir(), dateString + ".zip");
                                        th = null;
                                        started = true;
                                        progressHolder = new ProgressHolder();
 
                                        timer.restart(target);
-                                       new Thread(new 
BackupProcess(getBean(BackupExport.class), backupDir, 
includeFilesInBackup.getObject())
+                                       new Thread(new 
BackupProcess(getBean(BackupExport.class), includeFilesInBackup.getObject())
                                                , "Openmeetings - " + 
dateString).start();
 
                                        // repaint the feedback panel so that 
it is hidden
@@ -209,12 +207,10 @@ public class BackupPanel extends AdminPa
 
                private class BackupProcess implements Runnable {
                        private BackupExport backup;
-                       private File backupDir;
                        private boolean includeFiles;
 
-                       public BackupProcess(BackupExport backup, File 
backupDir, boolean includeFiles) {
+                       public BackupProcess(BackupExport backup, boolean 
includeFiles) {
                                this.backup = backup;
-                               this.backupDir = backupDir;
                                this.includeFiles = includeFiles;
                                th = null;
                        }
@@ -222,7 +218,7 @@ public class BackupPanel extends AdminPa
                        @Override
                        public void run() {
                                try {
-                                       backup.performExport(backupFile, 
backupDir, includeFiles, progressHolder);
+                                       backup.performExport(backupFile, 
includeFiles, progressHolder);
                                } catch (Exception e) {
                                        log.error("Exception on panel backup 
download ", e);
                                        th = e;


Reply via email to