View Javadoc

1   package de.campussource.cse.cdmm.domain;
2   
3   import java.util.ArrayList;
4   import java.util.List;
5   
6   import javax.persistence.CascadeType;
7   import javax.persistence.Entity;
8   import javax.persistence.Inheritance;
9   import javax.persistence.InheritanceType;
10  import javax.persistence.JoinColumn;
11  import javax.persistence.JoinTable;
12  import javax.persistence.ManyToMany;
13  import javax.persistence.OneToMany;
14  import javax.persistence.Table;
15  import javax.xml.bind.annotation.XmlElement;
16  import javax.xml.bind.annotation.XmlElementWrapper;
17  import javax.xml.bind.annotation.XmlIDREF;
18  import javax.xml.bind.annotation.XmlRootElement;
19  import javax.xml.bind.annotation.XmlType;
20  
21  import org.apache.commons.lang.builder.ToStringBuilder;
22  import org.apache.commons.lang.builder.ToStringStyle;
23  
24  import de.campussource.cse.cdmm.Constants;
25  
26  /**
27   * Account entity object
28   * @author Sebastian Roekens
29   *
30   */
31  @Entity(name=Constants.ACCOUNT)
32  @Table(name = Constants.TABLENAME_ACCOUNT)
33  @Inheritance(strategy=InheritanceType.JOINED)
34  @XmlRootElement(namespace=Constants.NAMESPACE_DATATYPES)
35  @XmlType(name=Constants.ACCOUNT_TYPE, propOrder={Constants.GROUPS, Constants.ROLES}, namespace=Constants.NAMESPACE_DATATYPES)
36  public class Account extends de.campussource.cse.cdmm.domain.Entity{
37  	
38  	@OneToMany(mappedBy=Constants.ACCOUNT, cascade=CascadeType.REMOVE)
39  	private List<Role> roles;
40  	
41  	@ManyToMany
42  	@JoinTable(
43  			name = Constants.TABLENAME_GROUP2ACCOUNT,
44  			joinColumns={@JoinColumn(name=Constants.COLUMNNAME_ACCOUNT_ID)},
45  			inverseJoinColumns={@JoinColumn(name=Constants.COLUMNNAME_GROUP_ID)})
46  	private List<Group> groups;
47  	
48  	public Account(){
49  	}
50  	
51  	public Account(Long id){
52  		setId(id);
53  	}
54  	
55  	/**
56  	 * Convenience method to add an account to a group
57  	 * @param group group account should be added to
58  	 * @return success of operation
59  	 */
60  	public boolean addToGroup(Group group){
61  		if(group==null){
62  			return false;
63  		}
64  		List<Group> groups = this.getGroups();
65  		if (groups==null){
66  			groups = new ArrayList<Group>();
67  		}
68  		if (groups.contains(group)||(group.getMembers()!=null && group.getMembers().contains(this))){
69  			return false;
70  		}
71  		groups.add(group);
72  		setGroups(groups);
73  		List<Account> accounts = group.getMembers();
74  		if (accounts == null){
75  			accounts = new ArrayList<Account>();
76  		}
77  		accounts.add(this);
78  		group.setMembers(accounts);
79  		return true;
80  	}
81  	
82  	/**
83  	 * Convenience method to remove an account from a group
84  	 * @param group group to remove account from
85  	 * @return success of operation
86  	 */
87  	public boolean removeFromGroup(Group group){
88  		if (group == null){
89  			return false;
90  		}
91  		List<Group> groups = this.getGroups();
92  		if ((!(groups==null) && !groups.contains(group))||!group.getMembers().contains(this)){
93  			return false;
94  		}
95  		groups.remove(group);
96  		setGroups(groups);
97  		List<Account> accounts = group.getMembers();
98  		accounts.remove(this);
99  		group.setMembers(accounts);
100 		return true;
101 	}
102 	
103 	/**
104 	 * Convenience method to check if account is member of a group
105 	 * @param group group to check membership of
106 	 * @return membership state of account and given group
107 	 */
108 	public boolean isInGroup(Group group){
109 		if (group == null){
110 			return false;
111 		}
112 		if (group.getMembers()==null){
113 			return false;
114 		}
115 		return (group.getMembers().contains(this));
116 	}
117 	
118     @Override
119 	public boolean equals(Object obj) {
120 		if (this == obj) {
121 			return true;
122 		}
123 		if (!(obj instanceof Account)) {
124 			return false;
125 		}
126 		if (this.getId() == null) {
127 			return false;
128 		} else {
129 			return this.getId().equals(((Account) obj).getId());
130 		}
131 	}
132 
133 	@Override
134 	public int hashCode() {
135 		if (this.getId() == null) {
136 			return super.hashCode();
137 		} else {
138 			return this.getId().hashCode();
139 		}
140 	}
141 
142 	public String toString() {
143 		return new ToStringBuilder(this, ToStringStyle.DEFAULT_STYLE).append(this.getId()).toString();
144 	}
145 	
146 	@XmlElementWrapper(name=Constants.ROLES)
147 	@XmlElement(name=Constants.ROLE)
148 	public List<Role> getRoles() {
149 		return roles;
150 	}
151 
152 	public void setRoles(List<Role> roles) {
153 		this.roles = roles;
154 	}
155 
156 	@XmlElementWrapper(name=Constants.GROUPS)
157 	@XmlElement(name=Constants.GROUP)
158 	@XmlIDREF
159 	public List<Group> getGroups() {
160 		return groups;
161 	}
162 
163 	public void setGroups(List<Group> groups) {
164 		this.groups = groups;
165 	}
166 }