Java tutorial
/* Copyright (c) 2012-2014, terrestris GmbH & Co. KG * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * 1. Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * 3. Neither the name of the copyright holder nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * * (This is the BSD 3-Clause, sometimes called 'BSD New' or 'BSD Simplified', * see http://opensource.org/licenses/BSD-3-Clause) */ package de.terrestris.shogun.model; import java.util.HashSet; import java.util.Set; import javax.persistence.Column; import javax.persistence.Embeddable; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.ManyToMany; import javax.persistence.ManyToOne; import javax.persistence.Table; import javax.persistence.Transient; import org.apache.commons.lang3.builder.EqualsBuilder; import org.apache.commons.lang3.builder.HashCodeBuilder; import org.apache.commons.lang3.builder.ToStringBuilder; import org.apache.commons.lang3.builder.ToStringStyle; import org.hibernate.annotations.Fetch; import org.hibernate.annotations.FetchMode; import com.fasterxml.jackson.annotation.JsonAutoDetect; import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import de.terrestris.shogun.serializer.LeanBaseModelSetSerializer; /** * User POJO * * @author terrestris GmbH & Co. KG * * TODO check for the deprecated org.hibernate.cache.CacheConcurrencyStrategy; * */ @JsonAutoDetect @Entity @Table(name = "TBL_USER") @Embeddable public class User extends BaseModel { private String user_name; private String user_longname; private String user_firstname; private String user_lastname; private String user_title; private String user_email; private String user_street; private String user_postcode; private String user_city; private String user_country; private String user_bureau; private String user_department; private String user_unit; private String user_description; private String user_password; private String user_lang; private Boolean active = true; private Set<Group> groups; private MapConfig mapConfig; private WfsProxyConfig wfsProxyConfig; private WmsProxyConfig wmsProxyConfig; /** * @return the user_name */ @Column(name = "USER_NAME", length = 50, unique = true) public String getUser_name() { return user_name; } /** * @param user_name the user_name to set */ public void setUser_name(String user_name) { this.user_name = user_name; } /** * @return the user_longname */ @Column(name = "USER_LONGNAME", length = 100) public String getUser_longname() { return user_longname; } /** * @param user_longname the user_longname to set */ public void setUser_longname(String user_longname) { this.user_longname = user_longname; } /** * @return the user_firstname */ public String getUser_firstname() { return user_firstname; } /** * @param user_firstname the user_firstname to set */ public void setUser_firstname(String user_firstname) { this.user_firstname = user_firstname; } /** * @return the user_lastname */ public String getUser_lastname() { return user_lastname; } /** * @param user_lastname the user_lastname to set */ public void setUser_lastname(String user_lastname) { this.user_lastname = user_lastname; } /** * @return the user_title */ public String getUser_title() { return user_title; } /** * @param user_title the user_title to set */ public void setUser_title(String user_title) { this.user_title = user_title; } /** * @return the user_email */ @Column(name = "USER_EMAIL", length = 50) public String getUser_email() { return user_email; } /** * @param user_email the user_email to set */ public void setUser_email(String user_email) { this.user_email = user_email; } /** * @return the user_street */ @Column(name = "USER_STREET", length = 50) public String getUser_street() { return user_street; } /** * @param user_street the user_street to set */ public void setUser_street(String user_street) { this.user_street = user_street; } /** * @return the user_postcode */ @Column(name = "USER_POSTCODE", length = 25) public String getUser_postcode() { return user_postcode; } /** * @param user_postcode the user_postcode to set */ public void setUser_postcode(String user_postcode) { this.user_postcode = user_postcode; } /** * @return the user_city */ @Column(name = "USER_CITY", length = 50) public String getUser_city() { return user_city; } /** * @param user_city the user_city to set */ public void setUser_city(String user_city) { this.user_city = user_city; } /** * @return the user_country */ @Column(name = "USER_COUNTRY", length = 50) public String getUser_country() { return user_country; } /** * @param user_country the user_country to set */ public void setUser_country(String user_country) { this.user_country = user_country; } /** * @return the user_bureau */ public String getUser_bureau() { return user_bureau; } /** * @param user_bureau the user_bureau to set */ public void setUser_bureau(String user_bureau) { this.user_bureau = user_bureau; } /** * @return the user_department */ public String getUser_department() { return user_department; } /** * @param user_department the user_department to set */ public void setUser_department(String user_department) { this.user_department = user_department; } /** * @return the user_unit */ public String getUser_unit() { return user_unit; } /** * @param user_unit the user_unit to set */ public void setUser_unit(String user_unit) { this.user_unit = user_unit; } /** * @return the user_description */ public String getUser_description() { return user_description; } /** * @param user_description the user_description to set */ public void setUser_description(String user_description) { this.user_description = user_description; } /** * @return the user_password */ @JsonIgnore @Column(name = "USER_PASSWORD", length = 50) public String getUser_password() { return user_password; } /** * @param user_password the user_password to set */ @JsonIgnore public void setUser_password(String user_password) { this.user_password = user_password; } /** * @return the user_lang */ @Column(name = "USER_LANG", length = 3) public String getUser_lang() { return user_lang; } /** * @param user_lang the user_lang to set */ public void setUser_lang(String user_lang) { this.user_lang = user_lang; } /** * @return the active */ @Column(name = "ACTIVE") public Boolean getActive() { return active; } /** * @param active the active to set */ public void setActive(Boolean active) { this.active = active; } /** * @return the groups */ @ManyToMany(mappedBy = "users", fetch = FetchType.EAGER) @JsonIgnore @Fetch(FetchMode.SUBSELECT) @JsonSerialize(using = LeanBaseModelSetSerializer.class) public Set<Group> getGroups() { return groups; } /** * @param groups the groups to set */ public void setGroups(Set<Group> groups) { this.groups = groups; } /** * @return the mapConfig */ @ManyToOne public MapConfig getMapConfig() { return mapConfig; } /** * @param mapConfig the mapConfig to set */ @JsonIgnore public void setMapConfig(MapConfig mapConfig) { this.mapConfig = mapConfig; } /** * @return the wfsProxyConfig */ @ManyToOne @JsonIgnore // needed that this is not serialized, hidden to client (security) public WfsProxyConfig getWfsProxyConfig() { return wfsProxyConfig; } /** * @param wfsProxyConfig the wfsProxyConfig to set */ @JsonIgnore public void setWfsProxyConfig(WfsProxyConfig wfsProxyConfig) { this.wfsProxyConfig = wfsProxyConfig; } /** * @return the wmsProxyConfig */ @ManyToOne @JsonIgnore // needed that this is not serialized, hidden to client (security) public WmsProxyConfig getWmsProxyConfig() { return wmsProxyConfig; } /** * @param wmsProxyConfig the wmsProxyConfig to set */ @JsonIgnore public void setWmsProxyConfig(WmsProxyConfig wmsProxyConfig) { this.wmsProxyConfig = wmsProxyConfig; } /** * Will return the unification of all modules of all groups the user * belongs to. * * @return */ @Transient public Set<Module> getModules() { Set<Module> allModulesOfUser = new HashSet<Module>(); Set<Group> groups = this.getGroups(); if (groups != null) { for (Group group : groups) { allModulesOfUser.addAll(group.getModules()); } } return allModulesOfUser; } /** * Returns whether the user has role User.ROLENAME_SUPERADMIN in his set of * roles by comparing the name of all roles to the given string using * the private hasRole-method. * * @return whether the user has the queried role User.ROLENAME_SUPERADMIN. */ public boolean hasSuperAdminRole() { return this.hasRole(Group.ROLENAME_SUPERADMIN); } /** * Returns whether the user has role User.ROLENAME_ADMIN in his set of * roles by comparing the name of all roles to the given string using * the private hasRole-method. * * @return whether the user has the queried role User.ROLENAME_SUPERADMIN. */ public boolean hasAdminRole() { return this.hasRole(Group.ROLENAME_ADMIN); } /** * Returns whether the user has role User.ROLENAME_ANONYMOUS in his set of * roles by comparing the name of all roles to the given string using * the private hasRole-method. * * @return whether the user has the queried role User.ROLENAME_ANONYMOUS. */ public boolean hasAnonymousRole() { return this.hasRole(Group.ROLENAME_ANONYMOUS); } /** * Returns all Roles of the user by iterating over all his groups. * */ @Transient public Set<Role> getRoles() { Set<Role> myRoles = new HashSet<Role>(); Set<Group> myGroups = this.getGroups(); if (myGroups != null) { for (Group g : myGroups) { myRoles.addAll(g.getRoles()); } } return myRoles; } /** * Returns whether the user has the given role in his set of roles by * Comparing the name of all roles to the given string. * * @param searchRoleName The rolename to check this users set of roles for * @return whether the user has the queried role or not. */ private boolean hasRole(String searchRoleName) { boolean hasRole = false; for (Role r : this.getRoles()) { hasRole = r.getName().equals(searchRoleName); if (hasRole) { break; } } return hasRole; } /** * @see java.lang.Object#hashCode() * * According to * http://stackoverflow.com/questions/27581/overriding-equals-and-hashcode-in-java * it is recommended only to use getter-methods when using ORM like Hibernate */ @Override public int hashCode() { return new HashCodeBuilder(37, 13). // two randomly chosen prime numbers appendSuper(super.hashCode()).append(getUser_longname()).append(getUser_email()).toHashCode(); } /** * @see java.lang.Object#equals(java.lang.Object) * * According to * http://stackoverflow.com/questions/27581/overriding-equals-and-hashcode-in-java * it is recommended only to use getter-methods when using ORM like Hibernate */ @Override public boolean equals(Object obj) { if (!(obj instanceof User)) return false; User other = (User) obj; return new EqualsBuilder().appendSuper(super.equals(other)) .append(getUser_longname(), other.getUser_longname()).isEquals(); } /** * */ public String toString() { return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE).appendSuper(super.toString()) .append("user_name", user_name).append("user_firstname", user_firstname) .append("user_lastname", user_lastname).append("user_longname", user_longname) .append("user_email", user_email).append("user_country", user_country).append("active", active) .append("mapConfig", mapConfig).toString(); } }