Repository: openmeetings
Updated Branches:
  refs/heads/master 955930b51 -> 4225fdb5b


[OPENMEETINGS-1720] presentations are converted during backup


Project: http://git-wip-us.apache.org/repos/asf/openmeetings/repo
Commit: http://git-wip-us.apache.org/repos/asf/openmeetings/commit/4225fdb5
Tree: http://git-wip-us.apache.org/repos/asf/openmeetings/tree/4225fdb5
Diff: http://git-wip-us.apache.org/repos/asf/openmeetings/diff/4225fdb5

Branch: refs/heads/master
Commit: 4225fdb5b9cb908bc282acc9b72936e20cbef13e
Parents: 955930b
Author: Maxim Solodovnik <[email protected]>
Authored: Fri Oct 13 12:34:48 2017 +0700
Committer: Maxim Solodovnik <[email protected]>
Committed: Fri Oct 13 12:34:48 2017 +0700

----------------------------------------------------------------------
 .../core/data/file/FileProcessor.java           |  4 +-
 .../db/entity/file/BaseFileItem.java            | 79 ++++++++++++--------
 .../openmeetings/backup/BackupImport.java       | 28 ++++++-
 .../openmeetings/backup/BackupVersion.java      |  5 ++
 .../web/common/tree/DownloadMenuItem.java       | 36 +--------
 5 files changed, 84 insertions(+), 68 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/openmeetings/blob/4225fdb5/openmeetings-core/src/main/java/org/apache/openmeetings/core/data/file/FileProcessor.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-core/src/main/java/org/apache/openmeetings/core/data/file/FileProcessor.java
 
b/openmeetings-core/src/main/java/org/apache/openmeetings/core/data/file/FileProcessor.java
index 438f1ed..4714836 100644
--- 
a/openmeetings-core/src/main/java/org/apache/openmeetings/core/data/file/FileProcessor.java
+++ 
b/openmeetings-core/src/main/java/org/apache/openmeetings/core/data/file/FileProcessor.java
@@ -54,7 +54,7 @@ public class FileProcessor {
        @Autowired
        private ImageConverter imageConverter;
        @Autowired
-       private DocumentConverter generatePDF;
+       private DocumentConverter docConverter;
 
        //TODO this method need to be refactored to throw exceptions
        public ProcessResultList processFile(FileItem f, InputStream is) throws 
Exception {
@@ -111,7 +111,7 @@ public class FileProcessor {
                        if (isOffice || isPdf) {
                                copyFile(temp, file);
                                // convert to pdf, thumbs, swf and 
xml-description
-                               result = generatePDF.convertPDF(f, sf);
+                               result = docConverter.convertPDF(f, sf);
                        } else if (isChart) {
                                //TODO should be implemented
                                log.debug("uploaded chart file");

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/4225fdb5/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/file/BaseFileItem.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/file/BaseFileItem.java
 
b/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/file/BaseFileItem.java
index a1f9ab2..20b4a80 100644
--- 
a/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/file/BaseFileItem.java
+++ 
b/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/file/BaseFileItem.java
@@ -31,7 +31,10 @@ import static 
org.apache.openmeetings.util.OmFileHelper.getUploadFilesDir;
 import static org.apache.openmeetings.util.OmFileHelper.getUploadWmlDir;
 
 import java.io.File;
+import java.io.FileFilter;
+import java.util.HashSet;
 import java.util.List;
+import java.util.Set;
 
 import javax.persistence.Column;
 import javax.persistence.Entity;
@@ -49,6 +52,7 @@ import javax.persistence.Transient;
 import javax.xml.bind.annotation.XmlType;
 
 import org.apache.openmeetings.db.entity.HistoricalEntity;
+import org.apache.openmeetings.util.OmFileHelper;
 import org.simpleframework.xml.Element;
 
 @Entity
@@ -295,6 +299,20 @@ public abstract class BaseFileItem extends 
HistoricalEntity {
                return f;
        }
 
+       public final File getOriginal() {
+               File f = getFile(null);
+               if (f != null) {
+                       File p = f.getParentFile();
+                       if (p != null && p.exists()) {
+                               File[] ff = p.listFiles(new OriginalFilter());
+                               if (ff != null && ff.length > 0) {
+                                       f = ff[0];
+                               }
+                       }
+               }
+               return f;
+       }
+
        public final boolean exists() {
                return exists(null);
        }
@@ -312,50 +330,51 @@ public abstract class BaseFileItem extends 
HistoricalEntity {
                final int prime = 31;
                int result = 1;
                result = prime * result + ((hash == null) ? 0 : 
hash.hashCode());
-               result = prime * result + ((name == null) ? 0 : 
name.hashCode());
-               result = prime * result + ((ownerId == null) ? 0 : 
ownerId.hashCode());
-               result = prime * result + ((parentId == null) ? 0 : 
parentId.hashCode());
-               result = prime * result + ((roomId == null) ? 0 : 
roomId.hashCode());
                result = prime * result + ((type == null) ? 0 : 
type.hashCode());
                return result;
        }
 
        @Override
        public boolean equals(Object obj) {
-               if (this == obj)
+               if (this == obj) {
                        return true;
-               if (obj == null)
+               }
+               if (obj == null) {
                        return false;
-               if (getClass() != obj.getClass())
+               }
+               if (getClass() != obj.getClass()) {
                        return false;
+               }
                BaseFileItem other = (BaseFileItem) obj;
                if (hash == null) {
-                       if (other.hash != null)
-                               return false;
-               } else if (!hash.equals(other.hash))
-                       return false;
-               if (name == null) {
-                       if (other.name != null)
-                               return false;
-               } else if (!name.equals(other.name))
-                       return false;
-               if (ownerId == null) {
-                       if (other.ownerId != null)
-                               return false;
-               } else if (!ownerId.equals(other.ownerId))
-                       return false;
-               if (parentId == null) {
-                       if (other.parentId != null)
-                               return false;
-               } else if (!parentId.equals(other.parentId))
-                       return false;
-               if (roomId == null) {
-                       if (other.roomId != null)
+                       if (other.hash != null) {
                                return false;
-               } else if (!roomId.equals(other.roomId))
+                       }
+               } else if (!hash.equals(other.hash)) {
                        return false;
-               if (type != other.type)
+               }
+               if (type != other.type) {
                        return false;
+               }
                return true;
        }
+
+       private class OriginalFilter implements FileFilter {
+               Set<String> exclusions = new HashSet<>();
+
+               OriginalFilter() {
+                       exclusions.add(EXTENSION_JPG);
+                       exclusions.add("swf");
+                       if (Type.Presentation == getType()) {
+                               exclusions.add(EXTENSION_PDF);
+                       }
+               }
+
+               @Override
+               public boolean accept(File f) {
+                       String n = f.getName();
+                       String ext = OmFileHelper.getFileExt(n);
+                       return n.startsWith(getHash()) && 
!exclusions.contains(ext);
+               }
+       }
 }

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/4225fdb5/openmeetings-install/src/main/java/org/apache/openmeetings/backup/BackupImport.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/BackupImport.java
 
b/openmeetings-install/src/main/java/org/apache/openmeetings/backup/BackupImport.java
index 99594f5..53b239e 100644
--- 
a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/BackupImport.java
+++ 
b/openmeetings-install/src/main/java/org/apache/openmeetings/backup/BackupImport.java
@@ -34,6 +34,7 @@ import static 
org.apache.openmeetings.util.OmFileHelper.PROFILES_DIR;
 import static org.apache.openmeetings.util.OmFileHelper.PROFILES_PREFIX;
 import static org.apache.openmeetings.util.OmFileHelper.RECORDING_FILE_NAME;
 import static org.apache.openmeetings.util.OmFileHelper.THUMB_IMG_PREFIX;
+import static org.apache.openmeetings.util.OmFileHelper.getFileExt;
 import static org.apache.openmeetings.util.OmFileHelper.getFileName;
 import static org.apache.openmeetings.util.OmFileHelper.getStreamsHibernateDir;
 import static org.apache.openmeetings.util.OmFileHelper.getUploadDir;
@@ -137,6 +138,7 @@ import 
org.apache.openmeetings.backup.converter.RoomConverter;
 import org.apache.openmeetings.backup.converter.RoomTypeConverter;
 import org.apache.openmeetings.backup.converter.SalutationConverter;
 import org.apache.openmeetings.backup.converter.UserConverter;
+import org.apache.openmeetings.core.converter.DocumentConverter;
 import org.apache.openmeetings.db.dao.basic.ChatDao;
 import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
 import org.apache.openmeetings.db.dao.calendar.AppointmentDao;
@@ -184,6 +186,7 @@ import org.apache.openmeetings.db.util.AuthLevelUtil;
 import org.apache.openmeetings.db.util.TimezoneUtil;
 import org.apache.openmeetings.util.CalendarPatterns;
 import org.apache.openmeetings.util.OmFileHelper;
+import org.apache.openmeetings.util.StoredFile;
 import org.apache.openmeetings.util.crypt.SCryptImplementation;
 import org.apache.wicket.util.string.Strings;
 import org.red5.logging.Red5LoggerFactory;
@@ -316,6 +319,8 @@ public class BackupImport {
        private OAuth2Dao auth2Dao;
        @Autowired
        private GroupDao groupDao;
+       @Autowired
+       private DocumentConverter docConverter;
 
        private final Map<Long, Long> userMap = new HashMap<>();
        private final Map<Long, Long> groupMap = new HashMap<>();
@@ -398,7 +403,7 @@ public class BackupImport {
                importPrivateMsgFolders(f, simpleSerializer);
                importContacts(f);
                importPrivateMsgs(f);
-               importFiles(f);
+               importFiles(f, ver.compareTo(BackupVersion.get("4.0.0")) < 0);
                importPolls(f);
                importRoomFiles(f);
 
@@ -408,6 +413,13 @@ public class BackupImport {
                 */
                importFolders(f);
 
+               if (ver.compareTo(BackupVersion.get("4.0.0")) < 0) {
+                       for (BaseFileItem bfi : fileItemDao.get()) {
+                               if (BaseFileItem.Type.Presentation == 
bfi.getType()) {
+                                       convertOldPresentation(bfi);
+                               }
+                       }
+               }
                log.info("File explorer item import complete, clearing temp 
files");
 
                FileUtils.deleteDirectory(f);
@@ -835,7 +847,7 @@ public class BackupImport {
        /*
         * ##################### Import File-Explorer Items
         */
-       private void importFiles(File f) throws Exception {
+       private void importFiles(File f, boolean old) throws Exception {
                log.info("Private message import complete, starting file 
explorer item import");
                List<FileItem> list = readFileItemList(f, 
"fileExplorerItems.xml", "fileExplorerItems");
                for (FileItem file : list) {
@@ -1488,4 +1500,16 @@ public class BackupImport {
                }
                return countries.getProperty(String.format("country.%s", 
countryId));
        }
+
+       private void convertOldPresentation(BaseFileItem bfi) {
+               File f = bfi.getOriginal();
+               if (f != null && f.exists()) {
+                       try {
+                               StoredFile sf = new StoredFile(bfi.getHash(), 
getFileExt(f.getName()), f);
+                               docConverter.convertPDF((FileItem)bfi, sf);
+                       } catch (Exception e) {
+                               log.error("Unexpected exception while 
converting OLD format presentations", e);
+                       }
+               }
+       }
 }

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/4225fdb5/openmeetings-install/src/main/java/org/apache/openmeetings/backup/BackupVersion.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/BackupVersion.java
 
b/openmeetings-install/src/main/java/org/apache/openmeetings/backup/BackupVersion.java
index 6b010cb..740ddeb 100644
--- 
a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/BackupVersion.java
+++ 
b/openmeetings-install/src/main/java/org/apache/openmeetings/backup/BackupVersion.java
@@ -140,4 +140,9 @@ public class BackupVersion implements Serializable, 
Comparable<BackupVersion> {
                }
                return true;
        }
+
+       @Override
+       public String toString() {
+               return String.format("%s.%s.%s", major, minor, micro);
+       }
 }

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/4225fdb5/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/DownloadMenuItem.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/DownloadMenuItem.java
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/DownloadMenuItem.java
index f21d9fe..56e87ad 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/DownloadMenuItem.java
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/DownloadMenuItem.java
@@ -18,17 +18,10 @@
  */
 package org.apache.openmeetings.web.common.tree;
 
-import static org.apache.openmeetings.util.OmFileHelper.EXTENSION_JPG;
-import static org.apache.openmeetings.util.OmFileHelper.EXTENSION_PDF;
-
 import java.io.File;
-import java.io.FileFilter;
-import java.util.HashSet;
-import java.util.Set;
 
 import org.apache.openmeetings.db.entity.file.BaseFileItem;
 import org.apache.openmeetings.db.entity.file.BaseFileItem.Type;
-import org.apache.openmeetings.util.OmFileHelper;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 
 import com.googlecode.wicket.jquery.ui.JQueryIcon;
@@ -57,36 +50,11 @@ public class DownloadMenuItem extends MenuItem {
        @Override
        public void onClick(AjaxRequestTarget target) {
                BaseFileItem fi = tree.getLastSelected();
-               File f = fi.getFile(ext);
+               File f = ext == null && (Type.Image == fi.getType() || 
Type.Presentation == fi.getType())
+                               ? fi.getOriginal() : fi.getFile(ext);
                if (f != null && f.exists()) {
-                       if (ext == null && (Type.Image == fi.getType() || 
Type.Presentation == fi.getType())) {
-                               File[] ff = f.getParentFile().listFiles(new 
OriginalFilter(fi));
-                               if (ff != null && ff.length > 0) {
-                                       f = ff[0];
-                               }
-                       }
                        tree.dwnldFile = f;
                        tree.downloader.initiate(target);
                }
        }
-
-       private static class OriginalFilter implements FileFilter {
-               final BaseFileItem fi;
-               Set<String> exclusions = new HashSet<>();
-
-               OriginalFilter(BaseFileItem fi) {
-                       this.fi = fi;
-                       exclusions.add(EXTENSION_JPG);
-                       if (Type.Presentation == fi.getType()) {
-                               exclusions.add(EXTENSION_PDF);
-                       }
-               }
-
-               @Override
-               public boolean accept(File f) {
-                       String n = f.getName();
-                       String ext = OmFileHelper.getFileExt(n);
-                       return n.startsWith(fi.getHash()) && 
!exclusions.contains(ext);
-               }
-       }
 }

Reply via email to