package fi.arcusys.koku.common.soa;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import javax.ejb.EJB;
import javax.ejb.Stateless;
import javax.jws.WebService;
import fi.arcusys.koku.common.external.CustomerServiceDAO;
import fi.arcusys.koku.common.external.GroupsDAO;
import fi.arcusys.koku.common.external.PyhServiceDAO;
import fi.arcusys.koku.common.external.RolesDAO;
import fi.arcusys.koku.common.service.UserDAO;
/**
* Implementation of external SOA/Web Service interface for providing user/group/role related operations to other parts of the system (UI, Intalio Forms etc.)
*
* @author Dmitry Kudinov (dmitry.kudinov@arcusys.fi)
* Oct 10, 2011
*/
@Stateless
@WebService(serviceName = "UsersAndGroupsService", portName = "UsersAndGroupsServicePort",
endpointInterface = "fi.arcusys.koku.common.soa.UsersAndGroupsService",
targetNamespace = "http://soa.common.koku.arcusys.fi/")
public class UsersAndGroupsServiceImpl implements UsersAndGroupsService {
@EJB
private PyhServiceDAO pyhServiceDao;
@EJB
private UserDAO userDao;
@EJB
private CustomerServiceDAO customerDao;
@EJB
private GroupsDAO groupsDao;
@EJB
private RolesDAO rolesDao;
/**
* @param username
* @return
*/
@Override
public String getUserUidByKunpoName(String username) {
if (username == null || username.isEmpty()) {
return null;
}
final fi.arcusys.koku.common.service.datamodel.User user = userDao.getUserByCitizenPortalNameOrNull(username);
if (user == null) {
final String ssnByKunpoName = customerDao.getSsnByKunpoName(username);
if (ssnByKunpoName != null && !ssnByKunpoName.isEmpty()) {
return userDao.getOrCreateUserByCitizenPortalName(username).getUid();
} else {
throw new IllegalArgumentException("KunPo user '" + username + "' not found in ldap and DB.");
}
} else {
return user.getUid();
}
}
/**
* @param userUid
* @return
*/
@Override
public String getKunpoNameByUserUid(String userUid) {
return userDao.getOrCreateUser(userUid).getCitizenPortalName();
}
/**
* @param username
* @return
*/
@Override
public String getUserUidByLooraName(String username) {
if (username == null || username.isEmpty()) {
return null;
}
final fi.arcusys.koku.common.service.datamodel.User user = userDao.getUserByEmployeePortalNameOrNull(username);
if (user == null) {
final String ssnByLooraName = customerDao.getSsnByLooraName(username);
if (ssnByLooraName != null && !ssnByLooraName.isEmpty()) {
return userDao.getOrCreateUserByEmployeePortalName(username).getUid();
} else {
throw new IllegalArgumentException("Loora user '" + username + "' not found in ldap and DB.");
}
} else {
return user.getUid();
}
}
/**
* @param userUid
* @return
*/
@Override
public String getLooraNameByUserUid(String userUid) {
return userDao.getOrCreateUser(userUid).getEmployeePortalName();
}
/**
* @param searchString
* @param limit
* @return
*/
@Override
public List<UserInfo> searchUsers(String searchString, int limit) {
return getListBySingleValue(customerDao.getKunpoUserInfoBySsn(searchString));
}
/**
* @param searchString
* @param limit
* @return
*/
@Override
public List<UserInfo> searchEmployees(String searchString, int limit) {
// searchString is username in portal
final String ssnByLooraName = customerDao.getSsnByLooraName(searchString);
if (ssnByLooraName != null && !ssnByLooraName.isEmpty()) {
return getListBySingleValue(customerDao.getEmployeeUserInfoBySsn(ssnByLooraName));
} else {
return Collections.emptyList();
}
}
private <E> List<E> getListBySingleValue(final E singleValue) {
if (singleValue != null) {
return Collections.singletonList(singleValue);
}
return Collections.emptyList();
}
/**
* @param searchString
* @param limit
* @return
*/
@Override
public List<Group> searchGroups(String searchString, int limit) {
return groupsDao.searchGroups(searchString, limit);
}
/**
* @param groupUid
* @return
*/
@Override
public List<UserInfo> getUsersByGroupUid(String groupUid) {
return groupsDao.getUsersByGroupUid(groupUid);
}
/**
* @param searchString
* @param limit
* @return
*/
@Override
public List<Child> searchChildren(String searchString, int limit) {
return getListBySingleValue(pyhServiceDao.getChildInfo(getUserUidByKunpoSsn(searchString)));
}
/**
* @param userUid
* @return
*/
@Override
public List<ChildWithHetu> getUsersChildren(String userUid) {
return pyhServiceDao.getUsersChildren(userUid);
}
/**
* @param childUid
* @return
*/
@Override
public List<Child> getChildInfo(List<String> childUids) {
if (childUids == null || childUids.isEmpty()) {
return Collections.emptyList();
}
final List<Child> result = new ArrayList<Child>();
for (final String childUid : childUids) {
result.add(pyhServiceDao.getChildInfo(childUid));
}
return result;
}
/**
* @param userUid
* @return
*/
@Override
public UserInfo getUserInfo(String userUid) {
return customerDao.getUserInfo(userDao.getUserByUid(userUid));
}
/**
* @param username
* @return
*/
@Override
public String getSsnByLdapName(String username) {
String result = getSsnByKunpoName(username);
if (result == null || result.isEmpty()) {
result = getSsnByLooraName(username);
}
return result;
}
/**
* @param ssn
* @return
*/
@Override
public String getUserUidByKunpoSsn(String ssn) {
final UserInfo user = customerDao.getKunpoUserInfoBySsn(ssn);
if (user != null) {
return user.getUid();
} else {
return "";
}
}
/**
* @param ssn
* @return
*/
@Override
public String getUserUidByEmployeeSsn(String ssn) {
final UserInfo user = customerDao.getEmployeeUserInfoBySsn(ssn);
if (user != null) {
return user.getUid();
} else {
return "";
}
}
/**
* @param looraName
* @return
*/
@Override
public String getSsnByLooraName(String looraName) {
return customerDao.getSsnByLooraName(looraName);
}
/**
* @param kunpoName
* @return
*/
@Override
public String getSsnByKunpoName(String kunpoName) {
return customerDao.getSsnByKunpoName(kunpoName);
}
/**
* @param username
* @param ssn
* @return
*/
@Override
public UserInfo loginByKunpoNameAndSsn(String kunpoUsername, String ssn) {
if (ssn == null || ssn.isEmpty()) {
return customerDao.getKunpoUserInfoBySsn(customerDao.getSsnByKunpoName(kunpoUsername));
}
return customerDao.getKunpoUserInfoByPortalNameAndSsn(kunpoUsername, ssn);
}
/**
* @param username
* @param ssn
* @return
*/
@Override
public UserInfo loginByLooraNameAndSsn(String looraUsername, String ssn) {
if (ssn == null || ssn.isEmpty()) {
return customerDao.getEmployeeUserInfoBySsn(customerDao.getSsnByLooraName(looraUsername));
}
return customerDao.getEmployeeUserInfoByPortalNameAndSsn(looraUsername, ssn);
}
/**
* @param userUid
* @return
*/
@Override
public List<Role> getUserRoles(String userUid) {
final String looraName = getLooraNameByUserUid(userUid);
if (looraName == null || looraName.isEmpty()) {
return Collections.emptyList();
}
return rolesDao.getEmployeeRoles(looraName);
}
/**
* @param searchString
* @param limit
* @return
*/
@Override
public List<Role> searchRoles(String searchString, int limit) {
return rolesDao.searchRoles(searchString, limit);
}
/**
* @param roleUid
* @return
*/
@Override
public List<String> getUsernamesInRole(String roleUid) {
return rolesDao.getUsernamesInRole(roleUid);
}
}