1 /************************************************************************
2 * Copyright (c) 2000-2006 The Apache Software Foundation. *
3 * All rights reserved. *
4 * ------------------------------------------------------------------- *
5 * Licensed under the Apache License, Version 2.0 (the "License"); you *
6 * may not use this file except in compliance with the License. You *
7 * may obtain a copy of the License at: *
8 * *
9 * http://www.apache.org/licenses/LICENSE-2.0 *
10 * *
11 * Unless required by applicable law or agreed to in writing, software *
12 * distributed under the License is distributed on an "AS IS" BASIS, *
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or *
14 * implied. See the License for the specific language governing *
15 * permissions and limitations under the License. *
16 ***********************************************************************/
17 package org.apache.james.transport;
18 import java.io.File;
19 import java.util.Vector;
20
21 import org.apache.avalon.framework.activity.Initializable;
22 import org.apache.avalon.framework.configuration.Configurable;
23 import org.apache.avalon.framework.configuration.Configuration;
24 import org.apache.avalon.framework.configuration.ConfigurationException;
25 import org.apache.avalon.framework.context.Context;
26 import org.apache.avalon.framework.context.ContextException;
27 import org.apache.avalon.framework.context.Contextualizable;
28 import org.apache.avalon.framework.logger.AbstractLogEnabled;
29 import org.apache.avalon.framework.service.DefaultServiceManager;
30 import org.apache.avalon.framework.service.ServiceException;
31 import org.apache.avalon.framework.service.ServiceManager;
32 import org.apache.avalon.framework.service.Serviceable;
33 import org.apache.mailet.MailetContext;
34
35 /***
36 *
37 * $Id: Loader.java 365943 2006-01-04 16:56:41 +0000 (mer, 04 gen 2006) bago $
38 */
39 public abstract class Loader extends AbstractLogEnabled implements Contextualizable, Serviceable, Configurable, Initializable {
40
41 protected String baseDirectory = null;
42 protected final String MAILET_PACKAGE = "mailetpackage";
43 protected final String MATCHER_PACKAGE = "matcherpackage";
44 /***
45 * The list of packages that may contain Mailets or matchers
46 */
47 protected Vector packages;
48
49 /***
50 * System service manager
51 */
52 private ServiceManager serviceManager;
53
54 /***
55 * Mailet context
56 */
57 protected MailetContext mailetContext;
58
59 /***
60 * @see org.apache.avalon.framework.context.Contextualizable#contextualize(Context)
61 */
62 public void contextualize(final Context context) throws ContextException
63 {
64 try
65 {
66 baseDirectory = ((File)context.get( "app.home") ).getCanonicalPath();
67 }
68 catch (Throwable e)
69 {
70 getLogger().error( "can't get base directory for mailet loader" );
71 throw new ContextException("can't contextualise mailet loader " + e.getMessage(), e);
72 }
73 }
74
75 protected void getPackages(Configuration conf, String packageType)
76 throws ConfigurationException {
77 packages = new Vector();
78 packages.addElement("");
79 final Configuration[] pkgConfs = conf.getChildren(packageType);
80 for (int i = 0; i < pkgConfs.length; i++) {
81 Configuration c = pkgConfs[i];
82 String packageName = c.getValue();
83 if (!packageName.endsWith(".")) {
84 packageName += ".";
85 }
86 packages.addElement(packageName);
87 }
88 }
89
90 /***
91 * @see org.apache.avalon.framework.service.Serviceable#service(org.apache.avalon.framework.service.ServiceManager)
92 */
93 public void service(ServiceManager sm) throws ServiceException {
94 serviceManager = new DefaultServiceManager(sm);
95 }
96
97 /***
98 * @see org.apache.avalon.framework.activity.Initializable#initialize()
99 */
100 public void initialize() throws Exception {
101 mailetContext = (MailetContext) serviceManager.lookup("org.apache.mailet.MailetContext");
102 }
103
104 /***
105 * @see org.apache.avalon.framework.configuration.Configurable#configure(org.apache.avalon.framework.configuration.Configuration)
106 */
107 public abstract void configure(Configuration arg0) throws ConfigurationException;
108
109 }