package eu.aniketos.serviceruntime.data;
import eu.aniketos.serviceruntime.data.entities.Result;
import eu.aniketos.serviceruntime.data.entities.Service;
import eu.aniketos.serviceruntime.data.entities.ServiceTask;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceException;
import javax.persistence.Query;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class DataAdapterImpl implements DataAdapter {
private static Logger logger = LoggerFactory.getLogger(DataAdapterImpl.class);
private EntityManager em;
public void setEntityManager(EntityManager em) {
this.em = em;
}
@Override
public List<Result> getResults(String instanceId) {
Query q = em.createQuery("select r from Result r where r.instanceId=?1");
q.setParameter(1, instanceId);
return q.getResultList();
}
@Override
public String addService(String serviceName, String processId) {
Service service = new Service();
service.setService(serviceName);
service.setProcessId(processId);
try {
em.persist(service);
em.flush();
//em.clear();
} catch (PersistenceException e) {
logger.error("Error (1) persisting service: {}", e.getMessage());
return null;
}
if (serviceName.length() > 0) {
serviceName = String.format("an_%05d_%s",
service.getId(), serviceName);
}
else {
serviceName = String.format("an_%05d", service.getId());
}
service.setService(serviceName);
try {
em.persist(service);
em.flush();
em.clear();
return serviceName;
} catch (PersistenceException e) {
logger.error("Error (2) persisting service: {}", e.getMessage());
}
return null;
}
@Override
public void updateService(String serviceName, String processId, String deploymentId) {
Query q = em.createQuery("select s from Service s where s.service=?1");
q.setParameter(1, serviceName);
Service service;
List<Service> services = q.getResultList();
if (services != null && services.size() > 0) {
service = services.get(0);
}
else {
logger.debug("Service {} not found!", serviceName);
return;
}
service.setProcessId(processId);
service.setDeploymentId(deploymentId);
try {
em.persist(service);
em.flush();
em.clear();
} catch (PersistenceException e) {
logger.error("Error persisting service: {}", e.getMessage());
}
}
@Override
public Service getServiceByName(String serviceName) {
Query q = em.createQuery("select s from Service s where s.service=?1");
q.setParameter(1, serviceName);
List<Service> services = q.getResultList();
if (services != null && services.size() > 0) {
return services.get(0);
}
return null;
}
@Override
public String getProcessId(String service) {
Query q = em.createQuery("select s.processId from Service s where s.service=?1");
q.setParameter(1, service);
List<String> services = q.getResultList();
if (services != null && services.size() > 0) {
return services.get(0);
}
return null;
}
@Override
public long addServiceTask(String atomicServiceUrl, String taskId, String bpmn, String compositeServiceName) {
long serviceTaskId = -1;
ServiceTask serviceTask = new ServiceTask();
serviceTask.setAtomicServiceUrl(atomicServiceUrl);
serviceTask.setTaskId(taskId);
serviceTask.setCompositeServiceName(compositeServiceName);
serviceTask.setBpmn(bpmn);
try {
em.persist(serviceTask);
em.flush();
serviceTaskId = serviceTask.getId();
em.clear();
} catch (PersistenceException e) {
logger.error("Error (1) persisting service task: {}", e.getMessage());
}
return serviceTaskId;
}
@Override
public List<ServiceTask> getServiceTasksByAtomicService(String atomicServiceUrl) {
Query q = em.createQuery("select st from ServiceTask st where st.atomicServiceUrl=?1");
q.setParameter(1, atomicServiceUrl);
return q.getResultList();
}
@Override
public ServiceTask getServiceTask(String compositeServiceName, String taskId) {
Query q = em.createQuery("select st from ServiceTask st where st.compositeServiceName=?1 and st.taskId=?2");
q.setParameter(1, compositeServiceName);
q.setParameter(2, taskId);
List<ServiceTask> results = q.getResultList();
if (results != null && results.size() > 0) {
return results.get(0);
}
return null;
}
@Override
public int deleteServiceTasks(String compositeServiceName) {
Query q = em.createQuery("delete from ServiceTask st where st.compositeServiceName=?1");
q.setParameter(1, compositeServiceName);
int deletedCount = q.executeUpdate();
return deletedCount;
}
}