This is an automated email from the ASF dual-hosted git repository.

solomax pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/openmeetings.git


The following commit(s) were added to refs/heads/master by this push:
     new e32a13e  [OPENMEETINGS-2177] file import should work better
e32a13e is described below

commit e32a13e677527ce38d54ea3eacde5da96c3d0cdf
Author: Maxim Solodovnik <[email protected]>
AuthorDate: Fri Mar 6 23:46:37 2020 +0700

    [OPENMEETINGS-2177] file import should work better
---
 .../org/apache/openmeetings/db/bind/Constants.java |  2 +-
 .../db/bind/adapter/OauthMapAdapter.java           |  2 +-
 .../openmeetings/db/entity/file/BaseFileItem.java  |  1 +
 .../openmeetings/db/entity/user/Address.java       |  2 ++
 .../apache/openmeetings/backup/BackupImport.java   | 38 ++++++++++++++--------
 .../org/apache/openmeetings/util/OmFileHelper.java |  2 +-
 openmeetings-web/pom.xml                           | 12 -------
 .../org/apache/openmeetings/backup/TestExport.java |  2 ++
 .../org/apache/openmeetings/backup/user/users.xml  |  1 +
 9 files changed, 33 insertions(+), 29 deletions(-)

diff --git 
a/openmeetings-db/src/main/java/org/apache/openmeetings/db/bind/Constants.java 
b/openmeetings-db/src/main/java/org/apache/openmeetings/db/bind/Constants.java
index 9fe67d3..10c15c1 100644
--- 
a/openmeetings-db/src/main/java/org/apache/openmeetings/db/bind/Constants.java
+++ 
b/openmeetings-db/src/main/java/org/apache/openmeetings/db/bind/Constants.java
@@ -52,7 +52,7 @@ public class Constants {
        public static final String MSG_LIST_NODE = "privatemessages";
        public static final String MSG_NODE = "privatemessage";
        public static final String FILE_LIST_NODE = "fileExplorerItems";
-       public static final String FILE_NODE = "fileExplorerItem";
+       public static final String FILE_NODE = "fileItem";
        public static final String POLL_LIST_NODE = "roompolls";
        public static final String POLL_NODE = "roompoll";
        public static final String ROOM_FILE_LIST_NODE = "RoomFiles";
diff --git 
a/openmeetings-db/src/main/java/org/apache/openmeetings/db/bind/adapter/OauthMapAdapter.java
 
b/openmeetings-db/src/main/java/org/apache/openmeetings/db/bind/adapter/OauthMapAdapter.java
index f5cd0fc..aa932bb 100644
--- 
a/openmeetings-db/src/main/java/org/apache/openmeetings/db/bind/adapter/OauthMapAdapter.java
+++ 
b/openmeetings-db/src/main/java/org/apache/openmeetings/db/bind/adapter/OauthMapAdapter.java
@@ -50,7 +50,7 @@ public class OauthMapAdapter extends XmlAdapter<Object, 
Map<String, String>> {
                        entry.appendChild(value);
                        root.appendChild(entry);
                }
-               return document;
+               return root;
        }
 
        private static void putValue(Map<String, String> map, String key, 
String value) {
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 b07bd38..c8fa9cf 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
@@ -95,6 +95,7 @@ public abstract class BaseFileItem extends HistoricalEntity {
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        @Column(name = "id")
+       @XmlTransient
        private Long id;
 
        @Column(name = "name")
diff --git 
a/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/user/Address.java
 
b/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/user/Address.java
index 88a5ce2..bf01604 100644
--- 
a/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/user/Address.java
+++ 
b/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/user/Address.java
@@ -27,6 +27,7 @@ import javax.persistence.Lob;
 import javax.persistence.Table;
 import javax.xml.bind.annotation.XmlElement;
 import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlTransient;
 
 import org.apache.openmeetings.db.entity.HistoricalEntity;
 
@@ -38,6 +39,7 @@ public class Address extends HistoricalEntity {
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        @Column(name = "id")
+       @XmlTransient
        private Long id;
 
        @Column(name = "additionalname")
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 761a8e5..86a9bcc 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
@@ -153,6 +153,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
 import java.util.TreeMap;
+import java.util.function.BiConsumer;
 import java.util.function.Consumer;
 import java.util.regex.Pattern;
 import java.util.zip.ZipEntry;
@@ -500,6 +501,7 @@ public class BackupImport {
                JAXBContext jc = JAXBContext.newInstance(eClazz);
                Unmarshaller unmarshaller = jc.createUnmarshaller();
                unmarshaller.setAdapter(new UserAdapter(userDao, userMap));
+
                readList(unmarshaller, base, "configs.xml", CFG_LIST_NODE, 
CFG_NODE, eClazz, c -> {
                        if (c.getKey() == null || c.isDeleted()) {
                                return;
@@ -609,6 +611,7 @@ public class BackupImport {
                Unmarshaller unmarshaller = jc.createUnmarshaller();
                unmarshaller.setAdapter(new GroupAdapter(groupDao, groupMap));
                int minLoginLength = getMinLoginLength();
+
                readList(unmarshaller, base, "users.xml", USER_LIST_NODE, 
USER_NODE, eClazz, u -> {
                        if (u.getLogin() == null || u.isDeleted()) {
                                return;
@@ -672,6 +675,7 @@ public class BackupImport {
                JAXBContext jc = JAXBContext.newInstance(eClazz);
                Unmarshaller unmarshaller = jc.createUnmarshaller();
                unmarshaller.setAdapter(new UserAdapter(userDao, userMap));
+
                readList(unmarshaller, base, "rooms.xml", ROOM_LIST_NODE, 
ROOM_NODE, eClazz, r -> {
                        Long roomId = r.getId();
 
@@ -726,6 +730,7 @@ public class BackupImport {
                Unmarshaller unmarshaller = jc.createUnmarshaller();
                unmarshaller.setAdapter(new UserAdapter(userDao, userMap));
                unmarshaller.setAdapter(new RoomAdapter(roomDao, roomMap));
+
                readList(unmarshaller, base, "chat_messages.xml", 
CHAT_LIST_NODE, CHAT_NODE, eClazz, m -> {
                        m.setId(null);
                        if (m.getFromUser() == null || m.getFromUser().getId() 
== null
@@ -747,6 +752,7 @@ public class BackupImport {
                JAXBContext jc = JAXBContext.newInstance(eClazz);
                Unmarshaller unmarshaller = jc.createUnmarshaller();
                unmarshaller.setAdapter(new UserAdapter(userDao, userMap));
+
                readList(unmarshaller, base, "calendars.xml", 
CALENDAR_LIST_NODE, CALENDAR_NODE, eClazz, c -> {
                        Long id = c.getId();
                        c.setId(null);
@@ -889,14 +895,13 @@ public class BackupImport {
                                        chunk.setRecording(r);
                                }
                        }
-                       String oldHash = r.getHash();
-                       if (!Strings.isEmpty(oldHash) && 
oldHash.startsWith(RECORDING_FILE_NAME)) {
-                               String name = getFileName(oldHash);
-                               r.setHash(randomUUID().toString());
-                               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));
-                       }
-                       checkHash(r, recordingDao);
+                       checkHash(r, recordingDao, (oldHash, newHash) -> {
+                               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, newHash, EXTENSION_PNG));
+                                       fileMap.put(String.format("%s.%s.%s", 
name, "flv", EXTENSION_MP4), String.format(FILE_NAME_FMT, newHash, 
EXTENSION_MP4));
+                               }
+                       });
                        r = recordingDao.update(r);
                        if (BaseFileItem.Type.FOLDER == r.getType()) {
                                folders.put(recId, r.getId());
@@ -905,11 +910,16 @@ public class BackupImport {
                });
        }
 
-       private void checkHash(BaseFileItem file, BaseFileItemDao dao) {
+       private void checkHash(BaseFileItem file, BaseFileItemDao dao, 
BiConsumer<String, String> consumer) {
                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());
+                       if (consumer != null) {
+                               consumer.accept(oldHash, file.getHash());
+                       }
+               } else {
+                       hashMap.put(file.getHash(), file.getHash());
                }
        }
 
@@ -939,7 +949,7 @@ public class BackupImport {
                Unmarshaller unmarshaller = jc.createUnmarshaller();
                unmarshaller.setAdapter(new UserAdapter(userDao, userMap));
 
-               readList(base, "userContacts.xml", CONTACT_LIST_NODE, 
CONTACT_NODE, eClazz, uc -> {
+               readList(unmarshaller, base, "userContacts.xml", 
CONTACT_LIST_NODE, CONTACT_NODE, eClazz, uc -> {
                        Long ucId = uc.getId();
                        UserContact storedUC = userContactDao.get(ucId);
 
@@ -965,7 +975,7 @@ public class BackupImport {
                unmarshaller.setAdapter(new UserAdapter(userDao, userMap));
                unmarshaller.setAdapter(new RoomAdapter(roomDao, roomMap));
 
-               readList(base, "privateMessages.xml", MSG_LIST_NODE, MSG_NODE, 
eClazz, p -> {
+               readList(unmarshaller, base, "privateMessages.xml", 
MSG_LIST_NODE, MSG_NODE, eClazz, p -> {
                        p.setId(null);
                        p.setFolderId(messageFolderMap.get(p.getFolderId()));
                        
p.setUserContactId(userContactMap.get(p.getUserContactId()));
@@ -996,7 +1006,7 @@ public class BackupImport {
                        Long fId = file.getId();
                        // We need to reset this as openJPA reject to store 
them otherwise
                        file.setId(null);
-                       checkHash(file, fileItemDao);
+                       checkHash(file, fileItemDao, null);
                        file = fileItemDao.update(file);
                        if (BaseFileItem.Type.FOLDER == file.getType()) {
                                folders.put(fId, file.getId());
@@ -1018,7 +1028,7 @@ public class BackupImport {
                unmarshaller.setAdapter(new UserAdapter(userDao, userMap));
                unmarshaller.setAdapter(new RoomAdapter(roomDao, roomMap));
 
-               readList(base, "roompolls.xml", POLL_LIST_NODE, POLL_NODE, 
eClazz, rp -> {
+               readList(unmarshaller, base, "roompolls.xml", POLL_LIST_NODE, 
POLL_NODE, eClazz, rp -> {
                        rp.setId(null);
                        if (rp.getRoom() == null || rp.getRoom().getId() == 
null) {
                                //room was deleted
@@ -1046,7 +1056,7 @@ public class BackupImport {
                Unmarshaller unmarshaller = jc.createUnmarshaller();
                unmarshaller.setAdapter(new FileAdapter(fileItemDao, 
fileItemMap));
 
-               readList(base, "roomFiles.xml", ROOM_FILE_LIST_NODE, 
ROOM_FILE_NODE, eClazz, rf -> {
+               readList(unmarshaller, base, "roomFiles.xml", 
ROOM_FILE_LIST_NODE, ROOM_FILE_NODE, eClazz, rf -> {
                        Room r = roomDao.get(roomMap.get(rf.getRoomId()));
                        if (r == null || rf.getFile() == null || 
rf.getFile().getId() == null) {
                                return;
diff --git 
a/openmeetings-util/src/main/java/org/apache/openmeetings/util/OmFileHelper.java
 
b/openmeetings-util/src/main/java/org/apache/openmeetings/util/OmFileHelper.java
index 4a92ce3..3c7ec65 100644
--- 
a/openmeetings-util/src/main/java/org/apache/openmeetings/util/OmFileHelper.java
+++ 
b/openmeetings-util/src/main/java/org/apache/openmeetings/util/OmFileHelper.java
@@ -381,7 +381,7 @@ public class OmFileHelper {
 
        public static String getFileName(String name) {
                int dotidx = name.lastIndexOf('.');
-               return dotidx < 0 ? "" : name.substring(0, dotidx);
+               return dotidx < 0 ? name : name.substring(0, dotidx);
        }
 
        public static String getFileExt(String name) {
diff --git a/openmeetings-web/pom.xml b/openmeetings-web/pom.xml
index 15648e0..2ad8468 100644
--- a/openmeetings-web/pom.xml
+++ b/openmeetings-web/pom.xml
@@ -348,18 +348,6 @@
                                                                <artifactItem>
                                                                        
<groupId>org.apache.openmeetings</groupId>
                                                                        
<artifactId>test-backup</artifactId>
-                                                                       
<version>3.1.3</version>
-                                                                       
<type>zip</type>
-                                                               </artifactItem>
-                                                               <artifactItem>
-                                                                       
<groupId>org.apache.openmeetings</groupId>
-                                                                       
<artifactId>test-backup</artifactId>
-                                                                       
<version>3.2.1</version>
-                                                                       
<type>zip</type>
-                                                               </artifactItem>
-                                                               <artifactItem>
-                                                                       
<groupId>org.apache.openmeetings</groupId>
-                                                                       
<artifactId>test-backup</artifactId>
                                                                        
<version>3.3.0</version>
                                                                        
<type>zip</type>
                                                                </artifactItem>
diff --git 
a/openmeetings-web/src/test/java/org/apache/openmeetings/backup/TestExport.java 
b/openmeetings-web/src/test/java/org/apache/openmeetings/backup/TestExport.java
index ee07ed3..0c08ab2 100644
--- 
a/openmeetings-web/src/test/java/org/apache/openmeetings/backup/TestExport.java
+++ 
b/openmeetings-web/src/test/java/org/apache/openmeetings/backup/TestExport.java
@@ -22,6 +22,7 @@ import java.io.File;
 import java.io.IOException;
 import java.io.StringWriter;
 import java.io.Writer;
+import java.time.LocalDate;
 
 import javax.xml.bind.JAXBContext;
 import javax.xml.bind.Marshaller;
@@ -42,6 +43,7 @@ public class TestExport extends AbstractJUnitDefaults {
        @Test
        public void exportUser() throws Exception {
                User u = createUser();
+               u.setAge(LocalDate.of(1977, 11, 13));
                Group g = groupDao.get(1L);
                u.addGroup(g);
                Class<User> eClazz = User.class;
diff --git 
a/openmeetings-web/src/test/resources/org/apache/openmeetings/backup/user/users.xml
 
b/openmeetings-web/src/test/resources/org/apache/openmeetings/backup/user/users.xml
index ee3c11f..2e2bf56 100644
--- 
a/openmeetings-web/src/test/resources/org/apache/openmeetings/backup/user/users.xml
+++ 
b/openmeetings-web/src/test/resources/org/apache/openmeetings/backup/user/users.xml
@@ -89,6 +89,7 @@ see http://openmeetings.apache.org/Upgrade.html for Details
          <firstname><![CDATA[Rururca]]></firstname>
          <lastname><![CDATA[Pogolun ]]></lastname>
          <login><![CDATA[1_rururca.pogolun@local]]></login>
+         <age class="java.util.Date"><![CDATA[1977-11-13]]></age>
          <deleted><![CDATA[false]]></deleted>
          <language_id><![CDATA[9]]></language_id>
          <address>

Reply via email to