package se.idega.idegaweb.commune.school.presentation;
import java.rmi.RemoteException;
import java.sql.Date;
import java.sql.Timestamp;
import java.text.MessageFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Collection;
import java.util.Collections;
import java.util.Enumeration;
import java.util.HashSet;
import java.util.Iterator;
import javax.ejb.FinderException;
import se.idega.idegaweb.commune.accounting.invoice.data.RegularPaymentEntry;
import se.idega.idegaweb.commune.accounting.invoice.data.RegularPaymentEntryHome;
import se.idega.idegaweb.commune.business.CommuneUserBusiness;
import se.idega.idegaweb.commune.care.resource.data.ResourceClassMember;
import se.idega.idegaweb.commune.care.resource.data.ResourceClassMemberHome;
import se.idega.idegaweb.commune.message.business.CommuneMessageBusiness;
import se.idega.idegaweb.commune.school.business.SchoolCommuneBusiness;
import com.idega.block.process.message.data.Message;
import com.idega.block.school.business.SchoolBusiness;
import com.idega.block.school.data.School;
import com.idega.block.school.data.SchoolClass;
import com.idega.block.school.data.SchoolClassHome;
import com.idega.block.school.data.SchoolClassMember;
import com.idega.block.school.data.SchoolClassMemberHome;
import com.idega.block.school.data.SchoolHome;
import com.idega.block.school.data.SchoolYear;
import com.idega.block.school.data.SchoolYearHome;
import com.idega.business.IBOLookup;
import com.idega.core.location.data.Address;
import com.idega.data.IDOLookup;
import com.idega.data.IDOLookupException;
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.DateInput;
import com.idega.presentation.ui.Form;
import com.idega.presentation.ui.SubmitButton;
import com.idega.presentation.ui.TextInput;
import com.idega.user.data.User;
import com.idega.user.presentation.UserSearcher;
import com.idega.util.IWTimestamp;
/**
* TerminateClassMembership is an IdegaWeb block were the user can terminate a
* membership in a school class.
* <p>
* Last modified: $Date: 2005/10/13 18:36:11 $ by $Author: laddi $
*
* @author <a href="http://www.staffannoteberg.com">Staffan N�teberg</a>
* @version $Revision: 1.38 $
* @see com.idega.block.school.data.SchoolClassMember
* @see se.idega.idegaweb.commune.school.businessSchoolCommuneBusiness
* @see javax.ejb
*/
public class TerminateClassMembership extends SchoolCommuneBlock {
private static final String PREFIX = "TermClassMemb_";
private static final String ADDRESS_DEFAULT = "Adress";
private static final String ADDRESS_KEY = PREFIX + "address";
private static final String BACK_DEFAULT = "Tillbaka";
private static final String BACK_KEY = PREFIX + "back";
private static final String MEMBERSHIP_DEFAULT = "Placering";
private static final String MEMBERSHIP_KEY
= PREFIX + "membership";
private static final String ISTERMINATED_DEFAULT = " har avslutats";
private static final String ISTERMINATED_KEY = PREFIX + "isTerminated";
private static final String NOTES_DEFAULT = "Kommentar";
private static final String NOTES_KEY = PREFIX + "notes";
private static final String NOTKNOWN_DEAFULT = "Inte k�nd";
private static final String NOTKNOWN_KEY = PREFIX + "notKnown";
private static final String NOUSERFOUND_KEY = PREFIX + "noUserFound";
private static final String NOUSERFOUND_DEFAULT
= "Inga tr�ffar p� valda s�kvillkor";
public static final String MEMBER_KEY = PREFIX + "member";
private static final String MEMBERSHIPOF_DEFAULT = "Placeringen av ";
private static final String MEMBERSHIPOF_KEY = PREFIX + "membershipOf";
private static final String ONLY_UNENDED_PLACEMENTS_SEARCHABLE_KEY = PREFIX + "only_unended_placements_searchable";
private static final String ONLY_MOVING_TO_OTHER_MUNICIP_KEY = PREFIX + "only_moving_to_other_municip";
private static final String PROVIDERNOTFOUND_DEFAULT
= "Anordnare ej funnen i databas";
private static final String PROVIDERNOTFOUND_KEY
= PREFIX + "providerNotFound";
private static final String SCHOOLCLASS_DEFAULT = "klass";
private static final String SCHOOLCLASS_KEY = PREFIX + "schoolClass";
private static final String SCHOOLYEAR_DEFAULT = "skol�r";
private static final String SCHOOLYEAR_KEY = PREFIX + "schoolYear";
private static final String STARTDATE_DEFAULT = "Startdatum";
private static final String STARTDATE_KEY = PREFIX + "startDate";
private static final String TERMINATE_MESSAGE_KEY = PREFIX + "terminate_message";
private static final String TERMINATE_MESSAGE_DEFAULT = "Placeringen f�r {0} i {2}/{1} avslutades {3,date} av {5}.\n\n{4}.";
private static final String TERMINATEMEMBERSHIP_DEFAULT
= "Avsluta placering";
private static final String TERMINATEMEMBERSHIP_KEY
= PREFIX + "terminateMembership";
private static final String TERMINATIONDATE_DEFAULT = "Avslutningsdatum";
private static final String TERMINATIONDATE_KEY
= PREFIX + "terminationDate";
private static final String EMPTYTERMINATIONDATE_DEFAULT = "You have to set the termination date!";
private static final String EMPTYTERMINATIONDATE_KEY
= PREFIX + "emptyTerminationDate";
private static final String EARLIESTTERMINATIONDATE_DEFAULT = "Earliest possible placement date is";
private static final String EARLIESTTERMINATIONDATE_KEY
= PREFIX + "earlyTerminationDate";
private static final String EARLIESTTERMINATIONDATE2_DEFAULT = "Please contact the Kundvalsgruppen if you need to delete a placement.";
private static final String EARLIESTTERMINATIONDATE2_KEY
= PREFIX + "early2TerminationDate";
private static final String TOOMANYSTUDENTSFOUND_DEFAULT
= "F�r m�nga tr�ffar f�r att visas. F�rs�k begr�nsa s�kningen.";
private static final String TOOMANYSTUDENTSFOUND_KEY
= PREFIX + "tooManyStudentsFound";
private static final String WRONGDATEFORMAT_DEFAULT
= "Felaktigt datumformat";
private static final String WRONGDATEFORMAT_KEY
= PREFIX + "wrongDateFormat";
private static final String YOUMUSTBELOGGEDON_DEFAULT
= "Du m�ste vara inloggad f�r att anv�nda denna funktion";
private static final String YOUMUSTBELOGGEDON_KEY
= PREFIX + "youMustBeLoggedOn";
private static final String ACTION_TERMINATE_KEY
= PREFIX + "terminateMembership";
private static final SimpleDateFormat shortDateFormatter
= new SimpleDateFormat ("yyyyMMdd");
private static int MAX_FOUND_USER_COLS = 20;
private static int MAX_FOUND_USER_ROWS = 1;
private static int MAX_FOUND_USERS
= MAX_FOUND_USER_COLS * MAX_FOUND_USER_ROWS;
/**
* Main is the event handler of Terminate Class Membership Form.
*
* @param context session data like user info etc.
*/
public void init (final IWContext context) {
try {
if (!context.isLoggedOn ()) {
displayRedText (YOUMUSTBELOGGEDON_KEY,
YOUMUSTBELOGGEDON_DEFAULT);
} else if (context.isParameterSet (ACTION_TERMINATE_KEY)) {
add (createMainTable (getTerminateMembershipTable (context)));
} else {
add (createMainTable (getUserSearchFormTable (context)));
}
} catch (final Exception exception) {
logWarning ("Exception caught in " + getClass ().getName ()
+ " " + (new Date (System.currentTimeMillis())));
logWarning ("Parameters:");
final Enumeration enumer = context.getParameterNames ();
while (enumer.hasMoreElements ()) {
final String key = (String) enumer.nextElement ();
logWarning ('\t' + key + "='"
+ context.getParameter (key) + "'");
}
log (exception);
add ("Det intr�ffade ett fel. F�rs�k igen senare.");
}
}
/**
* Returns a styled table with content placed properly
*
* @param content the page unique content
* @return Table to add to output
*/
private Table createMainTable (final PresentationObject content) {
final Table mainTable = new Table();
mainTable.setCellpadding (getCellpadding ());
mainTable.setCellspacing (getCellspacing ());
mainTable.setWidth (Table.HUNDRED_PERCENT);
mainTable.setColumns (1);
mainTable.setRowColor (1, getHeaderColor ());
mainTable.setRowAlignment(1, Table.HORIZONTAL_ALIGN_CENTER) ;
mainTable.add (getSmallHeader (localize (TERMINATEMEMBERSHIP_KEY,
TERMINATEMEMBERSHIP_DEFAULT)),
1, 1);
mainTable.add (content, 1, 2);
return mainTable;
}
/**
* Terminates membership in a school class for the user kept in session
* object MEMBER_KEY
*
* @param context session data
*/
private Table getTerminateMembershipTable (final IWContext context)
throws RemoteException, FinderException, javax.ejb.CreateException {
// find input values
final Integer memberId
= new Integer (context.getParameter (ACTION_TERMINATE_KEY));
final SchoolClassMember member
= getSchoolClassMemberHome ().findByPrimaryKey (memberId);
final Date date
= getDateFromString (context.getParameter (TERMINATIONDATE_KEY));
final User child = member.getStudent ();
final String childName = child.getFirstName () + " "
+ child.getLastName ();
final User adminUser = context.getCurrentUser ();
final String adminUserName = adminUser == null ? "Admin"
: adminUser.getFirstName () + " " + adminUser.getLastName ();
final SchoolClass schoolClass = member.getSchoolClass ();
final School school = schoolClass.getSchool ();
final Table table = new Table ();
if (null == date) {
final Text text = new Text (localize (WRONGDATEFORMAT_KEY,
WRONGDATEFORMAT_DEFAULT));
text.setFontColor ("#ff0000");
table.add (text, 1, 1);
} else {
// terminate membership
final String notes = context.getParameter (NOTES_KEY);
member.setNotes (notes);
IWTimestamp terminationDate = new IWTimestamp (date);
member.setRemovedDate (terminationDate.getTimestamp());
member.store ();
getBusiness().getSchoolBusiness().addToSchoolClassMemberLog(member, member.getSchoolClass(), terminationDate.getDate(), context.getCurrentUser());
terminateResources (member, terminationDate.getTimestamp());
terminateRegularPayments (child, school, terminationDate.getTimestamp());
// put confirmation output
final String subject = localize
(MEMBERSHIPOF_KEY, MEMBERSHIPOF_DEFAULT) + childName
+ localize (ISTERMINATED_KEY, ISTERMINATED_DEFAULT);
table.add (new Text (subject), 1, 1);
// send confirmation message
final CommuneMessageBusiness messageBusiness = (CommuneMessageBusiness) IBOLookup
.getServiceInstance (context, CommuneMessageBusiness.class);
final CommuneUserBusiness communeUserBusiness
= (CommuneUserBusiness) IBOLookup.getServiceInstance
(context, CommuneUserBusiness.class);
final User custodian
= communeUserBusiness.getCustodianForChild (child);
if (null != custodian) {
final int custodianId
= ((Integer) custodian.getPrimaryKey ()).intValue ();
final Object [] arguments =
{ childName, schoolClass.getName (), school.getName (),
date, notes, adminUserName };
final String messageBody = MessageFormat.format
(localize (TERMINATE_MESSAGE_KEY,
TERMINATE_MESSAGE_DEFAULT), arguments);
final Message message = messageBusiness.createUserMessage
(custodianId, subject, messageBody);
message.setSender (context.getCurrentUser ());
message.store();
}
}
table.setHeight (2, 12);
table.add (getSmallLink (localize (BACK_KEY, BACK_DEFAULT)), 1, 3);
return table;
}
private void terminateRegularPayments(final User child, final School school, final Timestamp terminationDate) throws IDOLookupException {
try {
final RegularPaymentEntryHome home = (RegularPaymentEntryHome) IDOLookup.getHome (RegularPaymentEntry.class);
final Date sqlDate = new Date (terminationDate.getTime ());
final Collection regularPaymentEntries
= home.findOngoingByUserAndProviderAndDate
(child, school, sqlDate);
for (Iterator i = regularPaymentEntries.iterator ();
i.hasNext ();) {
final RegularPaymentEntry regularPaymentEntry
= (RegularPaymentEntry) i.next ();
regularPaymentEntry.setTo (sqlDate);
regularPaymentEntry.store ();
}
} catch (FinderException e) {
// no problem, no regular payments to remove
}
}
private void terminateResources
(final SchoolClassMember placement, Timestamp terminationDate)
throws IDOLookupException {
try {
final Collection resources = getResourceClassMemberHome ()
.findAllByClassMemberId ((Integer) placement.getPrimaryKey ());
for (Iterator i = resources.iterator (); i.hasNext ();) {
final ResourceClassMember resource = (ResourceClassMember) i.next ();
final Timestamp resourceEndDate = null == resource.getEndDate ()
? null : new Timestamp (resource.getEndDate ().getTime ());
if (null == resourceEndDate
|| terminationDate.before (resourceEndDate)) {
resource.setEndDate (new Date (terminationDate.getTime ()));
resource.store ();
}
}
} catch (FinderException e) {
// no problem, no resources attached to this placement
}
}
private static ResourceClassMemberHome getResourceClassMemberHome ()
throws IDOLookupException {
return (ResourceClassMemberHome)
IDOLookup.getHome (ResourceClassMember.class);
}
/**
* Shows a form where the user can enter ssn, first name and/or last name
* and then after first search, click on one of possibly more than one name
* in the search result.
*
* @param context session data
* @exception RemoteException if exception happens in lower layer
*/
private Table getUserSearchFormTable (final IWContext context)
throws RemoteException, FinderException {
// set up searcher
final UserSearcher searcher = createSearcher ();
fillSearcherWithStudents (context, searcher);
final User foundUser = searcher.getUser ();
// output result
final Table table = new Table ();
final Form searchForm = new Form();
searchForm.setOnSubmit("return checkInfoForm()");
searchForm.add (searcher);
table.add (searchForm, 1, 1);
if (null == foundUser) {
final String message1 = localize (ONLY_MOVING_TO_OTHER_MUNICIP_KEY,
ONLY_MOVING_TO_OTHER_MUNICIP_KEY);
final String message2 = localize (ONLY_UNENDED_PLACEMENTS_SEARCHABLE_KEY,
ONLY_UNENDED_PLACEMENTS_SEARCHABLE_KEY);
table.add (getSmallText ("- " + message1), 1, 2);
table.add (getSmallText ("- " + message2), 1, 3);
} else {
// exactly one user found - display user and termination form
final Table terminateTable = new Table ();
terminateTable.add (getStudentTable (context, foundUser), 1, 2);
final Form terminateForm = new Form ();
terminateForm.add (terminateTable);
table.add (terminateForm, 1, 3);
}
return table;
}
/**
* Retreives students that are currently members of a school class
*
* @param context session data
* @param searcher to use for searching
* @return number of users found
* @exception RemoteException if exception happens in lower layer
*/
private void fillSearcherWithStudents (final IWContext context,
final UserSearcher searcher)
throws RemoteException {
final Collection students = new HashSet ();
try {
// 1. start with a raw search
searcher.process (context);
Collection usersFound = searcher.getUsersFound ();
if (null == usersFound) {
final User singleUser = searcher.getUser ();
if (null != singleUser) {
usersFound = Collections.singleton (singleUser);
} else {
throw new FinderException ();
}
}
// 2. filter out students that are placed and that the logged on
// user is authorized to see
final SchoolCommuneBusiness communeBusiness
= (SchoolCommuneBusiness) IBOLookup.getServiceInstance
(context, SchoolCommuneBusiness.class);
final SchoolBusiness schoolBusiness
= communeBusiness.getSchoolBusiness ();
final SchoolClassMemberHome memberHome
= schoolBusiness.getSchoolClassMemberHome ();
final int schoolId = getSchoolID ();
try {
final Collection members = memberHome
.findAllBySchoolAndUsersWithSchoolYearAndNotRemoved
(schoolId, usersFound);
for (Iterator i = members.iterator (); i.hasNext ();) {
final SchoolClassMember student
= (SchoolClassMember) i.next ();
if (MAX_FOUND_USERS <= students.size ()) {
// too many students found
displayRedText (TOOMANYSTUDENTSFOUND_KEY,
TOOMANYSTUDENTSFOUND_DEFAULT);
throw new FinderException ();
}
students.add (student.getStudent ());
}
} catch (FinderException e) {
// no problem, nu students found
}
if (!usersFound.isEmpty () && students.isEmpty ()) {
displayRedText (NOUSERFOUND_KEY, NOUSERFOUND_DEFAULT);
}
} catch (FinderException e) {
// no students found or too many students found
// Collection 'students' will have the right members anyway
}
// 3. Set up search result for display
if (students.isEmpty ()) {
searcher.setUser (null);
searcher.setUsersFound (null);
} else if (1 == students.size ()) {
searcher.setUser ((User) students.toArray () [0]);
searcher.setUsersFound (null);
} else {
searcher.setUsersFound (students);
}
}
/**
* Creates a table with address, school name etc. for this student
*
* @param context session data
* @param user the student
* @return filled or empty collection of students - never 'null'
* @exception RemoteException if exception happens in lower layer
*/
private Table getStudentTable
(final IWContext context, final User user) throws RemoteException,
FinderException {
final SchoolCommuneBusiness communeBusiness
= (SchoolCommuneBusiness) IBOLookup.getServiceInstance
(context, SchoolCommuneBusiness.class);
final SchoolBusiness schoolBusiness
= communeBusiness.getSchoolBusiness ();
final SchoolClassMemberHome memberHome
= schoolBusiness.getSchoolClassMemberHome ();
final int schoolId = getSchoolID ();
final Collection members = memberHome
.findAllBySchoolAndUsersWithSchoolYearAndNotRemoved
(schoolId, java.util.Collections.singleton (user));
final Table table = new Table ();
table.setColumns (2);
int row = 1;
final Text addressHeader = new Text (localize (ADDRESS_KEY,
ADDRESS_DEFAULT) + ':');
IWTimestamp stamp = new IWTimestamp();
addressHeader.setBold ();
final Text address = new Text (getAddressStringFromUser (user));
table.add (addressHeader, 1, row);
table.add (address, 2, row++);
table.setHeight (row++, 24);
for (Iterator i = members.iterator (); i.hasNext ();) {
final SchoolClassMember student = (SchoolClassMember) i.next ();
final Text memberHeader = new Text
(localize (MEMBERSHIP_KEY, MEMBERSHIP_DEFAULT) + ':');
memberHeader.setBold ();
final Text member = new Text (null != student ? getMembershipString
(student, communeBusiness) : "ej placerad");
final Text startDateHeader = new Text
(localize (STARTDATE_KEY, STARTDATE_DEFAULT) + ':');
memberHeader.setBold ();
startDateHeader.setBold ();
final Text startDate = new Text (null != student ? shortDateFormatter.format(student.getRegisterDate()) : "ej placerad");
final Text terminationDateHeader = new Text
(localize (TERMINATIONDATE_KEY, TERMINATIONDATE_DEFAULT) + ':');
terminationDateHeader.setBold ();
/*final TextInput terminationDateInput = (TextInput) getStyledInterface
(new TextInput (TERMINATIONDATE_KEY));
terminationDateInput.setLength (10);
*/
final DateInput terminationDateInput = (DateInput) getStyledInterface
(new DateInput (TERMINATIONDATE_KEY));
terminationDateInput.setAsNotEmpty(localize(EMPTYTERMINATIONDATE_KEY, EMPTYTERMINATIONDATE_DEFAULT));
if (isAdmin(context)){
terminationDateInput.setYearRange(stamp.getYear() - 1, stamp.getYear() + 3);
}
IWTimestamp today = new IWTimestamp();
IWTimestamp todayCompare = new IWTimestamp();
IWTimestamp registerDate = new IWTimestamp(student.getRegisterDate());
IWTimestamp earliestPossiblePlacementDate = null;
boolean early2Contact = false;
if (!isAdmin(context)){
if (today.isEarlierThan(registerDate)){
registerDate.addDays(1);
earliestPossiblePlacementDate = new IWTimestamp(registerDate);
early2Contact = true;
}
else if (today.isLaterThan(registerDate)){
todayCompare.addWeeks(-2);
if (todayCompare.isEarlierThan(registerDate)){
registerDate.addDays(1);
earliestPossiblePlacementDate= registerDate;
early2Contact = true;
}
else {
today.addWeeks(-2);
earliestPossiblePlacementDate = today;
}
}
else { //same day
today.addDays(1);
earliestPossiblePlacementDate = today;
early2Contact = true;
}
if (early2Contact){
terminationDateInput.setEarliestPossibleDate(earliestPossiblePlacementDate.getDate(), localize(EARLIESTTERMINATIONDATE_KEY, EARLIESTTERMINATIONDATE_DEFAULT) + ": " + new IWTimestamp(earliestPossiblePlacementDate).getLocaleDate(context.getCurrentLocale(), IWTimestamp.SHORT)+ " " + localize(EARLIESTTERMINATIONDATE2_KEY, EARLIESTTERMINATIONDATE2_DEFAULT));
}
else {
terminationDateInput.setEarliestPossibleDate(earliestPossiblePlacementDate.getDate(), localize(EARLIESTTERMINATIONDATE_KEY, EARLIESTTERMINATIONDATE_DEFAULT) + ": " + new IWTimestamp(earliestPossiblePlacementDate).getLocaleDate(context.getCurrentLocale(), IWTimestamp.SHORT));
}
}
//terminationDateInput.setContent
// (shortDateFormatter.format(new Date (System.currentTimeMillis ())));
final Text notesHeader = new Text (localize (NOTES_KEY, NOTES_DEFAULT)
+ ":");
notesHeader.setBold ();
final TextInput notesInput
= (TextInput) getStyledInterface (new TextInput (NOTES_KEY));
notesInput.setLength (40);
// put interface objects in output table
table.add (memberHeader, 1, row);
table.add (member, 2, row++);
table.add (startDateHeader, 1, row);
table.add (startDate, 2, row++);
table.add (terminationDateHeader, 1, row);
table.add (terminationDateInput, 2, row++);
table.add (notesHeader, 1, row);
table.add (notesInput, 2, row++);
final String buttonText
= getLocalizedString (TERMINATEMEMBERSHIP_KEY,
TERMINATEMEMBERSHIP_DEFAULT);
final SubmitButton submit = (SubmitButton) getButton
(new SubmitButton (buttonText, ACTION_TERMINATE_KEY,
student.getPrimaryKey () + ""));
table.add (submit, 1, row++);
table.setHeight (row++, 24);
}
return table;
}
/**
* Gets address information for this user
*
* @param user the person to get info about
* @return displayable string with address info
*/
private String getAddressStringFromUser (final User user) {
String result = localize (NOTKNOWN_KEY, NOTKNOWN_DEAFULT);
final Collection addressCollection = user.getAddresses ();
if (null != addressCollection && !addressCollection.isEmpty ()) {
final Address address = (Address) addressCollection.toArray () [0];
result = address.getStreetName () + address.getStreetNumber ()
+ ", " + address.getPostalAddress ();
}
return result;
}
/**
* Gets string with info about current school class and school for this user
*
* @param student the person to get info about
* @param communeBusiness utility business object
* @return string with info about current school class membership
* @exception RemoteException if something fails in business layer
*/
private String getMembershipString
(final SchoolClassMember student,
final SchoolCommuneBusiness communeBusiness) throws RemoteException {
// get some business objects
final SchoolBusiness schoolBusiness
= communeBusiness.getSchoolBusiness ();
final SchoolClassHome classHome = schoolBusiness.getSchoolClassHome ();
final SchoolHome schoolHome = schoolBusiness.getSchoolHome ();
final SchoolYearHome yearHome = schoolBusiness.getSchoolYearHome ();
try {
// find school class
final Integer classId = new Integer (student.getSchoolClassId ());
final SchoolClass schoolClass
= classHome.findByPrimaryKey (classId);
// find school
final Integer schoolId = new Integer (schoolClass.getSchoolId ());
final School school = schoolHome.findByPrimaryKey (schoolId);
//find school year
final Integer yearId = new Integer (student.getSchoolYearId ());
final SchoolYear schoolYear = yearHome.findByPrimaryKey (yearId);
return school.getName () + ", "
+ localize (SCHOOLYEAR_KEY, SCHOOLYEAR_DEFAULT) + " "
+ schoolYear.getName () + ", "
+ localize (SCHOOLCLASS_KEY, SCHOOLCLASS_DEFAULT) + " "
+ schoolClass.getName ();
} catch (final FinderException e) {
return localize (PROVIDERNOTFOUND_KEY, PROVIDERNOTFOUND_DEFAULT);
}
}
private static Date getDateFromString (final String rawInput) {
final StringBuffer digitOnlyInput = new StringBuffer();
for (int i = 0; i < rawInput.length(); i++) {
if (Character.isDigit(rawInput.charAt(i))) {
digitOnlyInput.append(rawInput.charAt(i));
}
}
if (digitOnlyInput.length() == 6) {
digitOnlyInput.insert(0, 20);
}
if (digitOnlyInput.length() != 8) {
return null;
}
final int year = new Integer(digitOnlyInput.substring(0, 4)).intValue();
final int month
= new Integer(digitOnlyInput.substring(4, 6)).intValue();
final int day = new Integer(digitOnlyInput.substring(6, 8)).intValue();
if (year < 2003 || month < 1 || month > 12 || day < 1 || day > 31) {
return null;
}
final Calendar calendar = Calendar.getInstance ();
calendar.set (year, month - 1, day);
return new Date (calendar.getTimeInMillis ());
}
private String getLocalizedString(final String key, final String value) {
return getResourceBundle().getLocalizedString(key, value);
}
private void displayRedText (final String key, final String defaultString) {
final Text text
= new Text ('\n' + localize (key, defaultString) + '\n');
text.setFontColor ("#ff0000");
add (text);
}
private UserSearcher createSearcher () {
final UserSearcher searcher = new UserSearcher ();
searcher.setOwnFormContainer (false);
searcher.setShowMiddleNameInSearch (false);
searcher.setLastNameLength (14);
searcher.setFirstNameLength (14);
searcher.setPersonalIDLength (12);
searcher.setMaxFoundUserCols (MAX_FOUND_USER_COLS);
searcher.setMaxFoundUserRows (MAX_FOUND_USER_ROWS);
return searcher;
}
private static SchoolClassMemberHome getSchoolClassMemberHome () {
try {
return (SchoolClassMemberHome) IDOLookup.getHome (SchoolClassMember.class);
} catch (Exception e) {
e.printStackTrace ();
return null;
}
}
protected boolean isAdmin(IWContext iwc) {
if (iwc.hasEditPermission(this))
return true;
try {
return getBusiness().getUserBusiness().isRootCommuneAdministrator(iwc.getCurrentUser());
}
catch (RemoteException re) {
return false;
}
}
}