[OPENMEETINGS-2146] file/recording hash is only being changed if necessary
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 e1c46e7..adaaa7d 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
@@ -120,6 +120,7 @@
 import java.util.TreeMap;
 import java.util.function.BiConsumer;
 import java.util.function.Consumer;
+import java.util.regex.Pattern;
 import java.util.zip.ZipEntry;
 import java.util.zip.ZipInputStream;
 
@@ -146,6 +147,7 @@
 import org.apache.openmeetings.db.dao.calendar.AppointmentDao;
 import org.apache.openmeetings.db.dao.calendar.MeetingMemberDao;
 import org.apache.openmeetings.db.dao.calendar.OmCalendarDao;
+import org.apache.openmeetings.db.dao.file.BaseFileItemDao;
 import org.apache.openmeetings.db.dao.file.FileItemDao;
 import org.apache.openmeetings.db.dao.record.RecordingDao;
 import org.apache.openmeetings.db.dao.room.PollDao;
@@ -208,6 +210,7 @@
 	private static final Logger log = LoggerFactory.getLogger(BackupImport.class);
 	private static final Map<String, String> outdatedConfigKeys = new HashMap<>();
 	private static final Map<String, Configuration.Type> configTypes = new HashMap<>();
+	private static final Pattern UUID_PATTERN = Pattern.compile("^[\\da-f]{8}(?:-[\\da-f]{4}){3}-[\\da-f]{12}$");
 	static {
 		outdatedConfigKeys.put("crypt_ClassName", CONFIG_CRYPT);
 		outdatedConfigKeys.put("system_email_addr", CONFIG_SMTP_SYSTEM_EMAIL);
@@ -903,13 +906,13 @@
 				}
 			}
 			String oldHash = r.getHash();
-			r.setHash(randomUUID().toString());
 			if (!Strings.isEmpty(oldHash) && oldHash.startsWith(RECORDING_FILE_NAME)) {
 				String name = getFileName(oldHash);
 				fileMap.put(String.format(FILE_NAME_FMT, name, EXTENSION_JPG), String.format(FILE_NAME_FMT, r.getHash(), EXTENSION_PNG));
 				fileMap.put(String.format("%s.%s.%s", name, "flv", EXTENSION_MP4), String.format(FILE_NAME_FMT, r.getHash(), EXTENSION_MP4));
+				r.setHash(randomUUID().toString());
 			} else {
-				hashMap.put(oldHash, r.getHash());
+				checkHash(r, recordingDao);
 			}
 			r = recordingDao.update(r);
 			if (BaseFileItem.Type.Folder == r.getType()) {
@@ -919,6 +922,14 @@
 		});
 	}
 
+	private void checkHash(BaseFileItem file, BaseFileItemDao dao) {
+		String oldHash = file.getHash();
+		if (Strings.isEmpty(oldHash) || !UUID_PATTERN.matcher(oldHash).matches() || dao.get(oldHash) != null) {
+			file.setHash(randomUUID().toString());
+			hashMap.put(oldHash, file.getHash());
+		}
+	}
+
 	/*
 	 * ##################### Import Private Message Folders
 	 */
@@ -1013,9 +1024,7 @@
 			Long fId = file.getId();
 			// We need to reset this as openJPA reject to store them otherwise
 			file.setId(null);
-			String oldHash = file.getHash();
-			file.setHash(randomUUID().toString());
-			hashMap.put(oldHash, file.getHash());
+			checkHash(file, recordingDao);
 			file = fileItemDao.update(file);
 			if (BaseFileItem.Type.Folder == file.getType()) {
 				folders.put(fId, file.getId());