/* vim: set ts=2 et sw=2 cindent fo=qroca: */
package com.globant.katari.sample.testsupport;
import java.util.List;
import java.util.Date;
import org.apache.commons.lang.Validate;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.globant.katari.hibernate.coreuser.domain.Role;
import com.globant.katari.hibernate.coreuser.domain.RoleRepository;
import com.globant.katari.sample.time.domain.Activity;
import com.globant.katari.sample.time.domain.Project;
import com.globant.katari.sample.time.domain.TimeEntry;
import com.globant.katari.sample.time.domain.TimePeriod;
import com.globant.katari.sample.time.domain.TimeRepository;
import com.globant.katari.user.domain.User;
import com.globant.katari.user.domain.UserFilter;
import com.globant.katari.user.domain.UserRepository;
/** Utility class to help in the setup of test cases that need to interact with
* the database.
*/
public final class DataHelper {
/** A logger.
*/
private static Logger log = LoggerFactory.getLogger(DataHelper.class);
/** A private constructor so no instances are created.
*/
private DataHelper() {
}
/** Removes the extra users created by tests.
*
* It removes users with names that do not start with 'base-'. It also keeps
* the administrator.
*
* @param repository The user repository. It cannot be null.
*/
public static void removeExtraUsers(final UserRepository repository) {
Validate.notNull(repository, "The user repository cannot be null");
// Removes the unneeded users.
for (User user : repository.getUsers(new UserFilter())) {
log.debug("Found user " + user.getName());
boolean canDelete = !user.getName().equals("admin");
canDelete = canDelete & !user.getName().startsWith("base-");
if (canDelete) {
repository.remove(user);
}
}
}
/** Removes the extra roles created by tests.
*
* It removes roles with names that do not start with 'base-'. It also keeps
* the administrator role.
*
* @param repository The user repository. It cannot be null.
*/
public static void removeExtraRoles(final RoleRepository repository) {
Validate.notNull(repository, "The user repository cannot be null");
// Removes the unneeded users.
for (Role role : repository.getRoles()) {
log.debug("Found role " + role.getName());
boolean canDelete = !role.getName().equals("ADMINISTRATOR");
canDelete = canDelete & !role.getName().startsWith("base-");
if (canDelete) {
repository.remove(role);
}
}
}
/** Removes the extra time entries created by tests.
*
* @param repository The time entry repository. It cannot be null.
*/
public static void removeExtraTimeEntries(final TimeRepository repository) {
Validate.notNull(repository, "The time entry repository cannot be null");
// Removes the unneeded time entries.
for (TimeEntry timeEntry : repository.getTimeEntries()) {
log.debug("Found time entry " + timeEntry.getId());
repository.remove(timeEntry);
}
}
/** Creates a time entry for a certain date.
*
* @param repository The time entry repository. It cannot be null.
* @param user The user of the time entry.
* @param date The date of the time entry.
*/
public static void createTimeEntry(final TimeRepository repository,
final User user, final Date date) {
Validate.notNull(repository, "The time entry repository cannot be null");
List<Activity> activities = repository.getActivities();
Activity activity = activities.get(0);
List<Project> projects = repository.getProjects();
Project project = projects.get(0);
TimePeriod period = new TimePeriod("00:00", 1);
TimeEntry timeEntry = new TimeEntry(activity, user, project,
date, period, "Test note");
repository.save(timeEntry);
}
/** Creates a time entry for today.
*
* @param repository The time entry repository. It cannot be null.
*
* @param userId The user id of the time entry.
*/
public static void createTimeEntry(final TimeRepository repository,
final User user) {
createTimeEntry(repository, user, new Date());
}
}