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}