001    /**
002     * Jetrix TetriNET Server
003     * Copyright (C) 2001-2003  Emmanuel Bourg
004     *
005     * This program is free software; you can redistribute it and/or
006     * modify it under the terms of the GNU General Public License
007     * as published by the Free Software Foundation; either version 2
008     * of the License, or (at your option) any later version.
009     *
010     * This program is distributed in the hope that it will be useful,
011     * but WITHOUT ANY WARRANTY; without even the implied warranty of
012     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
013     * GNU General Public License for more details.
014     *
015     * You should have received a copy of the GNU General Public License
016     * along with this program; if not, write to the Free Software
017     * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
018     */
019    
020    package net.jetrix.filter;
021    
022    import java.util.*;
023    import java.util.logging.*;
024    
025    import net.jetrix.*;
026    import net.jetrix.messages.channel.*;
027    import net.jetrix.messages.channel.specials.*;
028    
029    /**
030     * Defines a generic filter to be used and extended by filter developers.
031     * GenericFilter makes writing filters easier by dispatching messages to an
032     * appropriate method according to the type of this message (onPline(),
033     * onStartGame(), etc...).
034     *
035     * @author Emmanuel Bourg
036     * @version $Revision: 799 $, $Date: 2009-02-18 17:28:08 +0100 (Wed, 18 Feb 2009) $
037     */
038    public abstract class GenericFilter extends MessageFilter
039    {
040        protected Logger log = Logger.getLogger("net.jetrix");
041    
042        public final void process(Message m, List<Message> out)
043        {
044            // overwritable pre processing
045            onMessage(m);
046    
047            // message dispatching
048            if (m instanceof SpecialMessage)           { onMessage((SpecialMessage) m, out); }
049            else if (m instanceof FieldMessage)        { onMessage((FieldMessage) m, out); }
050            else if (m instanceof CommandMessage)      { onMessage((CommandMessage) m, out); }
051            else if (m instanceof PlineMessage)        { onMessage((PlineMessage) m, out); }
052            else if (m instanceof LevelMessage)        { onMessage((LevelMessage) m, out); }
053            else if (m instanceof PlayerLostMessage)   { onMessage((PlayerLostMessage) m, out); }
054            else if (m instanceof PlineActMessage)     { onMessage((PlineActMessage) m, out); }
055            else if (m instanceof TeamMessage)         { onMessage((TeamMessage) m, out); }
056            else if (m instanceof JoinMessage)         { onMessage((JoinMessage) m, out); }
057            else if (m instanceof LeaveMessage)        { onMessage((LeaveMessage) m, out); }
058            else if (m instanceof PlayerNumMessage)    { onMessage((PlayerNumMessage) m, out); }
059            else if (m instanceof StartGameMessage)    { onMessage((StartGameMessage) m, out); }
060            else if (m instanceof StopGameMessage)     { onMessage((StopGameMessage) m, out); }
061            else if (m instanceof NewGameMessage)      { onMessage((NewGameMessage) m, out); }
062            else if (m instanceof EndGameMessage)      { onMessage((EndGameMessage) m, out); }
063            else if (m instanceof PauseMessage)        { onMessage((PauseMessage) m, out); }
064            else if (m instanceof ResumeMessage)       { onMessage((ResumeMessage) m, out); }
065            else if (m instanceof GmsgMessage)         { onMessage((GmsgMessage) m, out); }
066            else if (m instanceof PlayerWonMessage)    { onMessage((PlayerWonMessage) m, out); }
067            else
068            {
069                onMessage(m, out);
070            }
071        }
072    
073        /**
074         * Message pre-processing. This method is called at the beginning of the
075         * <tt>process(Message m, List out)</tt> method and allow custom
076         * processing for all filtered messages.
077         */
078        public void onMessage(Message m) { }
079    
080        public void onMessage(Message m, List<Message> out) { out.add(m); }
081    
082        public void onMessage(PlineMessage m, List<Message> out)
083        {
084            out.add(m);
085        }
086    
087        public void onMessage(PlineActMessage m, List<Message> out)
088        {
089            out.add(m);
090        }
091    
092        public void onMessage(TeamMessage m, List<Message> out)
093        {
094            out.add(m);
095        }
096    
097        public void onMessage(JoinMessage m, List<Message> out)
098        {
099            out.add(m);
100        }
101    
102        public void onMessage(LeaveMessage m, List<Message> out)
103        {
104            out.add(m);
105        }
106    
107        public void onMessage(PlayerNumMessage m, List<Message> out)
108        {
109            out.add(m);
110        }
111    
112        public void onMessage(StartGameMessage m, List<Message> out)
113        {
114            out.add(m);
115        }
116    
117        public void onMessage(StopGameMessage m, List<Message> out)
118        {
119            out.add(m);
120        }
121    
122        public void onMessage(NewGameMessage m, List<Message> out)
123        {
124            out.add(m);
125        }
126    
127        public void onMessage(EndGameMessage m, List<Message> out)
128        {
129            out.add(m);
130        }
131    
132        public void onMessage(PauseMessage m, List<Message> out)
133        {
134            out.add(m);
135        }
136    
137        public void onMessage(ResumeMessage m, List<Message> out)
138        {
139            out.add(m);
140        }
141    
142        public void onMessage(GmsgMessage m, List<Message> out)
143        {
144            out.add(m);
145        }
146    
147        private void onMessage(SpecialMessage m, List<Message> out)
148        {
149            // message pre-processing
150            onSpecial(m, out);
151    
152            // message dispatching
153            if (m instanceof LinesAddedMessage)          { onMessage((LinesAddedMessage) m, out); }
154            else if (m instanceof AddLineMessage)        { onMessage((AddLineMessage) m, out); }
155            else if (m instanceof ClearLineMessage)      { onMessage((ClearLineMessage) m, out); }
156            else if (m instanceof ClearSpecialsMessage)  { onMessage((ClearSpecialsMessage) m, out); }
157            else if (m instanceof RandomClearMessage)    { onMessage((RandomClearMessage) m, out); }
158            else if (m instanceof BlockQuakeMessage)     { onMessage((BlockQuakeMessage) m, out); }
159            else if (m instanceof BlockBombMessage)      { onMessage((BlockBombMessage) m, out); }
160            else if (m instanceof GravityMessage)        { onMessage((GravityMessage) m, out); }
161            else if (m instanceof NukeFieldMessage)      { onMessage((NukeFieldMessage) m, out); }
162            else if (m instanceof SwitchFieldsMessage)   { onMessage((SwitchFieldsMessage) m, out); }
163        }
164    
165        /**
166         * Special block message pre-processing. This method is called for all
167         * specials filtered and allow custom processing for all specials
168         * (lines added, blockbomb switchs, etc...).
169         */
170        public void onSpecial(SpecialMessage m, List<Message> out) { }
171    
172        public void onMessage(LevelMessage m, List<Message> out)
173        {
174            out.add(m);
175        }
176    
177        public void onMessage(FieldMessage m, List<Message> out)
178        {
179            out.add(m);
180        }
181    
182        public void onMessage(PlayerLostMessage m, List<Message> out)
183        {
184            out.add(m);
185        }
186    
187        public void onMessage(PlayerWonMessage m, List<Message> out)
188        {
189            out.add(m);
190        }
191    
192        public void onMessage(CommandMessage m, List<Message> out)
193        {
194            out.add(m);
195        }
196    
197        public void onMessage(LinesAddedMessage m, List<Message> out)
198        {
199            if (m instanceof OneLineAddedMessage)        { onMessage((OneLineAddedMessage) m, out); }
200            else if (m instanceof TwoLinesAddedMessage)  { onMessage((TwoLinesAddedMessage) m, out); }
201            else if (m instanceof FourLinesAddedMessage) { onMessage((FourLinesAddedMessage) m, out); }
202        }
203    
204        public void onMessage(OneLineAddedMessage m, List<Message> out)
205        {
206            out.add(m);
207        }
208    
209        public void onMessage(TwoLinesAddedMessage m, List<Message> out)
210        {
211            out.add(m);
212        }
213    
214        public void onMessage(FourLinesAddedMessage m, List<Message> out)
215        {
216            out.add(m);
217        }
218    
219        public void onMessage(AddLineMessage m, List<Message> out)
220        {
221            out.add(m);
222        }
223    
224        public void onMessage(ClearLineMessage m, List<Message> out)
225        {
226            out.add(m);
227        }
228    
229        public void onMessage(NukeFieldMessage m, List<Message> out)
230        {
231            out.add(m);
232        }
233    
234        public void onMessage(RandomClearMessage m, List<Message> out)
235        {
236            out.add(m);
237        }
238    
239        public void onMessage(SwitchFieldsMessage m, List<Message> out)
240        {
241            out.add(m);
242        }
243    
244        public void onMessage(ClearSpecialsMessage m, List<Message> out)
245        {
246            out.add(m);
247        }
248    
249        public void onMessage(GravityMessage m, List<Message> out)
250        {
251            out.add(m);
252        }
253    
254        public void onMessage(BlockQuakeMessage m, List<Message> out)
255        {
256            out.add(m);
257        }
258    
259        public void onMessage(BlockBombMessage m, List<Message> out)
260        {
261            out.add(m);
262        }
263    
264    }