You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mina.apache.org by ng...@apache.org on 2008/10/05 23:11:37 UTC
svn commit: r701887 - in /mina/ftpserver/trunk/core/src:
main/java/org/apache/ftpserver/ main/java/org/apache/ftpserver/config/spring/
main/java/org/apache/ftpserver/message/
main/java/org/apache/ftpserver/message/impl/
test/java/org/apache/ftpserver/c...
Author: ngn
Date: Sun Oct 5 14:11:36 2008
New Revision: 701887
URL: http://svn.apache.org/viewvc?rev=701887&view=rev
Log:
Make message resource immutable (FTPSERVER-187)
Added:
mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/message/MessageResourceFactory.java (with props)
Modified:
mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/DefaultFtpServerContext.java
mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/config/spring/ServerBeanDefinitionParser.java
mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/message/MessageResource.java
mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/message/impl/DefaultMessageResource.java
mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/clienttests/LangTest.java
Modified: mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/DefaultFtpServerContext.java
URL: http://svn.apache.org/viewvc/mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/DefaultFtpServerContext.java?rev=701887&r1=701886&r2=701887&view=diff
==============================================================================
--- mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/DefaultFtpServerContext.java (original)
+++ mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/DefaultFtpServerContext.java Sun Oct 5 14:11:36 2008
@@ -37,7 +37,7 @@
import org.apache.ftpserver.listener.Listener;
import org.apache.ftpserver.listener.ListenerFactory;
import org.apache.ftpserver.message.MessageResource;
-import org.apache.ftpserver.message.impl.DefaultMessageResource;
+import org.apache.ftpserver.message.MessageResourceFactory;
import org.apache.ftpserver.usermanager.BaseUser;
import org.apache.ftpserver.usermanager.ConcurrentLoginPermission;
import org.apache.ftpserver.usermanager.PropertiesUserManager;
@@ -57,7 +57,7 @@
private final Logger LOG = LoggerFactory
.getLogger(DefaultFtpServerContext.class);
- private MessageResource messageResource = new DefaultMessageResource();
+ private MessageResource messageResource = new MessageResourceFactory().createMessageResource();
private UserManager userManager = new PropertiesUserManager();
Modified: mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/config/spring/ServerBeanDefinitionParser.java
URL: http://svn.apache.org/viewvc/mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/config/spring/ServerBeanDefinitionParser.java?rev=701887&r1=701886&r2=701887&view=diff
==============================================================================
--- mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/config/spring/ServerBeanDefinitionParser.java (original)
+++ mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/config/spring/ServerBeanDefinitionParser.java Sun Oct 5 14:11:36 2008
@@ -27,7 +27,7 @@
import org.apache.ftpserver.FtpServer;
import org.apache.ftpserver.FtpServerConfigurationException;
import org.apache.ftpserver.message.MessageResource;
-import org.apache.ftpserver.message.impl.DefaultMessageResource;
+import org.apache.ftpserver.message.MessageResourceFactory;
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
import org.springframework.beans.factory.support.ManagedMap;
import org.springframework.beans.factory.xml.AbstractSingleBeanDefinitionParser;
@@ -140,7 +140,7 @@
final ParserContext parserContext,
final BeanDefinitionBuilder builder) {
- DefaultMessageResource mr = new DefaultMessageResource();
+ MessageResourceFactory mr = new MessageResourceFactory();
if (StringUtils.hasText(childElm.getAttribute("languages"))) {
String langString = childElm.getAttribute("languages");
@@ -156,7 +156,7 @@
}
- return mr;
+ return mr.createMessageResource();
}
/**
Modified: mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/message/MessageResource.java
URL: http://svn.apache.org/viewvc/mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/message/MessageResource.java?rev=701887&r1=701886&r2=701887&view=diff
==============================================================================
--- mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/message/MessageResource.java (original)
+++ mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/message/MessageResource.java Sun Oct 5 14:11:36 2008
@@ -21,8 +21,6 @@
import java.util.Properties;
-import org.apache.ftpserver.ftplet.FtpException;
-
/**
* This is message resource interface.
*
@@ -43,12 +41,6 @@
String getMessage(int code, String subId, String language);
/**
- * Save properties. This properties object contain all the available
- * messages. Old properties will not be overwritten.
- */
- void save(Properties prop, String language) throws FtpException;
-
- /**
* Get all the messages.
*/
Properties getMessages(String language);
Added: mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/message/MessageResourceFactory.java
URL: http://svn.apache.org/viewvc/mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/message/MessageResourceFactory.java?rev=701887&view=auto
==============================================================================
--- mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/message/MessageResourceFactory.java (added)
+++ mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/message/MessageResourceFactory.java Sun Oct 5 14:11:36 2008
@@ -0,0 +1,57 @@
+/*
+ * 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;
+
+import java.io.File;
+
+import org.apache.ftpserver.message.impl.DefaultMessageResource;
+
+/**
+ * Factory for creating message resource implementation
+ *
+ * @author The Apache MINA Project (dev@mina.apache.org)
+ * @version $Rev: 693604 $, $Date: 2008-09-09 22:55:19 +0200 (Tue, 09 Sep 2008) $
+ */
+public class MessageResourceFactory {
+
+ private String[] languages;
+
+ private File customMessageDirectory;
+
+ public MessageResource createMessageResource() {
+ return new DefaultMessageResource(languages, customMessageDirectory);
+ }
+
+ public String[] getLanguages() {
+ return languages;
+ }
+
+ public void setLanguages(String[] languages) {
+ this.languages = languages;
+ }
+
+ public File getCustomMessageDirectory() {
+ return customMessageDirectory;
+ }
+
+ public void setCustomMessageDirectory(File customMessageDirectory) {
+ this.customMessageDirectory = customMessageDirectory;
+ }
+}
Propchange: mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/message/MessageResourceFactory.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/message/impl/DefaultMessageResource.java
URL: http://svn.apache.org/viewvc/mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/message/impl/DefaultMessageResource.java?rev=701887&r1=701886&r2=701887&view=diff
==============================================================================
--- mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/message/impl/DefaultMessageResource.java (original)
+++ mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/message/impl/DefaultMessageResource.java Sun Oct 5 14:11:36 2008
@@ -21,18 +21,15 @@
import java.io.File;
import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
import java.io.InputStream;
-import java.io.OutputStream;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Properties;
import org.apache.ftpserver.FtpServerConfigurationException;
-import org.apache.ftpserver.ftplet.FtpException;
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;
@@ -41,6 +38,8 @@
* Class to get ftp server reply messages. This supports i18n. Basic message
* search path is:
*
+ * <strong>Internal class, do not use directly</strong>
+ *
* Custom Language Specific Messages -> Default Language Specific Messages ->
* Custom Common Messages -> Default Common Messages -> null (not found)
*
@@ -60,42 +59,16 @@
private File customMessageDirectory;
- private boolean isConfigured = false;
-
- private static class PropertiesPair {
- public Properties defaultProperties = new Properties();
-
- public Properties customProperties = new Properties();
- }
-
- public String[] getLanguages() {
- if (languages != null) {
- return languages.clone();
- } else {
- return null;
- }
- }
-
- public void setLanguages(String[] languages) {
- if (languages != null) {
+ /**
+ * Internal constructor, do not use directly. Use {@link MessageResourceFactory} instead.
+ */
+ public DefaultMessageResource(String[] languages,
+ File customMessageDirectory) {
+ this.customMessageDirectory = customMessageDirectory;
+ if(languages != null) {
this.languages = languages.clone();
- } else {
- this.languages = null;
}
- }
-
- public File getCustomMessageDirectory() {
- return customMessageDirectory;
- }
- public void setCustomMessageDirectory(File customMessageDirectory) {
- this.customMessageDirectory = customMessageDirectory;
- }
-
- /**
- * Configure - load properties file.
- */
- public void configure() {
// populate different properties
messages = new HashMap<String, PropertiesPair>();
if (languages != null) {
@@ -106,15 +79,13 @@
}
PropertiesPair pair = createPropertiesPair(null);
messages.put(null, pair);
+
}
- /**
- * Lazy init the user manager
- */
- private void lazyInit() {
- if (!isConfigured) {
- configure();
- }
+ private static class PropertiesPair {
+ public Properties defaultProperties = new Properties();
+
+ public Properties customProperties = new Properties();
}
/**
@@ -187,8 +158,6 @@
* Get the message. If the message not found, it will return null.
*/
public String getMessage(int code, String subId, String language) {
- lazyInit();
-
// find the message key
String key = String.valueOf(code);
if (subId != null) {
@@ -227,8 +196,6 @@
* Get all messages.
*/
public Properties getMessages(String language) {
- lazyInit();
-
Properties messages = new Properties();
// load properties sequentially
@@ -250,53 +217,6 @@
}
/**
- * Save properties in file.
- */
- public void save(Properties prop, String language) throws FtpException {
- lazyInit();
-
- // null properties - nothing to save
- if (prop == null) {
- return;
- }
-
- // empty properties - nothing to save
- if (prop.isEmpty()) {
- return;
- }
-
- // get custom resource file name
- File resourceFile = null;
- if (language == null) {
- resourceFile = new File(customMessageDirectory, "FtpStatus.gen");
- } else {
- language = language.toLowerCase();
- resourceFile = new File(customMessageDirectory, "FtpStatus_"
- + language + ".gen");
- }
-
- // save resource file
- OutputStream out = null;
- try {
- out = new FileOutputStream(resourceFile);
- prop.store(out, "Custom Messages");
- } catch (IOException ex) {
- LOG.error("MessageResourceImpl.save()", ex);
- throw new FtpException("MessageResourceImpl.save()", ex);
- } finally {
- IoUtils.close(out);
- }
-
- // assign new messages
- PropertiesPair pair = messages.get(language);
- if (pair == null) {
- pair = new PropertiesPair();
- messages.put(language, pair);
- }
- pair.customProperties = prop;
- }
-
- /**
* Dispose component - clear all maps.
*/
public void dispose() {
Modified: mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/clienttests/LangTest.java
URL: http://svn.apache.org/viewvc/mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/clienttests/LangTest.java?rev=701887&r1=701886&r2=701887&view=diff
==============================================================================
--- mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/clienttests/LangTest.java (original)
+++ mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/clienttests/LangTest.java Sun Oct 5 14:11:36 2008
@@ -19,9 +19,8 @@
package org.apache.ftpserver.clienttests;
-import org.apache.ftpserver.DefaultFtpServerContext;
import org.apache.ftpserver.FtpServer;
-import org.apache.ftpserver.message.impl.DefaultMessageResource;
+import org.apache.ftpserver.message.MessageResourceFactory;
/**
*
@@ -39,12 +38,10 @@
protected FtpServer createServer() throws Exception {
FtpServer server = super.createServer();
- DefaultFtpServerContext context = (DefaultFtpServerContext) server
- .getServerContext();
-
- DefaultMessageResource resource = (DefaultMessageResource) context
- .getMessageResource();
- resource.setLanguages(new String[] { "en", "zh-tw" });
+ MessageResourceFactory factory = new MessageResourceFactory();
+ factory.setLanguages(new String[] { "en", "zh-tw" });
+ server.setMessageResource(factory.createMessageResource());
+
return server;
}