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;
}
}