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); - } - } }
