package net.sf.gazpachoquest.codelab.massive;
import java.util.HashMap;
import java.util.Map;
import net.sf.gazpachoquest.codelab.randomuser.RandomUserCreator;
import net.sf.gazpachoquest.codelab.randomuser.support.RandomUser;
import net.sf.gazpachoquest.domain.user.User;
import net.sf.gazpachoquest.services.UserService;
import net.sf.gazpachoquest.types.Gender;
import net.sf.gazpachoquest.util.RandomTokenGenerator;
import org.apache.commons.lang.math.RandomUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
public class MassiveUserLoadLab {
private static Logger logger = LoggerFactory.getLogger(MassiveUserLoadLab.class);
@Autowired
private UserService userService;
// @Autowired
// private PermissionService permissionService;
private final String positions[] = { "employee", "supervisor", "foreman", "manager", "vice president " };
private final String divisions[] = { "Helsinki", "Jyväskylä", "Roma", "Madrid", "London", "Berlin", "Barcelona",
"Paris", "Moscow" };
private final String companies[] = { "Basware", "Codenomicon", "Rovio Mobile", "Supercell", "Tieto", "Vaisala",
"Stockmann", "Verkkokauppa.com", "Fazer", "Metso" };
@Autowired
private RandomTokenGenerator tokenGenerator;
public void execute() {
int userCount = 10;
for (int index = 0; index < userCount; index++) {
RandomUser randomUser = RandomUserCreator.getRandomUser();
Gender gender = Gender.fromCode(randomUser.getGender().substring(0, 1).toUpperCase());
User user = User.with().givenNames(randomUser.getName().getFirst()).surname(randomUser.getName().getLast())
.email(randomUser.getEmail()).gender(gender)
.username(randomUser.getUsername() + "_" + tokenGenerator.generate(5))
.password(randomUser.getPassword()).build();
Map<String, String> attributes = new HashMap<String, String>();
attributes.put("ssn", randomUser.getSSN());
attributes.put("age", String.valueOf(RandomUtils.nextInt(18) + 20));
attributes.put("company", getCompany());
attributes.put("division", getDivision());
attributes.put("position", getPosition());
attributes.put("title", randomUser.getName().getTitle());
user.setAttributes(attributes);
user = userService.save(user);
logger.info("User {} created with id {}", index, user.getId());
/*-
Permission entity = Permission.with().entityId(user.getId()).scope(EntityType.USER).addPerm(Perm.READ)
.build();
entity.setRole(Role.with().id(2).build());
permissionService.save(entity);*/
}
// SELECT * FROM users WHERE attributes @>
// '"division"=>"Helsinki","position"=>"manager","title"=>"mr"'::hstore
}
private String getDivision() {
return divisions[RandomUtils.nextInt(divisions.length)];
}
private String getCompany() {
return companies[RandomUtils.nextInt(companies.length)];
}
private String getPosition() {
float random = RandomUtils.nextFloat() * 10;
if (random < 7) {
return positions[0];
} else if (random > 7 && random < 8) {
return positions[1];
} else if (random > 8 && random < 8.5) {
return positions[2];
} else if (random > 8.5 && random < 9.5) {
return positions[3];
} else {
return positions[4];
}
}
}