/**
*
*/
package mc.messages.store;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.Query;
import javax.persistence.TypedQuery;
import mc.messages.TextMessage;
import mc.messages.store.MessageStore;
/**
* This is the class to access objectDB message store
*
*
*/
public class ObjectDBMsgStore implements MessageStore {
private static EntityManagerFactory emf;
static {
try {
emf = Persistence
.createEntityManagerFactory("$objectdb/db/classified_messages.odb");
} catch (Exception e) {
// TODO: handle exception
}
}
/*
* (non-Javadoc)
*
* @see com.mc.msgstore.MessageStore#offer(com.mc.messages.TextMessage)
*/
@Override
public boolean offer(TextMessage message) {
try {
EntityManager em = emf.createEntityManager();
// Store TextMessage objects in the database
em.getTransaction().begin();
em.persist(message);
em.getTransaction().commit();
em.close();
return true;
} catch (Exception e) {
return false;
}
}
/* (non-Javadoc)
* @see com.mc.messages.store.MessageStore#remove()
*/
@Override
public TextMessage remove() {
TextMessage textMessage = null;
try {
EntityManager em = emf.createEntityManager();
TypedQuery<TextMessage> query = em.createQuery("SELECT m FROM TextMessage m", TextMessage.class)
.setFirstResult(0)
.setMaxResults(1);
List<TextMessage> textMessageList = query.getResultList();
textMessage = textMessageList.get(0);
em.getTransaction().begin();
em.remove(textMessage);
em.getTransaction().commit();
em.close();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
return textMessage;
}
/* (non-Javadoc)
* @see com.mc.messages.store.MessageStore#peek()
*/
@Override
public TextMessage peek() {
TextMessage textMessage = null;
try {
EntityManager em = emf.createEntityManager();
TypedQuery<TextMessage> query = em.createQuery("SELECT m FROM TextMessage m", TextMessage.class)
.setFirstResult(0)
.setMaxResults(1);
List<TextMessage> textMessageList = query.getResultList();
textMessage = textMessageList.get(0);
em.close();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
return textMessage;
}
/* (non-Javadoc)
* @see com.mc.messages.store.MessageStore#clear()
*/
@Override
public void clear() {
try {
EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
em.createQuery("DELETE FROM TextMessage").executeUpdate();
em.getTransaction().commit();
em.close();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
/* (non-Javadoc)
* @see com.mc.messages.store.MessageStore#remove(long)
*/
@Override
public TextMessage remove(long index) {
TextMessage textMessage = null;
try {
EntityManager em = emf.createEntityManager();
textMessage = em.find(TextMessage.class, index);
em.getTransaction().begin();
em.remove(textMessage);
em.getTransaction().commit();
em.close();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
return textMessage;
}
/* (non-Javadoc)
* @see com.mc.messages.store.MessageStore#size()
*/
@Override
public long size() {
long count = 0L;
try {
EntityManager em = emf.createEntityManager();
Query q = em.createQuery("SELECT COUNT(m) FROM TextMessage m");
count = (Long) q.getSingleResult();
em.close();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
return count;
}
/* (non-Javadoc)
* @see com.mc.messages.store.MessageStore#get(int)
*/
@Override
public TextMessage get(int index) {
TextMessage textMessage = null;
try {
EntityManager em = emf.createEntityManager();
// textMessage = em.find(TextMessage.class, index);
TypedQuery<TextMessage> query = em.createQuery("SELECT m FROM TextMessage m", TextMessage.class)
.setFirstResult(index)
.setMaxResults(1);
List<TextMessage> textMessageList = query.getResultList();
textMessage = textMessageList.get(0);
em.close();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
return textMessage;
}
/* (non-Javadoc)
* @see com.mc.msgstore.MessageStore#getAll()
*/
@Override
public List<TextMessage> getAll() {
List<TextMessage> allMessages = null;
try {
EntityManager em = emf.createEntityManager();
TypedQuery<TextMessage> query = em.createQuery(
"SELECT m FROM TextMessage m", TextMessage.class);
allMessages = query.getResultList();
em.close();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
return allMessages;
}
/*
* (non-Javadoc)
*
* @see mc.messages.store.MessageStore#getMessageCountOf(java.lang.String,
* java.lang.String)
*/
@Override
public long getMessageCountOf(String type, String category) {
long count = 0L;
try {
EntityManager em = emf.createEntityManager();
Query q = em.createQuery(
"SELECT COUNT(m) FROM TextMessage m WHERE "
+ type.toLowerCase() + "='" + category.toLowerCase() + "'",
TextMessage.class);
count = (Long) q.getSingleResult();
em.close();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
return count;
}
/* (non-Javadoc)
* @see mc.messages.store.MessageStore#getMessagesOf(java.lang.String, java.lang.String)
*/
@Override
public List<TextMessage> getMessagesOf(String type, String category) {
List<TextMessage> messages = null;
try {
EntityManager em = emf.createEntityManager();
TypedQuery<TextMessage> query = em.createQuery(
"SELECT m FROM TextMessage m WHERE " + type.toLowerCase()
+ "='" + category.toLowerCase() + "'", TextMessage.class);
messages = query.getResultList();
em.close();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
return messages;
}
/* (non-Javadoc)
* @see mc.messages.store.MessageStore#getCategoriesOf(java.lang.String)
*/
@Override
public List<String> getCategoriesOf(String type) {
List<String> categories = null;
try {
EntityManager em = emf.createEntityManager();
TypedQuery<String> query = em.createQuery("SELECT DISTINCT m."
+ type.toLowerCase() + " FROM TextMessage m", String.class);
categories = query.getResultList();
em.close();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
return categories;
}
}