DatabaseLoader.java

package org.flasby.christmas.data;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

import javax.transaction.Transactional;

import org.flasby.entity.Authority;
import org.flasby.entity.ChristmasUser;
import org.flasby.entity.Present;
import org.flasby.entity.repository.PresentsRepository;
import org.flasby.entity.repository.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.authority.AuthorityUtils;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Component;

import lombok.extern.log4j.Log4j2;

/**
 * @author Steve Flasby
 */
@Log4j2
@Component
public class DatabaseLoader implements CommandLineRunner {

	public DatabaseLoader() {
		log.warn(
				"\n*********************************************\n" +
				"               Running DB Loader\n"+
				"*********************************************");
	}

	@Autowired
	private UserRepository<ChristmasUser> users;

	@Autowired
	private PresentsRepository pr;

	// @Override
	@Transactional
	public void run(String... strings) throws Exception {

		if (users.count() < 1) {
			log.warn("DB is empty, loading initial state");

			// Add security
			SecurityContextHolder.getContext().setAuthentication(new UsernamePasswordAuthenticationToken("DB_Loader",
					"doesn't matter", AuthorityUtils.createAuthorityList("AUTH_MANAGER")));

			List<ChristmasUser> userList = createUsers();
			users.saveAll(userList);


			List<Present> presents = new ArrayList<>();
			presents.add(new Present("steve", "Goat"));
			presents.add(new Present("steve", "Biscuit", "janet"));
			presents.add(new Present("janet", "Pencil","steve"));
			presents.add(new Present("janet", "Sandwich"));
			Collections.sort(presents, new Comparator<Present>() {
				@Override
				public int compare(Present arg0, Present arg1) {
					if ( arg0.getName().equals(arg1.getName())) {
						return arg0.getDescription().compareTo(arg1.getDescription());
					}
					return arg0.getName().compareTo(arg1.getName());
				}
			});
	
			pr.saveAll(presents);
			
			// for (IotMonitorUser c : users.findAll()) {
			// log.warn("User: " + c.getId() + "/" + c.getName() + "/" + c.getAlias() + "/"
			// + (c.isDisabled() ? "disabled" : "enabled") + "/" + c + c.getRoles());
			// }

			SecurityContextHolder.getContext().setAuthentication(null);

		} else {
			log.info("DB is populated, skipping initialization");
			for (ChristmasUser c : users.findAll()) {
				log.info("User: " + c.getId() + "/" + c.getName() + "/" + c.getAlias() + "/"
						+ (c.isDisabled() ? "disabled" : "enabled") + "/" + c.getRoles() + " - prop(x)"
						+ c.getProperty("x"));
			}
		}
	}

	public static List<ChristmasUser> createUsers() {
		List<ChristmasUser> users = new ArrayList<>();
		ChristmasUser user = new ChristmasUser("steve", "Steve", "x", Authority.USER, Authority.ADMIN);
		user.setProperty("x", "x");
		// user.setDisabled(false);
		users.add(user);

		user = new ChristmasUser("david", "David", "x", Authority.USER);
		// user.setDisabled(false);
		// user.setOnline(true);
		users.add(user);

		user = new ChristmasUser("ruth", "Ruth", "x", Authority.USER);
		// user.setDisabled(false);
		// user.setOnline(true);
		// System.err.println( "===> excalibur
		// "+user.setPassword("excalibur9329kfmxbxs88wjdbbciy993748)(&%") );
		users.add(user);

		user = new ChristmasUser("janet", "janet", "x", Authority.USER);
		// user.setDisabled(true);
		// user.setOnline(true);
		users.add(user);

		return users;
	}

}