001    /**
002     * Licensed to the Apache Software Foundation (ASF) under one or more
003     * contributor license agreements.  See the NOTICE file distributed with
004     * this work for additional information regarding copyright ownership.
005     * The ASF licenses this file to You under the Apache License, Version 2.0
006     * (the "License"); you may not use this file except in compliance with
007     * the License.  You may obtain a copy of the License at
008     *
009     *      http://www.apache.org/licenses/LICENSE-2.0
010     *
011     * Unless required by applicable law or agreed to in writing, software
012     * distributed under the License is distributed on an "AS IS" BASIS,
013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014     * See the License for the specific language governing permissions and
015     * limitations under the License.
016     */
017    package org.apache.camel.model;
018    
019    import javax.xml.bind.annotation.XmlAccessType;
020    import javax.xml.bind.annotation.XmlAccessorType;
021    import javax.xml.bind.annotation.XmlAttribute;
022    import javax.xml.bind.annotation.XmlRootElement;
023    import javax.xml.bind.annotation.XmlTransient;
024    
025    import org.apache.camel.Processor;
026    import org.apache.camel.component.bean.BeanProcessor;
027    import org.apache.camel.component.bean.RegistryBean;
028    import org.apache.camel.impl.RouteContext;
029    import org.apache.camel.util.CamelContextHelper;
030    import org.apache.camel.util.ObjectHelper;
031    
032    /**
033     * @version $Revision: 36321 $
034     */
035    @XmlRootElement(name = "bean")
036    @XmlAccessorType(XmlAccessType.FIELD)
037    public class BeanRef extends OutputType<ProcessorType> {
038        @XmlAttribute(required = false)
039        private String ref;
040        @XmlAttribute(required = false)
041        private String method;
042        @XmlAttribute(required = false)
043        private Class beanType;
044        @XmlTransient
045        private Object bean;
046    
047        public BeanRef() {
048        }
049    
050        public BeanRef(String ref) {
051            this.ref = ref;
052        }
053    
054        public BeanRef(String ref, String method) {
055            this.ref = ref;
056            this.method = method;
057        }
058    
059        @Override
060        public String toString() {
061            return "Bean[" + getLabel() + "]";
062        }
063    
064        public String getRef() {
065            return ref;
066        }
067    
068        public void setRef(String ref) {
069            this.ref = ref;
070        }
071    
072        public String getMethod() {
073            return method;
074        }
075    
076        public void setMethod(String method) {
077            this.method = method;
078        }
079    
080        public void setBean(Object bean) {
081            this.bean = bean;
082        }
083    
084        public Class getBeanType() {
085            return beanType;
086        }
087    
088        public void setBeanType(Class beanType) {
089            this.beanType = beanType;
090        }
091    
092        @Override
093        public Processor createProcessor(RouteContext routeContext) {
094            BeanProcessor answer;
095            if (ref != null) {
096                answer = new BeanProcessor(new RegistryBean(routeContext.getCamelContext(), ref));
097            } else {
098                if (bean == null) {
099                    ObjectHelper.notNull(beanType, "bean, ref or beanType");
100                    bean = CamelContextHelper.newInstance(routeContext.getCamelContext(), beanType);
101                }
102                answer = new BeanProcessor(bean, routeContext.getCamelContext());
103            }
104            if (method != null) {
105                answer.setMethod(method);
106            }
107            return answer;
108        }
109    
110        @Override
111        public String getLabel() {
112            if (ref != null) {
113                String methodText = "";
114                if (method != null) {
115                    methodText = " method: " + method;
116                }
117                return "ref: " + ref + methodText;
118            } else if (bean != null) {
119                return bean.toString();
120            } else if (beanType != null) {
121                return beanType.getName();
122            } else {
123                return "";
124            }
125        }
126    }