alvinalexander.com | career | drupal | java | mac | mysql | perl | scala | uml | unix  

What this is

This file is included in the DevDaily.com "Java Source Code Warehouse" project. The intent of this project is to help you "Learn Java by Example" TM.

Other links

The source code

/*
 * $Header: /cvsroot/mvnforum/mvnforum/src/com/mvnforum/MVNForumConfig.java,v 1.75 2005/01/29 19:29:26 minhnn Exp $
 * $Author: minhnn $
 * $Revision: 1.75 $
 * $Date: 2005/01/29 19:29:26 $
 *
 * ====================================================================
 *
 * Copyright (C) 2002-2005 by MyVietnam.net
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation; either version 2
 * of the License, or any later version.
 *
 * All copyright notices regarding mvnForum MUST remain intact
 * in the scripts and in the outputted HTML.
 * The "powered by" text/logo with a link back to
 * http://www.mvnForum.com and http://www.MyVietnam.net in the
 * footer of the pages MUST remain visible when the pages
 * are viewed on the internet or intranet.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 *
 * Support can be obtained from support forums at:
 * http://www.mvnForum.com/mvnforum/index
 *
 * Correspondence and Marketing Questions can be sent to:
 * info@MyVietnam.net
 *
 * @author: Minh Nguyen  minhnn@MyVietnam.net
 * @author: Mai  Nguyen  mai.nh@MyVietnam.net
 * @author: Igor Manic   imanic@users.sourceforge.net
 */
package com.mvnforum;

import java.io.*;
import java.util.Locale;

import com.mvnforum.db.DAOFactory;
import freemarker.cache.FileTemplateLoader;
import freemarker.template.Configuration;
import net.myvietnam.mvncore.configuration.DOM4JConfiguration;
import net.myvietnam.mvncore.db.DBUtils;
import net.myvietnam.mvncore.exception.*;
import net.myvietnam.mvncore.info.DatabaseInfo;
import net.myvietnam.mvncore.security.FloodControl;
import net.myvietnam.mvncore.util.*;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

public final class MVNForumConfig {

    private static Log log = LogFactory.getLog(MVNForumConfig.class);

    private MVNForumConfig() {
    }

    private static final String OPTION_FILE_NAME = "mvnforum.xml";

    private static boolean m_shouldRun = true;
    public static boolean isShouldRun() {
        return m_shouldRun;
    }

    private static String  m_reason = "Normal System";
    public static String getReason() {
        return m_reason;
    }

    private static boolean m_showUserArea = true;
    public static boolean getShouldShowUserArea() {
        return m_showUserArea;
    }
    public static void setShouldShowUserArea(boolean showUserArea) {
        m_showUserArea = showUserArea;
    }

    /**
     * This method could be use to stop run the forum in some condition.
     * Some use could be a page that immediately stop the forum for security.
     * Other usage is to check to run on some environment such as Servlet 2.3 or later
     *
     * @param shouldRun boolean the new shouldRun
     * @param reason String the reason of the action, this reason will
     *               be shown in the error page
     */
    public static void setShouldRun(boolean shouldRun, String reason) {
        m_shouldRun = shouldRun;
        m_reason = reason;
    }

    private static boolean m_guestUserInDatabase = false;
    public static boolean isGuestUserInDatabase() {
        return m_guestUserInDatabase;
    }

    private static String tempDir = "";
    private static String searchPostIndexDir = "";
    private static String searchCompanyIndexDir = "";
    private static String searchMemberIndexDir = "";
    private static String attachmentDir = "";
    private static String pmAttachmentDir = "";
    private static String backupDir = "";
    private static String templateDir = "";
    private static String logDir = "";
    private static String avatarDir = "";

    private static String LOG_FILE= "";

    private static void setMVNForumHome(String home) {
        // now check the read/write permission by writing a temp file
        try {
            // always create a dir, if the dir already exitsted, nothing happen
            FileUtil.createDirs(home, true);

            String tempFilename = home + File.separatorChar + "mvnforum_tempfile.tmp";
            File tempFile = new File(tempFilename);
            if (log.isDebugEnabled()) {
                log.debug("Temp file = " + tempFilename);
                log.debug("Absolute filename of temp file = " + tempFile.getAbsolutePath());
            }

            FileOutputStream fos = new FileOutputStream(tempFilename);
            fos.write(tempFilename.getBytes());
            fos.close();

            tempFile.delete();

            // now create the dirs if not exitst
            tempDir = MVNFORUM_HOME + File.separatorChar + "temp";
            FileUtil.createDirs(tempDir, true);

            searchPostIndexDir = MVNFORUM_HOME + File.separatorChar + "search" + File.separatorChar + "post";
            FileUtil.createDirs(searchPostIndexDir, true);

            searchCompanyIndexDir = MVNFORUM_HOME + File.separatorChar + "search" + File.separatorChar + "company";
            FileUtil.createDirs(searchCompanyIndexDir, true);

            searchMemberIndexDir = MVNFORUM_HOME + File.separatorChar + "search" + File.separatorChar + "member";
            FileUtil.createDirs(searchMemberIndexDir, true);

            attachmentDir = MVNFORUM_HOME + File.separatorChar + "attachment";
            FileUtil.createDirs(attachmentDir, true);

            pmAttachmentDir = MVNFORUM_HOME + File.separatorChar + "pm_attachment";
            FileUtil.createDirs(pmAttachmentDir, true);

            backupDir = MVNFORUM_HOME + File.separatorChar + "backup";
            FileUtil.createDirs(backupDir, true);

            // this dir is created as a recommended folder to store the log files
            logDir = MVNFORUM_HOME + File.separatorChar + "log";
            FileUtil.createDirs(logDir, true);

            avatarDir = MVNFORUM_HOME + File.separatorChar + "memberavatars";
            FileUtil.createDirs(avatarDir, true);

            // this dir is created as a recommended folder to store the template files
            templateDir = MVNFORUM_HOME + File.separatorChar + "template";
            FileUtil.createDirs(templateDir, true);

            // now check the database
            DatabaseInfo databaseInfo = new DatabaseInfo();
            if (databaseInfo.getErrorMessage() != null) {
                log.fatal("Cannot get database connection. Please correct it first.");
                m_shouldRun = false;
                m_reason = "Check your database configuration. Detail : " + databaseInfo.getErrorMessage();
            } else if (DAOFactory.getMemberDAO().getNumberOfMembers() == 0) { // check if no member
                log.fatal("There are no members in database. Please correct it first.");
                m_shouldRun = false;
                m_reason = "There are no members in database.";
            }
            // call this method will print the database type to logger with level INFO
            DBUtils.getDatabaseType();
        } catch (IOException ex) {
            log.fatal("Cannot setup the mvnForumHome folder. Please correct it first.", ex);
            m_shouldRun = false;
            m_reason = "Check your mvnForumHome. Detail : " + ex.getMessage();
        } catch (DatabaseException dbe) {
            log.fatal("Error while access database. Please correct it first.", dbe);
            m_shouldRun = false;
            m_reason = "Error while access database. Detail : " + dbe.getMessage();
        } catch (AssertionException ae) {
            // should never happen, maybe in the future we should remove the Assertion in getNumberOfBeans
            log.fatal("Assertion error. Please correct it first.", ae);
            m_shouldRun = false;
            m_reason = "Assertion error. Detail : " + ae.getMessage();
        }
    }

    private static Configuration freeMarkerConfiguration;
    public static Configuration getFreeMarkerConfiguration() {
        return freeMarkerConfiguration;
    }

    private static String MVNFORUM_HOME     = "mvnForumHome";
    public static String getMVNForumHome() {
        return MVNFORUM_HOME;
    }
    public static String getTempDir() {
        return tempDir;
    }

    public static String getSearchPostIndexDir() {
        return searchPostIndexDir;
    }
    public static String getSearchCompanyIndexDir() {
        return searchCompanyIndexDir;
    }

    public static String getSearchMemberIndexDir() {
        return searchMemberIndexDir;
    }

    public static String getAttachmentDir() {
        return attachmentDir;
    }
    public static String getPmAttachmentDir() {
        return pmAttachmentDir;
    }

    public static String getTemplateDir() {
        return templateDir;
    }

    public static String getBackupDir() {
        return backupDir;
    }

    public static String getLogDir() {
        return logDir;
    }

    public static String getLogFile() {
        return LOG_FILE;
    }

    public static String getAvatarDir() {
        return avatarDir;
    }

    private static String WEBMASTER_EMAIL  = "youremail@yourdomain.com";
    public static String getWebMasterEmail() {
        return WEBMASTER_EMAIL;
    }

    private static String LOGO_URL         = "http://www.mvnForum.com";
    public static String getLogoUrl() {
        return LOGO_URL;
    }

    private static String[] SUPPORTED_LOCALE_NAMES = new String[0];
    private static Locale[] SUPPORTED_LOCALES = new Locale[0];
    public static String[] getSupportedLocaleNames() {
        return SUPPORTED_LOCALE_NAMES;
    }
    public static Locale[] getSupportedLocales() {
        return SUPPORTED_LOCALES;
    }

    private static String DEFAULT_LOCALE_NAME = "en";
    private static Locale DEFAULT_LOCALE      = null;
    public static String getDefaultLocaleName() {
        return DEFAULT_LOCALE_NAME;
    }
    public static Locale getDefaultLocale() {
        return DEFAULT_LOCALE;
    }

    /**
     * Default username of a virtual Guest user. Will be overriden with the data
     * from the database, if it exists (for the Guest user).
     * Admin can give him a name he wants, like "Guest", "Anonymous", "Surfer",
     * or even use a language different than English.
     */
    private static String DEFAULT_GUEST_NAME   = "Guest";
    public static String getDefaultGuestName() {
        return DEFAULT_GUEST_NAME;
    }

    private static int DEFAULT_GUEST_TIMEZONE = 0;
    public static int getDefaultGuestTimeZone() {
        return DEFAULT_GUEST_TIMEZONE;
    }

    //public final static boolean PRINT_STACK_TRACE = false;

    /**
     * By default, mvnForum disable passwordless authentication
     * If you want to authenticate user from realm or customized methods,
     * then set the variable to true (AT YOUR OWN RISK, although I have not
     * found any security issues until now)
     */
    private static boolean ENABLE_PASSWORDLESS_AUTH = false;
    public static boolean getEnablePasswordlessAuth() {
        return ENABLE_PASSWORDLESS_AUTH;
    }

    private static boolean REQUIRE_ACTIVATION = false;
    public static boolean getRequireActivation() {
        return REQUIRE_ACTIVATION;
    }

    private static boolean ENABLE_LOGIN_INFO_IN_COOKIE = true;
    public static boolean getEnableLoginInfoInCookie() {
        return ENABLE_LOGIN_INFO_IN_COOKIE;
    }

    private static boolean ENABLE_LOGIN_INFO_IN_SESSION = true;
    public static boolean getEnableLoginInfoInSession() {
        return ENABLE_LOGIN_INFO_IN_SESSION;
    }

    private static boolean ENABLE_LOGIN_INFO_IN_REALM = false;
    public static boolean getEnableLoginInfoInRealm() {
        return ENABLE_LOGIN_INFO_IN_REALM;
    }

    private static boolean ENABLE_LOGIN_INFO_IN_CUSTOMIZATION = false;
    public static boolean getEnableLoginInfoInCustomization() {
        return ENABLE_LOGIN_INFO_IN_CUSTOMIZATION;
    }

    private static boolean ENABLE_LOGIN = true;
    public static boolean getEnableLogin() {
        return ENABLE_LOGIN;
    }

    private static boolean ENABLE_GUEST_VIEW_IMAGE_ATTACHMENT = false;
    public static boolean getEnableGuestViewImageAttachment() {
        return ENABLE_GUEST_VIEW_IMAGE_ATTACHMENT;
    }

    private static boolean ENABLE_NEW_MEMBER = true;
    public static boolean getEnableNewMember() {
        return ENABLE_NEW_MEMBER;
    }

    private static boolean ENABLE_NEW_POST = true;
    public static boolean getEnableNewPost() {
        return ENABLE_NEW_POST;
    }

    private static boolean ENABLE_AVATAR = true;
    public static boolean getEnableAvatar() {
        return ENABLE_AVATAR;
    }

    private static boolean ENABLE_EMOTICON = true;
    public static boolean getEnableEmoticon() {
        return ENABLE_EMOTICON;
    }

    private static boolean ENABLE_RSS = true;
    public static boolean getEnableRSS() {
        return ENABLE_RSS;
    }

    private static boolean ENABLE_SEARCH = true;
    public static boolean getEnableSearch() {
        return ENABLE_SEARCH;
    }
    private static boolean ENABLE_WATCH = true;
    public static boolean getEnableWatch() {
        return ENABLE_WATCH;
    }

    private static boolean ENABLE_ATTACHMENT = true;
    public static boolean getEnableAttachment() {
        return ENABLE_ATTACHMENT;
    }

    private static boolean ENABLE_MESSAGE_ATTACHMENT = true;
    public static boolean getEnableMessageAttachment() {
        return ENABLE_MESSAGE_ATTACHMENT;
    }

    private static boolean ENABLE_MOST_ACTIVE_THREADS = true;
    public static boolean getEnableMostActiveThreads() {
        return ENABLE_MOST_ACTIVE_THREADS;
    }

    private static boolean ENABLE_MOST_ACTIVE_MEMBERS = true;
    public static boolean getEnableMostActiveMembers() {
        return ENABLE_MOST_ACTIVE_MEMBERS;
    }

    private static boolean ENABLE_SITE_STATISTICS_OVERVIEW = true;
    public static boolean getEnableSiteStatisticsOverview() {
        return ENABLE_SITE_STATISTICS_OVERVIEW;
    }

    private static int MAX_ATTACHMENT_SIZE = 1024;
    public static int getMaxAttachmentSize() {
        return MAX_ATTACHMENT_SIZE;
    }

    private static int MAX_MESSAGE_ATTACHMENT_SIZE = 1024;
    public static int getMaxMessageAttachmentSize() {
        return MAX_MESSAGE_ATTACHMENT_SIZE;
    }

    // Default is false, but in KG it should be true
    private static boolean ENABLE_AUTO_FORUM_OWNER = false;
    public static boolean getEnableAutoForumOwner() {
        return ENABLE_AUTO_FORUM_OWNER;
    }

    private static boolean ENABLE_CAPTCHA = false;
    public static boolean getEnableCaptcha() {
        return ENABLE_CAPTCHA;
    }

    private static boolean ENABLE_PORTAL_LIKE_INDEX_PAGE = true;
    public static boolean getEnablePortalLikeIndexPage() {
        return ENABLE_PORTAL_LIKE_INDEX_PAGE;
    }

    private static boolean ENABLE_ADMIN_CAN_CHANGE_PASSWORD = true;
    public static boolean getEnableAdminCanChangePassword() {
        return ENABLE_ADMIN_CAN_CHANGE_PASSWORD;
    }

    private static boolean ENABLE_SHOW_LAST_LOGIN = true;
    public static boolean getEnableShowLastLogin() {
        return ENABLE_SHOW_LAST_LOGIN;
    }

    private static boolean ENABLE_ONLINE_USERS = true;
    public static boolean getEnableOnlineUsers() {
        return ENABLE_ONLINE_USERS;
    }

    private static boolean ENABLE_DUPLICATE_ONLINE_USERS = true;
    public static boolean getEnableDuplicateOnlineUsers() {
        return ENABLE_DUPLICATE_ONLINE_USERS;
    }

    private static boolean ENABLE_INVISIBLE_USERS = true;
    public static boolean getEnableInvisibleUsers() {
        return ENABLE_INVISIBLE_USERS;
    }

    private static boolean ENABLE_LISTMEMBERS = true;
    public static boolean getEnableListMembers() {
        return ENABLE_LISTMEMBERS;
    }

    private static boolean ENABLE_PRIVATE_MESSAGE = true;
    public static boolean getEnablePrivateMessage() {
        return ENABLE_PRIVATE_MESSAGE;
    }

    private static boolean ENABLE_PUBLIC_MESSAGE = true;
    public static boolean getEnablePublicMessage() {
        return ENABLE_PUBLIC_MESSAGE;
    }

    // Default is false, but in Marco it should be true
    private static boolean ENABLE_COMPANY = false;
    public static boolean getEnableCompany() {
        return ENABLE_COMPANY;
    }

    // Default is false, but in Marco it should be true or false
    private static boolean ENABLE_LISTCOMPANIES = false;
    public static boolean getEnableListCompanies() {
        return ENABLE_LISTCOMPANIES;
    }

    private static int EXPIRE_DATE_TUTOR = 90;
    public static int getExpireDateTutor() {
        return EXPIRE_DATE_TUTOR;
    }

    private static int EXPIRE_SOON_DATE = 7;
    public static int getUserTutorExpireSoonDate() {
        return EXPIRE_SOON_DATE;
    }

    /**
     * This is the maximum number of favorite threads that a user can add
     */
    private static int MAX_FAVORITE_THREAD = 128;
    public static int getMaxFavoriteThread() {
        return MAX_FAVORITE_THREAD;
    }

    private static int MAX_PRIVATE_MESSAGE = 128;
    public static int getMaxPrivateMessage() {
        return MAX_PRIVATE_MESSAGE;
    }

    private static int HOT_TOPIC_THRESHOLD = 10;
    public static int getHotTopicThreshold() {
        return HOT_TOPIC_THRESHOLD;
    }

    private static int MAX_POSTS_PER_HOUR = 20;
    public static int getMaxPostsPerHour() {
        return MAX_POSTS_PER_HOUR;
    }

    private static int MAX_MEMBERS_PER_HOUR = 2;
    public static int getMaxMembersPerHour() {
        return MAX_MEMBERS_PER_HOUR;
    }

    private static int MAX_LOGINS_PER_HOUR = 5;
    public static int getMaxLoginsPerHour() {
        return MAX_LOGINS_PER_HOUR;
    }

    private static int MAX_MESSAGES_PER_HOUR = 5;
    public static int getMaxMessagesPerHour() {
        return MAX_MESSAGES_PER_HOUR;
    }

    private static int MAX_ACTIVE_THREADS = 5;
    public static int getMaxActiveThreads() {
        return MAX_ACTIVE_THREADS;
    }

    private static int MAX_ACTIVE_MEMBERS = 5;
    public static int getMaxActiveMembers() {
        return MAX_ACTIVE_MEMBERS;
    }

    /** Do we allow storing backup files on the server? Currently not used. */
    static boolean ENABLE_BACKUP_ON_SERVER = true;
    public static final String BACKUP_FILE_PREFIX = "mvnForum-";
    public static final String BACKUP_FILE_MainXmlFileNameInZip = "IMPORT.xml";
    public static final String BACKUP_FILE_AvatarsDirNameInZip = "AVATARS/"; //must end with '/'
    public static final String BACKUP_FILE_AttachsDirNameInZip = "ATTACHMENTS/"; //must end with '/'

    /**
     * Maximum size of the import file (in bytes) we will allow to be uploaded
     * to server before processing.
     */
    private static int MAX_IMPORT_SIZE = 4096000;
    /**
     * Maximum size of the import file (in bytes) we will allow to be uploaded
     * to server before processing.
     */
    public static int getMaxImportSize() {
        return MAX_IMPORT_SIZE;
    }

    /**
     * Type of import/export file: mvnForum XML.
     * Import only database info, no attachments, message folders, avatars, ...
     */
    public static final int IMPORTEXPORT_TYPE_MVN_XML  = 0;

    /**
     * Type of import file: mvnForum ZIP.
     * Also import attachments, avatars, message folders
     */
    public static final int IMPORTEXPORT_TYPE_MVN_ZIP  = 1;

    /**
     * Type of import file: Jive XML.
     * Using <code>http://www.jivesoftware.com/jive.dtd, xmlversion="1.0".
     */
    public static final int IMPORTEXPORT_TYPE_JIVE_XML = 2;

    /**
     * Output all messages, including errors, important messages and
     * informational/status messages. This constant is used for specifing
     * the level of output in various processess throughout the application.
     */
    public static final int MESSAGE_LEVEL_ALL_MESSAGES       = 0;

    /**
     * Output only error messages and important messages (no
     * informational/status messages). This constant is used for specifing
     * the level of output in various processess throughout the application.
     */
    public static final int MESSAGE_LEVEL_IMPORTANT_MESSAGES = 1;

    /**
     * Output only error messages (no important messages, no
     * informational/status messages). This constant is used for specifing
     * the level of output in various processess throughout the application.
     */
    public static final int MESSAGE_LEVEL_ONLY_ERRORS        = 2;

    public final static long SESSION_DURATION    = 30 * DateUtil.MINUTE;// SHOULD NOT less than 15 minutes

    //public static final boolean DEFAULT_MESSAGE_ENABLE  = true;
    //public static final boolean DEFAULT_MEMBER_ENABLE   = true;

    /**
     * Configurable number of days that a user can edit a post
     */
    private static int MAX_EDIT_DAYS   = 7;
    public static int getMaxEditDays() {
        return MAX_EDIT_DAYS;
    }

    /**
     * Configurable number of days that a user can attach file to a post
     */
    private static int MAX_ATTACH_DAYS = 1;
    public static int getMaxAttachDays() {
        return MAX_ATTACH_DAYS;
    }

    /**
     * Configurable number of days that a user can delete a post
     */
    private static int MAX_DELETE_DAYS = 1;
    public static int getMaxDeleteDays() {
        return MAX_DELETE_DAYS;
    }

    /**
     * Default number of rows (of Guest user) shown per page
     */
    private static int ROWS_PER_PAGE = 10;
    public static int getRowsPerPage() {
        return ROWS_PER_PAGE;
    }

    /**
     * This is the number of rows returned when list threads for RSS
     */
    private static int ROWS_PER_RSS = 15;//RSS 0.91
    public static int getRowsPerRSS() {
        return ROWS_PER_RSS;
    }

    /**
     * This is the default value of watch option
     * @see com.mvnforum.db.WatchBean for the constant values
     */
    private static int DEFAULT_WATCH_OPTION = 0;
    public static int getDefaultWatchOption() {
        return DEFAULT_WATCH_OPTION;
    }

    private static int DEFAULT_MODERATION_OPTION = 0;
    public static int getDefaultModerationOption() {
        return DEFAULT_MODERATION_OPTION;
    }

    private static int MAX_CHARS_IN_SHORT_SUMMARY = 100;
    public static int getMaxCharsInShortSummary() {
        //getMaxCharsInPostInIndex
        return MAX_CHARS_IN_SHORT_SUMMARY;
    }

    private static int MAX_CHARS_IN_LONG_SUMMARY = 1000;
    public static int getMaxCharsInLongSummary() {
        //getMaxCharsInPostInListthreads()
        return MAX_CHARS_IN_LONG_SUMMARY;
    }

    private static int MAX_CHARS_IN_RSS = 500;
    public static int getMaxCharsInRss() {
        return MAX_CHARS_IN_RSS;
    }

    /**
     * This is the number of reply rows returned when addpost (reply to a topic)
     * /forum/addpost
     */
    public static final int ROWS_IN_LAST_REPLIES = 5;

    /*
    private static boolean parseBooleanValue(String propertyValue, boolean defaultValue) {
        String result = "true";
        try {
            result = propertyValue.trim();
            if ((result.equalsIgnoreCase("false")) || (result.equalsIgnoreCase("no"))) {
                return false;
            } else if ((result.equalsIgnoreCase("true")) || (result.equalsIgnoreCase("yes"))) {
                return true;
            } else {
                log.warn("Invalid boolean value in properties file. Should be \"true\", \"false\", \"yes\" or \"no\".");
                return defaultValue;
            }
        } catch (Exception e) {
            log.warn(e.getMessage());
            return defaultValue;
        }
    }

    private static int parseIntValue(String propertyValue, int defaultValue) {
        try {
            return Integer.parseInt(propertyValue.trim());
        } catch (Exception e) {
            log.warn(e.getMessage());
            return defaultValue;
        }
    }
    */
    private static int parseIntSizeValue(String propertyValue, int defaultValue) {
        try {
            String temp = propertyValue.trim();
            if (temp.endsWith("B") || temp.endsWith("b")) {
                temp = temp.substring(0, temp.length() - 1);
            }
            switch (temp.charAt(temp.length()-1)) {
                case 'K': case 'k':
                    //examples (ending 'B' was cut before): "1K", "1KB", "1k", "1kB", "1 K", "1 KB", "1 k", "1 kB"
                    return 1024 * Integer.parseInt(temp.substring(0, temp.length() - 1).trim());
                case 'M': case 'm':
                    //examples (ending 'B' was cut before): "1M", "1MB", "1m", "1mB", "1 M", "1 MB", "1 m", "1 mB"
                    return 1024 * 1024 * Integer.parseInt(temp.substring(0, temp.length() - 1).trim());
                default:
                    //examples (ending 'B' was cut before): "1", "1B", "1 B"
                    return Integer.parseInt(temp.trim());
            }
        } catch (Exception e) {
            log.warn(e.getMessage());
            return defaultValue;
        }
    }

    static {
        try {
            load();

            // now check if Guest user is in database or not
            try {
                DAOFactory.getMemberDAO().getMember_forPublic(MVNForumConstant.MEMBER_ID_OF_GUEST);
                m_guestUserInDatabase = true;
            } catch (ObjectNotFoundException ex) {
                // dont have Guest user in database, just ignore
            } catch (Exception ex) {
                log.info("Error occured when get Guest user.", ex);
            }

            // Load FreeMarker configuration
            freeMarkerConfiguration = Configuration.getDefaultConfiguration();
            FileTemplateLoader templateLoader = new FileTemplateLoader(new File(MVNForumConfig.getTemplateDir()));
            log.debug("Template directory = " + MVNForumConfig.getTemplateDir());
            freeMarkerConfiguration.setTemplateLoader(templateLoader);
        } catch (Exception e) {
            String message = "com.mvnforum.MVNForumConfig: Can't read the configuration file: '" + OPTION_FILE_NAME + "'. Make sure the file is in your CLASSPATH";
            log.error(message, e);
            m_shouldRun = false;
            m_reason = message;
        }
    }

    public static void load() {
        reload();
    }

    public static void reload() {

        String strPathName = FileUtil.getServletClassesPath();
        String configFilename = strPathName + OPTION_FILE_NAME;
        try {
            DOM4JConfiguration conf = new DOM4JConfiguration(new File(configFilename));

            MVNFORUM_HOME       = conf.getString("mvnforumconfig.mvnforum_home", "");
            setMVNForumHome(MVNFORUM_HOME);

            WEBMASTER_EMAIL     = conf.getString("mvnforumconfig.webmaster_email", "");

            LOGO_URL            = conf.getString("mvnforumconfig.logo_url", LOGO_URL);

            LOG_FILE = conf.getString("mvnforumconfig.mvnforum_log", "");

            String supportedLocales = conf.getString("mvnforumconfig.supported_locales", "");
            SUPPORTED_LOCALE_NAMES = StringUtil.getStringArray(supportedLocales, ";");

            SUPPORTED_LOCALES = new Locale[SUPPORTED_LOCALE_NAMES.length];
            for (int i = 0; i < SUPPORTED_LOCALE_NAMES.length; i++) {
                String localeName = SUPPORTED_LOCALE_NAMES[i];
                SUPPORTED_LOCALES[i] = MyUtil.getLocale(localeName);
            }

            try {
                DEFAULT_LOCALE_NAME = conf.getString("mvnforumconfig.default_locale_name", "");
                if (DEFAULT_LOCALE_NAME.length() == 0) {
                    DEFAULT_LOCALE_NAME = "en";
                }
            } catch (Exception ex) {
                log.warn(ex.getMessage());
            }
            DEFAULT_LOCALE = MyUtil.getLocale(DEFAULT_LOCALE_NAME);

            try {
                DEFAULT_GUEST_NAME = conf.getString("mvnforumconfig.default_guest_name", DEFAULT_GUEST_NAME);
            } catch (Exception ex) {
                log.warn(ex.getMessage());
            }

            DEFAULT_GUEST_TIMEZONE = conf.getInt("mvnforumconfig.default_guest_timezone", DEFAULT_GUEST_TIMEZONE);
            if ( Math.abs(DEFAULT_GUEST_TIMEZONE) > 12 )
                DEFAULT_GUEST_TIMEZONE = 0;

            ENABLE_PASSWORDLESS_AUTH = conf.getBoolean("mvnforumconfig.enable_passwordless_auth", false);
            REQUIRE_ACTIVATION = conf.getBoolean("mvnforumconfig.require_activation", false);
            ENABLE_LOGIN_INFO_IN_COOKIE = conf.getBoolean("mvnforumconfig.enable_login_info_in_cookie", true);
            ENABLE_LOGIN_INFO_IN_SESSION = conf.getBoolean("mvnforumconfig.enable_login_info_in_session", true);
            ENABLE_LOGIN_INFO_IN_REALM = conf.getBoolean("mvnforumconfig.enable_login_info_in_realm", false);
            ENABLE_LOGIN_INFO_IN_CUSTOMIZATION = conf.getBoolean("mvnforumconfig.enable_login_info_in_customization", false);

            ENABLE_LOGIN = conf.getBoolean("mvnforumconfig.enable_login", true);
            ENABLE_NEW_MEMBER = conf.getBoolean("mvnforumconfig.enable_new_member", true);
            ENABLE_NEW_POST = conf.getBoolean("mvnforumconfig.enable_new_post", true);
            ENABLE_AVATAR = conf.getBoolean("mvnforumconfig.enable_avatar", true);
            ENABLE_EMOTICON = conf.getBoolean("mvnforumconfig.enable_emoticon", true);
            ENABLE_RSS = conf.getBoolean("mvnforumconfig.enable_rss", true);
            ENABLE_SEARCH = conf.getBoolean("mvnforumconfig.enable_search", true);
            ENABLE_WATCH = conf.getBoolean("mvnforumconfig.enable_watch", true);
            ENABLE_ATTACHMENT = conf.getBoolean("mvnforumconfig.enable_attachment", true);
            ENABLE_MESSAGE_ATTACHMENT = conf.getBoolean("mvnforumconfig.enable_message_attachment", true);
            ENABLE_CAPTCHA = conf.getBoolean("mvnforumconfig.enable_captcha", false);
            ENABLE_PORTAL_LIKE_INDEX_PAGE = conf.getBoolean("mvnforumconfig.enable_portal_like_index_page", true);
            ENABLE_ADMIN_CAN_CHANGE_PASSWORD = conf.getBoolean("mvnforumconfig.enable_admin_can_change_password", true);
            ENABLE_SHOW_LAST_LOGIN = conf.getBoolean("mvnforumconfig.enable_show_last_login", true);
            ENABLE_ONLINE_USERS = conf.getBoolean("mvnforumconfig.enable_online_users", true);
            ENABLE_LISTMEMBERS = conf.getBoolean("mvnforumconfig.enable_listmembers", true);
            ENABLE_DUPLICATE_ONLINE_USERS = conf.getBoolean("mvnforumconfig.enable_duplicate_onlineusers", true);
            ENABLE_INVISIBLE_USERS = conf.getBoolean("mvnforumconfig.enable_invisible_users", true);
            ENABLE_PRIVATE_MESSAGE = conf.getBoolean("mvnforumconfig.enable_private_message", true);
            ENABLE_PUBLIC_MESSAGE = conf.getBoolean("mvnforumconfig.enable_public_message", false);
            ENABLE_GUEST_VIEW_IMAGE_ATTACHMENT = conf.getBoolean("mvnforumconfig.enable_guest_view_image_attachment", false);
            ENABLE_MOST_ACTIVE_THREADS = conf.getBoolean("mvnforumconfig.enable_most_active_threads", true);
            ENABLE_MOST_ACTIVE_MEMBERS = conf.getBoolean("mvnforumconfig.enable_most_active_members", true);
            ENABLE_SITE_STATISTICS_OVERVIEW = conf.getBoolean("mvnforumconfig.enable_site_statistics_overview", false);

            /*
            // Netmama
            ENABLE_COMPANY = conf.getBoolean("mvnforumconfig.enable_company", false);
            ENABLE_LISTCOMPANIES = conf.getBoolean("mvnforumconfig.enable_listcompanies", false);
            EXPIRE_DATE_TUTOR = conf.getInt("mvnforumconfig.expire_date_tutor", 90);
            EXPIRE_SOON_DATE = conf.getInt("mvnforumconfig.expire_soon_date", 7);
            */
            MAX_ATTACHMENT_SIZE = parseIntSizeValue(conf.getString("mvnforumconfig.max_attachment_size"), 1024);
            if (MAX_ATTACHMENT_SIZE < -1) MAX_ATTACHMENT_SIZE = 0;// -1 is a valid value in common-upload, mean no maximum file size
            MAX_MESSAGE_ATTACHMENT_SIZE = parseIntSizeValue(conf.getString("mvnforumconfig.max_message_attachment_size"), 1024);
            if (MAX_MESSAGE_ATTACHMENT_SIZE < -1) MAX_MESSAGE_ATTACHMENT_SIZE = 0;// -1 is a valid value in common-upload, mean no maximum file size

            MAX_FAVORITE_THREAD = conf.getInt("mvnforumconfig.max_favorite_thread", 128);
            if (MAX_FAVORITE_THREAD < 0) MAX_FAVORITE_THREAD = 0;

            MAX_PRIVATE_MESSAGE = conf.getInt("mvnforumconfig.max_private_message", 128);
            if (MAX_PRIVATE_MESSAGE < 0) MAX_PRIVATE_MESSAGE = 0;

            MAX_EDIT_DAYS = conf.getInt("mvnforumconfig.max_edit_days", 7);
            if (MAX_EDIT_DAYS < 0) MAX_EDIT_DAYS = 0;

            MAX_ATTACH_DAYS = conf.getInt("mvnforumconfig.max_attach_days", 1);
            if (MAX_ATTACH_DAYS < 0) MAX_ATTACH_DAYS = 0;

            MAX_DELETE_DAYS = conf.getInt("mvnforumconfig.max_delete_days", 1);
            if (MAX_DELETE_DAYS < 0) MAX_DELETE_DAYS = 0;

            ROWS_PER_PAGE = conf.getInt("mvnforumconfig.rows_per_page", 10);
            if (ROWS_PER_PAGE < 5) ROWS_PER_PAGE = 5;

            ROWS_PER_RSS = conf.getInt("mvnforumconfig.rows_per_rss", 15);
            if (ROWS_PER_RSS < 5) ROWS_PER_RSS = 5;

            HOT_TOPIC_THRESHOLD = conf.getInt("mvnforumconfig.hot_topic_threshold", 10);
            if (HOT_TOPIC_THRESHOLD < 5) HOT_TOPIC_THRESHOLD = 5;

            MAX_POSTS_PER_HOUR = conf.getInt("mvnforumconfig.max_posts_per_hour", MAX_POSTS_PER_HOUR);
            if (MAX_POSTS_PER_HOUR < 0) MAX_POSTS_PER_HOUR = 0;

            MAX_MEMBERS_PER_HOUR = conf.getInt("mvnforumconfig.max_members_per_hour", MAX_MEMBERS_PER_HOUR);
            if (MAX_MEMBERS_PER_HOUR < 0) MAX_MEMBERS_PER_HOUR = 0;

            MAX_LOGINS_PER_HOUR = conf.getInt("mvnforumconfig.max_logins_per_hour", MAX_LOGINS_PER_HOUR);
            if (MAX_LOGINS_PER_HOUR < 0) MAX_LOGINS_PER_HOUR = 0;

            MAX_MESSAGES_PER_HOUR = conf.getInt("mvnforumconfig.max_messages_per_hour", MAX_MESSAGES_PER_HOUR);
            if (MAX_MESSAGES_PER_HOUR < 0) MAX_MESSAGES_PER_HOUR = 0;

            MAX_CHARS_IN_SHORT_SUMMARY = conf.getInt("mvnforumconfig.max_chars_in_short_summary", MAX_CHARS_IN_SHORT_SUMMARY);
            if (MAX_CHARS_IN_SHORT_SUMMARY <= 0) MAX_CHARS_IN_SHORT_SUMMARY = Integer.MAX_VALUE;

            MAX_CHARS_IN_LONG_SUMMARY = conf.getInt("mvnforumconfig.max_chars_in_long_summary", MAX_CHARS_IN_LONG_SUMMARY);
            if (MAX_CHARS_IN_LONG_SUMMARY <= 0) MAX_CHARS_IN_LONG_SUMMARY = Integer.MAX_VALUE;

            MAX_CHARS_IN_RSS = conf.getInt("mvnforumconfig.max_chars_in_rss", MAX_CHARS_IN_RSS);
            if (MAX_CHARS_IN_RSS <= 0) MAX_CHARS_IN_RSS = Integer.MAX_VALUE;

            ENABLE_BACKUP_ON_SERVER = conf.getBoolean("mvnforumconfig.enable_backup_on_server", true);
            MAX_IMPORT_SIZE = parseIntSizeValue(conf.getString("mvnforumconfig.max_import_size", "4096000"), 4096000 );

            DEFAULT_WATCH_OPTION = conf.getInt("mvnforumconfig.default_watch_option", 0);
            if (DEFAULT_WATCH_OPTION < 0 || DEFAULT_WATCH_OPTION > 4) DEFAULT_WATCH_OPTION = 0;

            DEFAULT_MODERATION_OPTION = conf.getInt("mvnforumconfig.default_moderation_option", 0);
            if (DEFAULT_MODERATION_OPTION < 0 || DEFAULT_MODERATION_OPTION > 4) DEFAULT_MODERATION_OPTION = 0;

            FloodControl.setOption(MVNForumGlobal.FLOOD_ID_NEW_MEMBER, MAX_MEMBERS_PER_HOUR);
            FloodControl.setOption(MVNForumGlobal.FLOOD_ID_NEW_POST, MAX_POSTS_PER_HOUR);
            FloodControl.setOption(MVNForumGlobal.FLOOD_ID_LOGIN, MAX_LOGINS_PER_HOUR);
            FloodControl.setOption(MVNForumGlobal.FLOOD_ID_NEW_MESSAGE, MAX_MESSAGES_PER_HOUR);
        } catch (Exception e) {
            // Please note that for security reason, the full path file name is logged
            // to the log file only. And the reason that show on the web should only
            // show the filename only
            String message = "com.mvnforum.MVNForumConfig: Can't read the configuration file: '" + configFilename + "'. Make sure the file is in your CLASSPATH";
            log.error(message, e);
            m_shouldRun = false;
            m_reason = "com.mvnforum.MVNForumConfig: Can't read the configuration file: '" + OPTION_FILE_NAME + "'. Make sure the file is in your CLASSPATH";
        }
    }
}
... this post is sponsored by my books ...

#1 New Release!

FP Best Seller

 

new blog posts

 

Copyright 1998-2021 Alvin Alexander, alvinalexander.com
All Rights Reserved.

A percentage of advertising revenue from
pages under the /java/jwarehouse URI on this website is
paid back to open source projects.