package is.idega.idegaweb.member.isi.block.reports.presentation;
import is.idega.idegaweb.member.isi.block.reports.business.WorkReportBusiness;
import is.idega.idegaweb.member.isi.block.reports.data.WorkReport;
import is.idega.idegaweb.member.isi.block.reports.data.WorkReportGroup;
import is.idega.idegaweb.member.isi.block.reports.data.WorkReportMember;
import java.rmi.RemoteException;
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.SortedMap;
import java.util.TreeMap;
import javax.ejb.CreateException;
import javax.ejb.FinderException;
import javax.ejb.RemoveException;
import com.idega.block.entity.business.EntityToPresentationObjectConverter;
import com.idega.block.entity.data.EntityPath;
import com.idega.block.entity.data.EntityPathValueContainer;
import com.idega.block.entity.presentation.EntityBrowser;
import com.idega.block.entity.presentation.converter.CheckBoxConverter;
import com.idega.block.entity.presentation.converter.ConverterConstants;
import com.idega.block.entity.presentation.converter.editable.CheckBoxAsLinkConverter;
import com.idega.block.entity.presentation.converter.editable.DropDownMenuConverter;
import com.idega.block.entity.presentation.converter.editable.DropDownPostalCodeConverter;
import com.idega.block.entity.presentation.converter.editable.EditOkayButtonConverter;
import com.idega.block.entity.presentation.converter.editable.TextEditorConverter;
import com.idega.core.location.data.PostalCode;
import com.idega.data.IDOException;
import com.idega.idegaweb.IWApplicationContext;
import com.idega.idegaweb.IWResourceBundle;
import com.idega.presentation.IWContext;
import com.idega.presentation.PresentationObject;
import com.idega.presentation.Table;
import com.idega.presentation.text.Text;
import com.idega.presentation.ui.Form;
import com.idega.presentation.ui.Parameter;
import com.idega.presentation.ui.SubmitButton;
import com.idega.presentation.ui.TextInput;
import com.idega.user.data.User;
/**
* <p>Title: idegaWeb</p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2003</p>
* <p>Company: idega Software</p>
* @author <a href="thomas@idega.is">Thomas Hilbig</a>
* @version 1.0
* Created on August 26, 2003
*/
public class WorkReportMemberEditor extends WorkReportSelector {
private static final String STEP_NAME_LOCALIZATION_KEY = "workreportmembereditor.step_name";
private static final String SUBMIT_CREATE_NEW_ENTRY_KEY = "submit_cr_new_entry_key";
private static final String SUBMIT_DELETE_ENTRIES_KEY = "submit_del_new_entry_key";
private static final String SUBMIT_CANCEL_KEY = "submit_cancel_key";
private static final String SUBMIT_FINISH_KEY = "submit_finish_key";
private static final String SUBMIT_REOPEN_KEY = "submit_reopen_key";
private static final Integer NEW_ENTRY_ID_VALUE = new Integer(-1);
private static final String ACTION_SHOW_NEW_ENTRY = "action_show_new_entry";
private static final String CHECK_BOX = "checkBox";
private static final String NAME = WorkReportMember.class.getName()+".NAME";
private static final String PERSONAL_ID = WorkReportMember.class.getName()+".PERSONAL_ID";
private static final String STREET_NAME = WorkReportMember.class.getName()+".STREET_NAME";
private static final String POSTAL_CODE_ID = PostalCode.class.getName()+".POSTAL_CODE_ID|POSTAL_CODE";
private static final String SSN = "ssn";
private String errorMessageStyle = "errorMessage";
private List fieldList;
private boolean personalIdnotCorrect = false;
private boolean memberAlreadyExist = false;
private boolean editable = true;
private boolean isReadOnly = false;
private boolean updateWorkReportData = false;
// key: member id, value: collection of league ids, to that the member belongs
private Map memberLeaguesIdMap = null;
// key: league id, int number of members that belong to that league
private Map leagueCountMap = null;
private SortedMap leagueNameId = null;
private Integer mainBoardId = null;
private int playersCount;
private int membersTotalSum;
private String newMemberMessage = null;
public WorkReportMemberEditor() {
super();
setStepNameLocalizableKey(STEP_NAME_LOCALIZATION_KEY);
}
public void main(IWContext iwc) throws Exception {
super.main(iwc);
if (this.getWorkReportId() != -1) {
//sets this step as bold, if another class calls it this will be overwritten
setAsCurrentStepByStepLocalizableKey(STEP_NAME_LOCALIZATION_KEY);
initializeFieldList(iwc);
IWResourceBundle resourceBundle = getResourceBundle(iwc);
String action = parseAction(iwc, resourceBundle);
Form form = new Form();
PresentationObject pres = getContent(iwc, resourceBundle, form, action);
form.maintainParameters(this.getParametersToMaintain());
form.add(pres);
add(form);
}
}
protected void addBreakLine() {}
private void initializeFieldList(IWContext iwc) {
WorkReportBusiness workReportBusiness = getWorkReportBusiness(iwc);
Collection leagues;
try {
leagues = workReportBusiness.getLeaguesOfWorkReportById(getWorkReportId(), iwc);
WorkReportGroup workReportGroup = workReportBusiness.getMainBoardWorkReportGroup(getYear());
this.mainBoardId = (Integer) workReportGroup.getPrimaryKey();
}
catch (RemoteException ex) {
System.err.println(
"[WorkReportMemberEditor]: Can't retrieve WorkReportGroups. Message is: "
+ ex.getMessage());
ex.printStackTrace(System.err);
throw new RuntimeException("[WorkReportMemberEditor]: Can't retrieve WorkReportGroups.");
}
catch (IDOException idEx) {
// add error message
Table errorMessageTable = getErrorMessageTable();
Text text = new Text(idEx.getMessage());
errorMessageTable.add(text);
add(errorMessageTable);
System.err.println(
"[WorkReportMemberEditor]: Can't retrieve WorkReportGroups. Message is: "
+ idEx.getMessage());
//idEx.printStackTrace(System.err);
leagues = new ArrayList();
}
this.fieldList = new ArrayList();
this.fieldList.add(NAME);
this.fieldList.add(PERSONAL_ID);
this.fieldList.add(STREET_NAME);
this.fieldList.add(POSTAL_CODE_ID);
Iterator iterator = leagues.iterator();
this.leagueCountMap = new HashMap();
this.leagueNameId = new TreeMap();
while (iterator.hasNext()) {
WorkReportGroup group = (WorkReportGroup) iterator.next();
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
// special case: REMOVE the league that represents the main board
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Integer primaryKey = (Integer) group.getPrimaryKey();
if (! this.mainBoardId.equals(primaryKey)) {
this.leagueCountMap.put( primaryKey, new Integer(0));
String shortName = group.getShortName();
this.leagueNameId.put(shortName, primaryKey);
}
}
}
private String parseAction(IWContext iwc, IWResourceBundle resourceBundle) {
String action = "";
if (iwc.isParameterSet(SUBMIT_FINISH_KEY)) {
setWorkReportAsFinished(true, iwc);
return action;
}
// does the user want to reopen the report?
if (iwc.isParameterSet(SUBMIT_REOPEN_KEY)) {
setWorkReportAsFinished(false, iwc);
return action;
}
// does the user want to cancel something?
if (iwc.isParameterSet(SUBMIT_CANCEL_KEY)) {
return action;
// !! do nothing else !!
// do not modify entry
// do not create an entry
// do not delete an entry
}
// does the user want to delete an existings entries?
if (iwc.isParameterSet(SUBMIT_DELETE_ENTRIES_KEY)) {
List entriesToDelete = CheckBoxConverter.getResultByParsingUsingDefaultKey(iwc);
if (! entriesToDelete.isEmpty()) {
deleteWorkReportMember(entriesToDelete, iwc);
// !! do nothing else !!
// do not modify entry
// do not create an entry
this.updateWorkReportData = true;
return action;
}
}
// does the user want to save a new entry?
if (iwc.isParameterSet(SUBMIT_CREATE_NEW_ENTRY_KEY)) {
WorkReportBusiness workReportBusiness = getWorkReportBusiness(iwc);
if (iwc.isParameterSet(SSN)) {
String personalId = iwc.getParameter(SSN);
WorkReportMember member = createWorkReportMember(personalId, iwc);
if (member != null) {
String name = member.getName();
String ssn = member.getPersonalId();
String ssnMessage = resourceBundle.getLocalizedString("wr_member_editor_ssn", "ssn");
StringBuffer buffer =
new StringBuffer(resourceBundle.getLocalizedString("wr_member_editor_new_entry_was_created", "A new entry was created"));
buffer.append(": ");
buffer.append(name);
buffer.append(" ");
buffer.append(ssnMessage);
buffer.append(": ");
buffer.append(ssn);
this.newMemberMessage = buffer.toString();
this.updateWorkReportData = true;
}
}
}
// does the user want to modify an existing entity?
if (iwc.isParameterSet(ConverterConstants.EDIT_ENTITY_SUBMIT_KEY)) {
WorkReportBusiness workReportBusiness = getWorkReportBusiness(iwc);
String id = iwc.getParameter(ConverterConstants.EDIT_ENTITY_SUBMIT_KEY);
Integer primaryKey = null;
try {
primaryKey = new Integer(id);
}
catch (NumberFormatException ex) {
System.err.println("[WorkReportBoardMemberEditor] Wrong primary key. Message is: " +
ex.getMessage());
ex.printStackTrace(System.err);
}
WorkReportMember member = findWorkReportMember(primaryKey, iwc);
Iterator iterator = this.fieldList.iterator();
while (iterator.hasNext()) {
String field = (String) iterator.next();
EntityPathValueContainer entityPathValueContainerFromTextEditor =
TextEditorConverter.getResultByEntityIdAndEntityPathShortKey(primaryKey, field, iwc);
EntityPathValueContainer entityPathValueContainerFromDropDownMenu =
DropDownMenuConverter.getResultByEntityIdAndEntityPathShortKey(primaryKey, field, iwc);
if (entityPathValueContainerFromTextEditor.isValid()) {
setValuesOfWorkReportMember(entityPathValueContainerFromTextEditor, member, workReportBusiness, iwc);
}
if (entityPathValueContainerFromDropDownMenu.isValid()) {
setValuesOfWorkReportMember(entityPathValueContainerFromDropDownMenu, member, workReportBusiness, iwc);
}
}
// update the connections to leagues
// get the current leagues of the member
Collection membersLeagueIds = null;
try {
membersLeagueIds = member.getLeagueIDsForMember();
}
catch (IDOException ex) {
System.err.println("[WorkReportMemberEditor]: Couldn't get leagueIDs. Message is: " +
ex.getMessage());
ex.printStackTrace(System.err);
return action;
}
Iterator leagueIterator = this.leagueCountMap.keySet().iterator();
while (leagueIterator.hasNext()) {
Integer key = (Integer) leagueIterator.next();
boolean isChecked = CheckBoxConverter.isEntityChecked(iwc, key.toString(), primaryKey);
boolean wasChecked = membersLeagueIds.contains(key);
if ( isChecked ^ wasChecked) {
if (isChecked) {
addLeague(workReportBusiness, key , member);
}
else {
removeLeague(workReportBusiness, key, member);
}
}
}
member.store();
this.updateWorkReportData = true;
return action;
}
return action;
}
private PresentationObject getContent(IWContext iwc, IWResourceBundle resourceBundle, Form form, String action) {
WorkReportBusiness workReportBusiness = getWorkReportBusiness(iwc);
WorkReport workReport = null;
try {
// create data from the database
int workReportId = getWorkReportId();
workReport = workReportBusiness.getWorkReportById(getWorkReportId());
this.isReadOnly = workReportBusiness.isWorkReportReadOnly(workReportId);
this.editable = ! (this.isReadOnly || workReport.isMembersPartDone());
}
catch (RemoteException ex) {
System.err.println(
"[WorkReportBoardMemberEditor]: Can't retrieve WorkReportBusiness. Message is: "
+ ex.getMessage());
ex.printStackTrace(System.err);
throw new RuntimeException("[WorkReportMemberEditor]: Can't retrieve WorkReportBusiness.");
}
// get members
Collection members;
try {
members =
workReportBusiness.getAllWorkReportMembersForWorkReportId(getWorkReportId());
} catch (RemoteException e) {
System.err.println("[WorkReportMemberEditor] Can't get members. Message was: "+ e.getMessage());
e.printStackTrace(System.err);
members = new ArrayList();
}
// create map: member as key, leagues as value
this.memberLeaguesIdMap = new HashMap();
this.playersCount = 0;
this.membersTotalSum = members.size();
Iterator membersIterator = members.iterator();
while (membersIterator.hasNext()) {
WorkReportMember member = (WorkReportMember) membersIterator.next();
try {
Iterator leagueIDs = member.getLeagueIDsForMember().iterator();
List leaguesList = new ArrayList();
// if there is at least one league the member is a player
if (leagueIDs.hasNext()) {
this.playersCount++;
}
while (leagueIDs.hasNext()) {
Integer leagueId = (Integer) leagueIDs.next();
if ( this.mainBoardId != null && (! this.mainBoardId.equals(leagueId) ) ) {
leaguesList.add(leagueId);
Integer count = (Integer) this.leagueCountMap.get(leagueId);
// if count is equal to null something is wrong: connection between work report and work report group is
// missing. So usually count is equal to null should never occur.
// Also: REMOVE the league that represents the main board
count = (count == null) ? new Integer(1) : new Integer( (count.intValue()) + 1 );
this.leagueCountMap.put(leagueId, count);
}
}
Integer memberId = (Integer) member.getPrimaryKey();
this.memberLeaguesIdMap.put(memberId, leaguesList);
}
catch (IDOException ex) {
System.err.println("[WorkReportMemberEditor] Can't get leagues. Message is: " +
ex.getMessage());
ex.printStackTrace(System.err);
}
}
if (this.updateWorkReportData) {
try {
updateWorkReportDataAndBoardData(iwc);
}
catch (Exception ex) {
String message =
"[WorkReportBoardMemberEditor]: Can't update work report.";
System.err.println(message + " Message is: " + ex.getMessage());
ex.printStackTrace(System.err);
}
}
EntityBrowser browser = getEntityBrowser(members, resourceBundle, form, iwc);
Table errorMessageTable = getErrorMessageTable();
// get new entry message
if (this.newMemberMessage != null) {
Text text = new Text(this.newMemberMessage);
text.setBold();
errorMessageTable.add(text);
add(errorMessageTable);
}
// get error message
if (this.personalIdnotCorrect) {
String message = resourceBundle.getLocalizedString("wr_editor_ssn_not_valid", "The input of the social security number is not valid");
Text text = new Text(message);
// text.setBold();
// text.setFontColor("#FF0000");
errorMessageTable.add(text);
add(errorMessageTable);
}
if (this.memberAlreadyExist) {
String message = resourceBundle.getLocalizedString("wr_account_member_member_with_ssn_already_exist", "The member with the specified social security number does already exist");
Text text = new Text(message);
// text.setBold();
// text.setFontColor("#FF0000");
errorMessageTable.add(text);
add(errorMessageTable);
}
// put browser into a table
if (! this.isReadOnly) {
Table mainTable = new Table(1,2);
mainTable.add(browser, 1,1);
mainTable.setCellspacing(0);
mainTable.setCellpadding(0);
Table buttonTable = new Table(4,1);
if (this.editable) {
PresentationObject inputField = getPersonalIdInputField(resourceBundle);
PresentationObject newEntryButton = getCreateNewEntityButton(resourceBundle);
PresentationObject deleteEntriesButton = getDeleteEntriesButton(resourceBundle);
buttonTable.add(inputField,1,1);
buttonTable.add(newEntryButton,2,1);
buttonTable.add(deleteEntriesButton,3,1);
buttonTable.add(getFinishButton(resourceBundle), 4, 1);
}
else {
// Text text = new Text(resourceBundle.getLocalizedString("wr_member_editor_member_part_finished", "Member part has been finished."));
// text.setBold();
buttonTable.add(getReopenButton(resourceBundle), 4 , 1);
}
mainTable.add(buttonTable,1,2);
return mainTable;
}
//if the report is read only, then it is printed out:
else if(this.isReadOnly){
Table mainTable = new Table(1,2);
mainTable.add(browser, 1,1);
mainTable.setCellspacing(0);
mainTable.setCellpadding(0);
Table readOnlyTable = new Table(1,1);
readOnlyTable.setCellspacing(0);
readOnlyTable.setCellpadding(0);
Text readOnlyText = new Text(resourceBundle.getLocalizedString("WorkReportMemberEditor.report_is_read_only", "The report is read only"));
readOnlyTable.add(readOnlyText,1,1);
mainTable.add(readOnlyTable,1,2);
return mainTable;
}
return browser;
}
public Table getErrorMessageTable() {
Table errorMessageTable = new Table(1,1);
errorMessageTable.setCellpaddingAndCellspacing(0);
errorMessageTable.setWidth(Table.HUNDRED_PERCENT);
errorMessageTable.setAlignment("center");
errorMessageTable.setAlignment(1,1,"center");
errorMessageTable.setStyleClass(1,1,this.errorMessageStyle);
return errorMessageTable;
}
private PresentationObject getPersonalIdInputField(IWResourceBundle resourceBundle) {
Text text = new Text(resourceBundle.getLocalizedString("WorkReportMemberEditor.add_member","Enter personal id"));
text.setBold();
TextInput ssn = new TextInput("ssn");
String error = resourceBundle.getLocalizedString("WorkReportMemberEditor.ssn_not_valid","The personal id you entered is invalid");
ssn.setAsIcelandicSSNumber(error);
Table table = new Table(2,1);
table.add(text,1,1);
table.add(ssn,2,1);
return table;
}
private PresentationObject getCreateNewEntityButton(IWResourceBundle resourceBundle) {
String createNewEntityText = resourceBundle.getLocalizedString("wr_div_board_member_editor_create_new_entry", "New entry");
SubmitButton button = new SubmitButton(createNewEntityText, SUBMIT_CREATE_NEW_ENTRY_KEY, "dummy_value");
button.setAsImageButton(true);
return button;
}
private PresentationObject getDeleteEntriesButton(IWResourceBundle resourceBundle) {
String deleteEntityText = resourceBundle.getLocalizedString("wr_board_member_editor_remove_entries", "Remove");
SubmitButton button = new SubmitButton(deleteEntityText, SUBMIT_DELETE_ENTRIES_KEY, "dummy_value");
button.setAsImageButton(true);
return button;
}
private PresentationObject getFinishButton(IWResourceBundle resourceBundle) {
String finishText = resourceBundle.getLocalizedString("wr_member_editor_finish", "Finish");
SubmitButton button = new SubmitButton(finishText, SUBMIT_FINISH_KEY, "dummy_value");
button.setAsImageButton(true);
return button;
}
private PresentationObject getReopenButton(IWResourceBundle resourceBundle) {
String reopenText = resourceBundle.getLocalizedString("wr_member_editor_reopen", "Reopen");
SubmitButton button = new SubmitButton(reopenText, SUBMIT_REOPEN_KEY, "dummy_value");
button.setAsImageButton(true);
return button;
}
private EntityBrowser getEntityBrowser(Collection entities, IWResourceBundle resourceBundle, Form form, IWContext iwc) {
// define converter
CheckBoxConverter checkBoxConverter = new CheckBoxConverter();
TextEditorConverter textEditorConverter = new TextEditorConverter(form);
String message = resourceBundle.getLocalizedString("wr_member_editor_not_a_valid_ssn", "The input is not a valid social security number");
EditOkayButtonConverter okayConverter = new EditOkayButtonConverter();
okayConverter.maintainParameters(this.getParametersToMaintain());
textEditorConverter.maintainParameters(this.getParametersToMaintain());
DropDownMenuConverter dropDownPostalCodeConverter = getConverterForPostalCode(form);
// define if the converters should be editable
checkBoxConverter.setEditable(this.editable);
textEditorConverter.setEditable(this.editable);
dropDownPostalCodeConverter.setEditable(this.editable);
// define path short keys and map corresponding converters
// if a converter is "null" the default converter of the entity browser is used
Object[] columns = {
"okay", okayConverter,
CHECK_BOX, checkBoxConverter,
NAME, null,
PERSONAL_ID, null,
STREET_NAME, textEditorConverter,
POSTAL_CODE_ID, dropDownPostalCodeConverter};
EntityBrowser browser = EntityBrowser.getInstanceUsingExternalForm();
browser.setLeadingEntity(WorkReportMember.class);
browser.setAcceptUserSettingsShowUserSettingsButton(false,false);
browser.setScrollableWithHeightAndWidth(460, 720);
// maintain parameters
List parameters = getParametersToMaintain();
Iterator para = parameters.iterator();
while (para.hasNext()) {
String parameterKey = (String) para.next();
String parameterValue = iwc.getParameter(parameterKey);
String parameterString = (parameterValue == null) ? "" : parameterValue;
Parameter parameter = new Parameter(parameterKey, parameterString);
browser.addMandatoryParameter(parameter);
}
if( entities!=null && !entities.isEmpty()) {
browser.setDefaultNumberOfRows(entities.size());
}
for (int i = 0; i < columns.length; i+=2) {
String column = (String) columns[i];
EntityToPresentationObjectConverter converter = (EntityToPresentationObjectConverter) columns[i+1];
browser.setMandatoryColumn(i, column);
browser.setEntityToPresentationConverter(column, converter);
}
// add more columns
Iterator iterator = this.leagueNameId.entrySet().iterator();
int i = 100;
while (iterator.hasNext()) {
Map.Entry entry = (Map.Entry) iterator.next();
String leagueName = (String) entry.getKey();
Integer primaryKey = (Integer) entry.getValue();
WorkReportCheckBoxConverter converter = new WorkReportCheckBoxConverter(primaryKey, leagueName);
converter.setEditable(this.editable);
converter.maintainParameters(getParametersToMaintain());
browser.setMandatoryColumn(i++, leagueName);
browser.setEntityToPresentationConverter(leagueName, converter);
}
browser.setDefaultNumberOfRows(Math.min(entities.size(), 20));
browser.setEntities("dummy_string", entities);
// some look settings
browser.setCellpadding(2);
browser.setCellspacing(0);
browser.setBorder(0);
browser.setColorForEvenRows("#EFEFEF");
browser.setColorForOddRows("#FFFFFF");
browser.setColorForHeader("#DFDFDF");
browser.setArtificialCompoundId("workreportmembereditor", null);
return browser;
}
/**
* converter for postal code column
*/
private DropDownMenuConverter getConverterForPostalCode(Form form) {
DropDownPostalCodeConverter dropDownPostalCodeConverter = new DropDownPostalCodeConverter(form);
dropDownPostalCodeConverter.setCountry("Iceland");
dropDownPostalCodeConverter.maintainParameters(getParametersToMaintain());
return dropDownPostalCodeConverter;
}
/** business method: delete WorkReportBoardMembers.
* @param ids - List of primaryKeys (Integer)
*/
private void deleteWorkReportMember(List ids, IWContext iwc) {
Iterator iterator = ids.iterator();
while (iterator.hasNext()) {
Integer id = (Integer) iterator.next();
WorkReportMember member = findWorkReportMember(id, iwc);
if (member != null) {
try {
member.remove();
}
catch (RemoveException ex) {
System.err.println(
"[WorkReportDivisionBoardEditor]: Can't remove WorkReportDivisionBoard. Message is: "
+ ex.getMessage());
ex.printStackTrace(System.err);
// do nothing
}
}
}
}
/** business method: find
* @param primaryKey
* @return desired WorkReportDivisionBoard or null if not found
*/
private WorkReportMember findWorkReportMember(Integer primaryKey, IWApplicationContext iwac) {
WorkReportMember member = null;
WorkReportBusiness workReportBusiness = getWorkReportBusiness(iwac);
try {
member = workReportBusiness.getWorkReportMemberHome().findByPrimaryKey(primaryKey);
}
catch (RemoteException ex) {
System.err.println(
"[WorkReportDivisionBoardEditor]: Can't retrieve WorkReportDivisionBoard. Message is: "
+ ex.getMessage());
ex.printStackTrace(System.err);
throw new RuntimeException("[WorkReportDivisionBoardEditor]: Can't retrieve WorkReportDivisionBoard.");
}
catch (FinderException ex) {
System.err.println(
"[WorkReportDivisionBoardEditor]: Can't find WorkReportDivisionBoard. Message is: "
+ ex.getMessage());
ex.printStackTrace(System.err);
}
return member;
}
// business method: create
private WorkReportMember createWorkReportMember(String personalId, IWApplicationContext iwac) {
WorkReportMember member = findWorkReportMember(personalId, iwac);
if (member != null) {
this.memberAlreadyExist = true;
return null;
}
try {
member = getWorkReportBusiness(iwac).createWorkReportMember(getWorkReportId(), personalId);
if (member == null) {
this.personalIdnotCorrect = true;
}
return member;
}
catch (CreateException e) {
System.err.println("[WorkReportDivisionBoardEditor] Could not create new WorkReportDivisionBoard. Message is: "+ e.getMessage());
e.printStackTrace(System.err);
}
catch (RemoteException ex) {
System.err.println(
"[WorkReportMemberEditor]: Can't retrieve WorkReportBusiness. Message is: "
+ ex.getMessage());
ex.printStackTrace(System.err);
throw new RuntimeException("[WorkReportMemberEditor]: Can't retrieve WorkReportBusiness.");
}
return null;
}
private void updateWorkReportDataAndBoardData(IWApplicationContext iwac)
throws RemoteException, FinderException, IDOException{
WorkReportBusiness workReportBusiness = getWorkReportBusiness(iwac);
try {
workReportBusiness.updateWorkReportData(getWorkReportId());
}
catch (Exception ex) {
String message =
"[WorkReportBoardMemberEditor]: Can't update work report data.";
System.err.println(message + " Message is: " + ex.getMessage());
ex.printStackTrace(System.err);
}
// WorkReport workReport = workReportBusiness.getWorkReportById(getWorkReportId());
//
// workReport.setNumberOfMembers(membersTotalSum);
// workReport.setNumberOfPlayers(playersCount);
// workReport.store();
//
// WorkReportDivisionBoardHome home = workReportBusiness.getWorkReportDivisionBoardHome();
// Collection boards = home.findAllWorkReportDivisionBoardByWorkReportId(getWorkReportId());
//
// Iterator iterator = boards.iterator();
// while (iterator.hasNext()) {
// WorkReportDivisionBoard board = (WorkReportDivisionBoard) iterator.next();
// WorkReportGroup workReportGroup = board.getLeague();
// String leagueName = workReportGroup.getName();
// Integer number = (Integer) leagueCountMap.get(leagueName);
// board.setNumberOfPlayers(number.intValue());
// board.store();
}
private void setValuesOfWorkReportMember(EntityPathValueContainer valueContainer, WorkReportMember member, WorkReportBusiness workReportBusiness, IWApplicationContext iwac) {
String pathShortKey = valueContainer.getEntityPathShortKey();
Object value = valueContainer.getValue();
// if (pathShortKey.equals(PERSONAL_ID)) {
// String socialSecurityNumber = value.toString();
// User user = getUserBySocialSecurityNumber(socialSecurityNumber, workReportBusiness);
// // there are some users in the system without any social security number
// if (socialSecurityNumber.length() == 0 || user == null) {
// personalIdnotCorrect = true;
// return;
// }
// WorkReportMember wrMember = findWorkReportMember(socialSecurityNumber, iwac);
// // if you have found the member that you are currently editing do not complain please
// if (wrMember != null &&
// ! (member.getPrimaryKey().equals(wrMember.getPrimaryKey())) ) {
// memberAlreadyExist = true;
// return;
// }
//
// member.setName(user.getName());
// member.setUserId(((Integer) user.getPrimaryKey()).intValue());
// member.setPersonalId(value.toString());
//
// }
if (pathShortKey.equals(STREET_NAME)) {
member.setStreetName(value.toString());
}
else if(pathShortKey.equals(POSTAL_CODE_ID)) {
try {
int postalCode = Integer.parseInt(value.toString());
if (ConverterConstants.NULL_ENTITY_ID.intValue() == postalCode) {
member.setPostalCode(null);
}
else {
member.setPostalCodeID(postalCode);
}
}
catch (NumberFormatException ex) {
}
}
}
/** business method: find
* @param primaryKey
* @return desired WorkReportDivisionBoard or null if not found
*/
private WorkReportMember findWorkReportMember(String ssn, IWApplicationContext iwac) {
WorkReportMember member = null;
WorkReportBusiness workReportBusiness = getWorkReportBusiness(iwac);
try {
member = workReportBusiness.getWorkReportMemberHome().
findWorkReportMemberBySocialSecurityNumberAndWorkReportId(ssn, getWorkReportId());
}
catch (RemoteException ex) {
System.err.println(
"[WorkReportDivisionBoardEditor]: Can't retrieve WorkReportDivisionBoard. Message is: "
+ ex.getMessage());
ex.printStackTrace(System.err);
throw new RuntimeException("[WorkReportDivisionBoardEditor]: Can't retrieve WorkReportDivisionBoard.");
}
catch (FinderException ex) {
System.err.println(
"[WorkReportDivisionBoardEditor]: Can't find WorkReportDivisionBoard. Message is: "
+ ex.getMessage());
ex.printStackTrace(System.err);
member = null;
}
return member;
}
private User getUserBySocialSecurityNumber(String socialSecurirtyNumber, WorkReportBusiness workReportBusiness) {
User user = null;
try {
user = workReportBusiness.getUser(socialSecurirtyNumber);
}
catch (FinderException ex) {
String message =
"[WorkReportAccountEditor]: Can't retrieve user.";
System.err.println(message + " Message is: " + ex.getMessage());
ex.printStackTrace(System.err);
}
catch (RemoteException ex) {
String message =
"[WorkReportAccountEditor]: Can't retrieve user.";
System.err.println(message + " Message is: " + ex.getMessage());
ex.printStackTrace(System.err);
}
return user;
}
// business method: remove league
private void removeLeague(WorkReportBusiness workReportBusiness, Integer groupToBeRemoved, WorkReportMember member) {
try {
WorkReportGroup workReportGroup = workReportBusiness.getWorkReportGroupHome().findByPrimaryKey(groupToBeRemoved);
workReportBusiness.removeWorkReportGroupFromEntity(getWorkReportId(), workReportGroup, member);
}
catch (FinderException findEx) {
String message =
"[WorkReportMemberEditor]: Can't retrieve work report group.";
System.err.println(message + " Message is: " + findEx.getMessage());
findEx.printStackTrace(System.err);
}
catch (RemoteException ex) {
System.err.println(
"[WorkReportBoardMemberEditor]: Can't retrieve WorkReportBusiness. Message is: "
+ ex.getMessage());
ex.printStackTrace(System.err);
throw new RuntimeException("[WorkReportBoardMemberEditor]: Can't retrieve WorkReportBusiness.");
}
}
// business method: add league
private void addLeague(WorkReportBusiness workReportBusiness, Integer groupToBeAdded, WorkReportMember member) {
try {
WorkReportGroup workReportGroup = workReportBusiness.getWorkReportGroupHome().findByPrimaryKey(groupToBeAdded);
workReportBusiness.addWorkReportGroupToEntity(getWorkReportId(), workReportGroup, member);
}
catch (FinderException findEx) {
String message =
"[WorkReportMemberEditor]: Can't retrieve work report group.";
System.err.println(message + " Message is: " + findEx.getMessage());
findEx.printStackTrace(System.err);
}
catch (RemoteException ex) {
System.err.println(
"[WorkReportBoardMemberEditor]: Can't retrieve WorkReportBusiness. Message is: "
+ ex.getMessage());
ex.printStackTrace(System.err);
throw new RuntimeException("[WorkReportBoardMemberEditor]: Can't retrieve WorkReportBusiness.");
}
}
private void setWorkReportAsFinished(boolean setAsFinished, IWContext iwc) {
int workReportId = getWorkReportId();
WorkReportBusiness workReportBusiness = getWorkReportBusiness(iwc);
try {
WorkReport workReport = workReportBusiness.getWorkReportById(workReportId);
workReport.setMembersPartDone(setAsFinished);
workReport.store();
}
catch (RemoteException ex) {
String message =
"[WorkReportAccountEditor]: Can't retrieve WorkReportBusiness.";
System.err.println(message + " Message is: " + ex.getMessage());
ex.printStackTrace(System.err);
throw new RuntimeException(message);
}
}
/**
* CheckBoxConverterHelper:
* Inner class.
*/
class WorkReportCheckBoxConverter extends CheckBoxAsLinkConverter {
private String leagueName;
private Integer leagueId;
public WorkReportCheckBoxConverter(Integer key, String leagueName) {
super(key.toString());
this.leagueName = leagueName;
// save convertions from string to integer
this.leagueId = key;
}
protected boolean shouldEntityBeChecked(Object entity, Integer primaryKey) {
Collection leagues = (Collection) WorkReportMemberEditor.this.memberLeaguesIdMap.get(primaryKey);
return (leagues != null && leagues.contains(this.leagueId));
}
public PresentationObject getHeaderPresentationObject(
EntityPath entityPath,
EntityBrowser browser,
IWContext iwc) {
StringBuffer buffer = new StringBuffer(this.leagueName);
buffer.append(": ");
buffer.append(WorkReportMemberEditor.this.leagueCountMap.get(this.leagueId));
Text text = new Text(buffer.toString());
text.setBold();
return text;
}
}
}