001    package org.apache.camel.spring.builder;
002    
003    import java.util.ArrayList;
004    
005    import org.apache.camel.builder.RouteBuilder;
006    import org.springframework.beans.BeansException;
007    import org.springframework.beans.factory.BeanFactory;
008    import org.springframework.beans.factory.BeanFactoryAware;
009    import org.springframework.beans.factory.FactoryBean;
010    
011    public class RouteBuilderFactory implements FactoryBean, BeanFactoryAware {
012            private ArrayList<BuilderStatement> routes;
013            private boolean singleton;
014            private BeanFactory beanFactory;
015    
016            class SpringRouteBuilder extends RouteBuilder {
017                    private ArrayList<BuilderStatement> routes;
018                    private BeanFactory beanFactory;
019    
020                    @Override
021                    public void configure() {
022                            for (BuilderStatement routeFactory : routes) {
023                                    routeFactory.create(beanFactory, this);
024                            }
025                    }
026    
027                    public ArrayList<BuilderStatement> getRoutes() {
028                            return routes;
029                    }
030                    public void setRoutes(ArrayList<BuilderStatement> routes) {
031                            this.routes = routes;
032                    }
033    
034                    public void setBeanFactory(BeanFactory beanFactory) {
035                            this.beanFactory = beanFactory;
036                    }
037            }
038            
039            public Object getObject() throws Exception {
040                    SpringRouteBuilder builder = new SpringRouteBuilder();
041                    builder.setBeanFactory(beanFactory);
042                    builder.setRoutes(routes);
043                    return builder;
044            }
045    
046            public Class getObjectType() {
047                    return SpringRouteBuilder.class;
048            }
049    
050            public boolean isSingleton() {
051                    return singleton;
052            }
053            public void setSingleton(boolean singleton) {
054                    this.singleton = singleton;
055            }
056    
057            public ArrayList<BuilderStatement> getRoutes() {
058                    return routes;
059            }
060            public void setRoutes(ArrayList<BuilderStatement> routes) {
061                    this.routes = routes;
062            }
063    
064            public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
065                    this.beanFactory = beanFactory;
066            }
067    
068    }