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.james.transport;
23
24 import org.apache.avalon.framework.configuration.Configuration;
25 import org.apache.avalon.framework.configuration.ConfigurationException;
26 import org.apache.mailet.MailetConfig;
27 import org.apache.mailet.MailetContext;
28
29 import java.util.Iterator;
30
31 /**
32 * Implements the configuration object for a Mailet.
33 *
34 * @version CVS $Revision: 684700 $ $Date: 2008-08-11 11:27:40 +0100 (Mon, 11 Aug 2008) $
35 */
36 public class MailetConfigImpl implements MailetConfig {
37
38 /**
39 * The mailet MailetContext
40 */
41 private MailetContext mailetContext;
42
43 /**
44 * The mailet name
45 */
46 private String name;
47
48 //This would probably be better.
49 //Properties params = new Properties();
50 //Instead, we're tied to the Configuration object
51 /**
52 * The mailet Avalon Configuration
53 */
54 private Configuration configuration;
55
56 /**
57 * No argument constructor for this object.
58 */
59 public MailetConfigImpl() {
60 }
61
62 /**
63 * Get the value of an parameter stored in this MailetConfig. Multi-valued
64 * parameters are returned as a comma-delineated string.
65 *
66 * @param name the name of the parameter whose value is to be retrieved.
67 *
68 * @return the parameter value
69 */
70 public String getInitParameter(String name) {
71 try {
72 String result = null;
73
74 final Configuration[] values = configuration.getChildren( name );
75 for ( int i = 0; i < values.length; i++ ) {
76 if (result == null) {
77 result = "";
78 } else {
79 result += ",";
80 }
81 Configuration conf = values[i];
82 result += conf.getValue();
83 }
84 return result;
85 } catch (ConfigurationException ce) {
86 throw new RuntimeException("Embedded configuration exception was: " + ce.getMessage());
87 }
88
89 }
90
91 /**
92 * Returns an iterator over the set of configuration parameter names.
93 *
94 * @return an iterator over the set of configuration parameter names.
95 */
96 public Iterator getInitParameterNames() {
97 return new Iterator () {
98 Configuration[] children;
99 int count = 0;
100 {
101 children = configuration.getChildren();
102 }
103
104 public boolean hasNext() {
105 return count < children.length;
106 }
107
108 public Object next() {
109 return children[count++].getName();
110 }
111
112 public void remove() {
113 throw new UnsupportedOperationException ("remove not supported");
114 }
115 };
116 }
117
118 /**
119 * Get the value of an (XML) attribute stored in this MailetConfig.
120 *
121 * @param name the name of the attribute whose value is to be retrieved.
122 *
123 * @return the attribute value or null if missing
124 */
125 public String getInitAttribute(String name) {
126 return configuration.getAttribute(name, null);
127 }
128
129 /**
130 * Get the mailet's MailetContext object.
131 *
132 * @return the MailetContext for the mailet
133 */
134 public MailetContext getMailetContext() {
135 return mailetContext;
136 }
137
138 /**
139 * Set the mailet's Avalon Configuration object.
140 *
141 * @param newContext the MailetContext for the mailet
142 */
143 public void setMailetContext(MailetContext newContext) {
144 mailetContext = newContext;
145 }
146
147 /**
148 * Set the Avalon Configuration object for the mailet.
149 *
150 * @param newConfiguration the new Configuration for the mailet
151 */
152 public void setConfiguration(Configuration newConfiguration) {
153 configuration = newConfiguration;
154 }
155
156 /**
157 * Get the name of the mailet.
158 *
159 * @return the name of the mailet
160 */
161 public String getMailetName() {
162 return name;
163 }
164
165 /**
166 * Set the name for the mailet.
167 *
168 * @param newName the new name for the mailet
169 */
170 public void setMailetName(String newName) {
171 name = newName;
172 }
173 }