package com.allanditzel.dashboard.controller.user;
import com.allanditzel.dashboard.model.StormpathUserMapping;
import com.allanditzel.dashboard.model.User;
import com.stormpath.sdk.account.Account;
import com.stormpath.sdk.group.Group;
import com.stormpath.sdk.group.GroupList;
import org.springframework.util.Assert;
import java.util.HashSet;
import java.util.Set;
/**
* Builder for {@link com.allanditzel.dashboard.model.User} objects.
*
* @since 1.0
*/
public class UserBuilder {
private Account stormpathAccount;
private StormpathUserMapping stormpathUserMapping;
public UserBuilder addStormpathAccount(Account account) {
Assert.notNull(account, "Account parameter cannot be null.");
this.stormpathAccount = account;
return this;
}
public UserBuilder addStormpathUserMapping(StormpathUserMapping stormpathUserMapping) {
Assert.notNull(stormpathUserMapping, "StormpathUserMapping parameter cannot be null.");
this.stormpathUserMapping = stormpathUserMapping;
return this;
}
public User build() {
Assert.notNull(this.stormpathAccount, "Stormpath Account is null. Please call addStormpathAccount() before calling build().");
Assert.notNull(this.stormpathUserMapping, "Stormpath User Mapping is null. Please call addStormpathUserMapping() ");
User user = new User();
user.setId(stormpathUserMapping.getId());
user.setUsername(stormpathUserMapping.getUsername());
user.setEmail(stormpathAccount.getEmail());
user.setFirstName(stormpathAccount.getGivenName());
user.setLastName(stormpathAccount.getSurname());
user.setRoles(getRolesFromStormpathGroups(stormpathAccount));
return user;
}
private Set<String> getRolesFromStormpathGroups(Account account) {
Set<String> roles = new HashSet<>();
GroupList groupList = account.getGroups();
if (groupList != null) {
for (Group group : groupList) {
roles.add(group.getName());
}
}
return roles;
}
}