package ru.semiot.services.analyzing.database;
import java.util.Collection;
import java.util.Date;
import java.util.List;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.NoResultException;
import javax.persistence.PersistenceContext;
import org.json.JSONArray;
import org.json.JSONObject;
@Stateless
public class DefaultEventsDataBase implements EventsDataBase {
@PersistenceContext(unitName = "DataSource")
private EntityManager em;
private static int counter = 0;
private static final int EVENTS = 288;
private static final int MAX_EVENTS_FOR_QUERY = 1000;
@Override
public void appendEvents(int query_id, String events) {
int id = query_id * MAX_EVENTS_FOR_QUERY + counter;
Events e;
try {
e = em.createQuery("SELECT e FROM Events e WHERE e.id = :id", Events.class).setParameter("id", id).getSingleResult();
e.setEvents(events);
} catch (NoResultException ex) {
Query q = em.createNamedQuery("Query.findById", Query.class).setParameter("id", query_id).getSingleResult();
e = new Events(id, q, events);
}
em.merge(e);
em.flush();
if (counter < EVENTS) {
counter++;
} else {
counter = 0;
}
}
@Override
public JSONArray getEventsByQueryId(int query_id) {
try {
Query q = em.createNamedQuery("Query.findById", Query.class).setParameter("id", query_id).getSingleResult();
Collection<Events> list = q.getEventsCollection();
if(list == null)
return null;
JSONArray arr = new JSONArray();
for (Events e : list) {
arr.put(new JSONObject(e.toString()));
}
return arr;
} catch (NoResultException ex) {
return null;
}
}
@Override
public JSONObject getEventsById(int id) {
Events e = em.find(Events.class, id);
if (e != null) {
JSONObject object = new JSONObject(e.toString());
return object;
}
return null;
}
@Override
public JSONObject removeEventsById(int id) {
Events e = em.find(Events.class, id);
if (e != null) {
em.remove(e);
return new JSONObject(e.toString());
} else {
return null;
}
}
@Override
public long getCount() {
return (Long) em.createQuery("SELECT COUNT(e.id) FROM Events e").getSingleResult();
}
@Override
public JSONArray removeEventsByQueryId(int query_id) {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
@Override
public JSONArray getEventsByTime(long start, long end, int query_id) {
try {
Query q = em.createNamedQuery("Query.findById", Query.class).setParameter("id", query_id).getSingleResult();
JSONArray arr = new JSONArray();
List<Events> list = em.createNamedQuery("Events.findByTime", Events.class).setParameter("st_time", new Date(start)).setParameter("end_time", new Date (end)).setParameter("id", q).getResultList();
if(list == null)
return arr;
for (Events e : list) {
arr.put(new JSONObject(e.toString()));
}
return arr;
}catch (NoResultException ex) {
System.out.println("start " + start + " end " + end);
return null;
}
}
}