package is.idega.idegaweb.member.business; import is.idega.idegaweb.member.data.GroupApplication; import is.idega.idegaweb.member.data.GroupApplicationHome; import is.idega.idegaweb.member.presentation.GroupApplicationOverView; import is.idega.idegaweb.member.presentation.GroupApplicationTab; import java.rmi.RemoteException; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; import java.util.List; import javax.ejb.CreateException; import javax.ejb.FinderException; import javax.ejb.RemoveException; import com.idega.business.IBOServiceBean; import com.idega.core.contact.data.Email; import com.idega.core.contact.data.EmailHome; import com.idega.core.contact.data.Phone; import com.idega.core.contact.data.PhoneHome; import com.idega.core.location.business.AddressBusiness; import com.idega.core.location.data.Address; import com.idega.core.location.data.AddressHome; import com.idega.core.location.data.AddressType; import com.idega.data.IDOAddRelationshipException; import com.idega.presentation.PresentationObject; import com.idega.user.business.GroupBusiness; import com.idega.user.business.UserBusiness; import com.idega.user.data.Gender; import com.idega.user.data.GenderHome; import com.idega.user.data.Group; import com.idega.user.data.User; import com.idega.user.business.UserGroupPlugInBusiness; import com.idega.util.IWTimestamp; import com.idega.util.ListUtil; /** * @author <a href="mailto:eiki@idega.is">Eirikur S. Hrafnsson</a> * */ public class GroupApplicationBusinessBean extends IBOServiceBean implements GroupApplicationBusiness, UserGroupPlugInBusiness{ private static final String GENDER_MALE = "m"; public GroupApplication createGroupApplication(Group applicationGroup, String name, String pin , String gender, String email, String email2, String address, String postal, String phone, String phone2, String comment, String adminComment, String[] groupIds) throws RemoteException, FinderException, CreateException ,IDOAddRelationshipException{ UserBusiness userBiz = this.getUserBusiness(); EmailHome eHome = userBiz.getEmailHome(); AddressHome addressHome = userBiz.getAddressHome(); AddressBusiness addressBiz = getAddressBusiness(); PhoneHome phoneHome = userBiz.getPhoneHome(); //user User user = userBiz.createUserByPersonalIDIfDoesNotExist(name,pin,getGender(gender), getBirthDateFromPin(pin)); //gender user.setGender((Integer) this.getGender(gender).getPrimaryKey() ); user.store(); //email //both this and phones is very much a stupid hack in my part. I should have used findMethods etc. or make a useful getOrCreateIfNonExisting...bleh! -Eiki if( email!=null || email2!=null){ Collection emails = user.getEmails(); boolean addEmail1 = true; boolean addEmail2 = true; Iterator iter = emails.iterator(); //@todo do this with an equals method in a comparator? while (iter.hasNext()) { Email mail = (Email) iter.next(); String tempAddress = mail.getEmailAddress(); if( tempAddress.equals(email) ) { addEmail1 = false; } if( tempAddress.equals(email2) ) { addEmail2 = false; } } if( addEmail1 && email != null){ Email uEmail = eHome.create(); uEmail.setEmailAddress(email); uEmail.store(); user.addEmail(uEmail); } if( addEmail2 && email2 != null){ Email uEmail = eHome.create(); uEmail.setEmailAddress(email2); uEmail.store(); user.addEmail(uEmail); } } //address if( address!=null ){ //nytt find fall og breyta interfacinu Address uAddress = getUserBusiness().getUsersMainAddress(user); boolean add = false; if( uAddress == null ){ add = true; AddressType mainAddress = addressHome.getAddressType1(); uAddress = addressHome.create(); uAddress.setAddressType(mainAddress); } uAddress.setStreetName(addressBiz.getStreetNameFromAddressString(address)); uAddress.setStreetNumber(addressBiz.getStreetNumberFromAddressString(address)); if( postal!=null ) { uAddress.setPostalCodeID(Integer.parseInt(postal)); } uAddress.store(); if ( add ) { user.addAddress(uAddress); } } // phone //@todo look for the phone first to avoid duplicated if( phone!=null || phone2!=null ){ Collection phones = user.getPhones(); boolean addPhone1 = true; boolean addPhone2 = true; Iterator iter = phones.iterator(); //@todo do this with an equals method in a comparator? while (iter.hasNext()) { Phone tempPhone = (Phone) iter.next(); String temp = tempPhone.getNumber(); if( temp.equals(phone) ) { addPhone1 = false; } if( temp.equals(phone2) ) { addPhone2 = false; } } if( addPhone1 && phone != null){ Phone uPhone = phoneHome.create(); uPhone.setNumber(phone); uPhone.setPhoneTypeId(1);//weeeeee...svindl uPhone.store(); user.addPhone(uPhone); } if( addPhone2 && phone2 != null){ Phone uPhone = phoneHome.create(); uPhone.setNumber(phone2); uPhone.setPhoneTypeId(3);//weeeeee...svindl uPhone.store(); user.addPhone(uPhone); } } //groups List groups = null; if( groupIds!=null ){ GroupBusiness groupBiz = getGroupBusiness(); groups = ListUtil.convertCollectionToList(groupBiz.getGroups(groupIds)); }else{ System.out.println("GROUPS ARE NULL!!!!!!"); } //status String status = getPendingStatusString(); return createGroupApplication(applicationGroup, user, status, comment,adminComment, groups); } public GroupApplication createGroupApplication(Group applicationGroup, User user, String status, String userComment, String adminComment, List groups) throws RemoteException, CreateException, IDOAddRelationshipException{ GroupApplication appl = getGroupApplicationHome().create(); appl.setApplicationGroupId(((Integer)applicationGroup.getPrimaryKey()).intValue()); appl.setUserId(((Integer)user.getPrimaryKey()).intValue()); appl.setStatus(status); appl.setUserComment(userComment); appl.setAdminComment(adminComment); appl.setCreated(IWTimestamp.getTimestampRightNow()); appl.store(); appl.addGroups(groups); appl.store(); return appl; } public boolean changeGroupApplicationAdminCommentAndGroups(GroupApplication app, String adminComment, String[] groupIds){ try { app.setAdminComment(adminComment); if( groupIds!=null ){ app.removeAllGroups(); app.addGroups(ListUtil.convertCollectionToList(getGroupBusiness().getGroups(groupIds))); } //else app.removeAllGroups(); app.store(); } catch (Exception e) { e.printStackTrace(); return false; } return true; } public boolean changeGroupApplicationStatus(GroupApplication app, String status){ try{ GroupApplicationHome gHome = getGroupApplicationHome(); String approved = gHome.getApprovedStatusString(); String pending = gHome.getPendingStatusString(); String denied = gHome.getDeniedStatusString(); app.setModified(IWTimestamp.getTimestampRightNow()); if( approved.equals(status) ){ System.out.println("Approving application nr."+app.getPrimaryKey().toString()); Collection groups = app.getGroups(); User user = app.getUser(); Iterator iter = groups.iterator(); while (iter.hasNext()) { Group group = (Group) iter.next(); group.addGroup(user); } app.setStatus(status); } else if( pending.equals(status) ){ //extra stuff? app.setStatus(status); } else if( denied.equals(status) ){ //extra stuff? app.setStatus(status); } app.store(); } catch(Exception e){ e.printStackTrace(); return false; } return true; } public String getPendingStatusString() throws RemoteException{ return getGroupApplicationHome().getPendingStatusString(); } public String getApprovedStatusString()throws RemoteException{ return getGroupApplicationHome().getApprovedStatusString(); } public String getDeniedStatusString()throws RemoteException{ return getGroupApplicationHome().getDeniedStatusString(); } public boolean changeGroupApplicationStatus(int groupApplicationId, String status){ try{ GroupApplicationHome gHome = getGroupApplicationHome(); GroupApplication app = gHome.findByPrimaryKey(new Integer(groupApplicationId)); return changeGroupApplicationStatus(app,status); } catch(Exception e){ e.printStackTrace(); return false; } } public Collection getGroupApplicationsByStatusAndApplicationGroup(String status, Group applicationGroup){ Collection apps = null; try { GroupApplicationHome grHome = getGroupApplicationHome(); apps = grHome.findAllApplicationsByStatusAndApplicationGroup(status, applicationGroup); } catch (RemoteException e) { e.printStackTrace(); } catch (FinderException e) { e.printStackTrace(); } return apps; } public Collection getGroupApplicationsByStatusAndUserOrderedByCreationDate(String status, User user){ Collection apps = null; try { GroupApplicationHome grHome = getGroupApplicationHome(); apps = grHome.findAllApplicationsByStatusAndUserOrderedByCreationDate(status, user); } catch (RemoteException e) { e.printStackTrace(); } catch (FinderException e) { e.printStackTrace(); } return apps; } public UserBusiness getUserBusiness() throws RemoteException { return (UserBusiness) getServiceInstance(UserBusiness.class); } public AddressBusiness getAddressBusiness() throws RemoteException { return (AddressBusiness) getServiceInstance(AddressBusiness.class); } public GroupBusiness getGroupBusiness() throws RemoteException { return (GroupBusiness) getServiceInstance(GroupBusiness.class); } public GroupApplicationHome getGroupApplicationHome() throws RemoteException { return (GroupApplicationHome) getIDOHome(GroupApplication.class); } private Gender getGender(String gender){ try { GenderHome home = (GenderHome) getIDOHome(Gender.class); if( gender.equals(GroupApplicationBusinessBean.GENDER_MALE) ){ return home.getMaleGender(); } else { return home.getFemaleGender(); } } catch (Exception ex) { ex.printStackTrace(); return null;//if something happened } } private IWTimestamp getBirthDateFromPin(String pin){ //pin format = 2502785279 yyyymmddxxxx int dd = Integer.parseInt(pin.substring(0,2)); int mm = Integer.parseInt(pin.substring(2,4)); int yyyy = Integer.parseInt(pin.substring(4,6)); if(pin.endsWith("9")) { yyyy += 1900; } else { yyyy += 2000; } IWTimestamp dob = new IWTimestamp(dd,mm,yyyy); return dob; } /** * @see com.idega.user.business.UserGroupPlugInBusiness#afterGroupCreateOrUpdate(Group, Group) */ public void afterGroupCreateOrUpdate(Group group, Group parentGroup) throws CreateException, RemoteException { } /** * @see com.idega.user.business.UserGroupPlugInBusiness#afterUserCreateOrUpdate(User, Group) */ public void afterUserCreateOrUpdate(User user, Group parentGroup) throws CreateException, RemoteException { } /** * @see com.idega.user.business.UserGroupPlugInBusiness#beforeGroupRemove(Group, Group) */ public void beforeGroupRemove(Group group, Group parentGroup) throws RemoveException, RemoteException { } /** * @see com.idega.user.business.UserGroupPlugInBusiness#beforeUserRemove(User, Group) */ public void beforeUserRemove(User user, Group parentGroup) throws RemoveException, RemoteException { } /** * @see com.idega.user.business.UserGroupPlugInBusiness#instanciateEditor(Group) */ public PresentationObject instanciateEditor(Group group) throws RemoteException { return null; } /** * @see com.idega.user.business.UserGroupPlugInBusiness#instanciateViewer(Group) */ public PresentationObject instanciateViewer(Group group)throws RemoteException { GroupApplicationOverView viewer = new GroupApplicationOverView(); viewer.initialize(group); return viewer; } /** * @see com.idega.user.business.UserGroupPlugInBusiness#getGroupPropertiesTabs() */ public List getGroupPropertiesTabs(Group group) throws RemoteException { return null; } /** * @see com.idega.user.business.UserGroupPlugInBusiness#getUserPropertiesTabs() */ public List getUserPropertiesTabs(User user) throws RemoteException { ArrayList list = new ArrayList(); list.add(new GroupApplicationTab(user)); return list; } public String isUserAssignableFromGroupToGroup(User user, Group sourceGroup, Group targetGroup) { return null; } public String isUserSuitedForGroup(User user, Group targetGroup) { return null; } /* (non-Javadoc) * @see com.idega.user.business.UserGroupPlugInBusiness#getMainToolbarElements() */ public List getMainToolbarElements() throws RemoteException { return null; } /* (non-Javadoc) * @see com.idega.user.business.UserGroupPlugInBusiness#getGroupToolbarElements(com.idega.user.data.Group) */ public List getGroupToolbarElements(Group group) throws RemoteException { return null; } /* (non-Javadoc) * @see com.idega.user.business.UserGroupPlugInBusiness#canCreateSubGroup(com.idega.user.data.Group,java.lang.String) */ public String canCreateSubGroup(Group group, String groupTypeOfSubGroup) throws RemoteException { // TODO Auto-generated method stub return null; } }