org.apache.openmeetings.util.OmFileHelper.java Source code

Java tutorial

Introduction

Here is the source code for org.apache.openmeetings.util.OmFileHelper.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 org.apache.openmeetings.util;

import static java.nio.charset.StandardCharsets.UTF_8;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.text.DecimalFormat;
import java.util.Locale;
import java.util.Properties;

import org.apache.openmeetings.util.ConnectionProperties.DbType;
import org.apache.wicket.util.string.Strings;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class OmFileHelper {
    private static final Logger log = LoggerFactory.getLogger(OmFileHelper.class);
    /**
     * This variable needs to point to the openmeetings webapp directory
     */
    private static File OM_HOME = null;
    private static File DATA_HOME = null;
    private static final String DATA_DIR = "data";
    private static final String UPLOAD_DIR = "upload";
    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 STREAMS_DIR = "streams";
    private static final String EMOTIONS_DIR = "emoticons";
    private static final String LANGUAGES_DIR = "languages";
    private static final String CONF_DIR = "conf";
    private static final String IMAGES_DIR = "images";
    private static final String WML_DIR = "stored";

    public static final String GROUP_LOGO_DIR = "grouplogo";
    public static final String FILE_NAME_FMT = "%s.%s";
    public static final String BACKUP_DIR = "backup";
    public static final String IMPORT_DIR = "import";
    public static final String PROFILES_DIR = "profiles";
    public static final String SCREENSHARING_DIR = "screensharing";
    public static final String CSS_DIR = "css";
    public static final String CUSTOM_CSS = "custom.css";
    public static final String FILES_DIR = "files";
    public static final String HIBERNATE = "hibernate";
    public static final String PERSISTENCE_NAME = "classes/META-INF/persistence.xml";
    public static final String DB_PERSISTENCE_NAME = "classes/META-INF/%s_persistence.xml";
    public static final String PROFILES_PREFIX = "profile_";
    public static final String GROUP_LOGO_PREFIX = "logo";
    public static final String LANG_FILE_NAME = "languages.xml";
    public static final String LIBRARY_FILE_NAME = "library.xml";
    public static final String PROFILE_IMG_NAME = "profile.png";
    public static final String PROFILE_FILE_NAME = "profile";
    public static final String RECORDING_FILE_NAME = "flvRecording_";
    public static final String THUMB_IMG_PREFIX = "_thumb_";
    public static final String DOC_PAGE_PREFIX = "page";
    public static final String TEST_SETUP_PREFIX = "TEST_SETUP_";
    public static final String DASHBOARD_FILE = "dashboard.xml";
    public static final String EXTENSION_WML = "wml";
    public static final String EXTENSION_WEBM = "webm";
    public static final String EXTENSION_MP4 = "mp4";
    public static final String EXTENSION_JPG = "jpg";
    public static final String EXTENSION_PNG = "png";
    public static final String EXTENSION_PDF = "pdf";
    public static final String WB_VIDEO_FILE_PREFIX = "UPLOADFLV_";
    public static final String MP4_MIME_TYPE = "video/" + EXTENSION_MP4;
    public static final String JPG_MIME_TYPE = "image/jpeg";
    public static final String PNG_MIME_TYPE = "image/png";
    public static final String BCKP_ROOM_FILES = "roomFiles";
    public static final String BCKP_RECORD_FILES = "recordingFiles";

    //Sip related stuff
    public static final Long SIP_USER_ID = -1L;
    public static final String SIP_PICTURE_URI = "phone.png";

    private OmFileHelper() {
    }

    public static void setOmHome(File home) {
        OM_HOME = home;
        final String dataDir = System.getProperty("DATA_DIR");
        if (Strings.isEmpty(dataDir)) {
            DATA_HOME = new File(OM_HOME, DATA_DIR);
        } else {
            DATA_HOME = new File(dataDir);
        }
    }

    public static void setOmHome(String home) {
        setOmHome(new File(home));
    }

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

    public static File getOmHome() {
        return OM_HOME;
    }

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

    public static File getUploadDir() {
        return new File(DATA_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(), PROFILES_PREFIX + userId);
    }

    public static File getUploadProfilesUserDir(String userId) {
        return getDir(getUploadProfilesDir(), PROFILES_PREFIX + userId);
    }

    public static File getGroupLogoDir() {
        return getDir(getUploadDir(), GROUP_LOGO_DIR);
    }

    public static File getGroupLogo(Long groupId, boolean check) {
        File logo = new File(getGroupLogoDir(), String.format("%s%s.png", GROUP_LOGO_PREFIX, groupId));
        if (groupId == null || (check && !logo.exists())) {
            logo = new File(getImagesDir(), "blank.png");
        }
        return logo;
    }

    public static File getDefaultProfilePicture() {
        return new File(getImagesDir(), PROFILE_IMG_NAME);
    }

    public static File getUserProfilePicture(Long userId, String uri) {
        return getUserProfilePicture(userId, uri, getDefaultProfilePicture());
    }

    public static File getUserProfilePicture(Long userId, String uri, File def) {
        File img = null;
        if (SIP_USER_ID.equals(userId)) {
            img = new File(getImagesDir(), SIP_PICTURE_URI);
        } else if (userId != null) {
            img = new File(getUploadProfilesUserDir(userId), uri == null ? "" : uri);
        }
        if (img == null || !img.exists() || img.isDirectory()) {
            img = def;
        }
        return img;
    }

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

    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 getStreamsDir() {
        return getDir(DATA_HOME, STREAMS_DIR);
    }

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

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

    public static File getStreamsSubDir(Long id) {
        return getStreamsSubDir(String.valueOf(id));
    }

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

    public static String getRecUri(File f) {
        String furi = f.getAbsolutePath();
        try {
            furi = f.getCanonicalPath();
        } catch (IOException e) {
            log.error("Unexpected error while getting canonical path", e);
        }
        String uri = String.format("file://%s", furi);
        log.info("Configured to record to {}", uri);
        return uri;
    }

    public static String getName(String name, String ext) {
        return String.format(FILE_NAME_FMT, name, ext);
    }

    public static File getRecordingChunk(Long roomId, String name) {
        return new File(getStreamsSubDir(roomId), getName(name, EXTENSION_WEBM));
    }

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

    public static File getPublicDir() {
        return new File(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(OM_HOME, WEB_INF_DIR);
    }

    public static File getPersistence() {
        return getPersistence((DbType) null);
    }

    public static File getPersistence(String dbType) {
        return getPersistence(DbType.valueOf(dbType));
    }

    public static File getPersistence(DbType dbType) {
        return new File(getWebinfDir(),
                dbType == null ? PERSISTENCE_NAME : String.format(DB_PERSISTENCE_NAME, dbType));
    }

    public static File getLdapConf(String name) {
        return new File(new File(DATA_HOME, CONF_DIR), name);
    }

    public static void loadLdapConf(String name, Properties config) {
        try (InputStream is = new FileInputStream(getLdapConf(name)); Reader r = new InputStreamReader(is, UTF_8)) {
            config.load(r);
            if (config.isEmpty()) {
                throw new RuntimeException("Error on LdapLogin : Configurationdata couldnt be retrieved!");
            }
        } catch (IOException e) {
            log.error("Error on LdapLogin : Configurationdata couldn't be retrieved!");
            throw new RuntimeException(e);
        }
    }

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

    public static File getImagesDir() {
        return new File(OM_HOME, IMAGES_DIR);
    }

    public static File getCssDir() {
        return new File(OM_HOME, CSS_DIR);
    }

    public static File getCssImagesDir() {
        return new File(getCssDir(), IMAGES_DIR);
    }

    public static File getCustomCss() {
        return new File(getCssDir(), CUSTOM_CSS);
    }

    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);
    }

    public static File getNewFile(File dir, String name, String ext) throws IOException {
        File f = new File(dir, getName(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[] files = dir.listFiles();
            if (files != null) {
                for (File file : dir.listFiles()) {
                    if (file.isFile()) {
                        size += file.length();
                    } else {
                        size += getSize(file);
                    }
                }
            }
        }
        return size;
    }

    public static String getFileName(String name) {
        int dotidx = name.lastIndexOf('.');
        return dotidx < 0 ? "" : name.substring(0, dotidx);
    }

    public static String getFileExt(String name) {
        int dotidx = name.lastIndexOf('.');
        return dotidx < 0 ? "" : name.substring(dotidx + 1).toLowerCase(Locale.ROOT);
    }
}