/**
*
*/
package net.agef.jobexchange.webservice.adapter;
import net.agef.jobexchange.domain.AddressEnum;
import net.agef.jobexchange.domain.AlumniRole;
import net.agef.jobexchange.domain.EmployeeAmountEnum;
import net.agef.jobexchange.domain.OrganisationRole;
import net.agef.jobexchange.domain.OrganisationRoleData;
import net.agef.jobexchange.domain.TitleEnum;
import net.agef.jobexchange.domain.User;
import net.agef.jobexchange.exceptions.APDUserNotFoundException;
import net.agef.jobexchange.exceptions.CobraUserNotFoundException;
import net.agef.jobexchange.exceptions.CountryNotFoundException;
import net.agef.jobexchange.exceptions.EnumValueNotFoundException;
import net.agef.jobexchange.integration.UserDAO;
import net.agef.jobexchange.webservice.adapter.util.DateUtil;
import net.agef.jobexchange.webservice.entities.AbstractUserRoleDTO;
import net.agef.jobexchange.webservice.entities.AlumniRoleDTO;
import net.agef.jobexchange.webservice.entities.OrganisationRoleDTO;
import net.agef.jobexchange.webservice.entities.UserDTO;
/**
* @author AGEF
*
*/
public class UserAssemblerWorker implements UserAssembler{
private UserDAO userDAO;
private IndustrySectorAssembler industryAssembler;
private AddressAssembler ada;
private CountryAssembler ca;
public UserAssemblerWorker(AddressAssembler addressAssembler, CountryAssembler countryAssembler, UserDAO userDAO, IndustrySectorAssembler industryAssembler) {
this.userDAO = userDAO;
this.ada = addressAssembler;
this.ca = countryAssembler;
this.industryAssembler = industryAssembler;
}
@Override
public UserDTO createDTO(User user) {
UserDTO dto = new UserDTO();
if(user!=null){
if(user.getAddresses()!=null){
dto.setAddresses(user.getAddresses().toString());
}
dto.setApdUserId(user.getApdUserId());
dto.setCobraUserId(user.getCobraSuperId());
dto.setInwentUserId(user.getInwentUserId());
dto.setElggUserId(user.getElggUserId());
dto.setCurrentAddress(ada.createDTO(user.getCurrentContactAddress()));
dto.setAlternativeAddress(ada.createDTO(user.getAlternativeContactAddress()));
dto.setCitizenship1(user.getCitizenship1());
dto.setCitizenship2(user.getCitizenship2());
dto.setDateOfBirth(DateUtil.date2Calendar(user.getDateOfBirth()));
dto.setEmailBusiness(user.getEmailBusiness());
dto.setEmailPrivate(user.getEmailPrivate());
dto.setFamilyName(user.getFamilyName());
dto.setFathersName(user.getFathersName());
dto.setPosition(user.getPosition());
dto.setGivenName(user.getGivenName());
dto.setInternet(user.getInternet());
if (user.getNationality() != null){
dto.setNationality(ca.createDTO(user.getNationality()));
}
if (user.getTitle()!=null){
dto.setTitle(user.getTitle().toString());
}
if(user.getUserRole()instanceof OrganisationRole){
OrganisationRoleDTO orgRole = new OrganisationRoleDTO();
orgRole.setOrganisationDescription(user.getUserRoleData().getOrganisationDescription());
orgRole.setOrganisationName(user.getUserRoleData().getOrganisationName());
orgRole.setOrganisationIndustrySector(user.getUserRoleData().getIndustrySector().getId().toString());
((OrganisationRoleDTO)orgRole).setOrganisationEmployeeAmount(((OrganisationRoleData)user.getUserRoleData()).getOrganisationEmployeeAmount().toString());
dto.setUserRole(orgRole);
} else {
AlumniRoleDTO orgRole = new AlumniRoleDTO();
orgRole.setOrganisationDescription(user.getUserRoleData().getOrganisationDescription());
orgRole.setOrganisationName(user.getUserRoleData().getOrganisationName());
orgRole.setOrganisationIndustrySector(user.getUserRoleData().getIndustrySector().getId().toString());
dto.setUserRole(orgRole);
}
} else
try {
throw new Exception();
} catch (Exception e) {
// TODO Hier muss noch einmal korrekt abgefragt werden was los ist wenn kein user übergeben wurde
e.printStackTrace();
}
return dto;
}
@Override
public User createDomainObj(UserDTO dto) throws EnumValueNotFoundException, CountryNotFoundException {
User user;
if(dto.getUserRole() instanceof OrganisationRoleDTO){
user = new User(new OrganisationRole());
if(dto.getUserRole()!= null){
user.getUserRoleData().setOrganisationDescription(((OrganisationRoleDTO)dto.getUserRole()).getOrganisationDescription());
user.getUserRoleData().setOrganisationName(((OrganisationRoleDTO)dto.getUserRole()).getOrganisationName());
if(((OrganisationRoleDTO)dto.getUserRole()).getOrganisationIndustrySector()!=null){
user.getUserRoleData().setIndustrySector(industryAssembler.getDomainObj(((OrganisationRoleDTO)dto.getUserRole()).getOrganisationIndustrySector()));
}
if(((OrganisationRoleDTO)dto.getUserRole()).getOrganisationEmployeeAmount() != null){
((OrganisationRoleData)user.getUserRoleData()).setOrganisationEmployeeAmount(EmployeeAmountEnum.fromValue(((OrganisationRoleDTO)dto.getUserRole()).getOrganisationEmployeeAmount()));
}
}
} else {
user = new User(new AlumniRole());
if(dto.getUserRole()!= null){
user.getUserRoleData().setOrganisationDescription(((AlumniRoleDTO)dto.getUserRole()).getOrganisationDescription());
user.getUserRoleData().setOrganisationName(((AlumniRoleDTO)dto.getUserRole()).getOrganisationName());
if(((AlumniRoleDTO)dto.getUserRole()).getOrganisationIndustrySector()!=null){
user.getUserRoleData().setIndustrySector(industryAssembler.getDomainObj(((AlumniRoleDTO)dto.getUserRole()).getOrganisationIndustrySector()));
}
}
}
if(dto!=null){
if(dto.getAddresses() != null){
user.setAddresses(AddressEnum.fromValue(dto.getAddresses()));
}
user.setCobraSuperId(dto.getCobraUserId());
user.setApdUserId(dto.getApdUserId());
user.setInwentUserId(dto.getInwentUserId());
user.setElggUserId(dto.getElggUserId());
user.setAddress1(ada.createDomainObj(dto.getCurrentAddress()));
user.setAddress2(ada.createDomainObj(dto.getAlternativeAddress()));
user.setCitizenship1(dto.getCitizenship1());
user.setCitizenship2(dto.getCitizenship2());
user.setDateOfBirth(DateUtil.calendar2Date(dto.getDateOfBirth()));
user.setEmailBusiness(dto.getEmailBusiness());
user.setEmailPrivate(dto.getEmailPrivate());
user.setFamilyName(dto.getFamilyName());
user.setFathersName(dto.getFathersName());
user.setGivenName(dto.getGivenName());
user.setPosition(dto.getPosition());
user.setInternet(dto.getInternet());
if (dto.getNationality() != null){
user.setNationality(ca.getDomainObj(dto.getNationality()));
}
if(dto.getTitle()!=null){
user.setTitle(TitleEnum.fromValue(dto.getTitle()));
}
}
return user;
}
@Override
public User updateDomainObjByApdId(UserDTO dto, Long apdUserId) throws APDUserNotFoundException, EnumValueNotFoundException, CountryNotFoundException {
User user = userDAO.findAPDUserByID(apdUserId);
if(dto.getUserRole()instanceof OrganisationRoleDTO){
if(dto.getUserRole()!= null){
user.getUserRoleData().setOrganisationDescription(((OrganisationRoleDTO)dto.getUserRole()).getOrganisationDescription());
user.getUserRoleData().setOrganisationName(((OrganisationRoleDTO)dto.getUserRole()).getOrganisationName());
if(((OrganisationRoleDTO)dto.getUserRole()).getOrganisationIndustrySector()!=null){
user.getUserRoleData().setIndustrySector(industryAssembler.getDomainObj(((OrganisationRoleDTO)dto.getUserRole()).getOrganisationIndustrySector()));
}
if(((OrganisationRoleDTO)dto.getUserRole()).getOrganisationEmployeeAmount() != null){
((OrganisationRoleData)user.getUserRoleData()).setOrganisationEmployeeAmount(EmployeeAmountEnum.fromValue(((OrganisationRoleDTO)dto.getUserRole()).getOrganisationEmployeeAmount()));
}
}
}else {
if(dto.getUserRole()!= null){
user.getUserRoleData().setOrganisationDescription(((AlumniRoleDTO)dto.getUserRole()).getOrganisationDescription());
user.getUserRoleData().setOrganisationName(((AlumniRoleDTO)dto.getUserRole()).getOrganisationName());
if(((AlumniRoleDTO)dto.getUserRole()).getOrganisationIndustrySector()!=null){
user.getUserRoleData().setIndustrySector(industryAssembler.getDomainObj(((AlumniRoleDTO)dto.getUserRole()).getOrganisationIndustrySector()));
}
}
}
if(user!=null){
if(dto.getAddresses() != null){
user.setAddresses(AddressEnum.fromValue(dto.getAddresses()));
}
// user.setApdUserId(dto.getUserId()); // nicht updaten, da unveraenderlich
user.setCobraSuperId(dto.getCobraUserId());
user.setElggUserId(dto.getElggUserId());
user.setAddress1(ada.updateDomainObj(dto.getCurrentAddress(),user.getAddress1()));
user.setAddress2(ada.updateDomainObj(dto.getAlternativeAddress(),user.getAddress2()));
user.setCitizenship1(dto.getCitizenship1());
user.setCitizenship2(dto.getCitizenship2());
user.setDateOfBirth(DateUtil.calendar2Date(dto.getDateOfBirth()));
user.setEmailBusiness(dto.getEmailBusiness());
user.setEmailPrivate(dto.getEmailPrivate());
user.setFamilyName(dto.getFamilyName());
user.setFathersName(dto.getFathersName());
user.setGivenName(dto.getGivenName());
user.setPosition(dto.getPosition());
user.setInternet(dto.getInternet());
if (dto.getNationality() != null){
user.setNationality(ca.getDomainObj(dto.getNationality()));
}
if(dto.getTitle()!=null){
user.setTitle(TitleEnum.fromValue(dto.getTitle()));
}
}
return user;
}
@Override
public User updateDomainObjByCobraId(UserDTO dto, Long cobraUserId) throws CobraUserNotFoundException, EnumValueNotFoundException, CountryNotFoundException {
User user;
if(dto.getUserRole()instanceof OrganisationRoleDTO){
user = userDAO.findCobraUserByID(cobraUserId,true);
if(user != null && dto.getUserRole()!= null){
user.getUserRoleData().setOrganisationDescription(((OrganisationRoleDTO)dto.getUserRole()).getOrganisationDescription());
user.getUserRoleData().setOrganisationName(((OrganisationRoleDTO)dto.getUserRole()).getOrganisationName());
if(((OrganisationRoleDTO)dto.getUserRole()).getOrganisationIndustrySector()!=null){
user.getUserRoleData().setIndustrySector(industryAssembler.getDomainObj(((OrganisationRoleDTO)dto.getUserRole()).getOrganisationIndustrySector()));
}
if(((OrganisationRoleDTO)dto.getUserRole()).getOrganisationEmployeeAmount() != null){
((OrganisationRoleData)user.getUserRoleData()).setOrganisationEmployeeAmount(EmployeeAmountEnum.fromValue(((OrganisationRoleDTO)dto.getUserRole()).getOrganisationEmployeeAmount()));
}
}
}else {
user = userDAO.findCobraUserByID(cobraUserId,false);
if(user != null && dto.getUserRole()!= null){
user.getUserRoleData().setOrganisationDescription(((AlumniRoleDTO)dto.getUserRole()).getOrganisationDescription());
user.getUserRoleData().setOrganisationName(((AlumniRoleDTO)dto.getUserRole()).getOrganisationName());
if(((AlumniRoleDTO)dto.getUserRole()).getOrganisationIndustrySector()!=null){
user.getUserRoleData().setIndustrySector(industryAssembler.getDomainObj(((AlumniRoleDTO)dto.getUserRole()).getOrganisationIndustrySector()));
}
}
}
if(user!=null){
if(dto.getAddresses() != null){
user.setAddresses(AddressEnum.fromValue(dto.getAddresses()));
}
user.setApdUserId(dto.getApdUserId());
//user.setCobraSuperId(dto.getCobraUserId());
user.setAddress1(ada.updateDomainObj(dto.getCurrentAddress(),user.getAddress1()));
user.setAddress2(ada.updateDomainObj(dto.getAlternativeAddress(),user.getAddress2()));
user.setCitizenship1(dto.getCitizenship1());
user.setCitizenship2(dto.getCitizenship2());
user.setDateOfBirth(DateUtil.calendar2Date(dto.getDateOfBirth()));
user.setEmailBusiness(dto.getEmailBusiness());
user.setEmailPrivate(dto.getEmailPrivate());
user.setFamilyName(dto.getFamilyName());
user.setFathersName(dto.getFathersName());
user.setGivenName(dto.getGivenName());
user.setPosition(dto.getPosition());
user.setInternet(dto.getInternet());
if (dto.getNationality() != null){
user.setNationality(ca.getDomainObj(dto.getNationality()));
}
if(dto.getTitle()!=null){
user.setTitle(TitleEnum.fromValue(dto.getTitle()));
}
} else throw new CobraUserNotFoundException();
return user;
}
@Override
public User updateDomainObjRole(AbstractUserRoleDTO dto, Long userId) throws APDUserNotFoundException, EnumValueNotFoundException {
User user = userDAO.findAPDUserByID(userId);
if(dto instanceof OrganisationRoleDTO){
if(dto != null){
user.setUserRole(new OrganisationRole());
user.getUserRoleData().setOrganisationDescription(((OrganisationRoleDTO)dto).getOrganisationDescription());
user.getUserRoleData().setOrganisationName(((OrganisationRoleDTO)dto).getOrganisationName());
if(((OrganisationRoleDTO)dto).getOrganisationIndustrySector()!=null){
user.getUserRoleData().setIndustrySector(industryAssembler.getDomainObj(((OrganisationRoleDTO)dto).getOrganisationIndustrySector()));
}
if(((OrganisationRoleDTO)dto).getOrganisationEmployeeAmount() != null){
((OrganisationRoleData)user.getUserRoleData()).setOrganisationEmployeeAmount(EmployeeAmountEnum.fromValue(((OrganisationRoleDTO)dto).getOrganisationEmployeeAmount()));
}
}
}else {
if(dto != null){
user.setUserRole(new AlumniRole());
user.getUserRoleData().setOrganisationDescription(((AlumniRoleDTO)dto).getOrganisationDescription());
user.getUserRoleData().setOrganisationName(((AlumniRoleDTO)dto).getOrganisationName());
if(((AlumniRoleDTO)dto).getOrganisationIndustrySector()!=null){
user.getUserRoleData().setIndustrySector(industryAssembler.getDomainObj(((AlumniRoleDTO)dto).getOrganisationIndustrySector()));
}
}
}
return user;
}
}