KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > quikj > application > web > oamp > plugin > SystemOAMP


1 /*
2  * SystemOAMP.java
3  *
4  * Created on June 1, 2002, 7:49 AM
5  */

6
7 package com.quikj.application.web.oamp.plugin;
8
9 import com.quikj.server.framework.*;
10 import com.quikj.server.web.*;
11 import com.quikj.application.web.oamp.messaging.*;
12
13 import java.io.*;
14 import java.util.*;
15
16 // JAXP packages
17
import org.w3c.dom.*;
18
19 /**
20  *
21  * @author amit
22  */

23 public class SystemOAMP extends AceThread implements FeatureHandlerInterface
24 {
25     
26     /** Creates a new instance of SystemOAMP */
27     public SystemOAMP() throws IOException
28     {
29         super("SystemOAMP");
30     }
31     
32     public void dispose()
33     {
34         // interrupt the wait (kill this thread)
35
interruptWait(AceSignalMessage.SIGNAL_TERM, "disposed");
36                 
37         super.dispose();
38     }
39     
40     public ClientParms getClientParms()
41     {
42         return null;
43     }
44     
45     public String JavaDoc getFeatureName()
46     {
47         return OAMPSystemMessageParser.OAMP_SYSTEM_FEATURE_NAME;
48     }
49     
50     public boolean init(String JavaDoc feature_name, PluginParameters parameters, ClientParms client_parms)
51     { // nothing to do
52
return true;
53     }
54     
55     public boolean sendEvent(AceMessageInterface message)
56     {
57         return super.sendMessage(message);
58     }
59     
60     public void start()
61     {
62         super.start();
63     }
64     
65     public void run()
66     {
67         while (true)
68         {
69             AceMessageInterface message = waitMessage();
70             if (message == null)
71             {
72                 // print error message
73
AceLogger.Instance().log(AceLogger.ERROR, AceLogger.SYSTEM_LOG,
74                 getName()
75                 + "- SystemOAMP.run() -- A null message was received while waiting for a message - "
76                 + getErrorMessage());
77                 
78                 break;
79             }
80             
81             if ((message instanceof AceSignalMessage) == true)
82             {
83                 // A signal message is received
84

85                 // print informational message
86
AceLogger.Instance().log(AceLogger.INFORMATIONAL, AceLogger.SYSTEM_LOG,
87                 getName()
88                 + " - SystemOAMP.run() -- A signal "
89                 + ((AceSignalMessage)message).getSignalId()
90                 + " is received : "
91                 + ((AceSignalMessage)message).getMessage());
92                 break;
93             }
94             else if ((message instanceof OAMPMessageEvent) == true)
95             {
96                 processMessageEvent((OAMPMessageEvent)message);
97             }
98             else if ((message instanceof EndpointLogoutEvent) == true)
99             {
100                 processLogoutEvent((EndpointLogoutEvent)message);
101             }
102             else
103             {
104                 // print error message
105
AceLogger.Instance().log(AceLogger.WARNING, AceLogger.SYSTEM_LOG,
106                 getName()
107                 + "- SystemOAMP.run() -- An unexpected event is received : "
108                 + message.messageType());
109             }
110         }
111     }
112         
113     private void processMessageEvent(OAMPMessageEvent message)
114     {
115         if (message.isRequest() == true)
116         {
117             Node node = (Node)message.getElement();
118             OAMPSystemMessageParser parser = new OAMPSystemMessageParser();
119             if (parser.parse(node, true) == false)
120             {
121                 // print error message
122
AceLogger.Instance().log(AceLogger.ERROR,
123                 AceLogger.SYSTEM_LOG,
124                 getName()
125                 + "- SystemOAMP.processMessageEvent() -- failed parsing request : "
126                 + parser.getErrorMessage());
127                 return;
128             }
129             
130             OAMPMessageInterface parsed_msg = parser.getMessage();
131             if ((parsed_msg instanceof RegistrationRequestMessage) == true)
132             {
133                 processLogin((RegistrationRequestMessage)parsed_msg,
134                 message);
135             }
136             else
137             {
138                 // print error message
139
AceLogger.Instance().log(AceLogger.ERROR,
140                 AceLogger.SYSTEM_LOG,
141                 getName()
142                 + "- SystemOAMP.processMessageEvent() -- unsupported request : "
143                 + parsed_msg.messageType());
144                 return;
145             }
146         }
147         else
148         {
149             // print error message
150
AceLogger.Instance().log(AceLogger.ERROR,
151             AceLogger.SYSTEM_LOG,
152             getName()
153             + "- SystemOAMP.processMessageEvent() -- response reception not supported");
154             
155             return;
156         }
157     }
158     
159     private void processLogin(RegistrationRequestMessage message,
160     OAMPMessageEvent event)
161     {
162         AccountElement e = CommunicatorClientList.getInstance().get(message.getAuthCode());
163         if (e == null)
164         {
165             // send error response to the client
166
sendResponse(event.getEndpoint(),
167             event.getRequestId(),
168             event.getUserParm(),
169             AceHTTPMessage.FORBIDDEN, "User authentication failed", null);
170             
171             AceLogger.Instance().log(AceLogger.WARNING,
172             AceLogger.USER_LOG,
173             "Unsuccessful login attempt by authcode.");
174             return;
175         }
176         
177         RegistrationResponseMessage response = new RegistrationResponseMessage();
178         response.setLevel(e.getLevel());
179         response.setAdditionalInfo(e.getAdditionalInfo());
180         
181         event.getClient().setAccountInfo(e);
182         sendResponse(event.getEndpoint(),
183         event.getRequestId(),
184         event.getUserParm(),
185         AceHTTPMessage.OK, "OK", response);
186         
187         return;
188     }
189     
190     public boolean sendResponse(EndPointInterface endpoint,
191     int request_id,
192     Object JavaDoc user_parm,
193     int response_status,
194     String JavaDoc reason,
195     OAMPMessageInterface message)
196     {
197         if (endpoint.sendEvent(new OAMPMessageEvent(response_status,
198         reason,
199         message,
200         request_id,
201         user_parm)) == false)
202         {
203             // print error message
204
AceLogger.Instance().log(AceLogger.ERROR,
205             AceLogger.SYSTEM_LOG,
206             getName()
207             + "- SystemOAMP.sendResponse() -- Could not send login response message to the endpoint "
208             + endpoint);
209             
210             return false;
211         }
212         
213         return true;
214     }
215     
216         
217     private void processLogoutEvent(EndpointLogoutEvent message)
218     {
219         // TODO - call cancelDbOperation
220
}
221     
222     private Hashtable pendingDbOps = new Hashtable(); // key = EndPointInterface, value = DbOperationInterface
223

224 }
225
Popular Tags