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 2019/09/20 12:26:50 UTC

[openmeetings] branch master updated: [OPENMEETINGS-2113] code should be optimized, build should be fixed

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 9b25bea  [OPENMEETINGS-2113] code should be optimized, build should be fixed
9b25bea is described below

commit 9b25bea0fe682e65a9da2166165605a765f5adf6
Author: Maxim Solodovnik <so...@gmail.com>
AuthorDate: Fri Sep 20 19:26:38 2019 +0700

    [OPENMEETINGS-2113] code should be optimized, build should be fixed
---
 .../openmeetings/backup/BackupException.java       |   6 +-
 .../apache/openmeetings/backup/BackupImport.java   | 192 +++++++++------------
 pom.xml                                            |   2 +-
 3 files changed, 89 insertions(+), 111 deletions(-)

diff --git a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/BackupException.java b/openmeetings-install/src/main/java/org/apache/openmeetings/backup/BackupException.java
index b0f116e..0d46739 100644
--- a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/BackupException.java
+++ b/openmeetings-install/src/main/java/org/apache/openmeetings/backup/BackupException.java
@@ -18,10 +18,14 @@
  */
 package org.apache.openmeetings.backup;
 
-public class BackupException extends Exception {
+public class BackupException extends RuntimeException {
 	private static final long serialVersionUID = 1L;
 
 	public BackupException(String msg) {
 		super(msg);
 	}
+
+	public BackupException(Exception e) {
+		super(e);
+	}
 }
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 d312f64..e1c46e7 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
@@ -119,7 +119,7 @@ import java.util.Map;
 import java.util.Map.Entry;
 import java.util.TreeMap;
 import java.util.function.BiConsumer;
-import java.util.stream.Collectors;
+import java.util.function.Consumer;
 import java.util.zip.ZipEntry;
 import java.util.zip.ZipInputStream;
 
@@ -433,8 +433,9 @@ public class BackupImport {
 		FileUtils.deleteDirectory(f);
 	}
 
-	private static BackupVersion getVersion(Serializer ser, File f) throws Exception {
-		List<BackupVersion> list = readList(ser, f, "version.xml", "version", BackupVersion.class, null, true);
+	private static BackupVersion getVersion(Serializer ser, File f) {
+		List<BackupVersion> list = new ArrayList<>(1);
+		readList(ser, f, "version.xml", "version", BackupVersion.class, (node, v) -> list.add(v), true);
 		return list.isEmpty() ? new BackupVersion() : list.get(0);
 	}
 
@@ -463,10 +464,9 @@ public class BackupImport {
 					}
 				});
 
-		List<Configuration> list = readList(serializer, f, "configs.xml", "configs", Configuration.class);
-		for (Configuration c : list) {
+		readList(serializer, f, "configs.xml", "configs", Configuration.class, (node, c) -> {
 			if (c.getKey() == null || c.isDeleted()) {
-				continue;
+				return;
 			}
 			String newKey = outdatedConfigKeys.get(c.getKey());
 			if (newKey != null) {
@@ -504,52 +504,47 @@ public class BackupImport {
 				}
 			}
 			cfgDao.update(c, null);
-		}
+		});
 	}
 
 	/*
 	 * ##################### Import Groups
 	 */
-	private void importGroups(File f, Serializer simpleSerializer) throws Exception {
+	private void importGroups(File f, Serializer simpleSerializer) {
 		log.info("Configs import complete, starting group import");
-		List<Group> list = readList(simpleSerializer, f, "organizations.xml", "organisations", Group.class);
-		for (Group o : list) {
-			Long oldId = o.getId();
-			o.setId(null);
-			o = groupDao.update(o, null);
-			groupMap.put(oldId, o.getId());
-		}
+		readList(simpleSerializer, f, "organizations.xml", "organisations", Group.class, (node, g) -> {
+			Long oldId = g.getId();
+			g.setId(null);
+			g = groupDao.update(g, null);
+			groupMap.put(oldId, g.getId());
+		});
 	}
 
 	/*
 	 * ##################### Import LDAP Configs
 	 */
-	private Long importLdap(File f, Serializer simpleSerializer) throws Exception {
+	private Long importLdap(File f, Serializer simpleSerializer) {
 		log.info("Groups import complete, starting LDAP config import");
-		Long defaultLdapId = cfgDao.getLong(CONFIG_DEFAULT_LDAP_ID, null);
-		List<LdapConfig> list = readList(simpleSerializer, f, "ldapconfigs.xml", "ldapconfigs", LdapConfig.class);
-		for (LdapConfig c : list) {
-			if (Strings.isEmpty(c.getName())) {
-				continue;
-			}
-			if ("local DB [internal]".equals(c.getName())) {
-				continue;
+		Long[] defaultLdapId = {cfgDao.getLong(CONFIG_DEFAULT_LDAP_ID, null)};
+		readList(simpleSerializer, f, "ldapconfigs.xml", "ldapconfigs", LdapConfig.class, (node, c) -> {
+			if (Strings.isEmpty(c.getName()) || "local DB [internal]".equals(c.getName())) {
+				return;
 			}
 			c.setId(null);
 			c = ldapConfigDao.update(c, null);
-			if (defaultLdapId == null) {
-				defaultLdapId = c.getId();
+			if (defaultLdapId[0] == null) {
+				defaultLdapId[0] = c.getId();
 			}
-		}
-		return defaultLdapId;
+		});
+		return defaultLdapId[0];
 	}
 
 	/*
 	 * ##################### OAuth2 servers
 	 */
-	private void importOauth(File f, Serializer simpleSerializer) throws Exception {
+	private void importOauth(File f, Serializer simpleSerializer) {
 		log.info("Ldap config import complete, starting OAuth2 server import");
-		List<OAuthServer> list = readList(simpleSerializer, f, "oauth2servers.xml", "oauth2servers", OAuthServer.class
+		readList(simpleSerializer, f, "oauth2servers.xml", "oauth2servers", OAuthServer.class
 				, (node, s) -> {
 					try {
 						InputNode item = node.getNext();
@@ -579,11 +574,9 @@ public class BackupImport {
 					if (s.getRequestInfoMethod() == null) {
 						s.setRequestInfoMethod(RequestInfoMethod.GET);
 					}
+					s.setId(null);
+					auth2Dao.update(s, null);
 				}, false);
-		for (OAuthServer s : list) {
-			s.setId(null);
-			auth2Dao.update(s, null);
-		}
 	}
 
 	/*
@@ -610,11 +603,10 @@ public class BackupImport {
 		registry.bind(Group.class, new GroupConverter(groupDao, groupMap));
 		registry.bind(Salutation.class, SalutationConverter.class);
 		registry.bind(Date.class, DateConverter.class);
-		List<User> list = readList(ser, f, "users.xml", "users", User.class);
 		int minLoginLength = getMinLoginLength();
-		for (User u : list) {
+		readList(ser, f, "users.xml", "users", User.class, (node, u) -> {
 			if (u.getLogin() == null || u.isDeleted()) {
-				continue;
+				return;
 			}
 			// check that email is unique
 			if (u.getAddress() != null && u.getAddress().getEmail() != null && User.Type.user == u.getType()) {
@@ -658,7 +650,7 @@ public class BackupImport {
 			}
 			userDao.update(u, Long.valueOf(-1));
 			userMap.put(userId, u.getId());
-		}
+		});
 	}
 
 	/*
@@ -676,8 +668,7 @@ public class BackupImport {
 		registry.bind(User.class, new UserConverter(userDao, userMap));
 		registry.bind(Room.Type.class, RoomTypeConverter.class);
 		registry.bind(Date.class, DateConverter.class);
-		List<Room> list = readList(ser, f, "rooms.xml", "rooms", Room.class);
-		for (Room r : list) {
+		readList(ser, f, "rooms.xml", "rooms", Room.class, (node, r) -> {
 			Long roomId = r.getId();
 
 			// We need to reset ids as openJPA reject to store them otherwise
@@ -692,7 +683,7 @@ public class BackupImport {
 			}
 			r = roomDao.update(r, null);
 			roomMap.put(roomId, r.getId());
-		}
+		});
 	}
 
 	/*
@@ -707,11 +698,10 @@ public class BackupImport {
 		registry.bind(Group.class, new GroupConverter(groupDao, groupMap));
 		registry.bind(Room.class, new RoomConverter(roomDao, roomMap));
 
-		List<RoomGroup> list = readList(serializer, f, "rooms_organisation.xml", "room_organisations", RoomGroup.class);
-		for (RoomGroup ro : list) {
+		readList(serializer, f, "rooms_organisation.xml", "room_organisations", RoomGroup.class, (node, ro) -> {
 			Room r = roomDao.get(ro.getRoom().getId());
 			if (r == null || ro.getGroup() == null || ro.getGroup().getId() == null) {
-				continue;
+				return;
 			}
 			if (r.getGroups() == null) {
 				r.setGroups(new ArrayList<>());
@@ -720,7 +710,7 @@ public class BackupImport {
 			ro.setRoom(r);
 			r.getGroups().add(ro);
 			roomDao.update(r, null);
-		}
+		});
 	}
 
 	/*
@@ -736,18 +726,17 @@ public class BackupImport {
 		registry.bind(Room.class, new RoomConverter(roomDao, roomMap));
 		registry.bind(Date.class, DateConverter.class);
 
-		List<ChatMessage> list = readList(serializer, f, "chat_messages.xml", "chat_messages", ChatMessage.class);
-		for (ChatMessage m : list) {
+		readList(serializer, f, "chat_messages.xml", "chat_messages", ChatMessage.class, (node, m) -> {
 			m.setId(null);
 			if (m.getFromUser() == null
 					|| m.getFromUser().getId() == null
 					|| (m.getToRoom() != null && m.getToRoom().getId() == null)
 					|| (m.getToUser() != null && m.getToUser().getId() == null))
 			{
-				continue;
+				return;
 			}
 			chatDao.update(m, m.getSent());
-		}
+		});
 	}
 
 	/*
@@ -759,13 +748,12 @@ public class BackupImport {
 		Strategy strategy = new RegistryStrategy(registry);
 		Serializer serializer = new Persister(strategy);
 		registry.bind(User.class, new UserConverter(userDao, userMap));
-		List<OmCalendar> list = readList(serializer, f, "calendars.xml", "calendars", OmCalendar.class, null, true);
-		for (OmCalendar c : list) {
+		readList(serializer, f, "calendars.xml", "calendars", OmCalendar.class, (node, c) -> {
 			Long id = c.getId();
 			c.setId(null);
 			c = calendarDao.update(c);
 			calendarMap.put(id, c.getId());
-		}
+		}, true);
 	}
 
 	/*
@@ -783,8 +771,7 @@ public class BackupImport {
 		registry.bind(Date.class, DateConverter.class);
 		registry.bind(OmCalendar.class, new OmCalendarConverter(calendarDao, calendarMap));
 
-		List<Appointment> list = readList(serializer, f, "appointements.xml", "appointments", Appointment.class);
-		for (Appointment a : list) {
+		readList(serializer, f, "appointements.xml", "appointments", Appointment.class, (node, a) -> {
 			Long appId = a.getId();
 
 			// We need to reset this as openJPA reject to store them otherwise
@@ -794,15 +781,15 @@ public class BackupImport {
 			}
 			if (a.getRoom() == null || a.getRoom().getId() == null) {
 				log.warn("Appointment without room was found, skipping: {}", a);
-				continue;
+				return;
 			}
 			if (a.getStart() == null || a.getEnd() == null) {
 				log.warn("Appointment without start/end time was found, skipping: {}", a);
-				continue;
+				return;
 			}
 			a = appointmentDao.update(a, null, false);
 			appointmentMap.put(appId, a.getId());
-		}
+		});
 	}
 
 	/*
@@ -818,11 +805,10 @@ public class BackupImport {
 
 		registry.bind(User.class, new UserConverter(userDao, userMap));
 		registry.bind(Appointment.class, new AppointmentConverter(appointmentDao, appointmentMap));
-		List<MeetingMember> list = readList(ser, f, "meetingmembers.xml", "meetingmembers", MeetingMember.class);
-		for (MeetingMember ma : list) {
+		readList(ser, f, "meetingmembers.xml", "meetingmembers", MeetingMember.class, (node, ma) -> {
 			ma.setId(null);
 			meetingMemberDao.update(ma);
-		}
+		});
 	}
 
 	private boolean isInvalidFile(BaseFileItem file, final Map<Long, Long> folders) {
@@ -857,11 +843,23 @@ public class BackupImport {
 		return false;
 	}
 
-	private static <T extends BaseFileItem> FileTree<T> build(List<T> list) {
-		TreeMap<Long, T> items = new TreeMap<>(list.stream().collect(Collectors.toMap(f -> f.getId(), f -> f)));
+	private <T extends BaseFileItem> void saveTree(
+			Serializer ser
+			, File baseDir
+			, String fileName
+			, String listNodeName
+			, Class<T> clazz
+			, Map<Long, Long> folders
+			, Consumer<T> save
+			)
+	{
+		TreeMap<Long, T> items = new TreeMap<>();
+		readList(ser, baseDir, fileName, listNodeName, clazz, (node, f) -> {
+			items.put(f.getId(), f);
+		}, false);
 		FileTree<T> tree = new FileTree<>();
 		TreeMap<Long, T> remain = new TreeMap<>();
-		int counter = list.size(); //max iterations
+		int counter = items.size(); //max iterations
 		while (counter > 0 && !items.isEmpty()) {
 			Entry<Long, T> e = items.pollFirstEntry();
 			if (e == null) {
@@ -878,7 +876,7 @@ public class BackupImport {
 			}
 		}
 		remain.entrySet().forEach(e -> log.warn("Doungling file/recording: {}", e.getValue()));
-		return tree;
+		tree.process(f -> isInvalidFile(f, folders), save);
 	}
 	/*
 	 * ##################### Import Recordings
@@ -895,9 +893,7 @@ public class BackupImport {
 		registry.bind(Date.class, DateConverter.class);
 		registry.bind(Recording.Status.class, RecordingStatusConverter.class);
 		final Map<Long, Long> folders = new HashMap<>();
-		List<Recording> list = readList(ser, f, "flvRecordings.xml", "flvrecordings", Recording.class);
-		FileTree<Recording> tree = build(list);
-		tree.process(r -> isInvalidFile(r, folders), r -> {
+		saveTree(ser, f, "flvRecordings.xml", "flvrecordings", Recording.class, folders, r -> {
 			Long recId = r.getId();
 			r.setId(null);
 			if (r.getChunks() != null) {
@@ -926,11 +922,9 @@ public class BackupImport {
 	/*
 	 * ##################### Import Private Message Folders
 	 */
-	private void importPrivateMsgFolders(File f, Serializer simpleSerializer) throws Exception {
+	private void importPrivateMsgFolders(File f, Serializer simpleSerializer) {
 		log.info("Recording import complete, starting private message folder import");
-		List<PrivateMessageFolder> list = readList(simpleSerializer, f, "privateMessageFolder.xml"
-				, "privatemessagefolders", PrivateMessageFolder.class);
-		for (PrivateMessageFolder p : list) {
+		readList(simpleSerializer, f, "privateMessageFolder.xml", "privatemessagefolders", PrivateMessageFolder.class, (node, p) -> {
 			Long folderId = p.getId();
 			PrivateMessageFolder storedFolder = privateMessageFolderDao.get(folderId);
 			if (storedFolder == null) {
@@ -938,7 +932,7 @@ public class BackupImport {
 				Long newFolderId = privateMessageFolderDao.addPrivateMessageFolderObj(p);
 				messageFolderMap.put(folderId, newFolderId);
 			}
-		}
+		});
 	}
 
 	/*
@@ -952,8 +946,7 @@ public class BackupImport {
 
 		registry.bind(User.class, new UserConverter(userDao, userMap));
 
-		List<UserContact> list = readList(serializer, f, "userContacts.xml", "usercontacts", UserContact.class);
-		for (UserContact uc : list) {
+		readList(serializer, f, "userContacts.xml", "usercontacts", UserContact.class, (node, uc) -> {
 			Long ucId = uc.getId();
 			UserContact storedUC = userContactDao.get(ucId);
 
@@ -965,7 +958,7 @@ public class BackupImport {
 				uc = userContactDao.update(uc);
 				userContactMap.put(ucId, uc.getId());
 			}
-		}
+		});
 	}
 
 	/*
@@ -981,15 +974,7 @@ public class BackupImport {
 		registry.bind(Room.class, new RoomConverter(roomDao, roomMap));
 		registry.bind(Date.class, DateConverter.class);
 
-		List<PrivateMessage> list = readList(serializer, f, "privateMessages.xml", "privatemessages", PrivateMessage.class);
-		boolean oldBackup = true;
-		for (PrivateMessage p : list) {
-			if (p.getFolderId() == null || p.getFolderId().longValue() < 0) {
-				oldBackup = false;
-				break;
-			}
-		}
-		for (PrivateMessage p : list) {
+		readList(serializer, f, "privateMessages.xml", "privatemessages", PrivateMessage.class, (node, p) -> {
 			p.setId(null);
 			p.setFolderId(messageFolderMap.get(p.getFolderId()));
 			p.setUserContactId(userContactMap.get(p.getUserContactId()));
@@ -1005,14 +990,8 @@ public class BackupImport {
 			if (p.getOwner() != null && p.getOwner().getId() == null) {
 				p.setOwner(null);
 			}
-			if (oldBackup && p.getOwner() != null && p.getOwner().getId() != null
-					&& p.getFrom() != null && p.getFrom().getId() != null
-					&& p.getOwner().getId() == p.getFrom().getId())
-			{
-				p.setFolderId(SENT_FOLDER_ID);
-			}
 			privateMessageDao.update(p, null);
-		}
+		});
 	}
 
 	/*
@@ -1030,9 +1009,7 @@ public class BackupImport {
 		matcher.bind(Integer.class, IntegerTransform.class);
 		registry.bind(Date.class, DateConverter.class);
 		final Map<Long, Long> folders = new HashMap<>();
-		List<FileItem> list = readList(ser, f, "fileExplorerItems.xml", "fileExplorerItems", FileItem.class);
-		FileTree<FileItem> tree = build(list);
-		tree.process(file -> isInvalidFile(file, folders), file -> {
+		saveTree(ser, f, "fileExplorerItems.xml", "fileExplorerItems", FileItem.class, folders, file -> {
 			Long fId = file.getId();
 			// We need to reset this as openJPA reject to store them otherwise
 			file.setId(null);
@@ -1065,12 +1042,11 @@ public class BackupImport {
 		registry.bind(RoomPoll.Type.class, PollTypeConverter.class);
 		registry.bind(Date.class, DateConverter.class);
 
-		List<RoomPoll> list = readList(serializer, f, "roompolls.xml", "roompolls", RoomPoll.class);
-		for (RoomPoll rp : list) {
+		readList(serializer, f, "roompolls.xml", "roompolls", RoomPoll.class, (node, rp) -> {
 			rp.setId(null);
 			if (rp.getRoom() == null || rp.getRoom().getId() == null) {
 				//room was deleted
-				continue;
+				return;
 			}
 			if (rp.getCreator() == null || rp.getCreator().getId() == null) {
 				rp.setCreator(null);
@@ -1081,7 +1057,7 @@ public class BackupImport {
 				}
 			}
 			pollDao.update(rp);
-		}
+		});
 	}
 
 	/*
@@ -1095,11 +1071,10 @@ public class BackupImport {
 
 		registry.bind(BaseFileItem.class, new BaseFileItemConverter(fileItemDao, fileItemMap));
 
-		List<RoomFile> list = readList(serializer, f, "roomFiles.xml", "RoomFiles", RoomFile.class, null, true);
-		for (RoomFile rf : list) {
+		readList(serializer, f, "roomFiles.xml", "RoomFiles", RoomFile.class, (node, rf) -> {
 			Room r = roomDao.get(roomMap.get(rf.getRoomId()));
 			if (r == null || rf.getFile() == null || rf.getFile().getId() == null) {
-				continue;
+				return;
 			}
 			if (r.getFiles() == null) {
 				r.setFiles(new ArrayList<>());
@@ -1108,21 +1083,20 @@ public class BackupImport {
 			rf.setRoomId(r.getId());
 			r.getFiles().add(rf);
 			roomDao.update(r, null);
-		}
+		}, true);
 	}
 
-	private static <T> List<T> readList(Serializer ser, File baseDir, String fileName, String listNodeName, Class<T> clazz) throws Exception {
-		return readList(ser, baseDir, fileName, listNodeName, clazz, null, false);
+	private static <T> void readList(Serializer ser, File baseDir, String fileName, String listNodeName, Class<T> clazz, BiConsumer<InputNode, T> consumer) {
+		readList(ser, baseDir, fileName, listNodeName, clazz, consumer, false);
 	}
 
-	private static <T> List<T> readList(Serializer ser, File baseDir, String fileName, String listNodeName, Class<T> clazz, BiConsumer<InputNode, T> consumer, boolean notThow) throws Exception {
-		List<T> list = new ArrayList<>();
+	private static <T> void readList(Serializer ser, File baseDir, String fileName, String listNodeName, Class<T> clazz, BiConsumer<InputNode, T> consumer, boolean notThow) {
 		File xml = new File(baseDir, fileName);
 		if (!xml.exists()) {
 			final String msg = fileName + " missing";
 			if (notThow) {
 				log.debug(msg);
-				return list;
+				return;
 			} else {
 				throw new BackupException(msg);
 			}
@@ -1139,12 +1113,12 @@ public class BackupImport {
 					if (consumer != null) {
 						consumer.accept(listNode2, o);
 					}
-					list.add(o);
 					item1 = listNode1.getNext();
 				}
 			}
+		} catch (Exception e) {
+			throw new BackupException(e);
 		}
-		return list;
 	}
 
 	private static Long getPrefixedId(String prefix, File f, Map<Long, Long> map) {
diff --git a/pom.xml b/pom.xml
index b67496d..7e84c60 100644
--- a/pom.xml
+++ b/pom.xml
@@ -76,7 +76,7 @@
 		<junit.version>5.5.2</junit.version>
 		<wicket.version>9.0.0-M3</wicket.version>
 		<wicketju.version>9.0.0-M3</wicketju.version>
-		<wickets.version>9.0.0-M3</wickets.version>
+		<wickets.version>9.0.0-M2</wickets.version>
 		<red5-client.version>1.1.1</red5-client.version>
 		<spring.version>5.1.9.RELEASE</spring.version>
 		<mina.version>2.1.3</mina.version>