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;