UserService.java

package de.dlr.shepard.neo4Core.services;

import de.dlr.shepard.neo4Core.dao.UserDAO;
import de.dlr.shepard.neo4Core.entities.User;
import lombok.extern.slf4j.Slf4j;

@Slf4j
public class UserService {
	private UserDAO userDAO = new UserDAO();

	/**
	 * Stores a new user in Neo4J.
	 *
	 * @param user The user to be stored.
	 * @return The created user
	 */
	public User createUser(User user) {
		log.info("Create user {}", user);
		return userDAO.createOrUpdate(user);
	}

	/**
	 * Update a user in Neo4J. The user is created if it does not exist.
	 *
	 * @param user The user to be updated
	 * @return The updated user
	 */
	public User updateUser(User user) {
		User old = getUser(user.getUsername());
		if (old == null) {
			log.info("The user {} does not exist, creating...", user.getUsername());
			return userDAO.createOrUpdate(user);
		}

		String firstName = user.getFirstName() != null ? user.getFirstName() : old.getFirstName();
		String lastName = user.getLastName() != null ? user.getLastName() : old.getLastName();
		String email = user.getEmail() != null ? user.getEmail() : old.getEmail();

		if (!firstName.equals(old.getFirstName()) || !lastName.equals(old.getLastName())
				|| !email.equals(old.getEmail())) {
			old.setFirstName(firstName);
			old.setLastName(lastName);
			old.setEmail(email);
			log.info("Update user {}", old);
			return userDAO.createOrUpdate(old);
		}

		return old;
	}

	/**
	 * Returns the user with the given name.
	 *
	 * @param username of the user to be returned.
	 * @return The requested user.
	 */
	public User getUser(String username) {
		return userDAO.find(username);
	}

}