I'm going to test the export right now :)
it was too late yesterday (~3 AM) :)))


On Mon, Feb 11, 2013 at 3:43 AM, [email protected] <
[email protected]> wrote:

> @Maxim: It seems to work fine for me now on the importing side.
> I can't really test the export, as I have no windows machine. However,
> theoretically "wrong" windows export should
>  work fine to import too. We will find that out when we have the import
> automatized via JUnit and integrated it into our nightly build easily.
>
> Great work btw :)
> Cheers!
> Sebastian
>
>
> 2013/2/11 <[email protected]>
>
> Author: solomax
>> Date: Sun Feb 10 19:34:47 2013
>> New Revision: 1444587
>>
>> URL: http://svn.apache.org/r1444587
>> Log:
>> Import: both export and import should work as expected now (requires
>> additional testing)
>>
>> Modified:
>>
>> openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/servlet/outputhandler/BackupExport.java
>>
>> openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/servlet/outputhandler/BackupImportController.java
>>
>> Modified:
>> openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/servlet/outputhandler/BackupExport.java
>> URL:
>> http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/servlet/outputhandler/BackupExport.java?rev=1444587&r1=1444586&r2=1444587&view=diff
>>
>> ==============================================================================
>> ---
>> openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/servlet/outputhandler/BackupExport.java
>> (original)
>> +++
>> openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/servlet/outputhandler/BackupExport.java
>> Sun Feb 10 19:34:47 2013
>> @@ -19,12 +19,11 @@
>>  package org.apache.openmeetings.servlet.outputhandler;
>>
>>  import java.io.File;
>> -import java.io.FileNotFoundException;
>>  import java.io.FileOutputStream;
>>  import java.io.IOException;
>>  import java.io.OutputStream;
>>  import java.io.OutputStreamWriter;
>> -import java.util.ArrayList;
>> +import java.net.URI;
>>  import java.util.Date;
>>  import java.util.List;
>>  import java.util.zip.ZipEntry;
>> @@ -74,8 +73,8 @@ import org.apache.openmeetings.persisten
>>  import org.apache.openmeetings.persistence.beans.flvrecord.FlvRecording;
>>  import org.apache.openmeetings.persistence.beans.poll.PollType;
>>  import org.apache.openmeetings.persistence.beans.poll.RoomPoll;
>> -import org.apache.openmeetings.persistence.beans.room.RoomType;
>>  import org.apache.openmeetings.persistence.beans.room.Room;
>> +import org.apache.openmeetings.persistence.beans.room.RoomType;
>>  import org.apache.openmeetings.persistence.beans.user.PrivateMessage;
>>  import org.apache.openmeetings.persistence.beans.user.State;
>>  import org.apache.openmeetings.persistence.beans.user.User;
>> @@ -383,12 +382,7 @@ public class BackupExport {
>>                         FileHelper.copyRec(sourceDirRec, targetDirRec);
>>                 }
>>
>> -               List<File> fileList = new ArrayList<File>();
>> -               log.debug("---Getting references to all files in: "
>> -                               + backup_dir.getCanonicalPath());
>> -               getAllFiles(backup_dir, fileList);
>> -               log.debug("---Creating zip file");
>> -               writeZipFile(backup_dir, fileList, new
>> FileOutputStream(filePath));
>> +               writeZipDir(backup_dir, filePath);
>>                 log.debug("---Done");
>>         }
>>
>> @@ -524,57 +518,45 @@ public class BackupExport {
>>                 }
>>         }
>>
>> -       public void getAllFiles(File dir, List<File> fileList) throws
>> IOException {
>> +       private void writeZipDir(File directoryToZip, File f) throws
>> IOException {
>> +               FileOutputStream fos = null;
>> +               ZipOutputStream zos = null;
>>                 try {
>> -                       File[] files = dir.listFiles();
>> -                       for (File file : files) {
>> -                               fileList.add(file);
>> -                               if (file.isDirectory()) {
>> -                                       // log.debug("directory:" +
>> file.getCanonicalPath());
>> -                                       getAllFiles(file, fileList);
>> -                               } else {
>> -                                       // log.debug("     file:" +
>> file.getCanonicalPath());
>> +                       fos = new FileOutputStream(f);
>> +                       zos = new ZipOutputStream(fos);
>> +
>> +                       writeZipDir(directoryToZip.toURI(),
>> directoryToZip, zos);
>> +               } finally {
>> +                       if (zos != null) {
>> +                               try {
>> +                                       zos.close();
>> +                               } catch (IOException e) {
>> +                                       log.debug("Enexpected error while
>> closing ZipOutputStream", e);
>>                                 }
>>                         }
>> -               } catch (IOException e) {
>> -                       e.printStackTrace();
>> -               }
>> -       }
>> -
>> -       public void writeZipFile(File directoryToZip, List<File> fileList,
>> -                       FileOutputStream fos) {
>> -
>> -               try {
>> -                       ZipOutputStream zos = new ZipOutputStream(fos);
>> -
>> -                       for (File file : fileList) {
>> -                               if (!file.isDirectory()) { // we only zip
>> files, not directories
>> -                                       addToZip(directoryToZip, file,
>> zos);
>> +                       if (fos != null) {
>> +                               try {
>> +                                       fos.close();
>> +                               } catch (IOException e) {
>> +                                       log.debug("Enexpected error while
>> closing FileOutputStream", e);
>>                                 }
>>                         }
>> -
>> -                       zos.close();
>> -                       fos.close();
>> -               } catch (FileNotFoundException e) {
>> -                       e.printStackTrace();
>> -               } catch (IOException e) {
>> -                       e.printStackTrace();
>>                 }
>>         }
>> +
>> +       private void writeZipDir(URI base, File dir, ZipOutputStream zos)
>> throws IOException {
>> +               for (File file : dir.listFiles()) {
>> +                       if (file.isDirectory()) {
>> +                               writeZipDir(base, file, zos);
>> +                       } else {
>> +                               String path =
>> base.relativize(file.toURI()).toString();
>> +                               log.debug("Writing '" + path + "' to zip
>> file");
>> +                               ZipEntry zipEntry = new ZipEntry(path);
>> +                               zos.putNextEntry(zipEntry);
>>
>> -       public void addToZip(File directoryToZip, File file,
>> ZipOutputStream zos)
>> -                       throws FileNotFoundException, IOException {
>> -
>> -               // we want the zipEntry's path to be a relative path that
>> is relative
>> -               // to the directory being zipped, so chop off the rest of
>> the path
>> -               String zipFilePath = file.getCanonicalPath().substring(
>> -
>> directoryToZip.getCanonicalPath().length() + 1,
>> -                               file.getCanonicalPath().length());
>> -               log.debug("Writing '" + zipFilePath + "' to zip file");
>> -               ZipEntry zipEntry = new ZipEntry(zipFilePath);
>> -               zos.putNextEntry(zipEntry);
>> -
>> -               OmFileHelper.copyFile(file, zos);
>> -               zos.closeEntry();
>> +                               OmFileHelper.copyFile(file, zos);
>> +                               zos.closeEntry();
>> +                       }
>> +               }
>>         }
>>  }
>>
>> Modified:
>> openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/servlet/outputhandler/BackupImportController.java
>> URL:
>> http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/servlet/outputhandler/BackupImportController.java?rev=1444587&r1=1444586&r2=1444587&view=diff
>>
>> ==============================================================================
>> ---
>> openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/servlet/outputhandler/BackupImportController.java
>> (original)
>> +++
>> openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/servlet/outputhandler/BackupImportController.java
>> Sun Feb 10 19:34:47 2013
>> @@ -18,6 +18,12 @@
>>   */
>>  package org.apache.openmeetings.servlet.outputhandler;
>>
>> +import static org.apache.commons.transaction.util.FileHelper.copyRec;
>> +import static
>> org.apache.openmeetings.utils.OmFileHelper.getStreamsHibernateDir;
>> +import static org.apache.openmeetings.utils.OmFileHelper.getUploadDir;
>> +import static
>> org.apache.openmeetings.utils.OmFileHelper.getUploadProfilesUserDir;
>> +import static org.apache.openmeetings.utils.OmFileHelper.profilesPrefix;
>> +
>>  import java.io.File;
>>  import java.io.FileInputStream;
>>  import java.io.IOException;
>> @@ -194,59 +200,26 @@ public class BackupImportController exte
>>                 log.debug("##### WRITE FILE TO: " + f);
>>
>>                 ZipInputStream zipinputstream = new ZipInputStream(is);
>> -
>>                 ZipEntry zipentry = zipinputstream.getNextEntry();
>> -
>>                 while (zipentry != null) {
>> +                       String fName = zipentry.getName();
>> +                       if (File.pathSeparatorChar != '\\' &&
>> fName.indexOf('\\') > -1) {
>> +                               fName = fName.replace('\\', '/');
>> +                       }
>>                         // for each entry to be extracted
>> -                       File fentryName = new File(f, zipentry.getName());
>> -
>> -                       if (zipentry.isDirectory()) {
>> -                               if (!fentryName.mkdir()) {
>> -                                       break;
>> -                               }
>> +                       File fentry = new File(f, fName);
>> +                       File dir = fentry.isDirectory() ? fentry :
>> fentry.getParentFile();
>> +                       dir.mkdirs();
>> +                       if (fentry.isDirectory()) {
>>                                 zipentry = zipinputstream.getNextEntry();
>>                                 continue;
>>                         }
>>
>> -                       File fparent = new File(fentryName.getParent());
>> -
>> -                       if (!fparent.exists()) {
>> -
>> -                               File fparentparent = new
>> File(fparent.getParent());
>> -
>> -                               if (!fparentparent.exists()) {
>> -
>> -                                       File fparentparentparent = new
>> File(
>> -
>> fparentparent.getParent());
>> -
>> -                                       if
>> (!fparentparentparent.exists()) {
>> -
>> -
>> fparentparentparent.mkdir();
>> -                                               fparentparent.mkdir();
>> -                                               fparent.mkdir();
>> -
>> -                                       } else {
>> -
>> -                                               fparentparent.mkdir();
>> -                                               fparent.mkdir();
>> -
>> -                                       }
>> -
>> -                               } else {
>> -
>> -                                       fparent.mkdir();
>> -
>> -                               }
>> -
>> -                       }
>> -
>> -                       FileHelper.copy(zipinputstream, fentryName);
>> +                       FileHelper.copy(zipinputstream, fentry);
>>                         zipinputstream.closeEntry();
>>                         zipentry = zipinputstream.getNextEntry();
>>
>> -               }// while
>> -
>> +               }
>>                 zipinputstream.close();
>>
>>                 /*
>> @@ -766,84 +739,37 @@ public class BackupImportController exte
>>                 return list;
>>         }
>>
>> -       private void importFolders(File importBaseDir)
>> -                       throws IOException {
>> -
>> +       private Long getProfileId(File f) {
>> +               String n = f.getName();
>> +               if (n.indexOf(profilesPrefix) > -1) {
>> +                       return
>> importLongType(n.substring(profilesPrefix.length()));
>> +               }
>> +               return null;
>> +       }
>> +
>> +       private void importFolders(File importBaseDir) throws IOException
>> {
>>                 // Now check the room files and import them
>>                 File roomFilesFolder = new File(importBaseDir,
>> "roomFiles");
>>
>> -               File library_dir = OmFileHelper.getUploadDir();
>> +               File uploadDir = getUploadDir();
>>
>>                 log.debug("roomFilesFolder PATH " +
>> roomFilesFolder.getCanonicalPath());
>>
>>                 if (roomFilesFolder.exists()) {
>> -
>> -                       File[] files = roomFilesFolder.listFiles();
>> -                       for (File file : files) {
>> +                       for (File file : roomFilesFolder.listFiles()) {
>>                                 if (file.isDirectory()) {
>> -
>> -                                       File parentPathFile = new
>> File(library_dir, file.getName());
>> -
>> -                                       if (!parentPathFile.exists()) {
>> -                                               parentPathFile.mkdir();
>> -                                       }
>> -
>> -                                       File[] roomOrProfileFiles =
>> file.listFiles();
>> -                                       for (File
>> roomOrProfileFileOrFolder : roomOrProfileFiles) {
>> -
>> -                                               if
>> (roomOrProfileFileOrFolder.isDirectory()) {
>> -
>> -                                                       String
>> fileOrFolderName = roomOrProfileFileOrFolder
>> -
>> .getName();
>> -                                                       int beginIndex =
>> fileOrFolderName
>> -
>> .indexOf(OmFileHelper.profilesPrefix);
>> -                                                       // Profile folder
>> should be renamed if new user id
>> -                                                       // is differ from
>> current id.
>> -                                                       if (beginIndex >
>> -1) {
>> -
>> beginIndex = beginIndex
>> -
>>       + OmFileHelper.profilesPrefix
>> -
>>                       .length();
>> -                                                               Long
>> profileId = importLongType(fileOrFolderName
>> -
>>       .substring(beginIndex));
>> -                                                               Long
>> newProfileID = getNewId(profileId,
>> -
>>       Maps.USERS);
>> -                                                               if
>> (profileId != newProfileID) {
>> -
>> fileOrFolderName = fileOrFolderName
>> -
>>               .replaceFirst(
>> -
>>                               OmFileHelper.profilesPrefix
>> -
>>                                               + profileId,
>> -
>>                               OmFileHelper.profilesPrefix
>> -
>>                                               + newProfileID);
>> -                                                               }
>> -                                                       }
>> -                                                       File
>> roomDocumentFolder = new File(parentPathFile, fileOrFolderName);
>> -
>> -                                                       if
>> (!roomDocumentFolder.exists()) {
>> -
>> roomDocumentFolder.mkdir();
>> -
>> -                                                               File[]
>> roomDocumentFiles = roomOrProfileFileOrFolder
>> -
>>       .listFiles();
>> -
>> -                                                               for (File
>> roomDocumentFile : roomDocumentFiles) {
>> -
>> if (roomDocumentFile.isDirectory()) {
>> -
>>       log.error("Folder detected in Documents space! Folder " +
>> roomDocumentFolder);
>> -                                                                       }
>> else {
>> -
>>       FileHelper.copy(roomDocumentFile, new File(roomDocumentFolder,
>> roomDocumentFile.getName()));
>> -                                                                       }
>> -                                                               }
>> -                                                       } else {
>> -
>> log.debug("Document already exists :: ",
>> -
>>       roomDocumentFolder);
>> -                                                       }
>> -                                               } else {
>> -                                                       File
>> roomFileOrProfileFile = new File(parentPathFile,
>> roomOrProfileFileOrFolder.getName());
>> -                                                       if
>> (!roomFileOrProfileFile.exists()) {
>> -
>> FileHelper.copy(roomOrProfileFileOrFolder, roomFileOrProfileFile);
>> -                                                       } else {
>> -
>> log.debug("File does already exist :: ", roomFileOrProfileFile);
>> +                                       String fName = file.getName();
>> +                                       if ("profiles".equals(fName)) {
>> +                                               for (File profile :
>> file.listFiles()) {
>> +                                                       Long oldId =
>> getProfileId(profile);
>> +                                                       Long id = oldId
>> != null ? getNewId(oldId, Maps.USERS) : null;
>> +                                                       if (id != null) {
>> +
>> copyRec(profile, getUploadProfilesUserDir(id));
>>                                                         }
>>                                                 }
>> +                                               continue;
>>                                         }
>> +                                       copyRec(file, new File(uploadDir,
>> fName));
>>                                 }
>>                         }
>>                 }
>> @@ -855,53 +781,56 @@ public class BackupImportController exte
>>                 log.debug("sourceDirRec PATH " +
>> sourceDirRec.getCanonicalPath());
>>
>>                 if (sourceDirRec.exists()) {
>> -                       File targetDirRec =
>> OmFileHelper.getStreamsHibernateDir();
>> +                       File targetDirRec = getStreamsHibernateDir();
>>
>> -                       FileHelper.copyRec(sourceDirRec, targetDirRec);
>> +                       copyRec(sourceDirRec, targetDirRec);
>>                 }
>>         }
>>
>>         private Long importLongType(String value) {
>> -
>>                 if (value.equals("null") || value.equals("")) {
>>                         return null;
>>                 }
>>
>>                 return Long.valueOf(value).longValue();
>> -
>>         }
>>
>>         private Long getNewId(Long oldId, Maps map) {
>>                 Long newId = oldId;
>>                 switch (map) {
>> -               case USERS:
>> -                       if (usersMap.get(oldId) != null)
>> -                               newId = usersMap.get(oldId);
>> -                       break;
>> -               case ORGANISATIONS:
>> -                       if (organisationsMap.get(oldId) != null)
>> -                               newId = organisationsMap.get(oldId);
>> -                       break;
>> -               case APPOINTMENTS:
>> -                       if (appointmentsMap.get(oldId) != null)
>> -                               newId = appointmentsMap.get(oldId);
>> -                       break;
>> -               case ROOMS:
>> -                       if (roomsMap.get(oldId) != null)
>> -                               newId = roomsMap.get(oldId);
>> -                       break;
>> -               case MESSAGEFOLDERS:
>> -                       if (messageFoldersMap.get(oldId) != null)
>> -                               newId = messageFoldersMap.get(oldId);
>> -                       break;
>> -               case USERCONTACTS:
>> -                       if (userContactsMap.get(oldId) != null)
>> -                               newId = userContactsMap.get(oldId);
>> -                       break;
>> -               default:
>> -                       break;
>> +                       case USERS:
>> +                               if (usersMap.containsKey(oldId)) {
>> +                                       newId = usersMap.get(oldId);
>> +                               }
>> +                               break;
>> +                       case ORGANISATIONS:
>> +                               if (organisationsMap.containsKey(oldId)) {
>> +                                       newId =
>> organisationsMap.get(oldId);
>> +                               }
>> +                               break;
>> +                       case APPOINTMENTS:
>> +                               if (appointmentsMap.containsKey(oldId)) {
>> +                                       newId =
>> appointmentsMap.get(oldId);
>> +                               }
>> +                               break;
>> +                       case ROOMS:
>> +                               if (roomsMap.containsKey(oldId)) {
>> +                                       newId = roomsMap.get(oldId);
>> +                               }
>> +                               break;
>> +                       case MESSAGEFOLDERS:
>> +                               if (messageFoldersMap.containsKey(oldId))
>> {
>> +                                       newId =
>> messageFoldersMap.get(oldId);
>> +                               }
>> +                               break;
>> +                       case USERCONTACTS:
>> +                               if (userContactsMap.containsKey(oldId)) {
>> +                                       newId =
>> userContactsMap.get(oldId);
>> +                               }
>> +                               break;
>> +                       default:
>> +                               break;
>>                 }
>>                 return newId;
>>         }
>> -
>>  }
>>
>>
>>
>
>
> --
> Sebastian Wagner
> https://twitter.com/#!/dead_lock
> http://www.webbase-design.de
> http://www.wagner-sebastian.com
> [email protected]
>



-- 
WBR
Maxim aka solomax

Reply via email to