com.bhbsoft.videoconference.record.convert.util.FlvFileHelper.java Source code

Java tutorial

Introduction

Here is the source code for com.bhbsoft.videoconference.record.convert.util.FlvFileHelper.java

Source

/*
 * 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 com.bhbsoft.videoconference.record.convert.util;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.text.DecimalFormat;

import org.apache.commons.transaction.util.FileHelper;
import org.red5.logging.Red5LoggerFactory;
import org.slf4j.Logger;

public class FlvFileHelper {
    private static final Logger log = Red5LoggerFactory.getLogger(FlvFileHelper.class);

    /**
     * This variable needs to point to the openmeetings webapp directory
     */
    private static File OM_HOME = null;
    private static final String UPLOAD_DIR = "upload";
    private static final String UPLOAD_TEMP_DIR = "uploadtemp";
    private static final String FILES_DIR = "files";
    private static final String PUBLIC_DIR = "public";
    private static final String CLIPARTS_DIR = "cliparts";
    private static final String WEB_INF_DIR = "WEB-INF";
    private static final String PROFILES_DIR = "profiles";
    private static final String STREAMS_DIR = "streams";
    private static final String EMOTIONS_DIR = "emoticons";
    private static final String LANGUAGES_DIR = "languages";
    private static final String IMPORT_DIR = "import";
    private static final String HIBERNATE_DIR = "hibernate";
    private static final String CONF_DIR = "conf";
    private static final String BACKUP_DIR = "backup";
    private static final String DEFAULT_DIR = "default";
    private static final String WML_DIR = "stored";

    private static final String INSTALL_FILE = "install.xml";

    public static final String SCREENSHARING_DIR = "screensharing";

    public static final String profilesPrefix = "profile_";
    public static final String nameOfLanguageFile = "languages.xml";
    public static final String nameOfCountriesFile = "countries.xml";
    public static final String nameOfTimeZoneFile = "timezones.xml";
    public static final String nameOfErrorFile = "errorvalues.xml";
    public static final String libraryFileName = "library.xml";
    public static final String defaultProfileImageName = "profile_pic.jpg";
    public static final String profileFileName = "profile";
    public static final String profileImagePrefix = "_profile_";
    public static final String chatImagePrefix = "_chat_";
    public static final String bigImagePrefix = "_big_";
    public static final String thumbImagePrefix = "_thumb_";
    public static final String dashboardFile = "dashboard.xml";
    public static final String MP4_EXTENSION = ".mp4";
    public static final String OGG_EXTENSION = ".ogg";
    public static final String JPG_EXTENTION = ".jpg";

    public static void setOmHome(File omHome) {
        FlvFileHelper.OM_HOME = omHome;
    }

    public static void setOmHome(String omHome) {
        FlvFileHelper.OM_HOME = new File(omHome);
    }

    public static File getRootDir() {
        //FIXME hack !!!!
        return getOmHome().getParentFile().getParentFile();
    }

    public static File getOmHome() {
        return FlvFileHelper.OM_HOME;
    }

    private static File getDir(File parent, String name) {
        File f = new File(parent, name);
        if (!f.exists()) {
            f.mkdir();
        }
        return f;
    }

    public static File getUploadDir() {
        return new File(FlvFileHelper.OM_HOME, UPLOAD_DIR);
    }

    public static File getUploadFilesDir() {
        return getDir(getUploadDir(), FILES_DIR);
    }

    public static File getUploadProfilesDir() {
        return getDir(getUploadDir(), PROFILES_DIR);
    }

    public static File getUploadProfilesUserDir(Long userId) {
        return getDir(getUploadProfilesDir(), profilesPrefix + userId);
    }

    public static File getUploadProfilesUserDir(String users_id) {
        return getDir(getUploadProfilesDir(), profilesPrefix + users_id);
    }

    public static File getDefaultProfilePicture() {
        return new File(getDefaultDir(), profileImagePrefix + defaultProfileImageName);
    }

    public static File getUserProfilePicture(Long userId, String uri) {
        File img = new File(getUploadProfilesUserDir(userId), profileImagePrefix + uri);
        if (!img.exists()) {
            img = getDefaultProfilePicture();
        }
        return img;
    }

    public static File getUserDashboard(Long userId) {
        return new File(getUploadProfilesUserDir(userId), dashboardFile);
    }

    public static File getUploadImportDir() {
        return getDir(getUploadDir(), IMPORT_DIR);
    }

    public static File getUploadBackupDir() {
        return getDir(getUploadDir(), BACKUP_DIR);
    }

    public static File getUploadRoomDir(String roomName) {
        return getDir(getUploadDir(), roomName);
    }

    public static File getUploadWmlDir() {
        return getDir(getUploadDir(), WML_DIR);
    }

    public static File getUploadTempDir() {
        return new File(FlvFileHelper.OM_HOME, UPLOAD_TEMP_DIR);
    }

    public static File getUploadTempFilesDir() {
        return getDir(getUploadTempDir(), FILES_DIR);
    }

    public static File getUploadTempProfilesDir() {
        return getDir(getUploadTempDir(), PROFILES_DIR);
    }

    public static File getUploadTempProfilesUserDir(Long users_id) {
        return getDir(getUploadTempProfilesDir(), FlvFileHelper.profilesPrefix + users_id);
    }

    public static File getUploadTempRoomDir(String roomName) {
        return getDir(getUploadTempDir(), roomName);
    }

    public static File getStreamsDir() {
        return new File(FlvFileHelper.OM_HOME, STREAMS_DIR);
    }

    public static File getStreamsHibernateDir() {
        return getDir(getStreamsDir(), HIBERNATE_DIR);
    }

    public static File getRecording(String name) {
        return new File(getDir(getStreamsDir(), HIBERNATE_DIR), name);
    }

    public static boolean isRecordingExists(String name) {
        try {
            File f = new File(getDir(getStreamsDir(), HIBERNATE_DIR), name);
            return f.exists() && f.isFile();
        } catch (Exception e) {
            //no-op
        }
        return false;
    }

    public static File getMp4Recording(String name) {
        return getRecording(name + MP4_EXTENSION);
    }

    public static File getOggRecording(String name) {
        return getRecording(name + OGG_EXTENSION);
    }

    public static File getStreamsSubDir(Long id) {
        return getDir(getStreamsDir(), id.toString());
    }

    public static File getStreamsSubDir(String name) {
        return getDir(getStreamsDir(), name);
    }

    public static File getLanguagesDir() {
        return new File(FlvFileHelper.OM_HOME, LANGUAGES_DIR);
    }

    public static File getPublicDir() {
        return new File(FlvFileHelper.OM_HOME, PUBLIC_DIR);
    }

    public static File getPublicClipartsDir() {
        return new File(getPublicDir(), CLIPARTS_DIR);
    }

    public static File getPublicEmotionsDir() {
        return new File(getPublicDir(), EMOTIONS_DIR);
    }

    public static File getWebinfDir() {
        return new File(FlvFileHelper.OM_HOME, WEB_INF_DIR);
    }

    public static File getConfDir() {
        return new File(FlvFileHelper.OM_HOME, CONF_DIR);
    }

    public static File getInstallFile() {
        return new File(getConfDir(), INSTALL_FILE);
    }

    public static File getScreenSharingDir() {
        return new File(FlvFileHelper.OM_HOME, SCREENSHARING_DIR);
    }

    public static File getDefaultDir() {
        return new File(FlvFileHelper.OM_HOME, DEFAULT_DIR);
    }

    public static File appendSuffix(File original, String suffix) {
        File parent = original.getParentFile();
        String name = original.getName();
        String ext = "";
        int idx = name.lastIndexOf('.');
        if (idx > -1) {
            name = name.substring(0, idx);
            ext = name.substring(idx);
        }
        return new File(parent, name + suffix + ext);
    }

    //FIXME need to be generalized
    public static File getNewFile(File dir, String name, String ext) throws IOException {
        File f = new File(dir, name + ext);
        int recursiveNumber = 0;
        while (f.exists()) {
            f = new File(dir, name + "_" + (recursiveNumber++) + ext);
        }
        f.createNewFile();
        return f;
    }

    public static File getNewDir(File dir, String name) throws IOException {
        File f = new File(dir, name);
        String baseName = f.getCanonicalPath();

        int recursiveNumber = 0;
        while (f.exists()) {
            f = new File(baseName + "_" + (recursiveNumber++));
        }
        f.mkdir();
        return f;
    }

    public static String getHumanSize(File dir) {
        return getHumanSize(getSize(dir));
    }

    public static String getHumanSize(long size) {
        if (size <= 0)
            return "0";
        final String[] units = new String[] { "B", "KB", "MB", "GB", "TB" };
        int digitGroups = (int) (Math.log10(size) / Math.log10(1024));
        return new DecimalFormat("#,##0.#").format(size / Math.pow(1024, digitGroups)) + " " + units[digitGroups];
    }

    public static long getSize(File dir) {
        long size = 0;
        if (dir.isFile()) {
            size = dir.length();
        } else {
            File[] subFiles = dir.listFiles();

            for (File file : subFiles) {
                if (file.isFile()) {
                    size += file.length();
                } else {
                    size += getSize(file);
                }

            }
        }
        return size;
    }

    public static void copyFile(String sourceFile, String targetFile) throws IOException {
        FileHelper.copy(new File(sourceFile), new File(targetFile));
    }

    public static void copyFile(File f1, OutputStream out) throws IOException {
        InputStream in = null;
        try {
            in = new FileInputStream(f1);
            FileHelper.copy(in, out);
            log.debug("File copied.");
        } catch (Exception e) {
            log.error("[copyfile(File, File)]", e);
        } finally {
            if (in != null) {
                in.close();
            }
        }
    }
}