001    /*
002     * Copyright (C) The Apache Software Foundation. All rights reserved.
003     *
004     * This software is published under the terms of the Apache Software License
005     * version 1.1, a copy of which has been included with this distribution in
006     * the LICENSE file.
007     * 
008     * $Id: MessengerDigester.java 155459 2005-02-26 13:24:44Z dirkv $
009     */
010    package org.apache.commons.messenger;
011    
012    import org.apache.commons.digester.Digester;
013    
014    /** <p><code>MessengerDigester</code> is a digester of Messenger objects so 
015      * that JMS Messengers can be created from an XML config file.</p>
016      *
017      * @author <a href="mailto:jstrachan@apache.org">James Strachan</a>
018      * @version $Revision: 155459 $
019      */
020    public class MessengerDigester extends Digester {
021    
022        // default implementation classes
023        private String messengerManagerClass = "org.apache.commons.messenger.MessengerManager";
024        private String messengerClass = "org.apache.commons.messenger.DefaultMessenger";
025        private String xaMessengerClass = "org.apache.commons.messenger.XAMessenger";
026        private String sessionFactory = "org.apache.commons.messenger.SessionFactory";
027        private String connectionFactory = "org.apache.commons.messenger.DummyConnectionFactory";
028        private String jndiSessionFactory = "org.apache.commons.messenger.JNDISessionFactory";
029    
030        
031        public MessengerDigester() {
032        }
033        
034        // Implementation methods
035        //-------------------------------------------------------------------------    
036    
037        /** Configure the parsing rules that will be used to process 
038         * the cache config file
039         */
040        protected void configure() {
041            if (configured) {
042                return;
043            }
044            else {
045                configured = true;
046            }
047            
048            addObjectCreate( "manager", messengerManagerClass, "className" );
049            addSetProperties( "manager" );
050    
051                    String path = "manager/messenger";    
052            addObjectCreate( path, messengerClass, "className" );
053            addSetProperties( path );
054            
055            addSetNext( path, "addMessenger",
056               "org.apache.commons.messenger.Messenger"
057            );        
058    
059                    addMessengerPaths(path);
060                    
061                    path = "manager/xaMessenger";    
062            addObjectCreate( path, xaMessengerClass, "className" );
063            addSetProperties( path );
064            
065            addSetNext( path, "addMessenger",
066               "org.apache.commons.messenger.Messenger"
067            );        
068    
069                    addMessengerPaths(path);
070        }
071        
072        protected void addMessengerPaths(String root) {
073    
074                    String path = root + "/factory";        
075            addObjectCreate( path, sessionFactory, "className" );
076            addSetProperties( path );
077            addSetNext( path, "setSessionFactory",
078               "org.apache.commons.messenger.SessionFactory"
079            );
080            addCallMethod( path + "/property", "addProperty", 2);
081            addCallParam( path + "/property/name", 0 );
082            addCallParam( path + "/property/value", 1 );
083            
084            path = root + "/factory/connectionFactory";       
085            addObjectCreate( path, connectionFactory, "className" );
086            addSetProperties( path );
087            addSetNext( path, "setConnectionFactory",
088               "javax.jms.ConnectionFactory"
089            );
090    
091            path = root + "/jndi";        
092            addObjectCreate( path, jndiSessionFactory, "className" );
093            addSetProperties( path );
094            
095            addSetNext( path, "setSessionFactory",
096               "org.apache.commons.messenger.SessionFactory"
097            );
098                    
099            addCallMethod( path + "/property", "addProperty", 2);
100            addCallParam( path + "/property/name", 0 );
101            addCallParam( path + "/property/value", 1 );
102        }
103    }