⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 defaultmessageresource.java

📁 JAVA FTP 上传下载 的源文件
💻 JAVA
字号:
/* * 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.ftpserver.message.impl;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;import java.net.URL;import java.util.Collections;import java.util.Enumeration;import java.util.HashMap;import java.util.Iterator;import java.util.List;import java.util.Map;import java.util.Properties;import org.apache.ftpserver.FtpServerConfigurationException;import org.apache.ftpserver.message.MessageResource;import org.apache.ftpserver.message.MessageResourceFactory;import org.apache.ftpserver.util.IoUtils;import org.slf4j.Logger;import org.slf4j.LoggerFactory;/** * <strong>Internal class, do not use directly.</strong> *  * Class to get FtpServer reply messages. This supports i18n. Basic message * search path is: *  * <strong><strong>Internal class, do not use directly.</strong></strong> *  * Custom Language Specific Messages -> Default Language Specific Messages -> * Custom Common Messages -> Default Common Messages -> null (not found) * * @author The Apache MINA Project (dev@mina.apache.org) * @version $Rev: 711534 $, $Date: 2008-11-05 09:48:47 +0100 (Wed, 05 Nov 2008) $ */public class DefaultMessageResource implements MessageResource {    private final Logger LOG = LoggerFactory            .getLogger(DefaultMessageResource.class);    private final static String RESOURCE_PATH = "org/apache/ftpserver/message/";    private List<String> languages;    private Map<String, PropertiesPair> messages;    /**     * Internal constructor, do not use directly. Use {@link MessageResourceFactory} instead.     */    public DefaultMessageResource(List<String> languages,            File customMessageDirectory) {        if(languages != null) {            this.languages = Collections.unmodifiableList(languages);        }        // populate different properties        messages = new HashMap<String, PropertiesPair>();        if (languages != null) {            for (String language : languages) {                PropertiesPair pair = createPropertiesPair(language, customMessageDirectory);                messages.put(language, pair);            }        }        PropertiesPair pair = createPropertiesPair(null, customMessageDirectory);        messages.put(null, pair);    }    private static class PropertiesPair {        public Properties defaultProperties = new Properties();        public Properties customProperties = new Properties();    }    /**     * Create Properties pair object. It stores the default and the custom     * messages.     */    private PropertiesPair createPropertiesPair(String lang, File customMessageDirectory) {        PropertiesPair pair = new PropertiesPair();        // load default resource        String defaultResourceName;        if (lang == null) {            defaultResourceName = RESOURCE_PATH + "FtpStatus.properties";        } else {            defaultResourceName = RESOURCE_PATH + "FtpStatus_" + lang                    + ".properties";        }        InputStream in = null;        try {            in = getClass().getClassLoader().getResourceAsStream(                    defaultResourceName);            if (in != null) {                try {                    pair.defaultProperties.load(in);                } catch (IOException e) {                    throw new FtpServerConfigurationException(                            "Failed to load messages from \"" + defaultResourceName + "\", file not found in classpath");                }            } else {                throw new FtpServerConfigurationException(                        "Failed to load messages from \"" + defaultResourceName + "\", file not found in classpath");            }        } finally {            IoUtils.close(in);        }        // load custom resource        File resourceFile = null;        if (lang == null) {            resourceFile = new File(customMessageDirectory, "FtpStatus.gen");        } else {            resourceFile = new File(customMessageDirectory, "FtpStatus_" + lang                    + ".gen");        }        in = null;        try {            if (resourceFile.exists()) {                in = new FileInputStream(resourceFile);                pair.customProperties.load(in);            }        } catch (Exception ex) {            LOG.warn("MessageResourceImpl.createPropertiesPair()", ex);            throw new FtpServerConfigurationException(                    "MessageResourceImpl.createPropertiesPair()", ex);        } finally {            IoUtils.close(in);        }        return pair;    }    /**     * Get all the available languages.     */    public List<String> getAvailableLanguages() {        if (languages == null) {            return null;        } else {            return Collections.unmodifiableList(languages);        }    }    /**     * Get the message. If the message not found, it will return null.     */    public String getMessage(int code, String subId, String language) {        // find the message key        String key = String.valueOf(code);        if (subId != null) {            key = key + '.' + subId;        }        // get language specific value        String value = null;        PropertiesPair pair = null;        if (language != null) {            language = language.toLowerCase();            pair = messages.get(language);            if (pair != null) {                value = pair.customProperties.getProperty(key);                if (value == null) {                    value = pair.defaultProperties.getProperty(key);                }            }        }        // if not available get the default value        if (value == null) {            pair = messages.get(null);            if (pair != null) {                value = pair.customProperties.getProperty(key);                if (value == null) {                    value = pair.defaultProperties.getProperty(key);                }            }        }        return value;    }    /**     * Get all messages.     */    public Map<String, String> getMessages(String language) {        Properties messages = new Properties();        // load properties sequentially        // (default,custom,default language,custom language)        PropertiesPair pair = this.messages.get(null);        if (pair != null) {            messages.putAll(pair.defaultProperties);            messages.putAll(pair.customProperties);        }        if (language != null) {            language = language.toLowerCase();            pair = this.messages.get(language);            if (pair != null) {                messages.putAll(pair.defaultProperties);                messages.putAll(pair.customProperties);            }        }                Map<String, String> result = new HashMap<String, String>();        for(Object key : messages.keySet()) {            result.put(key.toString(), messages.getProperty(key.toString()));        }                return Collections.unmodifiableMap(result);    }    /**     * Dispose component - clear all maps.     */    public void dispose() {        Iterator<String> it = messages.keySet().iterator();        while (it.hasNext()) {            String language = it.next();            PropertiesPair pair = messages.get(language);            pair.customProperties.clear();            pair.defaultProperties.clear();        }        messages.clear();    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -