package net.sf.gazpachoquest.domain.user;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.ManyToMany;
import javax.persistence.Table;
import net.sf.gazpachoquest.domain.support.AbstractAuditable;
@SuppressWarnings("serial")
@Entity
@Table(name = "groups")
public class Group extends AbstractAuditable {
@Column(nullable = false)
private String name;
@Column(nullable = false)
private String description;
@ManyToMany(mappedBy = "groups", fetch = FetchType.LAZY)
private final Set<User> users = new HashSet<User>();
public Group() {
super();
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Set<User> getUsers() {
return Collections.unmodifiableSet(users);
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public void assignUser(User user) {
users.add(user);
user.addGroup(this);
}
public static Builder with() {
return new Builder();
}
/**
* @hidden
*/
public static class Builder {
private Integer id;
private String name;
private String description;
public Builder id(Integer id) {
this.id = id;
return this;
}
public Builder name(String name) {
this.name = name;
return this;
}
public Builder description(String description) {
this.description = description;
return this;
}
public Group build() {
Group group = new Group();
group.setId(id);
group.name = name;
group.description = description;
return group;
}
}
}