Package com.impetus.kundera.tests.embeddedRDBMS

Source Code of com.impetus.kundera.tests.embeddedRDBMS.EmbeddedRDBMSUserTest

/*******************************************************************************
* * Copyright 2012 Impetus Infotech.
*  *
*  * Licensed under the Apache License, Version 2.0 (the "License");
*  * you may not use this file except in compliance with the License.
*  * 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 com.impetus.kundera.tests.embeddedRDBMS;

import java.nio.ByteBuffer;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.Query;

import org.apache.cassandra.locator.SimpleStrategy;
import org.apache.cassandra.thrift.CfDef;
import org.apache.cassandra.thrift.ColumnDef;
import org.apache.cassandra.thrift.IndexType;
import org.apache.cassandra.thrift.InvalidRequestException;
import org.apache.cassandra.thrift.KsDef;
import org.apache.cassandra.thrift.NotFoundException;
import org.apache.cassandra.thrift.SchemaDisagreementException;
import org.apache.thrift.TException;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.impetus.client.crud.RDBMSCli;
import com.impetus.kundera.client.cassandra.persistence.CassandraCli;
import com.impetus.kundera.property.accessor.DateAccessor;

/**
* @author Kuldeep Mishra
*
*/
public class EmbeddedRDBMSUserTest
{
    private RDBMSCli cli;

    private static final String KEYSPACE = "KunderaTests";

    /** the log used by this class. */
    private static Logger log = LoggerFactory.getLogger(EmbeddedRDBMSUserTest.class);

    /**
     * @throws java.lang.Exception
     */
    @Before
    public void setUp() throws Exception
    {
       
        try
        {
            CassandraCli.cassandraSetUp();
            CassandraCli.initClient();
            CassandraCli.createKeySpace("Pickr");
            loadData();
            cli = new RDBMSCli(KEYSPACE);
            cli.createSchema(KEYSPACE);
            createTable();
        }
        catch (Exception e)
        {
            log.error("Error in RDBMS cli ", e);
        }
    }

    /**
     * @throws java.lang.Exception
     */
    @After
    public void tearDown() throws Exception
    {
        truncateRdbms();
        truncateColumnFamily();
        // HBaseCli.stopCluster();
    }

    @Test
    public void test()
    {

        EntityManagerFactory emf = Persistence
                .createEntityManagerFactory("rdbms,secIdxAddCassandra,piccandra,addMongo,picongo");
        try
        {
            loadData();
        }
        catch (InvalidRequestException e)
        {

           
        }
        catch (TException e)
        {

           
        }
       
        EntityManager em = emf.createEntityManager();
        // em.getTransaction().begin();
        // em.setFlushMode(FlushModeType.COMMIT);

        // prepare user object.
        User user = addUser();

        // Add Personal Details
        addPersonalDetails(user);

        // Persist user with tweets.
        persist(user, em);
        em.clear();

        // Find by Id
        user = findByKey(em, user.getUserId());

        // Add tweets.(e.g. Association mapping)
        addTweets(user, "big data sample 1 for demo", DateAccessor.getDateByPattern("MAY/22/2012 8:12:30"), "tweet_1");
        addTweets(user, "big data sample 2 for demo", DateAccessor.getDateByPattern("22-MAY-2012"), "tweet_2");

        // Persist user with tweets.
        persist(user, em);
        em.clear();

        // Execute query.
        String query = "Select u from User u";
        findByQuery(em, query);

        // Query by parameter
        query = "Select u from User u where u.emailId =?1";

        // find by named parameter(e.g. email)
        findByEmail(em, query, "bigdata@impetus.com");

        // em.getTransaction().commit();

    }

    private static void addPersonalDetails(User user)
    {
        PersonalDetail personalDetail = new PersonalDetail();
        personalDetail.setName("bigdata");
        personalDetail.setPassword("xxxxxx");
        personalDetail.setPersonalDetailId("1");
        personalDetail.setAge(null);
        user.setPersonalDetail(personalDetail);
    }

    /**
     * @param user
     */
    private static void addTweets(User user, String body, Date tweetDate, String tweetId)
    {
        Tweets tweet = new Tweets();
        tweet.setTweetId(tweetId);
        tweet.setBody(body);
        tweet.setTweetDate(tweetDate);

        user.getTweets().add(tweet);

    }

    /**
     * @return
     */
    private static User addUser()
    {
        User user = new User();
        user.setUserId("impetus_user");
        user.setEmailId("bigdata@impetus.com");
        user.setFirstName("bigdata");
        user.setLastName("impetus");
        user.setTweets(new HashSet<Tweets>());
        return user;
    }

    /**
     * @param user
     */
    private static void persist(User user, EntityManager em)
    {
        em.persist(user);
    }

    /**
     * @param em
     * @param userId
     */
    private static User findByKey(EntityManager em, String userId)
    {
        User user = em.find(User.class, userId);
        System.out.println("[On Find by key]");
        System.out.println("#######################START##########################################");
        System.out.println("\n");
        System.out.println("\t\t User's first name:" + user.getFirstName());
        System.out.println("\t\t User's emailId:" + user.getEmailId());
        System.out.println("\t\t User's total tweets:" + user.getTweets());
        System.out.println("\n");
        System.out.println("#######################END############################################");
        System.out.println("\n");
        return user;
    }

    /**
     * @param em
     * @param query
     */
    private static void findByQuery(EntityManager em, String query)
    {
        Query q = em.createNamedQuery(query);

        System.out.println("[On Find All by Query]");
        List<User> users = q.getResultList();

        if (users == null)
        {
            System.out.println("0 Users Returned");
            return;
        }

        System.out.println("#######################START##########################################");
        System.out.println("\t\t Total number of users:" + users.size());
        System.out.println("\t\t User's total tweets:" + users.get(0).getTweets().size());
        printTweets(users);
        System.out.println("\n");
        // System.out.println("First tweet:" users.get(0).getTweets().);
        System.out.println("#######################END############################################");
        System.out.println("\n");
    }

    private static void findByEmail(EntityManager em, String query, String parameter)
    {
        Query q = em.createNamedQuery(query);
        System.out.println("[On Find by Email]");
        System.out.println("#######################START##########################################");
        q.setParameter(1, parameter);

        List<User> users = q.getResultList();

        if (users == null)
        {
            System.out.println("0 Users Returned");
            return;
        }

        printTweets(users);
        System.out.println("\n");
        System.out.println("#######################END############################################");
    }

    private static void printTweets(List<User> users)
    {
        // No null check as already knew it will not be null.
        Iterator<Tweets> tweets = users.get(0).getTweets().iterator();

        int counter = 1;
        while (tweets.hasNext())
        {
            System.out.println("\n");
            System.out.println("\t\t Tweet No:#" + counter++);
            Tweets rec = tweets.next();
            System.out.println("\t\t tweet is ->" + rec.getBody());
            System.out.println("\t\t Tweeted at ->" + rec.getTweetDate());
        }
    }

    private void createTable() throws SQLException
    {
        try
        {
            cli.update("CREATE TABLE KUNDERATESTS.user (emailId VARCHAR(150), first_name VARCHAR(150), last_name VARCHAR(150), name VARCHAR(150), password VARCHAR(150), personal_detail_id VARCHAR(150), rel_status VARCHAR(150), user_id VARCHAR(150),age INT)");
        }
        catch (Exception e)
        {
            cli.update("DELETE FROM KUNDERATESTS.user");
            cli.update("DROP TABLE KUNDERATESTS.user");
            cli.update("CREATE TABLE KUNDERATESTS.user (emailId VARCHAR(150), first_name VARCHAR(150), last_name VARCHAR(150), name VARCHAR(150), password VARCHAR(150), personal_detail_id VARCHAR(150), rel_status VARCHAR(150), user_id VARCHAR(150),age INT)");
        }
    }

    private void truncateRdbms()
    {
        try
        {
            cli.update("DELETE FROM KUNDERATESTS.user");
            cli.update("DROP TABLE KUNDERATESTS.user");
            cli.shutdown();
        }
        catch (Exception e)
        {
            // do nothing..weird!!
        }

    }

    private void truncateColumnFamily()
    {
        String[] columnFamily = new String[] { "tweets" };
        CassandraCli.truncateColumnFamily(KEYSPACE, columnFamily);
    }

    private void loadData() throws InvalidRequestException, TException, SchemaDisagreementException
    {
        KsDef ksDef = null;

        CfDef cfDef = new CfDef();
        cfDef.name = "tweets";
        cfDef.keyspace = KEYSPACE;
        // cfDef.column_type = "Super";
        cfDef.setComparator_type("UTF8Type");
        cfDef.setDefault_validation_class("UTF8Type");
        ColumnDef columnDefPersonName = new ColumnDef(ByteBuffer.wrap("body".getBytes()), "UTF8Type");
        columnDefPersonName.index_type = IndexType.KEYS;

        ColumnDef columnDefAddressId = new ColumnDef(ByteBuffer.wrap("tweeted_at".getBytes()), "DateType");
        columnDefAddressId.index_type = IndexType.KEYS;

        ColumnDef columnDefUserId = new ColumnDef(ByteBuffer.wrap("user_id".getBytes()), "UTF8Type");
        columnDefUserId.index_type = IndexType.KEYS;

        cfDef.addToColumn_metadata(columnDefPersonName);
        cfDef.addToColumn_metadata(columnDefAddressId);
        cfDef.addToColumn_metadata(columnDefUserId);

        List<CfDef> cfDefs = new ArrayList<CfDef>();
        cfDefs.add(cfDef);

        try
        {
            ksDef = CassandraCli.client.describe_keyspace(KEYSPACE);
            CassandraCli.client.set_keyspace(KEYSPACE);

            List<CfDef> cfDefn = ksDef.getCf_defs();

            // CassandraCli.client.set_keyspace("KunderaTests");
            for (CfDef cfDef1 : cfDefn)
            {

                if (cfDef1.getName().equalsIgnoreCase("tweets"))
                {

                    CassandraCli.client.system_drop_column_family("tweets");

                }
            }
            CassandraCli.client.system_add_column_family(cfDef);

        }
        catch (NotFoundException e)
        {
            addKeyspace(ksDef, cfDefs);
        }

        CassandraCli.client.set_keyspace(KEYSPACE);

    }

    private void addKeyspace(KsDef ksDef, List<CfDef> cfDefs) throws InvalidRequestException,
            SchemaDisagreementException, TException
    {
        ksDef = new KsDef(KEYSPACE, SimpleStrategy.class.getSimpleName(), cfDefs);
        // Set replication factor
        if (ksDef.strategy_options == null)
        {
            ksDef.strategy_options = new LinkedHashMap<String, String>();
        }
        // Set replication factor, the value MUST be an integer
        ksDef.strategy_options.put("replication_factor", "1");
        CassandraCli.client.system_add_keyspace(ksDef);
    }
}
TOP

Related Classes of com.impetus.kundera.tests.embeddedRDBMS.EmbeddedRDBMSUserTest

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.