You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openmeetings.apache.org by so...@apache.org on 2017/10/13 05:34:56 UTC

openmeetings git commit: [OPENMEETINGS-1720] presentations are converted during backup

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 <so...@gmail.com>
Authored: Fri Oct 13 12:34:48 2017 +0700
Committer: Maxim Solodovnik <so...@gmail.com>
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);
-		}
-	}
 }