/**
* =============================================================================
*
* ORCID (R) Open Source
* http://orcid.org
*
* Copyright (c) 2012-2014 ORCID, Inc.
* Licensed under an MIT-Style License (MIT)
* http://orcid.org/open-source-license
*
* This copyright and license information (including a link to the full license)
* shall be included in its entirety in all copies or substantial portion of
* the software.
*
* =============================================================================
*/
package org.orcid.pojo.ajaxForm;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import org.orcid.jaxb.model.common_v2.DisambiguatedOrganization;
import org.orcid.jaxb.model.common_v2.Iso3166Country;
import org.orcid.jaxb.model.common_v2.Organization;
import org.orcid.jaxb.model.common_v2.OrganizationAddress;
import org.orcid.jaxb.model.common_v2.Source;
import org.orcid.jaxb.model.record_v2.Affiliation;
import org.orcid.jaxb.model.record_v2.AffiliationType;
import org.orcid.jaxb.model.record_v2.Education;
import org.orcid.jaxb.model.record_v2.Employment;
public class AffiliationForm implements ErrorsInterface, Serializable {
private static final long serialVersionUID = 1L;
private List<String> errors = new ArrayList<String>();
private Text putCode;
private Visibility visibility;
private Text affiliationName;
private Text city;
private Text region;
private Text country;
private Text roleTitle;
private String countryForDisplay;
private Text departmentName;
private Text affiliationType;
private Text disambiguatedAffiliationSourceId;
private Text disambiguationSource;
private Text orgDisambiguatedId;
private String affiliationTypeForDisplay;
private Date startDate;
private Date endDate;
private String sourceName;
private String source;
private String dateSortString;
private Date createdDate;
private Date lastModified;
public static AffiliationForm valueOf(Affiliation affiliation) {
AffiliationForm form = new AffiliationForm();
if (affiliation instanceof Education) {
form.setAffiliationType(Text.valueOf(AffiliationType.EDUCATION.value()));
} else {
form.setAffiliationType(Text.valueOf(AffiliationType.EMPLOYMENT.value()));
}
form.setPutCode(Text.valueOf(affiliation.getPutCode()));
form.setVisibility(Visibility.valueOf(affiliation.getVisibility()));
Organization organization = affiliation.getOrganization();
form.setDateSortString(PojoUtil.createDateSortString(affiliation.getStartDate(), affiliation.getEndDate()));
form.setAffiliationName(Text.valueOf(organization.getName()));
OrganizationAddress address = organization.getAddress();
form.setCity(Text.valueOf(address.getCity()));
if (organization.getDisambiguatedOrganization() != null) {
if (organization.getDisambiguatedOrganization().getDisambiguatedOrganizationIdentifier() != null) {
form.setDisambiguatedAffiliationSourceId(Text.valueOf(organization.getDisambiguatedOrganization().getDisambiguatedOrganizationIdentifier()));
form.setDisambiguationSource(Text.valueOf(organization.getDisambiguatedOrganization().getDisambiguationSource()));
form.setOrgDisambiguatedId(Text.valueOf(String.valueOf(organization.getDisambiguatedOrganization().getId())));
}
}
if (address.getRegion() != null) {
form.setRegion(Text.valueOf(address.getRegion()));
} else {
form.setRegion(new Text());
}
if (address.getCountry() != null) {
form.setCountry(Text.valueOf(address.getCountry().value()));
} else {
form.setCountry(new Text());
}
if (affiliation.getDepartmentName() != null) {
form.setDepartmentName(Text.valueOf(affiliation.getDepartmentName()));
} else {
form.setDepartmentName(new Text());
}
if (affiliation.getRoleTitle() != null) {
form.setRoleTitle(Text.valueOf(affiliation.getRoleTitle()));
} else {
form.setRoleTitle(new Text());
}
if (affiliation.getStartDate() != null) {
form.setStartDate(Date.valueOf(affiliation.getStartDate()));
}
if (affiliation.getEndDate() != null) {
form.setEndDate(Date.valueOf(affiliation.getEndDate()));
}
Source source = affiliation.getSource();
if (source != null) {
form.setSource(source.retrieveSourcePath());
if (source.getSourceName() != null) {
form.setSourceName(source.getSourceName().getContent());
}
}
form.setCreatedDate(Date.valueOf(affiliation.getCreatedDate()));
form.setLastModified(Date.valueOf(affiliation.getLastModifiedDate()));
return form;
}
public Affiliation toAffiliation() {
Affiliation affiliation = null;
if (AffiliationType.EDUCATION.value().equals(affiliationType.getValue())) {
affiliation = new Education();
} else {
affiliation = new Employment();
}
if (!PojoUtil.isEmpty(putCode)) {
affiliation.setPutCode(Long.valueOf(putCode.getValue()));
}
if(visibility != null && visibility.getVisibility() != null) {
affiliation.setVisibility(org.orcid.jaxb.model.common_v2.Visibility.fromValue(visibility.getVisibility().value()));
}
Organization organization = new Organization();
affiliation.setOrganization(organization);
organization.setName(affiliationName.getValue());
OrganizationAddress organizationAddress = new OrganizationAddress();
organization.setAddress(organizationAddress);
organizationAddress.setCity(city.getValue());
if (!PojoUtil.isEmpty(region)) {
organizationAddress.setRegion(region.getValue());
}
if (!PojoUtil.isEmpty(disambiguatedAffiliationSourceId)) {
organization.setDisambiguatedOrganization(new DisambiguatedOrganization());
organization.getDisambiguatedOrganization().setDisambiguatedOrganizationIdentifier(disambiguatedAffiliationSourceId.getValue());
organization.getDisambiguatedOrganization().setDisambiguationSource(disambiguationSource.getValue());
}
organizationAddress.setCountry(Iso3166Country.fromValue(country.getValue()));
if (!PojoUtil.isEmpty(roleTitle)) {
affiliation.setRoleTitle(roleTitle.getValue());
}
if (!PojoUtil.isEmpty(departmentName)) {
affiliation.setDepartmentName(departmentName.getValue());
}
if (!PojoUtil.isEmpty(startDate)) {
affiliation.setStartDate(startDate.toFuzzyDate());
}
if (!PojoUtil.isEmpty(endDate)) {
affiliation.setEndDate(endDate.toFuzzyDate());
}
return affiliation;
}
public List<String> getErrors() {
return errors;
}
public void setErrors(List<String> errors) {
this.errors = errors;
}
public Text getPutCode() {
return putCode;
}
public void setPutCode(Text putCode) {
this.putCode = putCode;
}
public Visibility getVisibility() {
return visibility;
}
public void setVisibility(Visibility visibility) {
this.visibility = visibility;
}
public Text getAffiliationName() {
return affiliationName;
}
public void setAffiliationName(Text affiliationName) {
this.affiliationName = affiliationName;
}
public Text getCity() {
return city;
}
public void setCity(Text city) {
this.city = city;
}
public Text getRegion() {
return region;
}
public void setRegion(Text region) {
this.region = region;
}
public Text getCountry() {
return country;
}
public void setCountry(Text country) {
this.country = country;
}
public String getCountryForDisplay() {
return countryForDisplay;
}
public void setCountryForDisplay(String countryForDisplay) {
this.countryForDisplay = countryForDisplay;
}
public Text getDepartmentName() {
return departmentName;
}
public void setDepartmentName(Text departmentName) {
this.departmentName = departmentName;
}
public Text getAffiliationType() {
return affiliationType;
}
public void setAffiliationType(Text affiliationType) {
this.affiliationType = affiliationType;
}
public String getAffiliationTypeForDisplay() {
return affiliationTypeForDisplay;
}
public void setAffiliationTypeForDisplay(String affiliationTypeForDisplay) {
this.affiliationTypeForDisplay = affiliationTypeForDisplay;
}
public Date getStartDate() {
return startDate;
}
public void setStartDate(Date startDate) {
this.startDate = startDate;
}
public Date getEndDate() {
return endDate;
}
public void setEndDate(Date endDate) {
this.endDate = endDate;
}
public String getSourceName() {
return sourceName;
}
public void setSourceName(String sourceName) {
this.sourceName = sourceName;
}
public Text getRoleTitle() {
return roleTitle;
}
public void setRoleTitle(Text roleTitle) {
this.roleTitle = roleTitle;
}
public Text getDisambiguatedAffiliationSourceId() {
return disambiguatedAffiliationSourceId;
}
public void setDisambiguatedAffiliationSourceId(Text disambiguatedAffiliationSourceId) {
this.disambiguatedAffiliationSourceId = disambiguatedAffiliationSourceId;
}
public Text getDisambiguationSource() {
return disambiguationSource;
}
public void setDisambiguationSource(Text disambiguationSource) {
this.disambiguationSource = disambiguationSource;
}
public String getDateSortString() {
return dateSortString;
}
public void setDateSortString(String dateSortString) {
this.dateSortString = dateSortString;
}
public String getSource() {
return source;
}
public void setSource(String source) {
this.source = source;
}
public Text getOrgDisambiguatedId() {
return orgDisambiguatedId;
}
public void setOrgDisambiguatedId(Text orgDisambiguatedId) {
this.orgDisambiguatedId = orgDisambiguatedId;
}
public Date getCreatedDate() {
return createdDate;
}
public void setCreatedDate(Date createdDate) {
this.createdDate = createdDate;
}
public Date getLastModified() {
return lastModified;
}
public void setLastModified(Date lastModified) {
this.lastModified = lastModified;
}
}