/* * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. * Copyright (c) 2013, MPL CodeInside http://codeinside.ru */ package ru.codeinside.adm.database; import org.apache.commons.codec.digest.DigestUtils; import ru.codeinside.log.Logger; import javax.persistence.CascadeType; import javax.persistence.CollectionTable; import javax.persistence.Column; import javax.persistence.ElementCollection; import javax.persistence.Entity; import javax.persistence.EntityListeners; import javax.persistence.EnumType; import javax.persistence.Enumerated; import javax.persistence.FetchType; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.JoinTable; import javax.persistence.ManyToMany; import javax.persistence.ManyToOne; import javax.persistence.NamedQueries; import javax.persistence.NamedQuery; import javax.persistence.OneToOne; import javax.persistence.Temporal; import javax.persistence.TemporalType; import javax.persistence.UniqueConstraint; import java.io.Serializable; import java.util.Date; import java.util.EnumSet; import java.util.HashSet; import java.util.Set; import java.util.TreeSet; @Entity @EntityListeners(Logger.class) @NamedQueries({ @NamedQuery(name = "findAllEmployees", query = "SELECT u FROM Employee u"), @NamedQuery(name = "findAllEmployeeLogins", query = "SELECT u.login FROM Employee u") }) public class Employee implements Serializable { private static final long serialVersionUID = 1L; @Id @Column(nullable = false, length = 64) private String login; @Column(nullable = false) private String passwordHash; @Column(length = 11) private String snils; private String status; private String fio; @Temporal(TemporalType.TIMESTAMP) private Date date = new Date(); private String creator; @ElementCollection(fetch = FetchType.LAZY) @CollectionTable(name = "roles", joinColumns = @JoinColumn(name = "uid"), uniqueConstraints = @UniqueConstraint(columnNames = { "uid", "gid"})) @Enumerated(EnumType.STRING) @Column(name = "gid", length = 32) private Set<Role> roles; @ManyToMany(mappedBy = "employees", fetch = FetchType.LAZY) private Set<Group> groups; @ManyToMany(fetch = FetchType.LAZY) @JoinTable(// name = "employee_groups",// joinColumns = @JoinColumn(name = "eid", referencedColumnName = "login"),// inverseJoinColumns = @JoinColumn(name = "gid", referencedColumnName = "id")) private Set<Group> employeeGroups; @ManyToMany @JoinTable(// name = "organization_groups",// joinColumns = @JoinColumn(name = "eid", referencedColumnName = "login"),// inverseJoinColumns = @JoinColumn(name = "gid", referencedColumnName = "id")) private Set<Group> organizationGroups; @JoinColumn(nullable = false) @ManyToOne(fetch = FetchType.LAZY, optional = false) private Organization organization; @Column(nullable = false) private boolean locked; @OneToOne(optional = true, fetch = FetchType.LAZY, cascade = CascadeType.ALL, orphanRemoval = true) CertificateOfEmployee certificate; public boolean isLocked() { return locked; } public void setLocked(boolean locked) { this.locked = locked; } public Set<Role> getRoles() { if (roles == null) { roles = EnumSet.noneOf(Role.class); } return roles; } public Employee() { } public String getLogin() { return login; } public void setLogin(String login) { this.login = login; } public String getPasswordHash() { return passwordHash; } public void setPasswordHash(String passwordHash) { this.passwordHash = passwordHash; } public String getStatus() { return status; } public void setStatus(String status) { this.status = status; } public String getFio() { return fio; } public void setFio(String fio) { this.fio = fio; } public Date getDate() { return date; } public String getCreator() { return creator; } public void setCreator(String creator) { this.creator = creator; } public Set<Group> getGroups() { if (groups == null) { groups = new HashSet<Group>(); } return groups; } public Set<Group> getEmployeeGroups() { if (employeeGroups == null) { employeeGroups = new HashSet<Group>(); } return employeeGroups; } public void setEmployeeGroups(Set<Group> employeeGroups) { this.employeeGroups = employeeGroups; } public Set<Group> getOrganizationGroups() { if (organizationGroups == null) { organizationGroups = new HashSet<Group>(); } return organizationGroups; } public void setOrganizationGroups(Set<Group> organizationGroups) { this.organizationGroups = organizationGroups; } public Organization getOrganization() { return organization; } public void setOrganization(Organization organization) { this.organization = organization; } public Set<String> getRoleNames() { final TreeSet<String> result = new TreeSet<String>(); for (Role role : getRoles()) { result.add(role.description); } return result; } public CertificateOfEmployee getCertificate() { return certificate; } public void setCertificate(CertificateOfEmployee certificate) { this.certificate = certificate; } public String getSnils() { return snils; } public void setSnils(String snils) { this.snils = snils; } public boolean checkPassword(String password) { String hex = DigestUtils.sha256Hex(password); return passwordHash.equals(hex); } }