Package cz.cvut.fel.wa2.interior.dao

Source Code of cz.cvut.fel.wa2.interior.dao.GenericDAO

package cz.cvut.fel.wa2.interior.dao;

import com.google.appengine.api.datastore.Key;
import com.google.appengine.api.datastore.KeyFactory;
import cz.cvut.fel.wa2.interior.entity.AbstractEntity;
import cz.cvut.fel.wa2.interior.entity.Product;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import javax.jdo.JDOObjectNotFoundException;
import javax.jdo.PersistenceManager;
import javax.jdo.Query;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.orm.jdo.TransactionAwarePersistenceManagerFactoryProxy;
import org.springframework.stereotype.Repository;

/**
*
* @author Ondrej Panek
*/
@Repository
public abstract class GenericDAO {

    @Autowired
    protected TransactionAwarePersistenceManagerFactoryProxy persistenceManagerFactoryProxy;

    protected PersistenceManager createPersistenceManager() {
        return persistenceManagerFactoryProxy.getTargetPersistenceManagerFactory().getPersistenceManager();
    }

    public <ENTITY extends AbstractEntity> ENTITY persist(ENTITY o) {
        PersistenceManager pm = createPersistenceManager();
        try {
            pm.makePersistent(o);
            pm.flush();
        } finally {
            pm.close();
        }
        return o;
    }

    public <ENTITY extends AbstractEntity> void persistAll(Collection<ENTITY> entities) {
        PersistenceManager pm = createPersistenceManager();
        try {
            pm.makePersistentAll(entities);
            pm.flush();
        } finally {
            pm.close();
        }
    }

    public <ENTITY extends AbstractEntity> void update(ENTITY o) {
        PersistenceManager pm = createPersistenceManager();
        try {
            pm.makePersistent(o);
            pm.flush();
        } finally {
            pm.close();
        }
    }

    public <ENTITY extends AbstractEntity> void updateAll(Collection<ENTITY> entities) {
        PersistenceManager pm = createPersistenceManager();
        try {
            pm.makePersistentAll(entities);
            pm.flush();
        } finally {
            pm.close();
        }
    }

    public <ENTITY extends AbstractEntity> void removeById(Class<ENTITY> clazz, Long id) {
        PersistenceManager pm = createPersistenceManager();
        Key key = KeyFactory.createKey(clazz.getSimpleName(), id);
        try {
            ENTITY object = (ENTITY) pm.getObjectById(clazz, key);
            if (object != null) {
                pm.deletePersistent(object);
                pm.flush();
            }
        } catch (JDOObjectNotFoundException e) {
            return;
        } finally {
            pm.close();
        }
    }

    public <ENTITY extends AbstractEntity> void removeByComplexId(Class<ENTITY> clazz, Long id, Class parentClazz, Long parentId) {
        PersistenceManager pm = createPersistenceManager();
        Key key = KeyFactory.createKey(KeyFactory.createKey(parentClazz.getSimpleName(), parentId), clazz.getSimpleName(), id);
        try {
            ENTITY object = (ENTITY) pm.getObjectById(clazz, key);
            if (object != null) {
                pm.deletePersistent(object);
                pm.flush();
            }
        } catch (JDOObjectNotFoundException e) {
            return;
        } finally {
            pm.close();
        }
    }

    public <ENTITY extends AbstractEntity> ENTITY findById(Class<ENTITY> clazz, Long id) {
        PersistenceManager pm = createPersistenceManager();
        Key key = KeyFactory.createKey(clazz.getSimpleName(), id);

        ENTITY object = null;
        try {
            object = (ENTITY) pm.getObjectById(clazz, key);
        } catch (JDOObjectNotFoundException e) {
            return null;
        } finally {
            pm.close();
        }
        return object;
    }
   
    public <ENTITY extends AbstractEntity> ENTITY findById(Class<ENTITY> clazz, String id) {
        PersistenceManager pm = createPersistenceManager();
        Key key = KeyFactory.createKey(clazz.getSimpleName(), id);

        ENTITY object = null;
        try {
            object = (ENTITY) pm.getObjectById(clazz, key);
        } catch (JDOObjectNotFoundException e) {
            return null;
        } finally {
            pm.close();
        }
        return object;
    }

    public <ENTITY extends AbstractEntity> ENTITY findByComplexId(Class<ENTITY> clazz, Long id, Class parentClazz, Long parentId) {
        PersistenceManager pm = createPersistenceManager();
        Key key = KeyFactory.createKey(KeyFactory.createKey(parentClazz.getSimpleName(), parentId), clazz.getSimpleName(), id);
        ENTITY entity = null;
        try {
            entity = (ENTITY) pm.getObjectById(clazz, key);
        } catch (JDOObjectNotFoundException e) {
            return null;
        } finally {
            pm.close();
        }
        return entity;
    }

    public <ENTITY extends AbstractEntity> List<ENTITY> findAll(Class<ENTITY> clazz, String orderProperty, Boolean asc) {
        PersistenceManager pm = createPersistenceManager();

        List<ENTITY> results = new ArrayList<>();
        try {
            Query query = pm.newQuery(clazz);
            String direction = asc ? "asc" : "desc";
            query.setOrdering(orderProperty + " " + direction);

            results = (List<ENTITY>) query.execute();
        } finally {
            pm.close();
        }
        return results;
    }

    public <ENTITY extends AbstractEntity> long findAllCount(Class<ENTITY> clazz) {
        PersistenceManager pm = createPersistenceManager();

        long count = 0;
        try {
            Query query = pm.newQuery(clazz);
            query.setResult("count(id)");

            count = (long) query.execute();
        } finally {
            pm.close();
        }
        return count;
    }
   
    public <ENTITY extends AbstractEntity> List<ENTITY> findByProperty(Class<ENTITY> clazz, String property, Class valueClass, Object value) {
        PersistenceManager pm = createPersistenceManager();
       
        List<ENTITY> results = new ArrayList<>();
        try {
            Query query = pm.newQuery(clazz);
            query.setFilter(property + " == value");
            query.declareParameters(valueClass.getName() + " value");
           
            results = (List<ENTITY>) query.execute(value);
        } finally {
            pm.close();
        }
        return results;
    }

    public long findByPropertyCount(Class clazz, String property, Class valueClass, Object value) {
        PersistenceManager pm = createPersistenceManager();

        long count = 0;
        try {
            Query query = pm.newQuery(clazz);
            query.setFilter(property + " == value");
            query.declareParameters(valueClass.getName() + " value");
            query.setResult("count(id)");

            count = (long) query.execute(value);

        } finally {
            pm.close();
        }
        return count;
    }
}
TOP

Related Classes of cz.cvut.fel.wa2.interior.dao.GenericDAO

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.