/*
* Created on Nov 8, 2004
*
* TODO To change the template for this generated file go to Window -
* Preferences - Java - Code Style - Code Templates
*/
package se.agura.applications.vacation.presentation;
import java.rmi.RemoteException;
import java.util.Collection;
import java.util.Iterator;
import java.util.Map;
import se.agura.applications.vacation.business.VacationBusiness;
import se.agura.applications.vacation.business.VacationConstants;
import se.agura.applications.vacation.data.VacationRequest;
import se.agura.applications.vacation.data.VacationTime;
import se.agura.applications.vacation.data.VacationType;
import com.idega.block.process.data.CaseLog;
import com.idega.business.IBOLookup;
import com.idega.business.IBOLookupException;
import com.idega.business.IBORuntimeException;
import com.idega.core.builder.data.ICPage;
import com.idega.idegaweb.IWApplicationContext;
import com.idega.idegaweb.IWBundle;
import com.idega.idegaweb.IWResourceBundle;
import com.idega.presentation.Block;
import com.idega.presentation.IWContext;
import com.idega.presentation.Table;
import com.idega.presentation.text.Break;
import com.idega.presentation.text.Link;
import com.idega.presentation.text.Text;
import com.idega.presentation.ui.GenericButton;
import com.idega.presentation.ui.InterfaceObject;
import com.idega.presentation.ui.SubmitButton;
import com.idega.user.business.UserBusiness;
import com.idega.user.data.Group;
import com.idega.user.data.User;
import com.idega.util.IWTimestamp;
import com.idega.util.PersonalIDFormatter;
/**
* @author Anna
*/
public abstract class VacationBlock extends Block {
protected static final String IW_BUNDLE_IDENTIFIER = "se.agura.applications.vacation";
protected static final String PARAMETER_ACTION = "vac_action";
protected static final String PARAMETER_PRIMARY_KEY_VAC = VacationConstants.PARAMETER_PRIMARY_KEY;
//protected static final String PARAMETER_PRIMARY_KEY_VAC_TIME = "vac_time_pk";
//protected static final String PARAMETER_PRIMARY_KEY_VAC_TYPE = "vac_type_pk";
protected static final String ACTION_CANCEL = "cancel";
protected static final String ACTION_SEND = "send";
protected static final String ACTION_DENIED = "denied";
protected static final String ACTION_APPROVED = "approved";
protected static final String ACTION_BACK = "back";
protected static final String ACTION_PAGE_FOUR = "page_four";
protected static final String ACTION_SAVE = "save";
protected static final String ACTION_FORWARD = "forward";
protected static final String ACTION_FORWARD_VIEW = "forward_view";
protected static final String ACTION_CLOSED = "closed";
private IWBundle iwb;
private IWResourceBundle iwrb;
private ICPage iPage;
private String iTextStyleClass;
private String iHeaderStyleClass;
private String iLinkStyleClass;
private String iInputStyleClass;
private String iButtonStyleClass;
private String iRadioStyleClass;
private String iLogColor = "#00FFFF";
protected int iCellpadding = 3;
protected int iHeaderColumnWidth = 260;
private int iLogColorColumnWidth = 12;
protected String iWidth = Table.HUNDRED_PERCENT;
public void main(IWContext iwc) throws Exception {
iwb = getBundle(iwc);
iwrb = getResourceBundle(iwc);
present(iwc);
}
protected void showMessage(String message) {
add(getHeader(message));
add(new Break(2));
Link link = getLink(getResourceBundle().getLocalizedString("meeting.home_page", "Back to My Page"));
if (getPage() != null) {
link.setPage(getPage());
}
add(link);
}
protected Table getPersonInfo(IWContext iwc, User user) {
Table personInfo = new Table(2, 3);
personInfo.setBorder(0);
personInfo.setCellspacing(0);
personInfo.setCellpadding(iCellpadding);
personInfo.setWidth(1, iHeaderColumnWidth);
personInfo.setCellpaddingLeft(1, 1, 0);
personInfo.setCellpaddingLeft(1, 2, 0);
personInfo.setCellpaddingLeft(1, 3, 0);
int row = 1;
String name = user.getName();
String personalID = PersonalIDFormatter.format(user.getPersonalID(), iwc.getCurrentLocale());
String parish = "";
try {
Group group = getBusiness(iwc).getUserParish(user);
if (group != null) {
parish = group.getName();
}
}
catch (RemoteException re) {
log(re);
}
personInfo.add(getHeader(getResourceBundle().getLocalizedString("vacation.user_name", "Name")), 1, row);
personInfo.add(getText(name), 2, row++);
personInfo.add(getHeader(getResourceBundle().getLocalizedString("vacation.user_personal_id", "PersonalID")), 1, row);
personInfo.add(getText(personalID), 2, row++);
personInfo.add(getHeader(getResourceBundle().getLocalizedString("vacation.Parish", "Parish")), 1, row);
personInfo.add(getText(parish), 2, row++);
return personInfo;
}
protected Table showVacationRequest(IWContext iwc, VacationRequest vacation) {
Table table = new Table();
//table.setWidth(iWidth);
table.setCellpadding(iCellpadding);
table.setCellspacing(0);
table.setColumns(9);
int row = 1;
VacationType vacationType = vacation.getVacationType();
IWTimestamp fromDate = new IWTimestamp(iwc.getCurrentLocale(), vacation.getFromDate());
IWTimestamp toDate = new IWTimestamp(iwc.getCurrentLocale(), vacation.getToDate());
IWTimestamp date = new IWTimestamp(iwc.getCurrentLocale(), vacation.getCreatedDate());
int selectedHours = vacation.getOrdinaryWorkingHours();
Collection times = null;
try {
times = getBusiness(iwc).getVacationTimes(vacation);
}
catch (RemoteException re) {
log(re);
}
Map extraInfo = null;
try {
extraInfo = getBusiness(iwc).getExtraVacationTypeInformation(vacationType);
}
catch (RemoteException re) {
log(re);
}
table.mergeCells(2, row, table.getColumns(), row);
table.add(getHeader(getResourceBundle().getLocalizedString("vacation.time.required_vacation", "Required vacation")), 1, row);
table.add(getText(getResourceBundle().getLocalizedString("vacation.time.from_date", "From date") + ":" + Text.NON_BREAKING_SPACE), 2, row);
table.add(getText(fromDate.getLocaleDate(iwc.getCurrentLocale())), 2, row++);
table.mergeCells(2, row, table.getColumns(), row);
table.add(getText(getResourceBundle().getLocalizedString("vacation.time.to_date", "To date") + ":" + Text.NON_BREAKING_SPACE), 2, row);
table.add(getText(toDate.getLocaleDate(iwc.getCurrentLocale())), 2, row++);
table.setHeight(row++, 12);
table.add(getHeader(getResourceBundle().getLocalizedString("vacation.time.ordinary_hours", "Ordinary workinghours per day")), 1, row);
table.add(getText(String.valueOf(selectedHours) + Text.NON_BREAKING_SPACE + getResourceBundle().getLocalizedString("vacation.hours", "hours")), 2, row++);
table.setHeight(row++, 12);
if (times.size() > 0) {
int startRow = row;
table.add(getHeader(getResourceBundle().getLocalizedString("vacation.time.period", "Working days and hours under the period")), 1, row);
table.add(getText(getResourceBundle().getLocalizedString("vacation.time.week", "Week")), 2, row);
table.add(getText(getResourceBundle().getLocalizedString("vacation.time.monday", "Mo")), 3, row);
table.add(getText(getResourceBundle().getLocalizedString("vacation.time.tuesday", "Tu")), 4, row);
table.add(getText(getResourceBundle().getLocalizedString("vacation.time.wednesday", "We")), 5, row);
table.add(getText(getResourceBundle().getLocalizedString("vacation.time.thursday", "th")), 6, row);
table.add(getText(getResourceBundle().getLocalizedString("vacation.time.friday", "Fr")), 7, row);
table.add(getText(getResourceBundle().getLocalizedString("vacation.time.saturday", "Sa")), 8, row);
table.add(getText(getResourceBundle().getLocalizedString("vacation.time.sunday", "Su")), 9, row++);
Iterator iter = times.iterator();
while (iter.hasNext()) {
VacationTime time = (VacationTime) iter.next();
table.add(getText(String.valueOf(time.getWeekNumber())), 2, row);
if (time.getMonday() > 0) {
table.add(getText(String.valueOf(time.getMonday())), 3, row);
}
if (time.getTuesday() > 0) {
table.add(getText(String.valueOf(time.getTuesday())), 4, row);
}
if (time.getWednesday() > 0) {
table.add(getText(String.valueOf(time.getWednesday())), 5, row);
}
if (time.getThursday() > 0) {
table.add(getText(String.valueOf(time.getThursday())), 6, row);
}
if (time.getFriday() > 0) {
table.add(getText(String.valueOf(time.getFriday())), 7, row);
}
if (time.getSaturday() > 0) {
table.add(getText(String.valueOf(time.getSaturday())), 8, row);
}
if (time.getSunday() > 0) {
table.add(getText(String.valueOf(time.getSunday())), 9, row);
}
row++;
}
table.setVerticalAlignment(1, startRow, Table.VERTICAL_ALIGN_TOP);
table.mergeCells(1, startRow, 1, row -1);
table.setHeight(row++, 12);
}
table.mergeCells(2, row, table.getColumns(), row);
table.add(getHeader(getResourceBundle().getLocalizedString("vacation.type", "Type")), 1, row);
table.add(getText(getResourceBundle().getLocalizedString(vacationType.getLocalizedKey())), 2, row++);
table.setHeight(row++, 12);
if (extraInfo != null && extraInfo.size() > 0) {
Iterator iter = extraInfo.keySet().iterator();
while (iter.hasNext()) {
try {
String key = (String) iter.next();
String metaType = getBusiness(iwc).getExtraInformationType(vacationType, key);
String value = vacation.getExtraTypeInformation(key);
if (value != null) {
table.add(getHeader(getResourceBundle().getLocalizedString("vacation_type_metadata." + key, key)), 1, row);
table.mergeCells(2, row, table.getColumns(), row);
if (metaType.equals("com.idega.presentation.ui.TextArea") || metaType.equals("com.idega.presentation.ui.TextInput")) {
table.add(getText(value), 2, row);
}
else if (metaType.equals("com.idega.presentation.ui.RadioButton")) {
table.add(getText(getResourceBundle().getLocalizedString("vacation_type_metadata_boolean." + value, value)), 2, row);
}
else if (metaType.equals("com.idega.block.media.presentation.FileChooser")) {
Link link = getLink(getResourceBundle().getLocalizedString("vacation_request.attachment", "Attachment"));
link.setTarget(Link.TARGET_NEW_WINDOW);
link.setFile(Integer.parseInt(value));
table.add(link, 2, row);
}
row++;
}
}
catch (RemoteException re) {
log(re);
}
}
table.setHeight(row++, 12);
}
if (vacation.getComment() != null) {
table.add(getHeader(getResourceBundle().getLocalizedString("vacation.motivation","Motivation")),1,row);
table.mergeCells(2, row, table.getColumns(), row);
table.add(getText(vacation.getComment()), 2, row++);
}
table.mergeCells(2, row, table.getColumns(), row);
table.add(getHeader(getResourceBundle().getLocalizedString("vacation.request_date", "Request date")), 1, row);
table.add(getText(date.getLocaleDate(iwc.getCurrentLocale())), 2, row++);
table.setHeight(row++, 12);
table.setWidth(1, iHeaderColumnWidth);
table.setCellpaddingLeft(1, 0);
return table;
}
protected Table getVacationActionOverview(IWContext iwc, VacationRequest vacation) throws RemoteException {
Collection logs = getBusiness(iwc).getLogs(vacation);
if (logs != null) {
Table table = new Table();
table.setWidth(iWidth);
table.setCellpadding(0);
table.setCellspacing(0);
int row = 1;
Iterator iter = logs.iterator();
while (iter.hasNext()) {
CaseLog log = (CaseLog) iter.next();
User performer = log.getPerformer();
String comment = log.getComment();
IWTimestamp timestamp = new IWTimestamp(log.getTimeStamp());
String status = log.getCaseStatusAfter().getStatus();
Table logTable = new Table(3, 3);
logTable.setCellpadding(iCellpadding);
logTable.setCellspacing(0);
logTable.mergeCells(1, 1, 1, 3);
logTable.setColor(1, 1, iLogColor);
logTable.setWidth(2, iHeaderColumnWidth);
logTable.setWidth(1, iLogColorColumnWidth);
String action = "";
if (status.equals(getBusiness(iwc).getCaseStatusDenied().getStatus())) {
action = getResourceBundle().getLocalizedString("vacation.rejected_by", "Rejected by");
}
else if (status.equals(getBusiness(iwc).getCaseStatusGranted().getStatus())) {
action = getResourceBundle().getLocalizedString("vacation.granted_by", "Granted by");
}
else if (status.equals(getBusiness(iwc).getCaseStatusMoved().getStatus())) {
action = getResourceBundle().getLocalizedString("vacation.supported_by", "Supported by");
}
logTable.add(getHeader(action), 2, 1);
logTable.add(getText(performer.getName()), 3, 1);
logTable.add(getHeader(getResourceBundle().getLocalizedString("vacation.message", "Message")), 2, 2);
logTable.add(getText(comment), 3, 2);
logTable.add(getHeader(getResourceBundle().getLocalizedString("vacation.date", "Date")), 2, 3);
logTable.add(getText(timestamp.getLocaleDate(iwc.getCurrentLocale())), 3, 3);
table.add(logTable, 1, row);
table.setCellBorder(1, row++, 1, "#dfdfdf", "solid");
if (iter.hasNext()) {
table.setHeight(row++, 6);
}
}
return table;
}
return null;
}
protected VacationBusiness getBusiness(IWApplicationContext iwac) {
try {
return (VacationBusiness) IBOLookup.getServiceInstance(iwac, VacationBusiness.class);
}
catch (IBOLookupException ible) {
throw new IBORuntimeException(ible);
}
}
protected UserBusiness getUserBusiness(IWApplicationContext iwac) {
try {
return (UserBusiness) IBOLookup.getServiceInstance(iwac, UserBusiness.class);
}
catch (IBOLookupException ible) {
throw new IBORuntimeException(ible);
}
}
public abstract void present(IWContext iwc);
public String getBundleIdentifier() {
return IW_BUNDLE_IDENTIFIER;
}
/**
* @return Returns the iwb.
*/
protected IWBundle getBundle() {
return iwb;
}
/**
* @return Returns the iwrb.
*/
protected IWResourceBundle getResourceBundle() {
return iwrb;
}
protected Text getText(String string) {
Text text = new Text(string);
if (iTextStyleClass != null) {
text.setStyleClass(iTextStyleClass);
}
return text;
}
protected Text getHeader(String string) {
Text text = new Text(string);
if (iHeaderStyleClass != null) {
text.setStyleClass(iHeaderStyleClass);
}
return text;
}
protected Link getLink(String string) {
Link link = new Link(string);
if (iLinkStyleClass != null) {
link.setStyleClass(iLinkStyleClass);
}
return link;
}
protected InterfaceObject getInput(InterfaceObject input) {
if (iInputStyleClass != null) {
input.setStyleClass(iInputStyleClass);
}
return input;
}
protected InterfaceObject getRadioButton(InterfaceObject radioButton) {
if (iRadioStyleClass != null) {
radioButton.setStyleClass(iRadioStyleClass);
}
return radioButton;
}
protected GenericButton getButton(GenericButton button) {
if (iButtonStyleClass != null) {
button.setStyleClass(iButtonStyleClass);
}
return button;
}
public SubmitButton getSendButton() {
SubmitButton sendButton = (SubmitButton) getButton(new SubmitButton(getResourceBundle().getLocalizedString("vacation_approver.send_application", "Send"), PARAMETER_ACTION, ACTION_SEND));
sendButton.setToolTip(getResourceBundle().getLocalizedString("vacation.send.tooltip","Sends your application in"));
sendButton.setSubmitConfirm(getResourceBundle().getLocalizedString("vacation.send.popup","Are you sure you want to send the application now?"));
return sendButton;
}
public GenericButton getCancelButton() {
GenericButton cancelButton = getButton(new GenericButton(getResourceBundle().getLocalizedString("vacation_approver.cancel", "Cancel")));
if (getPage() != null) {
cancelButton.setPageToOpen(getPage());
}
cancelButton.setToolTip(getResourceBundle().getLocalizedString("vacation.cancel.tooltip","Cancels and returns to My site"));
return cancelButton;
}
/**
* @param buttonStyleClass The buttonStyleClass to set.
*/
public void setButtonStyleClass(String buttonStyleClass) {
iButtonStyleClass = buttonStyleClass;
}
/**
* @param headerStyleClass The headerStyleClass to set.
*/
public void setHeaderStyleClass(String headerStyleClass) {
iHeaderStyleClass = headerStyleClass;
}
/**
* @param inputStyleClass The inputStyleClass to set.
*/
public void setInputStyleClass(String inputStyleClass) {
iInputStyleClass = inputStyleClass;
}
/**
* @param linkStyleClass The linkStyleClass to set.
*/
public void setLinkStyleClass(String linkStyleClass) {
iLinkStyleClass = linkStyleClass;
}
/**
* @param radioStyleClass The radioStyleClass to set.
*/
public void setRadioStyleClass(String radioStyleClass) {
iRadioStyleClass = radioStyleClass;
}
/**
* @param textStyleClass The textStyleClass to set.
*/
public void setTextStyleClass(String textStyleClass) {
iTextStyleClass = textStyleClass;
}
/**
* @return Returns the iPage.
*/
protected ICPage getPage() {
return iPage;
}
/**
*
* @param page
* The page to set.
*/
public void setPage(ICPage page) {
iPage = page;
}
/**
* @param cellpadding The cellpadding to set.
*/
public void setCellpadding(int cellpadding) {
iCellpadding = cellpadding;
}
/**
* @param headerColumnWidth The headerColumnWidth to set.
*/
public void setHeaderColumnWidth(int headerColumnWidth) {
iHeaderColumnWidth = headerColumnWidth;
}
/**
* @param logColor The logColor to set.
*/
public void setLogColor(String logColor) {
iLogColor = logColor;
}
/**
* @param logColorColumnWidth The logColorColumnWidth to set.
*/
public void setLogColorColumnWidth(int logColorColumnWidth) {
iLogColorColumnWidth = logColorColumnWidth;
}
}