blob: 2578ede6331067f2134aec21aca3577d92bfd3ad [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License") + you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.openmeetings.servlet.outputhandler;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.regex.Pattern;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.openmeetings.app.OpenmeetingsVariables;
import org.openmeetings.app.data.basic.Configurationmanagement;
import org.openmeetings.app.data.basic.dao.LdapConfigDaoImpl;
import org.openmeetings.app.data.basic.dao.OmTimeZoneDaoImpl;
import org.openmeetings.app.data.calendar.daos.AppointmentCategoryDaoImpl;
import org.openmeetings.app.data.calendar.daos.AppointmentDaoImpl;
import org.openmeetings.app.data.calendar.daos.AppointmentReminderTypDaoImpl;
import org.openmeetings.app.data.calendar.daos.MeetingMemberDaoImpl;
import org.openmeetings.app.data.conference.PollManagement;
import org.openmeetings.app.data.conference.Roommanagement;
import org.openmeetings.app.data.conference.dao.RoomModeratorsDaoImpl;
import org.openmeetings.app.data.file.dao.FileExplorerItemDaoImpl;
import org.openmeetings.app.data.flvrecord.FlvRecordingDaoImpl;
import org.openmeetings.app.data.flvrecord.FlvRecordingMetaDataDaoImpl;
import org.openmeetings.app.data.user.Organisationmanagement;
import org.openmeetings.app.data.user.Statemanagement;
import org.openmeetings.app.data.user.dao.PrivateMessageFolderDaoImpl;
import org.openmeetings.app.data.user.dao.PrivateMessagesDaoImpl;
import org.openmeetings.app.data.user.dao.UserContactsDaoImpl;
import org.openmeetings.app.data.user.dao.UsersDaoImpl;
import org.openmeetings.app.persistence.beans.adresses.States;
import org.openmeetings.app.persistence.beans.basic.Configuration;
import org.openmeetings.app.persistence.beans.basic.LdapConfig;
import org.openmeetings.app.persistence.beans.basic.OmTimeZone;
import org.openmeetings.app.persistence.beans.calendar.Appointment;
import org.openmeetings.app.persistence.beans.calendar.MeetingMember;
import org.openmeetings.app.persistence.beans.domain.Organisation;
import org.openmeetings.app.persistence.beans.domain.Organisation_Users;
import org.openmeetings.app.persistence.beans.files.FileExplorerItem;
import org.openmeetings.app.persistence.beans.flvrecord.FlvRecording;
import org.openmeetings.app.persistence.beans.flvrecord.FlvRecordingMetaData;
import org.openmeetings.app.persistence.beans.poll.RoomPoll;
import org.openmeetings.app.persistence.beans.poll.RoomPollAnswers;
import org.openmeetings.app.persistence.beans.rooms.RoomModerators;
import org.openmeetings.app.persistence.beans.rooms.Rooms;
import org.openmeetings.app.persistence.beans.rooms.Rooms_Organisation;
import org.openmeetings.app.persistence.beans.sip.asterisk.AsteriskSipUsers;
import org.openmeetings.app.persistence.beans.sip.asterisk.Extensions;
import org.openmeetings.app.persistence.beans.sip.asterisk.MeetMe;
import org.openmeetings.app.persistence.beans.user.PrivateMessageFolder;
import org.openmeetings.app.persistence.beans.user.PrivateMessages;
import org.openmeetings.app.persistence.beans.user.UserContacts;
import org.openmeetings.app.persistence.beans.user.UserSipData;
import org.openmeetings.app.persistence.beans.user.Users;
import org.openmeetings.app.remote.red5.ScopeApplicationAdapter;
import org.openmeetings.app.sip.api.impl.asterisk.dao.AsteriskDAOImpl;
import org.openmeetings.utils.math.CalendarPatterns;
import org.red5.logging.Red5LoggerFactory;
import org.slf4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.multipart.MultipartFile;
@Controller
public class BackupImportController extends AbstractUploadController {
private static final Logger log = Red5LoggerFactory.getLogger(
BackupImportController.class, OpenmeetingsVariables.webAppRootKey);
@Autowired
private AppointmentDaoImpl appointmentDao;
@Autowired
private Statemanagement statemanagement;
@Autowired
private OmTimeZoneDaoImpl omTimeZoneDaoImpl;
@Autowired
private Organisationmanagement organisationmanagement;
@Autowired
private Roommanagement roommanagement;
@Autowired
private AppointmentCategoryDaoImpl appointmentCategoryDaoImpl;
@Autowired
private AppointmentReminderTypDaoImpl appointmentReminderTypDaoImpl;
@Autowired
private UsersDaoImpl usersDao;
@Autowired
private FlvRecordingDaoImpl flvRecordingDao;
@Autowired
private FlvRecordingMetaDataDaoImpl flvRecordingMetaDataDao;
@Autowired
private PrivateMessageFolderDaoImpl privateMessageFolderDao;
@Autowired
private PrivateMessagesDaoImpl privateMessagesDao;
@Autowired
private MeetingMemberDaoImpl meetingMemberDao;
@Autowired
private LdapConfigDaoImpl ldapConfigDao;
@Autowired
private RoomModeratorsDaoImpl roomModeratorsDao;
@Autowired
private FileExplorerItemDaoImpl fileExplorerItemDao;
@Autowired
private UserContactsDaoImpl userContactsDao;
@Autowired
private ScopeApplicationAdapter scopeApplicationAdapter;
@Autowired
private PollManagement pollManagement;
@Autowired
private Configurationmanagement cfgManagement;
@Autowired
private AsteriskDAOImpl asteriskDAOImpl;
private final HashMap<Long, Long> usersMap = new HashMap<Long, Long>();
private final HashMap<Long, Long> organisationsMap = new HashMap<Long, Long>();
private final HashMap<Long, Long> appointmentsMap = new HashMap<Long, Long>();
private final HashMap<Long, Long> roomsMap = new HashMap<Long, Long>();
private final HashMap<Long, Long> messageFoldersMap = new HashMap<Long, Long>();
private final HashMap<Long, Long> userContactsMap = new HashMap<Long, Long>();
private final HashMap<Long, Long> fileExplorerItemsMap = new HashMap<Long, Long>();
private enum Maps {
USERS, ORGANISATIONS, APPOINTMENTS, ROOMS, MESSAGEFOLDERS, USERCONTACTS, FILEEXPLORERITEMS
};
public void performImport(InputStream is, String current_dir) throws Exception {
File working_dir = new File(current_dir, OpenmeetingsVariables.UPLOAD_DIR
+ File.separatorChar + "import");
if (!working_dir.exists()) {
working_dir.mkdir();
}
File f = new File(working_dir, "import_" + CalendarPatterns.getTimeForStreamId(new Date()));
int recursiveNumber = 0;
do {
if (f.exists()) {
f = new File(f.getAbsolutePath() + (recursiveNumber++));
}
} while (f.exists());
f.mkdir();
log.debug("##### WRITE FILE TO: " + f);
ZipInputStream zipinputstream = new ZipInputStream(is);
byte[] buf = new byte[1024];
ZipEntry zipentry = zipinputstream.getNextEntry();
while (zipentry != null) {
// for each entry to be extracted
int n;
FileOutputStream fileoutputstream;
File fentryName = new File(f, zipentry.getName());
if (zipentry.isDirectory()) {
if (!fentryName.mkdir()) {
break;
}
zipentry = zipinputstream.getNextEntry();
continue;
}
File fparent = new File(fentryName.getParent());
if (!fparent.exists()) {
File fparentparent = new File(fparent.getParent());
if (!fparentparent.exists()) {
File fparentparentparent = new File(
fparentparent.getParent());
if (!fparentparentparent.exists()) {
fparentparentparent.mkdir();
fparentparent.mkdir();
fparent.mkdir();
} else {
fparentparent.mkdir();
fparent.mkdir();
}
} else {
fparent.mkdir();
}
}
fileoutputstream = new FileOutputStream(fentryName);
while ((n = zipinputstream.read(buf, 0, 1024)) > -1) {
fileoutputstream.write(buf, 0, n);
}
fileoutputstream.close();
zipinputstream.closeEntry();
zipentry = zipinputstream.getNextEntry();
}// while
zipinputstream.close();
/*
* ##################### Import Organizations
*/
File orgFile = new File(f, "organizations.xml");
if (!orgFile.exists()) {
throw new Exception("organizations.xml missing");
}
this.importOrganizsations(orgFile);
log.info("Organizations import complete, starting user import");
/*
* ##################### Import Users
*/
File userFile = new File(f, "users.xml");
if (!userFile.exists()) {
throw new Exception("users.xml missing");
}
this.importUsers(userFile);
log.info("Users import complete, starting room import");
/*
* ##################### Import Rooms
*/
File roomFile = new File(f, "rooms.xml");
if (!roomFile.exists()) {
throw new Exception("rooms.xml missing");
}
this.importRooms(roomFile);
log.info("Room import complete, starting room organizations import");
/*
* ##################### Import Room Organisations
*/
File orgRoomListFile = new File(f, "rooms_organisation.xml");
if (!orgRoomListFile.exists()) {
throw new Exception("rooms_organisation.xml missing");
}
this.importOrgRooms(orgRoomListFile);
log.info("Room organizations import complete, starting appointement import");
/*
* ##################### Import Appointements
*/
File appointementListFile = new File(f, "appointements.xml");
if (!appointementListFile.exists()) {
throw new Exception("appointements.xml missing");
}
this.importAppointements(appointementListFile);
log.info("Appointement import complete, starting meeting members import");
/*
* ##################### Import MeetingMembers
*
* Reminder Invitations will be NOT send!
*/
File meetingmembersListFile = new File(f, "meetingmembers.xml");
if (!meetingmembersListFile.exists()) {
throw new Exception("meetingmembersListFile missing");
}
this.importMeetingmembers(meetingmembersListFile);
log.info("Meeting members import complete, starting ldap config import");
/*
* ##################### Import LDAP Configs
*/
File ldapConfigListFile = new File(f, "ldapconfigs.xml");
if (!ldapConfigListFile.exists()) {
log.debug("meetingmembersListFile missing");
// throw new Exception
// ("meetingmembersListFile missing");
} else {
this.importLdapConfig(ldapConfigListFile);
}
log.info("Ldap config import complete, starting recordings import");
/*
* ##################### Import Recordings
*/
File flvRecordingsListFile = new File(f, "flvRecordings.xml");
if (!flvRecordingsListFile.exists()) {
log.debug("flvRecordingsListFile missing");
// throw new Exception
// ("meetingmembersListFile missing");
} else {
this.importFlvRecordings(flvRecordingsListFile);
}
log.info("FLVrecording import complete, starting private message folder import");
/*
* ##################### Import Private Message Folders
*/
File privateMessageFoldersFile = new File(f, "privateMessageFolder.xml");
if (!privateMessageFoldersFile.exists()) {
log.debug("privateMessageFoldersFile missing");
// throw new Exception
// ("meetingmembersListFile missing");
} else {
this.importPrivateMessageFolders(privateMessageFoldersFile);
}
log.info("Private message folder import complete, starting private message import");
/*
* ##################### Import Private Messages
*/
File privateMessagesFile = new File(f, "privateMessages.xml");
if (!privateMessagesFile.exists()) {
log.debug("privateMessagesFile missing");
// throw new Exception
// ("meetingmembersListFile missing");
} else {
this.importPrivateMessages(privateMessagesFile);
}
log.info("Private message import complete, starting usercontact import");
/*
* ##################### Import User Contacts
*/
File userContactsFile = new File(f, "userContacts.xml");
if (!userContactsFile.exists()) {
log.debug("userContactsFile missing");
// throw new Exception
// ("meetingmembersListFile missing");
} else {
this.importUserContacts(userContactsFile);
}
log.info("Usercontact import complete, starting file explorer item import");
/*
* ##################### Import File-Explorer Items
*/
File fileExplorerListFile = new File(f, "fileExplorerItems.xml");
if (!fileExplorerListFile.exists()) {
log.debug("fileExplorerListFile missing");
// throw new Exception
// ("meetingmembersListFile missing");
} else {
this.importFileExplorerItems(fileExplorerListFile);
}
log.info("File explorer item import complete, starting file poll import");
/*
* ##################### Import Room Polls
*/
File roomPollListFile = new File(f, "roompolls.xml");
if (!roomPollListFile.exists()) {
log.debug("roomPollListFile missing");
} else {
this.importRoomPolls(roomPollListFile);
}
log.info("Poll import complete, starting configs import");
/*
* ##################### Import Configs
*/
File configsFile = new File(f, "configs.xml");
if (!configsFile.exists()) {
log.debug("configsFile missing");
} else {
importConfigs(configsFile);
}
log.info("Configs import complete, starting asteriskSipUsersFile import");
/*
* ##################### Import AsteriskSipUsers
*/
File asteriskSipUsersFile = new File(f, "asterisksipusers.xml");
if (!asteriskSipUsersFile.exists()) {
log.debug("asteriskSipUsersFile missing");
} else {
importAsteriskSipUsers(asteriskSipUsersFile);
}
log.info("AsteriskSipUsers import complete, starting extensions import");
/*
* ##################### Import Extensions
*/
File extensionsFile = new File(f, "extensions.xml");
if (!extensionsFile.exists()) {
log.debug("extensionsFile missing");
} else {
importExtensions(extensionsFile);
}
log.info("Extensions import complete, starting members import");
/*
* ##################### Import Extensions
*/
File membersFile = new File(f, "members.xml");
if (!membersFile.exists()) {
log.debug("membersFile missing");
} else {
importMembers(membersFile);
}
log.info("Members import complete, starting copy of files and folders");
/*
* ##################### Import real files and folders
*/
importFolders(current_dir, f);
log.info("File explorer item import complete, clearing temp files");
deleteDirectory(f);
}
@RequestMapping(value = "/backup.upload", method = RequestMethod.POST)
public void service(HttpServletRequest request,
HttpServletResponse httpServletResponse)
throws ServletException, IOException {
UploadInfo info = validate(request, true);
try {
String current_dir = context.getRealPath("/");
MultipartFile multipartFile = info.file;
InputStream is = multipartFile.getInputStream();
performImport(is, current_dir);
LinkedHashMap<String, Object> hs = new LinkedHashMap<String, Object>();
hs.put("user", usersDao.getUser(info.userId));
hs.put("message", "library");
hs.put("action", "import");
hs.put("error", "");
hs.put("fileName", info.filename);
scopeApplicationAdapter.sendMessageWithClientByPublicSID(
hs, info.publicSID);
} catch (Exception e) {
log.error("[ImportExport]", e);
e.printStackTrace();
throw new ServletException(e);
}
return;
}
private void importRoomPolls(File roomPollListFile) {
try {
List<RoomPoll> roomPolls = this.getRoomPolls(roomPollListFile);
for (RoomPoll roomPoll : roomPolls) {
pollManagement.savePollBackup(roomPoll);
}
} catch (Exception err) {
log.error("[getRoomPolls]", err);
}
}
private void importMembers(File membersFile) throws Exception {
SAXReader reader = new SAXReader();
Document document = reader.read(membersFile);
Element root = document.getRootElement();
Element extensions = root.element("members");
for (@SuppressWarnings("unchecked")
Iterator<Element> iter = extensions.elementIterator("member"); iter.hasNext();) {
Element extensionElem = iter.next();
String confno = extensionElem.elementText("confno");
try {
MeetMe meetMe = new MeetMe();
meetMe.setConfno(unformatString(extensionElem
.element("confno").getText()));
meetMe.setPin(unformatString(extensionElem
.element("pin").getText()));
meetMe.setAdminpin(unformatString(extensionElem
.element("adminpin").getText()));
meetMe.setMembers(importIntegerType(unformatString(extensionElem
.element("members").getText())));
asteriskDAOImpl.saveMeetMe(meetMe);
} catch (Exception e) {
log.debug("failed to add/update members confno: " + confno, e);
}
}
}
private void importExtensions(File extensionsFile) throws Exception {
SAXReader reader = new SAXReader();
Document document = reader.read(extensionsFile);
Element root = document.getRootElement();
Element extensions = root.element("extensions");
for (@SuppressWarnings("unchecked")
Iterator<Element> iter = extensions.elementIterator("extension"); iter.hasNext();) {
Element extensionElem = iter.next();
String id = extensionElem.elementText("id");
try {
Extensions extension = new Extensions();
//the primary key must be null for new objects if its an auto-increment
extension.setExten(unformatString(extensionElem
.element("exten").getText()));
extension.setPriority(importIntegerType(unformatString(extensionElem
.element("priority").getText())));
extension.setApp(unformatString(extensionElem
.element("app").getText()));
extension.setAppdata(unformatString(extensionElem
.element("appdata").getText()));
asteriskDAOImpl.saveExtensions(extension);
} catch (Exception e) {
log.debug("failed to add/update extensions id: " + id, e);
}
}
}
private void importAsteriskSipUsers(File asteriskSipUsersFile) throws Exception {
SAXReader reader = new SAXReader();
Document document = reader.read(asteriskSipUsersFile);
Element root = document.getRootElement();
Element asterisksipusers = root.element("asterisksipusers");
for (@SuppressWarnings("unchecked")
Iterator<Element> iter = asterisksipusers.elementIterator("asterisksipuser"); iter.hasNext();) {
Element asterisksipuserElem = iter.next();
String id = asterisksipuserElem.elementText("id");
try {
AsteriskSipUsers asterisksipuser = new AsteriskSipUsers();
//the primary key must be null for new objects if its an auto-increment
asterisksipuser.setAccountcode(unformatString(asterisksipuserElem
.element("accountcode").getText()));
asterisksipuser.setDisallow(unformatString(asterisksipuserElem
.element("disallow").getText()));
asterisksipuser.setAllow(unformatString(asterisksipuserElem
.element("allow").getText()));
asterisksipuser.setAllowoverlap(unformatString(asterisksipuserElem
.element("allowoverlap").getText()));
asterisksipuser.setAllowsubscribe(unformatString(asterisksipuserElem
.element("allowsubscribe").getText()));
asterisksipuser.setAllowtransfer(unformatString(asterisksipuserElem
.element("allowtransfer").getText()));
asterisksipuser.setAmaflags(unformatString(asterisksipuserElem
.element("amaflags").getText()));
asterisksipuser.setAutoframing(unformatString(asterisksipuserElem
.element("autoframing").getText()));
asterisksipuser.setAuth(unformatString(asterisksipuserElem
.element("auth").getText()));
asterisksipuser.setBuggymwi(unformatString(asterisksipuserElem
.element("buggymwi").getText()));
asterisksipuser.setCallgroup(unformatString(asterisksipuserElem
.element("callgroup").getText()));
asterisksipuser.setCallerid(unformatString(asterisksipuserElem
.element("callerid").getText()));
asterisksipuser.setCid_number(unformatString(asterisksipuserElem
.element("cid_number").getText()));
asterisksipuser.setFullname(unformatString(asterisksipuserElem
.element("fullname").getText()));
asterisksipuser.setCallingpres(unformatString(asterisksipuserElem
.element("callingpres").getText()));
asterisksipuser.setCanreinvite(unformatString(asterisksipuserElem
.element("canreinvite").getText()));
asterisksipuser.setContext(unformatString(asterisksipuserElem
.element("context").getText()));
asterisksipuser.setDefaultip(unformatString(asterisksipuserElem
.element("defaultip").getText()));
asterisksipuser.setDtmfmode(unformatString(asterisksipuserElem
.element("dtmfmode").getText()));
asterisksipuser.setFromuser(unformatString(asterisksipuserElem
.element("fromuser").getText()));
asterisksipuser.setFromdomain(unformatString(asterisksipuserElem
.element("fromdomain").getText()));
asterisksipuser.setFullcontact(unformatString(asterisksipuserElem
.element("fullcontact").getText()));
asterisksipuser.setG726nonstandard(unformatString(asterisksipuserElem
.element("g726nonstandard").getText()));
asterisksipuser.setHost(unformatString(asterisksipuserElem
.element("host").getText()));
asterisksipuser.setInsecure(unformatString(asterisksipuserElem
.element("insecure").getText()));
asterisksipuser.setIpaddr(unformatString(asterisksipuserElem
.element("ipaddr").getText()));
asterisksipuser.setLanguage(unformatString(asterisksipuserElem
.element("language").getText()));
asterisksipuser.setLastms(unformatString(asterisksipuserElem
.element("lastms").getText()));
asterisksipuser.setMailbox(unformatString(asterisksipuserElem
.element("mailbox").getText()));
asterisksipuser.setMaxcallbitrate(importIntegerType(unformatString(asterisksipuserElem
.element("maxcallbitrate").getText())));
asterisksipuser.setMohsuggest(unformatString(asterisksipuserElem
.element("mohsuggest").getText()));
asterisksipuser.setMd5secret(unformatString(asterisksipuserElem
.element("md5secret").getText()));
asterisksipuser.setMusiconhold(unformatString(asterisksipuserElem
.element("musiconhold").getText()));
asterisksipuser.setName(unformatString(asterisksipuserElem
.element("name").getText()));
asterisksipuser.setNat(unformatString(asterisksipuserElem
.element("nat").getText()));
asterisksipuser.setOutboundproxy(unformatString(asterisksipuserElem
.element("outboundproxy").getText()));
asterisksipuser.setDeny(unformatString(asterisksipuserElem
.element("deny").getText()));
asterisksipuser.setPermit(unformatString(asterisksipuserElem
.element("permit").getText()));
asterisksipuser.setPickupgroup(unformatString(asterisksipuserElem
.element("pickupgroup").getText()));
asterisksipuser.setPort(unformatString(asterisksipuserElem
.element("port").getText()));
asterisksipuser.setProgressinband(unformatString(asterisksipuserElem
.element("progressinband").getText()));
asterisksipuser.setPromiscredir(unformatString(asterisksipuserElem
.element("promiscredir").getText()));
asterisksipuser.setQualify(unformatString(asterisksipuserElem
.element("qualify").getText()));
asterisksipuser.setRegexten(unformatString(asterisksipuserElem
.element("regexten").getText()));
asterisksipuser.setRegseconds(importIntegerType(unformatString(asterisksipuserElem
.element("regseconds").getText())));
asterisksipuser.setRfc2833compensate(unformatString(asterisksipuserElem
.element("rfc2833compensate").getText()));
asterisksipuser.setRtptimeout(unformatString(asterisksipuserElem
.element("rtptimeout").getText()));
asterisksipuser.setRtpholdtimeout(unformatString(asterisksipuserElem
.element("rtpholdtimeout").getText()));
asterisksipuser.setSecret(unformatString(asterisksipuserElem
.element("secret").getText()));
asterisksipuser.setSendrpid(unformatString(asterisksipuserElem
.element("sendrpid").getText()));
asterisksipuser.setSetvar(unformatString(asterisksipuserElem
.element("setvar").getText()));
asterisksipuser.setSubscribecontext(unformatString(asterisksipuserElem
.element("subscribecontext").getText()));
asterisksipuser.setSubscribemwi(unformatString(asterisksipuserElem
.element("subscribemwi").getText()));
asterisksipuser.setT38pt_udptl(unformatString(asterisksipuserElem
.element("t38pt_udptl").getText()));
asterisksipuser.setTrustrpid(unformatString(asterisksipuserElem
.element("trustrpid").getText()));
asterisksipuser.setType(unformatString(asterisksipuserElem
.element("type").getText()));
asterisksipuser.setUseclientcode(unformatString(asterisksipuserElem
.element("useclientcode").getText()));
asterisksipuser.setUsername(unformatString(asterisksipuserElem
.element("username").getText()));
asterisksipuser.setUsereqphone(unformatString(asterisksipuserElem
.element("usereqphone").getText()));
asterisksipuser.setVideosupport(unformatString(asterisksipuserElem
.element("videosupport").getText()));
asterisksipuser.setVmexten(unformatString(asterisksipuserElem
.element("vmexten").getText()));
asteriskDAOImpl.saveAsteriskSipUsers(asterisksipuser);
} catch (Exception e) {
log.debug("failed to add/update asterisksipuser id: "+id, e);
}
}
}
private void importConfigs(File configsFile) throws Exception {
SAXReader reader = new SAXReader();
Document document = reader.read(configsFile);
Element root = document.getRootElement();
Element configs = root.element("configs");
for (@SuppressWarnings("unchecked")
Iterator<Element> iter = configs.elementIterator("config"); iter.hasNext();) {
Element cfgElem = iter.next();
String key = cfgElem.elementText("key");
try {
Configuration cfg = cfgManagement.getConfKey(3L, key);
if (cfg == null) {
cfg = new Configuration();
cfg.setConf_key(key);
}
cfg.setConf_value(cfgElem.elementText("value"));
cfg.setUpdatetime(new Date());
cfg.setDeleted(cfgElem.elementText("deleted"));
cfg.setComment(cfgElem.elementText("comment"));
cfgManagement.updateConfig(cfg);
} catch (Exception e) {
log.debug("failed to add/update configuration: " + key, e);
}
}
}
@SuppressWarnings("unchecked")
private List<RoomPoll> getRoomPolls(File roomPollListFile) throws Exception {
List<RoomPoll> roomPollList = new LinkedList<RoomPoll>();
SAXReader reader = new SAXReader();
Document document = reader.read(roomPollListFile);
Element root = document.getRootElement();
for (Iterator<Element> i = root.elementIterator(); i.hasNext();) {
Element itemObject = i.next();
if (itemObject.getName().equals("roompolls")) {
for (Iterator<Element> innerIter = itemObject
.elementIterator("roompoll"); innerIter.hasNext();) {
Element roompollObject = innerIter.next();
String pollname = unformatString(roompollObject.element(
"pollname").getText());
String pollquestion = unformatString(roompollObject
.element("pollquestion").getText());
Boolean archived = importBooleanType(unformatString(roompollObject
.element("archived").getText()));
Date created = CalendarPatterns
.parseImportDate(unformatString(roompollObject
.element("created").getText()));
Long createdbyuserid = importLongType(unformatString(roompollObject
.element("createdbyuserid").getText()));
Long polltypeid = importLongType(unformatString(roompollObject
.element("polltypeid").getText()));
Long roomid = importLongType(unformatString(roompollObject
.element("roomid").getText()));
RoomPoll roomPoll = new RoomPoll();
roomPoll.setPollName(pollname);
roomPoll.setPollQuestion(pollquestion);
if (archived != null) {
roomPoll.setArchived(archived.booleanValue());
} else {
roomPoll.setArchived(true);
}
roomPoll.setCreated(created);
roomPoll.setCreatedBy(usersDao.getUser(getNewId(createdbyuserid, Maps.USERS)));
roomPoll.setPollType(pollManagement.getPollType(polltypeid));
roomPoll.setRoom(roommanagement.getRoomById(getNewId(roomid, Maps.ROOMS)));
roomPoll.setRoomPollAnswerList(new LinkedList<RoomPollAnswers>());
Element roompollanswers = roompollObject
.element("roompollanswers");
for (Iterator<Element> innerIterAnswers = roompollanswers
.elementIterator("roompollanswer"); innerIterAnswers
.hasNext();) {
Element innerIterAnswerObj = innerIterAnswers.next();
Integer pointlist = importIntegerType(unformatString(innerIterAnswerObj
.element("pointlist").getText()));
Boolean answer = importBooleanType(unformatString(innerIterAnswerObj
.element("answer").getText()));
Date votedate = CalendarPatterns
.parseImportDate(unformatString(innerIterAnswerObj
.element("votedate").getText()));
Long voteduserid = importLongType(unformatString(innerIterAnswerObj
.element("voteduserid").getText()));
RoomPollAnswers roomPollAnswers = new RoomPollAnswers();
roomPollAnswers.setPointList(pointlist);
roomPollAnswers.setAnswer(answer);
roomPollAnswers.setVoteDate(votedate);
roomPollAnswers.setVotedUser(usersDao.getUser(getNewId(voteduserid, Maps.USERS)));
roomPoll.getRoomPollAnswerList().add(roomPollAnswers);
}
roomPollList.add(roomPoll);
}
}
}
return roomPollList;
}
public void copyDirectory(File sourceLocation, File targetLocation)
throws IOException {
// log.debug("^^^^ "+sourceLocation.getName()+" || "+targetLocation.getName());
if (sourceLocation.isDirectory()) {
if (!targetLocation.exists()) {
targetLocation.mkdir();
}
String[] children = sourceLocation.list();
for (int i = 0; i < children.length; i++) {
copyDirectory(new File(sourceLocation, children[i]), new File(
targetLocation, children[i]));
}
} else {
InputStream in = new FileInputStream(sourceLocation);
OutputStream out = new FileOutputStream(targetLocation);
// Copy the bits from instream to outstream
byte[] buf = new byte[1024];
int len;
while ((len = in.read(buf)) > 0) {
out.write(buf, 0, len);
}
in.close();
out.close();
}
}
public void copyFile(File sourceLocation, File targetLocation)
throws IOException {
InputStream in = new FileInputStream(sourceLocation);
OutputStream out = new FileOutputStream(targetLocation);
// Copy the bits from instream to outstream
byte[] buf = new byte[1024];
int len;
while ((len = in.read(buf)) > 0) {
out.write(buf, 0, len);
}
in.close();
out.close();
}
public boolean deleteDirectory(File path) throws IOException {
if (path.exists()) {
File[] files = path.listFiles();
for (int i = 0; i < files.length; i++) {
if (files[i].isDirectory()) {
deleteDirectory(files[i]);
} else {
files[i].delete();
}
}
}
return (path.delete());
}
private void importUsers(File userFile) throws Exception {
this.getUsersByXML(userFile);
}
@SuppressWarnings("unchecked")
private void getUsersByXML(File userFile) {
try {
SAXReader reader = new SAXReader();
Document document = reader.read(userFile);
Element root = document.getRootElement();
for (Iterator<Element> i = root.elementIterator(); i.hasNext();) {
Element itemObject = i.next();
if (itemObject.getName().equals("users")) {
for (Iterator<Element> innerIter = itemObject
.elementIterator("user"); innerIter.hasNext();) {
Element itemUsers = innerIter.next();
Users us = new Users();
Long userId = Long.valueOf(unformatString(itemUsers
.element("user_id").getText()));
us.setAge(CalendarPatterns
.parseImportDate(unformatString(itemUsers
.element("age").getText())));
us.setAvailible(importIntegerType(unformatString(itemUsers
.element("availible").getText())));
us.setDeleted(unformatString(itemUsers.element(
"deleted").getText()));
us.setFirstname(unformatString(itemUsers.element(
"firstname").getText()));
us.setLastname(unformatString(itemUsers.element(
"lastname").getText()));
us.setLogin(unformatString(itemUsers.element("login")
.getText()));
us.setPassword(unformatString(itemUsers.element("pass")
.getText()));
us.setDeleted(itemUsers.element("deleted").getText());
if (itemUsers.element("activatehash") != null) {
us.setActivatehash(unformatString(itemUsers
.element("activatehash").getText()));
} else {
us.setActivatehash("");
}
if (itemUsers.element("externalUserType") != null) {
us.setExternalUserType(unformatString(itemUsers
.element("externalUserType").getText()));
} else {
us.setExternalUserType("");
}
if (itemUsers.element("externalUserId") != null) {
us.setExternalUserId(unformatString(itemUsers
.element("externalUserId").getText()));
} else {
us.setExternalUserId(null);
}
if (itemUsers.element("resethash") != null) {
us.setResethash(unformatString(itemUsers.element(
"resethash").getText()));
} else {
us.setResethash(null);
}
if (itemUsers.element("userOffers") != null) {
us.setUserOffers(unformatString(itemUsers.element(
"userOffers").getText()));
} else {
us.setUserOffers("");
}
if (itemUsers.element("userSearchs") != null) {
us.setUserSearchs(unformatString(itemUsers.element(
"userSearchs").getText()));
} else {
us.setUserSearchs("");
}
if (itemUsers.element("forceTimeZoneCheck") != null) {
us.setForceTimeZoneCheck(importBooleanType(unformatString(itemUsers
.element("forceTimeZoneCheck").getText())));
} else {
us.setForceTimeZoneCheck(null);
}
if (itemUsers.element("lasttrans") != null) {
us.setLasttrans(importLongType(unformatString(itemUsers
.element("lasttrans").getText())));
} else {
us.setLasttrans(null);
}
if (itemUsers.element("showContactData") != null) {
us.setShowContactData(importBooleanType(unformatString(itemUsers
.element("showContactData").getText())));
} else {
us.setShowContactData(null);
}
if (itemUsers.element("showContactDataToContacts") != null) {
us.setShowContactDataToContacts(importBooleanType(unformatString(itemUsers
.element("showContactDataToContacts")
.getText())));
} else {
us.setShowContactDataToContacts(null);
}
us.setPictureuri(unformatString(itemUsers.element(
"pictureuri").getText()));
if (unformatString(
itemUsers.element("language_id").getText())
.length() > 0)
us.setLanguage_id(Long
.valueOf(unformatString(itemUsers.element(
"language_id").getText())));
us.setStatus(importIntegerType(unformatString(itemUsers
.element("status").getText())));
us.setRegdate(CalendarPatterns
.parseImportDate(unformatString(itemUsers
.element("regdate").getText())));
us.setTitle_id(importIntegerType(unformatString(itemUsers
.element("title_id").getText())));
us.setLevel_id(importLongType(unformatString(itemUsers
.element("level_id").getText())));
// UserSIP Data
if (itemUsers.element("sip_username") != null
&& itemUsers.element("sip_userpass") != null
&& itemUsers.element("sip_authid") != null) {
UserSipData userSipData = new UserSipData();
userSipData.setUsername(unformatString(itemUsers
.element("sip_username").getText()));
userSipData.setUsername(unformatString(itemUsers
.element("sip_userpass").getText()));
userSipData.setUsername(unformatString(itemUsers
.element("sip_authid").getText()));
us.setUserSipData(userSipData);
}
String additionalname = unformatString(itemUsers
.element("additionalname").getText());
String comment = unformatString(itemUsers.element(
"comment").getText());
// A User can not have a deleted Adress, you cannot
// delete the
// Adress of an User
// String deleted = u.getAdresses().getDeleted()
// Phone Number not done yet
String fax = unformatString(itemUsers.element("fax")
.getText());
Long state_id = importLongType(unformatString(itemUsers
.element("state_id").getText()));
String street = unformatString(itemUsers.element(
"street").getText());
String town = unformatString(itemUsers.element("town")
.getText());
String zip = unformatString(itemUsers.element("zip")
.getText());
if (itemUsers.element("omTimeZone") != null) {
OmTimeZone omTimeZone = omTimeZoneDaoImpl
.getOmTimeZone(unformatString(itemUsers
.element("omTimeZone").getText()));
us.setOmTimeZone(omTimeZone);
us.setForceTimeZoneCheck(false);
} else {
String jNameTimeZone = cfgManagement.getConfValue("default.timezone", String.class, "Europe/Berlin");
OmTimeZone omTimeZone = omTimeZoneDaoImpl
.getOmTimeZone(jNameTimeZone);
us.setOmTimeZone(omTimeZone);
us.setForceTimeZoneCheck(true);
}
String phone = "";
if (itemUsers.element("phone") != null) {
phone = unformatString(itemUsers.element("phone")
.getText());
}
String email = "";
if (itemUsers.element("mail") != null) {
email = unformatString(itemUsers.element("mail")
.getText());
}
States st = statemanagement.getStateById(state_id);
if (st == null) {
st = statemanagement.getStateById(1L);
}
us.setAdresses(street, zip, town,
st, additionalname, comment, fax,
phone, email);
HashSet<Organisation_Users> orgUsers = new HashSet<Organisation_Users>();
for (Iterator<Element> organisationsIterator = itemUsers
.elementIterator("organisations"); organisationsIterator
.hasNext();) {
Element organisations = organisationsIterator
.next();
for (Iterator<Element> organisationIterator = organisations
.elementIterator("user_organisation"); organisationIterator
.hasNext();) {
Element organisationObject = organisationIterator
.next();
Long organisation_id = getNewId(
importLongType(unformatString(organisationObject
.element("organisation_id")
.getText())),
Maps.ORGANISATIONS);
Boolean isModerator = importBooleanType(unformatString(organisationObject
.element("isModerator").getText()));
String deleted = unformatString(organisationObject
.element("deleted").getText());
Organisation_Users orgUser = new Organisation_Users();
orgUser.setOrganisation(organisationmanagement
.getOrganisationByIdBackup(organisation_id));
orgUser.setIsModerator(isModerator);
orgUser.setStarttime(new Date());
orgUser.setDeleted(deleted);
orgUsers.add(orgUser);
}
}
log.debug("Import User ID " + userId);
us.setStarttime(new Date());
Long actualNewUserId = userManagement.addUserBackup(us);
usersMap.put(userId, actualNewUserId);
for (Iterator<Organisation_Users> orgUserIterator = orgUsers
.iterator(); orgUserIterator.hasNext();) {
Organisation_Users organisationUsers = orgUserIterator
.next();
organisationmanagement
.addOrganisationUserObj(actualNewUserId, organisationUsers);
}
}
}
}
} catch (Exception err) {
log.error("[getUsersByXML]", err);
}
}
private void importFlvRecordings(File flvRecordingsListFile)
throws Exception {
List<FlvRecording> flvRecordings = this
.getFlvRecordings(flvRecordingsListFile);
for (FlvRecording flvRecording : flvRecordings) {
Long flvRecordingId = flvRecordingDao
.addFlvRecordingObj(flvRecording);
for (FlvRecordingMetaData flvRecordingMetaData : flvRecording
.getFlvRecordingMetaData()) {
FlvRecording flvRecordingSaved = flvRecordingDao
.getFlvRecordingById(flvRecordingId);
flvRecordingMetaData.setFlvRecording(flvRecordingSaved);
flvRecordingMetaDataDao
.addFlvRecordingMetaDataObj(flvRecordingMetaData);
}
}
}
@SuppressWarnings("unchecked")
private List<FlvRecording> getFlvRecordings(File flvRecordingsListFile) {
try {
List<FlvRecording> flvList = new LinkedList<FlvRecording>();
SAXReader reader = new SAXReader();
Document document = reader.read(flvRecordingsListFile);
Element root = document.getRootElement();
for (Iterator<Element> i = root.elementIterator(); i.hasNext();) {
Element itemObject = i.next();
if (itemObject.getName().equals("flvrecordings")) {
for (Iterator<Element> innerIter = itemObject
.elementIterator("flvrecording"); innerIter
.hasNext();) {
Element flvObject = innerIter.next();
String alternateDownload = unformatString(flvObject
.element("alternateDownload").getText());
String comment = unformatString(flvObject.element(
"comment").getText());
String deleted = unformatString(flvObject.element(
"deleted").getText());
String fileHash = unformatString(flvObject.element(
"fileHash").getText());
String fileName = unformatString(flvObject.element(
"fileName").getText());
String previewImage = unformatString(flvObject.element(
"previewImage").getText());
String recorderStreamId = unformatString(flvObject
.element("recorderStreamId").getText());
Long fileSize = importLongType(unformatString(flvObject
.element("fileSize").getText()));
Integer flvHeight = importIntegerType(unformatString(flvObject
.element("flvHeight").getText()));
Integer flvWidth = importIntegerType(unformatString(flvObject
.element("flvWidth").getText()));
Integer height = importIntegerType(unformatString(flvObject
.element("height").getText()));
Integer width = importIntegerType(unformatString(flvObject
.element("width").getText()));
Long insertedBy = getNewId(
importLongType(unformatString(flvObject
.element("insertedBy").getText())),
Maps.USERS);
Long organization_id = getNewId(
importLongType(unformatString(flvObject
.element("organization_id").getText())),
Maps.ORGANISATIONS);
Long ownerId = getNewId(
importLongType(unformatString(flvObject
.element("ownerId").getText())),
Maps.USERS);
Long parentFileExplorerItemId = getNewId(
importLongType(unformatString(flvObject
.element("parentFileExplorerItemId")
.getText())), Maps.FILEEXPLORERITEMS);
Integer progressPostProcessing = importIntegerType(unformatString(flvObject
.element("progressPostProcessing").getText()));
Long room_id = getNewId(
importLongType(unformatString(flvObject
.element("room_id").getText())),
Maps.ROOMS);
Date inserted = CalendarPatterns
.parseImportDate(unformatString(flvObject
.element("inserted").getText()));
Boolean isFolder = importBooleanType(unformatString(flvObject
.element("isFolder").getText()));
Boolean isImage = importBooleanType(unformatString(flvObject
.element("isImage").getText()));
Boolean isInterview = importBooleanType(unformatString(flvObject
.element("isInterview").getText()));
Boolean isPresentation = importBooleanType(unformatString(flvObject
.element("isPresentation").getText()));
Boolean isRecording = importBooleanType(unformatString(flvObject
.element("isRecording").getText()));
Date recordEnd = CalendarPatterns
.parseImportDate(unformatString(flvObject
.element("recordEnd").getText()));
Date recordStart = CalendarPatterns
.parseImportDate(unformatString(flvObject
.element("recordStart").getText()));
FlvRecording flvRecording = new FlvRecording();
flvRecording.setAlternateDownload(alternateDownload);
flvRecording.setComment(comment);
flvRecording.setFileHash(fileHash);
flvRecording.setFileName(fileName);
flvRecording.setPreviewImage(previewImage);
flvRecording.setRecorderStreamId(recorderStreamId);
flvRecording.setFileSize(fileSize);
flvRecording.setFlvHeight(flvHeight);
flvRecording.setFlvWidth(flvWidth);
flvRecording.setHeight(height);
flvRecording.setWidth(width);
flvRecording.setInsertedBy(insertedBy);
flvRecording.setOrganization_id(organization_id);
flvRecording.setOwnerId(ownerId);
flvRecording
.setParentFileExplorerItemId(parentFileExplorerItemId);
flvRecording
.setProgressPostProcessing(progressPostProcessing);
flvRecording.setRoom_id(room_id);
flvRecording.setInserted(inserted);
flvRecording.setIsFolder(isFolder);
flvRecording.setIsImage(isImage);
flvRecording.setIsInterview(isInterview);
flvRecording.setIsPresentation(isPresentation);
flvRecording.setIsRecording(isRecording);
flvRecording.setRecordEnd(recordEnd);
flvRecording.setRecordStart(recordStart);
flvRecording.setDeleted(deleted);
flvRecording
.setFlvRecordingMetaData(new LinkedList<FlvRecordingMetaData>());
Element flvrecordingmetadatas = flvObject
.element("flvrecordingmetadatas");
for (Iterator<Element> innerIterMetas = flvrecordingmetadatas
.elementIterator("flvrecordingmetadata"); innerIterMetas
.hasNext();) {
Element flvrecordingmetadataObj = innerIterMetas
.next();
String freeTextUserName = unformatString(flvrecordingmetadataObj
.element("freeTextUserName").getText());
String fullWavAudioData = unformatString(flvrecordingmetadataObj
.element("fullWavAudioData").getText());
String streamName = unformatString(flvrecordingmetadataObj
.element("streamName").getText());
String wavAudioData = unformatString(flvrecordingmetadataObj
.element("wavAudioData").getText());
Integer initialGapSeconds = importIntegerType(unformatString(flvrecordingmetadataObj
.element("initialGapSeconds").getText()));
Long insertedBy1 = importLongType(unformatString(flvrecordingmetadataObj
.element("insertedBy").getText()));
Integer interiewPodId = importIntegerType(unformatString(flvrecordingmetadataObj
.element("interiewPodId").getText()));
Boolean audioIsValid = importBooleanType(unformatString(flvrecordingmetadataObj
.element("audioIsValid").getText()));
Date inserted1 = CalendarPatterns
.parseImportDate(unformatString(flvrecordingmetadataObj
.element("inserted").getText()));
Boolean isAudioOnly = importBooleanType(unformatString(flvrecordingmetadataObj
.element("isAudioOnly").getText()));
Boolean isScreenData = importBooleanType(unformatString(flvrecordingmetadataObj
.element("isScreenData").getText()));
Boolean isVideoOnly = importBooleanType(unformatString(flvrecordingmetadataObj
.element("isVideoOnly").getText()));
Date recordEnd1 = CalendarPatterns
.parseImportDate(unformatString(flvrecordingmetadataObj
.element("recordEnd").getText()));
Date recordStart1 = CalendarPatterns
.parseImportDate(unformatString(flvrecordingmetadataObj
.element("recordStart").getText()));
Date updated = CalendarPatterns
.parseImportDate(unformatString(flvrecordingmetadataObj
.element("updated").getText()));
FlvRecordingMetaData flvrecordingmetadata = new FlvRecordingMetaData();
flvrecordingmetadata
.setFreeTextUserName(freeTextUserName);
flvrecordingmetadata
.setFullWavAudioData(fullWavAudioData);
flvrecordingmetadata.setStreamName(streamName);
flvrecordingmetadata.setWavAudioData(wavAudioData);
flvrecordingmetadata
.setInitialGapSeconds(initialGapSeconds);
flvrecordingmetadata.setInsertedBy(insertedBy1);
flvrecordingmetadata
.setInteriewPodId(interiewPodId);
flvrecordingmetadata.setAudioIsValid(audioIsValid);
flvrecordingmetadata.setInserted(inserted1);
flvrecordingmetadata.setIsAudioOnly(isAudioOnly);
flvrecordingmetadata.setIsScreenData(isScreenData);
flvrecordingmetadata.setIsVideoOnly(isVideoOnly);
flvrecordingmetadata.setRecordEnd(recordEnd1);
flvrecordingmetadata.setRecordStart(recordStart1);
flvrecordingmetadata.setUpdated(updated);
flvrecordingmetadata.setDeleted("false");
flvRecording.getFlvRecordingMetaData().add(
flvrecordingmetadata);
}
flvList.add(flvRecording);
}
}
}
return flvList;
} catch (Exception err) {
log.error("[getFlvRecordings]", err);
}
return null;
}
private void importPrivateMessageFolders(File privateMessageFoldersFile)
throws Exception {
List<PrivateMessageFolder> privateMessageFolders = this
.getPrivateMessageFoldersByXML(privateMessageFoldersFile);
for (PrivateMessageFolder privateMessageFolder : privateMessageFolders) {
Long folderId = privateMessageFolder.getPrivateMessageFolderId();
PrivateMessageFolder storedFolder = privateMessageFolderDao
.getPrivateMessageFolderById(folderId);
if (storedFolder == null) {
privateMessageFolder.setPrivateMessageFolderId(0);
Long newFolderId = privateMessageFolderDao
.addPrivateMessageFolderObj(privateMessageFolder);
messageFoldersMap.put(folderId, newFolderId);
}
}
}
@SuppressWarnings("unchecked")
private List<PrivateMessageFolder> getPrivateMessageFoldersByXML(
File privateMessageFoldersFile) {
try {
List<PrivateMessageFolder> pmfList = new LinkedList<PrivateMessageFolder>();
SAXReader reader = new SAXReader();
Document document = reader.read(privateMessageFoldersFile);
Element root = document.getRootElement();
for (Iterator<Element> i = root.elementIterator(); i.hasNext();) {
Element itemObject = i.next();
if (itemObject.getName().equals("privatemessagefolders")) {
for (Iterator<Element> innerIter = itemObject
.elementIterator("privatemessagefolder"); innerIter
.hasNext();) {
Element pmfObject = innerIter.next();
String folderName = unformatString(pmfObject.element(
"folderName").getText());
Long userId = getNewId(
importLongType(unformatString(pmfObject
.element("userId").getText())),
Maps.USERS);
Long privateMessageFolderId = importLongType(unformatString(pmfObject
.element("privateMessageFolderId").getText()));
PrivateMessageFolder privateMessageFolder = new PrivateMessageFolder();
privateMessageFolder.setFolderName(folderName);
privateMessageFolder.setUserId(userId);
privateMessageFolder
.setPrivateMessageFolderId(privateMessageFolderId);
pmfList.add(privateMessageFolder);
}
}
}
return pmfList;
} catch (Exception err) {
log.error("[getPrivateMessageFoldersByXML]", err);
}
return null;
}
private void importPrivateMessages(File privateMessagesFile)
throws Exception {
List<PrivateMessages> pmList = this
.getPrivateMessagesByXML(privateMessagesFile);
for (PrivateMessages pm : pmList) {
privateMessagesDao.addPrivateMessageObj(pm);
}
}
@SuppressWarnings("unchecked")
private List<PrivateMessages> getPrivateMessagesByXML(
File privateMessagesFile) {
try {
List<PrivateMessages> pmList = new LinkedList<PrivateMessages>();
SAXReader reader = new SAXReader();
Document document = reader.read(privateMessagesFile);
Element root = document.getRootElement();
for (Iterator<Element> i = root.elementIterator(); i.hasNext();) {
Element itemObject = i.next();
if (itemObject.getName().equals("privatemessages")) {
for (Iterator<Element> innerIter = itemObject
.elementIterator("privatemessage"); innerIter
.hasNext();) {
Element pmObject = innerIter.next();
String message = unformatString(pmObject.element(
"message").getText());
String subject = unformatString(pmObject.element(
"subject").getText());
Long privateMessageFolderId = getNewId(
importLongType(unformatString(pmObject.element(
"privateMessageFolderId").getText())),
Maps.MESSAGEFOLDERS);
Long userContactId = getNewId(
importLongType(unformatString(pmObject.element(
"userContactId").getText())),
Maps.USERCONTACTS);
Long parentMessage = importLongType(unformatString(pmObject
.element("parentMessage").getText()));
Boolean bookedRoom = importBooleanType(unformatString(pmObject
.element("bookedRoom").getText()));
Users from = userManagement.getUserById(getNewId(
importLongType(unformatString(pmObject.element(
"from").getText())), Maps.USERS));
Users to = userManagement.getUserById(getNewId(
importLongType(unformatString(pmObject.element(
"to").getText())), Maps.USERS));
Date inserted = CalendarPatterns
.parseImportDate(unformatString(pmObject
.element("inserted").getText()));
Boolean isContactRequest = importBooleanType(unformatString(pmObject
.element("isContactRequest").getText()));
Boolean isRead = importBooleanType(unformatString(pmObject
.element("isRead").getText()));
Boolean isTrash = importBooleanType(unformatString(pmObject
.element("isTrash").getText()));
Users owner = userManagement.getUserById(getNewId(
importLongType(unformatString(pmObject.element(
"owner").getText())), Maps.USERS));
Rooms room = roommanagement.getRoomById(getNewId(
importLongType(unformatString(pmObject.element(
"room").getText())), Maps.ROOMS));
PrivateMessages pm = new PrivateMessages();
pm.setMessage(message);
pm.setSubject(subject);
pm.setPrivateMessageFolderId(privateMessageFolderId);
pm.setUserContactId(userContactId);
pm.setParentMessage(parentMessage);
pm.setBookedRoom(bookedRoom);
pm.setFrom(from);
pm.setTo(to);
pm.setInserted(inserted);
pm.setIsContactRequest(isContactRequest);
pm.setIsRead(isRead);
pm.setIsTrash(isTrash);
pm.setOwner(owner);
pm.setRoom(room);
pmList.add(pm);
}
}
}
return pmList;
} catch (Exception err) {
log.error("[getPrivateMessagesByXML]", err);
}
return null;
}
private void importUserContacts(File userContactsFile) throws Exception {
List<UserContacts> ucList = this.getUserContactsByXML(userContactsFile);
for (UserContacts uc : ucList) {
Long userContactId = uc.getUserContactId();
UserContacts storedUC = userContactsDao
.getUserContacts(userContactId);
if (storedUC == null) {
uc.setUserContactId(0);
Long newId = userContactsDao.addUserContactObj(uc);
this.userContactsMap.put(userContactId, newId);
}
}
}
@SuppressWarnings("unchecked")
private List<UserContacts> getUserContactsByXML(File userContactsFile) {
try {
List<UserContacts> ucList = new LinkedList<UserContacts>();
SAXReader reader = new SAXReader();
Document document = reader.read(userContactsFile);
Element root = document.getRootElement();
for (Iterator<Element> i = root.elementIterator(); i.hasNext();) {
Element itemObject = i.next();
if (itemObject.getName().equals("usercontacts")) {
for (Iterator<Element> innerIter = itemObject
.elementIterator("usercontact"); innerIter
.hasNext();) {
Element usercontact = innerIter.next();
String hash = unformatString(usercontact
.element("hash").getText());
Users contact = userManagement.getUserById(getNewId(
importLongType(unformatString(usercontact
.element("contact").getText())),
Maps.USERS));
Users owner = userManagement.getUserById(getNewId(
importLongType(unformatString(usercontact
.element("owner").getText())),
Maps.USERS));
Boolean pending = importBooleanType(unformatString(usercontact
.element("pending").getText()));
Boolean shareCalendar = importBooleanType(unformatString(usercontact
.element("shareCalendar").getText()));
Long userContactId = importLongType(unformatString(usercontact
.element("userContactId").getText()));
UserContacts userContacts = new UserContacts();
userContacts.setHash(hash);
userContacts.setContact(contact);
userContacts.setOwner(owner);
userContacts.setPending(pending);
userContacts.setShareCalendar(shareCalendar);
userContacts.setUserContactId(userContactId);
ucList.add(userContacts);
}
}
}
return ucList;
} catch (Exception err) {
log.error("[getUserContactsByXML]", err);
}
return null;
}
private void importOrganizsations(File orgFile) {
try {
SAXReader reader = new SAXReader();
Document document = reader.read(orgFile);
Element root = document.getRootElement();
for (@SuppressWarnings("unchecked")
Iterator<Element> i = root.elementIterator(); i.hasNext();) {
Element itemObject = i.next();
if (itemObject.getName().equals("organisations")) {
for (@SuppressWarnings("unchecked")
Iterator<Element> innerIter = itemObject
.elementIterator("organisation"); innerIter
.hasNext();) {
Element orgObject = innerIter.next();
Long organisation_id = importLongType(unformatString(orgObject
.element("organisation_id").getText()));
String name = unformatString(orgObject.element("name")
.getText());
String deleted = unformatString(orgObject.element(
"deleted").getText());
Organisation organisation = new Organisation();
organisation.setName(name);
organisation.setDeleted(deleted);
Long newOrgID = organisationmanagement
.addOrganisationObj(organisation);
organisationsMap.put(organisation_id, newOrgID);
}
}
}
} catch (Exception err) {
log.error("[getOrganisationsByXML]", err);
}
}
private String unformatString(String str) {
str = str.replaceAll(Pattern.quote("<![CDATA["), "");
str = str.replaceAll(Pattern.quote("]]>"), "");
return str;
}
private void importMeetingmembers(File meetingmembersListFile)
throws Exception {
List<MeetingMember> meetingmembersList = this
.getMeetingmembersListByXML(meetingmembersListFile);
for (MeetingMember ma : meetingmembersList) {
// We need to reset this as openJPA reject to store them otherwise
ma.setMeetingMemberId(null);
meetingMemberDao.addMeetingMemberByObject(ma);
}
}
@SuppressWarnings("unchecked")
private List<MeetingMember> getMeetingmembersListByXML(
File meetingmembersListFile) {
try {
List<MeetingMember> meetingmembersList = new LinkedList<MeetingMember>();
SAXReader reader = new SAXReader();
Document document = reader.read(meetingmembersListFile);
Element root = document.getRootElement();
for (Iterator<Element> i = root.elementIterator(); i.hasNext();) {
Element itemObject = i.next();
if (itemObject.getName().equals("meetingmembers")) {
for (Iterator<Element> innerIter = itemObject
.elementIterator("meetingmember"); innerIter
.hasNext();) {
Element appointmentsObject = innerIter.next();
Long meetingMemberId = importLongType(unformatString(appointmentsObject
.element("meetingMemberId").getText()));
Long userid = getNewId(
importLongType(unformatString(appointmentsObject
.element("userid").getText())),
Maps.USERS);
Long appointment = getNewId(
importLongType(unformatString(appointmentsObject
.element("appointment").getText())),
Maps.APPOINTMENTS);
String firstname = unformatString(appointmentsObject
.element("firstname").getText());
String lastname = unformatString(appointmentsObject
.element("lastname").getText());
String memberStatus = unformatString(appointmentsObject
.element("memberStatus").getText());
String appointmentStatus = unformatString(appointmentsObject
.element("appointmentStatus").getText());
String email = unformatString(appointmentsObject
.element("email").getText());
Boolean deleted = importBooleanType(unformatString(appointmentsObject
.element("deleted").getText()));
Boolean invitor = importBooleanType(unformatString(appointmentsObject
.element("invitor").getText()));
MeetingMember meetingMember = new MeetingMember();
meetingMember.setMeetingMemberId(meetingMemberId);
meetingMember.setUserid(usersDao.getUser(userid));
meetingMember.setAppointment(appointmentDao
.getAppointmentByIdBackup(appointment));
meetingMember.setFirstname(firstname);
meetingMember.setLastname(lastname);
meetingMember.setMemberStatus(memberStatus);
meetingMember.setAppointmentStatus(appointmentStatus);
meetingMember.setEmail(email);
meetingMember.setDeleted(deleted);
meetingMember.setInvitor(invitor);
meetingmembersList.add(meetingMember);
}
}
}
return meetingmembersList;
} catch (Exception err) {
log.error("[meetingmembersList]", err);
}
return null;
}
private void importLdapConfig(File ldapConfigListFile) throws Exception {
List<LdapConfig> ldapConfigList = this
.getLdapConfigListByXML(ldapConfigListFile);
for (LdapConfig ldapConfig : ldapConfigList) {
ldapConfigDao.addLdapConfigByObject(ldapConfig);
}
}
@SuppressWarnings("unchecked")
private List<LdapConfig> getLdapConfigListByXML(File ldapConfigListFile) {
try {
List<LdapConfig> ldapConfigsList = new LinkedList<LdapConfig>();
SAXReader reader = new SAXReader();
Document document = reader.read(ldapConfigListFile);
Element root = document.getRootElement();
for (Iterator<Element> i = root.elementIterator(); i.hasNext();) {
Element itemObject = i.next();
if (itemObject.getName().equals("ldapconfigs")) {
for (Iterator<Element> innerIter = itemObject
.elementIterator("ldapconfig"); innerIter.hasNext();) {
Element ldapconfigObject = innerIter.next();
String name = unformatString(ldapconfigObject.element(
"name").getText());
String configFileName = unformatString(ldapconfigObject
.element("configFileName").getText());
Boolean addDomainToUserName = importBooleanType(unformatString(ldapconfigObject
.element("addDomainToUserName").getText()));
String domain = unformatString(ldapconfigObject
.element("domain").getText());
Boolean isActive = importBooleanType(unformatString(ldapconfigObject
.element("isActive").getText()));
LdapConfig ldapConfig = new LdapConfig();
ldapConfig.setName(name);
ldapConfig.setConfigFileName(configFileName);
ldapConfig.setAddDomainToUserName(addDomainToUserName);
ldapConfig.setDomain(domain);
ldapConfig.setIsActive(isActive);
ldapConfigsList.add(ldapConfig);
}
}
}
return ldapConfigsList;
} catch (Exception err) {
log.error("[getLdapConfigListByXML]", err);
}
return null;
}
private void importAppointements(File appointementListFile)
throws Exception {
List<Appointment> appointmentList = this
.getAppointmentListByXML(appointementListFile);
for (Appointment appointment : appointmentList) {
Long appId = appointment.getAppointmentId();
// We need to reset this as openJPA reject to store them otherwise
appointment.setAppointmentId(null);
Long newAppId = appointmentDao.addAppointmentObj(appointment);
appointmentsMap.put(appId, newAppId);
}
}
@SuppressWarnings("unchecked")
private List<Appointment> getAppointmentListByXML(File appointementListFile) {
try {
List<Appointment> appointmentList = new LinkedList<Appointment>();
SAXReader reader = new SAXReader();
Document document = reader.read(appointementListFile);
Element root = document.getRootElement();
for (Iterator<Element> i = root.elementIterator(); i.hasNext();) {
Element itemObject = i.next();
if (itemObject.getName().equals("appointments")) {
for (Iterator<Element> innerIter = itemObject
.elementIterator("appointment"); innerIter
.hasNext();) {
Element appointmentsObject = innerIter.next();
Long appointmentId = importLongType(unformatString(appointmentsObject
.element("appointmentId").getText()));
String appointmentName = unformatString(appointmentsObject
.element("appointmentName").getText());
String appointmentLocation = unformatString(appointmentsObject
.element("appointmentLocation").getText());
String appointmentDescription = unformatString(appointmentsObject
.element("appointmentDescription").getText());
Long categoryId = importLongType(unformatString(appointmentsObject
.element("categoryId").getText()));
Date appointmentStarttime = CalendarPatterns
.parseImportDate(unformatString(appointmentsObject
.element("appointmentStarttime")
.getText()));
Date appointmentEndtime = CalendarPatterns
.parseImportDate(unformatString(appointmentsObject
.element("appointmentEndtime")
.getText()));
String deleted = unformatString(appointmentsObject
.element("deleted").getText());
Long typId = importLongType(unformatString(appointmentsObject
.element("typId").getText()));
Boolean isDaily = importBooleanType(unformatString(appointmentsObject
.element("isDaily").getText()));
Boolean isWeekly = importBooleanType(unformatString(appointmentsObject
.element("isWeekly").getText()));
Boolean isMonthly = importBooleanType(unformatString(appointmentsObject
.element("isMonthly").getText()));
Boolean isYearly = importBooleanType(unformatString(appointmentsObject
.element("isYearly").getText()));
Long room_id = getNewId(
importLongType(unformatString(appointmentsObject
.element("room_id").getText())),
Maps.ROOMS);
String icalId = unformatString(appointmentsObject
.element("icalId").getText());
Long language_id = importLongType(unformatString(appointmentsObject
.element("language_id").getText()));
Boolean isPasswordProtected = importBooleanType(unformatString(appointmentsObject
.element("isPasswordProtected").getText()));
String password = unformatString(appointmentsObject
.element("password").getText());
Long users_id = getNewId(
importLongType(unformatString(appointmentsObject
.element("users_id").getText())),
Maps.USERS);
Appointment app = new Appointment();
app.setAppointmentId(appointmentId);
app.setAppointmentLocation(appointmentLocation);
app.setAppointmentName(appointmentName);
app.setAppointmentDescription(appointmentDescription);
app.setAppointmentCategory(appointmentCategoryDaoImpl
.getAppointmentCategoryById(categoryId));
app.setAppointmentStarttime(appointmentStarttime);
app.setAppointmentEndtime(appointmentEndtime);
app.setDeleted(deleted);
app.setRemind(appointmentReminderTypDaoImpl
.getAppointmentReminderTypById(typId));
app.setIsDaily(isDaily);
app.setIsWeekly(isWeekly);
app.setIsMonthly(isMonthly);
app.setIsYearly(isYearly);
app.setRoom(roommanagement.getRoomById(room_id));
app.setIcalId(icalId);
app.setLanguage_id(language_id);
app.setIsPasswordProtected(isPasswordProtected);
app.setPassword(password);
app.setUserId(userManagement.getUserById(users_id));
appointmentList.add(app);
}
}
}
return appointmentList;
} catch (Exception err) {
log.error("[getRoomListByXML]", err);
}
return null;
}
private void importOrgRooms(File orgRoomListFile) throws Exception {
List<Rooms_Organisation> roomOrgList = this
.getOrgRoomListByXML(orgRoomListFile);
for (Rooms_Organisation rooms_Organisation : roomOrgList) {
// We need to reset this as openJPA reject to store them otherwise
rooms_Organisation.setRooms_organisation_id(null);
roommanagement.addRoomOrganisation(rooms_Organisation);
}
}
@SuppressWarnings("unchecked")
private List<Rooms_Organisation> getOrgRoomListByXML(File orgRoomListFile) {
try {
List<Rooms_Organisation> orgRoomList = new LinkedList<Rooms_Organisation>();
SAXReader reader = new SAXReader();
Document document = reader.read(orgRoomListFile);
Element root = document.getRootElement();
for (Iterator<Element> i = root.elementIterator(); i.hasNext();) {
Element itemObject = i.next();
if (itemObject.getName().equals("room_organisations")) {
for (Iterator<Element> innerIter = itemObject
.elementIterator("room_organisation"); innerIter
.hasNext();) {
Element orgRoomObject = innerIter.next();
Long rooms_organisation_id = importLongType(unformatString(orgRoomObject
.element("rooms_organisation_id").getText()));
Long organisation_id = getNewId(
importLongType(unformatString(orgRoomObject
.element("organisation_id").getText())),
Maps.ORGANISATIONS);
Long rooms_id = getNewId(
importLongType(unformatString(orgRoomObject
.element("rooms_id").getText())),
Maps.ROOMS);
String deleted = unformatString(orgRoomObject.element(
"deleted").getText());
Rooms_Organisation rooms_Organisation = new Rooms_Organisation();
rooms_Organisation
.setRooms_organisation_id(rooms_organisation_id);
rooms_Organisation
.setOrganisation(organisationmanagement
.getOrganisationById(organisation_id));
rooms_Organisation.setRoom(roommanagement
.getRoomById(rooms_id));
rooms_Organisation.setDeleted(deleted);
orgRoomList.add(rooms_Organisation);
}
}
}
return orgRoomList;
} catch (Exception err) {
log.error("[getRoomListByXML]", err);
}
return null;
}
@SuppressWarnings("unchecked")
private void importRooms(File roomFile) throws Exception {
try {
SAXReader reader = new SAXReader();
Document document = reader.read(roomFile);
Element root = document.getRootElement();
Element rooms = root.element("rooms");
for (Iterator<Element> innerIter = rooms
.elementIterator("room"); innerIter.hasNext();) {
Element roomObject = innerIter.next();
Long rooms_id = importLongType(unformatString(roomObject
.element("rooms_id").getText()));
String name = unformatString(roomObject.element("name")
.getText());
String deleted = unformatString(roomObject.element(
"deleted").getText());
String comment = unformatString(roomObject.element(
"comment").getText());
Long numberOfPartizipants = importLongType(unformatString((roomObject
.element("numberOfPartizipants").getText())));
Boolean appointment = importBooleanType(unformatString(roomObject
.element("appointment").getText()));
Long externalRoomId = importLongType(unformatString(roomObject
.element("externalRoomId").getText()));
String externalRoomType = unformatString(roomObject
.element("externalRoomType").getText());
Long roomtypes_id = importLongType(unformatString(roomObject
.element("roomtypeId").getText()));
Boolean isDemoRoom = false;
if (roomObject
.element("isDemoRoom") != null) {
isDemoRoom = importBooleanType(unformatString(roomObject
.element("isDemoRoom").getText()));
}
Integer demoTime = null;
if (roomObject
.element("demoTime") != null) {
demoTime = importIntegerType(unformatString(roomObject
.element("demoTime").getText()));
}
Boolean isModeratedRoom = false;
if (roomObject.element("isModeratedRoom") != null) {
isModeratedRoom = importBooleanType(unformatString(roomObject
.element("isModeratedRoom").getText()));
}
Boolean allowUserQuestions = true;
if (roomObject.element("allowUserQuestions") != null) {
allowUserQuestions = importBooleanType(unformatString(roomObject
.element("allowUserQuestions").getText()));
}
Boolean isAudioOnly = false;
if (roomObject.element("isAudioOnly") != null) {
isAudioOnly = importBooleanType(unformatString(roomObject
.element("isAudioOnly").getText()));
}
String sipNumber = "";
if (roomObject.element("sipNumber") != null) {
sipNumber = unformatString(roomObject.element(
"sipNumber").getText());
}
String conferencePin = "";
if (roomObject.element("conferencePin") != null) {
conferencePin = unformatString(roomObject
.element("conferencePin").getText());
}
Boolean showMicrophoneStatus = false;
if (roomObject.element("showMicrophoneStatus") != null) {
showMicrophoneStatus = importBooleanType(unformatString(roomObject
.element("showMicrophoneStatus").getText()));
}
Long ownerId = null;
if (roomObject.element("ownerid") != null) {
ownerId = getNewId(
importLongType(unformatString(roomObject
.element("ownerid").getText())),
Maps.USERS);
}
Boolean ispublic = false;
if (roomObject.element("ispublic") != null) {
ispublic = importBooleanType(unformatString(roomObject
.element("ispublic").getText()));
}
Boolean waitForRecording = false;
if (roomObject.element("waitForRecording") != null) {
waitForRecording = importBooleanType(unformatString(roomObject
.element("waitForRecording").getText()));
}
Boolean hideTopBar = false;
if (roomObject.element("hideTopBar") != null) {
hideTopBar = importBooleanType(unformatString(roomObject
.element("hideTopBar").getText()));
}
Boolean isClosed = false;
if (roomObject.element("isClosed") != null) {
isClosed = importBooleanType(unformatString(roomObject
.element("isClosed").getText()));
}
Boolean allowRecording = false;
if (roomObject.element("allowRecording") != null) {
allowRecording = importBooleanType(unformatString(roomObject
.element("allowRecording").getText()));
}
String redirectURL = "";
if (roomObject.element("redirectURL") != null) {
redirectURL = unformatString(roomObject.element(
"redirectURL").getText());
}
Boolean hideActionsMenu = false;
if (roomObject.element("hideActionsMenu") != null) {
hideTopBar = importBooleanType(unformatString(roomObject
.element("hideActionsMenu").getText()));
}
Boolean hideActivitiesAndActions = false;
if (roomObject.element("hideActivitiesAndActions") != null) {
hideTopBar = importBooleanType(unformatString(roomObject
.element("hideActivitiesAndActions").getText()));
}
Boolean hideChat = false;
if (roomObject.element("hideChat") != null) {
hideTopBar = importBooleanType(unformatString(roomObject
.element("hideChat").getText()));
}
Boolean hideFilesExplorer = false;
if (roomObject.element("hideFilesExplorer") != null) {
hideTopBar = importBooleanType(unformatString(roomObject
.element("hideFilesExplorer").getText()));
}
Boolean hideScreenSharing = false;
if (roomObject.element("hideScreenSharing") != null) {
hideTopBar = importBooleanType(unformatString(roomObject
.element("hideScreenSharing").getText()));
}
Boolean hideWhiteboard = false;
if (roomObject.element("hideWhiteboard") != null) {
hideTopBar = importBooleanType(unformatString(roomObject
.element("hideWhiteboard").getText()));
}
Rooms room = new Rooms();
room.setRooms_id(rooms_id);
room.setOwnerId(ownerId);
room.setName(name);
room.setDeleted(deleted);
room.setComment(comment);
room.setNumberOfPartizipants(numberOfPartizipants);
room.setAppointment(appointment);
room.setExternalRoomId(externalRoomId);
room.setExternalRoomType(externalRoomType);
room.setRoomtype(roommanagement
.getRoomTypesById(roomtypes_id));
room.setIsDemoRoom(isDemoRoom);
room.setDemoTime(demoTime);
room.setIsModeratedRoom(isModeratedRoom);
room.setAllowUserQuestions(allowUserQuestions);
room.setIsAudioOnly(isAudioOnly);
room.setSipNumber(sipNumber);
room.setConferencePin(conferencePin);
room.setIspublic(ispublic);
room.setIsClosed(isClosed);
room.setRedirectURL(redirectURL);
room.setWaitForRecording(waitForRecording);
room.setHideTopBar(hideTopBar);
room.setAllowRecording(allowRecording);
room.setShowMicrophoneStatus(showMicrophoneStatus);
room.setHideActionsMenu(hideActionsMenu);
room.setHideActivitiesAndActions(hideActivitiesAndActions);
room.setHideChat(hideChat);
room.setHideFilesExplorer(hideFilesExplorer);
room.setHideScreenSharing(hideScreenSharing);
room.setHideWhiteboard(hideWhiteboard);
Long roomId = room.getRooms_id();
// We need to reset this as openJPA reject to store them
// otherwise
room.setRooms_id(null);
Long newRoomId = roommanagement.addRoom(room);
roomsMap.put(roomId, newRoomId);
for (Iterator<Element> iterMods = roomObject
.elementIterator("room_moderators"); iterMods
.hasNext();) {
Element room_moderators = iterMods.next();
for (Iterator<Element> iterMod = room_moderators
.elementIterator("room_moderator"); iterMod
.hasNext();) {
Element room_moderator = iterMod.next();
RoomModerators roomModerators = new RoomModerators();
Long user_id = getNewId(
importLongType(unformatString(room_moderator
.element("user_id").getText())),
Maps.USERS);
Boolean is_supermoderator = importBooleanType(unformatString(room_moderator
.element("is_supermoderator").getText()));
roomModerators.setDeleted("false");
roomModerators.setRoomId(getNewId(rooms_id,
Maps.ROOMS));
roomModerators.setUser(userManagement
.getUserById(user_id));
roomModerators
.setIsSuperModerator(is_supermoderator);
roomModeratorsDao
.addRoomModeratorByObj(roomModerators);
}
}
}
} catch (Exception err) {
log.error("[getRoomListByXML]", err);
}
}
private void importFileExplorerItems(File fileExplorerItemsListFile)
throws Exception {
List<FileExplorerItem> fileExplorerItems = this
.getFileExplorerItems(fileExplorerItemsListFile);
for (FileExplorerItem fileExplorerItem : fileExplorerItems) {
// We need to reset this as openJPA reject to store them otherwise
long itemId = fileExplorerItem.getFileExplorerItemId();
fileExplorerItem.setFileExplorerItemId(0);
long newItemId = fileExplorerItemDao
.addFileExplorerItem(fileExplorerItem);
fileExplorerItemsMap.put(itemId, newItemId);
}
}
@SuppressWarnings("unchecked")
private List<FileExplorerItem> getFileExplorerItems(
File fileExplorerItemsListFile) {
try {
List<FileExplorerItem> fileExplorerItemsList = new LinkedList<FileExplorerItem>();
SAXReader reader = new SAXReader();
Document document = reader.read(fileExplorerItemsListFile);
Element root = document.getRootElement();
for (Iterator<Element> i = root.elementIterator(); i.hasNext();) {
Element itemObject = i.next();
if (itemObject.getName().equals("fileExplorerItems")) {
for (Iterator<Element> innerIter = itemObject
.elementIterator("fileExplorerItem"); innerIter
.hasNext();) {
Element fileExplorerItemObj = innerIter.next();
Long fileExplorerItemId = importLongType(unformatString(fileExplorerItemObj
.element("fileExplorerItemId").getText()));
String fileName = unformatString(fileExplorerItemObj
.element("fileName").getText());
String fileHash = unformatString(fileExplorerItemObj
.element("fileHash").getText());
Long parentFileExplorerItemId = importLongType(unformatString(fileExplorerItemObj
.element("parentFileExplorerItemId").getText()));
Long room_id = getNewId(
importLongType(unformatString(fileExplorerItemObj
.element("room_id").getText())),
Maps.ROOMS);
Long ownerId = getNewId(
importLongType(unformatString(fileExplorerItemObj
.element("ownerId").getText())),
Maps.USERS);
Boolean isFolder = importBooleanType(unformatString(fileExplorerItemObj
.element("isFolder").getText()));
Boolean isImage = importBooleanType(unformatString(fileExplorerItemObj
.element("isImage").getText()));
Boolean isPresentation = importBooleanType(unformatString(fileExplorerItemObj
.element("isPresentation").getText()));
Boolean isVideo = importBooleanType(unformatString(fileExplorerItemObj
.element("isVideo").getText()));
Long insertedBy = getNewId(
importLongType(unformatString(fileExplorerItemObj
.element("insertedBy").getText())),
Maps.USERS);
Date inserted = CalendarPatterns
.parseImportDate(unformatString(fileExplorerItemObj
.element("inserted").getText()));
Date updated = CalendarPatterns
.parseImportDate(unformatString(fileExplorerItemObj
.element("updated").getText()));
String deleted = unformatString(fileExplorerItemObj
.element("deleted").getText());
Long fileSize = importLongType(unformatString(fileExplorerItemObj
.element("fileSize").getText()));
Integer flvWidth = importIntegerType(unformatString(fileExplorerItemObj
.element("flvWidth").getText()));
Integer flvHeight = importIntegerType(unformatString(fileExplorerItemObj
.element("flvHeight").getText()));
String previewImage = unformatString(fileExplorerItemObj
.element("previewImage").getText());
String wmlFilePath = unformatString(fileExplorerItemObj
.element("wmlFilePath").getText());
Boolean isStoredWmlFile = importBooleanType(unformatString(fileExplorerItemObj
.element("isStoredWmlFile").getText()));
Boolean isChart = importBooleanType(unformatString(fileExplorerItemObj
.element("isChart").getText()));
FileExplorerItem fileExplorerItem = new FileExplorerItem();
fileExplorerItem
.setFileExplorerItemId(fileExplorerItemId);
fileExplorerItem.setFileName(fileName);
fileExplorerItem.setFileHash(fileHash);
fileExplorerItem
.setParentFileExplorerItemId(parentFileExplorerItemId);
fileExplorerItem.setRoom_id(room_id);
fileExplorerItem.setOwnerId(ownerId);
fileExplorerItem.setIsFolder(isFolder);
fileExplorerItem.setIsImage(isImage);
fileExplorerItem.setIsPresentation(isPresentation);
fileExplorerItem.setIsVideo(isVideo);
fileExplorerItem.setInsertedBy(insertedBy);
fileExplorerItem.setInserted(inserted);
fileExplorerItem.setUpdated(updated);
fileExplorerItem.setDeleted(deleted);
fileExplorerItem.setFileSize(fileSize);
fileExplorerItem.setFlvWidth(flvWidth);
fileExplorerItem.setFlvHeight(flvHeight);
fileExplorerItem.setPreviewImage(previewImage);
fileExplorerItem.setWmlFilePath(wmlFilePath);
fileExplorerItem.setIsStoredWmlFile(isStoredWmlFile);
fileExplorerItem.setIsChart(isChart);
fileExplorerItemsList.add(fileExplorerItem);
}
}
}
return fileExplorerItemsList;
} catch (Exception err) {
log.error("[getFileExplorerItems]", err);
}
return null;
}
private void importFolders(String current_dir, File importBaseDir)
throws IOException {
// Now check the room files and import them
File roomFilesFolder = new File(importBaseDir, "roomFiles");
File library_dir = new File(current_dir, OpenmeetingsVariables.UPLOAD_DIR);
log.debug("roomFilesFolder PATH " + roomFilesFolder.getAbsolutePath());
if (roomFilesFolder.exists()) {
File[] files = roomFilesFolder.listFiles();
for (File file : files) {
if (file.isDirectory()) {
File parentPathFile = new File(library_dir, file.getName());
if (!parentPathFile.exists()) {
parentPathFile.mkdir();
}
File[] roomOrProfileFiles = file.listFiles();
for (File roomOrProfileFileOrFolder : roomOrProfileFiles) {
if (roomOrProfileFileOrFolder.isDirectory()) {
String fileOrFolderName = roomOrProfileFileOrFolder
.getName();
int beginIndex = fileOrFolderName
.indexOf(ScopeApplicationAdapter.profilesPrefix);
// Profile folder should be renamed if new user id
// is differ from current id.
if (beginIndex > -1) {
beginIndex = beginIndex
+ ScopeApplicationAdapter.profilesPrefix
.length();
Long profileId = importLongType(fileOrFolderName
.substring(beginIndex));
Long newProfileID = getNewId(profileId,
Maps.USERS);
if (profileId != newProfileID) {
fileOrFolderName = fileOrFolderName
.replaceFirst(
ScopeApplicationAdapter.profilesPrefix
+ profileId,
ScopeApplicationAdapter.profilesPrefix
+ newProfileID);
}
}
File roomDocumentFolder = new File(parentPathFile, fileOrFolderName);
if (!roomDocumentFolder.exists()) {
roomDocumentFolder.mkdir();
File[] roomDocumentFiles = roomOrProfileFileOrFolder
.listFiles();
for (File roomDocumentFile : roomDocumentFiles) {
if (roomDocumentFile.isDirectory()) {
log.error("Folder detected in Documents space! Folder "
+ roomDocumentFolder);
} else {
copyFile(roomDocumentFile,
new File(roomDocumentFolder, roomDocumentFile.getName()));
}
}
} else {
log.debug("Document already exists :: ",
roomDocumentFolder);
}
} else {
File roomFileOrProfileFile = new File(parentPathFile, roomOrProfileFileOrFolder.getName());
if (!roomFileOrProfileFile.exists()) {
this.copyFile(roomOrProfileFileOrFolder,
roomFileOrProfileFile);
} else {
log.debug("File does already exist :: ", roomFileOrProfileFile);
}
}
}
}
}
}
// Now check the recordings and import them
File sourceDirRec = new File(importBaseDir, "recordingFiles");
log.debug("sourceDirRec PATH " + sourceDirRec.getAbsolutePath());
if (sourceDirRec.exists()) {
File targetDirRec = new File(current_dir, OpenmeetingsVariables.STREAMS_DIR
+ File.separatorChar + "hibernate" + File.separatorChar);
copyDirectory(sourceDirRec, targetDirRec);
}
}
private Integer importIntegerType(String value) {
if (value.equals("null") || value.equals("")) {
return null;
}
return Integer.valueOf(value).intValue();
}
private Long importLongType(String value) {
if (value.equals("null") || value.equals("")) {
return null;
}
return Long.valueOf(value).longValue();
}
private Boolean importBooleanType(String value) {
if (value.equals("null") || value.equals("")) {
return null;
}
return Boolean.valueOf(value).booleanValue();
}
private Long getNewId(Long oldId, Maps map) {
Long newId = oldId;
switch (map) {
case USERS:
if (usersMap.get(oldId) != null)
newId = usersMap.get(oldId);
break;
case ORGANISATIONS:
if (organisationsMap.get(oldId) != null)
newId = organisationsMap.get(oldId);
break;
case APPOINTMENTS:
if (appointmentsMap.get(oldId) != null)
newId = appointmentsMap.get(oldId);
break;
case ROOMS:
if (roomsMap.get(oldId) != null)
newId = roomsMap.get(oldId);
break;
case MESSAGEFOLDERS:
if (messageFoldersMap.get(oldId) != null)
newId = messageFoldersMap.get(oldId);
break;
case USERCONTACTS:
if (userContactsMap.get(oldId) != null)
newId = userContactsMap.get(oldId);
break;
case FILEEXPLORERITEMS:
if (fileExplorerItemsMap.get(oldId) != null)
newId = fileExplorerItemsMap.get(oldId);
break;
default:
break;
}
return newId;
}
}