package is.idega.idegaweb.marathon.presentation.crew;
import is.idega.idegaweb.marathon.IWBundleStarter;
import is.idega.idegaweb.marathon.business.RunBusiness;
import is.idega.idegaweb.marathon.data.Participant;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;
import com.idega.idegaweb.IWResourceBundle;
import com.idega.presentation.IWContext;
import com.idega.util.CoreConstants;
/**
*
* @author <a href="civilis@idega.com">Vytautas Čivilis</a>
* @version $Revision: 1.4 $
*
* Last modified: $Date: 2008/01/12 19:06:46 $ by $Author: civilis $
*
*/
public class CrewMembersInvitationBean {
private CrewEditWizardBean crewEditWizardBean;
private String deleteMemberParticipantId;
private String addMemberParticipantId;
private String searchString;
private boolean searchResultListRendered;
public String getSearchString() {
return searchString;
}
public void setSearchString(String searchString) {
this.searchString = searchString;
}
public CrewEditWizardBean getCrewEditWizardBean() {
return crewEditWizardBean;
}
public void setCrewEditWizardBean(CrewEditWizardBean crewEditWizardBean) {
this.crewEditWizardBean = crewEditWizardBean;
}
public DataModel getMembersList() {
List members = new ArrayList();
CrewParticipant crewParticipant = getCrewEditWizardBean().getCrewParticipant();
try {
RunBusiness runBusiness = getCrewEditWizardBean().getRunBusiness();
Collection crewMembers = crewParticipant.getCrewMembers();
if(crewMembers != null) {
IWContext iwc = IWContext.getIWContext(FacesContext.getCurrentInstance());
IWResourceBundle iwrb = iwc.getIWMainApplication().getBundle(IWBundleStarter.IW_BUNDLE_IDENTIFIER).getResourceBundle(iwc);
for (Iterator iterator = crewMembers.iterator(); iterator.hasNext();) {
CrewParticipant memberCrewParticipant = new CrewParticipant((Participant) iterator.next(), runBusiness);
String roleLabel;
int role = memberCrewParticipant.getCrewParticipantRole();
if(role == CrewParticipant.CREW_PARTICIPANT_ROLE_NOT_PARTICIPANT) {
Logger.getLogger(getClass().getName()).log(Level.SEVERE, "Crew member was found, but role was 'not participant'. Participant id: "+memberCrewParticipant.getParticipantId());
continue;
}
if(role == CrewParticipant.CREW_PARTICIPANT_ROLE_OWNER) {
roleLabel = iwrb.getLocalizedString("crew.role.crewCreator", "Crew creator");
} else if(role == CrewParticipant.CREW_PARTICIPANT_ROLE_MEMBER) {
roleLabel = iwrb.getLocalizedString("crew.role.crewMember", "Member");
} else if(role == CrewParticipant.CREW_PARTICIPANT_ROLE_INVITED) {
roleLabel = iwrb.getLocalizedString("crew.role.crewInvited", "Invited");
} else {
continue;
}
Map memberData = new HashMap(3);
memberData.put(UICrewMembersInivitationStep.member_name, memberCrewParticipant.getParticipant().getUser().getName());
memberData.put(UICrewMembersInivitationStep.member_role, roleLabel);
memberData.put(UICrewMembersInivitationStep.member_modifyOnclick, new StringBuffer("document.getElementById('").append(UICrewMembersInivitationStep.crewMembersInvitationBean_memberDeleteParticipantIdParam).append("').value='").append(memberCrewParticipant.getParticipantId()).append("';"));
members.add(memberData);
}
}
} catch (Exception e) {
Logger.getLogger(getClass().getName()).log(Level.SEVERE, "Exception while getting members list. Participant id: "+crewParticipant.getParticipantId(), e);
IWContext iwc = IWContext.getIWContext(FacesContext.getCurrentInstance());
IWResourceBundle iwrb = iwc.getIWMainApplication().getBundle(IWBundleStarter.IW_BUNDLE_IDENTIFIER).getResourceBundle(iwc);
FacesMessage message = new FacesMessage(iwrb.getLocalizedString("crew.invitation.membersList.genException", "Error occurred, while getting members list. Please try again."));
FacesContext.getCurrentInstance().addMessage(null, message);
}
return new ListDataModel(members);
}
public DataModel getSearchResults() {
List searchResults = getCrewEditWizardBean().getCrewMembersInvitationSearchResults();
return new ListDataModel(searchResults == null ? new ArrayList() : searchResults);
}
public void deleteMember() {
CrewParticipant crewParticipant = getCrewEditWizardBean().getCrewParticipant();
try {
int memberParticipantId = Integer.parseInt(getDeleteMemberParticipantId());
if(memberParticipantId == crewParticipant.getParticipantId()) {
IWContext iwc = IWContext.getIWContext(FacesContext.getCurrentInstance());
IWResourceBundle iwrb = iwc.getIWMainApplication().getBundle(IWBundleStarter.IW_BUNDLE_IDENTIFIER).getResourceBundle(iwc);
FacesMessage message = new FacesMessage(iwrb.getLocalizedString("crew.invitation.deleteMember.ownerCannotBeRemoved", "You cannot remove crew creator from the crew. You may want to remove crew."));
FacesContext.getCurrentInstance().addMessage(null, message);
return;
}
crewParticipant.deleteMember(memberParticipantId);
} catch (Exception e) {
Logger.getLogger(getClass().getName()).log(Level.SEVERE, "Exception while deleting member. Participant id: "+crewParticipant.getParticipantId(), e);
IWContext iwc = IWContext.getIWContext(FacesContext.getCurrentInstance());
IWResourceBundle iwrb = iwc.getIWMainApplication().getBundle(IWBundleStarter.IW_BUNDLE_IDENTIFIER).getResourceBundle(iwc);
FacesMessage message = new FacesMessage(iwrb.getLocalizedString("crew.invitation.deleteMember.genException", "Error occurred, while deleting member. Please try again."));
FacesContext.getCurrentInstance().addMessage(null, message);
}
}
public void inviteMember() {
CrewParticipant crewParticipant = getCrewEditWizardBean().getCrewParticipant();
Participant memberInvited = null;
RunBusiness runBusiness = getCrewEditWizardBean().getRunBusiness();
IWContext iwc = IWContext.getIWContext(FacesContext.getCurrentInstance());
IWResourceBundle iwrb = iwc.getIWMainApplication().getBundle(IWBundleStarter.IW_BUNDLE_IDENTIFIER).getResourceBundle(iwc);
try {
memberInvited = runBusiness.getParticipantByPrimaryKey(Integer.parseInt(getAddMemberParticipantId()));
} catch (Exception e) {
Logger.getLogger(getClass().getName()).log(Level.SEVERE, "Exception while inviting member. Tried to invite with participant id: "+getAddMemberParticipantId(), e);
FacesMessage message = new FacesMessage(iwrb.getLocalizedString("crew.invitation.inviteMember.genException", "Error occurred, while inviting member. Please try again."));
FacesContext.getCurrentInstance().addMessage(null, message);
return;
}
if(memberInvited == null) {
Logger.getLogger(getClass().getName()).log(Level.SEVERE, "Member to invite not found with the id provided: "+getAddMemberParticipantId());
FacesMessage message = new FacesMessage(iwrb.getLocalizedString("crew.invitation.inviteMember.invitedMemberNotFound", "The member to invite couldn't be found in our database"));
FacesContext.getCurrentInstance().addMessage(null, message);
}
CrewParticipant memberToInvite = new CrewParticipant(memberInvited, runBusiness);
if(memberToInvite.getCrewParticipantRole() != CrewParticipant.CREW_PARTICIPANT_ROLE_NOT_PARTICIPANT) {
FacesMessage message;
if(memberToInvite.getCrewParticipantRole() == CrewParticipant.CREW_PARTICIPANT_ROLE_OWNER || memberToInvite.getCrewParticipantRole() == CrewParticipant.CREW_PARTICIPANT_ROLE_MEMBER)
message = new FacesMessage(iwrb.getLocalizedString("crew.invitation.inviteMember.invitedMemberAlreadyInCrew", "Member you tried to invite already is in the crew"));
else if(memberToInvite.getCrewParticipantRole() == CrewParticipant.CREW_PARTICIPANT_ROLE_INVITED)
message = new FacesMessage(iwrb.getLocalizedString("crew.invitation.inviteMember.invitedMemberAlreadyInvited", "Member you tried to invite already has been invited to some crew"));
else
// de-fault
message = new FacesMessage(iwrb.getLocalizedString("crew.invitation.inviteMember.invitedMemberCannotBeInvited", "Member couldn't be invited to a crew"));
FacesContext.getCurrentInstance().addMessage(null, message);
} else {
if(!crewParticipant.isCrewOwner()) {
Logger.getLogger(this.getClass().getName()).log(Level.SEVERE, "Tried to invite member, but CrewParticipant was not crew owner. Participant id: "+crewParticipant.getParticipantId());
FacesMessage message = new FacesMessage(iwrb.getLocalizedString("crew.invitation.inviteMember.genException", "Error occurred, while inviting member. Please try again."));
FacesContext.getCurrentInstance().addMessage(null, message);
return;
}
try {
crewParticipant.inviteMember(memberInvited);
} catch (Exception e) {
Logger.getLogger(getClass().getName()).log(Level.SEVERE, "Exception while inviting member. Tried to invite with participant id: "+getAddMemberParticipantId(), e);
FacesMessage message = new FacesMessage(iwrb.getLocalizedString("crew.invitation.inviteMember.genException", "Error occurred, while inviting member. Please try again."));
FacesContext.getCurrentInstance().addMessage(null, message);
}
}
}
public String getDeleteMemberParticipantId() {
return deleteMemberParticipantId;
}
public void setDeleteMemberParticipantId(String deleteMemberParticipantId) {
this.deleteMemberParticipantId = deleteMemberParticipantId;
}
public boolean isForceIdHack() {
return true;
}
public String getHeader() {
IWContext iwc = IWContext.getIWContext(FacesContext.getCurrentInstance());
IWResourceBundle iwrb = iwc.getIWMainApplication().getBundle(IWBundleStarter.IW_BUNDLE_IDENTIFIER).getResourceBundle(iwc);
String crewLabel = getCrewEditWizardBean().getCrewParticipant().getCrewLabel();
return iwrb.getLocalizedAndFormattedString("crew.invitation.header", "Crew \"{0}\" members", new Object[] {crewLabel == null ? CoreConstants.EMPTY : crewLabel});
}
public String getAddMemberParticipantId() {
return addMemberParticipantId;
}
public void setAddMemberParticipantId(String addMemberParticipantId) {
this.addMemberParticipantId = addMemberParticipantId;
}
public boolean isSearchResultListRendered() {
return searchResultListRendered ? searchResultListRendered : getCrewEditWizardBean().getCrewMembersInvitationSearchResults() != null;
}
public void setSearchResultListRendered(boolean searchResultListRendered) {
this.searchResultListRendered = searchResultListRendered;
}
public void search() {
List searchResults = new ArrayList();
String searchString = getSearchString();
if(searchString != null && !CoreConstants.EMPTY.equals(searchString)) {
try {
RunBusiness runBusiness = getCrewEditWizardBean().getRunBusiness();
Collection participants = runBusiness.getParticipantsBySearchQuery(String.valueOf(getCrewEditWizardBean().getCrewParticipant().getParticipant().getRunYearGroupID()), searchString);
if(participants != null) {
List foundParticipantsIds = new ArrayList(participants.size());
for (Iterator iterator = participants.iterator(); iterator.hasNext();) {
Participant foundParticipant = (Participant)iterator.next();
if(foundParticipantsIds.contains(foundParticipant.getPrimaryKey().toString()))
continue;
foundParticipantsIds.add(foundParticipant.getPrimaryKey().toString());
Map foundParticipantData = new HashMap(3);
foundParticipantData.put(UICrewMembersInivitationStep.sr_participantName, foundParticipant.getUser().getName());
foundParticipantData.put(UICrewMembersInivitationStep.sr_participantNumber, String.valueOf(foundParticipant.getParticipantNumber()));
foundParticipantData.put(UICrewMembersInivitationStep.sr_modifyOnclick, new StringBuffer("document.getElementById('").append(UICrewMembersInivitationStep.crewMembersInvitationBean_memberAddParticipantIdParam).append("').value='").append(foundParticipant.getPrimaryKey().toString()).append("';"));
searchResults.add(foundParticipantData);
}
}
} catch (Exception e) {
Logger.getLogger(getClass().getName()).log(Level.SEVERE, "Exception while searching participants by search query. Query: "+searchString, e);
IWContext iwc = IWContext.getIWContext(FacesContext.getCurrentInstance());
IWResourceBundle iwrb = iwc.getIWMainApplication().getBundle(IWBundleStarter.IW_BUNDLE_IDENTIFIER).getResourceBundle(iwc);
FacesMessage message = new FacesMessage(iwrb.getLocalizedString("crew.invitation.search.genException", "Error occurred, while searching. Please try again."));
FacesContext.getCurrentInstance().addMessage(null, message);
return;
}
if(searchResults.isEmpty()) {
IWContext iwc = IWContext.getIWContext(FacesContext.getCurrentInstance());
IWResourceBundle iwrb = iwc.getIWMainApplication().getBundle(IWBundleStarter.IW_BUNDLE_IDENTIFIER).getResourceBundle(iwc);
FacesMessage message = new FacesMessage(iwrb.getLocalizedString("crew.invitation.search.nothingFound", "Nothing found"));
FacesContext.getCurrentInstance().addMessage(null, message);
}
}
getCrewEditWizardBean().setCrewMembersInvitationSearchResults(searchResults);
setSearchResultListRendered(true);
}
}