package com.idega.user.data;
import java.rmi.RemoteException;
import java.sql.Date;
import java.sql.SQLException;
import java.sql.Timestamp;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import javax.ejb.CreateException;
import javax.ejb.EJBException;
import javax.ejb.FinderException;
import com.idega.core.builder.data.ICPage;
import com.idega.core.contact.data.Email;
import com.idega.core.contact.data.EmailBMPBean;
import com.idega.core.contact.data.Phone;
import com.idega.core.contact.data.PhoneBMPBean;
import com.idega.core.data.ICTreeNode;
import com.idega.core.file.data.ICFile;
import com.idega.core.localisation.data.ICLanguage;
import com.idega.core.location.data.Address;
import com.idega.core.location.data.AddressType;
import com.idega.data.GenericEntity;
import com.idega.data.IDOAddRelationshipException;
import com.idega.data.IDOCompositePrimaryKeyException;
import com.idega.data.IDOEntityDefinition;
import com.idega.data.IDOEntityField;
import com.idega.data.IDOException;
import com.idega.data.IDOFinderException;
import com.idega.data.IDOLookup;
import com.idega.data.IDOLookupException;
import com.idega.data.IDOQuery;
import com.idega.data.IDORelationshipException;
import com.idega.data.IDORemoveRelationshipException;
import com.idega.data.IDORuntimeException;
import com.idega.data.IDOUtil;
import com.idega.data.query.AND;
import com.idega.data.query.Column;
import com.idega.data.query.Criteria;
import com.idega.data.query.InCriteria;
import com.idega.data.query.JoinCriteria;
import com.idega.data.query.MatchCriteria;
import com.idega.data.query.OR;
import com.idega.data.query.SelectQuery;
import com.idega.data.query.Table;
import com.idega.data.query.WildCardColumn;
import com.idega.user.business.UserStatusBusinessBean;
import com.idega.util.IWTimestamp;
import com.idega.util.ListUtil;
import com.idega.util.StringHandler;
import com.idega.util.text.Name;
import com.idega.util.text.TextSoap;
/**
* Title: User
* Copyright: Copyright (c) 2001
* Company: idega.is
* @author 2000 - idega team - <a href="mailto:gummi@idega.is">Gudmundur Agust Saemundsson</a>
* @version 1.0
*/
public class UserBMPBean extends AbstractGroupBMPBean implements User, Group, com.idega.core.user.data.User {
private static String sClassName = User.class.getName();
static final String USER_GROUP_TYPE=User.USER_GROUP_TYPE;
private static final String RELATION_TYPE_GROUP_PARENT = "GROUP_PARENT";
private static final int PREFETCH_SIZE = 100;
private static final int SUBLIST_SIZE = 1000;
public final static String SQL_TABLE_NAME= "IC_USER";
public final static String SQL_RELATION_EMAIL = "IC_USER_EMAIL";
public final static String SQL_RELATION_ADDRESS = "IC_USER_ADDRESS";
public final static String SQL_RELATION_PHONE = "IC_USER_PHONE";
public final static String TABLE_NAME = SQL_TABLE_NAME;
static final String META_DATA_HOME_PAGE = "homepage";
// public UserBMPBean(){
// super();
// }
// public UserBMPBean(int id)throws SQLException{
// super(id);
// }
public String getEntityName() {
return TABLE_NAME;
}
public void initializeAttributes() {
// addAttribute(getIDColumnName());
super.addGeneralGroupRelation();
addAttribute(getColumnNameFirstName(), "First name", true, true, java.lang.String.class, 45);
addAttribute(getColumnNameMiddleName(), "Middle name", true, true, java.lang.String.class, 90);
addAttribute(getColumnNameLastName(), "Last name", true, true, java.lang.String.class, 45);
addAttribute(getColumnNameDisplayName(), "Display name", true, true, java.lang.String.class, 180);
addAttribute(getColumnNameDescription(), "Description", true, true, java.lang.String.class);
addAttribute(getColumnNameDateOfBirth(), "Birth date", true, true, java.sql.Date.class);
addAttribute(getColumnNamePersonalID(), "Personal ID", true, true, String.class, 20);
addAttribute(getColumnNameDeleted(),"Deleted",true,true,Boolean.class);
addAttribute(getColumnNameDeletedBy(), "Deleted by", true, true, Integer.class, "many-to-one", User.class);
addAttribute(getColumnNameDeletedWhen(), "Deleted when", true, true, Timestamp.class);
addAttribute(getColumnNameFamilyID(), "Family ID", true, true, String.class, 20);
//adds a unique id string column to this entity that is set when the entity is first stored.
addUniqueIDColumn();
addManyToOneRelationship(getColumnNameGender(), "Gender", com.idega.user.data.Gender.class);
addOneToOneRelationship(getColumnNameSystemImage(), "Image", com.idega.core.file.data.ICFile.class);
/**
* For legacy compatabuility
*/
addOneToOneRelationship(_COLUMNNAME_USER_GROUP_ID, "User", Group.class);
addOneToOneRelationship(_COLUMNNAME_PRIMARY_GROUP_ID, "Primary group", Group.class);
this.addManyToManyRelationShip(Address.class, SQL_RELATION_ADDRESS);
this.addManyToManyRelationShip(Phone.class, SQL_RELATION_PHONE);
this.addManyToManyRelationShip(Email.class, SQL_RELATION_EMAIL);
this.setNullable(getColumnNameSystemImage(), true);
addMetaDataRelationship();
// this.setNullable(_COLUMNNAME_PRIMARY_GROUP_ID,true);
// this.setUnique(getColumnNamePersonalID(),true);
//Added by Laddi 17.10.2003
addManyToOneRelationship(getColumnNameNativeLanguage(), ICLanguage.class);
addIndex("IDX_IC_USER_1", new String[]{getColumnNameLastName(), getColumnNameFirstName(), getColumnNameMiddleName()});
addIndex("IDX_IC_USER_2", new String[]{getColumnNameFirstName(), getColumnNameLastName(), getColumnNameMiddleName()});
addIndex("IDX_IC_USER_3", getColumnNameFirstName());
addIndex("IDX_IC_USER_4", getColumnNamePersonalID());
addIndex("IDX_IC_USER_5", _COLUMNNAME_USER_GROUP_ID);
addIndex("IDX_IC_USER_6", getUniqueIdColumnName());
}
public void setDefaultValues(){
super.setDefaultValues();
initializeColumnValue(getColumnNameDeleted(),Boolean.FALSE);
}
//
// public void insertStartData(){
//
// }
public String getIDColumnName() {
return getColumnNameUserID();
}
public static UserBMPBean getStaticInstance() {
return (UserBMPBean) com.idega.user.data.UserBMPBean.getStaticInstance(sClassName);
}
public static String getAdminDefaultName() {
return "Administrator";
}
public String getGroupTypeDescription() {
return "";
}
public String getGroupTypeKey() {
return USER_GROUP_TYPE;
}
public String ejbHomeGetGroupType(){
return super.ejbHomeGetGroupType();
}
public boolean getGroupTypeVisibility() {
return false;
}
/* ColumNames begin */
public static String getColumnNameUserID() {
return "IC_USER_ID";
}
public static String getColumnNameFirstName() {
return "FIRST_NAME";
}
public static String getColumnNameMiddleName() {
return "MIDDLE_NAME";
}
public static String getColumnNameLastName() {
return "LAST_NAME";
}
public static String getColumnNameDisplayName() {
return "DISPLAY_NAME";
}
public static String getColumnNameDescription() {
return "DESCRIPTION";
}
public static String getColumnNameDateOfBirth() {
return "DATE_OF_BIRTH";
}
public static String getColumnNameGender() {
return "IC_GENDER_ID";
}
public static String getColumnNameSystemImage() {
return "SYSTEM_IMAGE_ID";
}
// public static final String _COLUMNNAME_USER_GROUP_ID = "USER_REPRESENTATIVE";
public static final String _COLUMNNAME_PRIMARY_GROUP_ID = "PRIMARY_GROUP";
public static String getColumnNamePersonalID() {
return "PERSONAL_ID";
}
//added by Laddi
public static String getColumnNameHomePageID() {
return "HOME_PAGE_ID";
}
public static String getColumnNameDeleted() {
return "DELETED";
}
public static String getColumnNameDeletedBy() {
return "DELETED_BY";
}
public static String getColumnNameDeletedWhen() {
return "DELETED_WHEN";
}
public static String getColumnNameNativeLanguage() {
return "IC_LANGUAGE_ID";
}
public static String getColumnNameFamilyID() {
return "FAMILY_ID";
}
/**
* @depricated
*/
public static final String _COLUMNNAME_USER_GROUP_ID = "USER_REPRESENTATIVE";
/* ColumNames end */
/* Getters begin */
public String getPersonalID() {
return getStringColumnValue(getColumnNamePersonalID());
}
public String getFirstName() {
return (String) getColumnValue(getColumnNameFirstName());
}
public String getMiddleName() {
return (String) getColumnValue(getColumnNameMiddleName());
}
public String getLastName() {
return (String) getColumnValue(getColumnNameLastName());
}
public String getDisplayName() {
return (String) getColumnValue(getColumnNameDisplayName());
}
public String getDescription() {
return (String) getColumnValue(getColumnNameDescription());
}
public Date getDateOfBirth() {
return (Date) getColumnValue(getColumnNameDateOfBirth());
}
public int getGenderID() {
return getIntColumnValue(getColumnNameGender());
}
public Gender getGender() {
return (Gender) getColumnValue(getColumnNameGender());
}
public int getSystemImageID() {
return getIntColumnValue(getColumnNameSystemImage());
}
public int getPrimaryGroupID() {
return getIntColumnValue(_COLUMNNAME_PRIMARY_GROUP_ID);
}
public Group getPrimaryGroup() {
return (Group) getColumnValue(_COLUMNNAME_PRIMARY_GROUP_ID);
}
public ICLanguage getNativeLanguage() {
return (ICLanguage) getColumnValue(getColumnNameNativeLanguage());
}
public void setNativeLanguage(int ICLanguageID) {
setColumn(getColumnNameNativeLanguage(), ICLanguageID);
}
public void setNativeLanguage(ICLanguage language) {
setColumn(getColumnNameNativeLanguage(), language);
}
// public String getFamilyID() {
// return getStringColumnValue(getColumnNameFamilyID());
// }
public String getName() {
String firstName = this.getFirstName();
String middleName = this.getMiddleName();
String lastName = this.getLastName();
if (firstName == null) {
firstName = "";
}
if (middleName == null) {
middleName = "";
}
else if (!middleName.equals("")) {
middleName = " " + middleName;
}
if (lastName == null) {
lastName = "";
}
else if (!lastName.equals("")){
lastName = " " + lastName;
}
return firstName + middleName + lastName;
}
/*public String getNameLastFirst() {
return getNameLastFirst(false);
}
public String getNameLastFirst(boolean commaSeperated) {
String firstName = this.getFirstName();
String middleName = this.getMiddleName();
String lastName = this.getLastName();
if (lastName == null) {
lastName = "";
}
else {
if (commaSeperated)
lastName += ",";
}
if (firstName == null) {
firstName = "";
}
else {
firstName = " " + firstName;
}
if (middleName == null) {
middleName = "";
}
else {
middleName = " " + middleName;
}
return lastName + firstName + middleName;
}*/
public int getHomePageID() {
return getGeneralGroup().getHomePageID();
}
public ICPage getHomePage() {
return getGeneralGroup().getHomePage();
}
public int getHomeFolderID() {
return getGeneralGroup().getHomeFolderID();
}
public ICFile getHomeFolder() {
return getGeneralGroup().getHomeFolder();
}
public Timestamp getCreated() {
return getGeneralGroup().getCreated();
}
public boolean getDeleted() {
return getBooleanColumnValue(getColumnNameDeleted());
}
public int getDeletedBy() {
return getIntColumnValue(getColumnNameDeletedBy());
}
public Timestamp getDeletedWhen() {
return ((Timestamp) getColumnValue(getColumnNameDeletedWhen()));
}
public String getHomePageURL() {
return getMetaData(META_DATA_HOME_PAGE);
}
/* Getters end */
/* Setters begin */
public void setPersonalID(String personalId) {
setColumn(getColumnNamePersonalID(), personalId);
}
public void setFirstName(String fName) {
// if(!com.idega.core.accesscontrol.business.AccessControl.isValidUsersFirstName(fName)){
// fName = "Invalid firstname";
// }
// if(com.idega.core.accesscontrol.business.AccessControl.isValidUsersFirstName(this.getFirstName())){ // if not Administrator
if( fName == null ){
this.removeFromColumn(getColumnNameFirstName());
}
else{
String temp = TextSoap.findAndCut(fName," ");
if( temp.equals("")){
this.removeFromColumn(getColumnNameFirstName());
}
else {
setColumn(getColumnNameFirstName(), fName);
}
}
// }
}
public void setMiddleName(String mName) {
if( mName == null ){
this.removeFromColumn(getColumnNameMiddleName());
}
else{
String temp = TextSoap.findAndCut(mName," ");
if( temp.equals("")){
this.removeFromColumn(getColumnNameMiddleName());
}
else {
setColumn(getColumnNameMiddleName(), mName);
}
}
}
public void setLastName(String lName) {
if( lName == null ){
this.removeFromColumn(getColumnNameLastName());
}
else{
String temp = TextSoap.findAndCut(lName," ");
if( temp.equals("")){
this.removeFromColumn(getColumnNameLastName());
}
else {
setColumn(getColumnNameLastName(), lName);
}
}
}
/**
* Divides the name string into first(1),middle(1-*) and lastname(1). <br>
* and uses setFirstName(),setMiddleName() and setLastName().
*/
public void setFullName(String fullName) {
if ((fullName != null) && (fullName.length() > 0)) {
Name name = new Name(fullName).capitalize();
setFirstName(name.getFirstName());
setMiddleName(name.getMiddleName());
setLastName(name.getLastName());
/*
StringTokenizer token = new StringTokenizer(name);
int countWithoutFirstAndLast = token.countTokens() - 2;
if (countWithoutFirstAndLast > -2) {
setFirstName(((String) token.nextElement()));
}
if (countWithoutFirstAndLast >= 1) {
StringBuffer middleName = new StringBuffer();
for (int i = 0; i < countWithoutFirstAndLast; i++) {
middleName.append((String) token.nextElement());
if (i != (countWithoutFirstAndLast - 1))
middleName.append(" ");
}
setMiddleName(middleName.toString());
}
else { //set middle name == null
this.removeFromColumn(this.getColumnNameMiddleName());
}
if (countWithoutFirstAndLast >= 0) {
setLastName((String) token.nextElement());
}
else { //remove last name
this.removeFromColumn(this.getColumnNameLastName());
}
*/
}
}
public void setDisplayName(String dName) {
setColumn(getColumnNameDisplayName(), dName);
}
public void setDescription(String description) {
setColumn(getColumnNameDescription(), description);
}
public void setDateOfBirth(Date dateOfBirth) {
setColumn(getColumnNameDateOfBirth(), dateOfBirth);
}
public void setGender(Integer gender) {
setColumn(getColumnNameGender(), gender);
}
public void setGender(int gender) {
setColumn(getColumnNameGender(), gender);
}
public void setSystemImageID(Integer fileID) {
setColumn(getColumnNameSystemImage(), fileID);
}
public void setSystemImageID(int fileID) {
setColumn(getColumnNameSystemImage(), fileID);
}
public void setPrimaryGroupID(int icGroupId) {
setColumn(_COLUMNNAME_PRIMARY_GROUP_ID, icGroupId);
}
// public void setFamilyID(String familyId) {
// setColumn(getColumnNameFamilyID(), familyId);
// }
public void setPrimaryGroup(Group group)
{
try{
int groupID = ((Integer)group.getPrimaryKey()).intValue();
setPrimaryGroupID(groupID);
}
catch(Exception e){
e.printStackTrace();
}
}
public void setPrimaryGroupID(Integer icGroupId) {
setColumn(_COLUMNNAME_PRIMARY_GROUP_ID, icGroupId);
}
public void setHomePageID(int pageID) {
try{
Group group = getGeneralGroup();
group.setHomePageID(pageID);
group.store();
}
catch(Exception e){
throw new IDORuntimeException(e,this);
}
}
public void setHomePageID(Integer pageID) {
try{
Group group = getGeneralGroup();
group.setHomePageID(pageID);
group.store();
}
catch(Exception e){
throw new IDORuntimeException(e,this);
}
}
public void setHomePage(ICPage page) {
try{
Group group = getGeneralGroup();
group.setHomePage(page);
group.store();
}
catch(Exception e){
throw new IDORuntimeException(e,this);
}
}
public void setHomeFolderID(int fileID) {
try{
Group group = getGeneralGroup();
group.setHomeFolderID(fileID);
group.store();
}
catch(Exception e){
throw new IDORuntimeException(e,this);
}
}
public void setHomeFolderID(Integer fileID) {
try{
Group group = getGeneralGroup();
group.setHomeFolderID(fileID);
group.store();
}
catch(Exception e){
throw new IDORuntimeException(e,this);
}
}
public void setHomeFolder(ICFile file) {
try{
Group group = getGeneralGroup();
group.setHomeFolder(file);
group.store();
}
catch(Exception e){
throw new IDORuntimeException(e,this);
}
}
public void setCreated(Timestamp stamp) {
try{
Group group = getGeneralGroup();
group.setCreated(stamp);
group.store();
}
catch(Exception e){
throw new IDORuntimeException(e,this);
}
}
public void setDeleted(boolean isDeleted) {
if(!isDeleted){
removeFromColumn(getColumnNameDeletedBy());
removeFromColumn(getColumnNameDeletedWhen());
}else{
removeFromColumn(_COLUMNNAME_PRIMARY_GROUP_ID);
}
setColumn(getColumnNameDeleted(), isDeleted);
}
public void setDeletedBy(int userId) {
setColumn(getColumnNameDeletedBy(), userId);
}
public void setDeletedWhen(Timestamp timestamp) {
setColumn(getColumnNameDeletedWhen(), timestamp);
}
/**
* Do not use these with the UserBMPBean. Only here because UserBMPBean implements Group
*/
public void setAliasID(int id) {
}
/**
* Do not use these with the UserBMPBean. Only here because UserBMPBean implements Group
*/
public void setAlias(Group alias) {
}
/**
* Do not use these with the UserBMPBean. Only here because UserBMPBean implements Group
*/
public int getAliasID() {
return -1;
}
/**
* Do not use these with the UserBMPBean. Only here because UserBMPBean implements Group
*/
public Group getAlias() {
return null;
}
public void setHomePageURL(String homePageURL) {
setMetaData(META_DATA_HOME_PAGE, homePageURL);
}
/* Setters end */
/* Business methods begin */
public void removeAllAddresses() throws IDORemoveRelationshipException {
super.idoRemoveFrom(Address.class);
}
public void removeAddress(Address address) throws IDORemoveRelationshipException {
super.idoRemoveFrom(address);
}
public void removeAllEmails() throws IDORemoveRelationshipException {
super.idoRemoveFrom(Email.class);
}
public void removeEmail(Email email) throws IDORemoveRelationshipException {
super.idoRemoveFrom(email);
}
public void removeAllPhones() throws IDORemoveRelationshipException {
super.idoRemoveFrom(Phone.class);
}
public void removePhone(Phone phone) throws IDORemoveRelationshipException {
super.idoRemoveFrom(phone);
}
public Collection getAddresses() {
try {
return super.idoGetRelatedEntities(Address.class);
}
catch (Exception e) {
e.printStackTrace();
throw new RuntimeException("Error in getAddresses() : " + e.getMessage());
}
}
public Collection getEmails() {
try {
return super.idoGetRelatedEntities(Email.class);
}
catch (Exception e) {
e.printStackTrace();
throw new RuntimeException("Error in getEmails() : " + e.getMessage());
}
}
public Collection getPhones() {
try {
return super.idoGetRelatedEntities(Phone.class);
}
catch (Exception e) {
e.printStackTrace();
throw new RuntimeException("Error in getPhones() : " + e.getMessage());
}
}
public Collection getPhones(String phoneTypeID) {
try {
return super.idoGetRelatedEntities(Phone.class, PhoneBMPBean.getColumnNamePhoneTypeId(), phoneTypeID);
}
catch (Exception e) {
e.printStackTrace();
throw new RuntimeException("Error in getPhones() : " + e.getMessage());
}
}
public void addAddress(Address address) throws IDOAddRelationshipException {
this.idoAddTo(address);
}
public void addEmail(Email email) throws IDOAddRelationshipException {
this.idoAddTo(email);
}
public void addPhone(Phone phone) throws IDOAddRelationshipException {
this.idoAddTo(phone);
}
/**
*
*/
public void delete() throws SQLException {
throw new SQLException("Use delete(int userId) instead");
}
/**
* Delete this instance, store timestamp and theid of the user that causes the
* the erasure
*
* @param userId id of the user that is responsible for the deletion
*/
public void delete(int userId) throws SQLException {
setDeleted(true);
setDeletedWhen(IWTimestamp.getTimestampRightNow());
setDeletedBy(userId);
super.update();
}
/* Business methods end */
/* Finders begin */
/**
* Returns the Users that is the instance of the User representing the Groups in the Collection groupList
* @param groupList a Group of type "UserRepresentative"
* @return Collection of primary keys of the Users representing the UserGroups
* @throws FinderException If an error occurs
*/
public Collection ejbFindUsersForUserRepresentativeGroups(Collection groupList) throws FinderException {
// System.out.println("[UserBMPBean]: groupList = "+groupList);
String sGroupList = IDOUtil.getInstance().convertListToCommaseparatedString(groupList);
// System.out.println("[UserBMPBean]: sGroupList = "+sGroupList);
// System.out.println("[UserBMPBean]: "+"select * from "+getEntityName()+" where "+_COLUMNNAME_USER_GROUP_ID+" in ("+sGroupList+")");
SelectQuery query = idoSelectQuery();
if(groupList!=null && !groupList.isEmpty()){
InCriteria inCriteria = new InCriteria(idoQueryTable(),getIDColumnName(),sGroupList);
query.addCriteria(new AND(inCriteria,getNotDeletedCriteria()));
addOrderByName(query,false,true);
int loadBalancePrefetchSize = 1000;
return this.idoFindPKsByQueryUsingLoadBalance(query, loadBalancePrefetchSize);
}
else{
System.err.println("UserBMPBean: ejbFindUsersForUserRepresentativeGroups : groupList is NULL or empty!!");
return null;
}
// return this.idoFindIDsBySQL("select * from "+getEntityName()+" where "+this.getIDColumnName()+" in ("+sGroupList+")");
}
public SelectQuery getSelectQueryConstraints(){
SelectQuery query = idoSelectQuery();
query.addCriteria(getNotDeletedCriteria());
addOrderByName(query,false,true);
return query;
}
public void addOrderByName(SelectQuery query, boolean lastnameFirst, boolean ascending){
query.addOrder(idoQueryTable(),((lastnameFirst)?getColumnNameLastName():getColumnNameFirstName()),ascending);
query.addOrder(idoQueryTable(),((!lastnameFirst)?getColumnNameLastName():getColumnNameFirstName()),ascending);
query.addOrder(idoQueryTable(),getColumnNameMiddleName(),ascending);
}
/**
* Returns the User that is the instance of the User representing the group userRepGroup
* @param userRepGroup a Group of type "UserRepresentative"
* @return Integer the primary key of the User representing the UserGroup
* @throws FinderException If an error occurs
*/
public Integer ejbFindUserForUserRepresentativeGroup(Group userRepGroup) throws FinderException {
//try{
String sGroupPK = userRepGroup.getPrimaryKey().toString();
IDOQuery query = idoQueryGetSelect();
query
.appendWhereEqualsQuoted(this.getIDColumnName(),sGroupPK)
.appendAnd();
appendIsNotDeleted(query);
return (Integer)this.idoFindOnePKByQuery(query);
//}
//catch(RemoteException rme){
// throw new IDOFinderException(rme);
//}
}
/** Gets all users that are not marked as deleted
*
* @return Collection
* @throws FinderException
*/
public Collection ejbFindAllUsers() throws FinderException {
// use where not because DELETED = NULL means also not deleted
// select * from ic_user where deleted != 'Y'
SelectQuery query = idoSelectQuery();
MatchCriteria c1 = new MatchCriteria(idoQueryTable(),getColumnNameDeleted(),MatchCriteria.EQUALS,GenericEntity.COLUMN_VALUE_FALSE,true);
MatchCriteria c2 = new MatchCriteria(new Column(idoQueryTable(),getColumnNameDeleted()), false);
query.addCriteria(new OR(c1, c2));
return idoFindPKsByQueryUsingLoadBalance(query,10000);
}
/** Gets newest users that are not marked as deleted
*
* @return Collection
* @throws FinderException
*/
public Collection ejbFindNewestUsers(int returningNumberOfRecords, int startingRecord) throws FinderException {
// use where not because DELETED = NULL means also not deleted
// select * from ic_user where deleted != 'Y'
IDOQuery query = idoQueryGetSelect();
query.appendWhere();
appendIsNotDeleted(query);
query.appendOrderByDescending(getIDColumnName());
return idoFindPKsBySQL(query.toString(), returningNumberOfRecords, startingRecord);
}
public Collection ejbFindUsersByMetaData(String key, String value) throws FinderException {
return super.idoFindPKsByMetaData(key,value);
}
/** Gets all users that are not marked as deleted and
* that are members of the specified group
*
* @param group
* @return Collection
* @throws FinderException
*/
public Collection ejbFindUsersInPrimaryGroup(Group group) throws FinderException {
IDOQuery query = idoQueryGetSelect();
query
.appendWhere()
.appendEqualsQuoted(_COLUMNNAME_PRIMARY_GROUP_ID, group.getPrimaryKey().toString())
.appendAnd();
appendIsNotDeleted(query);
return idoFindIDsBySQL(query.toString());
}
/** Gets all users that are not marked as deleted ordered by first name.
* This query uses a LoadTracker if necessary.
*
* @return Collection
* @throws FinderException
*/
public Collection ejbFindAllUsersOrderedByFirstName() throws FinderException {
SelectQuery query = idoSelectQuery();
query.addCriteria(getNotDeletedCriteria());
addOrderByName(query,false,true);
int loadBalancePrefetchSize = 1000;
return super.idoFindPKsByQueryUsingLoadBalance(query,loadBalancePrefetchSize);
}
public Object ejbFindByDateOfBirthAndName(Date dateOfBirth, String fullName) throws FinderException {
Name name = new Name(fullName).capitalize();
SelectQuery query = idoSelectQuery();
query.addCriteria(new MatchCriteria(idoQueryTable(), FIELD_DATE_OF_BIRTH, MatchCriteria.EQUALS, dateOfBirth));
if (name.getFirstName() != null && name.getFirstName().length() > 0) {
query.addCriteria(new MatchCriteria(idoQueryTable(), FIELD_FIRST_NAME, MatchCriteria.EQUALS, name.getFirstName()));
}
if (name.getMiddleName() != null && name.getMiddleName().length() > 0) {
query.addCriteria(new MatchCriteria(idoQueryTable(), FIELD_MIDDLE_NAME, MatchCriteria.EQUALS, name.getMiddleName()));
}
if (name.getLastName() != null && name.getLastName().length() > 0) {
query.addCriteria(new MatchCriteria(idoQueryTable(), FIELD_LAST_NAME, MatchCriteria.EQUALS, name.getLastName()));
}
return idoFindOnePKByQuery(query);
}
public void removeGroup(int p0, boolean p1) throws javax.ejb.EJBException {
/**@todo: Implement this com.idega.user.data.Group method*/
throw new java.lang.UnsupportedOperationException("Method removeGroup() not supported.");
}
public void removeUser(User p0) {
/**@todo: Implement this com.idega.user.data.Group method*/
throw new java.lang.UnsupportedOperationException("Method removeUser() not supported.");
}
public void setGroupType(String p0){
/**@todo: Implement this com.idega.user.data.Group method*/
//throw new java.lang.UnsupportedOperationException("Method setGroupType() not yet implemented.");
}
public String getGroupTypeValue() {
return USER_GROUP_TYPE;
/**@todo: Implement this com.idega.user.data.Group method*/
//throw new java.lang.UnsupportedOperationException("Method getGroupTypeValue() not yet implemented.");
}
public void setExtraInfo(String p0) {
/**@todo: Implement this com.idega.user.data.Group method*/
throw new java.lang.UnsupportedOperationException("Method setExtraInfo() not yet implemented.");
}
public void removeGroup() throws javax.ejb.EJBException {
throw new java.lang.UnsupportedOperationException("Method removeGroup() not supported.");
}
/* public boolean equals(Group p0) throws java.rmi.RemoteException {
//throw new java.lang.UnsupportedOperationException("Method equals() not yet implemented.");
//return equals((Object)this);
return this.getGeneralGroup().equals(p0);
}*/
public void addGroup(Group p0,java.sql.Timestamp p1) throws EJBException{
throw new java.lang.UnsupportedOperationException("Method addGroup() not supported.");
}
public void addGroup(Group p0) throws EJBException{
throw new java.lang.UnsupportedOperationException("Method addGroup() not supported.");
}
public void addGroup(User p0) throws EJBException{
throw new java.lang.UnsupportedOperationException("Method addGroup() not supported.");
}
public List getChildGroups(String[] p0, boolean p1) throws javax.ejb.EJBException {
throw new java.lang.UnsupportedOperationException("Method getGroupsContained() not supported");
}
public List getChildGroupsIDs(String[] p0, boolean p1) throws javax.ejb.EJBException {
throw new java.lang.UnsupportedOperationException("Method getGroupsContained() not supported");
}
public List getListOfAllGroupsContaining(int p0) throws javax.ejb.EJBException {
throw new java.lang.UnsupportedOperationException("Method getListOfAllGroupsContaining() not yet implemented.");
}
public void addGroup(int p0) throws javax.ejb.EJBException {
throw new java.lang.UnsupportedOperationException("Method addGroup() not supported.");
}
public List getChildGroups() throws javax.ejb.EJBException {
throw new java.lang.UnsupportedOperationException("Method getListOfAllGroupsContained() not supported");
}
public Collection getAllGroupsContainingUser(User p0) throws EJBException{
throw new java.lang.UnsupportedOperationException("Method getAllGroupsContainingUser() not supported.");
}
public void removeGroup(Group p0) throws EJBException {
throw new java.lang.UnsupportedOperationException("Method removeGroup() not yet implemented.");
}
public String getGroupType() {
//throw new java.lang.UnsupportedOperationException("Method getGroupType() not yet implemented.");
return "user_group_representative";
}
/**
* Gets a list of all the groups that this "group" is directly member of.
* @see com.idega.user.data.Group#getListOfAllGroupsContainingThis()
*/
public List getParentGroups() throws EJBException {
return getParentGroups(null, null);
}
/**
* Optimized version of getParentGroups() by Sigtryggur 22.06.2004
* Database access is minimized by passing a Map of cached groupParents and Map of cached groups to the method
*/
public List getParentGroups(Map cachedParents, Map cachedGroups) {
/**@todo: Implement this com.idega.user.data.Group method*/
//throw new java.lang.UnsupportedOperationException("Method getListOfAllGroupsContainingThis() not yet implemented.");
try{
List l = getGeneralGroup().getParentGroups(cachedParents, cachedGroups);
//The next 4 lines perform the same actions as have already been performed in GroupBMPBean.getParentGroups() and are therefore unnecessary.
//Group primaryGroup = this.getPrimaryGroup();
//if(primaryGroup!=null && !l.contains(primaryGroup)){
// l.add(primaryGroup);
//}
return l;
}
catch(Exception e){
throw new IDORuntimeException(e,this);
}
}
public String getExtraInfo() {
/**@todo: Implement this com.idega.user.data.Group method*/
//throw new java.lang.UnsupportedOperationException("Method getExtraInfo() not yet implemented.");
try{
return this.getGeneralGroup().getExtraInfo();
}
catch(Exception e){
throw new IDORuntimeException(e,this);
}
}
public void addUser(User p0){
/**@todo: Implement this com.idega.user.data.Group method*/
throw new java.lang.UnsupportedOperationException("Method addUser() not yet implemented.");
}
public boolean isUser(){
return true;
}
public boolean isAlias() {
return false;
}
public Iterator getChildrenIterator() {
return ListUtil.getEmptyList().iterator();
}
public boolean getAllowsChildren() {
return false;
}
public ICTreeNode getChildAtIndex(int childIndex) {
/**@todo: Implement this com.idega.core.ICTreeNode method*/
throw new java.lang.UnsupportedOperationException("Method getChildAtIndex() not supported.");
}
public int getChildCount() {
return 0;
}
public int getIndex(ICTreeNode node) {
throw new java.lang.UnsupportedOperationException("Method getIndex() not supported.");
}
public ICTreeNode getParentNode() {
/**@todo: Implement this com.idega.core.ICTreeNode method*/
throw new java.lang.UnsupportedOperationException("Method getParentNode() not yet implemented.");
}
public boolean isLeaf() {
return true;
}
public String getNodeName() {
return this.getName();
}
public String getNodeName(Locale locale) {
return this.getNodeName();
}
public int getNodeID() {
return this.getID();
}
public Integer ejbFindUserByUniqueId(String uniqueIdString) throws FinderException {
return (Integer) idoFindOnePKByUniqueId(uniqueIdString);
}
public Integer ejbFindUserFromEmail(String emailAddress) throws FinderException {
StringBuffer sql = new StringBuffer("select iu.* ");
sql.append(" from ").append(this.getTableName()).append(" iu ,");
sql.append(EmailBMPBean.SQL_TABLE_NAME).append(" ie ,");
sql.append(SQL_RELATION_EMAIL).append(" iue ");
sql.append(" where ie.").append(EmailBMPBean.SQL_TABLE_NAME).append("_ID = ");
sql.append("iue.").append(EmailBMPBean.SQL_TABLE_NAME).append("_ID and ");
sql.append("iue.").append(getIDColumnName()).append(" = iu.").append(getIDColumnName());
sql.append(" and ie.").append(EmailBMPBean.SQL_COLUMN_EMAIL).append(" = '");
sql.append(emailAddress).append("'");
// append is not deleted
sql
.append(" and ");//iu.");
appendIsNotDeleted(sql);
return (Integer) super.idoFindOnePKBySQL(sql.toString());
}
public Collection ejbFindByNames(String first, String middle, String last) throws FinderException {
SelectQuery query = idoSelectQuery();
if (first != null || middle != null || last != null) {
if (first != null && !"".equals(first)) {
query.addCriteria(new MatchCriteria(idoQueryTable(), getColumnNameFirstName(),MatchCriteria.LIKE,"%"+first+"%",true));
}
if (middle != null && !"".equals(middle)) {
query.addCriteria(new MatchCriteria(idoQueryTable(), getColumnNameFirstName(),MatchCriteria.LIKE,"%"+middle+"%",true));
}
if (last != null && !"".equals(last)) {
query.addCriteria(new MatchCriteria(idoQueryTable(), getColumnNameFirstName(),MatchCriteria.LIKE,"%"+last+"%",true));
}
// append is deleted filter
query.addCriteria(getNotDeletedCriteria());
return super.idoFindPKsByQuery(query);
}
throw new FinderException("No legal names provided");
}
public Integer ejbFindByPersonalID(String personalId) throws FinderException {
Table table = new Table(this);
SelectQuery query = new SelectQuery(table);
query.addColumn(new Column(getIDColumnName()));
query.addCriteria(new MatchCriteria(table,getColumnNamePersonalID(),MatchCriteria.EQUALS,personalId));
query.addCriteria(getNotDeletedCriteria());
return (Integer)idoFindOnePKByQuery(query);
}
public Integer ejbFindByFirstSixLettersOfPersonalIDAndFirstNameAndLastName(String personalId, String first_name, String last_name) throws FinderException {
if (personalId.length() < 6) {
throw new FinderException("PersonalID shorter than 6 letters");
}
IDOQuery query = idoQueryGetSelect();
query
.appendWhere(getColumnNamePersonalID())
.appendLike()
.appendWithinSingleQuotes(personalId.substring(0,6)+"%")
.appendAnd().append(getColumnNameFirstName())
.appendEqualSign()
.appendWithinSingleQuotes(first_name)
.appendAnd().append(getColumnNameLastName())
.appendEqualSign()
.appendWithinSingleQuotes(last_name)
.appendAnd();
appendIsNotDeleted(query);
Collection users = idoFindPKsByQuery(query);
if (users.size() > 1) {
throw new FinderException("More than one user matched the criteria. Couldn't determine which user to choose");
}
else if (!users.isEmpty()) {
return (Integer) users.iterator().next();
}
else {
throw new FinderException("No user found");
}
}
/**
* Returns the User that is the instance of the User representing the group userRepGroup
* @param userRepGroupID a primary key of a Group of type "UserRepresentative"
* @return Integer the primary key of the User representing the UserGroup
* @throws FinderException If an error occurs or no user is found for the Group
*/
public Integer ejbFindUserForUserGroup(int userRepGroupID) throws FinderException {
/** @todo Remove backwards compatability */
Integer pk;
//try {
IDOQuery query = idoQuery();
query.appendSelect().append(getIDColumnName()).appendFrom().append(getEntityName())
.appendWhereEquals(_COLUMNNAME_USER_GROUP_ID,userRepGroupID)
.appendAnd();
appendIsNotDeleted(query);
pk = (Integer)this.idoFindOnePKByQuery(query);
//pk = (Integer) super.idoFindOnePKBySQL("select * from " + getEntityName() + " where " + _COLUMNNAME_USER_GROUP_ID + "='" + userRepGroupID + "'");
//}
//catch (FinderException ex) {
//pk = new Integer(userRepGroupID);
//}
//catch (Exception ex) {
//throw new IDOFinderException(ex);
//}
return pk;
}
/**
* Returns the User that is the instance of the User representing the group userRepGroup
* @param userRepGroup a Group of type "UserRepresentative"
* @return Integer the primary key of the User representing the UserGroup
* @throws FinderException If an error occurs or no user is found for the Group
*/
public Integer ejbFindUserForUserGroup(Group userRepGroup) throws FinderException {
//try{
try{
int groupID = ((Integer) userRepGroup.getPrimaryKey()).intValue();
return this.ejbFindUserForUserGroup(groupID);
}
catch(FinderException e){
if(userRepGroup.isUser()){
//return this.getUserHome().findByPrimaryKey(userGroup.getPrimaryKey());
return (Integer)userRepGroup.getPrimaryKey();
}
else{
throw new IDOFinderException("UserBMPBean.ejbFindUserForUserGroup() : No User found for Group with id:"+userRepGroup.toString());
}
}
//}
//catch(RemoteException rme){
// throw new IDOFinderException(rme);
//}
}
/* Finders end */
/**
* @deprecated
*/
public Group getGroup() {
return this;
}
/**
* @deprecated
*/
public int getGroupID() {
return this.getID();
}
/**
* @deprecated
*/
public Group getUserGroup() {
return getGeneralGroup();
}
protected Group getGeneralGroup() {
if (this._group == null) {
try {
Integer groupID;
Integer userGroupID = this.getIntegerColumnValue(_COLUMNNAME_USER_GROUP_ID);
if (userGroupID == null) {
groupID = (Integer) this.getPrimaryKey();
}
else {
groupID = userGroupID;
}
this._group = getGroupHome().findByPrimaryKey(groupID);
//System.out.println("Getting userGroup "+_group.getName()+",id="+_group.getPrimaryKey()+" for user: "+this.getName()+",id="+this.getID());
}
catch (FinderException fe) {
throw new EJBException(fe.getMessage());
}
}
return this._group;
}
public void setGroupID(int icGroupId) {
this.setID(icGroupId);
}
public Collection ejbFindUsersBySearchCondition(String condition, boolean orderLastFirst) throws FinderException {
return ejbFindUsersBySearchCondition(condition, null, orderLastFirst);
}
public Collection ejbFindUsersBySearchCondition(String condition, boolean orderLastFirst, int endAge) throws FinderException {
return ejbFindUsersBySearchCondition(condition, null, orderLastFirst, 0, endAge);
}
public Collection ejbFindUsersBySearchCondition(String condition, boolean orderLastFirst, int startAge, int endAge) throws FinderException {
return ejbFindUsersBySearchCondition(condition, null, orderLastFirst, startAge, endAge);
}
/**
*
* @param condition
* @param validUserPks if NULL, the function ignores it, else uses it.
* @return Collection
* @throws FinderException
*/
public Collection ejbFindUsersBySearchCondition(String condition, String[] userIds, boolean orderLastFirst) throws FinderException {
return ejbFindUsersBySearchCondition(condition, userIds, orderLastFirst, -1, -1);
}
public Collection ejbFindUsersBySearchCondition(String condition, String[] userIds, boolean orderLastFirst, int startAge, int endAge) throws FinderException {
//strange stuff...examine
if (userIds != null && userIds.length == 0) {
return ejbFindUsersBySearchCondition(condition, new String[]{"-1"}, orderLastFirst);
}else if (condition == null || condition.equals("")) {
if (userIds == null) {
return ejbFindAllUsers();
}else {
return ejbFindUsers(userIds);
}
}else {
return ejbFindUsersByConditions(condition,condition,null,null,-1,-1,startAge,endAge,null,userIds,false, orderLastFirst);
}
}
public Collection ejbFindUsersByConditions(String userName, String personalId, String streetName, String groupName, int gender, int statusId, int startAge, int endAge, String[] allowedGroups, String[] allowedUsers, boolean useAnd, boolean orderLastFirst) throws FinderException {
if(userName!=null && userName.indexOf(" ")>-1){
Name name = new Name(userName);
useAnd = true;
if(userName.equals(personalId)){
personalId = null;
}
return ejbFindUsersByConditions(name.getFirstName(), name.getMiddleName(), name.getLastName(), personalId, streetName, groupName, gender, statusId, startAge, endAge, allowedGroups, allowedUsers, useAnd, orderLastFirst);
}
else {
return ejbFindUsersByConditions(userName, userName, userName, personalId, streetName, groupName, gender, statusId, startAge, endAge, allowedGroups, allowedUsers, useAnd, orderLastFirst);
}
}
public Collection ejbFindUsersByConditions(String firstName, String middleName, String lastName, String personalId, String streetName, String groupName, int gender, int statusId, int startAge, int endAge, String[] allowedGroups, String[] allowedUsers, boolean useAnd, boolean orderLastFirst) throws FinderException {
SelectQuery query = idoSelectQuery();
Criteria theCriteria = null;
//name
if( (firstName!=null && !"".equals(firstName)) || (middleName!=null && !"".equals(middleName)) || (lastName!=null && !"".equals(lastName)) ){
theCriteria = getUserNameSearchCriteria(firstName,middleName,lastName,useAnd);
}
if( (startAge >= 0) && (endAge >=startAge) ){
Criteria ageCriteria = getUserDateOfBirthCriteria(startAge, endAge);
if(theCriteria==null) {
theCriteria = ageCriteria;
}
else {
theCriteria = new AND(theCriteria,ageCriteria);
}
}
//personalId
if(personalId!=null && !personalId.equals("") ){
Criteria personalIdCriteria = new MatchCriteria(idoQueryTable(),getColumnNamePersonalID(),MatchCriteria.LIKE,"%"+personalId+"%");
if(theCriteria==null){
theCriteria = personalIdCriteria;
} else {
if(useAnd) {
theCriteria = new AND(theCriteria,personalIdCriteria);
}
else {
theCriteria = new OR(theCriteria,personalIdCriteria);
}
}
}
//address
if(streetName!=null && !streetName.equals("") ){
try {
Criteria streetNameCriteria = new InCriteria(idoQueryTable(),getIDColumnName(),getUserAddressSelectQuery(streetName));
if(theCriteria==null){
theCriteria = streetNameCriteria;
} else {
if(useAnd) {
theCriteria = new AND(theCriteria,streetNameCriteria);
}
else {
theCriteria = new OR(theCriteria,streetNameCriteria);
}
}
}
catch (RemoteException re) {
re.printStackTrace();
}
}
//gender
if(gender>0){
Criteria genderCriteria = new MatchCriteria(idoQueryTable(),getColumnNameGender(),MatchCriteria.EQUALS,gender);
if(theCriteria==null){
theCriteria = genderCriteria;
} else {
if(useAnd) {
theCriteria = new AND(theCriteria,genderCriteria);
}
else {
theCriteria = new OR(theCriteria,genderCriteria);
}
}
}
//status
//TODO Eiki add sql for only allowed groups and create and use method getUserStatusCriteria
if( statusId>0 ){
Criteria StatusIdCriteria = new InCriteria(idoQueryTable(),getIDColumnName(),getUserStatusSearchString(statusId,IWTimestamp.RightNow()));
if(theCriteria==null){
theCriteria = StatusIdCriteria;
} else {
if(useAnd) {
theCriteria = new AND(theCriteria,StatusIdCriteria);
}
else {
theCriteria = new OR(theCriteria,StatusIdCriteria);
}
}
}
//group search
//TODO Eiki filter out only allowed and create and use method getUserInAllowedGroupsCriteria
if(groupName!=null || (allowedGroups!=null && allowedGroups.length>0 )){
Criteria groupNameCriteria = new InCriteria(idoQueryTable(),getIDColumnName(),getUserInAllowedGroupsSearchString(groupName,allowedGroups));
if(theCriteria==null){
theCriteria = groupNameCriteria;
} else {
if(useAnd) {
theCriteria = new AND(theCriteria,groupNameCriteria);
}
else {
theCriteria = new OR(theCriteria,groupNameCriteria);
}
}
}
//filter by users
if ( allowedUsers != null && allowedUsers.length>0 ) {
Criteria allowedUsersCriteria = new InCriteria(idoQueryTable(),getIDColumnName(),IDOUtil.getInstance().convertArrayToCommaseparatedString(allowedUsers));
if(theCriteria==null){
theCriteria = allowedUsersCriteria;
} else {
theCriteria = new AND(theCriteria,allowedUsersCriteria);
}
}
if(theCriteria==null) {
theCriteria = getNotDeletedCriteria();
}
else {
theCriteria = new AND(theCriteria,getNotDeletedCriteria());
}
query.addCriteria(theCriteria);
addOrderByName(query,orderLastFirst,true);
//return this.idoFindIDsBySQL(query.toString());
//to benefit from the IDOEntityList features
int loadBalancePrefetchSize = 100;
if(this.isDebugActive()){
System.out.println("[ejbFindUsersByConditions-sql]: "+query.toString());
}
return idoFindPKsByQueryUsingLoadBalance(query, loadBalancePrefetchSize);
}
// public Collection ejbFindUsersByConditions(String firstName, String middleName, String lastName, String personalId, String streetName, String groupName, int gender, int statusId, int startAge, int endAge, String[] allowedGroups, String[] allowedUsers, boolean useAnd, boolean orderLastFirst) throws FinderException {
// IDOQuery query = idoQuery();
// boolean firstOperatorAdded = false;
//
// final String operator = useAnd ? " AND " : " OR ";
//
// query.appendSelectAllFrom(this).appendWhere();
//
// query.append(" ( ");
// //name
// if( (firstName!=null && !"".equals(firstName)) || (middleName!=null && !"".equals(middleName)) || (lastName!=null && !"".equals(lastName)) ){
// query.append(" ( ")
// .append(getUserNameSearchString(firstName,middleName,lastName,operator))
// .append(" ) ");
//
// firstOperatorAdded = true;
// }
//
// if( (startAge >= 0) && (endAge >=startAge) ){
// if(firstOperatorAdded ) query.appendAnd();
//
// query.append(" ( ")
// .append(getUserDateOfBirthSearchString(startAge, endAge))
// .append(" ) ");
//
// firstOperatorAdded = true;
// }
//
// //not deleted
// if(firstOperatorAdded) query.appendAnd();
// appendIsNotDeleted(query);
//
//
// query.append(" ) ");
//
// //personalId
// if(personalId!=null && !personalId.equals("") ){
// query.append(operator)
// .append(" ( ")
// .append(getColumnNamePersonalID()).append(" like '%").append(personalId).append("%' ")
// .append(" ) ");
// }
//
// //address
// if(streetName!=null && !streetName.equals("") ){
// query.append(operator)
// .append(getIDColumnName()).appendIn(getUserAddressSearchString(streetName));
// }
//
// //gender
// if(gender>0){
// query.appendAnd()
// .append(" ( ")
// .append(getColumnNameGender()).appendEqualSign().append(gender)
// .append(" ) ");
// }
//
// //status
// //TODO Eiki add sql for only allowed groups
// if( statusId>0 ){
// query.append(operator)
// .append(getIDColumnName()).appendIn(getUserStatusSearchString(statusId,IWTimestamp.RightNow()));
// }
//
// //group search
// //TODO Eiki filter out only allowed
// if(groupName!=null || (allowedGroups!=null && allowedGroups.length>0 )){
// query.append(operator)
// .append(getIDColumnName()).appendIn(getUserInAllowedGroupsSearchString(groupName,allowedGroups));
// }
//
// //filter by users
// if ( allowedUsers != null && allowedUsers.length>0 ) {
// query.appendAnd().append(getIDColumnName()).appendIn(IDOUtil.getInstance().convertArrayToCommaseparatedString(allowedUsers));
// }
//
// if (orderLastFirst)
// query.appendOrderBy(this.getColumnNameLastName()+","+this.getColumnNameFirstName()+","+this.getColumnNameMiddleName());
// else
// query.appendOrderBy(this.getColumnNameFirstName()+","+this.getColumnNameLastName()+","+this.getColumnNameMiddleName());
//
//
// //return this.idoFindIDsBySQL(query.toString());
// //to benefit from the IDOEntityList features
//
// int loadBalancePrefetchSize = 100;
// if(this.isDebugActive()){
// System.out.println("[ejbFindUsersByConditions-sql]: "+query);
// }
// return idoFindPKsByQueryUsingLoadBalance(query, loadBalancePrefetchSize);
//
// }
private Criteria getUserDateOfBirthCriteria(int startAge, int endAge) {
IWTimestamp youngerAgeStamp = IWTimestamp.RightNow();
IWTimestamp olderAgeStamp = IWTimestamp.RightNow();
youngerAgeStamp.addYears(-startAge);
youngerAgeStamp.setMonth(12);
youngerAgeStamp.setDay(31);
olderAgeStamp.addYears(-endAge);
olderAgeStamp.setMonth(1);
olderAgeStamp.setDay(1);
Criteria c1 = new MatchCriteria(idoQueryTable(),getColumnNameDateOfBirth(),MatchCriteria.GREATEREQUAL,olderAgeStamp.getTimestamp());
Criteria c2 = new MatchCriteria(idoQueryTable(),getColumnNameDateOfBirth(),MatchCriteria.LESSEQUAL,youngerAgeStamp.getTimestamp());
return new AND(c1,c2);
}
private String getUserDateOfBirthSearchString(int startAge, int endAge) {
IDOQuery query = idoQuery();
IWTimestamp youngerAgeStamp = IWTimestamp.RightNow();
IWTimestamp olderAgeStamp = IWTimestamp.RightNow();
youngerAgeStamp.addYears(-startAge);
youngerAgeStamp.setMonth(12);
youngerAgeStamp.setDay(31);
olderAgeStamp.addYears(-endAge);
olderAgeStamp.setMonth(1);
olderAgeStamp.setDay(1);
query.append(getColumnNameDateOfBirth()).appendGreaterThanOrEqualsSign().append("'").append(olderAgeStamp.toString()).append("' ");
query.appendAnd()
.append(getColumnNameDateOfBirth()).appendLessThanOrEqualsSign().append("'").append(youngerAgeStamp.toString()).append("' ");
return query.toString();
}
private Criteria getUserNameSearchCriteria(String firstName, String middleName, String lastName, boolean andCriteria) {
int count = 0;
Criteria firstNameCriteria = null;
if(firstName!=null && !firstName.equals("")){
String conditionString = StringHandler.firstCharacterToUpperCase(firstName);
firstNameCriteria = new MatchCriteria(idoQueryTable(),getColumnNameFirstName(),MatchCriteria.LIKE,conditionString+"%");
count++;
}
Criteria middleNameCriteria = null;
if(middleName!=null && !middleName.equals("") ){
String conditionString = StringHandler.firstCharacterToUpperCase(middleName);
middleNameCriteria = new MatchCriteria(idoQueryTable(),getColumnNameMiddleName(),MatchCriteria.LIKE,conditionString+"%");
count++;
}
Criteria lastNameCriteria = null;
if(lastName!=null && !lastName.equals("") ){
String conditionString = StringHandler.firstCharacterToUpperCase(lastName);
lastNameCriteria = new MatchCriteria(idoQueryTable(),getColumnNameLastName(),MatchCriteria.LIKE,conditionString+"%");
count++;
}
switch (count) {
case 1:
if(firstNameCriteria!=null) {
return firstNameCriteria;
}
if(middleNameCriteria!=null) {
return middleNameCriteria;
}
if(lastNameCriteria!=null) {
return lastNameCriteria;
}
case 2:
if(middleNameCriteria==null){
if(andCriteria) {
return new AND(firstNameCriteria,lastNameCriteria);
}
else {
return new OR(firstNameCriteria,lastNameCriteria);
}
}
if(lastNameCriteria==null){
if(andCriteria) {
return new AND(firstNameCriteria,middleNameCriteria);
}
else {
return new OR(firstNameCriteria,middleNameCriteria);
}
}
if(firstNameCriteria==null){
if(andCriteria) {
return new AND(middleNameCriteria,lastNameCriteria);
}
else {
return new OR(middleNameCriteria,lastNameCriteria);
}
}
case 3:
if(andCriteria){
AND cr1 = new AND(firstNameCriteria,middleNameCriteria);
AND cr2 = new AND(cr1,lastNameCriteria);
return cr2;
}else {
OR cr1 = new OR(firstNameCriteria,middleNameCriteria);
OR cr2 = new OR(cr1,lastNameCriteria);
return cr2;
}
default:
return null;
}
}
// /**
// * @param condition
// * @return
// */
// private String getUserNameSearchString(String firstName, String middleName, String lastName, String ANDOrOR) {
// boolean firstNameAdded = false;
// boolean middleNameAdded = false;
//
// StringBuffer sql = new StringBuffer();
// if(firstName!=null && !firstName.equals("")){
// sql.append(getColumnNameFirstName()).append(" like '").append(firstName).append("%' ");
// firstNameAdded = true;
// }
//
// if(middleName!=null && !middleName.equals("") ){
// if(firstNameAdded){
// sql.append(ANDOrOR).append(" ");
// }
//
// sql.append(getColumnNameMiddleName()).append(" like '").append(middleName).append("%' ");
// middleNameAdded = true;
// }
//
// if(lastName!=null && !lastName.equals("") ){
// if(middleNameAdded || firstNameAdded){
// sql.append(ANDOrOR).append(" ");
// }
// sql.append(getColumnNameLastName()).append(" like '").append(lastName).append("%'");
// }
//
//
// return sql.toString();
// }
/**
* @param condition
*/
private String getUserStatusSearchString(int statusId, IWTimestamp currentTime) {
IDOQuery sql = idoQuery();
sql.append("select distinct(ic_user_id) from ic_usergroup_status where status_id = ")
.append(statusId);
sql.appendAnd().append("date_from").appendLessThanOrEqualsSign().append(currentTime)
.appendAnd().appendLeftParenthesis().append("date_to").appendIsNull().appendOr().append("date_to").appendLessThanSign().append(currentTime).appendRightParenthesis();
return sql.toString();
}
private String getUserInAllowedGroupsSearchString(String condition, String[] allowedGroups) {
StringBuffer sql = new StringBuffer();
sql.append("select gr.related_ic_group_id from ic_group g, ic_group_relation gr where gr.ic_group_id = g.ic_group_id and (gr.GROUP_RELATION_STATUS='ST_ACTIVE' or gr.GROUP_RELATION_STATUS='PASS_PEND' ) ");
if(condition!=null){
sql.append(" and g.name like '%")
.append(condition)
.append("%' ");
}
if(allowedGroups!=null && allowedGroups.length>0){
sql.append(" and gr.ic_group_id in ( ")
.append(IDOUtil.getInstance().convertArrayToCommaseparatedString(allowedGroups))
.append(" ) ");
}
//TODO use only allowed groups and g.ic_group_id in (view permission groups)
return sql.toString();
}
private String getUserAddressSearchString(String condition){
StringBuffer sql = new StringBuffer();
sql.append("select ua.ic_user_id from ic_address a,ic_user_address ua where a.ic_address_id=ua.ic_address_id")
.append(" and a.street_name like '%").append(condition.toUpperCase()).append("%' ");
return sql.toString();
}
/**
*
*
* @param streetName
* @return returns SelectQuery that returns the userIDs matching this streetName
*/
private SelectQuery getUserAddressSelectQuery(String streetName) throws IDOLookupException {
Table addressTable = new Table(Address.class);
Table userAddressTable = new Table(SQL_RELATION_ADDRESS);
SelectQuery query = new SelectQuery(userAddressTable);
query.addColumn(userAddressTable,getIDColumnName(),true);
IDOEntityDefinition addressDef = IDOLookup.getEntityDefinitionForClass(Address.class);
IDOEntityField pkAddressField = null;
try {
pkAddressField = addressDef.getPrimaryKeyDefinition().getField();
} catch (IDOCompositePrimaryKeyException e) {
e.printStackTrace();
}
Criteria join = new JoinCriteria(new Column(addressTable,((pkAddressField==null)?"ic_address_id":pkAddressField.getSQLFieldName())),new Column(userAddressTable,((pkAddressField==null)?"ic_address_id":pkAddressField.getSQLFieldName())));
if (streetName.indexOf(" ") == -1) {
IDOEntityField addressField = addressDef.findFieldByUniqueName(Address.FIELD_STREET_NAME);
Criteria match = new MatchCriteria(addressTable,addressField.getSQLFieldName(),MatchCriteria.LIKE,"%"+streetName.toUpperCase()+"%");
query.addCriteria(new AND(join,match));
} else {
String streetNumber = streetName.substring(streetName.lastIndexOf(" ") + 1);
streetName = streetName.substring(0, streetName.lastIndexOf(" "));
IDOEntityField streetNameField = addressDef.findFieldByUniqueName(Address.FIELD_STREET_NAME);
Criteria matchStreetName = new MatchCriteria(addressTable,streetNameField.getSQLFieldName(),MatchCriteria.LIKE,"%"+streetName.toUpperCase()+"%");
query.addCriteria(new AND(join,matchStreetName));
IDOEntityField streetNumberField = addressDef.findFieldByUniqueName(Address.FIELD_STREET_NUMBER);
Criteria matchStreetNumber = new MatchCriteria(addressTable,streetNumberField.getSQLFieldName(),MatchCriteria.LIKE,streetNumber.toUpperCase()+"%");
query.addCriteria(new AND(join,matchStreetNumber));
}
// sql.append("select ua.ic_user_id from ic_address a,ic_user_address ua where a.ic_address_id=ua.ic_address_id").append(" and a.street_name like '%").append(condition.toUpperCase()).append("%' ");
return query;
}
public int ejbHomeGetUserCount() throws IDOException {
// String sqlQuery = "select count(*) from "+ this.getEntityName();
IDOQuery query = idoQueryGetSelectCount();
query.appendWhere();
appendIsNotDeleted(query);
return idoGetNumberOfRecords(query.toString());
}
// public boolean equals(Object obj){
// System.out.println("UserBMPBean: "+this+".equals(Object "+obj+")");
// if(obj instanceof UserBMPBean){
// // try {
// return ((UserBMPBean)obj).getPrimaryKey().equals(this.getPrimaryKey());
// // }
// // catch (RemoteException ex) {
// // throw new EJBException(ex);
// // }
// } else {
// return super.equals(obj);
// }
// }
public Collection ejbFindUsers(String[] userIDs) throws FinderException {
IDOQuery query = idoQuery();
query
.appendSelectAllFrom(this)
.appendWhere()
.append(getColumnNameUserID())
.appendInArray(userIDs)
.appendAnd();
appendIsNotDeleted(query);
return super.idoFindPKsBySQL(query.toString());
}
public Collection ejbFindUsersInQuery(IDOQuery query) throws FinderException {
IDOQuery sqlQuery = idoQuery();
sqlQuery
.appendSelectAllFrom(this)
.appendWhere(getColumnNameUserID())
.appendIn(query)
.appendAnd();
appendIsNotDeleted(sqlQuery);
return super.idoFindPKsByQuery(sqlQuery);
}
/**
* Returns users within a given birth year range
* * @param minYear , the year on the format 'yyyy'
* @param maxYear , the year on the format 'yyyy'
* @return Collection
* @throws FinderException
*/
public Collection ejbFindUsersByYearOfBirth (int minYear, int maxYear) throws FinderException {
final IDOQuery sql = idoQuery ();
IWTimestamp minStamp = new IWTimestamp(1,1,minYear);
IWTimestamp maxStamp = new IWTimestamp(31,12,maxYear);
sql.appendSelectAllFrom(getTableName());
sql.appendWhere(getColumnNameDateOfBirth());
sql.append(" >= ");
sql.appendWithinSingleQuotes(minStamp.toSQLDateString());
sql.appendAnd();
sql.append(getColumnNameDateOfBirth());
sql.append(" <= ");
sql.appendWithinSingleQuotes(maxStamp.toSQLDateString());
sql.appendAnd();
appendIsNotDeleted(sql);
return idoFindIDsBySQL (sql.toString ());
}
public Collection ejbFindUsersByCreationTime(IWTimestamp firstCreationTime, IWTimestamp lastCreationTime) throws FinderException, IDOLookupException{
try {
IDOQuery query = idoQueryJointGroupQuery();
query.appendAnd();
query.append(SQL_JOINT_VARIABLE_GROUP);
query.append(".");
query.append(GENERAL_GROUP_COLUMN_CREATED);
query.appendGreaterThanOrEqualsSign();
query.appendWithinSingleQuotes(firstCreationTime.toSQLString());
query.appendAnd();
query.append(SQL_JOINT_VARIABLE_GROUP);
query.append(".");
query.append(GENERAL_GROUP_COLUMN_CREATED);
query.appendLessThanOrEqualsSign();
query.appendWithinSingleQuotes(lastCreationTime.toSQLString());
System.out.println("SQL -> "+this.getClass()+":"+query);
// AND created > '18.11.2002 16:31:06'
//select gr.created,usr.* from IC_USER usr, IC_GROUP gr WHERE usr.IC_USER_ID=gr.IC_GROUP_ID AND created > '18.11.2002 16:31:06' ORDER BY gr.CREATED desc
return idoFindPKsByQuery(query);
} catch (IDOCompositePrimaryKeyException e) {
e.printStackTrace();
return ListUtil.getEmptyList();
}
}
public Collection ejbFindByDateOfBirthAndGroupRelationInitiationTimeAndStatus(Date firstBirthDateInPeriode, Date lastBirthDateInPeriode, Group relatedGroup, Timestamp firstInitiationDateInPeriode, Timestamp lastInitiationDateInPeriode, String[] relationStatus) throws IDOLookupException, FinderException{
//select usr.* from ic_user usr, ic_group_relation gr_rel where usr.date_of_birth >= '23.12.1898' and usr.date_of_birth <= '23.12.1920' and gr_rel.ic_group_id = 3 and gr_rel.related_ic_group_id=usr.ic_user_id and gr_rel.initiation_date >= '11.7.2002 15:17:39' and gr_rel.initiation_date <= '11.7.2002 15:17:40' and gr_rel.group_relation_status in ('ST_ACTIVE')
try {
//preparing
IDOEntityDefinition grRelDef = IDOLookup.getEntityDefinitionForClass(GroupRelation.class);
IDOEntityDefinition thisDef = this.getEntityDefinition();
String[] tables = new String[2];
String[] variables = new String[2];
//table name
tables[0] = thisDef.getSQLTableName();
// as variable
variables[0] = "usr";
//table name
tables[1] = grRelDef.getSQLTableName();
// as variable
variables[1] = "gr_rel";
//constructing query
IDOQuery query = idoQuery();
//select
query.appendSelect();
query.append(variables[0]);
query.append(".* ");
//from
query.appendFrom(tables,variables);
//where
query.appendWhere();
query.append(variables[0]);
query.append(".");
query.append(getColumnNameDateOfBirth());
query.appendGreaterThanOrEqualsSign();
query.append(firstBirthDateInPeriode);
//and
query.appendAnd();
query.append(variables[0]);
query.append(".");
query.append(getColumnNameDateOfBirth());
query.appendLessThanOrEqualsSign();
query.append(lastBirthDateInPeriode);
//and
query.appendAnd();
query.append(variables[1]);
query.append(".");
query.append(grRelDef.findFieldByUniqueName(GroupRelation.FIELD_GROUP).getSQLFieldName());
query.appendEqualSign();
query.append(relatedGroup.getPrimaryKey());
//and
query.appendAnd();
query.append(variables[1]);
query.append(".");
query.append(grRelDef.findFieldByUniqueName(GroupRelation.FIELD_RELATED_GROUP).getSQLFieldName());
query.appendEqualSign();
query.append(variables[0]);
query.append(".");
query.append(thisDef.getPrimaryKeyDefinition().getField().getSQLFieldName());
//and
String groupRelationColumnInitiationDate = grRelDef.findFieldByUniqueName(GroupRelation.FIELD_INITIATION_DATE).getSQLFieldName();
query.appendAnd();
query.append(variables[1]);
query.append(".");
query.append(groupRelationColumnInitiationDate);
query.appendGreaterThanOrEqualsSign();
query.append(firstInitiationDateInPeriode);
//and
query.appendAnd();
query.append(variables[1]);
query.append(".");
query.append(groupRelationColumnInitiationDate);
query.appendLessThanOrEqualsSign();
query.append(lastInitiationDateInPeriode);
//and if relationstatus
if(relationStatus!= null){
//and
query.appendAnd();
query.append(variables[1]);
query.append(".");
query.append(grRelDef.findFieldByUniqueName(GroupRelation.FIELD_STATUS).getSQLFieldName());
query.appendInArrayWithSingleQuotes(relationStatus);
}
/*
//order by usr.last_name, usr.first_name, usr.middle_name
String[] order = new String[3];
order[0] = variables[0]+"."+thisDef.findFieldByUniqueName(User.FIELD_LAST_NAME).getSQLFieldName();
order[1] = variables[0]+"."+thisDef.findFieldByUniqueName(User.FIELD_MIDDLE_NAME).getSQLFieldName();
order[2] = variables[0]+"."+thisDef.findFieldByUniqueName(User.FIELD_MIDDLE_NAME).getSQLFieldName();
query.appendOrderBy(order);
*/
//orderby personal_id
query.appendOrderBy(variables[0]+"."+thisDef.findFieldByUniqueName(User.FIELD_PERSONAL_ID).getSQLFieldName());
System.out.println("SQL -> "+this.getClass()+":"+query);
return idoFindPKsByQuery(query);
} catch (IDOCompositePrimaryKeyException e) {
e.printStackTrace();
return ListUtil.getEmptyList();
}
}
public Collection ejbFindByGroupRelationInitiationTimeAndStatus(Group relatedGroup, Timestamp firstInitiationDateInPeriode, Timestamp lastInitiationDateInPeriode, String[] relationStatus) throws IDOLookupException, FinderException{
//select usr.* from ic_user usr, ic_group_relation gr_rel where gr_rel.ic_group_id = 3 and gr_rel.related_ic_group_id=usr.ic_user_id and gr_rel.initiation_date >= '11.7.2002 15:17:39' and gr_rel.initiation_date <= '11.7.2002 15:17:40' and gr_rel.group_relation_status in ('ST_ACTIVE')
try {
//preparing
IDOEntityDefinition grRelDef = IDOLookup.getEntityDefinitionForClass(GroupRelation.class);
IDOEntityDefinition thisDef = this.getEntityDefinition();
String[] tables = new String[2];
String[] variables = new String[2];
//table name
tables[0] = thisDef.getSQLTableName();
// as variable
variables[0] = "usr";
//table name
tables[1] = grRelDef.getSQLTableName();
// as variable
variables[1] = "gr_rel";
//constructing query
IDOQuery query = idoQuery();
//select
query.appendSelect();
query.append(variables[0]);
query.append(".* ");
//from
query.appendFrom(tables,variables);
//where
query.appendWhere();
query.append(variables[1]);
query.append(".");
query.append(grRelDef.findFieldByUniqueName(GroupRelation.FIELD_GROUP).getSQLFieldName());
query.appendEqualSign();
query.append(relatedGroup.getPrimaryKey());
//and
query.appendAnd();
query.append(variables[1]);
query.append(".");
query.append(grRelDef.findFieldByUniqueName(GroupRelation.FIELD_RELATED_GROUP).getSQLFieldName());
query.appendEqualSign();
query.append(variables[0]);
query.append(".");
query.append(thisDef.getPrimaryKeyDefinition().getField().getSQLFieldName());
//and
String groupRelationColumnInitiationDate = grRelDef.findFieldByUniqueName(GroupRelation.FIELD_INITIATION_DATE).getSQLFieldName();
query.appendAnd();
query.append(variables[1]);
query.append(".");
query.append(groupRelationColumnInitiationDate);
query.appendGreaterThanOrEqualsSign();
query.append(firstInitiationDateInPeriode);
//and
query.appendAnd();
query.append(variables[1]);
query.append(".");
query.append(groupRelationColumnInitiationDate);
query.appendLessThanOrEqualsSign();
query.append(lastInitiationDateInPeriode);
//and if relationstatus
if(relationStatus!= null){
//and
query.appendAnd();
query.append(variables[1]);
query.append(".");
query.append(grRelDef.findFieldByUniqueName(GroupRelation.FIELD_STATUS).getSQLFieldName());
query.appendInArrayWithSingleQuotes(relationStatus);
}
//order by usr.last_name, usr.first_name, usr.middle_name
String[] order = new String[3];
order[0] = variables[0]+"."+thisDef.findFieldByUniqueName(User.FIELD_LAST_NAME).getSQLFieldName();
order[1] = variables[0]+"."+thisDef.findFieldByUniqueName(User.FIELD_MIDDLE_NAME).getSQLFieldName();
order[2] = variables[0]+"."+thisDef.findFieldByUniqueName(User.FIELD_MIDDLE_NAME).getSQLFieldName();
query.appendOrderBy(order);
System.out.println("SQL -> "+this.getClass()+":"+query);
return idoFindPKsByQuery(query);
} catch (IDOCompositePrimaryKeyException e) {
e.printStackTrace();
return ListUtil.getEmptyList();
}
}
public Collection ejbFindUsersBySpecificGroupsUserstatusDateOfBirthAndGender(Collection groups, Collection userStatuses, Integer yearOfBirthFrom, Integer yearOfBirthTo, String gender) throws FinderException {
Table userTable = new Table(TABLE_NAME, "u");
Table userStatusTable = new Table(UserStatusBMPBean.ENTITY_NAME, "us");
Table statusTable = new Table(StatusBMPBean.ENTITY_NAME, "s");
Table groupRelationSubTable = new Table(GroupRelationBMPBean.TABLE_NAME, "gr");
SelectQuery subQuery = new SelectQuery(groupRelationSubTable);
subQuery.addColumn(new Column(groupRelationSubTable, GroupRelationBMPBean.RELATED_GROUP_ID_COLUMN));
subQuery.addCriteria(new MatchCriteria(groupRelationSubTable, GroupRelationBMPBean.STATUS_COLUMN, MatchCriteria.EQUALS, GroupRelationBMPBean.STATUS_ACTIVE));
subQuery.addCriteria(new MatchCriteria(groupRelationSubTable, GroupRelationBMPBean.RELATIONSHIP_TYPE_COLUMN, MatchCriteria.EQUALS, RELATION_TYPE_GROUP_PARENT));
if (groups.size() < SUBLIST_SIZE) {
subQuery.addCriteria(new InCriteria(groupRelationSubTable, GroupRelationBMPBean.GROUP_ID_COLUMN, groups));
} else {
int numberOfRounds = groups.size()/SUBLIST_SIZE;
List groupsList = (List)groups;
InCriteria firstInCriteria = new InCriteria(groupRelationSubTable, GroupRelationBMPBean.GROUP_ID_COLUMN, groupsList.subList(0,SUBLIST_SIZE));
InCriteria loopInCriteria = null;
OR orCriteria = null;
for (int i=0;i<numberOfRounds;i++){
if (i==0) {
loopInCriteria = new InCriteria(groupRelationSubTable, GroupRelationBMPBean.GROUP_ID_COLUMN, groupsList.subList(i*SUBLIST_SIZE,i*SUBLIST_SIZE+SUBLIST_SIZE));
orCriteria = new OR(firstInCriteria,loopInCriteria);
} else if (i>0) {
loopInCriteria = new InCriteria(groupRelationSubTable, GroupRelationBMPBean.GROUP_ID_COLUMN, groupsList.subList(i*SUBLIST_SIZE,i*SUBLIST_SIZE+SUBLIST_SIZE));
orCriteria = new OR(orCriteria,loopInCriteria);
}
}
InCriteria lastInCriteria = new InCriteria(groupRelationSubTable, GroupRelationBMPBean.GROUP_ID_COLUMN, groupsList.subList(groupsList.size()-groupsList.size()%SUBLIST_SIZE,groupsList.size()));
orCriteria = new OR(orCriteria,lastInCriteria);
subQuery.addCriteria(orCriteria);
}
SelectQuery query = new SelectQuery(userTable);
query.addColumn(new WildCardColumn(userTable));
query.addCriteria(new InCriteria(userTable, getColumnNameUserID(), subQuery));
SelectQuery statusSubQueryDeceased = null;
SelectQuery statusSubQuery = null;
if (userStatuses != null && !userStatuses.isEmpty()) {
if (userStatuses.contains(UserStatusBusinessBean.STATUS_DECEASED)) {
Table userStatusTableDeceased = new Table(UserStatusBMPBean.ENTITY_NAME, "us1");
Table statusTableDeceased = new Table(StatusBMPBean.ENTITY_NAME, "s1");
statusSubQueryDeceased = new SelectQuery(userStatusTableDeceased);
statusSubQueryDeceased.addColumn(userStatusTableDeceased,UserStatusBMPBean.IC_USER);
statusSubQueryDeceased.addJoin(userStatusTableDeceased, UserStatusBMPBean.STATUS_ID, statusTableDeceased, StatusBMPBean.ENTITY_NAME+"_id");
statusSubQueryDeceased.addCriteria(new MatchCriteria(userStatusTableDeceased,UserStatusBMPBean.DATE_TO,MatchCriteria.IS,MatchCriteria.NULL));
statusSubQueryDeceased.addCriteria(new MatchCriteria(statusTableDeceased, StatusBMPBean.STATUS_LOC_KEY, MatchCriteria.EQUALS, UserStatusBusinessBean.STATUS_DECEASED));
}
statusSubQuery = new SelectQuery(userStatusTable);
statusSubQuery.addColumn(userStatusTable,UserStatusBMPBean.IC_USER);
statusSubQuery.addJoin(userStatusTable, UserStatusBMPBean.STATUS_ID, statusTable, StatusBMPBean.ENTITY_NAME+"_id");
statusSubQuery.addCriteria(new MatchCriteria(userStatusTable,UserStatusBMPBean.DATE_TO,MatchCriteria.IS,MatchCriteria.NULL));
statusSubQuery.addCriteria(new InCriteria(userStatusTable, UserStatusBMPBean.IC_GROUP, groups));
if (userStatuses.size() == 1){
statusSubQuery.addCriteria(new MatchCriteria(statusTable, StatusBMPBean.STATUS_LOC_KEY, MatchCriteria.EQUALS, userStatuses.iterator().next().toString()));
} else {
statusSubQuery.addCriteria(new InCriteria(statusTable,StatusBMPBean.STATUS_LOC_KEY, userStatuses));
}
}
if (statusSubQueryDeceased != null) {
InCriteria statusIn = new InCriteria(userTable, getColumnNameUserID(), statusSubQuery);
InCriteria statusInDeceased = new InCriteria(userTable, getColumnNameUserID(), statusSubQueryDeceased);
OR statusOR = new OR(statusIn,statusInDeceased);
query.addCriteria(statusOR);
} else if (statusSubQuery != null) {
query.addCriteria(new InCriteria(userTable, getColumnNameUserID(), statusSubQuery));
}
if (yearOfBirthFrom != null) {
IWTimestamp yearOfBirthFromStamp = new IWTimestamp(1,1,yearOfBirthFrom.intValue());
query.addCriteria(new MatchCriteria(userTable, getColumnNameDateOfBirth(),MatchCriteria.GREATEREQUAL, yearOfBirthFromStamp.getTimestamp()));
}
if (yearOfBirthTo != null) {
IWTimestamp yearOfBirthToStamp = new IWTimestamp(31,12,yearOfBirthTo.intValue());
query.addCriteria(new MatchCriteria(userTable, getColumnNameDateOfBirth(),MatchCriteria.LESSEQUAL, yearOfBirthToStamp.getTimestamp()));
}
if (gender != null) {
int genderNumber = -1;
if (gender.equals("m")) {
genderNumber = 1;
} else if (gender.equals("f")) {
genderNumber = 2;
}
query.addCriteria(new MatchCriteria(userTable, getColumnNameGender(),MatchCriteria.EQUALS, genderNumber));
}
// query.addOrder(groupTable, getColumnNameUserID(), true);
return idoFindPKsByQueryUsingLoadBalance(query, PREFETCH_SIZE);
// return idoFindPKsBySQL(query.toString());
}
/**
* add condition if column deleted equals 'N' or is null
*
* @param query
*/
private void appendIsNotDeleted(IDOQuery query) {
query
// .append(getColumnNameDeleted()).appendNOTEqual().appendQuoted(GenericEntity.COLUMN_VALUE_TRUE);
.appendLeftParenthesis()
.appendEqualsQuoted(getColumnNameDeleted(), GenericEntity.COLUMN_VALUE_FALSE)
.appendOr()
.append(getColumnNameDeleted())
.append(" IS NULL ")
.appendRightParenthesis();
}
/**
* add condition if column deleted equals 'N' or is null
*
* @param query
*/
private Criteria getNotDeletedCriteria() {
MatchCriteria c1 = new MatchCriteria(idoQueryTable(),getColumnNameDeleted(),MatchCriteria.EQUALS,false);
MatchCriteria c2 = new MatchCriteria(idoQueryTable(),getColumnNameDeleted(),MatchCriteria.IS,MatchCriteria.NULL);
return new OR(c1,c2);
}
/**
* add condition if column deleted equals 'N' or is null
*
* @param query
*/
private void appendIsNotDeleted(StringBuffer buffer) {
buffer
.append('(')
.append(getColumnNameDeleted())
.append(" = '")
.append(GenericEntity.COLUMN_VALUE_FALSE)
.append("' OR ")
.append(getColumnNameDeleted())
.append(" IS NULL )");
}
/**
* Unsupported.
*
*/
public void removeGroup(Group group, User currentUser) {
throw new UnsupportedOperationException();
}
/**
* Unsupported.
*
*/
public void removeGroup(int userId, User currentUser, boolean allEntries) {
throw new UnsupportedOperationException();
}
/**
* Unsupported.
*
*/
public void removeGroup(User currentUser) {
throw new UnsupportedOperationException();
}
/**
* Unsupported.
*
*/
public void removeUser(User user, User currentUser) {
throw new UnsupportedOperationException();
}
/**
* Unsupported.
*
*/
public void removeUser(User user, User currentUse, Timestamp time) {
throw new UnsupportedOperationException();
}
/**
* Unsupported.
*
*/
public Collection getChildren() {
throw new UnsupportedOperationException("Method getChildren() not implemented");
}
public Collection getAddresses(AddressType addressType) throws IDOLookupException, IDOCompositePrimaryKeyException, IDORelationshipException {
String addressTypePrimaryKeyColumn = addressType.getEntityDefinition().getPrimaryKeyDefinition().getField().getSQLFieldName();
IDOEntityDefinition addressDefinition = IDOLookup.getEntityDefinitionForClass(Address.class);
String addressTableName = addressDefinition.getSQLTableName();
String addressPrimaryKeyColumn = addressDefinition.getPrimaryKeyDefinition().getField().getSQLFieldName();
String userAddressMiddleTableName = addressDefinition.getMiddleTableNameForRelation(getEntityName());
IDOQuery query = idoQuery();
query.appendSelect().append("a.").append(addressPrimaryKeyColumn).appendFrom().append(addressTableName).append(" a, ");
query.append(userAddressMiddleTableName).append(" iua ").appendWhere();
query.append("a.").append(addressPrimaryKeyColumn).appendEqualSign();
query.append("iua.").append(addressPrimaryKeyColumn);
query.appendAnd().append("a.");
query.append(addressTypePrimaryKeyColumn).appendEqualSign();
query.append(addressType.getPrimaryKey());
query.appendAnd().append("iua.");
query.append(getColumnNameUserID()).appendEqualSign().append(getPrimaryKey());
return idoGetRelatedEntitiesBySQL(Address.class, query.toString());
}
/**
* Do not use this method, it is just here because User implements Group
*/
public void addGroup(int groupId, Timestamp time) throws EJBException {
throw new UnsupportedOperationException();
}
/**
* Do not use this method, it is just here because User implements Group
*/
public void addUniqueRelation(int relatedGroupId, String relationType, Timestamp time) throws CreateException {
throw new UnsupportedOperationException();
}
/**
* Do not use this method, it is just here because User implements Group
*/
public void removeGroup(int relatedGroupId, User currentUser, boolean AllEntries, Timestamp time) throws EJBException {
throw new UnsupportedOperationException();
}
/**
* Finds all users that have duplicated emails
*/
public Collection ejbFindAllUsersWithDuplicatedEmails()throws FinderException{
// TODO Implement "HAVING" machanism in the SelectQuery structure
// Table table = new Table(SQL_RELATION_EMAIL, "e") ;
// SelectQuery query = new SelectQuery(table);
// query.addColumn(new Column(getIDColumnName()));
// query.addGroupByColumn(getIDColumnName());
// query.addHavingColumn()
return this.idoFindPKsBySQL("select ic_user_id from ic_user_email group by ic_user_id having count(ic_user_id)>1");
}
/**
* Finds all users that have duplicated phones
*/
public Collection ejbFindAllUsersWithDuplicatedPhones(String phoneType)throws FinderException{
return this.idoFindPKsBySQL("select up.ic_user_id from ic_user_phone up, ic_phone p where up.ic_phone_id = p.ic_phone_id and p.ic_phone_type_id = " + phoneType + " group by ic_user_id having count(up.ic_user_id)>1");
}
private boolean validateIcelandicSSN(String ssn) {
int sum = 0;
boolean validSSN = false;
if (ssn.length() == 10) {
try {
sum = sum + Integer.parseInt(ssn.substring(0,1)) * 3;
sum = sum + Integer.parseInt(ssn.substring(1,2)) * 2;
sum = sum + Integer.parseInt(ssn.substring(2,3)) * 7;
sum = sum + Integer.parseInt(ssn.substring(3,4)) * 6;
sum = sum + Integer.parseInt(ssn.substring(4,5)) * 5;
sum = sum + Integer.parseInt(ssn.substring(5,6)) * 4;
sum = sum + Integer.parseInt(ssn.substring(6,7)) * 3;
sum = sum + Integer.parseInt(ssn.substring(7,8)) * 2;
sum = sum + Integer.parseInt(ssn.substring(8,9)) * 1;
sum = sum + Integer.parseInt(ssn.substring(9,10)) * 0;
if ((sum%11) == 0) {
validSSN = true;
} else {
System.out.println(ssn + " is not a valid SSN. If fails validation test.");
}
}
catch (NumberFormatException e) {
System.out.println(ssn + " is not a valid SSN. It contains characters other than digits.");
}
} else {
System.out.println(ssn + " is not a valid SSN. It is not 10 characters.");
}
return validSSN;
}
public boolean hasValidIcelandicSSN() {
if (getPersonalID() == null) {
return false;
}
return validateIcelandicSSN(getPersonalID());
}
// public boolean isDeceased() {
// boolean isDeceased = false;
// try {
// UserStatus userStatus = getUserStatusBusiness().getDeceasedUserStatus((Integer)getPrimaryKey());
// isDeceased = userStatus != null;
// } catch (Exception e) {
// e.printStackTrace();
// }
// return isDeceased;
// }
public boolean isDeceased() {
Status deceasedStatus = null;
try {
deceasedStatus = getStatusHome().findByStatusKey(UserStatusBusinessBean.STATUS_DECEASED);
}
catch (FinderException e) {
try {
deceasedStatus = getStatusHome().create();
deceasedStatus.setStatusKey(UserStatusBusinessBean.STATUS_DECEASED);
deceasedStatus.store();
}
catch (CreateException e1) {
e1.printStackTrace();
}
}
Collection coll = null;
try {
coll = getUserStatusHome().findAllByUserIDAndStatusID((Integer)getPrimaryKey(),(Integer) deceasedStatus.getPrimaryKey());
}
catch (FinderException e) {
e.printStackTrace();
}
if (coll != null && !coll.isEmpty()) {
System.out.println("User with SSN = " + getPersonalID() + " is deceased");
}
return coll != null && !coll.isEmpty();
}
protected UserStatusHome getUserStatusHome(){
UserStatusHome home = null;
try {
home = (UserStatusHome) com.idega.data.IDOLookup.getHome(UserStatus.class);
}
catch (RemoteException e) {
e.printStackTrace();
}
return home;
}
protected StatusHome getStatusHome(){
StatusHome home = null;
try {
home = (StatusHome) com.idega.data.IDOLookup.getHome(Status.class);
}
catch (RemoteException e) {
e.printStackTrace();
}
return home;
}
}