KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > jacorb > notification > filter > DefaultFilterFactoryDelegate


1 /*
2  * JacORB - a free Java ORB
3  *
4  * Copyright (C) 1999-2004 Gerald Brose
5  *
6  * This library is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Library General Public
8  * License as published by the Free Software Foundation; either
9  * version 2 of the License, or (at your option) any later version.
10  *
11  * This library is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14  * Library General Public License for more details.
15  *
16  * You should have received a copy of the GNU Library General Public
17  * License along with this library; if not, write to the Free
18  * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
19  *
20  */

21
22 package org.jacorb.notification.filter;
23
24 import java.util.ArrayList JavaDoc;
25 import java.util.Collections JavaDoc;
26 import java.util.Iterator JavaDoc;
27 import java.util.List JavaDoc;
28
29 import org.apache.avalon.framework.configuration.Configuration;
30 import org.apache.avalon.framework.configuration.ConfigurationException;
31 import org.apache.avalon.framework.logger.Logger;
32 import org.jacorb.notification.IContainer;
33 import org.jacorb.notification.conf.Attributes;
34 import org.jacorb.notification.filter.etcl.ETCLFilter;
35 import org.jacorb.notification.interfaces.Disposable;
36 import org.jacorb.notification.util.LogUtil;
37 import org.jacorb.util.ObjectUtil;
38 import org.omg.CORBA.Any JavaDoc;
39 import org.omg.CORBA.ORB JavaDoc;
40 import org.omg.CosNotifyFilter.InvalidGrammar;
41 import org.picocontainer.MutablePicoContainer;
42 import org.picocontainer.PicoContainer;
43 import org.picocontainer.defaults.ConstructorInjectionComponentAdapter;
44 import org.picocontainer.defaults.DefaultPicoContainer;
45
46 /**
47  * @author Alphonse Bendt
48  * @version $Id: DefaultFilterFactoryDelegate.java,v 1.2 2005/03/31 20:19:17 alphonse.bendt Exp $
49  */

50 public class DefaultFilterFactoryDelegate implements IFilterFactoryDelegate, Disposable
51 {
52     private final List JavaDoc availableFilters_ = new ArrayList JavaDoc();
53
54     private final MutablePicoContainer filterPico_;
55
56     private final ORB JavaDoc orb_;
57     
58     private final Logger logger_;
59     
60     // //////////////////////////////////////
61

62     public DefaultFilterFactoryDelegate(IContainer container, Configuration config)
63     {
64         PicoContainer parent = container.getContainer();
65
66         if (parent != null)
67         {
68             filterPico_ = new DefaultPicoContainer(parent);
69         }
70         else
71         {
72             filterPico_ = new DefaultPicoContainer();
73         }
74         
75         orb_ = (ORB JavaDoc) parent.getComponentInstanceOfType(ORB JavaDoc.class);
76
77         logger_ = LogUtil.getLogger(config, getClass().getName());
78         
79         loadFilterPlugins(config);
80     }
81
82     public void dispose()
83     {
84         filterPico_.dispose();
85     }
86     
87     private void loadFilterPlugins(Configuration conf)
88     {
89         // add default ETCL Filter
90
filterPico_.registerComponent(new ConstructorInjectionComponentAdapter(
91                 ETCLFilter.CONSTRAINT_GRAMMAR, ETCLFilter.class));
92
93         availableFilters_.add(ETCLFilter.CONSTRAINT_GRAMMAR);
94
95         Iterator JavaDoc i = getAttributeNamesWithPrefix(conf, Attributes.FILTER_PLUGIN_PREFIX).iterator();
96
97         while (i.hasNext())
98         {
99             String JavaDoc key = (String JavaDoc) i.next();
100             String JavaDoc _clazzName = null;
101             try
102             {
103                 String JavaDoc _grammar = key.substring(Attributes.FILTER_PLUGIN_PREFIX.length() + 1);
104
105                 logger_.info("Loading Filterplugin for Grammar: " + _grammar);
106
107                 _clazzName = conf.getAttribute(key);
108
109                 Class JavaDoc _clazz = ObjectUtil.classForName(_clazzName);
110
111                 filterPico_.registerComponent(new ConstructorInjectionComponentAdapter(_clazzName,
112                         _clazz));
113
114                 availableFilters_.add(_grammar);
115             } catch (ConfigurationException e)
116             {
117                 logger_.error("Unable to access attribute: " + key, e);
118             } catch (ClassNotFoundException JavaDoc e)
119             {
120                 logger_.error("Property " + key + ": class " + _clazzName + " is unknown", e);
121             }
122         }
123     }
124
125     private String JavaDoc getAvailableConstraintLanguages()
126     {
127         Iterator JavaDoc i = availableFilters_.iterator();
128
129         StringBuffer JavaDoc b = new StringBuffer JavaDoc((String JavaDoc) i.next());
130
131         while (i.hasNext())
132         {
133             b.append(", ");
134             b.append(i.next());
135         }
136
137         return b.toString();
138     }
139
140     public AbstractFilter create_filter_servant(String JavaDoc grammar) throws InvalidGrammar
141     {
142         AbstractFilter _filterServant = (AbstractFilter) filterPico_.getComponentInstance(grammar);
143
144         if (_filterServant == null)
145         {
146             logger_.error("unable to create FilterServant as grammar " + grammar + " is unknown");
147
148             throw new InvalidGrammar("Constraint Language '" + grammar
149                     + "' is not supported. Try one of the following: "
150                     + getAvailableConstraintLanguages());
151
152         }
153
154         return _filterServant;
155     }
156
157     public MappingFilterImpl create_mapping_filter_servant(Configuration config,
158             String JavaDoc grammar, Any JavaDoc any) throws InvalidGrammar
159     {
160         AbstractFilter _filter = create_filter_servant(grammar);
161         
162         return new MappingFilterImpl(orb_, config, _filter, any);
163     }
164
165     static List JavaDoc getAttributeNamesWithPrefix(Configuration configuration, String JavaDoc prefix)
166     {
167         final List JavaDoc _attributesWithPrefix = new ArrayList JavaDoc();
168
169         final String JavaDoc[] _allAttributes = configuration.getAttributeNames();
170
171         for (int x = 0; x < _allAttributes.length; ++x)
172         {
173             if (_allAttributes[x].startsWith(prefix))
174             {
175                 _attributesWithPrefix.add(_allAttributes[x]);
176             }
177         }
178
179         return Collections.unmodifiableList(_attributesWithPrefix);
180     }
181 }
182
Popular Tags