com.epam.ta.reportportal.events.handler.AddDemoProjectEventHandler.java Source code

Java tutorial

Introduction

Here is the source code for com.epam.ta.reportportal.events.handler.AddDemoProjectEventHandler.java

Source

/*
 * Copyright 2016 EPAM Systems
 * 
 * 
 * This file is part of EPAM Report Portal.
 * https://github.com/reportportal/service-api
 * 
 * Report Portal 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.
 * 
 * Report Portal 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 Report Portal.  If not, see <http://www.gnu.org/licenses/>.
 */

package com.epam.ta.reportportal.events.handler;

import com.epam.ta.reportportal.commons.Constants;
import com.epam.ta.reportportal.database.BinaryData;
import com.epam.ta.reportportal.database.dao.ProjectRepository;
import com.epam.ta.reportportal.database.dao.ServerSettingsRepository;
import com.epam.ta.reportportal.database.dao.UserRepository;
import com.epam.ta.reportportal.database.entity.settings.ServerEmailDetails;
import com.epam.ta.reportportal.database.entity.settings.ServerSettings;
import com.epam.ta.reportportal.database.entity.user.User;
import com.epam.ta.reportportal.database.entity.user.UserRole;
import com.epam.ta.reportportal.database.entity.user.UserType;
import com.google.common.base.Suppliers;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.ApplicationListener;
import org.springframework.context.event.ContextRefreshedEvent;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Component;

import java.util.Calendar;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.function.Supplier;

import static com.epam.ta.reportportal.database.personal.PersonalProjectUtils.generatePersonalProject;
import static com.epam.ta.reportportal.database.personal.PersonalProjectUtils.personalProjectName;

/**
 * Initial deploy data
 * 
 * @author Andrei_Varabyeu
 * @author Andrei_Ramanchuk
 */
@Component
public class AddDemoProjectEventHandler implements ApplicationListener<ContextRefreshedEvent> {
    private static final Logger LOGGER = LoggerFactory.getLogger(AddDemoProjectEventHandler.class);
    private static final AtomicBoolean IMPORTED_FLAG = new AtomicBoolean(false);
    private static final String DEFAULT_PROFILE_ID = "default";

    @Value("${rp.email.server}")
    private String host;

    @Value("${rp.email.port}")
    private int port;

    @Value("${rp.email.protocol}")
    private String protocol;

    @Value("${rp.email.account}")
    private String username;

    @Value("${rp.email.password}")
    private String password;

    @Value("${rp.email.from}")
    private String addressFrom;

    @Value("${rp.email.auth:false}")
    private boolean isEnable;

    @Value("${rp.email.debug:false}")
    private boolean isDebug;

    /**
     * Photo avatar for non-existing users
     */
    public static final Supplier<BinaryData> NONAME_USER_PHOTO = Suppliers
            .memoize(() -> new BinaryData(MediaType.IMAGE_JPEG_VALUE, null,
                    AddDemoProjectEventHandler.class.getClassLoader().getResourceAsStream("nonameUserPhoto.jpg")));

    /**
     * Default user avatar
     */
    public static final Supplier<BinaryData> DEMO_USER_PHOTO = Suppliers
            .memoize(() -> new BinaryData(MediaType.IMAGE_JPEG_VALUE, null,
                    AddDemoProjectEventHandler.class.getClassLoader().getResourceAsStream("defaultUserPhoto.jpg")));

    /**
     * Administrator avatar
     */
    public static final Supplier<BinaryData> DEFAULT_ADMIN_PHOTO = Suppliers
            .memoize(() -> new BinaryData(MediaType.IMAGE_JPEG_VALUE, null,
                    AddDemoProjectEventHandler.class.getClassLoader().getResourceAsStream("superAdminPhoto.jpg")));

    public static final Supplier<User> DEFAULT_ADMIN = Suppliers.memoize(() -> {
        LOGGER.info("========== DEFAULT ADMINISTRATOR CREATION ==========");
        User user = new User();
        user.setLogin(Constants.DEFAULT_ADMIN.toString());
        user.setPassword(Constants.DEFAULT_ADMIN_PASS.toString());
        user.setType(UserType.INTERNAL);
        user.setEmail("defaultadministrator@example.com");
        user.setFullName("RP Admin");
        user.setDefaultProject(personalProjectName(user.getLogin()));
        user.setIsExpired(false);
        user.getMetaInfo().setLastLogin(Calendar.getInstance().getTime());
        user.setRole(UserRole.ADMINISTRATOR);
        return user;
    });

    public static final Supplier<User> DEFAULT_USER = Suppliers.memoize(() -> {
        LOGGER.info("========== DEFAULT USER CREATION ==========");
        User user = new User();
        user.setLogin(Constants.DEFAULT_USER.toString());
        user.setPassword(Constants.DEFAULT_USER_PASS.toString());
        user.setType(UserType.INTERNAL);
        user.setEmail("defaulttester@example.com");
        user.setFullName("RP Tester");
        user.setDefaultProject(personalProjectName(user.getLogin()));
        user.setIsExpired(false);
        user.getMetaInfo().setLastLogin(Calendar.getInstance().getTime());
        user.setRole(UserRole.USER);
        return user;
    });

    public final Supplier<ServerSettings> DEFAULT_PROFILE = Suppliers.memoize(() -> {
        LOGGER.info("======= DEFAULT SERVER PROFILE CREATION =======");
        ServerSettings settings = new ServerSettings();
        settings.setId(DEFAULT_PROFILE_ID);
        settings.setActive(true);
        settings.setServerEmailDetails(new ServerEmailDetails(host, port, protocol, isEnable, false, false,
                username, password, "rp@epam.com", isDebug));
        return settings;
    });

    @Autowired
    private ProjectRepository projectRepository;

    @Autowired
    private UserRepository userRepository;

    @Autowired
    private ServerSettingsRepository serverSettingsRepository;

    @Override
    public void onApplicationEvent(ContextRefreshedEvent event) {
        /*
         * if we didn't import demo user and password, import them and set flag
         * to TRUE
         */
        if (IMPORTED_FLAG.compareAndSet(false, true)) {
            // Save non-existing user photo
            userRepository.uploadUserPhoto(Constants.NONAME_USER.toString(), NONAME_USER_PHOTO.get());

            // Super administrator
            if (null == userRepository.findOne(DEFAULT_ADMIN.get().getLogin())) {
                User user = DEFAULT_ADMIN.get();
                String photoId = userRepository.uploadUserPhoto(user.getLogin(), DEFAULT_ADMIN_PHOTO.get());
                user.setPhotoId(photoId);

                projectRepository.save(generatePersonalProject(user));
                userRepository.save(user);
            }

            // Down-graded user (previous administrator)
            if (null == userRepository.findOne(DEFAULT_USER.get().getLogin())) {
                User user = DEFAULT_USER.get();
                String photoId = userRepository.uploadUserPhoto(user.getLogin(), DEMO_USER_PHOTO.get());
                user.setPhotoId(photoId);

                projectRepository.save(generatePersonalProject(user));
                userRepository.save(user);
            }

            /* Create server settings repository with default profile */
            if (null == serverSettingsRepository.findOne(DEFAULT_PROFILE.get().getId())) {
                serverSettingsRepository.save(DEFAULT_PROFILE.get());
            }
        }
    }

}