You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openmeetings.apache.org by so...@apache.org on 2017/03/29 14:03:28 UTC
svn commit: r1789370 - in /openmeetings/application:
branches/3.2.x/openmeetings-install/src/main/java/org/apache/openmeetings/backup/
branches/3.2.x/openmeetings-install/src/main/java/org/apache/openmeetings/cli/
branches/3.2.x/openmeetings-web/src/ma...
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;