Team:Freiburg software/Code/DatastoreManager.java

/*    Copyright: synbiowave License: GPL Authors: Jörg Walossek Version: 0.1 DESCRIPTION: This class provides all methods needed for import and export data to an internal database. */

package org.synbiowave.database;

import java.util.List;

import javax.jdo.JDOHelper; import javax.jdo.PersistenceManager; import javax.jdo.PersistenceManagerFactory; import javax.jdo.Query; import javax.jdo.Transaction;

// TODO: Auto-generated Javadoc /** * The Class DatastoreManager. */ public class DatastoreManager { /** The Constant pmfInstance. */	private static final PersistenceManagerFactory pmfInstance=JDOHelper.getPersistenceManagerFactory("transactions-optional");

/**	 * Instantiates a new datastore manager. */	public DatastoreManager{} /**	 * Store. * 	 * @param o the o	 * * @return the t	 * * @throws Exception the exception */	public static  T store(T o) throws Exception{ PersistenceManager pm=pmfInstance.getPersistenceManager; Transaction tx=pm.currentTransaction; try{ tx.begin; pm.makePersistent(o); tx.commit;} finally{ if(tx.isActive){ tx.rollback; throw new Exception("Error storing object, sequence rollbacked.");} pm.close;} return o;} /**	 * Gets the all. * 	 * @param o the o	 * * @return the all * 	 * @throws Exception the exception */	@SuppressWarnings("unchecked") public static  List getAll(T o) throws Exception{ // add ordered params List results=null; PersistenceManager pm=pmfInstance.getPersistenceManager; Transaction tx=pm.currentTransaction; try{ tx.begin; Query q = pm.newQuery(o.getClass); results = (List) q.execute; tx.commit;} finally{ if(tx.isActive){ tx.rollback; throw new Exception("Error getting all objects, sequence rollbacked.");} pm.close;} return results;} /**    * Gets the by id. *     * @param o the o     * @param qID the q id     * * @return the by id    * * @throws Exception the exception */   @SuppressWarnings("unchecked") public static  T getByID(T o,Long qID) throws Exception{ List results=null; PersistenceManager pm=pmfInstance.getPersistenceManager; Transaction tx=pm.currentTransaction; try{ tx.begin; Query q = pm.newQuery(o.getClass,"id == :qID"); results = (List) q.execute(qID); tx.commit;} finally{ if(tx.isActive){ tx.rollback; throw new Exception("Error getting object by ID, sequence rollbacked.");} pm.close;} if(!results.isEmpty){return results.get(0);} else{return null;}} /**    * Gets the by key value. *     * @param o the o     * @param key the key * @param value the value *     * @return the by key value *     * @throws Exception the exception */   @SuppressWarnings("unchecked") public static  List getByKeyValue(T o,String key,String value) throws Exception{ // add ordered params List results=null; PersistenceManager pm=pmfInstance.getPersistenceManager; Transaction tx=pm.currentTransaction; try{ tx.begin; Query q = pm.newQuery(o.getClass,key+" == :qName"); results = (List) q.execute(value); tx.commit;} finally{ if(tx.isActive){ tx.rollback; throw new Exception("Error getting object by key/value, sequence rollbacked.");} pm.close;} return results;} /**    * Gets the greater than key value. *     * @param o the o     * @param key the key * @param value the value *     * @return the greater than key value *     * @throws Exception the exception */   @SuppressWarnings("unchecked") public static  List getGreaterThanKeyValue(T o,String key,String value) throws Exception{ // add ordered params List results=null; PersistenceManager pm=pmfInstance.getPersistenceManager; Transaction tx=pm.currentTransaction; try{ tx.begin; Query q = pm.newQuery(o.getClass,key+" > :qName"); results = (List) q.execute(value); tx.commit;} finally{ if(tx.isActive){ tx.rollback; throw new Exception("Error getting object greater than value, sequence rollbacked.");} pm.close;} return results;} /**    * Delete. *     * @param o the o     * * @throws Exception the exception */   public static void delete(Object o) throws Exception{ PersistenceManager pm=pmfInstance.getPersistenceManager; Transaction tx=pm.currentTransaction; try{ tx.begin; Object ps=(Object) pm.getObjectById(o); pm.deletePersistent(ps); tx.commit;} finally{ if(tx.isActive){ tx.rollback; throw new Exception("Error deleting object, sequence rollbacked.");} pm.close;}} }