ActivityRepositoryImpl.java
package com.oracle.interview.db;
import com.oracle.interview.db.entity.Activity;
import com.oracle.interview.db.entity.User;
import io.dropwizard.hibernate.AbstractDAO;
import org.hibernate.SessionFactory;
import org.hibernate.query.Query;
import java.util.List;
import java.util.Optional;
/**
* Default implementation if {@link ActivityRepository}.
* It uses the {@link AbstractDAO} to access to the data source
*/
public class ActivityRepositoryImpl extends AbstractDAO<Activity> implements ActivityRepository {
public ActivityRepositoryImpl(SessionFactory sessionFactory) {
super(sessionFactory);
}
/**
* {@inheritDoc}
*/
@Override
public Activity addActivity(Activity activity) {
return persist(activity);
}
/**
* {@inheritDoc}
* @param user
*/
@Override
public Optional<List<Activity>> getActivities(User user) {
Query<Activity> query = namedTypedQuery("com.oracle.activity.findAll");
query.setParameter("user", user);
List<Activity> activities = list(query);
if (activities == null || activities.isEmpty()) {
return Optional.empty();
}
return Optional.of(activities);
}
/**
* {@inheritDoc}
*/
@Override
public Optional<Activity> getActivityById(String id) {
return Optional.ofNullable(get(id));
}
/**
* {@inheritDoc}
*/
@Override
public Optional<Activity> editActivity(Activity activity) {
Optional<Activity> activityById = getActivityById(activity.getId());
if (!activityById.isPresent()) {
return Optional.empty();
}
Activity a = activityById.get();
a.setDescription(activity.getDescription());
a.setDate(activity.getDate());
a.setDone(activity.isDone());
return Optional.ofNullable(persist(a));
}
@Override
public int removeAll() {
Query<?> activityQuery = namedQuery("com.oracle.activity.deleteAll");
return activityQuery.executeUpdate();
}
@Override
public Optional<Activity> removeById(String id) {
Optional<Activity> activityById = getActivityById(id);
if (!activityById.isPresent()) {
return Optional.empty();
}
Query<?> activityQuery = namedQuery("com.oracle.activity.deleteById");
activityQuery.setParameter("id", id);
int deleted = activityQuery.executeUpdate();
if (deleted == 0) {
return Optional.empty();
}
return activityById;
}
}