//idega 2000 - idega team
package is.idega.idegaweb.golf.entity;
//import java.util.*;
import is.idega.idegaweb.golf.access.LoginTable;
import is.idega.idegaweb.golf.block.image.data.ImageEntity;
import java.sql.Connection;
import java.sql.Date;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Collection;
import javax.ejb.FinderException;
import com.idega.data.GenericEntity;
import com.idega.data.IDOLookup;
import com.idega.data.MetaDataCapable;
import com.idega.data.query.MatchCriteria;
import com.idega.data.query.SelectQuery;
import com.idega.data.query.Table;
import com.idega.data.query.WildCardColumn;
import com.idega.user.data.User;
public class MemberBMPBean extends GenericEntity implements Member, MetaDataCapable {
public boolean debug = true;
private final static String COLUMNNAME_IC_USER_ID = "IC_USER_ID";
private final static String COLUMNNAME_UNIQUE_ID = "UNIQUE_ID";
public void initializeAttributes(){
//super.initializeAttributes();
//par1: column name, par2: visible column name, par3-par4: editable/showable, par5 ...
addAttribute(getIDColumnName());
addUniqueIDColumn();
addAttribute("first_name","Fornafn",true,true,"java.lang.String");
addAttribute("middle_name","Mi�nafn",true,true,"java.lang.String");
addAttribute("last_name","Eftirnafn",true,true,"java.lang.String");
addAttribute("date_of_birth","F��ingardagur",true,true,"java.sql.Date");
addAttribute("gender","Kyn",true,true,"java.lang.String");
addAttribute(getSocialSecurityNumberColumnName(),"Kennitala",true,true,"java.lang.String");
addAttribute("email","T�lvup�stur",true,true,"java.lang.String");
addAttribute("image_id","Mynd",false,false,Integer.class,"one-to-many",ImageEntity.class);
addAttribute("workplace","Vinnusta�ur",true,true,"java.lang.String");
addAttribute("job","Starfsheiti",true,true,"java.lang.String");
addAttribute("full_name","Fullt nafn",true,true,"java.lang.String");
addManyToManyRelationShip(is.idega.idegaweb.golf.entity.Address.class,"member_address");
addManyToManyRelationShip(is.idega.idegaweb.golf.entity.Card.class,"member_card");
addManyToManyRelationShip(is.idega.idegaweb.golf.entity.Phone.class,"member_phone");
addManyToManyRelationShip(is.idega.idegaweb.golf.entity.Group.class,"group_member");
addOneToOneRelationship(COLUMNNAME_IC_USER_ID,User.class);
addManyToManyRelationShip(is.idega.idegaweb.golf.entity.Union.class,"union_member");
addIndex("IDX_MEMBER_1", getSocialSecurityNumberColumnName());
addIndex("IDX_MEMBER_2", new String[]{getIDColumnName(), getFirstName()});
addIndex("IDX_MEMBER_3", new String[]{getFirstName(), getMiddleName(), getLastName()});
addIndex("IDX_MEMBER_4", COLUMNNAME_IC_USER_ID);
addIndex("IDX_MEMBER_5", COLUMNNAME_UNIQUE_ID);
addMetaDataRelationship();
}
public String getEntityName(){
return "member";
}
public void setDefaultValues(){
setColumn("image_id",1);
}
public String getEmail() {
return getStringColumnValue("email");
}
public void setEmail(String email) {
setColumn("email",email);
}
public static String getSocialSecurityNumberColumnName(){
return "social_security_number";
}
public String getName(){
StringBuffer nameBuffer = new StringBuffer();
if ((getFirstName() != null) && (getMiddleName() != null) && (getLastName() != null)){
nameBuffer.append(getFirstName());
nameBuffer.append(" ");
nameBuffer.append(getMiddleName());
nameBuffer.append(" ");
nameBuffer.append(getLastName());
}
else if ((getFirstName() != null) && (getLastName() != null)){
nameBuffer.append(getFirstName());
nameBuffer.append(" ");
nameBuffer.append(getLastName());
}
else if(getLastName() != null){
nameBuffer.append(getLastName());
}
else if (getFirstName() != null){
nameBuffer.append(getFirstName());
}
return nameBuffer.toString();
}
public String getFirstName(){
return (String) getColumnValue("first_name");
}
public void setFirstName(String first_name){
setColumn("first_name",first_name);
}
public String getMiddleName(){
return (String) getColumnValue("middle_name");
}
public void setMiddleName(String middle_name){
setColumn("middle_name",middle_name);
}
public String getLastName(){
return (String) getColumnValue("last_name");
}
public void setLastName(String last_name){
setColumn("last_name",last_name);
}
public void setFullName(){
setColumn("full_name",getName());
}
public Date getDateOfBirth(){
return (Date) getColumnValue("date_of_birth");
}
public void setDateOfBirth(Date dateOfBirth){
setColumn("date_of_birth", dateOfBirth);
}
/*public char getGender(){
return getCharColumnValue("gender");
}
public void setGender(Character gender){
setColumn("gender",gender.toString());
}*/
public String getGender(){
return getStringColumnValue("gender");
}
public void setGender(String gender){
setColumn("gender",gender);
}
public String getSocialSecurityNumber(){
return getStringColumnValue(getSocialSecurityNumberColumnName());
}
public String getSSN(){
return getSocialSecurityNumber();
}
public void setSocialSecurityNumber(String social_security_number){
setColumn(getSocialSecurityNumberColumnName(),social_security_number);
}
public int getImageId(){
return getIntColumnValue("image_id");
}
public void setimage_id(int image_id){
setColumn("image_id",image_id);
}
public void setimage_id(Integer image_id){
setColumn("image_id",image_id);
}
public void setImageId(int image_id){
setColumn("image_id",image_id);
}
public void setImageId(Integer image_id){
setColumn("image_id",image_id);
}
public ImageEntity getImage(){
return (ImageEntity)getColumnValue("image_id");
}
public String getJob() {
return getStringColumnValue("job");
}
public void setJob(String job) {
setColumn("job", job);
}
public String getWorkPlace() {
return getStringColumnValue("workplace");
}
public void setWorkPlace(String workPlace) {
setColumn("workplace", workPlace);
}
public MemberInfo getMemberInfo(){
MemberInfo info=null;
int id=this.getID();
try{
MemberInfo[] arr= null;
MemberInfo mem = (MemberInfo) IDOLookup.instanciateEntity(MemberInfo.class);
arr = ( MemberInfo[] ) mem.findAll("select * from member_info where member_id="+id+"");
if( (arr!= null ) && (arr.length > 0) ) info = arr[0];
//MemberInfo tempMem = new MemberInfo(this.getID());
}
catch(SQLException ex){
ex.printStackTrace();
System.err.println("is.idega.idegaweb.golf.entity.Member has no MemberInfo for id="+id);
//info=null;
}
return info;
}
public UnionMemberInfo getUnionMemberInfo(String union_id)throws SQLException{
UnionMemberInfo info = (UnionMemberInfo) IDOLookup.instanciateEntity(UnionMemberInfo.class);
UnionMemberInfo[] infos = null;
infos = (UnionMemberInfo[]) (info.findAll("select * from union_member_info where member_id="+this.getID()+" and union_id="+union_id+""));
if( (infos!=null) && (infos.length>0) ) info = (UnionMemberInfo) infos[0];
else info = null;
return info;
}
public UnionMemberInfo getUnionMemberInfo(String union_id, String member_id)throws SQLException{
UnionMemberInfo info = (UnionMemberInfo) IDOLookup.instanciateEntity(UnionMemberInfo.class);
UnionMemberInfo[] infos = null;
infos = (UnionMemberInfo[]) (info.findAll("select * from union_member_info where member_id="+member_id+" and union_id="+union_id+""));
if( (infos!=null) && (infos.length>0) ) info = (UnionMemberInfo) infos[0];
else info = null;
return info;
}
public UnionMemberInfo getUnionMemberInfo(int unionId)throws SQLException{
return getUnionMemberInfo(Integer.toString(unionId));
}
public int getMainUnionID() throws SQLException {
int skilari=1;
//Optimization by Sigtryggur 23.06.05
//Criteria applyed in the query. Not afterwards. Less data for the app server to fetch.
//Also used union_id instead of wildcard in the select part of the query. Again less data to transfer
UnionMemberInfo[] union = (UnionMemberInfo[]) ((UnionMemberInfo) IDOLookup.instanciateEntity(UnionMemberInfo.class)).findAll("select union_id from union_member_info where member_id = "+this.getID()+" and member_status='A' and membership_type = 'main'");
if (union != null && union.length > 0) {
skilari = union[0].getUnionID();
}
//TABLE NOT USED ANY MORE!
// try{
// if ( union.length == 0 ) {
// Union[] unionMember = (Union[]) this.findRelated((Union) IDOLookup.instanciateEntity(Union.class));
// if ( unionMember.length > 0 ) {
// skilari = unionMember[0].getID();
// }
// }
// }
// catch(SQLException ex){
// ex.printStackTrace();
// }
return skilari;
}
public void setMainUnion(Union union) throws SQLException {
setMainUnion(union.getID());
}
public void setMainUnion(int iUnionId) throws SQLException {
UnionMemberInfo[] unies = (UnionMemberInfo[]) ((UnionMemberInfo) IDOLookup.instanciateEntity(UnionMemberInfo.class)).findAllByColumnEquals("member_id",this.getID());
for (int i = 0; i < unies.length; i++) {
if( unies[i].getID()!= iUnionId )
unies[i].setMembershipType("sub");
else {
unies[i].setMembershipType("main");
unies[i].setMemberStatus("A");
}
unies[i].update();
}
}
public Union getMainUnion()throws FinderException, SQLException{
return ((UnionHome) IDOLookup.getHomeLegacy(Union.class)).findByPrimaryKey(getMainUnionID());
}
//Many to many relations
public void setAddress(Address type){
setColumn("address_id",new Integer(type.getID()));
}
public Address[] getAddress()throws SQLException{
return ((Address[]) findReverseRelated((Address) IDOLookup.instanciateEntity(Address.class)));
}
public Card[] getCards()throws SQLException{
return ((Card[]) findReverseRelated((Card) IDOLookup.instanciateEntity(Card.class)));
}
public Scorecard[] getScorecards()throws SQLException{
Scorecard scorecard = (Scorecard) IDOLookup.instanciateEntity(Scorecard.class);
return (Scorecard[]) scorecard.findAll("select * from "+scorecard.getEntityName()+" where member_id="+this.getID()+"");
}
public float getHandicap()throws SQLException{
MemberInfo memberInfo = getMemberInfo();
if (memberInfo != null ){
return memberInfo.getHandicap();
}
else
{
return -1;
}
}
//public void addTo(Union union,String MemberShip type){
//}
/**
* @todo needs to be updated and tested, using union_member_info instead of union_member
*/
public Union[] getUnions()throws SQLException{
Union union = (Union) IDOLookup.instanciateEntity(Union.class);
/**
* New implementation should be:
*
UnionMemberInfo[] unioninfos = (UnionMemberInfo[]) UnionMemberInfo.getStaticInstance("is.idega.idegaweb.golf.entity.UnionMemberInfo").findAll("select * from union_member_info where member_id = "+this.getID());
Vector vect = new Vector();
for (int i = 0; i < unioninfos.length; i++) {
vect.add(new Union(unioninfos[i].getUnionID()));
}
return (Union[])vect.toArray(new Union[0]);
*/
return (Union[]) this.findRelated(union);
//return (Union[])union.findAll("select * from "+union.getEntityName()+" where "+this.getIDColumnName()+"='"+this.getID()+"' ");
}
public boolean isMemberIn(Union union)throws SQLException{
return isMemberInUnion(union);
}
public boolean isMemberInUnion(Union union)throws SQLException{
int numRecords = getNumberOfRecords("select count (member_id) from union_member_info where union_id = "+union.getID()+" and member_id = "+this.getID());
return (numRecords > 0);
}
public boolean isMemberInUnion()throws SQLException{
int numRecords = getNumberOfRecords("select count (member_id) from union_member_info where member_id = "+this.getID());
return (numRecords > 0);
}
public Phone[] getPhone()throws SQLException {
return (Phone[]) this.findReverseRelated((Phone) IDOLookup.instanciateEntity(Phone.class));
}
public Member[] getFamilyMembers(int FamilyId)throws SQLException{
String sql = "select member.* from member m,union_member_info u where m.member_id = u.member_id and u.family_id = "+FamilyId;
Member[] mbs = (Member[])this.findAll(sql);
return mbs;
}
/** @todo needs to be updated */
public void delete()throws SQLException{
Connection conn= null;
Statement Stmt= null;
try{
conn = getConnection();
try{
Address address = (Address) IDOLookup.instanciateEntity(Address.class);
Address[] addresses = (Address[])findReverseRelated(address);
Stmt = conn.createStatement();
Stmt.executeUpdate("delete from "+getNameOfMiddleTable(this,address)+" where "+getIDColumnName()+"='"+getID()+"'");
for(int i = 0; i < addresses.length; i++){
addresses[i].delete();
}
}
catch(SQLException ex){ if(debug) ex.printStackTrace(); }
try{
Phone phone = (Phone) IDOLookup.instanciateEntity(Phone.class);
Phone[] phones = (Phone[])findReverseRelated(phone);
Stmt = conn.createStatement();
Stmt.executeUpdate("delete from "+getNameOfMiddleTable(this,phone)+" where "+getIDColumnName()+"='"+getID()+"'");
for(int i = 0; i < phones.length; i++){
phones[i].delete();
}
}
catch(SQLException ex){ if(debug) ex.printStackTrace(); }
try{
Card card = (Card) IDOLookup.instanciateEntity(Card.class);
Card[] cards = (Card[])findReverseRelated(card);
Stmt = conn.createStatement();
Stmt.executeUpdate("delete from "+getNameOfMiddleTable(this,card)+" where "+getIDColumnName()+"='"+getID()+"'");
for(int i = 0; i < cards.length; i++){
cards[i].delete();
}
}
catch(SQLException ex){ if(debug) ex.printStackTrace(); }
try{
Tournament tournament = (Tournament) IDOLookup.instanciateEntity(Tournament.class);
Stmt = conn.createStatement();
Stmt.executeUpdate("delete from "+getNameOfMiddleTable(tournament,this)+" where "+getIDColumnName()+"='"+getID()+"'");
}
catch(SQLException ex){ if(debug) ex.printStackTrace(); }
try{
Group group = (Group) IDOLookup.instanciateEntity(Group.class);
Stmt = conn.createStatement();
Stmt.executeUpdate("delete from "+getNameOfMiddleTable(group,this)+" where "+getIDColumnName()+"='"+getID()+"'");
}
catch(SQLException ex){ if(debug) ex.printStackTrace(); }
try{
Union union = (Union) IDOLookup.instanciateEntity(Union.class);
Stmt = conn.createStatement();
Stmt.executeUpdate("delete from "+getNameOfMiddleTable(union,this)+" where "+getIDColumnName()+"='"+getID()+"'");
}
catch(SQLException ex){ if(debug) ex.printStackTrace(); }
try{
MemberInfo info = getMemberInfo();
//MemberInfo info = new MemberInfo(this.getID());
if(info!= null)
info.delete();
}
catch(SQLException ex){ if(debug) ex.printStackTrace(); }
//Warn against if there are others with the same family
/*
try{
Family family = this.getFamily();
family.delete();
}
catch(SQLException ex){ if(debug) ex.printStackTrace(); }
*/
/*
try{
ImageEntity image = this.getImage();
image.delete();
}
catch(SQLException ex){ if(debug) ex.printStackTrace(); }
*/
try{
Scorecard[] scores = (Scorecard[])((Scorecard) IDOLookup.instanciateEntity(Scorecard.class)).findAllByColumnEquals("member_id",this.getID());
for (int i = 0; i < scores.length;i++){
Stroke stroke = (Stroke) IDOLookup.instanciateEntity(Stroke.class);
Stroke[] strokes = (Stroke[]) stroke.findAllByColumnEquals("scorecard_id",scores[i].getID());
for (int n = 0; n < strokes.length;n++){
strokes[n].delete();
}
scores[i].delete();
}
}
catch(SQLException ex){ if(debug) ex.printStackTrace(); }
try{
Startingtime time = (Startingtime) IDOLookup.instanciateEntity(Startingtime.class);
Startingtime[] times = (Startingtime[])time.findAllByColumnEquals("member_id",this.getID());
for (int i = 0; i < times.length; i++){
int id = times[i].getID();
Stmt = conn.createStatement();
Stmt.executeUpdate("delete from tournament_startingtime where STARTINGTIME_ID ='"+id+"'");
times[i].delete();
}
}
catch(SQLException ex){ if(debug) ex.printStackTrace(); }
try{
((Payment) IDOLookup.instanciateEntity(Payment.class)).deleteMultiple("member_id",Integer.toString(this.getID()));
}
catch(SQLException ex){ if(debug) ex.printStackTrace(); }
try{
Account[] account = (Account[]) ((Account) IDOLookup.instanciateEntity(Account.class)).findAllByColumnEquals("member_id",this.getID());
for ( int a = 0; a < account.length; a++ ) {
((AccountEntry) IDOLookup.instanciateEntity(AccountEntry.class)).deleteMultiple("account_id",Integer.toString(account[a].getID()));
account[a].delete();
}
}
catch(SQLException ex){ if(debug) ex.printStackTrace(); }
try{
((LoginTable) IDOLookup.instanciateEntity(LoginTable.class)).deleteMultiple("member_id",Integer.toString(this.getID()));
}
catch(SQLException ex){ if(debug) ex.printStackTrace(); }
try{
super.delete();
}
catch(SQLException ex){ if(debug) ex.printStackTrace(); }
}
finally{
if (Stmt != null){
Stmt.close();
}
if (conn != null){
freeConnection(conn);
}
}
}
public Group[] getGroups()throws SQLException{
Group group = (Group) IDOLookup.instanciateEntity(Group.class);
return (Group[]) findRelated(group);
//return (Union[])union.findAll("select * from "+union.getEntityName()+" where "+this.getIDColumnName()+"='"+this.getID()+"' ");
}
public static Member getMember(String socialSecurityNumber) {
Member returner = null;
try {
java.util.List members = com.idega.data.EntityFinder.findAllByColumnEquals((Member) IDOLookup.instanciateEntity(Member.class),"SOCIAL_SECURITY_NUMBER",socialSecurityNumber);
if (members != null) {
if (members.size() > 0) {
returner = (Member) members.get( (members.size() -1));
}
}
}
catch (SQLException sq) {
sq.printStackTrace(System.err);
}
return returner;
}
public static Member getStaticInstance(){
return (Member)getStaticInstance(is.idega.idegaweb.golf.entity.Member.class);
}
public void insert() throws SQLException{
setFullName();
super.insert();
}
public void insertStartData(){
//Administrator member created in LoginTable
}
public int getAge() {
int currentYear = com.idega.util.IWTimestamp.RightNow().getYear();
int memberYear = 0;
java.sql.Date date = this.getDateOfBirth();
if (date != null) {
com.idega.util.IWTimestamp stamp = new com.idega.util.IWTimestamp(date);
memberYear = stamp.getYear();
}
else {
String socialSecurityNumber = this.getSocialSecurityNumber();
if ( socialSecurityNumber != null) {
if (socialSecurityNumber.length() >= 6) {
try {
memberYear = Integer.parseInt(socialSecurityNumber.substring(4,6));
}
catch (NumberFormatException n) {
}
}
}
}
return currentYear - memberYear;
}
public void setICUser(com.idega.user.data.User user) {
setColumn(COLUMNNAME_IC_USER_ID,user);
}
public User getICUser() {
return (User)getColumnValue(COLUMNNAME_IC_USER_ID);
}
public int getICUserID() {
return getIntColumnValue(COLUMNNAME_IC_USER_ID);
}
public Object ejbFindMemberByIWMemberSystemUser(User user) throws FinderException {
return idoFindOnePKByQuery(idoQueryGetSelect().appendWhereEquals(COLUMNNAME_IC_USER_ID,user));
}
public Object ejbFindBySSN(String ssn) throws FinderException {
return idoFindOnePKByColumnBySQL(getSocialSecurityNumberColumnName(), ssn);
}
public Object ejbFindByUniqueID(String uniqueID) throws FinderException {
return idoFindOnePKByColumnBySQL(this.getUniqueIdColumnName(), uniqueID);
}
public Collection ejbFindAll() throws FinderException {
return idoFindAllIDsBySQL();
}
public Collection ejbFindAllByUnion(Union union, String gender) throws FinderException {
Table table = new Table(this);
Table unionMemberInfo = new Table(UnionMemberInfo.class);
SelectQuery query = new SelectQuery(table);
query.addColumn(new WildCardColumn(table));
query.addJoin(table, getIDColumnName(), unionMemberInfo, "member_id");
query.addCriteria(new MatchCriteria(unionMemberInfo, "membership_type", MatchCriteria.EQUALS, "main"));
query.addCriteria(new MatchCriteria(unionMemberInfo, "member_status", MatchCriteria.EQUALS, "A"));
if (union != null) {
query.addCriteria(new MatchCriteria(unionMemberInfo, "union_id", MatchCriteria.EQUALS, union));
}
if (gender != null && !gender.equalsIgnoreCase("b")) {
query.addCriteria(new MatchCriteria(table, "gender", MatchCriteria.EQUALS, gender));
}
query.addOrder(unionMemberInfo, "union_id", true);
query.addOrder(table, "first_name", true);
query.addOrder(table, "middle_name", true);
query.addOrder(table, "last_name", true);
return idoFindPKsByQuery(query);
}
}