001    /**
002     *
003     * Licensed to the Apache Software Foundation (ASF) under one or more
004     * contributor license agreements.  See the NOTICE file distributed with
005     * this work for additional information regarding copyright ownership.
006     * The ASF licenses this file to You under the Apache License, Version 2.0
007     * (the "License"); you may not use this file except in compliance with
008     * the License.  You may obtain a copy of the License at
009     *
010     * http://www.apache.org/licenses/LICENSE-2.0
011     *
012     * Unless required by applicable law or agreed to in writing, software
013     * distributed under the License is distributed on an "AS IS" BASIS,
014     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
015     * See the License for the specific language governing permissions and
016     * limitations under the License.
017     */
018    package org.apache.camel.component.mail;
019    
020    import org.apache.camel.CamelContext;
021    import org.apache.camel.Endpoint;
022    import org.apache.camel.impl.DefaultComponent;
023    import org.apache.camel.util.IntrospectionSupport;
024    
025    import java.util.Map;
026    import java.net.URI;
027    import java.net.URL;
028    
029    /**
030     * @version $Revision:520964 $
031     */
032    public class MailComponent extends DefaultComponent<MailExchange> {
033        public static final String QUEUE_PREFIX = "queue:";
034        public static final String TOPIC_PREFIX = "topic:";
035        private MailConfiguration configuration;
036    
037        /**
038         * Static builder method
039         */
040        public static MailComponent mailComponent() {
041            return new MailComponent();
042        }
043    
044        /**
045         * Static builder method
046         */
047        public static MailComponent mailComponent(MailConfiguration configuration) {
048            return new MailComponent(configuration);
049        }
050    
051        public MailComponent() {
052            this.configuration = new MailConfiguration();
053        }
054    
055        public MailComponent(MailConfiguration configuration) {
056            this.configuration = configuration;
057        }
058    
059        public MailComponent(CamelContext context) {
060            super(context);
061            this.configuration = new MailConfiguration();
062        }
063    
064        @Override
065        protected Endpoint<MailExchange> createEndpoint(String uri, String remaining, Map parameters) throws Exception {
066    
067            MailConfiguration config = getConfiguration().copy();
068            config.configure(new URI(uri));
069    
070            // lets make sure we copy the configuration as each endpoint can customize its own version
071            MailEndpoint endpoint = new MailEndpoint(uri, this, config);
072    
073            IntrospectionSupport.setProperties(endpoint.getConfiguration(), parameters);
074            return endpoint;
075        }
076    
077        public MailConfiguration getConfiguration() {
078            return configuration;
079        }
080    
081        /**
082         * Sets the Mail configuration
083         *
084         * @param configuration the configuration to use by default for endpoints
085         */
086        public void setConfiguration(MailConfiguration configuration) {
087            this.configuration = configuration;
088        }
089    
090        /**
091         * A strategy method allowing the URI destination to be translated into the actual Mail destination name
092         * (say by looking up in JNDI or something)
093         */
094        protected String convertPathToActualDestination(String path) {
095            return path;
096        }
097    }