OSDN Git Service

Initial commit
[ultramonkey-l7/l7gui.git] / src / src / org / ultramonkey / l7 / model / UserManager.java
1 package org.ultramonkey.l7.model;
2
3 import java.util.Vector;
4 import java.io.*;
5 import javax.servlet.http.*;
6
7 import org.apache.log4j.Logger;
8
9 /**
10  * 
11  * <p>
12  * class UserManager
13  * </p>
14  * <p>
15  * Copyright(c) NTT COMWARE 2008
16  * </p>
17  * 
18  * @author tanuma
19  */
20 public final class UserManager {
21         static final long serialVersionUID = 1;
22
23         /**
24          * userdata save filename ("/opt/l7vsd/userdata.dat")
25          */
26         protected static final String FileName = "/opt/l7vsd/userdata.dat";
27
28         /**
29          * instance of this class (singleton)
30          */
31         protected static UserManager instance = null;
32
33         /**
34          * userdata structure
35          */
36         protected Vector<UserData> uservec = null;
37         protected Vector<UserData> olduservec = null;
38
39         protected UserManager() throws FileNotReadException {
40         // --- debug log (constructor) ---
41                 Logger userLogger = Logger.getLogger(LogCategorySet.GUI_USER_MANAGE);
42         if (userLogger.isDebugEnabled()) {
43             userLogger.debug("11011 class UserManager created.");
44         }
45         // --- debug log (constructor) ---
46
47                 uservec = new Vector<UserData>();
48                 this.loadFromFile();
49         }
50
51         /**
52          * 
53          * <p>
54          * getInstance method
55          * </p>
56          * 
57          * @return instance of this class.
58          */
59         public synchronized static UserManager getInstance() {
60                 // --- debug log (in method) ---
61                 Logger userLogger = Logger.getLogger(LogCategorySet.GUI_USER_MANAGE);
62                 if (userLogger.isDebugEnabled()) {
63             userLogger.debug("11012 UserManager::getInstance() in");
64                 }
65                 // --- debug log (in method) ---
66
67                 if (instance == null) {
68                         try {
69                                 instance = new UserManager();
70                         } catch (FileNotReadException e) {
71                                 userLogger.error("41002 Exception occured: " + e.getMessage());
72                                 // --- debug log (out method) ---
73                                 if (userLogger.isDebugEnabled()) {
74                             userLogger.debug("11013 UserManager::getInstance() out return=null");
75                                 }
76                                 // --- debug log (out method) ---
77                                 return null;
78                         }
79                 }
80
81                 // --- debug log (out method) ---
82                 if (userLogger.isDebugEnabled()) {
83             userLogger.debug("11014 UserManager::getInstance() out return=(" + instance + ")");
84                 }
85                 // --- debug log (out method) ---
86                 return instance;
87         }
88
89         /**
90          * save function
91          * 
92          * @return true/false
93          */
94         protected void saveToFile() throws FileNotWriteException {
95                 // --- debug log (in method) ---
96                 Logger userLogger = Logger.getLogger(LogCategorySet.GUI_USER_MANAGE);
97                 if (userLogger.isDebugEnabled()) {
98             userLogger.debug("11015 UserManager::saveToFile() throws FileNotWriteException in");
99                 }
100                 // --- debug log (in method) ---
101
102                 try {
103                         ObjectOutputStream oos = new ObjectOutputStream(
104                                         new FileOutputStream(FileName));
105                         oos.writeObject(uservec);
106                         oos.close();
107                 } catch (IOException e) {
108                         this.uservec = this.olduservec;
109                         FileNotWriteException exception = new FileNotWriteException();
110                         exception.setFileName(FileName);
111                         exception.setErrMessage("Cannot write file.");
112                         userLogger.error("41003 Exception occured: " + e.getMessage());
113                         // --- debug log (out method) ---
114                         if (userLogger.isDebugEnabled()) {
115                     userLogger.debug("11016 UserManager::saveToFile() throws FileNotWriteException out exception=\"" + exception.toString() + "\"");
116                         }
117                         // --- debug log (out method) ---
118                         throw exception;
119                 }
120
121                 // --- debug log (out method) ---
122                 if (userLogger.isDebugEnabled()) {
123             userLogger.debug("11017 UserManager::saveToFile() throws FileNotWriteException out");
124                 }
125                 // --- debug log (out method) ---
126         }
127
128         /**
129          * load function
130          * 
131          * @return true/false
132          */
133         protected void loadFromFile() throws FileNotReadException {
134                 // --- debug log (in method) ---
135                 Logger userLogger = Logger.getLogger(LogCategorySet.GUI_USER_MANAGE);
136                 if (userLogger.isDebugEnabled()) {
137             userLogger.debug("11018 UserManager::loadFromFile() throws FileNotReadException in");
138                 }
139                 // --- debug log (in method) ---
140
141                 try {
142                         ObjectInputStream ois = new ObjectInputStream(
143                                         new FileInputStream(FileName));
144                         uservec = (Vector<UserData>) ois.readObject();
145                         ois.close();
146                 } catch (FileNotFoundException ex) {
147                         FileNotReadException exception = new FileNotReadException();
148                         exception.setFileName(FileName);
149                         exception.setErrMessage("Cannot read file.");
150                         userLogger.error("41004 Exception occured: " + ex.getMessage());
151                         // --- debug log (out method) ---
152                         if (userLogger.isDebugEnabled()) {
153                     userLogger.debug("11019 UserManager::loadFromFile() throws FileNotReadException out exception=\"" + exception.toString() + "\"");
154                         }
155                         // --- debug log (out method) ---
156                         throw exception;
157                 } catch (IOException ex) {
158                         FileNotReadException exception = new FileNotReadException();
159                         exception.setFileName(FileName);
160                         exception.setErrMessage("Catch IOException: " + ex.getMessage());
161                         userLogger.error("41005 Exception occured: " + ex.getMessage());
162                         // --- debug log (out method) ---
163                         if (userLogger.isDebugEnabled()) {
164                     userLogger.debug("11020 UserManager::loadFromFile() throws FileNotReadException out exception=\"" + exception.toString() + "\"");
165                         }
166                         // --- debug log (out method) ---
167                         throw exception;
168                 } catch (ClassNotFoundException ex) {
169                         FileNotReadException exception = new FileNotReadException();
170                         exception.setFileName(FileName);
171                         exception.setErrMessage("Catch ClassNotFoundException.");
172                         userLogger.error("41006 Exception occured: " + ex.getMessage());
173                         // --- debug log (out method) ---
174                         if (userLogger.isDebugEnabled()) {
175                     userLogger.debug("11021 UserManager::loadFromFile() throws FileNotReadException out exception=\"" + exception.toString() + "\"");
176                         }
177                         // --- debug log (out method) ---
178                         throw exception;
179                 }
180
181                 // --- debug log (out method) ---
182                 if (userLogger.isDebugEnabled()) {
183             userLogger.debug("11022 UserManager::loadFromFile() throws FileNotReadException out");
184                 }
185                 // --- debug log (out method) ---
186         }
187
188         /**
189          * 
190          * <p>
191          * authUser method
192          * </p>
193          * 
194          * @param userid
195          * @param userpass
196          * @return
197          */
198         public UserData authUser(String userid, String userpass) {
199                 // --- debug log (in method) ---
200                 Logger userLogger = Logger.getLogger(LogCategorySet.GUI_USER_MANAGE);
201                 if (userLogger.isDebugEnabled()) {
202             StringBuffer buf = new StringBuffer();
203                         buf.append("UserManager::authUser(String userid, String userpass) in ");
204                         buf.append("userid=\"" + userid + "\", ");
205                         buf.append("userpass=\"" + userpass + "\"");
206                         userLogger.debug("11023 " + buf.toString());
207                 }
208                 // --- debug log (in method) ---
209
210                 UserData ret = null;
211                 if (userid != null || userpass != null) {
212                         for (UserData data : uservec) {
213                                 if (data.userName.equals(userid) && data.passwd.equals(userpass)) {
214                                         ret = data;
215                                         break;
216                                 }
217                         }
218                 }
219
220                 // --- debug log (out method) ---
221                 if (userLogger.isDebugEnabled()) {
222             StringBuffer buf = new StringBuffer();
223                         buf.append("UserManager::authUser(String userid, String userpass) out ");
224                         buf.append("return=(" + ret + ")");
225                         userLogger.debug("11024 " + buf.toString());
226                 }
227                 // --- debug log (out method) ---
228         return ret;
229         }
230
231         /**
232          * 
233          * <p>
234          * closeUser method
235          * </p>
236          * 
237          * @param request
238          */
239         public void closeUser(HttpServletRequest request) {
240                 // --- debug log (in method) ---
241                 Logger userLogger = Logger.getLogger(LogCategorySet.GUI_USER_MANAGE);
242                 if (userLogger.isDebugEnabled()) {
243                         userLogger.debug("11025 UserManager::closeUser(HttpServletRequest request) in request=(" + request +")");
244                 }
245                 // --- debug log (in method) ---
246
247                 if (request != null) {
248                         HttpSession session = request.getSession();
249                         if (session != null) {
250                                 session.invalidate();
251                         }
252                 }
253
254                 // --- debug log (out method) ---
255                 if (userLogger.isDebugEnabled()) {
256                         userLogger.debug("11026 UserManager::closeUser(HttpServletRequest request) out");
257                 }
258                 // --- debug log (out method) ---
259         }
260
261         /**
262          * check userid in userlist
263          * 
264          * @param userid
265          * @return
266          */
267         public UserData findUser(String userid) {
268                 // --- debug in (out method) ---
269                 Logger userLogger = Logger.getLogger(LogCategorySet.GUI_USER_MANAGE);
270                 if (userLogger.isDebugEnabled()) {
271                         userLogger.debug("11027 UserManager::findUser(String userid) in userid=\"" + userid + "\"");
272                 }
273                 // --- debug log (in method) ---
274
275                 UserData ret = null;
276                 if (userid != null) {
277                         for (UserData data : uservec) {
278                                 if (data.userName.equals(userid)) {
279                                         ret = data;
280                                 }
281                         }
282                 }
283
284                 // --- debug log (out method) ---
285                 if (userLogger.isDebugEnabled()) {
286                         userLogger.debug("11028 UserManager::findUser(String userid) out return=(" + ret + ")");
287                 }
288                 // --- debug log (out method) ---
289                 return ret;
290         }
291
292         /**
293          * user data add in UserDatas
294          * 
295          * @param userid
296          *            userid
297          * @param password
298          *            password
299          * @param acl
300          * @param description
301          * @throws Exception
302          *             UserData can't write
303          */
304         public boolean addUser(String userid, String password, int acl,
305                         String description) throws FileNotWriteException {
306                 // --- debug log (in method) ---
307                 Logger userLogger = Logger.getLogger(LogCategorySet.GUI_USER_MANAGE);
308                 if (userLogger.isDebugEnabled()) {
309                         StringBuffer buf = new StringBuffer();
310                         buf.append("UserManager::addUser(String userid, String password, int acl, String description) throws FileNotWriteException in ");
311                         buf.append("userid=\"" + userid + "\", ");
312                         buf.append("password=\"" + password + "\", ");
313                         buf.append("acl=" + acl + ", ");
314                         buf.append("description=\"" + description + "\"");
315                         userLogger.debug("11029 " + buf.toString());
316                 }
317                 // --- debug log (in method) ---
318                 
319                 if (userid == null || password == null || description == null) {
320                         // --- debug log (out method) ---
321                         if (userLogger.isDebugEnabled()) {
322                                 userLogger.debug("11030 UserManager::addUser(String userid, String password, int acl, String description) throws FileNotWriteException out return=false");
323                         }
324                         // --- debug log (out method) ---
325                         return false;
326                 }
327                 UserData data = findUser(userid);
328                 if (data == null) {
329                         data = new UserData();
330                         data.userName = userid;
331                         data.passwd = password;
332                         data.acl = acl;
333                         data.description = description;
334                         this.deepCopy();
335                         uservec.add(data);
336                         this.saveToFile();
337                 } else {
338                         // --- debug log (out method) ---
339                         if (userLogger.isDebugEnabled()) {
340                                 userLogger.debug("11031 UserManager::addUser(String userid, String password, int acl, String description) throws FileNotWriteException out return=false");
341                         }
342                         // --- debug log (out method) ---
343                         return false;
344                 }
345
346                 // --- debug log (out method) ---
347                 if (userLogger.isDebugEnabled()) {
348                         userLogger.debug("11032 UserManager::addUser(String userid, String password, int acl, String description) throws FileNotWriteException out return=true");
349                 }
350                 // --- debug log (out method) ---
351                 return true;
352         }
353
354         /**
355          * 
356          * <p>
357          * changeUser method
358          * </p>
359          * 
360          * @param data
361          * @return
362          * @throws FileNotWriteException
363          */
364         public boolean changeUser(UserData data) throws FileNotWriteException {
365                 // --- debug log (in method) ---
366                 Logger userLogger = Logger.getLogger(LogCategorySet.GUI_USER_MANAGE);
367                 if (userLogger.isDebugEnabled()) {
368                         userLogger.debug("11033 UserManager::changeUser(UserData data) throws FileNotWriteException in data=(" + data + ")");
369                 }
370                 // --- debug log (in method) ---
371
372                 if (data == null) {
373                         // --- debug log (out method) ---
374                         if (userLogger.isDebugEnabled()) {
375                                 userLogger.debug("11034 UserManager::changeUser(UserData data) throws FileNotWriteException out return=false");
376                         }
377                         // --- debug log (out method) ---
378                         return false;
379                 }
380                 UserData found = findUser(data.userName);
381                 if (found != null) {
382                         this.deepCopy();
383                         found.passwd = data.passwd;
384                         found.acl = data.acl;
385                         found.description = data.description;
386                         this.saveToFile();
387                 } else {
388                         // --- debug log (out method) ---
389                         if (userLogger.isDebugEnabled()) {
390                                 userLogger.debug("11035 UserManager::changeUser(UserData data) throws FileNotWriteException out return=false");
391                         }
392                         // --- debug log (out method) ---
393                         return false;
394                 }
395
396                 // --- debug log (out method) ---
397                 if (userLogger.isDebugEnabled()) {
398                         userLogger.debug("11036 UserManager::changeUser(UserData data) throws FileNotWriteException out return=true");
399                 }
400                 // --- debug log (out method) ---
401                 return true;
402         }
403
404         /**
405          * user data delete from UserDatas
406          * 
407          * @param userid
408          * @throws Exception
409          */
410         public boolean delUser(String userid) throws FileNotWriteException {
411                 // --- debug log (in method) ---
412                 Logger userLogger = Logger.getLogger(LogCategorySet.GUI_USER_MANAGE);
413                 if (userLogger.isDebugEnabled()) {
414                         userLogger.debug("11037 UserManager::delUser(String userid) throws FileNotWriteException in userid=\"" + userid + "\"");
415                 }
416                 // --- debug log (in method) ---
417
418                 if (userid == null) {
419                         // --- debug log (out method) ---
420                         if (userLogger.isDebugEnabled()) {
421                                 userLogger.debug("11038 UserManager::delUser(String userid) throws FileNotWriteException out return=false");
422                         }
423                         // --- debug log (out method) ---
424                         return false;
425                 }
426                 UserData data = findUser(userid);
427                 if (data != null && uservec.size() > 1) {
428                         this.deepCopy();
429                         uservec.remove(data);
430                         this.saveToFile();
431                         // --- debug log (out method) ---
432                         if (userLogger.isDebugEnabled()) {
433                                 userLogger.debug("11039 UserManager::delUser(String userid) throws FileNotWriteException out return=true");
434                         }
435                         // --- debug log (out method) ---
436                         return true;
437                 }
438
439                 // --- debug log (out method) ---
440                 if (userLogger.isDebugEnabled()) {
441                         userLogger.debug("11040 UserManager::delUser(String userid) throws FileNotWriteException out return=false");
442                 }
443                 // --- debug log (out method) ---
444                 return false;
445         }
446
447         /**
448          * 
449          * <p>
450          * getUserList method
451          * </p>
452          * 
453          * @return
454          */
455         public Vector<UserData> getUserList() throws FileNotReadException {
456                 // --- debug log (in/out method) ---
457                 Logger userLogger = Logger.getLogger(LogCategorySet.GUI_USER_MANAGE);
458                 if (userLogger.isDebugEnabled()) {
459             userLogger.debug("11041 UserManager::getUserList() in");
460             userLogger.debug("11042 UserManager::getUserList() out return=(" + uservec + ")");
461                 }
462                 // --- debug log (in/out method) ---
463                 this.loadFromFile();
464                 
465                 return this.uservec;
466         }
467
468         /**
469          * 
470          * <p>
471          * setUserList method
472          * </p>
473          */
474         public void setUserList(Vector<UserData> uservec) throws FileNotWriteException {
475                 // --- debug log (in method) ---
476                 Logger userLogger = Logger.getLogger(LogCategorySet.GUI_USER_MANAGE);
477                 if (userLogger.isDebugEnabled()) {
478             userLogger.debug("11043 UserManager::setUserList(Vector<UserData> uservec) in uservec=(" + uservec + ")");
479                 }
480                 // --- debug log (in method) ---
481
482                 this.deepCopy();
483                 this.uservec = uservec;
484                 this.saveToFile();
485
486                 // --- debug log (out method) ---
487                 if (userLogger.isDebugEnabled()) {
488             userLogger.debug("11044 UserManager::setUserList(Vector<UserData> uservec) out");
489                 }
490                 // --- debug log (out method) ---
491         }
492         
493         protected void deepCopy() {
494                 this.olduservec = new Vector<UserData>();
495                 for (UserData cur : this.uservec) {
496                         UserData copy = new UserData(cur);
497                         olduservec.add(copy);
498                 }
499         }
500 }