001
002package gudusoft.gsqlparser.pp.stmtformatter.type;
003
004import gudusoft.gsqlparser.TCustomSqlStatement;
005import gudusoft.gsqlparser.nodes.TParseTreeNode;
006import gudusoft.gsqlparser.pp.mediator.MediatorFactory;
007import gudusoft.gsqlparser.pp.mediator.type.KeywordAlignMediator;
008import gudusoft.gsqlparser.pp.para.GFmtOpt;
009import gudusoft.gsqlparser.pp.para.GFmtOptFactory;
010import gudusoft.gsqlparser.pp.processor.type.comm.AbstractProcessor;
011
012import java.util.ArrayList;
013import java.util.List;
014
015/**
016 * the base class for all statment formatters
017 * 
018 * @author zhoujun
019 * 
020 */
021public class AbstractStmtFormatter<E extends TCustomSqlStatement>
022{
023
024        /**
025         * the expression processor for all formatter
026         */
027        private List<AbstractProcessor> expressionProcessors;
028
029        /**
030         * other spercial processors
031         */
032        private List<AbstractProcessor> specialProcessors;
033
034        private String sessionId;
035
036        public GFmtOpt getOption( )
037        {
038                return GFmtOptFactory.newInstance( sessionId );
039        }
040
041        /**
042         * format statement
043         * 
044         * @param stmt
045         */
046        public void format( E stmt )
047        {
048                this.beforeFormat( stmt );
049                this.doFormat( stmt );
050                this.afterFormat( stmt );
051        }
052
053        protected void beforeFormat( E stmt )
054        {
055                KeywordAlignMediator mediator = MediatorFactory.getMediator( KeywordAlignMediator.class,
056                                this.sessionId );
057                mediator.increaseLevel( );
058        }
059
060        protected void doFormat( E stmt )
061        {
062
063        }
064
065        protected void afterFormat( E stmt )
066        {
067                KeywordAlignMediator mediator = MediatorFactory.getMediator( KeywordAlignMediator.class,
068                                this.sessionId );
069                mediator.decreaseLevel( );
070        }
071
072        /**
073         * run the processors
074         * 
075         * @param processors
076         */
077        protected void runProcessor( List<AbstractProcessor> processors,
078                        TParseTreeNode node )
079        {
080                if ( processors == null || processors.size( ) == 0 )
081                {
082                        return;
083                }
084
085                for ( int i = 0; i < processors.size( ); i++ )
086                {
087                        processors.get( i ).beforeProcess( node );
088                }
089
090                for ( int i = 0; i < processors.size( ); i++ )
091                {
092                        processors.get( i ).process( node );
093                }
094
095                for ( int i = processors.size( ) - 1; i >= 0; i-- )
096                {
097                        processors.get( i ).afterProcess( node );
098                }
099
100        }
101
102        public void addExpressionProcessor( AbstractProcessor p )
103        {
104                if ( this.expressionProcessors == null )
105                {
106                        this.expressionProcessors = new ArrayList<AbstractProcessor>( );
107                }
108                this.expressionProcessors.add( p );
109        }
110
111        public List<AbstractProcessor> getExpressionProcessors( )
112        {
113                if ( this.expressionProcessors == null )
114                {
115                        this.expressionProcessors = new ArrayList<AbstractProcessor>( );
116                }
117                return this.expressionProcessors;
118        }
119
120        /**
121         * add some special processors
122         * 
123         * @param p
124         */
125        public void addSpecialProcessor( AbstractProcessor p )
126        {
127                if ( this.specialProcessors == null )
128                {
129                        this.specialProcessors = new ArrayList<AbstractProcessor>( );
130                }
131                this.specialProcessors.add( p );
132        }
133
134        /**
135         * get the special processors
136         * 
137         * @return
138         */
139        public List<AbstractProcessor> getSpecialProcessors( )
140        {
141                if ( this.specialProcessors == null )
142                {
143                        this.specialProcessors = new ArrayList<AbstractProcessor>( );
144                }
145                return this.specialProcessors;
146        }
147
148        public String getSessionId( )
149        {
150                return sessionId;
151        }
152
153        public void setSessionId( String sessionId )
154        {
155                this.sessionId = sessionId;
156        }
157}