/** * Copyright (c) Istituto Nazionale di Fisica Nucleare (INFN). 2006-2016 * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * 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.glite.security.voms.admin.persistence.model.request; import java.io.Serializable; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.persistence.Column; import javax.persistence.ElementCollection; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.JoinTable; import javax.persistence.MapKeyColumn; import javax.persistence.Table; import org.apache.commons.lang.builder.EqualsBuilder; import org.apache.commons.lang.builder.HashCodeBuilder; import org.apache.commons.lang.builder.ToStringBuilder; import org.glite.security.voms.admin.persistence.model.VOMSUser; @Entity @Table(name = "requester_info") public class RequesterInfo implements Serializable { /** * */ private static final long serialVersionUID = 1L; public static final String MULTIVALUE_COUNT_PREFIX = "num_"; public static final String MANAGER_EMAIL_ADDRESS = "managerEmail"; public static final String MANAGER_ID = "managerId"; public static final String VO_USER_ID = "voUserId"; @Id @GeneratedValue(strategy=GenerationType.IDENTITY) Long id; @Column(nullable = false) String certificateSubject; @Column(nullable = false) String certificateIssuer; String name; String surname; String institution; String address; String phoneNumber; @Column(nullable = false) String emailAddress; @ElementCollection @JoinTable(name = "requester_personal_info", joinColumns = @JoinColumn( name = "requester_id")) @MapKeyColumn(name="pi_key") @Column(name = "pi_value") Map<String, String> personalInformation = new HashMap<String, String>(); Boolean voMember; /** * @return the id */ public Long getId() { return id; } /** * @return the certificateSubject */ public String getCertificateSubject() { return certificateSubject; } /** * @return the certificateIssuer */ public String getCertificateIssuer() { return certificateIssuer; } /** * @param id * the id to set */ public void setId(Long id) { this.id = id; } /** * @param certificateSubject * the certificateSubject to set */ public void setCertificateSubject(String certificateSubject) { this.certificateSubject = certificateSubject; } /** * @param certificateIssuer * the certificateIssuer to set */ public void setCertificateIssuer(String certificateIssuer) { this.certificateIssuer = certificateIssuer; } /** * @return the personalInformation */ public Map<String, String> getPersonalInformation() { return personalInformation; } /** * @param personalInformation * the personalInformation to set */ public void setPersonalInformation(Map<String, String> personalInformation) { this.personalInformation = personalInformation; } /** * @return the emailAddress */ public String getEmailAddress() { return emailAddress; } /** * @param emailAddress * the emailAddress to set */ public void setEmailAddress(String emailAddress) { this.emailAddress = emailAddress; } public boolean isVoMember() { return voMember; } /** * @return the voMember */ public Boolean getVoMember() { return voMember; } /** * @param voMember * the voMember to set */ public void setVoMember(Boolean voMember) { this.voMember = voMember; } @Override public boolean equals(Object other) { if (this == other) return true; if (!(other instanceof RequesterInfo)) return false; if (other == null) return false; RequesterInfo that = (RequesterInfo) other; // Implement meaningful checks here return new EqualsBuilder() .append(certificateSubject, that.certificateSubject) .append(certificateIssuer, that.certificateIssuer) .append(emailAddress, that.emailAddress).isEquals(); } public String addInfo(String name, String value) { return personalInformation.put(name, value); } public String getInfo(String name) { return personalInformation.get(name); } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSurname() { return surname; } public void setSurname(String surname) { this.surname = surname; } public String getInstitution() { return institution; } public void setInstitution(String institution) { this.institution = institution; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public String getPhoneNumber() { return phoneNumber; } public void setPhoneNumber(String phoneNumber) { this.phoneNumber = phoneNumber; } @Override public int hashCode() { return new HashCodeBuilder(17, 37).append(certificateSubject) .append(certificateIssuer).append(emailAddress).toHashCode(); } @Override public String toString() { ToStringBuilder builder = new ToStringBuilder(this); builder.append("certificateSubject", certificateSubject) .append("certificateIssuer", certificateIssuer) .append("emailAddress", emailAddress).append("name", name) .append("surname", surname).append("voMember", voMember); return builder.toString(); } public List<String> getMultivaluedInfo(String propertyName) { List<String> result = new ArrayList<String>(); Integer valueCount; if (personalInformation.get(MULTIVALUE_COUNT_PREFIX + propertyName) != null) { valueCount = Integer.parseInt(personalInformation .get(MULTIVALUE_COUNT_PREFIX + propertyName)); for (int i = 0; i < valueCount; i++) result.add(personalInformation.get(propertyName + i)); return result; } return Collections.EMPTY_LIST; } public String getManagerEmail() { return getInfo(MANAGER_EMAIL_ADDRESS); } public void setManagerEmail(String emailAddress) { addInfo(MANAGER_EMAIL_ADDRESS, emailAddress); } public static RequesterInfo fromVOUser(VOMSUser user) { RequesterInfo ri = new RequesterInfo(); ri.setName(user.getName()); ri.setSurname(user.getSurname()); ri.setAddress(user.getAddress()); ri.setInstitution(user.getInstitution()); ri.setPhoneNumber(user.getPhoneNumber()); ri.setEmailAddress(user.getEmailAddress()); ri.setCertificateSubject(user.getDefaultCertificate().getSubjectString()); ri.setCertificateIssuer(user.getDefaultCertificate().getCa() .getSubjectString()); ri.setVoMember(true); ri.addInfo(VO_USER_ID, user.getId().toString()); return ri; } }