com.opengamma.security.user.HibernateUserManager.java Source code

Java tutorial

Introduction

Here is the source code for com.opengamma.security.user.HibernateUserManager.java

Source

/**
 * Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies
 * 
 * Please see distribution for license.
 */
package com.opengamma.security.user;

import java.sql.SQLException;

import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.springframework.orm.hibernate3.HibernateCallback;
import org.springframework.orm.hibernate3.HibernateTemplate;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.transaction.annotation.Transactional;

import com.opengamma.security.user.Authority;
import com.opengamma.security.user.User;
import com.opengamma.security.user.UserGroup;
import com.opengamma.security.user.UserManager;
import com.opengamma.util.ArgumentChecker;
import com.opengamma.util.db.DbConnector;

/**
 * A manager providing access to the security subsystem.
 */
@Transactional
public class HibernateUserManager implements UserManager, UserDetailsService {

    /**
     * The Hibernate template.
     */
    private HibernateTemplate _hibernateTemplate;

    /**
     * Creates an instance providing access to the database.
     * @param dbConnector  the database connector, not null
     */
    public HibernateUserManager(DbConnector dbConnector) {
        _hibernateTemplate = dbConnector.getHibernateTemplate();
    }

    //-------------------------------------------------------------------------
    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
        User user = getUser(username);
        if (user == null) {
            throw new UsernameNotFoundException(username);
        }
        return user;
    }

    @Override
    public User getUser(final String username) {
        ArgumentChecker.notNull(username, "User name");

        return _hibernateTemplate.execute(new HibernateCallback<User>() {
            @Override
            public User doInHibernate(Session session) throws HibernateException, SQLException {
                Query query = session.getNamedQuery("User.one.byUsername");
                query.setString("username", username);
                return (User) query.uniqueResult();
            }
        });
    }

    @Override
    public UserGroup getUserGroup(final String name) {
        ArgumentChecker.notNull(name, "Group name");

        return _hibernateTemplate.execute(new HibernateCallback<UserGroup>() {
            @Override
            public UserGroup doInHibernate(Session session) throws HibernateException, SQLException {
                Query query = session.getNamedQuery("UserGroup.one.byName");
                query.setString("name", name);
                return (UserGroup) query.uniqueResult();
            }
        });
    }

    @Override
    public Authority getAuthority(final String regex) {
        ArgumentChecker.notNull(regex, "Authority");

        return _hibernateTemplate.execute(new HibernateCallback<Authority>() {
            @Override
            public Authority doInHibernate(Session session) throws HibernateException, SQLException {
                Query query = session.getNamedQuery("Authority.one.byAuthorityRegex");
                query.setString("regex", regex);
                return (Authority) query.uniqueResult();
            }
        });
    }

    @Override
    public void addUser(User user) {
        ArgumentChecker.notNull(user, "User");
        _hibernateTemplate.save(user);
    }

    @Override
    public void deleteUser(User user) {
        ArgumentChecker.notNull(user, "User");
        _hibernateTemplate.delete(user);
    }

    @Override
    public void updateUser(User user) {
        ArgumentChecker.notNull(user, "User");
        _hibernateTemplate.update(user);
    }

    @Override
    public void addUserGroup(UserGroup group) {
        ArgumentChecker.notNull(group, "User group");
        _hibernateTemplate.save(group);
    }

    @Override
    public void deleteUserGroup(UserGroup group) {
        ArgumentChecker.notNull(group, "User group");
        _hibernateTemplate.delete(group);
    }

    @Override
    public void updateUserGroup(UserGroup group) {
        ArgumentChecker.notNull(group, "User group");
        _hibernateTemplate.update(group);
    }

    @Override
    public void addAuthority(Authority authority) {
        ArgumentChecker.notNull(authority, "Authority");
        _hibernateTemplate.save(authority);
    }

    @Override
    public void deleteAuthority(Authority authority) {
        ArgumentChecker.notNull(authority, "Authority");
        _hibernateTemplate.delete(authority);
    }

    @Override
    public void updateAuthority(Authority authority) {
        ArgumentChecker.notNull(authority, "Authority");
        _hibernateTemplate.update(authority);
    }

}