Example usage for org.apache.commons.transaction.util FileHelper removeRec

List of usage examples for org.apache.commons.transaction.util FileHelper removeRec

Introduction

In this page you can find the example usage for org.apache.commons.transaction.util FileHelper removeRec.

Prototype

public static void removeRec(File toRemove) 

Source Link

Document

Removes a file.

Usage

From source file:org.apache.openmeetings.backup.BackupImport.java

public void performImport(InputStream is) throws Exception {
    usersMap.clear();/*from  w ww.ja  v  a 2 s.com*/
    groupMap.clear();
    appointmentsMap.clear();
    roomsMap.clear();
    messageFoldersMap.clear();
    userContactsMap.clear();
    userEmailMap.clear();
    messageFoldersMap.put(INBOX_FOLDER_ID, INBOX_FOLDER_ID);
    messageFoldersMap.put(SENT_FOLDER_ID, SENT_FOLDER_ID);
    messageFoldersMap.put(TRASH_FOLDER_ID, TRASH_FOLDER_ID);

    File f = unzip(is);

    /*
     * ##################### Import Configs
     */
    {
        Registry registry = new Registry();
        Strategy strategy = new RegistryStrategy(registry);
        RegistryMatcher matcher = new RegistryMatcher(); //TODO need to be removed in the later versions
        Serializer serializer = new Persister(strategy, matcher);

        matcher.bind(Long.class, LongTransform.class);
        registry.bind(Date.class, DateConverter.class);
        registry.bind(User.class, new UserConverter(userDao, usersMap));

        List<Configuration> list = readList(serializer, f, "configs.xml", "configs", Configuration.class, true);
        for (Configuration c : list) {
            if (c.getKey() == null || c.isDeleted()) {
                continue;
            }
            Configuration cfg = configurationDao.forceGet(c.getKey());
            if (cfg != null && !cfg.isDeleted()) {
                log.warn("Non deleted configuration with same key is found! old value: {}, new value: {}",
                        cfg.getValue(), c.getValue());
            }
            c.setId(cfg == null ? null : cfg.getId());
            if (c.getUser() != null && c.getUser().getId() == null) {
                c.setUser(null);
            }
            if (CONFIG_CRYPT_KEY.equals(c.getKey())) {
                try {
                    Class.forName(c.getValue());
                } catch (ClassNotFoundException e) {
                    c.setValue(SHA256Implementation.class.getCanonicalName());
                }
            }
            configurationDao.update(c, null);
        }
    }

    log.info("Configs import complete, starting group import");
    /*
     * ##################### Import Groups
     */
    Serializer simpleSerializer = new Persister();
    {
        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());
        }
    }

    log.info("Groups import complete, starting LDAP config import");
    /*
     * ##################### Import LDAP Configs
     */
    Long defaultLdapId = configurationDao.getConfValue(CONFIG_DEFAULT_LDAP_ID, Long.class, null);
    {
        List<LdapConfig> list = readList(simpleSerializer, f, "ldapconfigs.xml", "ldapconfigs",
                LdapConfig.class, true);
        for (LdapConfig c : list) {
            if (!"local DB [internal]".equals(c.getName())) {
                c.setId(null);
                c = ldapConfigDao.update(c, null);
                if (defaultLdapId == null) {
                    defaultLdapId = c.getId();
                }
            }
        }
    }

    log.info("Ldap config import complete, starting OAuth2 server import");
    /*
     * ##################### OAuth2 servers
     */
    {
        List<OAuthServer> list = readList(simpleSerializer, f, "oauth2servers.xml", "oauth2servers",
                OAuthServer.class, true);
        for (OAuthServer s : list) {
            s.setId(null);
            auth2Dao.update(s, null);
        }
    }

    log.info("OAuth2 servers import complete, starting user import");
    /*
     * ##################### Import Users
     */
    {
        String jNameTimeZone = configurationDao.getConfValue("default.timezone", String.class, "Europe/Berlin");
        List<User> list = readUserList(f, "users.xml", "users");
        int minLoginLength = getMinLoginLength(configurationDao);
        for (User u : list) {
            if (u.getLogin() == null) {
                continue;
            }
            if (u.getType() == User.Type.contact && u.getLogin().length() < minLoginLength) {
                u.setLogin(UUID.randomUUID().toString());
            }
            //FIXME: OPENMEETINGS-750
            //Convert old Backups with OmTimeZone to new schema

            String tz = u.getTimeZoneId();
            if (tz == null) {
                u.setTimeZoneId(jNameTimeZone);
                u.setForceTimeZoneCheck(true);
            } else {
                u.setForceTimeZoneCheck(false);
            }

            Long userId = u.getId();
            u.setId(null);
            if (u.getSipUser() != null && u.getSipUser().getId() != 0) {
                u.getSipUser().setId(0);
            }
            if (LDAP_EXT_TYPE.equals(u.getExternalType()) && User.Type.external != u.getType()) {
                log.warn("Found LDAP user in 'old' format, external_type == 'LDAP':: " + u);
                u.setType(User.Type.ldap);
                u.setExternalType(null);
                if (u.getDomainId() == null) {
                    u.setDomainId(defaultLdapId); //domainId was not supported in old versions of OM
                }
            }
            if (!Strings.isEmpty(u.getExternalType())) {
                u.setType(User.Type.external);
            }
            userDao.update(u, Long.valueOf(-1));
            usersMap.put(userId, u.getId());
        }
    }

    log.info("Users import complete, starting room import");
    /*
     * ##################### Import Rooms
     */
    {
        Registry registry = new Registry();
        Strategy strategy = new RegistryStrategy(registry);
        RegistryMatcher matcher = new RegistryMatcher(); //TODO need to be removed in the later versions
        Serializer serializer = new Persister(strategy, matcher);

        matcher.bind(Long.class, LongTransform.class);
        matcher.bind(Integer.class, IntegerTransform.class);
        registry.bind(User.class, new UserConverter(userDao, usersMap));
        registry.bind(Room.Type.class, RoomTypeConverter.class);

        List<Room> list = readList(serializer, f, "rooms.xml", "rooms", Room.class);
        for (Room r : list) {
            Long roomId = r.getId();

            // We need to reset ids as openJPA reject to store them otherwise
            r.setId(null);
            if (r.getModerators() != null) {
                for (Iterator<RoomModerator> i = r.getModerators().iterator(); i.hasNext();) {
                    RoomModerator rm = i.next();
                    if (rm.getUser().getId() == null) {
                        i.remove();
                    }
                }
            }
            r = roomDao.update(r, null);
            roomsMap.put(roomId, r.getId());
        }
    }

    log.info("Room import complete, starting room groups import");
    /*
     * ##################### Import Room Groups
     */
    {
        Registry registry = new Registry();
        Strategy strategy = new RegistryStrategy(registry);
        Serializer serializer = new Persister(strategy);

        registry.bind(Group.class, new GroupConverter(groupDao, groupMap));
        registry.bind(Room.class, new RoomConverter(roomDao, roomsMap));

        List<RoomGroup> list = readList(serializer, f, "rooms_organisation.xml", "room_organisations",
                RoomGroup.class);
        for (RoomGroup ro : list) {
            if (!ro.isDeleted() && ro.getRoom() != null && ro.getRoom().getId() != null && ro.getGroup() != null
                    && ro.getGroup().getId() != null) {
                // We need to reset this as openJPA reject to store them otherwise
                ro.setId(null);
                roomGroupDao.update(ro, null);
            }
        }
    }

    log.info("Room groups import complete, starting chat messages import");
    /*
     * ##################### Import Chat messages
     */
    {
        Registry registry = new Registry();
        Strategy strategy = new RegistryStrategy(registry);
        Serializer serializer = new Persister(strategy);

        registry.bind(User.class, new UserConverter(userDao, usersMap));
        registry.bind(Room.class, new RoomConverter(roomDao, roomsMap));
        registry.bind(Date.class, DateConverter.class);

        List<ChatMessage> list = readList(serializer, f, "chat_messages.xml", "chat_messages",
                ChatMessage.class, true);
        for (ChatMessage m : list) {
            m.setId(null);
            if (m.getFromUser() == null || m.getFromUser().getId() == null) {
                continue;
            }
            chatDao.update(m);
        }
    }

    log.info("Chat messages import complete, starting appointement import");
    /*
     * ##################### Import Appointements
     */
    {
        Registry registry = new Registry();
        Strategy strategy = new RegistryStrategy(registry);
        Serializer serializer = new Persister(strategy);

        registry.bind(User.class, new UserConverter(userDao, usersMap));
        registry.bind(Appointment.Reminder.class, AppointmentReminderTypeConverter.class);
        registry.bind(Room.class, new RoomConverter(roomDao, roomsMap));
        registry.bind(Date.class, DateConverter.class);

        List<Appointment> list = readList(serializer, f, "appointements.xml", "appointments",
                Appointment.class);
        for (Appointment a : list) {
            Long appId = a.getId();

            // We need to reset this as openJPA reject to store them otherwise
            a.setId(null);
            if (a.getOwner() != null && a.getOwner().getId() == null) {
                a.setOwner(null);
            }
            if (a.getRoom() == null || a.getRoom().getId() == null) {
                log.warn("Appointment without room was found, skipping: {}", a);
                continue;
            }
            if (a.getStart() == null || a.getEnd() == null) {
                log.warn("Appointment without start/end time was found, skipping: {}", a);
                continue;
            }
            a = appointmentDao.update(a, null, false);
            appointmentsMap.put(appId, a.getId());
        }
    }

    log.info("Appointement import complete, starting meeting members import");
    /*
     * ##################### Import MeetingMembers
     * 
     * Reminder Invitations will be NOT send!
     */
    {
        List<MeetingMember> list = readMeetingMemberList(f, "meetingmembers.xml", "meetingmembers");
        for (MeetingMember ma : list) {
            ma.setId(null);
            meetingMemberDao.update(ma);
        }
    }

    log.info("Meeting members import complete, starting cluster server import");
    /*
     * ##################### Cluster servers
     */
    {
        List<Server> list = readList(simpleSerializer, f, "servers.xml", "servers", Server.class, true);
        for (Server s : list) {
            s.setId(null);
            serverDao.update(s, null);
        }
    }

    log.info("Cluster servers import complete, starting recordings import");
    /*
     * ##################### Import Recordings
     */
    {
        List<Recording> list = readRecordingList(f, "flvRecordings.xml", "flvrecordings");
        for (Recording fr : list) {
            fr.setId(null);
            if (fr.getRoomId() != null) {
                fr.setRoomId(roomsMap.get(fr.getRoomId()));
            }
            if (fr.getOwnerId() != null) {
                fr.setOwnerId(usersMap.get(fr.getOwnerId()));
            }
            if (fr.getMetaData() != null) {
                for (RecordingMetaData meta : fr.getMetaData()) {
                    meta.setId(null);
                    meta.setRecording(fr);
                }
            }
            recordingDao.update(fr);
        }
    }

    log.info("Recording import complete, starting private message folder import");
    /*
     * ##################### Import Private Message Folders
     */
    {
        List<PrivateMessageFolder> list = readList(simpleSerializer, f, "privateMessageFolder.xml",
                "privatemessagefolders", PrivateMessageFolder.class, true);
        for (PrivateMessageFolder p : list) {
            Long folderId = p.getId();
            PrivateMessageFolder storedFolder = privateMessageFolderDao.get(folderId);
            if (storedFolder == null) {
                p.setId(null);
                Long newFolderId = privateMessageFolderDao.addPrivateMessageFolderObj(p);
                messageFoldersMap.put(folderId, newFolderId);
            }
        }
    }

    log.info("Private message folder import complete, starting user contacts import");
    /*
     * ##################### Import User Contacts
     */
    {
        Registry registry = new Registry();
        Strategy strategy = new RegistryStrategy(registry);
        Serializer serializer = new Persister(strategy);

        registry.bind(User.class, new UserConverter(userDao, usersMap));

        List<UserContact> list = readList(serializer, f, "userContacts.xml", "usercontacts", UserContact.class,
                true);
        for (UserContact uc : list) {
            Long ucId = uc.getId();
            UserContact storedUC = userContactDao.get(ucId);

            if (storedUC == null && uc.getContact() != null && uc.getContact().getId() != null) {
                uc.setId(null);
                if (uc.getOwner() != null && uc.getOwner().getId() == null) {
                    uc.setOwner(null);
                }
                uc = userContactDao.update(uc);
                userContactsMap.put(ucId, uc.getId());
            }
        }
    }

    log.info("Usercontact import complete, starting private messages item import");
    /*
     * ##################### Import Private Messages
     */
    {
        Registry registry = new Registry();
        Strategy strategy = new RegistryStrategy(registry);
        Serializer serializer = new Persister(strategy);

        registry.bind(User.class, new UserConverter(userDao, usersMap));
        registry.bind(Room.class, new RoomConverter(roomDao, roomsMap));
        registry.bind(Date.class, DateConverter.class);

        List<PrivateMessage> list = readList(serializer, f, "privateMessages.xml", "privatemessages",
                PrivateMessage.class, true);
        boolean oldBackup = true;
        for (PrivateMessage p : list) {
            if (p.getFolderId() == null || p.getFolderId().longValue() < 0) {
                oldBackup = false;
                break;
            }

        }
        for (PrivateMessage p : list) {
            p.setId(null);
            p.setFolderId(getNewId(p.getFolderId(), Maps.MESSAGEFOLDERS));
            p.setUserContactId(getNewId(p.getUserContactId(), Maps.USERCONTACTS));
            if (p.getRoom() != null && p.getRoom().getId() == null) {
                p.setRoom(null);
            }
            if (p.getTo() != null && p.getTo().getId() == null) {
                p.setTo(null);
            }
            if (p.getFrom() != null && p.getFrom().getId() == null) {
                p.setFrom(null);
            }
            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);
        }
    }

    log.info("Private message import complete, starting file explorer item import");
    /*
     * ##################### Import File-Explorer Items
     */
    {
        List<FileExplorerItem> list = readFileExplorerItemList(f, "fileExplorerItems.xml", "fileExplorerItems");
        for (FileExplorerItem file : list) {
            // We need to reset this as openJPA reject to store them otherwise
            file.setId(null);
            Long roomId = file.getRoomId();
            file.setRoomId(roomsMap.containsKey(roomId) ? roomsMap.get(roomId) : null);
            if (file.getOwnerId() != null) {
                file.setOwnerId(usersMap.get(file.getOwnerId()));
            }
            if (file.getParentId() != null && file.getParentId().longValue() <= 0L) {
                file.setParentId(null);
            }
            fileExplorerItemDao.update(file);
        }
    }

    log.info("File explorer item import complete, starting room poll import");
    /*
     * ##################### Import Room Polls
     */
    {
        Registry registry = new Registry();
        Strategy strategy = new RegistryStrategy(registry);
        RegistryMatcher matcher = new RegistryMatcher(); //TODO need to be removed in the later versions
        Serializer serializer = new Persister(strategy, matcher);

        matcher.bind(Integer.class, IntegerTransform.class);
        registry.bind(User.class, new UserConverter(userDao, usersMap));
        registry.bind(Room.class, new RoomConverter(roomDao, roomsMap));
        registry.bind(RoomPoll.Type.class, PollTypeConverter.class);
        registry.bind(Date.class, DateConverter.class);

        List<RoomPoll> list = readList(serializer, f, "roompolls.xml", "roompolls", RoomPoll.class, true);
        for (RoomPoll rp : list) {
            rp.setId(null);
            if (rp.getRoom() == null || rp.getRoom().getId() == null) {
                //room was deleted
                continue;
            }
            if (rp.getCreator() == null || rp.getCreator().getId() == null) {
                rp.setCreator(null);
            }
            for (RoomPollAnswer rpa : rp.getAnswers()) {
                if (rpa.getVotedUser() == null || rpa.getVotedUser().getId() == null) {
                    rpa.setVotedUser(null);
                }
            }
            pollDao.update(rp);
        }
    }

    log.info("Poll import complete, starting copy of files and folders");
    /*
     * ##################### Import real files and folders
     */
    importFolders(f);

    log.info("File explorer item import complete, clearing temp files");

    FileHelper.removeRec(f);
}

From source file:org.apache.openmeetings.cli.Admin.java

private void process(String[] args) {
    String ctxName = System.getProperty("context", "openmeetings");
    OpenmeetingsVariables.wicketApplicationName = ctxName;
    File home = new File(System.getenv("RED5_HOME"));
    OmFileHelper.setOmHome(new File(new File(home, "webapps"), ctxName));

    CommandLineParser parser = new DefaultParser();
    try {/*from w  ww . ja v a2s.c  om*/
        cmdl = parser.parse(opts, args);
    } catch (ParseException e) {
        System.out.println(e.getMessage());
        usage();
        System.exit(1);
    }
    verbose = cmdl.hasOption('v');

    Command cmd = Command.usage;
    if (cmdl.hasOption('i')) {
        cmd = Command.install;
    } else if (cmdl.hasOption('b')) {
        cmd = Command.backup;
    } else if (cmdl.hasOption('r')) {
        cmd = Command.restore;
    } else if (cmdl.hasOption('f')) {
        cmd = Command.files;
    } else if (cmdl.hasOption('l')) {
        cmd = Command.ldap;
    }

    String file = cmdl.getOptionValue("file", "");
    switch (cmd) {
    case install:
        try {
            if (cmdl.hasOption("file")
                    && (cmdl.hasOption("user") || cmdl.hasOption("email") || cmdl.hasOption("group"))) {
                System.out.println("Please specify even 'file' option or 'admin user'.");
                System.exit(1);
            }
            boolean force = cmdl.hasOption("force");
            if (cmdl.hasOption("skip-default-rooms")) {
                cfg.createDefaultRooms = "0";
            }
            if (cmdl.hasOption("disable-frontend-register")) {
                cfg.allowFrontendRegister = "0";
            }
            if (cmdl.hasOption("system-email-address")) {
                cfg.mailReferer = cmdl.getOptionValue("system-email-address");
            }
            if (cmdl.hasOption("smtp-server")) {
                cfg.smtpServer = cmdl.getOptionValue("smtp-server");
            }
            if (cmdl.hasOption("smtp-port")) {
                cfg.smtpPort = Integer.valueOf(cmdl.getOptionValue("smtp-port"));
            }
            if (cmdl.hasOption("email-auth-user")) {
                cfg.mailAuthName = cmdl.getOptionValue("email-auth-user");
            }
            if (cmdl.hasOption("email-auth-pass")) {
                cfg.mailAuthPass = cmdl.getOptionValue("email-auth-pass");
            }
            if (cmdl.hasOption("email-use-tls")) {
                cfg.mailUseTls = "1";
            }
            if (cmdl.hasOption("default-language")) {
                cfg.defaultLangId = cmdl.getOptionValue("default-language");
            }
            ConnectionProperties connectionProperties = new ConnectionProperties();
            File conf = OmFileHelper.getPersistence();
            if (!conf.exists() || cmdl.hasOption("db-type") || cmdl.hasOption("db-host")
                    || cmdl.hasOption("db-port") || cmdl.hasOption("db-name") || cmdl.hasOption("db-user")
                    || cmdl.hasOption("db-pass")) {
                String dbType = cmdl.getOptionValue("db-type", "derby");
                connectionProperties = ConnectionPropertiesPatcher.patch(dbType,
                        cmdl.getOptionValue("db-host", "localhost"), cmdl.getOptionValue("db-port", null),
                        cmdl.getOptionValue("db-name", null), cmdl.getOptionValue("db-user", null),
                        cmdl.getOptionValue("db-pass", null));
            } else {
                //get properties from existent persistence.xml
                connectionProperties = ConnectionPropertiesPatcher.getConnectionProperties(conf);
            }
            if (cmdl.hasOption("file")) {
                File backup = checkRestoreFile(file);
                dropDB(connectionProperties);

                ImportInitvalues importInit = getApplicationContext().getBean(ImportInitvalues.class);
                importInit.loadSystem(cfg, force);
                restoreOm(backup);
            } else {
                checkAdminDetails();
                dropDB(connectionProperties);

                ImportInitvalues importInit = getApplicationContext().getBean(ImportInitvalues.class);
                importInit.loadAll(cfg, force);
            }

            InstallationDocumentHandler.createDocument(3);
        } catch (Exception e) {
            handleError("Install failed", e);
        }
        break;
    case backup:
        try {
            File f;
            if (!cmdl.hasOption("file")) {
                file = "backup_" + CalendarPatterns.getTimeForStreamId(new Date()) + ".zip";
                f = new File(home, file);
                System.out.println("File name was not specified, '" + file + "' will be used");
            } else {
                f = new File(file);
            }
            boolean includeFiles = !cmdl.hasOption("exclude-files");
            File backup_dir = new File(OmFileHelper.getUploadTempDir(), "" + System.currentTimeMillis());
            backup_dir.mkdirs();

            BackupExport export = getApplicationContext().getBean(BackupExport.class);
            export.performExport(f, backup_dir, includeFiles, new ProgressHolder());
            FileHelper.removeRec(backup_dir);
            backup_dir.delete();
        } catch (Exception e) {
            handleError("Backup failed", e);
        }
        break;
    case restore:
        try {
            restoreOm(checkRestoreFile(file));
        } catch (Exception e) {
            handleError("Restore failed", e);
        }
        break;
    case files:
        try {
            boolean cleanup = cmdl.hasOption("cleanup");
            if (cleanup) {
                System.out.println("WARNING: all intermadiate files will be clean up!");
            }
            StringBuilder report = new StringBuilder();
            CleanupUnit temp = CleanupHelper.getTempUnit();
            if (cleanup) {
                temp.cleanup();
            }
            report.append("Temporary files allocates: ").append(temp.getHumanTotal()).append("\n");
            { //UPLOAD
                long sectionSize = OmFileHelper.getSize(OmFileHelper.getUploadDir());
                report.append("Upload totally allocates: ").append(OmFileHelper.getHumanSize(sectionSize))
                        .append("\n");
                //Profiles
                WebApplicationContext ctx = getApplicationContext();
                UserDao udao = ctx.getBean(UserDao.class);
                CleanupEntityUnit profile = CleanupHelper.getProfileUnit(udao);
                long restSize = sectionSize - profile.getSizeTotal();
                report.append("\t\tprofiles: ").append(profile.getHumanTotal()).append("\n");
                report.append("\t\t\tinvalid: ").append(profile.getHumanInvalid()).append("\n");
                report.append("\t\t\tdeleted: ").append(profile.getHumanDeleted()).append("\n");
                report.append("\t\t\tmissing count: ").append(profile.getMissing()).append("\n");
                if (cleanup) {
                    profile.cleanup();
                }
                CleanupUnit imp = CleanupHelper.getImportUnit();
                restSize -= imp.getSizeTotal();
                report.append("\t\timport: ").append(OmFileHelper.getHumanSize(imp.getSizeTotal()))
                        .append("\n");
                if (cleanup) {
                    imp.cleanup();
                }
                CleanupUnit back = CleanupHelper.getBackupUnit();
                restSize -= back.getSizeTotal();
                report.append("\t\tbackup: ").append(OmFileHelper.getHumanSize(back.getSizeTotal()))
                        .append("\n");
                if (cleanup) {
                    back.cleanup();
                }
                //Files
                FileExplorerItemDao fileDao = ctx.getBean(FileExplorerItemDao.class);
                CleanupEntityUnit files = CleanupHelper.getFileUnit(fileDao);
                restSize -= files.getSizeTotal();
                report.append("\t\tfiles: ").append(files.getHumanTotal()).append("\n");
                report.append("\t\t\tinvalid: ").append(files.getHumanInvalid()).append("\n");
                report.append("\t\t\tdeleted: ").append(files.getHumanDeleted()).append("\n");
                report.append("\t\t\tmissing count: ").append(files.getMissing()).append("\n");
                report.append("\t\trest: ").append(OmFileHelper.getHumanSize(restSize)).append("\n");
                if (cleanup) {
                    files.cleanup();
                }
            }
            { //STREAMS
                RecordingDao recordDao = getApplicationContext().getBean(RecordingDao.class);
                CleanupEntityUnit rec = CleanupHelper.getRecUnit(recordDao);
                File hibernateDir = OmFileHelper.getStreamsHibernateDir();
                report.append("Recordings allocates: ").append(rec.getHumanTotal()).append("\n");
                long size = OmFileHelper.getSize(hibernateDir);
                long restSize = rec.getSizeTotal() - size;
                report.append("\t\tfinal: ").append(OmFileHelper.getHumanSize(size)).append("\n");
                report.append("\t\t\tinvalid: ").append(rec.getHumanInvalid()).append("\n");
                report.append("\t\t\tdeleted: ").append(rec.getHumanDeleted()).append("\n");
                report.append("\t\t\tmissing count: ").append(rec.getMissing()).append("\n");
                report.append("\t\trest: ").append(OmFileHelper.getHumanSize(restSize)).append("\n");
                if (cleanup) {
                    rec.cleanup();
                }
            }
            System.out.println(report);
        } catch (Exception e) {
            handleError("Files failed", e);
        }
        break;
    case ldap:
        if (!cmdl.hasOption("d")) {
            System.out.println("Please specify LDAP domain Id.");
            System.exit(1);
        }
        Long domainId = Long.valueOf(cmdl.getOptionValue('d'));
        try {
            getApplicationContext().getBean(LdapLoginManagement.class).importUsers(domainId,
                    cmdl.hasOption("print-only"));
        } catch (Exception e) {
            handleError("LDAP import failed", e);
        }
        break;
    case usage:
    default:
        usage();
        break;
    }

    System.out.println("... Done");
    System.exit(0);
}

From source file:org.apache.openmeetings.cli.CleanupEntityUnit.java

@Override
public void cleanup() throws IOException {
    for (File i : invalid) {
        FileHelper.removeRec(i);
    }/*from w w w  .  ja  v a  2  s  . com*/
    for (File i : deleted) {
        FileHelper.removeRec(i);
    }
}

From source file:org.apache.openmeetings.cli.CleanupHelper.java

public static CleanupEntityUnit getRecUnit(final RecordingDao recordDao) {
    File parent = OmFileHelper.getStreamsDir();
    List<File> invalid = new ArrayList<>();
    List<File> deleted = new ArrayList<>();
    int missing = 0;
    for (File f : list(hibernateDir, new FilenameFilter() {
        @Override//www.j a  v  a  2 s.  c  o m
        public boolean accept(File dir, String name) {
            return name.startsWith(recordingFileName) && name.endsWith(FLV_EXTENSION);
        }
    })) {
        if (!f.isFile()) {
            log.warn("Recording found is not a file: " + f);
            continue;
        }
        Long id = Long.valueOf(f.getName().substring(recordingFileName.length(),
                f.getName().length() - FLV_EXTENSION.length()));
        Recording item = recordDao.get(id);
        if (item == null) {
            add(invalid, id);
        } else if (item.isDeleted()) {
            add(deleted, id);
        }
    }
    for (Recording item : recordDao.get()) {
        if (!item.isDeleted() && item.getHash() != null && list(item.getId()).length == 0) {
            missing++;
        }
    }
    return new CleanupEntityUnit(parent, invalid, deleted, missing) {
        private static final long serialVersionUID = 1L;

        @Override
        public void cleanup() throws IOException {
            String hiberPath = hibernateDir.getCanonicalPath();
            for (File f : list(getParent(), null)) {
                if (!f.getCanonicalPath().equals(hiberPath)) {
                    FileHelper.removeRec(f);
                }
            }
            super.cleanup();
        }
    };
}

From source file:org.apache.openmeetings.cli.CleanupUnit.java

public void cleanup() throws IOException {
    for (File f : getParent().listFiles()) {
        FileHelper.removeRec(f);
    }
}

From source file:org.apache.openmeetings.converter.GenerateImage.java

public ConverterProcessResultList convertImageUserProfile(File file, Long users_id, boolean skipConvertion)
        throws Exception {
    ConverterProcessResultList returnMap = new ConverterProcessResultList();

    // User Profile Update
    for (File f : getUploadProfilesUserDir(users_id).listFiles(new FileFilter() {
        public boolean accept(File pathname) {
            return pathname.getName().endsWith(JPG_EXTENTION);
        }//from  w w  w . j a  v a 2 s  .c om
    })) {
        FileHelper.removeRec(f);
    }

    File destinationFile = OmFileHelper.getNewFile(getUploadProfilesUserDir(users_id), profileFileName,
            JPG_EXTENTION);
    if (!skipConvertion) {
        returnMap.addItem("processJPG", convertSingleJpg(file.getCanonicalPath(), destinationFile));
    } else {
        FileHelper.copy(file, destinationFile);
    }
    returnMap.addItem("processThumb1", generateThumbs.generateThumb(chatImagePrefix, destinationFile, 40));
    returnMap.addItem("processThumb2", generateThumbs.generateThumb(profileImagePrefix, destinationFile, 126));
    returnMap.addItem("processThumb3", generateThumbs.generateThumb(bigImagePrefix, destinationFile, 240));

    if (!skipConvertion) {
        // Delete old one
        file.delete();
    }

    String pictureuri = destinationFile.getName();
    User us = usersDao.get(users_id);
    us.setUpdatetime(new java.util.Date());
    us.setPictureuri(pictureuri);
    usersDao.update(us, users_id);

    //FIXME: After uploading a new picture all other clients should refresh
    //scopeApplicationAdapter.updateUserSessionObject(users_id, pictureuri);

    return returnMap;
}

From source file:org.apache.openmeetings.core.converter.GenerateImage.java

public ConverterProcessResultList convertImageUserProfile(File file, Long userId, boolean skipConvertion)
        throws Exception {
    ConverterProcessResultList returnMap = new ConverterProcessResultList();

    // User Profile Update
    File[] files = getUploadProfilesUserDir(userId).listFiles(new FileFilter() {
        @Override/*from  w w  w.  ja  v a2s.  com*/
        public boolean accept(File pathname) {
            return pathname.getName().endsWith(JPG_EXTENSION);
        }
    });
    if (files != null) {
        for (File f : files) {
            FileHelper.removeRec(f);
        }
    }

    File destinationFile = OmFileHelper.getNewFile(getUploadProfilesUserDir(userId), profileFileName,
            JPG_EXTENSION);
    if (!skipConvertion) {
        returnMap.addItem("processJPG", convertSingleJpg(file.getCanonicalPath(), destinationFile));
    } else {
        FileHelper.copy(file, destinationFile);
    }
    returnMap.addItem("processThumb1", generateThumbs.generateThumb(chatImagePrefix, destinationFile, 40));
    returnMap.addItem("processThumb2", generateThumbs.generateThumb(profileImagePrefix, destinationFile, 126));
    returnMap.addItem("processThumb3", generateThumbs.generateThumb(bigImagePrefix, destinationFile, 240));

    if (!skipConvertion) {
        // Delete old one
        file.delete();
    }

    String pictureuri = destinationFile.getName();
    User us = userDao.get(userId);
    us.setUpdated(new java.util.Date());
    us.setPictureuri(pictureuri);
    userDao.update(us, userId);

    //FIXME: After uploading a new picture all other clients should refresh
    //scopeApplicationAdapter.updateUserSessionObject(userId, pictureuri);

    return returnMap;
}

From source file:org.apache.openmeetings.data.flvrecord.converter.FlvInterviewConverter.java

public void stripAudioFromFLVs(FlvRecording flvRecording, boolean reconversion) {
    List<ConverterProcessResult> returnLog = new ArrayList<ConverterProcessResult>();
    List<String> listOfFullWaveFiles = new LinkedList<String>();
    File streamFolder = getStreamFolder(flvRecording);
    List<FlvRecordingMetaData> metaDataList = flvRecordingMetaDataDaoImpl
            .getFlvRecordingMetaDataAudioFlvsByRecording(flvRecording.getFlvRecordingId());

    stripAudioFirstPass(flvRecording, returnLog, listOfFullWaveFiles, streamFolder, metaDataList);
    try {/*w ww.  j  a  v a 2  s.c  om*/
        // Merge Wave to Full Length
        File streamFolderGeneral = getStreamFolder();

        String hashFileFullName = "INTERVIEW_" + flvRecording.getFlvRecordingId() + "_FINAL_WAVE.wav";
        String outputFullWav = streamFolder.getAbsolutePath() + File.separatorChar + hashFileFullName;
        deleteFileIfExists(outputFullWav);

        if (listOfFullWaveFiles.size() == 1) {

            outputFullWav = listOfFullWaveFiles.get(0);

        } else if (listOfFullWaveFiles.size() > 0) {
            String[] argv_full_sox;
            if (reconversion) {
                argv_full_sox = mergeAudioToWaves(listOfFullWaveFiles, outputFullWav, metaDataList);
            } else {
                argv_full_sox = mergeAudioToWaves(listOfFullWaveFiles, outputFullWav);
            }

            log.debug("START mergeAudioToWaves ################# ");
            log.debug(argv_full_sox.toString());
            String iString = "";
            for (int i = 0; i < argv_full_sox.length; i++) {
                iString += argv_full_sox[i] + " ";
            }
            log.debug(iString);
            log.debug("END mergeAudioToWaves ################# ");

            returnLog.add(ProcessHelper.executeScript("mergeWave", argv_full_sox));
        } else {

            // create default Audio to merge it.
            // strip to content length
            File outputWav = new File(streamFolderGeneral, "one_second.wav");

            // Calculate delta at beginning
            Long deltaTimeMilliSeconds = flvRecording.getRecordEnd().getTime()
                    - flvRecording.getRecordStart().getTime();
            Float deltaPadding = (Float.parseFloat(deltaTimeMilliSeconds.toString()) / 1000) - 1;

            String[] argv_full_sox = new String[] { this.getPathToSoX(), outputWav.getCanonicalPath(),
                    outputFullWav, "pad", "0", deltaPadding.toString() };

            log.debug("START generateSampleAudio ################# ");
            String tString = "";
            for (int i = 0; i < argv_full_sox.length; i++) {
                tString += argv_full_sox[i] + " ";
            }
            log.debug(tString);
            log.debug("END generateSampleAudio ################# ");

            returnLog.add(ProcessHelper.executeScript("mergeWave", argv_full_sox));

        }

        // Merge Audio with Video / Calculate resulting FLV

        // Start extracting image sequence
        int frameRate = 25;

        for (FlvRecordingMetaData flvRecordingMetaData : metaDataList) {

            // FLV to 24 FPS Sequence AVI
            String inputFlv = new File(streamFolder, flvRecordingMetaData.getStreamName() + ".flv")
                    .getCanonicalPath();

            File inputFlvFile = new File(inputFlv);

            if (inputFlvFile.exists()) {
                // TO Image Sequence

                // Image Folder
                File imageSequenceFolder = new File(streamFolder,
                        "" + flvRecordingMetaData.getFlvRecordingMetaDataId());
                imageSequenceFolder.mkdir();

                String outputImages = new File(imageSequenceFolder, "image%d.png").getCanonicalPath();

                String[] argv_imageSeq = new String[] { this.getPathToFFMPEG(), "-i", inputFlv, "-r",
                        "" + frameRate, "-s", "320x240", outputImages };

                log.debug("START generateImageSequence ################# ");
                String iString = "";
                for (int i = 0; i < argv_imageSeq.length; i++) {
                    iString += argv_imageSeq[i] + " ";
                }
                log.debug(iString);
                log.debug("END generateImageSequence ################# ");

                returnLog.add(ProcessHelper.executeScript("generateImageSequence", argv_imageSeq));

            }

        }

        // Default Image for empty interview video pods
        File defaultInterviewImageFile = new File(streamFolderGeneral, "default_interview_image.png");

        if (!defaultInterviewImageFile.exists()) {
            throw new Exception("defaultInterviewImageFile does not exist!");
        }
        String defaultInterviewImage = defaultInterviewImageFile.getCanonicalPath();

        // Create Folder for the output Image Sequence
        String outputImageMergedData = streamFolder.getAbsolutePath() + File.separatorChar + "INTERVIEW_"
                + flvRecording.getFlvRecordingId() + File.separatorChar;

        // Merged Image Folder
        File outputImageMergedDateFolder = new File(outputImageMergedData);
        outputImageMergedDateFolder.mkdir();

        // Generate the Single Image by sequencing
        boolean jobRunning = true;
        long currentTimeInMilliSeconds = 0;

        long completeLengthInSeconds = flvRecording.getRecordEnd().getTime()
                - flvRecording.getRecordStart().getTime();

        log.debug("completeLengthInSeconds :: " + completeLengthInSeconds);

        int sequenceCounter = 0;

        while (jobRunning) {

            // Process one Second of Movie
            String[] interviewPod1Images = new String[frameRate];
            String[] interviewPod2Images = new String[frameRate];
            int[] outputFrameNumbers = new int[frameRate];

            for (FlvRecordingMetaData flvRecordingMetaData : metaDataList) {

                long deltaStartRecording = flvRecordingMetaData.getRecordStart().getTime()
                        - flvRecording.getRecordStart().getTime();

                if (flvRecording.getRecordStart().getTime() + currentTimeInMilliSeconds >= flvRecordingMetaData
                        .getRecordStart().getTime()
                        && flvRecording.getRecordStart().getTime()
                                + currentTimeInMilliSeconds <= flvRecordingMetaData.getRecordEnd().getTime()) {

                    // Calculate which images should be in here

                    // Calculate the relative starting point
                    long thisImageSequenceStartingPoint = currentTimeInMilliSeconds - deltaStartRecording;

                    // Calculate the first and following frameRate FPS
                    // Number
                    int secondToStart = Long.valueOf(thisImageSequenceStartingPoint / 1000).intValue();

                    int firstFrame = secondToStart * frameRate;

                    for (int i = 0; i < frameRate; i++) {

                        int currentImageNumber = firstFrame + i;
                        currentImageNumber -= (frameRate / 2);
                        // Remove the first half seconds and fill
                        // it up with black screens

                        // Remove the first period of Images, this is where
                        // the user has started
                        // to share his Video but does not have agreed in
                        // the Flash Security Warning Dialogue
                        Integer initialGapSeconds = flvRecordingMetaData.getInitialGapSeconds();
                        if (initialGapSeconds != null) {
                            int initialMissingImages = Double
                                    .valueOf(Math.floor((initialGapSeconds / 1000) * frameRate)).intValue();
                            currentImageNumber -= initialMissingImages;
                        }

                        String imageName = "image" + currentImageNumber + ".png";

                        File outputMetaImageFullDataFile = new File(streamFolder,
                                "" + flvRecordingMetaData.getFlvRecordingMetaDataId() + File.separatorChar
                                        + imageName);

                        String outputMetaImageFullData = !outputMetaImageFullDataFile.exists()
                                ? defaultInterviewImage
                                : outputMetaImageFullDataFile.getCanonicalPath();

                        if (flvRecordingMetaData.getInteriewPodId() == 1) {
                            interviewPod1Images[i] = outputMetaImageFullData;
                        } else if (flvRecordingMetaData.getInteriewPodId() == 2) {
                            interviewPod2Images[i] = outputMetaImageFullData;
                        }

                    }

                }

            }

            // Update Sequence Count
            for (int i = 0; i < frameRate; i++) {
                outputFrameNumbers[i] = sequenceCounter;
                sequenceCounter++;
            }

            // Now we should have found the needed Images to calculate, in
            // case not we add an empty black screen
            for (int i = 0; i < frameRate; i++) {
                String addZeros = "";

                String outputImageName = outputImageMergedData + "image" + addZeros + outputFrameNumbers[i]
                        + ".png";

                if (interviewPod1Images[i] == null) {
                    interviewPod1Images[i] = defaultInterviewImage;
                }
                if (interviewPod2Images[i] == null) {
                    interviewPod2Images[i] = defaultInterviewImage;
                }

                if (System.getProperty("os.name").toUpperCase().indexOf("WINDOWS") == -1) {
                    String[] argv_imageMagick = new String[] { this.getPathToImageMagick(), "+append",
                            interviewPod1Images[i], interviewPod2Images[i], outputImageName };
                    returnLog.add(ProcessHelper.executeScript("generateImageSequence", argv_imageMagick));
                } else {
                    returnLog.add(processImageWindows(interviewPod1Images[i], interviewPod2Images[i],
                            outputImageName));
                }
            }

            currentTimeInMilliSeconds += 1000;

            double cLength = 100 * ((double) currentTimeInMilliSeconds) / completeLengthInSeconds;

            int progress = Double.valueOf(cLength).intValue();

            log.debug("completeLengthInSeconds|currentTimeInMilliSeconds " + completeLengthInSeconds + "|"
                    + currentTimeInMilliSeconds + "|" + progress + "|" + cLength);

            flvRecordingDaoImpl.updateFlvRecordingProgress(flvRecording.getFlvRecordingId(), progress);

            if (currentTimeInMilliSeconds >= completeLengthInSeconds) {

                jobRunning = false;

            }

        }

        // Generate Movie by sequence of Images

        String imagescomplete = outputImageMergedData + "image%d.png";

        String[] argv_generatedMoview = null;

        String inputScreenFullFlv = streamFolder.getAbsolutePath() + File.separatorChar + "COMPLETE_INTERVIEW_"
                + flvRecording.getFlvRecordingId() + ".flv";
        deleteFileIfExists(inputScreenFullFlv);

        argv_generatedMoview = new String[] { this.getPathToFFMPEG(), "-i", imagescomplete, "-r",
                "" + frameRate, "-vcodec", "flv", "-qmax", "1", "-qmin", "1", inputScreenFullFlv };

        log.debug("START generateFullBySequenceFLV ################# ");
        String tString2 = "";
        for (int i = 0; i < argv_generatedMoview.length; i++) {
            tString2 += argv_generatedMoview[i] + " ";
        }
        log.debug(tString2);
        log.debug("END generateFullBySequenceFLV ################# ");

        returnLog.add(ProcessHelper.executeScript("generateFullBySequenceFLV", argv_generatedMoview));

        String hashFileFullNameFlv = "flvRecording_" + flvRecording.getFlvRecordingId() + ".flv";
        String outputFullFlv = new File(streamFolderGeneral, hashFileFullNameFlv).getCanonicalPath();
        deleteFileIfExists(outputFullFlv);

        // ffmpeg -vcodec flv -qscale 9.5 -r 25 -ar 22050 -ab 32k -s 320x240
        // -i
        // 65318fb5c54b1bc1b1bca077b493a914_28_12_2009_23_38_17_FINAL_WAVE.wav
        // -i 65318fb5c54b1bc1b1bca077b493a914_28_12_2009_23_38_17.flv
        // final1.flv

        int flvWidth = 640;
        int flvHeight = 240;

        flvRecording.setFlvWidth(flvWidth);
        flvRecording.setFlvHeight(flvHeight);

        String[] argv_fullFLV = new String[] { this.getPathToFFMPEG(), //
                "-i", inputScreenFullFlv, "-i", outputFullWav, "-ar", "22050", //
                "-ab", "32k", //
                "-s", flvWidth + "x" + flvHeight, //
                "-vcodec", "flv", //
                "-r", "" + frameRate, "-qmax", "1", "-qmin", "1", outputFullFlv };

        log.debug("START generateFullFLV ################# ");
        String tString = "";
        for (int i = 0; i < argv_fullFLV.length; i++) {
            tString += argv_fullFLV[i] + " ";
            // log.debug(" i " + i + " argv-i " + argv_fullFLV[i]);
        }
        log.debug(tString);
        log.debug("END generateFullFLV ################# ");

        returnLog.add(ProcessHelper.executeScript("generateFullFLV", argv_fullFLV));

        flvRecording.setFileHash(hashFileFullNameFlv);

        // Extract first Image for preview purpose
        // ffmpeg -i movie.flv -vcodec mjpeg -vframes 1 -an -f rawvideo -s
        // 320x240 movie.jpg

        String hashFileFullNameJPEG = "flvRecording_" + flvRecording.getFlvRecordingId() + ".jpg";
        String outPutJpeg = new File(streamFolderGeneral, hashFileFullNameJPEG).getCanonicalPath();
        deleteFileIfExists(outPutJpeg);

        flvRecording.setPreviewImage(hashFileFullNameJPEG);

        String[] argv_previewFLV = new String[] { //
                this.getPathToFFMPEG(), //
                "-i", outputFullFlv, //
                "-vcodec", "mjpeg", //
                "-vframes", "100", "-an", //
                "-f", "rawvideo", //
                "-s", flvWidth + "x" + flvHeight, //
                outPutJpeg };

        log.debug("START previewFullFLV ################# ");
        log.debug(argv_previewFLV.toString());
        String kString = "";
        for (int i = 0; i < argv_previewFLV.length; i++) {
            kString += argv_previewFLV[i] + " ";
        }
        log.debug(kString);
        log.debug("END previewFullFLV ################# ");

        returnLog.add(ProcessHelper.executeScript("generateFullFLV", argv_previewFLV));

        String alternateDownloadName = "flvRecording_" + flvRecording.getFlvRecordingId() + ".avi";
        String alternateDownloadFullName = new File(streamFolderGeneral, alternateDownloadName)
                .getCanonicalPath();
        deleteFileIfExists(alternateDownloadFullName);

        String[] argv_alternateDownload = new String[] { this.getPathToFFMPEG(), "-i", outputFullFlv,
                alternateDownloadFullName };

        log.debug("START alternateDownLoad ################# ");
        log.debug(argv_previewFLV.toString());
        String sString = "";
        for (int i = 0; i < argv_alternateDownload.length; i++) {
            sString += argv_alternateDownload[i] + " ";
        }
        log.debug(sString);
        log.debug("END alternateDownLoad ################# ");

        returnLog.add(ProcessHelper.executeScript("alternateDownload", argv_alternateDownload));

        flvRecording.setAlternateDownload(alternateDownloadName);

        flvRecordingDaoImpl.updateFlvRecording(flvRecording);

        flvRecordingLogDaoImpl.deleteFLVRecordingLogByRecordingId(flvRecording.getFlvRecordingId());

        for (ConverterProcessResult returnMap : returnLog) {
            flvRecordingLogDaoImpl.addFLVRecordingLog("generateFFMPEG", flvRecording, returnMap);
        }

        // Delete Wave Files
        for (String fileName : listOfFullWaveFiles) {
            File audio = new File(fileName);
            if (audio.exists()) {
                audio.delete();
            }
        }

        // Delete all Image temp dirs
        for (FlvRecordingMetaData flvRecordingMetaData : metaDataList) {
            FileHelper.removeRec(new File(streamFolder, "" + flvRecordingMetaData.getFlvRecordingMetaDataId()));
        }

        FileHelper.removeRec(new File(outputImageMergedData));

    } catch (Exception err) {
        log.error("[stripAudioFromFLVs]", err);
    }
}

From source file:org.apache.openmeetings.servlet.outputhandler.BackupExport.java

public void service(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse,
        ServletContext servletCtx) throws ServletException, IOException {

    String sid = httpServletRequest.getParameter("sid");
    if (sid == null) {
        sid = "default";
    }/* w  ww  .  j a  v  a  2s  . c om*/
    log.debug("sid: " + sid);

    Long users_id = sessiondataDao.checkSession(sid);
    Long user_level = userManager.getUserLevelByID(users_id);

    log.debug("users_id: " + users_id);
    log.debug("user_level: " + user_level);

    if (authLevelUtil.checkAdminLevel(user_level)) {
        // if (true) {

        String includeFileOption = httpServletRequest.getParameter("includeFileOption");
        boolean includeFiles = includeFileOption == null || "yes".equals(includeFileOption);

        String moduleName = httpServletRequest.getParameter("moduleName");
        if (moduleName == null) {
            moduleName = "moduleName";
        }
        log.debug("moduleName: " + moduleName);

        if (moduleName.equals("backup")) {

            /*
             * ##################### Create Base Folder structure
             */

            File working_dir = OmFileHelper.getUploadBackupDir();

            String dateString = "backup_" + CalendarPatterns.getTimeForStreamId(new Date());

            File backup_dir = new File(working_dir, dateString);
            String requestedFile = dateString + ".zip";
            File backupFile = new File(backup_dir, requestedFile);

            try {
                performExport(backupFile, backup_dir, includeFiles);

                httpServletResponse.reset();
                httpServletResponse.resetBuffer();
                httpServletResponse.setContentType("APPLICATION/OCTET-STREAM");
                httpServletResponse.setHeader("Content-Disposition",
                        "attachment; filename=\"" + requestedFile + "\"");
                httpServletResponse.setHeader("Content-Length", "" + backupFile.length());

                OutputStream out = httpServletResponse.getOutputStream();
                OmFileHelper.copyFile(backupFile, out);

                out.flush();
                out.close();
            } catch (Exception er) {
                log.error("Error exporting: ", er);
            }

            if (backupFile.exists()) {
                // log.debug("DELETE :1: "+backupFile.getCanonicalPath());
                backupFile.delete();
            }

            FileHelper.removeRec(backup_dir);
        }
    } else {
        log.debug("ERROR LangExport: not authorized FileDownload " + (new Date()));
    }
}

From source file:org.apache.openmeetings.servlet.outputhandler.BackupImportController.java

public void performImport(InputStream is) throws Exception {
    File working_dir = OmFileHelper.getUploadImportDir();
    if (!working_dir.exists()) {
        working_dir.mkdir();/*from w ww. java  2 s. c o m*/
    }

    File f = OmFileHelper.getNewDir(working_dir, "import_" + CalendarPatterns.getTimeForStreamId(new Date()));

    log.debug("##### WRITE FILE TO: " + f);

    ZipInputStream zipinputstream = new ZipInputStream(is);
    ZipEntry zipentry = zipinputstream.getNextEntry();
    while (zipentry != null) {
        String fName = zipentry.getName();
        if (File.pathSeparatorChar != '\\' && fName.indexOf('\\') > -1) {
            fName = fName.replace('\\', '/');
        }
        // for each entry to be extracted
        File fentry = new File(f, fName);
        File dir = fentry.isDirectory() ? fentry : fentry.getParentFile();
        dir.mkdirs();
        if (fentry.isDirectory()) {
            zipentry = zipinputstream.getNextEntry();
            continue;
        }

        FileHelper.copy(zipinputstream, fentry);
        zipinputstream.closeEntry();
        zipentry = zipinputstream.getNextEntry();

    }
    zipinputstream.close();

    /*
     * ##################### Import Organizations
     */
    Serializer simpleSerializer = new Persister();
    {
        List<Organisation> list = readList(simpleSerializer, f, "organizations.xml", "organisations",
                Organisation.class);
        for (Organisation o : list) {
            long oldId = o.getOrganisation_id();
            o.setOrganisation_id(null);
            Long newId = organisationManager.addOrganisationObj(o);
            organisationsMap.put(oldId, newId);
        }
    }

    log.info("Organizations import complete, starting user import");
    /*
     * ##################### Import Users
     */
    {
        List<User> list = readUserList(f, "users.xml", "users");
        for (User u : list) {
            OmTimeZone tz = u.getOmTimeZone();
            if (tz == null || tz.getJname() == null) {
                String jNameTimeZone = configurationDao.getConfValue("default.timezone", String.class,
                        "Europe/Berlin");
                OmTimeZone omTimeZone = omTimeZoneDaoImpl.getOmTimeZone(jNameTimeZone);
                u.setOmTimeZone(omTimeZone);
                u.setForceTimeZoneCheck(true);
            } else {
                u.setForceTimeZoneCheck(false);
            }

            u.setStarttime(new Date());
            long userId = u.getUser_id();
            u.setUser_id(null);
            if (u.getSipUser() != null && u.getSipUser().getId() != 0) {
                u.getSipUser().setId(0);
            }
            usersDao.update(u, -1L);
            usersMap.put(userId, u.getUser_id());
        }
    }

    log.info("Users import complete, starting room import");
    /*
     * ##################### Import Rooms
     */
    {
        Registry registry = new Registry();
        Strategy strategy = new RegistryStrategy(registry);
        RegistryMatcher matcher = new RegistryMatcher(); //TODO need to be removed in the later versions
        Serializer serializer = new Persister(strategy, matcher);

        matcher.bind(Long.class, LongTransform.class);
        matcher.bind(Integer.class, IntegerTransform.class);
        registry.bind(User.class, new UserConverter(usersDao, usersMap));
        registry.bind(RoomType.class, new RoomTypeConverter(roomManager));

        List<Room> list = readList(serializer, f, "rooms.xml", "rooms", Room.class);
        for (Room r : list) {
            Long roomId = r.getRooms_id();

            // We need to reset ids as openJPA reject to store them otherwise
            r.setRooms_id(null);
            if (r.getModerators() != null) {
                for (Iterator<RoomModerator> i = r.getModerators().iterator(); i.hasNext();) {
                    RoomModerator rm = i.next();
                    if (rm.getUser().getUser_id() == null) {
                        i.remove();
                    }
                }
            }
            r = roomDao.update(r, null);
            roomsMap.put(roomId, r.getRooms_id());
        }
    }

    log.info("Room import complete, starting room organizations import");
    /*
     * ##################### Import Room Organisations
     */
    {
        Registry registry = new Registry();
        Strategy strategy = new RegistryStrategy(registry);
        Serializer serializer = new Persister(strategy);

        registry.bind(Organisation.class, new OrganisationConverter(orgDao, organisationsMap));
        registry.bind(Room.class, new RoomConverter(roomDao, roomsMap));

        List<RoomOrganisation> list = readList(serializer, f, "rooms_organisation.xml", "room_organisations",
                RoomOrganisation.class);
        for (RoomOrganisation ro : list) {
            if (!ro.getDeleted()) {
                // We need to reset this as openJPA reject to store them otherwise
                ro.setRooms_organisation_id(null);
                roomManager.addRoomOrganisation(ro);
            }
        }
    }

    log.info("Room organizations import complete, starting appointement import");
    /*
     * ##################### Import Appointements
     */
    {
        Registry registry = new Registry();
        Strategy strategy = new RegistryStrategy(registry);
        Serializer serializer = new Persister(strategy);

        registry.bind(AppointmentCategory.class, new AppointmentCategoryConverter(appointmentCategoryDaoImpl));
        registry.bind(User.class, new UserConverter(usersDao, usersMap));
        registry.bind(AppointmentReminderTyps.class,
                new AppointmentReminderTypeConverter(appointmentReminderTypDaoImpl));
        registry.bind(Room.class, new RoomConverter(roomDao, roomsMap));
        registry.bind(Date.class, DateConverter.class);

        List<Appointment> list = readList(serializer, f, "appointements.xml", "appointments",
                Appointment.class);
        for (Appointment a : list) {
            Long appId = a.getAppointmentId();

            // We need to reset this as openJPA reject to store them otherwise
            a.setAppointmentId(null);
            if (a.getUserId() != null && a.getUserId().getUser_id() == null) {
                a.setUserId(null);
            }
            Long newAppId = appointmentDao.addAppointmentObj(a);
            appointmentsMap.put(appId, newAppId);
        }
    }

    log.info("Appointement import complete, starting meeting members import");
    /*
     * ##################### Import MeetingMembers
     * 
     * Reminder Invitations will be NOT send!
     */
    {
        Registry registry = new Registry();
        Strategy strategy = new RegistryStrategy(registry);
        Serializer serializer = new Persister(strategy);

        registry.bind(User.class, new UserConverter(usersDao, usersMap));
        registry.bind(Appointment.class, new AppointmentConverter(appointmentDao, appointmentsMap));

        List<MeetingMember> list = readList(serializer, f, "meetingmembers.xml", "meetingmembers",
                MeetingMember.class);
        for (MeetingMember ma : list) {
            if (ma.getUserid() != null && ma.getUserid().getUser_id() == null) {
                ma.setUserid(null);
            }
            if (!ma.getDeleted()) {
                // We need to reset this as openJPA reject to store them otherwise
                ma.setMeetingMemberId(null);
                meetingMemberDao.addMeetingMemberByObject(ma);
            }
        }
    }

    log.info("Meeting members import complete, starting ldap config import");
    /*
     * ##################### Import LDAP Configs
     */
    {
        List<LdapConfig> list = readList(simpleSerializer, f, "ldapconfigs.xml", "ldapconfigs",
                LdapConfig.class, true);
        for (LdapConfig c : list) {
            ldapConfigDao.addLdapConfigByObject(c);
        }
    }

    log.info("Ldap config import complete, starting recordings import");
    /*
     * ##################### Import Recordings
     */
    {
        Registry registry = new Registry();
        Strategy strategy = new RegistryStrategy(registry);
        RegistryMatcher matcher = new RegistryMatcher(); //TODO need to be removed in the later versions
        Serializer serializer = new Persister(strategy, matcher);

        matcher.bind(Long.class, LongTransform.class);
        matcher.bind(Integer.class, IntegerTransform.class);
        registry.bind(Date.class, DateConverter.class);

        List<FlvRecording> list = readList(serializer, f, "flvRecordings.xml", "flvrecordings",
                FlvRecording.class, true);
        for (FlvRecording fr : list) {
            fr.setFlvRecordingId(0);
            if (fr.getRoom_id() != null) {
                fr.setRoom_id(roomsMap.get(fr.getRoom_id()));
            }
            if (fr.getOwnerId() != null) {
                fr.setOwnerId(usersMap.get(fr.getOwnerId()));
            }
            if (fr.getFlvRecordingMetaData() != null) {
                for (FlvRecordingMetaData meta : fr.getFlvRecordingMetaData()) {
                    meta.setFlvRecordingMetaDataId(0);
                    meta.setFlvRecording(fr);
                }
            }
            flvRecordingDao.addFlvRecordingObj(fr);
        }
    }

    log.info("FLVrecording import complete, starting private message folder import");
    /*
     * ##################### Import Private Message Folders
     */
    {
        List<PrivateMessageFolder> list = readList(simpleSerializer, f, "privateMessageFolder.xml",
                "privatemessagefolders", PrivateMessageFolder.class, true);
        for (PrivateMessageFolder p : list) {
            Long folderId = p.getPrivateMessageFolderId();
            PrivateMessageFolder storedFolder = privateMessageFolderDao.getPrivateMessageFolderById(folderId);
            if (storedFolder == null) {
                p.setPrivateMessageFolderId(0);
                Long newFolderId = privateMessageFolderDao.addPrivateMessageFolderObj(p);
                messageFoldersMap.put(folderId, newFolderId);
            }
        }
    }

    log.info("Private message folder import complete, starting user contacts import");
    /*
     * ##################### Import User Contacts
     */
    {
        Registry registry = new Registry();
        Strategy strategy = new RegistryStrategy(registry);
        Serializer serializer = new Persister(strategy);

        registry.bind(User.class, new UserConverter(usersDao, usersMap));

        List<UserContact> list = readList(serializer, f, "userContacts.xml", "usercontacts", UserContact.class,
                true);
        for (UserContact uc : list) {
            Long ucId = uc.getUserContactId();
            UserContact storedUC = userContactsDao.getUserContacts(ucId);

            if (storedUC == null && uc.getContact() != null && uc.getContact().getUser_id() != null) {
                uc.setUserContactId(0);
                Long newId = userContactsDao.addUserContactObj(uc);
                userContactsMap.put(ucId, newId);
            }
        }
    }

    log.info("Usercontact import complete, starting private messages item import");
    /*
     * ##################### Import Private Messages
     */
    {
        Registry registry = new Registry();
        Strategy strategy = new RegistryStrategy(registry);
        Serializer serializer = new Persister(strategy);

        registry.bind(User.class, new UserConverter(usersDao, usersMap));
        registry.bind(Room.class, new RoomConverter(roomDao, roomsMap));
        registry.bind(Date.class, DateConverter.class);

        List<PrivateMessage> list = readList(serializer, f, "privateMessages.xml", "privatemessages",
                PrivateMessage.class, true);
        for (PrivateMessage p : list) {
            p.setPrivateMessageId(0);
            p.setPrivateMessageFolderId(getNewId(p.getPrivateMessageFolderId(), Maps.MESSAGEFOLDERS));
            p.setUserContactId(getNewId(p.getUserContactId(), Maps.USERCONTACTS));
            if (p.getRoom() != null && p.getRoom().getRooms_id() == null) {
                p.setRoom(null);
            }
            if (p.getTo() != null && p.getTo().getUser_id() == null) {
                p.setTo(null);
            }
            if (p.getFrom() != null && p.getFrom().getUser_id() == null) {
                p.setFrom(null);
            }
            if (p.getOwner() != null && p.getOwner().getUser_id() == null) {
                p.setOwner(null);
            }
            privateMessagesDao.addPrivateMessageObj(p);
        }
    }

    log.info("Private message import complete, starting file explorer item import");
    /*
     * ##################### Import File-Explorer Items
     */
    {
        Registry registry = new Registry();
        Strategy strategy = new RegistryStrategy(registry);
        RegistryMatcher matcher = new RegistryMatcher(); //TODO need to be removed in the later versions
        Serializer serializer = new Persister(strategy, matcher);

        matcher.bind(Long.class, LongTransform.class);
        matcher.bind(Integer.class, IntegerTransform.class);
        registry.bind(Date.class, DateConverter.class);

        List<FileExplorerItem> list = readList(serializer, f, "fileExplorerItems.xml", "fileExplorerItems",
                FileExplorerItem.class, true);
        for (FileExplorerItem file : list) {
            // We need to reset this as openJPA reject to store them otherwise
            file.setFileExplorerItemId(0);
            Long roomId = file.getRoom_id();
            file.setRoom_id(roomsMap.containsKey(roomId) ? roomsMap.get(roomId) : null);
            fileExplorerItemDao.addFileExplorerItem(file);
        }
    }

    log.info("File explorer item import complete, starting file poll import");
    /*
     * ##################### Import Room Polls
     */
    {
        Registry registry = new Registry();
        Strategy strategy = new RegistryStrategy(registry);
        Serializer serializer = new Persister(strategy);

        registry.bind(User.class, new UserConverter(usersDao, usersMap));
        registry.bind(Room.class, new RoomConverter(roomDao, roomsMap));
        registry.bind(PollType.class, new PollTypeConverter(pollManager));
        registry.bind(Date.class, DateConverter.class);

        List<RoomPoll> list = readList(serializer, f, "roompolls.xml", "roompolls", RoomPoll.class, true);
        for (RoomPoll rp : list) {
            pollManager.savePollBackup(rp);
        }
    }

    log.info("Poll import complete, starting configs import");
    /*
     * ##################### Import Configs
     */
    {
        Registry registry = new Registry();
        Strategy strategy = new RegistryStrategy(registry);
        RegistryMatcher matcher = new RegistryMatcher(); //TODO need to be removed in the later versions
        Serializer serializer = new Persister(strategy, matcher);

        matcher.bind(Long.class, LongTransform.class);
        registry.bind(Date.class, DateConverter.class);
        registry.bind(User.class, new UserConverter(usersDao, usersMap));

        List<Configuration> list = readList(serializer, f, "configs.xml", "configs", Configuration.class, true);
        for (Configuration c : list) {
            Configuration cfg = configurationDao.get(c.getConf_key());
            c.setConfiguration_id(cfg == null ? null : cfg.getConfiguration_id());
            if (c.getUser() != null && c.getUser().getUser_id() == null) {
                c.setUser(null);
            }
            if ("crypt_ClassName".equals(c.getConf_key())) {
                try {
                    Class.forName(c.getConf_value());
                } catch (ClassNotFoundException e) {
                    c.setConf_value(MD5Implementation.class.getCanonicalName());
                }
            }
            configurationDao.update(c, -1L);
        }
    }

    log.info("Configs import complete, starting copy of files and folders");
    /*
     * ##################### Import real files and folders
     */
    importFolders(f);

    log.info("File explorer item import complete, clearing temp files");

    FileHelper.removeRec(f);
}