agriesma@874
|
1 |
/*
|
agriesma@874
|
2 |
* Created on Jun 24, 2003
|
agriesma@874
|
3 |
*
|
agriesma@874
|
4 |
* To change the template for this generated file go to
|
agriesma@874
|
5 |
* Window>Preferences>Java>Code Generation>Code and Comments
|
agriesma@874
|
6 |
*/
|
agriesma@874
|
7 |
package isac.session;
|
agriesma@874
|
8 |
|
agriesma@998
|
9 |
import isac.browserdialog.BDialog;
|
agriesma@998
|
10 |
import isac.browserdialog.BrowserDialog;
|
wneuper@2131
|
11 |
import isac.gui.WindowApplication;
|
agriesma@1026
|
12 |
import isac.wsdialog.DGuide;
|
agriesma@998
|
13 |
|
agriesma@921
|
14 |
import java.io.Serializable;
|
agriesma@921
|
15 |
import java.rmi.RemoteException;
|
agriesma@921
|
16 |
import java.rmi.server.UnicastRemoteObject;
|
agriesma@874
|
17 |
import java.util.HashMap;
|
agriesma@905
|
18 |
import java.util.Iterator;
|
agriesma@874
|
19 |
import java.util.Map;
|
agriesma@874
|
20 |
import java.util.Vector;
|
agriesma@874
|
21 |
|
wneuper@2131
|
22 |
import org.apache.log4j.Logger;
|
agriesma@874
|
23 |
import org.apache.xmlrpc.WebServer;
|
agriesma@874
|
24 |
|
agriesma@874
|
25 |
/**
|
wneuper@1838
|
26 |
* @author Andreas Griesmayer
|
agriesma@874
|
27 |
*/
|
akirchst@1818
|
28 |
public class SessionDialog extends UnicastRemoteObject implements SDialog,
|
akirchst@1818
|
29 |
Serializable {
|
wneuper@2131
|
30 |
|
wneuper@2131
|
31 |
static Logger logger_ = Logger.getLogger(SessionDialog.class.getName());
|
wneuper@2131
|
32 |
|
wneuper@2162
|
33 |
//private Map dguide_map_ = new HashMap();//WN0503 unused
|
agriesma@1026
|
34 |
|
akirchst@1818
|
35 |
private int counter_;
|
agriesma@874
|
36 |
|
akirchst@1818
|
37 |
private static UMHandler um_handler_ = new UMHandler();
|
akirchst@1818
|
38 |
|
akirchst@1818
|
39 |
private static WSDHandler dg_handler_ = new WSDHandler();
|
akirchst@1818
|
40 |
|
akirchst@1818
|
41 |
private Map sessionmap_ = new HashMap();
|
akirchst@1818
|
42 |
|
akirchst@1818
|
43 |
private Map bdialogmap_ = new HashMap();
|
akirchst@1818
|
44 |
|
akirchst@1818
|
45 |
private static SessionDialog instance_;
|
akirchst@1818
|
46 |
|
akirchst@1818
|
47 |
private SessionDialog() throws RemoteException {
|
akirchst@1818
|
48 |
init();
|
akirchst@1818
|
49 |
System.out.println("SessionDialog constructor");
|
akirchst@1818
|
50 |
}
|
akirchst@1818
|
51 |
|
akirchst@1818
|
52 |
/**
|
akirchst@1818
|
53 |
* returns the instance of the singleton SessionDialog. The SessionDialog is
|
akirchst@1818
|
54 |
* responsible for maintaining all session-relevant informations like Browser-
|
akirchst@1818
|
55 |
* and WorksheetDialog and UserModel it provides its functions using RMI and
|
akirchst@1818
|
56 |
* XML-RPC
|
akirchst@1818
|
57 |
*
|
akirchst@1818
|
58 |
* @return
|
akirchst@1818
|
59 |
*/
|
akirchst@1818
|
60 |
public static SessionDialog getInstance() {
|
akirchst@1818
|
61 |
if (instance_ == null) {
|
akirchst@1818
|
62 |
try {
|
akirchst@1818
|
63 |
instance_ = new SessionDialog();
|
akirchst@1818
|
64 |
} catch (RemoteException e) {
|
akirchst@1818
|
65 |
e.printStackTrace();
|
akirchst@1818
|
66 |
}
|
agriesma@921
|
67 |
}
|
akirchst@1818
|
68 |
return instance_;
|
akirchst@1818
|
69 |
}
|
akirchst@1818
|
70 |
|
akirchst@1818
|
71 |
// LK 04.09.02: user control with the UserManager
|
akirchst@1818
|
72 |
/**
|
akirchst@1818
|
73 |
* @param username
|
akirchst@1818
|
74 |
* name of the user
|
akirchst@1818
|
75 |
* @param pass
|
akirchst@1818
|
76 |
* password
|
akirchst@1818
|
77 |
* @return vector with the sessionid as first and only element on success or
|
wneuper@2162
|
78 |
* empty vector on failure
|
akirchst@1818
|
79 |
*/
|
akirchst@1818
|
80 |
public Vector login(String username, String pass) {
|
akirchst@1818
|
81 |
Vector return_val = new Vector();
|
akirchst@1818
|
82 |
User user = UserManager.getUser(username, pass);
|
wneuper@2131
|
83 |
String sessionid = null;
|
akirchst@1818
|
84 |
if (user != null) {
|
wneuper@2131
|
85 |
//WN050222 String sessionid;
|
akirchst@1818
|
86 |
if ((sessionid = (String) sessionmap_.get(username)) == null) {
|
akirchst@1818
|
87 |
sessionmap_.put(username, (sessionid = username + counter_++));
|
akirchst@1818
|
88 |
um_handler_.newUserModel(username, sessionid);
|
akirchst@1818
|
89 |
}
|
akirchst@1818
|
90 |
return_val.add(sessionid);
|
agriesma@874
|
91 |
}
|
wneuper@2131
|
92 |
logger_.fatal("WA<-SH: login <- sessionid=" + sessionid);
|
akirchst@1818
|
93 |
return return_val;
|
akirchst@1818
|
94 |
}
|
akirchst@1818
|
95 |
|
akirchst@1818
|
96 |
/**
|
akirchst@1818
|
97 |
* @param sessionId
|
akirchst@1818
|
98 |
* @return the user for the session id
|
akirchst@1818
|
99 |
*/
|
akirchst@1818
|
100 |
public User getUser(String sessionId) {
|
akirchst@1818
|
101 |
//TODO: get user
|
akirchst@1818
|
102 |
return null;
|
akirchst@1818
|
103 |
}
|
akirchst@1818
|
104 |
|
akirchst@1818
|
105 |
/**
|
akirchst@1818
|
106 |
* returns the name of the user which owns the given session.
|
akirchst@1818
|
107 |
*
|
akirchst@1818
|
108 |
* @param session
|
akirchst@1818
|
109 |
* ID of the session for which the owner is requested
|
akirchst@1818
|
110 |
* @return the name of the owner of the session
|
wneuper@2162
|
111 |
* TODO.WN050311 encapsulate User#getName !!!
|
akirchst@1818
|
112 |
*/
|
akirchst@1818
|
113 |
public String getUsername(String session) {
|
akirchst@1818
|
114 |
Iterator keys = sessionmap_.keySet().iterator();
|
akirchst@1818
|
115 |
String username;
|
akirchst@1818
|
116 |
while (keys.hasNext()) {
|
akirchst@1818
|
117 |
if (session.equals(sessionmap_.get((username = (String) keys.next())))) {
|
akirchst@1818
|
118 |
return username;
|
akirchst@1818
|
119 |
}
|
akirchst@1794
|
120 |
}
|
akirchst@1818
|
121 |
return "";
|
akirchst@1818
|
122 |
}
|
akirchst@1818
|
123 |
|
akirchst@1818
|
124 |
/**
|
akirchst@1818
|
125 |
* create a new WSDialog and assign it to session <code>session</code>
|
akirchst@1818
|
126 |
*/
|
akirchst@1818
|
127 |
public String openDGuide(String session) {
|
akirchst@2133
|
128 |
return dg_handler_.newDGuide(this, session);
|
akirchst@1818
|
129 |
}
|
akirchst@1818
|
130 |
|
akirchst@1818
|
131 |
public DGuide getDGuide(String dg_id) {
|
akirchst@1818
|
132 |
return (DGuide) dg_handler_.getDGuide(dg_id);
|
akirchst@1818
|
133 |
}
|
akirchst@1818
|
134 |
|
akirchst@1818
|
135 |
/**
|
akirchst@1818
|
136 |
* used if the SessionDialog is used in standalone mode for testing-purposes.
|
akirchst@1818
|
137 |
* Registers its XML-RPC services on port 1050 of the local machine
|
akirchst@1818
|
138 |
*
|
akirchst@1818
|
139 |
* @param args
|
akirchst@1818
|
140 |
* not used
|
akirchst@1818
|
141 |
*/
|
akirchst@1818
|
142 |
public static void main(String[] args) {
|
akirchst@1818
|
143 |
init();
|
akirchst@1818
|
144 |
}
|
akirchst@1818
|
145 |
|
akirchst@1818
|
146 |
private static void init() {
|
akirchst@1818
|
147 |
try {
|
akirchst@1818
|
148 |
// Invoke me as <http://localhost:8080/RPC2>.
|
akirchst@1818
|
149 |
System.out.println("SessionDialog main");
|
wneuper@2162
|
150 |
WebServer server = new WebServer(1050);//WN0503 fixed port !
|
akirchst@1818
|
151 |
server.setParanoid(false);
|
akirchst@1818
|
152 |
// server.addHandler("sample", new JavaServer());
|
akirchst@1818
|
153 |
server.addHandler("SDialog", getInstance());
|
wneuper@2131
|
154 |
server.addHandler(" WSDialog", dg_handler_);
|
akirchst@1818
|
155 |
// LK 04.09.02: new temorary user management
|
akirchst@1818
|
156 |
//server.addHandler("UserModel", um_handler_);
|
akirchst@1818
|
157 |
|
akirchst@1818
|
158 |
} catch (Exception exception) {
|
akirchst@1818
|
159 |
System.err.println("SessionDialog: " + exception.toString());
|
agriesma@905
|
160 |
}
|
akirchst@1818
|
161 |
|
akirchst@1818
|
162 |
}
|
akirchst@1818
|
163 |
|
akirchst@1818
|
164 |
public void finalize() {
|
akirchst@1818
|
165 |
System.out.println("SessionDialog finalize!");
|
akirchst@1818
|
166 |
}
|
akirchst@1818
|
167 |
|
akirchst@1818
|
168 |
/**
|
akirchst@1818
|
169 |
* returns the BrowserDialog identified by <code>bdialog_id</code> or
|
akirchst@1818
|
170 |
* creates a new one.
|
akirchst@1818
|
171 |
*
|
akirchst@1818
|
172 |
* @param bdialog_id
|
akirchst@1818
|
173 |
* ID of the BrowserDialog to open.
|
akirchst@1818
|
174 |
* @return RMI-Object of the requested BrowserDialog
|
akirchst@1818
|
175 |
*/
|
akirchst@1818
|
176 |
public BDialog getBDialog(String bdialog_id) {
|
akirchst@1818
|
177 |
BDialog browser_dialog = (BDialog) bdialogmap_.get(bdialog_id);
|
akirchst@1818
|
178 |
if (browser_dialog == null) {
|
akirchst@1818
|
179 |
try {
|
akirchst@1818
|
180 |
bdialogmap_.put(bdialog_id, (browser_dialog = new BrowserDialog(
|
akirchst@1818
|
181 |
bdialog_id)));
|
akirchst@1818
|
182 |
} catch (RemoteException e) {
|
akirchst@1818
|
183 |
System.err.println("unable to create new BrowserDialog for session "
|
akirchst@1818
|
184 |
+ bdialog_id);
|
akirchst@1818
|
185 |
e.printStackTrace();
|
akirchst@1818
|
186 |
}
|
agriesma@874
|
187 |
}
|
akirchst@1818
|
188 |
return browser_dialog;
|
akirchst@1818
|
189 |
}
|
wneuper@1838
|
190 |
}
|