UserDtoToEntityContextService.java 2.54 KB
package net.ziemers.swxercise.lg.user.service;

import javax.ejb.Stateless;
import javax.inject.Inject;

import net.ziemers.swxercise.db.dao.user.UserDao;
import net.ziemers.swxercise.lg.model.user.Profile;
import net.ziemers.swxercise.lg.model.user.User;
import net.ziemers.swxercise.lg.user.dto.UserDto;

/**
 * Erzeugt den Erstellungs-/Aktualisierungskontext zum übergebenen Data Transfer Objekt der Zielentität.
 *
 * Copyright (c) 2017 Dipl.-Inform. Thomas Ziemer
 *
 * This file is part of swXercise.
 *
 * swXercise is free software: you can redistribute it and/or modify it under the terms of the
 * GNU General Public License as published by the Free Software Foundation, either version 3
 * of the License, or (at your option) any later version.
 *
 * swXercise is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
 * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License along with swXercise.
 * If not, see <http://www.gnu.org/licenses/>.
 */
@Stateless
public class UserDtoToEntityContextService {

    @Inject
    private UserDao dao;

    /**
     * Erzeugt den Erstellungs-/Aktualisierungskontext zum übergebenen Data Transfer Objekt der Zielentität.
     *
     * @param dto das Benutzer-DTO
     * @return den erzeugten Kontext.
     */
    public UserDtoToEntityContext createContext(final UserDto dto) {
        final UserDtoToEntityContext ctx = new UserDtoToEntityContext();
        final User existingUser = dto.getUser();

        // das übergebene UserDto in den Kontext füllen
        ctx.dto = dto;

        // einen neuen Benutzer in den Kontext füllen
        if (existingUser == null) {
            // es darf nicht mehrere Benutzer mit dem selben Benutzernamen geben!
            if (dao.findByUsername(dto.getUsername()) == null) {
                // es soll niemals ein Profil ohne Benutzername und Kennwort geben
                ctx.profile = new Profile(dto.getUsername(), dto.getPassword());

                // wir füllen das User-Objekt mit Method Chaining
                ctx.user = new User(dto.getFirstname(), dto.getLastname())
                        .withProfile(ctx.profile);
            }
        }

        // einen bereits existierenden Benutzer in den Kontext füllen
        else {
            ctx.user = existingUser;
            ctx.profile = ctx.user.getProfile();
            ctx.address = ctx.user.getAddress();
        }
        return ctx;
    }

}