/*
* Copyright (C) 2008 Universidade Federal de Campina Grande
*
* This file is part of OurGrid.
*
* OurGrid is free software: you can redistribute it and/or modify it under the
* terms of the GNU Lesser General Public License as published by the Free
* Software Foundation, either version 3 of the License, or (at your option)
* any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
* for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
package org.ourgrid.peer.business.dao.statistics;
import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.criterion.Restrictions;
import org.ourgrid.common.BrokerLoginResult;
import org.ourgrid.common.internal.IResponseTO;
import org.ourgrid.common.statistics.beans.peer.Login;
import org.ourgrid.common.statistics.beans.peer.Peer;
import org.ourgrid.common.statistics.beans.peer.User;
import org.ourgrid.common.statistics.util.hibernate.HibernateUtil;
import org.ourgrid.peer.business.dao.PeerDAOFactory;
import org.ourgrid.peer.business.dao.UsersDAO;
import org.ourgrid.peer.business.util.LoggerUtil;
import org.ourgrid.peer.to.PeerUser;
/**
*
*/
public class LoginDAO extends EntityDAO {
public void insert(List<IResponseTO> responses, Login login) {
responses.add(LoggerUtil.enter());
Session session = HibernateUtil.getSession();
session.save(login);
session.flush();
responses.add(LoggerUtil.leave());
}
public Login findCurrentLogin(List<IResponseTO> responses, User user) {
responses.add(LoggerUtil.enter());
Criteria criteria = HibernateUtil.getSession().createCriteria(Login.class);
criteria.add(Restrictions.eq("user", user));
criteria.add(Restrictions.isNull("endTime"));
Login login = (Login) criteria.uniqueResult();
responses.add(LoggerUtil.leave());
return login;
}
public void update(List<IResponseTO> responses, Login login) {
responses.add(LoggerUtil.enter());
Session session = HibernateUtil.getSession();
session.update(login);
session.flush();
responses.add(LoggerUtil.leave());
}
public void login(List<IResponseTO> responses, PeerUser peerUser, BrokerLoginResult loginResult, String myUserAtServer, String myCertSubjectDN,
String description, String email, String label, String latitude, String longitude) {
UsersDAO userDAO = PeerDAOFactory.getInstance().getUsersDAO();
PeerDAO peerDAO = PeerDAOFactory.getInstance().getPeerDAO();
String login = peerUser.getLogin();
User user = userDAO.findByUserAtServer(responses, login);
if (user == null) {
Peer peer = peerDAO.updatePeer(responses, myUserAtServer, myCertSubjectDN, description, email, label, latitude, longitude);
user = userDAO.insertUser(responses, login, peer);
if (loginResult.hasAnErrorOcurred()) {
user.setDeletionDate(user.getCreationDate());
}
userDAO.update(responses, user);
}
Login currentLogin = findCurrentLogin(responses, user);
if (currentLogin != null && currentLogin.getEndTime() == null) {
currentLogin.setEndTime(now());
update(responses, currentLogin);
}
Login newLogin = new Login();
newLogin.setUser(user);
//user.getLogins().add(loginObj);
newLogin.setLastModified(now());
newLogin.setBeginTime(now());
if (loginResult.hasAnErrorOcurred()) {
newLogin.setLoginResult(loginResult.getErrorMessage());
newLogin.setEndTime(now());
} else {
if (user.getPublicKey() == null) {
user.setPublicKey(peerUser.getPublicKey());
}
newLogin.setLoginResult(BrokerLoginResult.OK);
}
insert(responses, newLogin);
}
public void localConsumerFailure(List<IResponseTO> responses, PeerUser user) {
UsersDAO userDAO = PeerDAOFactory.getInstance().getUsersDAO();
String loginStr = user.getLogin();
User userObj = userDAO.findByUserAtServer(responses, loginStr);
if (userObj == null) {
//throw new CommuneRuntimeException("The user is not added: " + loginStr);
throw new RuntimeException("The user is not added: " + loginStr);
}
Login login = findCurrentLogin(responses, userObj);
if (login == null) {
//throw new CommuneRuntimeException("The user is not logged: " + loginStr);
throw new RuntimeException("The user is not logged: " + loginStr);
}
login.setEndTime(now());
login.setLastModified(now());
update(responses, login);
}
@SuppressWarnings("unchecked")
public void clearLogins(List<IResponseTO> responses, Long lastUptime) {
Criteria criteria = HibernateUtil.getSession().createCriteria(Login.class);
criteria.add(Restrictions.isNull("endTime"));
List<Login> logins = criteria.list();
for (Login login : logins) {
login.setEndTime(lastUptime);
login.setLastModified(lastUptime);
update(responses, login);
}
}
}