/**
*
*/
package net.agef.jobexchange.webservice;
import javax.servlet.ServletContext;
import net.agef.jobexchange.application.DataProviderWorker;
import net.agef.jobexchange.application.UserWorker;
import net.agef.jobexchange.domain.DataProvider;
import net.agef.jobexchange.domain.User;
import net.agef.jobexchange.exceptions.APDUserNotFoundException;
import net.agef.jobexchange.exceptions.ClientIPNotAuthorizedException;
import net.agef.jobexchange.exceptions.CountryNotFoundException;
import net.agef.jobexchange.exceptions.EnumValueNotFoundException;
import net.agef.jobexchange.exceptions.InwentUserNotFoundException;
import net.agef.jobexchange.exceptions.ObjectNotDeletedException;
import net.agef.jobexchange.exceptions.ObjectNotSavedException;
import net.agef.jobexchange.exceptions.PassedAttributeIsNullException;
import net.agef.jobexchange.webservice.adapter.UserAssembler;
import net.agef.jobexchange.webservice.entities.AlumniRoleDTO;
import net.agef.jobexchange.webservice.entities.OrganisationRoleDTO;
import net.agef.jobexchange.webservice.entities.UserDTO;
import org.apache.axis2.AxisFault;
import org.apache.axis2.context.MessageContext;
import org.apache.log4j.Logger;
/**
*
*
* Die Klasse UserWS ist eine Webservice Skeleton Klasse und haelt alle Methoden zur
* Interaktion mit Nutzerdaten im Kontext der Jobboerse bereit.
*
* @author Andreas Pursian
*/
public class UserWS {
private Logger logger = Logger.getLogger(UserWS.class);
private UserWorker uw;
private UserAssembler ua;
private MessageContext msgCtx;
private ServletContext axisServletContext;
private DataProviderWorker dw;
private DataProvider dataProvider;
@SuppressWarnings("static-access")
public UserWS() throws AxisFault {
try {
this.msgCtx = MessageContext.getCurrentMessageContext();
this.axisServletContext = (ServletContext)msgCtx.getProperty("transport.http.servletContext");
this.uw = (UserWorker)axisServletContext.getAttribute("UserWorker.UserWorkerService");
this.dw = (DataProviderWorker)axisServletContext.getAttribute("DataProviderWorker.DataProviderWorkerService");
this.ua = (UserAssembler)axisServletContext.getAttribute("UserAssembler.UserAssemblerService");
//Ueberpruefung auf korrekten und erlaubten Datenprovider anhand der zugreifenden Client IP
String remoteClientAddress = (String) msgCtx.getProperty(msgCtx.REMOTE_ADDR);
logger.info("UserWS - RemoteClientIP: "+remoteClientAddress);
dataProvider = dw.checkForValidDataProviderByIP(remoteClientAddress);
if(dataProvider == null){
try {
throw new ClientIPNotAuthorizedException();
} catch (ClientIPNotAuthorizedException e) {
e.printStackTrace();
throw new AxisFault("Client IP Not Autherized Exception");
}
}
} catch (Exception e) {
throw new AxisFault("General WebService Instantiation Exception");
}
}
/**
* Die Methode 'addAlumniUser' dient dazu einen neuen Nutzer mit Alumnirolle in der Jobboerse zu registrieren. Die Registrierung eines Nutzers ist Grundlage fuer alle
* weiteren Operationen wie das Hinzufuegen eines Bewerberprofils oder das Veroeffentlichen eines Stellenangebotes.
*
* Wichtig ist hierbei das die konkrete Rolle die der Nutzer innerhalb der APD einnimmt (also entweder Alumni oder Organisation) korrekt uebergeben wird.
* Dies geschieht indem dem Parameter 'userRole' eine konkrete Instanz der Klasse AlumniRoleDTO (fuer die Alumni Rolle)
* uebergeben wird.
*
* @param Erwartet ein Objekt der Klasse UserDTO mit allen relevanten Nutzerdaten, die APD User Id sowie eine Instanz der konkreten Nutzerrolle.
* @return Gibt ein Objekt vom Typ Boolean zurueck. Im Erfolgsfall traegt dieses den Wert 'true' im Fehlerfall 'false'.
*/
public Boolean addAlumniUser(UserDTO user, Long apdUserId, AlumniRoleDTO userRole){
logger.info("Adding alumniUser by apdUserId: "+apdUserId);
try {
User us = uw.getUserByAPDId(apdUserId);
logger.info(us);
} catch (APDUserNotFoundException e) {
user.setApdUserId(apdUserId);
user.setUserRole(userRole);
try {
uw.addUser(ua.createDomainObj(user),this.dataProvider);
} catch (EnumValueNotFoundException e1) {
e1.printStackTrace();
return false;
} catch (CountryNotFoundException e2) {
e2.printStackTrace();
return false;
} catch (ObjectNotSavedException e3) {
e3.printStackTrace();
return false;
} catch (PassedAttributeIsNullException e4) {
e4.printStackTrace();
return false;
}
return true;
}
logger.info("Adding alumniUser by apdUserId failed, user already exist!");
return false;
}
/**
* Die Methode 'addAlumniUser' dient dazu einen neuen Nutzer mit Alumnirolle in der Jobboerse zu registrieren. Die Registrierung eines Nutzers ist Grundlage fuer alle
* weiteren Operationen wie das Hinzufuegen eines Bewerberprofils oder das Veroeffentlichen eines Stellenangebotes.
*
* Wichtig ist hierbei das die konkrete Rolle die der Nutzer innerhalb der APD einnimmt (also entweder Alumni oder Organisation) korrekt uebergeben wird.
* Dies geschieht indem dem Parameter 'userRole' eine konkrete Instanz der Klasse AlumniRoleDTO (fuer die Alumni Rolle)
* uebergeben wird.
*
* @param Erwartet ein Objekt der Klasse UserDTO mit allen relevanten Nutzerdaten, die APD User Id sowie eine Instanz der konkreten Nutzerrolle.
* @return Gibt ein Objekt vom Typ Boolean zurueck. Im Erfolgsfall traegt dieses den Wert 'true' im Fehlerfall 'false'.
*/
public Boolean addInwentAlumniUser(UserDTO user, Long inwentUserId, AlumniRoleDTO userRole){
logger.info("Adding alumniUser by inwentUserId: "+inwentUserId);
try {
User us = uw.getUserByInwentId(inwentUserId);
logger.info(us);
} catch (InwentUserNotFoundException e) {
user.setInwentUserId(inwentUserId);
logger.info("Inwent User mit ID " + user.getInwentUserId());
user.setUserRole(userRole);
try {
uw.addUser(ua.createDomainObj(user),this.dataProvider);
} catch (EnumValueNotFoundException e1) {
e1.printStackTrace();
return false;
} catch (CountryNotFoundException e2) {
e2.printStackTrace();
return false;
} catch (ObjectNotSavedException e3) {
e3.printStackTrace();
return false;
} catch (PassedAttributeIsNullException e4) {
e4.printStackTrace();
return false;
}
return true;
}
logger.info("Adding inwentAlumniUser by inwentUserId failed, user already exist!");
return false;
}
/**
* Die Methode 'addOrganisationUser' dient dazu einen neuen Nutzer mit der Organisationsrolle in der Jobboerse zu registrieren. Die Registrierung eines Nutzers ist Grundlage fuer alle
* weiteren Operationen wie das Hinzufuegen eines Bewerberprofils oder das Veroeffentlichen eines Stellenangebotes.
*
* Wichtig ist hierbei das die konkrete Rolle die der Nutzer innerhalb der APD einnimmt (also entweder Alumni oder Organisation) korrekt uebergeben wird.
* Dies geschieht indem dem Parameter 'userRole' vom eine konkrete Instanz der Klasse
* OrganisationRoleDTO (fuer die Organisations Rolle) uebergeben wird.
*
* @param Erwartet ein Objekt der Klasse UserDTO mit allen relevanten Nutzerdaten, die APD User Id sowie eine Instanz der konkreten Nutzerrolle.
* @return Gibt ein Objekt vom Typ Boolean zurueck. Im Erfolgsfall traegt dieses den Wert 'true' im Fehlerfall 'false'.
*/
public Boolean addOrganisationUser(UserDTO user, Long apdUserId, OrganisationRoleDTO userRole){
logger.info("Adding orgUser by apdUserId: "+apdUserId);
try {
uw.getUserByAPDId(apdUserId);
} catch (APDUserNotFoundException e) {
user.setApdUserId(apdUserId);
user.setUserRole(userRole);
try {
uw.addUser(ua.createDomainObj(user),this.dataProvider);
} catch (EnumValueNotFoundException e1) {
e1.printStackTrace();
return false;
} catch (CountryNotFoundException e2) {
e2.printStackTrace();
return false;
} catch (ObjectNotSavedException e3) {
e3.printStackTrace();
return false;
} catch (PassedAttributeIsNullException e4) {
e4.printStackTrace();
return false;
}
return true;
}
logger.info("Adding orgUser by apdUserId failed, user already exist!");
return false;
}
/**
* Die Methode 'modifyUser' ermoeglicht es das bestehende Nutzerprofil eines bestehendem Nutzers zu modifizieren.
*
* @param Erwartet ein Objekt der Klasse UserDTO mit allen relevanten Nutzerdaten sowie die APD User Id.
* @return Gibt ein Objekt vom Typ Boolean zurueck. Im Erfolgsfall traegt dieses den Wert 'true' im Fehlerfall 'false'.
*/
public Boolean modifyUser(UserDTO user, Long apdUserId){
logger.info("Modify user by apdUserId: "+apdUserId);
user.setApdUserId(apdUserId);
try {
// uw.modifyUser(ua.updateDomainObj(user, user.getApdUserId()));
uw.modifyUser(ua.updateDomainObjByApdId(user, user.getApdUserId()));
} catch (APDUserNotFoundException e) {
e.printStackTrace();
return false;
} catch (EnumValueNotFoundException e) {
e.printStackTrace();
return false;
} catch (CountryNotFoundException e) {
e.printStackTrace();
return false;
} catch (ObjectNotSavedException e) {
e.printStackTrace();
return false;
} catch (PassedAttributeIsNullException e) {
e.printStackTrace();
return false;
}
return true;
}
/**
* Die Methode 'getUserByUserId' liefert ein Objekt vom Typ UserDTO welches alle Relevanten Stammdaten eines Nutzers
* enthält.
*
* @param Erwartet die APD User Id als Parameter.
* @return Gibt ein Objekt vom Typ UserDTO zurueck. Sollte kein Nutzer mit der übergebenen NutzerId gefunden werden
* koennen, wird null zuruckgegeben.
*/
// public UserDTO getUserByUserId(Long apdUserId){
// try {
// return ua.createDTO(uw.getUserByAPDId(apdUserId));
// } catch (APDUserNotFoundException e) {
// e.printStackTrace();
// return null;
// }
//
// }
/**
* Die Methode 'deleteUser' ermoeglicht es einen bestehenden Nutzer inklusive aller von ihm eingestellten Stellenangebote sowie eines
* moeglicherweise vorhandenen Bewerber-/Expertenprofils zu loeschen.
*
* @param Erwartet die APD User Id als Parameter.
* @return Gibt ein Objekt vom Typ Boolean zurueck. Im Erfolgsfall traegt dieses den Wert 'true' im Fehlerfall 'false'.
*/
public Boolean deleteUser(Long apdUserId){
logger.info("Delete user by apdUserId: "+apdUserId);
User user;
try {
user = uw.getUserByAPDId(apdUserId);
uw.deleteUser(user);
} catch (APDUserNotFoundException e) {
e.printStackTrace();
return false;
} catch (ObjectNotDeletedException e) {
e.printStackTrace();
return false;
} catch (PassedAttributeIsNullException e) {
e.printStackTrace();
return false;
}
return true;
}
/**
*
* Die Methode 'checkIfUserExist' überprüft ob eine konkreten Nutzer mit seinem Profil bereits in der Jobbörse
* existiert.
*
* @param Erwartet die APD User Id als Parameter.
* @return Gibt ein Objekt vom Typ Boolean zurueck. Im Erfolgsfall traegt dieses den Wert 'true' im Fehlerfall 'false'.
*/
public Boolean checkIfUserExist(Long apdUserId) {
logger.info("Check if user exist by apdUserId: "+apdUserId);
try {
if(uw.getUserByAPDId(apdUserId) != null){
return true;
} else return false;
} catch (APDUserNotFoundException e) {
e.printStackTrace();
return false;
}
}
/**
*
* Die Methode 'checkIfUserExist' überprüft ob eine konkreten Nutzer mit seinem Profil bereits in der Jobbörse
* existiert.
*
* @param Erwartet die APD User Id als Parameter.
* @return Gibt ein Objekt vom Typ Boolean zurueck. Im Erfolgsfall traegt dieses den Wert 'true' im Fehlerfall 'false'.
*/
public Boolean checkIfInwentUserExist(Long inwentUserId) {
logger.info("Check if user exist by inwentUserId: "+inwentUserId);
try {
if(uw.getUserByInwentId(inwentUserId) != null){
return true;
} else return false;
} catch (InwentUserNotFoundException e) {
e.printStackTrace();
return false;
}
}
/**
* Die Methode 'switchContactAddress' ermoeglicht es die aktive Kontaktadresse eines bestehenden Nutzer umzuschalten. Bei
* jedem Aufruf wird die zur Zeit aktive Adresse zur sekundaeren Adresse und die bisher sekundaere Adresse zur aktiven Addresse.
*
* @param Erwartet die APD User Id als Parameter.
* @return Gibt ein Objekt vom Typ Boolean zurueck. Im Erfolgsfall traegt dieses den Wert 'true' im Fehlerfall 'false'.
*/
public Boolean switchContactAddress(Long apdUserId){
logger.info("Switch Contact Address by apdUserId: "+apdUserId);
try {
uw.switchContactAddressByAPDUserId(apdUserId);
} catch (APDUserNotFoundException e) {
e.printStackTrace();
return false;
} catch (ObjectNotSavedException e) {
e.printStackTrace();
return false;
}
return true;
}
/**
* Die Methode 'changeUserRoleToAlumni' wechselt die Rolle eines Nutzers zur Alumni Rolle.
*
* @param Erwartet die APD User Id und eine Instanz der Klasse AlumniRoleDTO als Parameter.
* @return Gibt ein Objekt vom Typ Boolean zurueck. Im Erfolgsfall traegt dieses den Wert 'true' im Fehlerfall 'false'.
*/
public Boolean changeUserRoleToAlumni(Long apdUserId, AlumniRoleDTO role){
logger.info("Change user role to alumni by apdUserId: "+apdUserId);
try {
ua.updateDomainObjRole(role, apdUserId);
} catch (APDUserNotFoundException e) {
e.printStackTrace();
return false;
} catch (EnumValueNotFoundException e) {
e.printStackTrace();
return false;
} catch (CountryNotFoundException e) {
e.printStackTrace();
return false;
}
return true;
}
/**
* Die Methode 'changeUserRoleToOrganisation' wechselt die Rolle eines Nutzers zur Organisations Rolle.
*
* @param Erwartet die APD User Id und eine Instanz der Klasse OrganisationRoleDTO als Parameter.
* @return Gibt ein Objekt vom Typ Boolean zurueck. Im Erfolgsfall traegt dieses den Wert 'true' im Fehlerfall 'false'.
*/
public Boolean changeUserRoleToOrganisation(Long apdUserId, OrganisationRoleDTO role){
logger.info("Change user role to org by apdUserId: "+apdUserId);
try {
ua.updateDomainObjRole(role, apdUserId);
} catch (APDUserNotFoundException e) {
e.printStackTrace();
return false;
} catch (EnumValueNotFoundException e) {
e.printStackTrace();
return false;
} catch (CountryNotFoundException e) {
e.printStackTrace();
return false;
}
return true;
}
}