* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
- */
+ */
package org.wamblee.usermgt;
-import org.wamblee.persistence.AbstractPersistent;
-
-import org.wamblee.security.encryption.MessageDigester;
-
-import org.wamblee.usermgt.UserMgtException.Reason;
-
import java.io.Serializable;
-
import java.util.Set;
import java.util.TreeSet;
+import javax.persistence.CascadeType;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.ManyToMany;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+import javax.persistence.Transient;
+import javax.persistence.Version;
+
+import org.wamblee.security.encryption.MessageDigester;
+import org.wamblee.usermgt.UserMgtException.Reason;
+
/**
* Represents a user. The methods for managing the groups of the user have
* package scope. Managing the groups of the user should be done through the
* {@link org.wamblee.usermgt.UserAdministration} interface.
*/
-public class User extends AbstractPersistent implements Serializable,
- Comparable {
+@Entity
+@Table(name = "SEC_USER")
+@NamedQueries( {
+ @NamedQuery(name = User.QUERY_FIND_BY_NAME, query = "select u from User u where u.name = :" +
+ User.NAME_PARAM),
+ @NamedQuery(name = User.QUERY_FIND_BY_GROUP_NAME, query = "select user from User user join user.groups grp where grp.name = :name"),
+ @NamedQuery(name = User.QUERY_COUNT_USERS, query = "select count(u) from User u"),
+ @NamedQuery(name = User.QUERY_ALL_USERS, query = "select u from User u") })
+public class User implements Serializable, Comparable {
+
+ public static final String QUERY_FIND_BY_NAME = "User.findByName";
+ public static final String QUERY_FIND_BY_GROUP_NAME = "User.findByGroupName";
+ public static final String QUERY_COUNT_USERS = "User.count";
+ public static final String QUERY_ALL_USERS = "User.all";
+ public static final String NAME_PARAM = "name";
+
+ @Id
+ @GeneratedValue(strategy = GenerationType.AUTO)
+ private Long primaryKey;
+
+ @Version
+ private int version;
+
/**
* User name.
*/
/**
* Groups the user belongs to.
*/
+ @ManyToMany(cascade = CascadeType.MERGE, fetch = FetchType.EAGER)
private Set<Group> groups;
/**
* Password validator.
*/
+ @Transient
private NameValidator passwordValidator;
/**
* Password encoder.
*/
+ @Transient
private MessageDigester passwordEncoder;
/**
*
*/
public User(User aUser) {
- super(aUser);
+ primaryKey = aUser.primaryKey;
+ version = aUser.version;
name = aUser.name;
password = aUser.password;
groups = new TreeSet<Group>();
*/
@Override
public boolean equals(Object aUser) {
+ if (aUser == null) {
+ return false;
+ }
if (!(aUser instanceof User)) {
return false;
}
public int compareTo(Object aUser) {
return name.compareTo(((User) aUser).name);
}
+
+ public Long getPrimaryKey() {
+ return primaryKey;
+ }
}