Package org.encuestame.persistence.dao.imp

Source Code of org.encuestame.persistence.dao.imp.ApplicationDao

/*
************************************************************************************
* Copyright (C) 2001-2011 encuestame: system online surveys Copyright (C) 2011
* encuestame Development Team.
* Licensed under the Apache Software License version 2.0
* You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
* Unless required by applicable law or agreed to  in writing,  software  distributed
* under the License is distributed  on  an  "AS IS"  BASIS,  WITHOUT  WARRANTIES  OR
* CONDITIONS OF ANY KIND, either  express  or  implied.  See  the  License  for  the
* specific language governing permissions and limitations under the License.
************************************************************************************
*/
package org.encuestame.persistence.dao.imp;

import org.encuestame.persistence.dao.IApplicationDao;
import org.encuestame.persistence.domain.application.Application;
import org.encuestame.persistence.domain.application.ApplicationConnection;
import org.encuestame.persistence.domain.security.UserAccount;
import org.encuestame.persistence.exception.EnMeNoResultsFoundException;
import org.encuestame.persistence.utils.SecureRandomStringKeyGenerator;
import org.hibernate.SessionFactory;
import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.Restrictions;
import org.jasypt.encryption.StringEncryptor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.support.DataAccessUtils;
import org.springframework.stereotype.Repository;

/**
* Data Repository for Applications Domains.
* @author Picado, Juan juanATencuestame.org
* @since Dec 23, 2010 1:05:45 PM
* @version $Id:$
*/

@Repository("applicationDao")
public class ApplicationDao extends AbstractHibernateDaoSupport implements IApplicationDao{

    private StringEncryptor encryptor;

    private SecureRandomStringKeyGenerator keyGenerator;

    /** Account Id. **/
    @Autowired
    private AccountDaoImp accountDaoImp;

    /**
     * Constructor.
     * Inject {@link SessionFactory}.
     */
    @Autowired
    public ApplicationDao(SessionFactory sessionFactory) {
         setSessionFactory(sessionFactory);
    }

    /**
     * Get Application By Key.
     * @param key
     * @return
     * @throws Exception
     */
    @SuppressWarnings("unchecked")
    public Application getApplicationByKey(final String key) throws Exception{
         final DetachedCriteria criteria = DetachedCriteria.forClass(Application.class);
         criteria.add(Restrictions.eq("apiKey", key) );
         final Application app = (Application) DataAccessUtils.uniqueResult(getHibernateTemplate().findByCriteria(criteria));
         log.debug("Application debug "+app);
         if(app == null){
             throw new Exception("application key not found");
         }
         return app;
    }

    //return jdbcTemplate.queryForObject("select c.member, a.apiKey,
    //c.accessToken, c.secret from AppConnection c inner join App a on c.app = a.id
    //where c.accessToken = ?",

    /**
     * Find App Connection by Access Token.
     * @throws EnMeNoResultsFoundException
     */
    @SuppressWarnings("unchecked")
    public ApplicationConnection findAppConnection(final String accessToken) throws EnMeNoResultsFoundException{
         final DetachedCriteria criteria = DetachedCriteria.forClass(ApplicationConnection.class);
         criteria.add(Restrictions.eq("accessToken", accessToken) );
         final ApplicationConnection app = (ApplicationConnection) DataAccessUtils.uniqueResult(getHibernateTemplate().findByCriteria(criteria));
         if(app == null){
            throw new EnMeNoResultsFoundException(accessToken);
         } else {
            return app;
         }
    }

    /**
     * Search Connection by Application Id and Account Id.
     * @param account
     * @param application
     * @return
     */
    @SuppressWarnings("unchecked")
    public ApplicationConnection searchConnectionByAppIdAndUserId(
            final UserAccount account, final Application application){
         final DetachedCriteria criteria = DetachedCriteria.forClass(ApplicationConnection.class);
         criteria.add(Restrictions.eq("account", account) );
         criteria.add(Restrictions.eq("application", application) );
         final ApplicationConnection app = (ApplicationConnection) DataAccessUtils.uniqueResult(getHibernateTemplate().findByCriteria(criteria));
        return app;
    }

    /**
     * Create Application Connection.
     * @param accountId user account id
     * @param apiKey key application.
     * @return
     * @throws Exception
     */
    public ApplicationConnection
           connectApplication(final Long accountId, final String apiKey) throws Exception{
        final Application application = getApplicationByKey(apiKey);
        final UserAccount account = getAccountDaoImp().getUserAccountById(accountId);
        final ApplicationConnection app = searchConnectionByAppIdAndUserId(account, application);
        ApplicationConnection applicationConnection = null;
        if (app != null) {
            log.debug("Removing application connection id "+app.getConnectionId());
            getHibernateTemplate().delete(app);
        }
        //create new application connection.
        applicationConnection = new ApplicationConnection();
        final String accessToken = keyGenerator.generateKey();
        final String secret = keyGenerator.generateKey();
        applicationConnection.setApiKey(apiKey);
        applicationConnection.setApplication(application);
        applicationConnection.setAccessToken(accessToken);
        applicationConnection.setSecret(secret);
        applicationConnection.setAccount(account);
        getHibernateTemplate().saveOrUpdate(applicationConnection);
        log.debug("Created New Application Connection "+applicationConnection.getConnectionId());
        return applicationConnection;
    }

    /**
     * @return the accountDaoImp
     */
    public AccountDaoImp getAccountDaoImp() {
        return accountDaoImp;
    }

    /**
     * @param accountDaoImp the accountDaoImp to set
     */
    public void setAccountDaoImp(final AccountDaoImp accountDaoImp) {
        this.accountDaoImp = accountDaoImp;
    }
}
TOP

Related Classes of org.encuestame.persistence.dao.imp.ApplicationDao

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.