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>