package net.lr.tasklist.persistence.impl; import java.util.Collection; import javax.persistence.criteria.CriteriaQuery; import net.lr.tasklist.model.Task; import net.lr.tasklist.model.TaskService; import org.apache.aries.jpa.template.JpaTemplate; import org.osgi.service.component.annotations.Component; import org.osgi.service.component.annotations.Reference; @Component public class TaskServiceImpl implements TaskService { @Reference(target = "(osgi.unit.name=tasklist)") JpaTemplate jpa; @Override public Task getTask(Integer id) { return jpa.txExpr(em -> em.find(Task.class, id)); } @Override public void addTask(Task task) { if (task.getId() == null) { throw new IllegalArgumentException("Id property must be set"); } System.err.println("Adding task " + task.getId()); jpa.tx(em -> { em.persist(task); em.flush(); }); } @Override public Collection<Task> getTasks() { return jpa.txExpr(em -> { CriteriaQuery<Task> query = em.getCriteriaBuilder().createQuery(Task.class); return em.createQuery(query.select(query.from(Task.class))).getResultList(); }); } @Override public void updateTask(Task task) { jpa.tx(em -> em.merge(task)); } @Override public void deleteTask(Integer id) { jpa.tx(em -> em.remove(getTask(id))); } }