summaryrefslogtreecommitdiff
path: root/orktrack/src/net/sf/oreka/orktrack/messages/UserStateMessage.java
blob: 1e2da840e252ed510847efad6201446c35ef28b5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
/*
 * Oreka -- A media capture and retrieval platform
 * 
 * Copyright (C) 2005, orecx LLC
 *
 * http://www.orecx.com
 *
 * This program is free software, distributed under the terms of
 * the GNU General Public License.
 * Please refer to http://www.gnu.org/copyleft/gpl.html
 *
 */

package net.sf.oreka.orktrack.messages;

import net.sf.oreka.OrkException;
import net.sf.oreka.HibernateManager;
import net.sf.oreka.messages.AsyncMessage;
import net.sf.oreka.messages.SimpleResponseMessage;
import net.sf.oreka.messages.SyncMessage;
import net.sf.oreka.orktrack.LogManager;
import net.sf.oreka.orktrack.Port;
import net.sf.oreka.orktrack.PortManager;
import net.sf.oreka.orktrack.UserManager;
import net.sf.oreka.persistent.User;
import net.sf.oreka.serializers.OrkSerializer;

import org.apache.log4j.Logger;
import org.hibernate.Session;
import org.hibernate.Transaction;

public class UserStateMessage extends SyncMessage {

	public enum UserState {LOGIN, LOGOUT, UNKN};
	
	private Logger log = null;
	
	private UserState userState = UserState.UNKN;
	private String loginString = "";
	private String recPort = "";
	
	public UserStateMessage() {
		log = LogManager.getInstance().getPortLogger();
	}
	
	@Override
	public AsyncMessage process() {
		
		SimpleResponseMessage response = new SimpleResponseMessage();
		
		Session hbnSession = null;
		Transaction tx = null;
		try {
			String comment = "";
			boolean success = false;
			hbnSession = HibernateManager.getSession();
	        tx = hbnSession.beginTransaction();
	        // find out user
	        User user = UserManager.instance().getByLoginString(loginString, hbnSession);
	        if (user == null) {
	        	comment = "Could not find user for login string:" + loginString;
	        	log.warn(comment);
	        }
	        else {
	        	// find out port
	        	Port port = PortManager.instance().getPort(recPort);
	        	if (port == null) {
		        	comment = "Could not find port for face:" + recPort;
		        	log.warn(comment);
	        	}
	        	else {
	        		if(userState == UserState.LOGIN) {
	        			port.setUser(user);
	        			UserManager.instance().setUserLocation(user, port);
	        			log.info("user:" + loginString + " logging onto:" + recPort);
	        		}
	        		else if (userState == UserState.LOGOUT) {
	        			port.setUser(null);
	        			UserManager.instance().setUserLocation(user, null);
	        			log.info("user:" + loginString + " logging out of:" + recPort);
	        		}
	        		success = true;
	        	}
	        }

	        response.setComment(comment);
			response.setSuccess(success);
			tx.commit();
		}
		catch (Exception e) {
			if (tx != null) {tx.rollback();}
			log.error("TapeMessage.process: ", e);
			response.setSuccess(false);
			response.setComment(e.getMessage());
		}
		finally {
			if(hbnSession != null) {hbnSession.close();}
		}
		
		return response;
	}

	public void define(OrkSerializer serializer) throws OrkException {
		
		userState = (UserState)serializer.enumValue("userstate", userState, true);
		loginString = serializer.stringValue("loginstring", loginString, true);
		recPort = serializer.stringValue("recport", recPort, true);
	}

	public String getOrkClassName() {
		return "userstate";
	}

	public void validate() {
		// TODO Auto-generated method stub
		
	}

}