001 package com.croftsoft.apps.chat.controller;
002
003 import java.awt.*;
004 import java.awt.event.*;
005 import javax.swing.*;
006
007 import com.croftsoft.core.gui.event.UserInputAdapter;
008 import com.croftsoft.core.lang.NullArgumentException;
009 import com.croftsoft.core.math.geom.Point2DD;
010 import com.croftsoft.core.security.Authentication;
011 import com.croftsoft.core.util.queue.Queue;
012
013 import com.croftsoft.apps.chat.request.CreateModelRequest;
014 import com.croftsoft.apps.chat.request.MoveRequest;
015 import com.croftsoft.apps.chat.request.TalkRequest;
016
017 /*********************************************************************
018 * Chat controller.
019 *
020 * @version
021 * 2003-06-17
022 * @since
023 * 2003-06-06
024 * @author
025 * <a href="https://www.croftsoft.com/">David Wallace Croft</a>
026 *********************************************************************/
027
028 public final class ChatController
029 extends UserInputAdapter
030 implements ActionListener, ItemListener
031 //////////////////////////////////////////////////////////////////////
032 //////////////////////////////////////////////////////////////////////
033 {
034
035 private final Authentication authentication;
036
037 private final Queue requestQueue;
038
039 //
040
041 private JMenu avatarMenu;
042
043 private JComponent moveComponent;
044
045 private JCheckBoxMenuItem musicCheckBoxMenuItem;
046
047 private JTextField talkTextField;
048
049 //////////////////////////////////////////////////////////////////////
050 //////////////////////////////////////////////////////////////////////
051
052 public ChatController (
053 Authentication authentication,
054 Queue requestQueue )
055 //////////////////////////////////////////////////////////////////////
056 {
057 NullArgumentException.check (
058 this.authentication = authentication );
059
060 NullArgumentException.check ( this.requestQueue = requestQueue );
061 }
062
063 //////////////////////////////////////////////////////////////////////
064 // mutator methods
065 //////////////////////////////////////////////////////////////////////
066
067 public void setAvatarMenu ( JMenu avatarMenu )
068 //////////////////////////////////////////////////////////////////////
069 {
070 if ( this.avatarMenu != null )
071 {
072 throw new IllegalStateException ( );
073 }
074
075 NullArgumentException.check ( this.avatarMenu = avatarMenu );
076
077 Component [ ] menuComponents = avatarMenu.getMenuComponents ( );
078
079 for ( int i = 0; i < menuComponents.length; i++ )
080 {
081 Component menuComponent = menuComponents [ i ];
082
083 if ( menuComponent instanceof JRadioButtonMenuItem )
084 {
085 ( ( JRadioButtonMenuItem ) menuComponent ).addItemListener (
086 this );
087 }
088 }
089 }
090
091 public void setMusicCheckBoxMenuItem (
092 JCheckBoxMenuItem musicCheckBoxMenuItem )
093 //////////////////////////////////////////////////////////////////////
094 {
095 NullArgumentException.check ( musicCheckBoxMenuItem );
096
097 if ( this.musicCheckBoxMenuItem != null )
098 {
099 this.musicCheckBoxMenuItem.removeItemListener ( this );
100 }
101
102 this.musicCheckBoxMenuItem = musicCheckBoxMenuItem;
103
104 musicCheckBoxMenuItem.addItemListener ( this );
105 }
106
107 public void setMoveComponent ( JComponent moveComponent )
108 //////////////////////////////////////////////////////////////////////
109 {
110 NullArgumentException.check ( moveComponent );
111
112 if ( this.moveComponent != null )
113 {
114 this.moveComponent.removeMouseListener ( this );
115 }
116
117 this.moveComponent = moveComponent;
118
119 moveComponent.addMouseListener ( this );
120 }
121
122 public void setTalkTextField ( JTextField talkTextField )
123 //////////////////////////////////////////////////////////////////////
124 {
125 NullArgumentException.check ( talkTextField );
126
127 if ( this.talkTextField != null )
128 {
129 this.talkTextField.removeActionListener ( this );
130 }
131
132 this.talkTextField = talkTextField;
133
134 talkTextField.addActionListener ( this );
135 }
136
137 //////////////////////////////////////////////////////////////////////
138 // interface ActionListener method
139 //////////////////////////////////////////////////////////////////////
140
141 public void actionPerformed ( ActionEvent actionEvent )
142 //////////////////////////////////////////////////////////////////////
143 {
144 if ( actionEvent.getSource ( ) == talkTextField )
145 {
146 String text = talkTextField.getText ( );
147
148 talkTextField.setText ( "" );
149
150 requestQueue.replace ( new TalkRequest ( authentication, text ) );
151 }
152 else
153 {
154 throw new IllegalArgumentException ( );
155 }
156 }
157
158 //////////////////////////////////////////////////////////////////////
159 // interface ItemListener method
160 //////////////////////////////////////////////////////////////////////
161
162 public void itemStateChanged ( ItemEvent itemEvent )
163 //////////////////////////////////////////////////////////////////////
164 {
165 Object item = itemEvent.getItem ( );
166
167 if ( item == musicCheckBoxMenuItem )
168 {
169 System.out.println (
170 "Music: " + musicCheckBoxMenuItem.isSelected ( ) );
171 }
172 else if ( item instanceof JRadioButtonMenuItem )
173 {
174 JRadioButtonMenuItem radioButtonMenuItem
175 = ( JRadioButtonMenuItem ) item;
176
177 if ( itemEvent.getStateChange ( ) == ItemEvent.SELECTED )
178 {
179 String avatarType
180 = radioButtonMenuItem.getText ( );
181
182 requestQueue.replace ( new CreateModelRequest (
183 authentication, avatarType, 0.0, 0.0 ) );
184 }
185 }
186 else
187 {
188 throw new IllegalArgumentException ( );
189 }
190 }
191
192 //////////////////////////////////////////////////////////////////////
193 // interface MouseListener method
194 //////////////////////////////////////////////////////////////////////
195
196 public void mousePressed ( MouseEvent mouseEvent )
197 //////////////////////////////////////////////////////////////////////
198 {
199 if ( mouseEvent.getSource ( ) == moveComponent )
200 {
201 Point mousePoint = mouseEvent.getPoint ( );
202
203 requestQueue.replace (
204 new MoveRequest (
205 authentication,
206 new Point2DD ( mousePoint.x, mousePoint.y ) ) );
207 }
208 else
209 {
210 throw new IllegalArgumentException ( );
211 }
212 }
213
214 //////////////////////////////////////////////////////////////////////
215 //////////////////////////////////////////////////////////////////////
216 }