001    // Copyright 2004, 2005 The Apache Software Foundation
002    //
003    // Licensed under the Apache License, Version 2.0 (the "License");
004    // you may not use this file except in compliance with the License.
005    // You may obtain a copy of the License at
006    //
007    //     http://www.apache.org/licenses/LICENSE-2.0
008    //
009    // Unless required by applicable law or agreed to in writing, software
010    // distributed under the License is distributed on an "AS IS" BASIS,
011    // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
012    // See the License for the specific language governing permissions and
013    // limitations under the License.
014    
015    package org.apache.hivemind.impl;
016    
017    import java.util.List;
018    
019    import org.apache.hivemind.InterceptorStack;
020    import org.apache.hivemind.ServiceInterceptorFactory;
021    import org.apache.hivemind.internal.Module;
022    import org.apache.hivemind.internal.ServiceInterceptorContribution;
023    import org.apache.hivemind.internal.ServicePoint;
024    import org.apache.hivemind.schema.Schema;
025    import org.apache.hivemind.util.ToStringBuilder;
026    
027    /**
028     * Implementation of {@link org.apache.hivemind.internal.ServiceInterceptorContribution}.
029     * 
030     * @author Howard Lewis Ship
031     */
032    
033    public final class ServiceInterceptorContributionImpl extends BaseLocatable implements
034            ServiceInterceptorContribution
035    {
036        private String _factoryServiceId;
037    
038        private Module _contributingModule;
039    
040        private List _parameters;
041    
042        private List _convertedParameters;
043    
044        private ServiceInterceptorFactory _factory;
045    
046        private String _precedingInterceptorIds;
047    
048        private String _followingInterceptorIds;
049    
050        private String _name;
051        
052        public String toString()
053        {
054            ToStringBuilder builder = new ToStringBuilder(this);
055            builder.append("factoryServiceId", _factoryServiceId);
056            builder.append("parameters", _parameters);
057            builder.append("precedingInterceptorIds", _precedingInterceptorIds);
058            builder.append("followingInterceptorIds", _followingInterceptorIds);
059            builder.append("name", _name );
060            return builder.toString();
061        }
062    
063        
064        /**
065         * @return Returns the name.
066         */
067        public String getName()
068        {
069            if( _name == null )
070            {
071                return getFactoryServiceId();
072            }
073            return _name;
074        }
075        
076        public void setName( String name )
077        {
078            _name = name;
079        }
080        
081        public String getFactoryServiceId()
082        {
083            return _factoryServiceId;
084        }
085    
086        public void setFactoryServiceId(String string)
087        {
088            _factoryServiceId = string;
089        }
090    
091        public void createInterceptor(InterceptorStack stack)
092        {
093            setup();
094    
095            _factory.createInterceptor(stack, _contributingModule, _convertedParameters);
096        }
097    
098        private synchronized void setup()
099        {
100            if (_factory == null)
101            {
102                ServicePoint factoryPoint = _contributingModule.getServicePoint(_factoryServiceId);
103    
104                _factory = (ServiceInterceptorFactory) factoryPoint
105                        .getService(ServiceInterceptorFactory.class);
106    
107                Schema schema = factoryPoint.getParametersSchema();
108    
109                SchemaProcessorImpl processor = new SchemaProcessorImpl(factoryPoint.getErrorLog(),
110                        schema);
111    
112                processor.process(_parameters, _contributingModule);
113    
114                _convertedParameters = processor.getElements();
115            }
116        }
117    
118        public void setContributingModule(Module module)
119        {
120            _contributingModule = module;
121        }
122    
123        public void setParameters(List list)
124        {
125            _parameters = list;
126        }
127    
128        public String getFollowingInterceptorIds()
129        {
130            return _followingInterceptorIds;
131        }
132    
133        public String getPrecedingInterceptorIds()
134        {
135            return _precedingInterceptorIds;
136        }
137    
138        public void setFollowingInterceptorIds(String string)
139        {
140            _followingInterceptorIds = string;
141        }
142    
143        public void setPrecedingInterceptorIds(String string)
144        {
145            _precedingInterceptorIds = string;
146        }
147    
148    }