View Javadoc

1   /****************************************************************
2    * Licensed to the Apache Software Foundation (ASF) under one   *
3    * or more contributor license agreements.  See the NOTICE file *
4    * distributed with this work for additional information        *
5    * regarding copyright ownership.  The ASF licenses this file   *
6    * to you under the Apache License, Version 2.0 (the            *
7    * "License"); you may not use this file except in compliance   *
8    * with the License.  You may obtain a copy of the License at   *
9    *                                                              *
10   *   http://www.apache.org/licenses/LICENSE-2.0                 *
11   *                                                              *
12   * Unless required by applicable law or agreed to in writing,   *
13   * software distributed under the License is distributed on an  *
14   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
15   * KIND, either express or implied.  See the License for the    *
16   * specific language governing permissions and limitations      *
17   * under the License.                                           *
18   ****************************************************************/
19  
20  
21  
22  package org.apache.mailet.base;
23  
24  import org.apache.mailet.MailetConfig;
25  
26  
27  /**
28   * Collects utility methods.
29   */
30  public class MailetUtil {
31      
32      /**
33       * <p>This takes the subject string and reduces (normailzes) it.
34       * Multiple "Re:" entries are reduced to one, and capitalized.  The
35       * prefix is always moved/placed at the beginning of the line, and
36       * extra blanks are reduced, so that the output is always of the
37       * form:</p>
38       * <code>
39       * &lt;prefix&gt; + &lt;one-optional-"Re:"*gt; + &lt;remaining subject&gt;
40       * </code>
41       * <p>I have done extensive testing of this routine with a standalone
42       * driver, and am leaving the commented out debug messages so that
43       * when someone decides to enhance this method, it can be yanked it
44       * from this file, embedded it with a test driver, and the comments
45       * enabled.</p>
46       */
47      public static String normalizeSubject(String subj, String prefix) {
48          StringBuffer subject = new StringBuffer(subj);
49          int prefixLength = prefix.length();
50  
51          // If the "prefix" is not at the beginning the subject line, remove it
52          int index = subject.indexOf(prefix);
53          if (index != 0) {
54  
55              if (index > 0) {
56                  subject.delete(index, index + prefixLength);
57              }
58              subject.insert(0, prefix); // insert prefix at the front
59          }
60  
61          // Replace Re: with RE:
62          String match = "Re:";
63          index = subject.indexOf(match, prefixLength);
64  
65          while(index > -1) {
66              subject.replace(index, index + match.length(), "RE:");
67              index = subject.indexOf(match, prefixLength);
68          }
69  
70          // Reduce them to one at the beginning
71          match ="RE:";
72          int indexRE = subject.indexOf(match, prefixLength) + match.length();
73          index = subject.indexOf(match, indexRE);
74          while(index > 0) {    
75              subject.delete(index, index + match.length());
76              index = subject.indexOf(match, indexRE);
77          }
78  
79          // Reduce blanks
80          match = "  ";
81          index = subject.indexOf(match, prefixLength);
82          while(index > -1) {
83              subject.replace(index, index + match.length(), " ");
84              index = subject.indexOf(match, prefixLength);
85          }
86          return subject.toString();
87      }
88  
89      
90      /**
91       * <p>Gets a boolean valued init parameter.</p>
92       * @param config not null
93       * @param name name of the init parameter to be queried
94       * @param defaultValue this value will be substituted when the named value
95       * cannot be parse or when the init parameter is absent
96       * @return true when the init parameter is <code>true</code> (ignoring case);
97       * false when the init parameter is <code>false</code> (ignoring case);
98       * otherwise the default value
99       */
100     public static boolean getInitParameter(MailetConfig config, String name, boolean defaultValue) {
101         final String value = config.getInitParameter(name);
102         final boolean result;
103         if ("true".equalsIgnoreCase(value)) {
104             result = true;
105         } else if ("false".equalsIgnoreCase(value)){
106             result = false;
107         } else {
108             result = defaultValue;
109         }
110         return result;
111     }
112 }